<?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>14569</bug_id>
          
          <creation_ts>2007-07-10 00:16:56 -0700</creation_ts>
          <short_desc>Repro crash due to saved state not being cleared when select and textarea elements are adopted by another document</short_desc>
          <delta_ts>2007-07-17 10:51: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>Forms</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>5093</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2007-07-10 00:16:56 -0700</bug_when>
    <thetext>This bug is very similar to bug 13701. The patch for that bug left out textarea and select elements. I am going to attach a patch that fixes that and includes a test for both bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5091</commentid>
    <comment_count>1</comment_count>
      <attachid>15461</attachid>
    <who name="">mitz</who>
    <bug_when>2007-07-10 00:28:45 -0700</bug_when>
    <thetext>Created attachment 15461
[DO NOT LAND YET] Unregister and reregister when moving from one document to another

Another way to do this is to implement HTMLGenericFormElement::{will,did}MoveToNewOwnerDocument, but I am afraid that that will require either a registersWithDocument() function like I had in the first patch for bug 14400 or for HTMLInputElement::didMove... not to call the base class implementation.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5090</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2007-07-10 00:47:49 -0700</bug_when>
    <thetext>I&apos;m okay with this patch - but I just had a discussion with mitz on IRC.  I think now that we have these new cases that have to patch in to the will/did move document calls that the original patch in 14400 is more appropriate.  It would be very easy to adapt here.

I look at it this way.  If we land this new patch, we&apos;ll be maintaining 3 distinct implementations of the will/did move document calls.  One in TextArea, one in Select, and one in Input.  However, they are largely duplicates of each other.

If we go back to Mitz&apos;s original patch in 14400, there will be yet another new call to override in genericform and inputelement, and we&apos;ll have to maintain it in these multiple places, but it will be much more targeted code will be duplicated.

Mitz said he was starting to lean towards that solution as well, but I&apos;m only slightly in favor of reverting back to the original 14400 patch  =D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5086</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2007-07-10 00:49:51 -0700</bug_when>
    <thetext>&quot;but it will be much more targeted code will be duplicated.&quot;

should read 

&quot;but it will be much more targeted code that makes sense, and not as much code will be duplicated&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5085</commentid>
    <comment_count>4</comment_count>
      <attachid>15461</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-07-10 02:21:47 -0700</bug_when>
    <thetext>Comment on attachment 15461
[DO NOT LAND YET] Unregister and reregister when moving from one document to another

This looks like a fine fix to the bug in any case. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5009</commentid>
    <comment_count>5</comment_count>
      <attachid>15474</attachid>
    <who name="">mitz</who>
    <bug_when>2007-07-11 09:35:48 -0700</bug_when>
    <thetext>Created attachment 15474
Unregister and reregister when moving from one document to another, using a registersWithDocument predicate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4602</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-07-16 22:40:09 -0700</bug_when>
    <thetext>Since there are tons of bits available in HTMLGenericFormElement, I grabbed a bit and have what I think is an even better fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4564</commentid>
    <comment_count>7</comment_count>
      <attachid>15540</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-07-16 23:42:05 -0700</bug_when>
    <thetext>Created attachment 15540
unregister/register when moving between documents with class to factor out state logic</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4559</commentid>
    <comment_count>8</comment_count>
      <attachid>15540</attachid>
    <who name="">mitz</who>
    <bug_when>2007-07-17 00:04:50 -0700</bug_when>
    <thetext>Comment on attachment 15540
unregister/register when moving between documents with class to factor out state logic

Cool! This is the &quot;third option&quot; that I told Brady is was considering.

+        (WebCore::HTMLSelectElement::~HTMLSelectElement): Removed the call to
+        unregisterFormElementWithState.

 HTMLSelectElement::~HTMLSelectElement()
 {
-    document()-&gt;unregisterFormElementWithState(this);
 }
 
I don&apos;t understand why you left the empty destructor in this case but not in the text area case.

r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4522</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-07-17 08:21:28 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I don&apos;t understand why you left the empty destructor in this case but not in
&gt; the text area case.

Because HTMLSelectElement had members with non-trivial destructors I decided not to rely on the compiler-generated destructor. Probably not a good reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4496</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-07-17 10:51:10 -0700</bug_when>
    <thetext>Sending        LayoutTests/ChangeLog
Adding         LayoutTests/fast/forms/saved-state-adoptNode-crash-expected.txt
Adding         LayoutTests/fast/forms/saved-state-adoptNode-crash.html
Sending        WebCore/ChangeLog
Sending        WebCore/dom/Document.cpp
Sending        WebCore/dom/Document.h
Sending        WebCore/html/HTMLGenericFormElement.cpp
Sending        WebCore/html/HTMLGenericFormElement.h
Sending        WebCore/html/HTMLInputElement.cpp
Sending        WebCore/html/HTMLInputElement.h
Sending        WebCore/html/HTMLSelectElement.cpp
Sending        WebCore/html/HTMLSelectElement.h
Sending        WebCore/html/HTMLTextAreaElement.cpp
Sending        WebCore/html/HTMLTextAreaElement.h
Transmitting file data ..............
Committed revision 24363.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15461</attachid>
            <date>2007-07-10 00:28:45 -0700</date>
            <delta_ts>2007-07-17 00:06:36 -0700</delta_ts>
            <desc>[DO NOT LAND YET] Unregister and reregister when moving from one document to another</desc>
            <filename>14569_r1.patch</filename>
            <type>text/plain</type>
            <size>5781</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDEzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMDctMDctMTAgIE1pdHogUGV0dGVsICA8bWl0ekB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZml4
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTY5CisgICAgICAgICAg
UmVwcm8gY3Jhc2ggZHVlIHRvIHNhdmVkIHN0YXRlIG5vdCBiZWluZyBjbGVhcmVkIHdoZW4gc2Vs
ZWN0IGFuZCB0ZXh0YXJlYSBlbGVtZW50cyBhcmUgYWRvcHRlZCBieSBhbm90aGVyIGRvY3VtZW50
CisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy9zYXZlZC1zdGF0ZS1hZG9wdE5vZGUtY3Jhc2gu
aHRtbAorCisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyRG9j
dW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRB
cmVhRWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCk6CisgICAg
ICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50Lmg6CisKIDIwMDctMDctMDkgIFFpbmcgWmhh
byAgPHFpbmdAc3RhaWtvcy5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvcmdlIFN0YWlr
b3MuCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDI0MTMxKQor
KysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA2Myw0ICsxMDYzLDE2IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNjcm9sbFRvU2VsZWN0
aW8KICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEJveCo+KHJlbmRlcmVyKCkpLT5zZWxl
Y3Rpb25DaGFuZ2VkKCk7CiB9CiAKK3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OndpbGxNb3ZlVG9O
ZXdPd25lckRvY3VtZW50KCkKK3sKKyAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1l
bnRXaXRoU3RhdGUodGhpcyk7CisgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6d2lsbE1vdmVU
b05ld093bmVyRG9jdW1lbnQoKTsKK30KKwordm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6ZGlkTW92
ZVRvTmV3T3duZXJEb2N1bWVudCgpCit7CisgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxl
bWVudFdpdGhTdGF0ZSh0aGlzKTsKKyAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpkaWRNb3Zl
VG9OZXdPd25lckRvY3VtZW50KCk7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDI0MTMxKQorKysgV2ViQ29yZS9odG1sL0hU
TUxTZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsMTAgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgc2Nyb2xsVG9TZWxlY3Rpb24oKTsKIAorcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworICAgIHZpcnR1
YWwgdm9pZCBkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CisgICAgCiBwcml2YXRlOgogICAg
IHZvaWQgcmVjYWxjTGlzdEl0ZW1zKCkgY29uc3Q7CiAgICAgdm9pZCBkZXNlbGVjdEl0ZW1zKEhU
TUxPcHRpb25FbGVtZW50KiBleGNsdWRlRWxlbWVudCA9IDApOwpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
VGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjQxMzEpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFRleHRBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NCw0ICszNTQsMTYgQEAg
U2VsZWN0aW9uIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNlbGVjdGlvbgogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkpLT5zZWxlY3Rpb24oY2FjaGVk
U2VsU3RhcnQsIGNhY2hlZFNlbEVuZCk7CiB9CiAKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6
d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQoreworICAgIGRvY3VtZW50KCktPnVucmVnaXN0
ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKKyAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
Ojp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworfQorCit2b2lkIEhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQoreworICAgIGRvY3VtZW50KCktPnJl
Z2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7CisgICAgSFRNTEdlbmVyaWNGb3JtRWxl
bWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworfQorICAgIAogfSAvLyBuYW1lc3Bh
Y2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaAkocmV2aXNpb24gMjQxMzEpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Myw2ICs5MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWNoZVNlbGVjdGlvbihpbnQgcywgaW50
IGUpIHsgY2FjaGVkU2VsU3RhcnQgPSBzOyBjYWNoZWRTZWxFbmQgPSBlOyB9OwogICAgIFNlbGVj
dGlvbiBzZWxlY3Rpb24oKSBjb25zdDsKIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCB3
aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9O
ZXdPd25lckRvY3VtZW50KCk7CisgICAgCiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlVmFsdWUo
KSBjb25zdDsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxMzEpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwNy0wNy0xMCAgTWl0eiBQ
ZXR0ZWwgIDxtaXR6QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgLSB0ZXN0IGZvciBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDU2OQorICAgICAgICAgIFJlcHJvIGNyYXNoIGR1ZSB0byBzYXZlZCBzdGF0
ZSBub3QgYmVpbmcgY2xlYXJlZCB3aGVuIHNlbGVjdCBhbmQgdGV4dGFyZWEgZWxlbWVudHMgYXJl
IGFkb3B0ZWQgYnkgYW5vdGhlciBkb2N1bWVudAorICAgICAgICAgIGFuZCBmb3IgaHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MDEKKyAgICAgICAgICBSRUdSRVNTSU9O
IChyMjE0MzEpOiBSZXByb2R1Y2libGUgY3Jhc2ggcmVzdWx0aW5nIGZyb20gY2FsbGluZyBhZG9w
dE5vZGUgb24gYSBwYXNzd29yZCBmaWVsZAorCisgICAgICAgICogZmFzdC9mb3Jtcy9zYXZlZC1z
dGF0ZS1hZG9wdE5vZGUtY3Jhc2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2Zvcm1zL3NhdmVkLXN0YXRlLWFkb3B0Tm9kZS1jcmFzaC5odG1sOiBBZGRlZC4KKwogMjAwNy0w
Ny0wOSAgQWxpY2UgTGl1ICA8YWxpY2UubGl1QGFwcGxlLmNvbT4KIAogICAgICAgICAqIHdpbi9T
a2lwcGVkOgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zYXZlZC1zdGF0ZS1hZG9wdE5v
ZGUtY3Jhc2gtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9y
bXMvc2F2ZWQtc3RhdGUtYWRvcHROb2RlLWNyYXNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2F2ZWQtc3RhdGUtYWRvcHROb2RlLWNyYXNoLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorU1VDQ0VTUwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9zYXZlZC1zdGF0ZS1hZG9wdE5vZGUtY3Jhc2guaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NhdmVkLXN0YXRlLWFkb3B0Tm9kZS1j
cmFzaC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zYXZlZC1z
dGF0ZS1hZG9wdE5vZGUtY3Jhc2guaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAor
PHNlbGVjdCBpZD0ic2VsZWN0Ij4KKyAgICA8b3B0aW9uPlRydWZmbGVzPC9vcHRpb24+Cis8L3Nl
bGVjdD4KKzx0ZXh0YXJlYSBpZD0idGV4dGFyZWEiPgorTWFyc2htYWxsb3dzCis8L3RleHRhcmVh
PgorPGlmcmFtZSBpZD0iaWZyYW1lIiBzcmM9ImRhdGE6dGV4dC9odG1sLCI+PC9pZnJhbWU+Cis8
aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSJwYXNzd29yZCIgdmFsdWU9InNlaWtvb0MiPgorPHNj
cmlwdD4KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHZhciBuZXdEb2MgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiaWZyYW1lIikuY29udGVudERvY3VtZW50OworICAgIG5ld0RvYy5h
ZG9wdE5vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlbGVjdCIpKTsKKyAgICBuZXdEb2Mu
YWRvcHROb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0YXJlYSIpKTsKKyAgICBuZXdE
b2MuYWRvcHROb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXNzd29yZCIpKTsKKyAgICBs
b2NhdGlvbi5ocmVmPSJkYXRhOnRleHQvaHRtbCxTVUNDRVNTPHNjcmlwdD5pZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk8L3Nj
ciIgKyAiaXB0PiI7Cis8L3NjcmlwdD4K
</data>
<flag name="review"
          id="6419"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15474</attachid>
            <date>2007-07-11 09:35:48 -0700</date>
            <delta_ts>2007-07-17 00:06:58 -0700</delta_ts>
            <desc>Unregister and reregister when moving from one document to another, using a registersWithDocument predicate</desc>
            <filename>14569_r2.patch</filename>
            <type>text/plain</type>
            <size>9326</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDIwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMDctMDctMTEgIE1pdHogUGV0dGVsICA8bWl0ekB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZml4
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTY5CisgICAgICAgICAg
UmVwcm8gY3Jhc2ggZHVlIHRvIHNhdmVkIHN0YXRlIG5vdCBiZWluZyBjbGVhcmVkIHdoZW4gc2Vs
ZWN0IGFuZCB0ZXh0YXJlYSBlbGVtZW50cyBhcmUgYWRvcHRlZCBieSBhbm90aGVyIGRvY3VtZW50
CisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy9zYXZlZC1zdGF0ZS1hZG9wdE5vZGUtY3Jhc2gu
aHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6aXNGb3JtRWxlbWVudFJlZ2lzdGVyZWQpOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwv
SFRNTEdlbmVyaWNGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50OjpjbG9zZVJlbmRlcmVyKTogQ2hhbmdlZCB0byB1c2UKKyAgICAgICAgcmVn
aXN0ZXJzV2l0aERvY3VtZW50KCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50Ojp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCk6IEFkZGVkLgorICAgICAgICBVbnJl
Z2lzdGVycyB0aGUgZWxlbWVudCB3aXRoIHRoZSBkb2N1bWVudCBpZiBuZWVkZWQuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpkaWRNb3ZlVG9OZXdPd25lckRvY3Vt
ZW50KTogQWRkZWQuCisgICAgICAgIFJlZ2lzdGVycyB0aGUgZWxlbWVudCB3aXRoIHRoZSBkb2N1
bWVudCBpZiBuZWVkZWQuCisgICAgICAgICogaHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpyZWdpc3RlcnNXaXRo
RG9jdW1lbnQpOiBBZGRlZC4gUmV0dXJucworICAgICAgICB3aGV0aGVyIHRoZSBlbGVtZW50IHJl
Z2lzdGVycyB3aXRoIHRoZSBkb2N1bWVudCB0byBoYXZlIGl0cyBzdGF0ZSBzYXZlZC4gCisgICAg
ICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KTogUmVtb3ZlZCB0aGUgcGFy
dAorICAgICAgICB0aGUgd2FzIG1vdmVkIHRvIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpyZWdpc3RlcnNX
aXRoRG9jdW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAgICAg
ICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OjpyZWdpc3RlcnNXaXRoRG9jdW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6
cmVnaXN0ZXJzV2l0aERvY3VtZW50KToKKwogMjAwNy0wNy0wOSAgSnVzdGluIEdhcmNpYSAgPGp1
c3Rpbi5nYXJjaWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRl
eDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCShyZXZpc2lvbiAyNDIwMSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5NSw3ICsyOTUsNiBAQCBwdWJsaWM6CiAgICAgLy8gTWFjaGluZXJ5IGZv
ciBzYXZpbmcgYW5kIHJlc3RvcmluZyBzdGF0ZSB3aGVuIHlvdSBsZWF2ZSBhbmQgdGhlbiBnbyBi
YWNrIHRvIGEgcGFnZS4KICAgICB2b2lkIHJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUoSFRN
TEdlbmVyaWNGb3JtRWxlbWVudCogZSkgeyBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5hZGQoZSk7
IH0KICAgICB2b2lkIHVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZShIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50KiBlKSB7IG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLnJlbW92ZShlKTsgfQotICAg
IGJvb2wgaXNGb3JtRWxlbWVudFJlZ2lzdGVyZWQoSFRNTEdlbmVyaWNGb3JtRWxlbWVudCogZSkg
eyByZXR1cm4gbV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuY29udGFpbnMoZSk7IH0KICAgICBWZWN0
b3I8U3RyaW5nPiBmb3JtRWxlbWVudHNTdGF0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3RhdGVG
b3JOZXdGb3JtRWxlbWVudHMoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBib29sIGhhc1N0
YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEdl
bmVyaWNGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxHZW5l
cmljRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNDIwMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
R2VuZXJpY0Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDggKzIwNywxMSBA
QCB2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQ6OnJlc3RvcmVTdGF0CiAKIHZvaWQgSFRNTEdl
bmVyaWNGb3JtRWxlbWVudDo6Y2xvc2VSZW5kZXJlcigpCiB7CisgICAgaWYgKCFyZWdpc3RlcnNX
aXRoRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgRG9jdW1lbnQqIGRvYyA9IGRv
Y3VtZW50KCk7Ci0gICAgaWYgKGRvYy0+aXNGb3JtRWxlbWVudFJlZ2lzdGVyZWQodGhpcykgJiYg
ZG9jLT5oYXNTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cygpKSB7CisgICAgaWYgKGRvYy0+aGFzU3Rh
dGVGb3JOZXdGb3JtRWxlbWVudHMoKSkgewogICAgICAgICBTdHJpbmcgc3RhdGU7CiAgICAgICAg
IGlmIChkb2MtPnRha2VTdGF0ZUZvckZvcm1FbGVtZW50KG5hbWUoKS5pbXBsKCksIHR5cGUoKS5p
bXBsKCksIHN0YXRlKSkKICAgICAgICAgICAgIHJlc3RvcmVTdGF0ZShzdGF0ZSk7CkBAIC0yMzAs
NCArMjMzLDE4IEBAIEhUTUxGb3JtRWxlbWVudCogSFRNTEdlbmVyaWNGb3JtRWxlbWVudDoKICAg
ICByZXR1cm4gbV9mb3JtOwogfQogCit2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQ6OndpbGxN
b3ZlVG9OZXdPd25lckRvY3VtZW50KCkKK3sKKyAgICBpZiAocmVnaXN0ZXJzV2l0aERvY3VtZW50
KCkpCisgICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0
aGlzKTsKKyAgICBIVE1MRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworfQor
Cit2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KQoreworICAgIGlmIChyZWdpc3RlcnNXaXRoRG9jdW1lbnQoKSkKKyAgICAgICAgZG9jdW1lbnQo
KS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKKyAgICBIVE1MRWxlbWVudDo6
ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJjb3Jl
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50LmgJKHJldmlzaW9uIDI0MjAx
KQorKysgV2ViQ29yZS9odG1sL0hUTUxHZW5lcmljRm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtOTYsOSArOTYsMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JtRGVzdHJveWVkKCkg
eyBtX2Zvcm0gPSAwOyB9CiAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVU
b05ld093bmVyRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJE
b2N1bWVudCgpOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgSFRNTEZvcm1FbGVtZW50KiB2aXJ0
dWFsRm9ybSgpIGNvbnN0OwogCisgICAgLy8gV2hldGhlciB0aGUgZWxlbWVudCBjYWxscyBEb2N1
bWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSgpIHRvIHJlZ2lzdGVyIGl0c2VsZi4K
KyAgICB2aXJ0dWFsIGJvb2wgcmVnaXN0ZXJzV2l0aERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKwogICAgIEhUTUxGb3JtRWxlbWVudCogbV9mb3JtOwogICAgIGJvb2wgbV9kaXNh
YmxlZDsKICAgICBib29sIG1fcmVhZE9ubHk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyNDIwMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ4MSwxMCArMTQ4MSw3IEBAIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6ZGlkUmVzdG9yZUZyb21DYWMKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6d2lsbE1vdmVU
b05ld093bmVyRG9jdW1lbnQoKQogewogICAgIGlmIChpbnB1dFR5cGUoKSA9PSBQQVNTV09SRCkK
LSAgICAgICAgb3duZXJEb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yRGlkUmVzdG9yZUZyb21DYWNo
ZUNhbGxiYWNrKHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgb3duZXJEb2N1bWVudCgpLT51bnJl
Z2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Ci0gICAgICAgIAorICAgICAgICBkb2N1
bWVudCgpLT51bnJlZ2lzdGVyRm9yRGlkUmVzdG9yZUZyb21DYWNoZUNhbGxiYWNrKHRoaXMpOwog
ICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7
CiB9CiAKQEAgLTE0OTIsMTAgKzE0ODksMTIgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWRN
b3ZlVG9OZXdPd25lcgogewogICAgIGlmIChpbnB1dFR5cGUoKSA9PSBQQVNTV09SRCkKICAgICAg
ICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JEaWRSZXN0b3JlRnJvbUNhY2hlQ2FsbGJhY2sodGhp
cyk7Ci0gICAgZWxzZQotICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVtZW50V2l0
aFN0YXRlKHRoaXMpOwotICAgICAgICAKICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpkaWRN
b3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiB9Ci0gICAgCisKK2Jvb2wgSFRNTElucHV0RWxlbWVu
dDo6cmVnaXN0ZXJzV2l0aERvY3VtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5wdXRUeXBl
KCkgIT0gUEFTU1dPUkQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmgJKHJldmlzaW9uIDI0MjAxKQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDYgKzE5NSw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpIGNvbnN0OwogICAgIFN0cmluZyBj
b25zdHJhaW5WYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUsIGludCBtYXhMZW4pIGNv
bnN0OwogICAgIHZvaWQgcmVjaGVja1ZhbHVlKCk7CisgICAgdmlydHVhbCBib29sIHJlZ2lzdGVy
c1dpdGhEb2N1bWVudCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIG1fdmFsdWU7CiAgICAgU3RyaW5n
IG1fb3JpZ2luYWxWYWx1ZTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lv
biAyNDIwMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDgsNiArMTQ4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxpc3RCb3hEZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAgICAgdm9pZCB0eXBlQWhlYWRGaW5kKEtleWJvYXJkRXZl
bnQqKTsKICAgICB2b2lkIHNhdmVMYXN0U2VsZWN0aW9uKCk7CisgICAgdmlydHVhbCBib29sIHJl
Z2lzdGVyc1dpdGhEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIG11dGFi
bGUgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbV9saXN0SXRlbXM7CiAgICAgVmVjdG9yPGJvb2w+IG1f
Y2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb247CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50LmgJKHJldmlzaW9uIDI0MjAxKQorKysgV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgdm9pZCB1cGRhdGVWYWx1ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCByZWdp
c3RlcnNXaXRoRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBpbnQgbV9y
b3dzOwogICAgIGludCBtX2NvbHM7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDEzMSkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA3LTA3
LTEwICBNaXR6IFBldHRlbCAgPG1pdHpAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHRlc3QgZm9yIGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTY5CisgICAgICAgICAgUmVwcm8gY3Jhc2ggZHVlIHRv
IHNhdmVkIHN0YXRlIG5vdCBiZWluZyBjbGVhcmVkIHdoZW4gc2VsZWN0IGFuZCB0ZXh0YXJlYSBl
bGVtZW50cyBhcmUgYWRvcHRlZCBieSBhbm90aGVyIGRvY3VtZW50CisgICAgICAgICAgYW5kIGZv
ciBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwMQorICAgICAgICAg
IFJFR1JFU1NJT04gKHIyMTQzMSk6IFJlcHJvZHVjaWJsZSBjcmFzaCByZXN1bHRpbmcgZnJvbSBj
YWxsaW5nIGFkb3B0Tm9kZSBvbiBhIHBhc3N3b3JkIGZpZWxkCisKKyAgICAgICAgKiBmYXN0L2Zv
cm1zL3NhdmVkLXN0YXRlLWFkb3B0Tm9kZS1jcmFzaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZm9ybXMvc2F2ZWQtc3RhdGUtYWRvcHROb2RlLWNyYXNoLmh0bWw6IEFkZGVk
LgorCiAyMDA3LTA3LTA5ICBBbGljZSBMaXUgIDxhbGljZS5saXVAYXBwbGUuY29tPgogCiAgICAg
ICAgICogd2luL1NraXBwZWQ6CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NhdmVkLXN0
YXRlLWFkb3B0Tm9kZS1jcmFzaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9zYXZlZC1zdGF0ZS1hZG9wdE5vZGUtY3Jhc2gtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zYXZlZC1zdGF0ZS1hZG9wdE5v
ZGUtY3Jhc2gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitTVUNDRVNT
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NhdmVkLXN0YXRlLWFkb3B0Tm9kZS1jcmFz
aC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2F2ZWQtc3RhdGUt
YWRvcHROb2RlLWNyYXNoLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL3NhdmVkLXN0YXRlLWFkb3B0Tm9kZS1jcmFzaC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIwIEBACis8c2VsZWN0IGlkPSJzZWxlY3QiPgorICAgIDxvcHRpb24+VHJ1ZmZsZXM8L29w
dGlvbj4KKzwvc2VsZWN0PgorPHRleHRhcmVhIGlkPSJ0ZXh0YXJlYSI+CitNYXJzaG1hbGxvd3MK
KzwvdGV4dGFyZWE+Cis8aWZyYW1lIGlkPSJpZnJhbWUiIHNyYz0iZGF0YTp0ZXh0L2h0bWwsIj48
L2lmcmFtZT4KKzxpbnB1dCB0eXBlPSJwYXNzd29yZCIgaWQ9InBhc3N3b3JkIiB2YWx1ZT0ic2Vp
a29vQyI+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgdmFyIG5ld0Rv
YyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWUiKS5jb250ZW50RG9jdW1lbnQ7Cisg
ICAgbmV3RG9jLmFkb3B0Tm9kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VsZWN0IikpOwor
ICAgIG5ld0RvYy5hZG9wdE5vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRhcmVhIikp
OworICAgIG5ld0RvYy5hZG9wdE5vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3Jk
IikpOworICAgIGxvY2F0aW9uLmhyZWY9ImRhdGE6dGV4dC9odG1sLFNVQ0NFU1M8c2NyaXB0Pmlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTwvc2NyIiArICJpcHQ+IjsKKzwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15540</attachid>
            <date>2007-07-16 23:42:05 -0700</date>
            <delta_ts>2007-07-17 00:04:50 -0700</delta_ts>
            <desc>unregister/register when moving between documents with class to factor out state logic</desc>
            <filename>FormElementStatePatch.txt</filename>
            <type>text/plain</type>
            <size>37845</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDM1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzggQEAKKzIwMDctMDctMTYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZml4
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTY5CisgICAgICAgICAg
UmVwcm8gY3Jhc2ggZHVlIHRvIHNhdmVkIHN0YXRlIG5vdCBiZWluZyBjbGVhcmVkIHdoZW4gc2Vs
ZWN0IGFuZCB0ZXh0YXJlYSBlbGVtZW50cworICAgICAgICAgIGFyZSBhZG9wdGVkIGJ5IGFub3Ro
ZXIgZG9jdW1lbnQKKworICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL3NhdmVkLXN0YXRlLWFkb3B0
Tm9kZS1jcmFzaC5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKTogVXBkYXRlZCBw
YXJhbWV0ZXIgdHlwZSB0byBiZQorICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JtRWxlbWVudFdp
dGhTdGF0ZSk6IERpdHRvLgorICAgICAgICBBbHNvIHJlbW92ZWQgaXNGb3JtRWxlbWVudFJlZ2lz
dGVyZWQgZnVuY3Rpb24gYW5kIGNoYW5nZWQgdGhlIHR5cGUgb2YgdGhlCisgICAgICAgIG1fZm9y
bUVsZW1lbnRzV2l0aFN0YXRlIExpc3RIYXNoU2V0LgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5j
cHA6IChXZWJDb3JlOjpEb2N1bWVudDo6Zm9ybUVsZW1lbnRzU3RhdGUpOiBVcGRhdGVkIHRvIHVz
ZSBuZXcgdHlwZSwKKyAgICAgICAgZm9yIHNldCBjb250ZW50cyBhbmQgdG8gdXNlIG5ldyBzYXZl
U3RhdGUoKSBmdW5jdGlvbiBhbmQgb25seSBzYXZlIHN0YXRlIGZvciBlbGVtZW50cworICAgICAg
ICB0aGF0IHJldHVybiB0cnVlLgorCisgICAgICAgICogaHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVt
ZW50Lmg6IEFkZGVkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUgY2xhc3MsCisgICAg
ICAgIGRlcml2ZWQgZnJvbSBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50LCBhbmQgbW92ZWQgZG93biBh
bGwgdGhlIGJlaGF2aW9yIHJlbGF0ZWQgdG8KKyAgICAgICAgc2F2aW5nIGZvcm0gY29udHJvbCBl
bGVtZW50IHN0YXRlLiBBbHNvIHJlbW92ZWQgdGhlIHVubmVjZXNzYXJ5IGRlZmF1bHQgcGFyYW1l
dGVyCisgICAgICAgIHRvIHRoZSBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50IGNvbnN0cnVjdG9yLgor
ICAgICAgICAqIGh0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlKTogQWRkZWQuCisgICAgICAgIENhbGxzIHJlZ2lzdGVyRm9ybUVsZW1lbnRX
aXRoU3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlOjp+SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSk6IEFkZGVkLgorICAgICAgICBD
YWxscyB1bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVu
dCk6IEFkZGVkLgorICAgICAgICBDYWxscyB1bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaWRN
b3ZlVG9OZXdPd25lckRvY3VtZW50KTogQWRkZWQuCisgICAgICAgIENhbGxzIHJlZ2lzdGVyRm9y
bUVsZW1lbnRXaXRoU3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjpjbG9zZVJlbmRlcmVyKTogTW92ZWQgdG8gdGhpcyBjbGFzcyBmcm9tCisg
ICAgICAgIHRoZSBiYXNlIGNsYXNzLgorCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50
Lmg6IFVwZGF0ZWQgdGhlIGJhc2UgY2xhc3MgbmFtZSBhbmQgb3ZlcnJvZGUgc2F2ZVN0YXRlIGlu
c3RlYWQKKyAgICAgICAgb2Ygc3RhdGVWYWx1ZS4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwOiBVcGRhdGVkIHRoZSBiYXNlIGNsYXNzIG5hbWUuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50Ojppbml0KTogUmVtb3ZlZCB0aGUgY2FsbCB0byByZWdpc3RlckZv
cm1FbGVtZW50V2l0aFN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
fkhUTUxJbnB1dEVsZW1lbnQpOiBSZW1vdmVkIHRoZSBjYWxsIHRvCisgICAgICAgIHVucmVnaXN0
ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZS4gQWxzbyBjaGFuZ2VkIHRoZSBjb2RlIHRvIG9ubHkgY2Fs
bCB0aGUKKyAgICAgICAgdW5yZWdpc3RlckZvckRpZFJlc3RvcmVGcm9tQ2FjaGVDYWxsYmFjayBm
dW5jdGlvbiBmb3IgdHlwZSBQQVNTV09SRCAoY29uc2lzdGVuY3kKKyAgICAgICAgYW5kIGVmZmlj
aWVuY3kpLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0SW5wdXRUeXBl
KTogUmVtb3ZlZCBjYWxscyB0byByZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlCisgICAgICAg
IGFuZCB1bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGU7IHdlIG5vdyBsZXQgdGhlIGVsZW1l
bnQgc3RheSByZWdpc3RlcmVkIGFuZCBzaW1wbHkKKyAgICAgICAgZG9uJ3Qgc2F2ZSBvciByZXN0
b3JlIHN0YXRlIGZvciBwYXNzd29yZCBmaWVsZHMuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjpzYXZlU3RhdGUpOiBVcGRhdGVkIGZ1bmN0aW9uIG5hbWUgYW5kIHNpZ25hdHVy
ZSB0byByZXBsYWNlCisgICAgICAgIHRoZSBvbGQgc3RhdGVWYWx1ZSBmdW5jdGlvbi4gUmV0dXJu
cyBmYWxzZSBmb3IgcGFzc3dvcmQgZmllbGRzLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQpOiBSZW1vdmVkIHRoZSBjYWxsIHRv
CisgICAgICAgIHVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZS4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQpOiBSZW1vdmVk
IHRoZSBjYWxsIHRvCisgICAgICAgIHJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUuCisKKyAg
ICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50Lmg6IFVwZGF0ZWQgdGhlIGJhc2UgY2xhc3Mg
bmFtZSBhbmQgb3ZlcnJvZGUgc2F2ZVN0YXRlIGluc3RlYWQKKyAgICAgICAgb2Ygc3RhdGVWYWx1
ZS4KKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDogVXBkYXRlZCB0aGUgYmFz
ZSBjbGFzcyBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OkhUTUxT
ZWxlY3RFbGVtZW50KTogUmVtb3ZlZCB0aGUgY2FsbCB0bworICAgICAgICByZWdpc3RlckZvcm1F
bGVtZW50V2l0aFN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6On5I
VE1MU2VsZWN0RWxlbWVudCk6IFJlbW92ZWQgdGhlIGNhbGwgdG8KKyAgICAgICAgdW5yZWdpc3Rl
ckZvcm1FbGVtZW50V2l0aFN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ6OnNhdmVTdGF0ZSk6IFVwZGF0ZWQgZnVuY3Rpb24gbmFtZSBhbmQgc2lnbmF0dXJlIHRvCisg
ICAgICAgIHJlcGxhY2UgdGhlIG9sZCBzdGF0ZVZhbHVlIGZ1bmN0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldExlbmd0aCk6IFVwZGF0ZWQgdG8gdXNlIGRvY3Vt
ZW50KCkgaW5zdGVhZCBvZgorICAgICAgICBvd25lckRvY3VtZW50KCk7IHRoZSBsYXR0ZXIgaXMg
anVzdCBhIHNsb3dlciB2aXJ0dWFsLWZ1bmN0aW9uIHdheSBvZiBkb2luZyB0aGUKKyAgICAgICAg
c2FtZSB0aGluZyBpbiBhbGwgY2FzZXMgZXhjZXB0IGZvciBEb2N1bWVudCBhbmQgWFBhdGhOYW1l
c3BhY2UuCisKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaDogVXBkYXRlIHRo
ZSBiYXNlIGNsYXNzIG5hbWUsIG92ZXJyb2RlIHNhdmVTdGF0ZSBpbnN0ZWFkCisgICAgICAgIG9m
IHN0YXRlVmFsdWUsIGFuZCByZW1vdmVkIHRoZSBub3ctdW5uZWNlc3NhcnkgZXhwbGljaXQgZGVz
dHJ1Y3Rvci4KKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOiBVcGRhdGVk
IHRoZSBiYXNlIGNsYXNzIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVt
ZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50KTogUmVtb3ZlZCB0aGUgY2FsbCB0bworICAgICAgICBy
ZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRB
cmVhRWxlbWVudDo6c2F2ZVN0YXRlKTogVXBkYXRlZCBmdW5jdGlvbiBuYW1lIGFuZCBzaWduYXR1
cmUgdG8gcmVwbGFjZQorICAgICAgICB0aGUgb2xkIHN0YXRlVmFsdWUgZnVuY3Rpb24uCisKIDIw
MDctMDctMTYgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjQxODApCisr
KyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MjIsMTMgKzM0
MjIsMTYgQEAgVmVjdG9yPFN0cmluZz4gRG9jdW1lbnQ6OmZvcm1FbGVtZW50c1N0YQogewogICAg
IFZlY3RvcjxTdHJpbmc+IHN0YXRlVmVjdG9yOwogICAgIHN0YXRlVmVjdG9yLnJlc2VydmVDYXBh
Y2l0eShtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5zaXplKCkgKiAzKTsKLSAgICB0eXBlZGVmIExp
c3RIYXNoU2V0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0
b3I7CisgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlKj46OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwogICAgIEl0ZXJhdG9yIGVuZCA9IG1fZm9y
bUVsZW1lbnRzV2l0aFN0YXRlLmVuZCgpOwogICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX2Zvcm1F
bGVtZW50c1dpdGhTdGF0ZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSFRN
TEdlbmVyaWNGb3JtRWxlbWVudCogZSA9ICppdDsKLSAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5k
KGUtPm5hbWUoKS5kb21TdHJpbmcoKSk7Ci0gICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZChlLT50
eXBlKCkuZG9tU3RyaW5nKCkpOwotICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoZS0+c3RhdGVW
YWx1ZSgpKTsKKyAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSogZSA9ICpp
dDsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBpZiAoZS0+c2F2ZVN0YXRlKHZhbHVl
KSkgeworICAgICAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGUtPm5hbWUoKS5kb21TdHJpbmco
KSk7CisgICAgICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoZS0+dHlwZSgpLmRvbVN0cmluZygp
KTsKKyAgICAgICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgIH0KICAg
ICB9CiAgICAgcmV0dXJuIHN0YXRlVmVjdG9yOwogfQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAyNDE4
MCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3
IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9y
ZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjEsOCArNjEsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWVWaWV3OwogICAgIGNsYXNzIEhUTUxE
b2N1bWVudDsKICAgICBjbGFzcyBIVE1MRWxlbWVudDsKKyAgICBjbGFzcyBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlOwogICAgIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKLSAgICBjbGFz
cyBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OwogICAgIGNsYXNzIEhUTUxIZWFkRWxlbWVudDsKICAg
ICBjbGFzcyBIVE1MSW1hZ2VMb2FkZXI7CiAgICAgY2xhc3MgSFRNTElucHV0RWxlbWVudDsKQEAg
LTI5Myw5ICsyOTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VzRmlyc3RMZXR0ZXJSdWxl
cyhib29sIGIpIHsgbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyA9IGI7IH0KIAogICAgIC8vIE1hY2hp
bmVyeSBmb3Igc2F2aW5nIGFuZCByZXN0b3Jpbmcgc3RhdGUgd2hlbiB5b3UgbGVhdmUgYW5kIHRo
ZW4gZ28gYmFjayB0byBhIHBhZ2UuCi0gICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0
YXRlKEhUTUxHZW5lcmljRm9ybUVsZW1lbnQqIGUpIHsgbV9mb3JtRWxlbWVudHNXaXRoU3RhdGUu
YWRkKGUpOyB9Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUoSFRNTEdl
bmVyaWNGb3JtRWxlbWVudCogZSkgeyBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5yZW1vdmUoZSk7
IH0KLSAgICBib29sIGlzRm9ybUVsZW1lbnRSZWdpc3RlcmVkKEhUTUxHZW5lcmljRm9ybUVsZW1l
bnQqIGUpIHsgcmV0dXJuIG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLmNvbnRhaW5zKGUpOyB9Cisg
ICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGUqIGUpIHsgbV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuYWRkKGUpOyB9CisgICAg
dm9pZCB1bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUoSFRNTEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZSogZSkgeyBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5yZW1vdmUoZSk7IH0KICAg
ICBWZWN0b3I8U3RyaW5nPiBmb3JtRWxlbWVudHNTdGF0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0
U3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBib29s
IGhhc1N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKCkgY29uc3Q7CkBAIC03MDgsNyArNzA3LDcgQEAg
cHJvdGVjdGVkOgogICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdCBtX3dpbmRvd0V2ZW50
TGlzdGVuZXJzOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPEZvcm1FbGVtZW50S2V5LCBWZWN0b3I8
U3RyaW5nPiwgRm9ybUVsZW1lbnRLZXlIYXNoLCBGb3JtRWxlbWVudEtleUhhc2hUcmFpdHM+IEZv
cm1FbGVtZW50U3RhdGVNYXA7Ci0gICAgTGlzdEhhc2hTZXQ8SFRNTEdlbmVyaWNGb3JtRWxlbWVu
dCo+IG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlOworICAgIExpc3RIYXNoU2V0PEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnRXaXRoU3RhdGUqPiBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZTsKICAgICBGb3Jt
RWxlbWVudFN0YXRlTWFwIG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHM7CiAKICAgICBIYXNoU2V0
PEVsZW1lbnQqPiBtX2RpZFJlc3RvcmVQYWdlQ2FsbGJhY2tTZXQ7CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxHZW5lcmljRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNDE4MCkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxl
bWVudCogZikKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYyksIG1fZm9ybShmKSwgbV9k
aXNhYmxlZChmYWxzZSksIG1fcmVhZE9ubHkoZmFsc2UpLCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVy
KGZhbHNlKQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgbV9mb3JtKGYp
CisgICAgLCBtX2Rpc2FibGVkKGZhbHNlKQorICAgICwgbV9yZWFkT25seShmYWxzZSkKKyAgICAs
IG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCiB7CiAgICAgaWYgKCFtX2Zvcm0pCiAgICAg
ICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKQEAgLTE4OSw0NSArMTkzLDUyIEBAIGJv
b2wgSFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6aXNNb3VzZUZvY3UKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVN0cmluZyBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpzdGF0ZVZhbHVlKCkgY29uc3QK
K3ZvaWQgSFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6c2V0VGFiSW5kZXgoaW50IHZhbHVlKQorewor
ICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Cit9
CisgICAgCitib29sIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25z
dAogewotICAgIC8vIFNob3VsZCBvbmx5IHJlYWNoIGhlcmUgaWYgb2JqZWN0IGlzIGluc2VydGVk
IGludG8gdGhlICJmb3JtIGVsZW1lbnQgd2l0aAotICAgIC8vIHN0YXRlIiBzZXQuIElmIHNvLCB0
aGUgZGVyaXZlZCBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgaW1wbGVtZW50aW5nIHRoaXMgZnVu
Y3Rpb24uCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwor
ICAgIHJldHVybiBpc0ZvY3VzYWJsZSgpIHx8ICghZGlzYWJsZWQoKSAmJiAhZG9jdW1lbnQoKS0+
aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpOwogfQogCi12b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1l
bnQ6OnJlc3RvcmVTdGF0ZShjb25zdCBTdHJpbmcmKQorSFRNTEZvcm1FbGVtZW50KiBIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50Ojp2aXJ0dWFsRm9ybSgpIGNvbnN0CiB7Ci0gICAgLy8gU2hvdWxkIG9u
bHkgcmVhY2ggaGVyZSBpZiBvYmplY3Qgb2YgdGhpcyB0eXBlIHdhcyBvbmNlIGluc2VydGVkIGlu
dG8gdGhlCi0gICAgLy8gImZvcm0gZWxlbWVudCB3aXRoIHN0YXRlIiBzZXQuIElmIHNvLCB0aGUg
ZGVyaXZlZCBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IKLSAgICAvLyBpbXBsZW1lbnRpbmcgdGhp
cyBmdW5jdGlvbi4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbV9mb3Jt
OwogfQogCi12b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKQorSFRN
TEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9y
bUVsZW1lbnQqIGYpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50KHRhZ05hbWUsIGRvYywg
ZikKIHsKLSAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jLT5pc0Zv
cm1FbGVtZW50UmVnaXN0ZXJlZCh0aGlzKSAmJiBkb2MtPmhhc1N0YXRlRm9yTmV3Rm9ybUVsZW1l
bnRzKCkpIHsKLSAgICAgICAgU3RyaW5nIHN0YXRlOwotICAgICAgICBpZiAoZG9jLT50YWtlU3Rh
dGVGb3JGb3JtRWxlbWVudChuYW1lKCkuaW1wbCgpLCB0eXBlKCkuaW1wbCgpLCBzdGF0ZSkpCi0g
ICAgICAgICAgICByZXN0b3JlU3RhdGUoc3RhdGUpOwotICAgIH0KKyAgICBkb2MtPnJlZ2lzdGVy
Rm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7CiB9CiAKLXZvaWQgSFRNTEdlbmVyaWNGb3JtRWxl
bWVudDo6c2V0VGFiSW5kZXgoaW50IHZhbHVlKQorSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZTo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoKQogewotICAgIHNldEF0dHJp
YnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CisgICAgZG9jdW1lbnQo
KS0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKHRoaXMpOwogfQotICAgIAotYm9vbCBI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKKwordm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgp
CiB7Ci0gICAgcmV0dXJuIGlzRm9jdXNhYmxlKCkgfHwgKCFkaXNhYmxlZCgpICYmICFkb2N1bWVu
dCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSk7CisgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3Rl
ckZvcm1FbGVtZW50V2l0aFN0YXRlKHRoaXMpOworICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQ6
OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiB9CiAKLUhUTUxGb3JtRWxlbWVudCogSFRN
TEdlbmVyaWNGb3JtRWxlbWVudDo6dmlydHVhbEZvcm0oKSBjb25zdAordm9pZCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKIHsKLSAg
ICByZXR1cm4gbV9mb3JtOworICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRo
U3RhdGUodGhpcyk7CisgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3du
ZXJEb2N1bWVudCgpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6
OmNsb3NlUmVuZGVyZXIoKQoreworICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOworICAg
IGlmIChkb2MtPmhhc1N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKCkpIHsKKyAgICAgICAgU3RyaW5n
IHN0YXRlOworICAgICAgICBpZiAoZG9jLT50YWtlU3RhdGVGb3JGb3JtRWxlbWVudChuYW1lKCku
aW1wbCgpLCB0eXBlKCkuaW1wbCgpLCBzdGF0ZSkpCisgICAgICAgICAgICByZXN0b3JlU3RhdGUo
c3RhdGUpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViY29yZQpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxHZW5lcmljRm9ybUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudC5oCShyZXZpc2lvbiAyNDE4MCkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDcgQEAgY2xhc3MgSFRNTEZvcm1FbGVtZW50OwogLy8gRklYTUU6IFJlbmFtZSB0aGlzIGNsYXNz
IHRvIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQuCiBjbGFzcyBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MR2VuZXJpY0Zvcm1FbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVt
ZW50KiA9IDApOworICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5I
VE1MR2VuZXJpY0Zvcm1FbGVtZW50KCk7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQpAQCAt
NTEsNyArNTEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZp
cnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCk7CiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJlbmRl
cmVyKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7fQogCkBAIC04NSw5ICs4NCw2IEBA
IHB1YmxpYzoKICAgICAgKi8KICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURh
dGFMaXN0JiwgYm9vbCkgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgU3RyaW5nIHN0
YXRlVmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVN0YXRlKGNvbnN0IFN0
cmluZyYgdmFsdWUpOwotCiAgICAgdmlydHVhbCBib29sIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRv
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGVk
U3VibWl0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0
aXZhdGVkU3VibWl0KGJvb2wgZmxhZykgeyB9CkBAIC0xMDUsNiArMTAxLDIzIEBAIHByaXZhdGU6
CiAgICAgbXV0YWJsZSBib29sIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7CiB9OwogCitjbGFzcyBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlIDogcHVibGljIEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnQgeworcHVibGljOgorICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsK
KyAgICB2aXJ0dWFsIH5IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJlcigpOworCisgICAgdmlydHVhbCBib29sIHNhdmVTdGF0
ZShTdHJpbmcmIHZhbHVlKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92
ZVRvTmV3T3duZXJEb2N1bWVudCgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCByZXN0
b3JlU3RhdGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkgPSAwOworfTsKKwogfSAvL25hbWVzcGFjZQog
CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDI0MTgw
KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NywxNCArOTcsMTQgQEAgc3RhdGljIGludCBudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0
ZQogICAgIHJldHVybiB0ZXh0QnJlYWtDdXJyZW50KGl0KTsKIH0KIAotSFRNTElucHV0RWxlbWVu
dDo6SFRNTElucHV0RWxlbWVudChEb2N1bWVudCAqZG9jLCBIVE1MRm9ybUVsZW1lbnQgKmYpCi0g
ICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50KGlucHV0VGFnLCBkb2MsIGYpCitIVE1MSW5wdXRF
bGVtZW50OjpIVE1MSW5wdXRFbGVtZW50KERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCog
ZikKKyAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoaW5wdXRUYWcsIGRvYywg
ZikKIHsKICAgICBpbml0KCk7CiB9CiAKLUhUTUxJbnB1dEVsZW1lbnQ6OkhUTUxJbnB1dEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYywgSFRNTEZvcm1F
bGVtZW50ICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudCh0YWdOYW1lLCBkb2MsIGYp
CitIVE1MSW5wdXRFbGVtZW50OjpIVE1MSW5wdXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKKyAgICA6IEhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGFnTmFtZSwgZG9jLCBmKQogewogICAgIGluaXQo
KTsKIH0KQEAgLTEzNiwxNCArMTM2LDEyIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6aW5pdCgp
CiAKICAgICBpZiAoZm9ybSgpKQogICAgICAgICBtX2F1dG9jb21wbGV0ZSA9IGZvcm0oKS0+YXV0
b0NvbXBsZXRlKCk7Ci0KLSAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0
YXRlKHRoaXMpOwogfQogCiBIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCgpCiB7
Ci0gICAgb3duZXJEb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhp
cyk7Ci0gICAgb3duZXJEb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yRGlkUmVzdG9yZUZyb21DYWNo
ZUNhbGxiYWNrKHRoaXMpOworICAgIGlmIChpbnB1dFR5cGUoKSA9PSBQQVNTV09SRCkKKyAgICAg
ICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvckRpZFJlc3RvcmVGcm9tQ2FjaGVDYWxsYmFjayh0
aGlzKTsKICAgICBkZWxldGUgbV9pbWFnZUxvYWRlcjsKIH0KIApAQCAtMTU2LDEwICsxNTQsMTAg
QEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYgogewogICAgIC8vIElm
IHRleHQgZmllbGRzIGNhbiBiZSBmb2N1c2VkLCB0aGVuIHRoZXkgc2hvdWxkIGFsd2F5cyBiZSBr
ZXlib2FyZCBmb2N1c2FibGUKICAgICBpZiAoaXNUZXh0RmllbGQoKSkKLSAgICAgICAgcmV0dXJu
IEhUTUxHZW5lcmljRm9ybUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCk7CisgICAgICAgIHJldHVybiBI
VE1MRm9ybUVsZW1lbnRXaXRoU3RhdGU6OmlzRm9jdXNhYmxlKCk7CiAgICAgICAgIAogICAgIC8v
IElmIHRoZSBiYXNlIGNsYXNzIHNheXMgd2UgY2FuJ3QgYmUgZm9jdXNlZCwgdGhlbiB3ZSBjYW4g
c3RvcCBub3cuCi0gICAgaWYgKCFIVE1MR2VuZXJpY0Zvcm1FbGVtZW50Ojppc0tleWJvYXJkRm9j
dXNhYmxlKGV2ZW50KSkKKyAgICBpZiAoIUhUTUxGb3JtRWxlbWVudFdpdGhTdGF0ZTo6aXNLZXli
b2FyZEZvY3VzYWJsZShldmVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChp
bnB1dFR5cGUoKSA9PSBSQURJTykgewpAQCAtMTg3LDggKzE4NSw4IEBAIGJvb2wgSFRNTElucHV0
RWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWIKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNNb3Vz
ZUZvY3VzYWJsZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGV4dEZpZWxkKCkpCi0gICAgICAgIHJl
dHVybiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50Ojppc0ZvY3VzYWJsZSgpOwotICAgIHJldHVybiBI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50Ojppc01vdXNlRm9jdXNhYmxlKCk7CisgICAgICAgIHJldHVy
biBIVE1MRm9ybUVsZW1lbnRXaXRoU3RhdGU6OmlzRm9jdXNhYmxlKCk7CisgICAgcmV0dXJuIEhU
TUxGb3JtRWxlbWVudFdpdGhTdGF0ZTo6aXNNb3VzZUZvY3VzYWJsZSgpOwogfQogCiB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OmZvY3VzKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKQpAQCAt
MjEwLDcgKzIwOCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6Zm9jdXMoYm9vbCByZXN0b3IK
ICAgICAgICAgdXBkYXRlRm9jdXNBcHBlYXJhbmNlKHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6Zm9j
dXMocmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKKyAgICBIVE1MRm9ybUVsZW1lbnRXaXRoU3Rh
dGU6OmZvY3VzKHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CiB9CiAKIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0
aW9uKQpAQCAtMjI1LDcgKzIyMyw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6dXBkYXRlRm9j
dXNBcHBlYXIKICAgICAgICAgaWYgKGRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkK
ICAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnJldmVhbFNlbGVjdGlvbigpOwogICAg
IH0gZWxzZQotICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVh
cmFuY2UoKTsKKyAgICAgICAgSFRNTEZvcm1FbGVtZW50V2l0aFN0YXRlOjp1cGRhdGVGb2N1c0Fw
cGVhcmFuY2UoKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjphYm91dFRvVW5sb2FkKCkK
QEAgLTI0MSw3ICsyMzksNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNF
dmVuCiAgICAgICAgIGlmIChpbnB1dFR5cGUoKSA9PSBQQVNTV09SRCAmJiBkb2N1bWVudCgpLT5m
cmFtZSgpKQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRy
eVdoZW5BY3RpdmUodHJ1ZSk7CiAgICAgfQotICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQ6OmRp
c3BhdGNoRm9jdXNFdmVudCgpOworICAgIEhUTUxGb3JtRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0
Y2hGb2N1c0V2ZW50KCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGlzcGF0Y2hCbHVy
RXZlbnQoKQpAQCAtMjUxLDcgKzI0OSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGlzcGF0
Y2hCbHVyRXZlbnQKICAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFVzZVNlY3VyZUtleWJvYXJk
RW50cnlXaGVuQWN0aXZlKGZhbHNlKTsKICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+dGV4
dEZpZWxkRGlkRW5kRWRpdGluZyh0aGlzKTsKICAgICB9Ci0gICAgSFRNTEdlbmVyaWNGb3JtRWxl
bWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQoKTsKKyAgICBIVE1MRm9ybUVsZW1lbnRXaXRoU3RhdGU6
OmRpc3BhdGNoQmx1ckV2ZW50KCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VHlw
ZShjb25zdCBTdHJpbmcmIHQpCkBAIC0zMjgsMTMgKzMyNiwxMCBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnNldElucHV0VHlwZShjb25zCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgcmVjaGVja1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIGlmICh3YXNQYXNzd29yZEZpZWxkICYm
ICFpc1Bhc3N3b3JkRmllbGQpIHsKLSAgICAgICAgICAgICAgICBvd25lckRvY3VtZW50KCktPnJl
Z2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3duZXJE
b2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yRGlkUmVzdG9yZUZyb21DYWNoZUNhbGxiYWNrKHRoaXMp
OwotICAgICAgICAgICAgfSBlbHNlIGlmICghd2FzUGFzc3dvcmRGaWVsZCAmJiBpc1Bhc3N3b3Jk
RmllbGQpIHsKLSAgICAgICAgICAgICAgICBvd25lckRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3Jt
RWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBvd25lckRvY3VtZW50KCkt
PnJlZ2lzdGVyRm9yRGlkUmVzdG9yZUZyb21DYWNoZUNhbGxiYWNrKHRoaXMpOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHdhc1Bhc3N3b3JkRmllbGQgJiYgIWlzUGFzc3dvcmRGaWVs
ZCkKKyAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yRGlkUmVzdG9yZUZy
b21DYWNoZUNhbGxiYWNrKHRoaXMpOworICAgICAgICAgICAgZWxzZSBpZiAoIXdhc1Bhc3N3b3Jk
RmllbGQgJiYgaXNQYXNzd29yZEZpZWxkKQorICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPnJl
Z2lzdGVyRm9yRGlkUmVzdG9yZUZyb21DYWNoZUNhbGxiYWNrKHRoaXMpOwogCiAgICAgICAgICAg
ICBpZiAoZGlkUmVzcGVjdEhlaWdodEFuZFdpZHRoICE9IHdpbGxSZXNwZWN0SGVpZ2h0QW5kV2lk
dGgpIHsKICAgICAgICAgICAgICAgICBOYW1lZE1hcHBlZEF0dHJNYXAqIG1hcCA9IG1hcHBlZEF0
dHJpYnV0ZXMoKTsKQEAgLTQyMSw5ICs0MTYsOCBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxJ
bnB1dEVsZW1lbnQ6OnR5CiAgICAgcmV0dXJuIGVtcHR5QXRvbTsKIH0KIAotU3RyaW5nIEhUTUxJ
bnB1dEVsZW1lbnQ6OnN0YXRlVmFsdWUoKSBjb25zdAorYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojpz
YXZlU3RhdGUoU3RyaW5nJiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlucHV0VHlwZSgp
ICE9IFBBU1NXT1JEKTsgLy8gc2hvdWxkIG5ldmVyIHNhdmUvcmVzdG9yZSBwYXNzd29yZCBmaWVs
ZHMKICAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQlVUVE9OOgogICAg
ICAgICBjYXNlIEZJTEU6CkBAIC00MzUsMTQgKzQyOSwxNyBAQCBTdHJpbmcgSFRNTElucHV0RWxl
bWVudDo6c3RhdGVWYWx1ZSgpIGNvCiAgICAgICAgIGNhc2UgU0VBUkNIOgogICAgICAgICBjYXNl
IFNVQk1JVDoKICAgICAgICAgY2FzZSBURVhUOgotICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCk7
CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIGNhc2UgQ0hFQ0tCT1g6CiAgICAgICAgIGNhc2UgUkFESU86Ci0gICAgICAgICAg
ICByZXR1cm4gY2hlY2tlZCgpID8gIm9uIiA6ICJvZmYiOworICAgICAgICAgICAgcmVzdWx0ID0g
Y2hlY2tlZCgpID8gIm9uIiA6ICJvZmYiOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIGNhc2UgUEFTU1dPUkQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIFN0cmluZygpOworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpy
ZXN0b3JlU3RhdGUoY29uc3QgU3RyaW5nJiBzdGF0ZSkKQEAgLTY4Myw3ICs2ODAsNyBAQCB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgICAgICAgICBhdHRy
LT5uYW1lKCkgPT0gcHJlY2lzaW9uQXR0cikgewogICAgICAgICBzZXRDaGFuZ2VkKCk7CiAgICAg
fSBlbHNlCi0gICAgICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICBIVE1MRm9ybUVsZW1lbnRXaXRoU3RhdGU6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOwogfQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnJlbmRlcmVySXNO
ZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQpAQCAtNzAxLDcgKzY5OCw3IEBAIGJvb2wgSFRNTElu
cHV0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCgKICAgICAgICAgY2FzZSBTRUFSQ0g6CiAgICAg
ICAgIGNhc2UgU1VCTUlUOgogICAgICAgICBjYXNlIFRFWFQ6Ci0gICAgICAgICAgICByZXR1cm4g
SFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7CisgICAgICAg
ICAgICByZXR1cm4gSFRNTEZvcm1FbGVtZW50V2l0aFN0YXRlOjpyZW5kZXJlcklzTmVlZGVkKHN0
eWxlKTsKICAgICAgICAgY2FzZSBISURERU46CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQpAQCAtNzQ1LDcgKzc0Miw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6YXR0YWNoKCkK
ICAgICAgICAgbV9pbml0ZWQgPSB0cnVlOwogICAgIH0KIAotICAgIEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnQ6OmF0dGFjaCgpOworICAgIEhUTUxGb3JtRWxlbWVudFdpdGhTdGF0ZTo6YXR0YWNoKCk7
CiAKICAgICBpZiAoaW5wdXRUeXBlKCkgPT0gSU1BR0UpIHsKICAgICAgICAgaWYgKCFtX2ltYWdl
TG9hZGVyKQpAQCAtNzY1LDcgKzc2Miw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6YXR0YWNo
KCkKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZXRhY2goKQogewotICAgIEhUTUxHZW5lcmlj
Rm9ybUVsZW1lbnQ6OmRldGFjaCgpOworICAgIEhUTUxGb3JtRWxlbWVudFdpdGhTdGF0ZTo6ZGV0
YWNoKCk7CiAgICAgc2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpOwogfQogCkBAIC05MjQs
NyArOTIxLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRlUAogICAg
IG1fY2hlY2tlZCA9IHNvdXJjZUVsZW0tPm1fY2hlY2tlZDsKICAgICBtX2luZGV0ZXJtaW5hdGUg
PSBzb3VyY2VFbGVtLT5tX2luZGV0ZXJtaW5hdGU7CiAgICAgCi0gICAgSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMoc291cmNlKTsKKyAgICBIVE1MRm9y
bUVsZW1lbnRXaXRoU3RhdGU6OmNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzKHNvdXJjZSk7CiB9
CiAKIFN0cmluZyBIVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZSgpIGNvbnN0CkBAIC0xMTQ2LDcgKzEx
NDMsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAgICAgCiAg
ICAgLy8gTGV0IHRoZSBrZXkgaGFuZGxpbmcgZG9uZSBpbiBFdmVudFRhcmdldE5vZGUgdGFrZSBw
cmVjZWRlbmNlIG92ZXIgdGhlIGV2ZW50IGhhbmRsaW5nIGhlcmUgZm9yIGVkaXRhYmxlIHRleHQg
ZmllbGRzCiAgICAgaWYgKCFjbGlja0RlZmF1bHRGb3JtQnV0dG9uKSB7Ci0gICAgICAgIEhUTUxH
ZW5lcmljRm9ybUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKKyAgICAgICAgSFRN
TEZvcm1FbGVtZW50V2l0aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7CiAgICAgICAg
IGlmIChldnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMTQ4MSwyMSArMTQ3OCwxNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZFJlc3RvcmVG
cm9tQ2FjCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50
KCkKIHsKICAgICBpZiAoaW5wdXRUeXBlKCkgPT0gUEFTU1dPUkQpCi0gICAgICAgIG93bmVyRG9j
dW1lbnQoKS0+dW5yZWdpc3RlckZvckRpZFJlc3RvcmVGcm9tQ2FjaGVDYWxsYmFjayh0aGlzKTsK
LSAgICBlbHNlCi0gICAgICAgIG93bmVyRG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVtZW50
V2l0aFN0YXRlKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yRGlkUmVz
dG9yZUZyb21DYWNoZUNhbGxiYWNrKHRoaXMpOwogICAgICAgICAKLSAgICBIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworICAgIEhUTUxGb3JtRWxl
bWVudFdpdGhTdGF0ZTo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKIH0KIAogdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjpkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKIHsKICAgICBpZiAo
aW5wdXRUeXBlKCkgPT0gUEFTU1dPUkQpCiAgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9y
RGlkUmVzdG9yZUZyb21DYWNoZUNhbGxiYWNrKHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgZG9j
dW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKICAgICAgICAgCi0g
ICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwor
ICAgIEhUTUxGb3JtRWxlbWVudFdpdGhTdGF0ZTo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgp
OwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAko
cmV2aXNpb24gMjQxODApCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEwICsxLDggQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMzMsNyArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MSW1hZ2VMb2Fk
ZXI7CiBjbGFzcyBTZWxlY3Rpb247CiAKLWNsYXNzIEhUTUxJbnB1dEVsZW1lbnQgOiBwdWJsaWMg
SFRNTEdlbmVyaWNGb3JtRWxlbWVudCB7CitjbGFzcyBIVE1MSW5wdXRFbGVtZW50IDogcHVibGlj
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUgewogcHVibGljOgogICAgIGVudW0gSW5w
dXRUeXBlIHsKICAgICAgICAgVEVYVCwKQEAgLTk3LDcgKzk1LDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmKTsKIAotICAgIHZpcnR1YWwg
U3RyaW5nIHN0YXRlVmFsdWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2F2ZVN0YXRlKFN0
cmluZyYgdmFsdWUpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlU3RhdGUoY29uc3Qg
U3RyaW5nJik7CiAKICAgICBib29sIGNhbkhhdmVTZWxlY3Rpb24oKSBjb25zdDsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMjQxODApCisrKyBXZWJDb3JlL2h0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgY29uc3QgRE9NVGltZVN0YW1wIHR5
cGVBaGVhZFRpbWVvdXQgPSAxMDAwOwogCiBIVE1MU2VsZWN0RWxlbWVudDo6SFRNTFNlbGVjdEVs
ZW1lbnQoRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQotICAgIDogSFRNTEdlbmVy
aWNGb3JtRWxlbWVudChzZWxlY3RUYWcsIGRvYywgZikKKyAgICA6IEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnRXaXRoU3RhdGUoc2VsZWN0VGFnLCBkb2MsIGYpCiAgICAgLCBtX21pbndpZHRoKDApCiAg
ICAgLCBtX3NpemUoMCkKICAgICAsIG1fbXVsdGlwbGUoZmFsc2UpCkBAIC03NSwxMSArNzUsMTAg
QEAgSFRNTFNlbGVjdEVsZW1lbnQ6OkhUTUxTZWxlY3RFbGVtZW50KERvYwogICAgICwgbV9yZXBl
YXRpbmdDaGFyKDApCiAgICAgLCBtX2xhc3RDaGFyVGltZSgwKQogewotICAgIGRvY3VtZW50KCkt
PnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7CiB9CiAKIEhUTUxTZWxlY3RFbGVt
ZW50OjpIVE1MU2VsZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVt
ZW50KHRhZ05hbWUsIGRvYywgZikKKyAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUodGFnTmFtZSwgZG9jLCBmKQogICAgICwgbV9taW53aWR0aCgwKQogICAgICwgbV9zaXplKDAp
CiAgICAgLCBtX211bHRpcGxlKGZhbHNlKQpAQCAtOTEsMTIgKzkwLDEwIEBAIEhUTUxTZWxlY3RF
bGVtZW50OjpIVE1MU2VsZWN0RWxlbWVudChjb24KICAgICAsIG1fcmVwZWF0aW5nQ2hhcigwKQog
ICAgICwgbV9sYXN0Q2hhclRpbWUoMCkKIHsKLSAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1F
bGVtZW50V2l0aFN0YXRlKHRoaXMpOwogfQogCiBIVE1MU2VsZWN0RWxlbWVudDo6fkhUTUxTZWxl
Y3RFbGVtZW50KCkKIHsKLSAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRo
U3RhdGUodGhpcyk7CiB9CiAKIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmNoZWNrRFREKGNvbnN0
IE5vZGUqIG5ld0NoaWxkKQpAQCAtMTE1LDcgKzExMiw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnJlY2FsY1N0eWxlKCBTdHkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckxpc3RC
b3gqPihyZW5kZXJlcigpKS0+c2V0T3B0aW9uc0NoYW5nZWQodHJ1ZSk7CiAgICAgfQogCi0gICAg
SFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6cmVjYWxjU3R5bGUoIGNoICk7CisgICAgSFRNTEZvcm1F
bGVtZW50V2l0aFN0YXRlOjpyZWNhbGNTdHlsZShjaCk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmlu
ZyYgSFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGUoKSBjb25zdApAQCAtMjc3LDcgKzI3NCw3IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFMKICAgICAgICAgfQogfQogCi1T
dHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6OnN0YXRlVmFsdWUoKSBjb25zdAorYm9vbCBIVE1MU2Vs
ZWN0RWxlbWVudDo6c2F2ZVN0YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7CiAgICAgY29uc3Qg
VmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaW50IGwgPSBp
dGVtcy5zaXplKCk7CkBAIC0yODcsNyArMjg0LDggQEAgU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50
OjpzdGF0ZVZhbHVlKCkgYwogICAgICAgICBib29sIHNlbGVjdGVkID0gZS0+aGFzTG9jYWxOYW1l
KG9wdGlvblRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihlKS0+c2VsZWN0
ZWQoKTsKICAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHNlbGVjdGVkID8gJ1gnIDogJy4nOwogICAg
IH0KLSAgICByZXR1cm4gU3RyaW5nKGNoYXJhY3RlcnMsIGwpOworICAgIHZhbHVlID0gU3RyaW5n
KGNoYXJhY3RlcnMsIGwpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50OjpyZXN0b3JlU3RhdGUoY29uc3QgU3RyaW5nJiBzdGF0ZSkKQEAgLTMwNSw3ICszMDMs
NyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXN0b3JlU3RhdGUoY29uCiAKIGJvb2wgSFRN
TFNlbGVjdEVsZW1lbnQ6Omluc2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBO
b2RlKiByZWZDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50OjppbnNlcnRCZWZvcmUobmV3Q2hpbGQsIHJlZkNoaWxkLCBl
Yyk7CisgICAgYm9vbCByZXN1bHQgPSBIVE1MRm9ybUVsZW1lbnRXaXRoU3RhdGU6Omluc2VydEJl
Zm9yZShuZXdDaGlsZCwgcmVmQ2hpbGQsIGVjKTsKICAgICBpZiAocmVzdWx0KQogICAgICAgICBz
ZXRSZWNhbGNMaXN0SXRlbXMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzEzLDcgKzMxMSw3
IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6Omluc2VydEJlZm9yZShQYXMKIAogYm9vbCBIVE1M
U2VsZWN0RWxlbWVudDo6cmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5v
ZGUgKm9sZENoaWxkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBib29sIHJlc3VsdCA9IEhU
TUxHZW5lcmljRm9ybUVsZW1lbnQ6OnJlcGxhY2VDaGlsZChuZXdDaGlsZCwgb2xkQ2hpbGQsIGVj
KTsKKyAgICBib29sIHJlc3VsdCA9IEhUTUxGb3JtRWxlbWVudFdpdGhTdGF0ZTo6cmVwbGFjZUNo
aWxkKG5ld0NoaWxkLCBvbGRDaGlsZCwgZWMpOwogICAgIGlmIChyZXN1bHQpCiAgICAgICAgIHNl
dFJlY2FsY0xpc3RJdGVtcygpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zMjEsNyArMzE5LDcg
QEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6cmVwbGFjZUNoaWxkKFBhcwogCiBib29sIEhUTUxT
ZWxlY3RFbGVtZW50OjpyZW1vdmVDaGlsZChOb2RlKiBvbGRDaGlsZCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpyZW1vdmVD
aGlsZChvbGRDaGlsZCwgZWMpOworICAgIGJvb2wgcmVzdWx0ID0gSFRNTEZvcm1FbGVtZW50V2l0
aFN0YXRlOjpyZW1vdmVDaGlsZChvbGRDaGlsZCwgZWMpOwogICAgIGlmIChyZXN1bHQpCiAgICAg
ICAgIHNldFJlY2FsY0xpc3RJdGVtcygpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zMjksNyAr
MzI3LDcgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6cmVtb3ZlQ2hpbGQoTm9kZQogCiBib29s
IEhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxk
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBib29sIHJlc3VsdCA9IEhUTUxHZW5lcmljRm9y
bUVsZW1lbnQ6OmFwcGVuZENoaWxkKG5ld0NoaWxkLCBlYyk7CisgICAgYm9vbCByZXN1bHQgPSBI
VE1MRm9ybUVsZW1lbnRXaXRoU3RhdGU6OmFwcGVuZENoaWxkKG5ld0NoaWxkLCBlYyk7CiAgICAg
aWYgKHJlc3VsdCkKICAgICAgICAgc2V0UmVjYWxjTGlzdEl0ZW1zKCk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTMzNyw3ICszMzUsNyBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRD
aGlsZChQYXNzCiAKIENvbnRhaW5lck5vZGUqIEhUTUxTZWxlY3RFbGVtZW50OjphZGRDaGlsZChQ
YXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkKQogewotICAgIENvbnRhaW5lck5vZGUqIHJlc3VsdCA9
IEhUTUxHZW5lcmljRm9ybUVsZW1lbnQ6OmFkZENoaWxkKG5ld0NoaWxkKTsKKyAgICBDb250YWlu
ZXJOb2RlKiByZXN1bHQgPSBIVE1MRm9ybUVsZW1lbnRXaXRoU3RhdGU6OmFkZENoaWxkKG5ld0No
aWxkKTsKICAgICBpZiAocmVzdWx0KQogICAgICAgICBzZXRSZWNhbGNMaXN0SXRlbXMoKTsKICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtMzgwLDIxICszNzgsMjEgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
Y2hhbmdlQXR0cikgewogICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihjaGFuZ2VFdmVudCwg
YXR0cik7CiAgICAgfSBlbHNlCi0gICAgICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICBIVE1MRm9ybUVsZW1lbnRXaXRoU3RhdGU6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCiBib29sIEhUTUxTZWxlY3RFbGVtZW50
Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAogewogICAg
IGlmIChyZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gaXNGb2N1c2FibGUoKTsKLSAgICByZXR1
cm4gSFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCk7Cisg
ICAgcmV0dXJuIEhUTUxGb3JtRWxlbWVudFdpdGhTdGF0ZTo6aXNLZXlib2FyZEZvY3VzYWJsZShl
dmVudCk7CiB9CiAKIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKSBj
b25zdAogewogICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gaXNGb2N1c2FibGUo
KTsKLSAgICByZXR1cm4gSFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgp
OworICAgIHJldHVybiBIVE1MRm9ybUVsZW1lbnRXaXRoU3RhdGU6OmlzTW91c2VGb2N1c2FibGUo
KTsKIH0KIAogYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6Y2FuU2VsZWN0QWxsKCkgY29uc3QKQEAg
LTUzMyw3ICs1MzEsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQo
CiB7CiAgICAgc2V0UmVjYWxjTGlzdEl0ZW1zKCk7CiAKLSAgICBIVE1MR2VuZXJpY0Zvcm1FbGVt
ZW50OjpjaGlsZHJlbkNoYW5nZWQoKTsKKyAgICBIVE1MRm9ybUVsZW1lbnRXaXRoU3RhdGU6OmNo
aWxkcmVuQ2hhbmdlZCgpOwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRSZWNhbGNM
aXN0SXRlbXMoKQpAQCAtNTc5LDcgKzU3Nyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRp
c3BhdGNoRm9jdXNFdmUKICAgICBpZiAodXNlc01lbnVMaXN0KCkpCiAgICAgICAgIC8vIFNhdmUg
dGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24g
d2hlbiB3ZSBjYWxsIG9uQ2hhbmdlIGR1cmluZyBkaXNwYXRjaEJsdXJFdmVudC4KICAgICAgICAg
c2F2ZUxhc3RTZWxlY3Rpb24oKTsKLSAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpkaXNwYXRj
aEZvY3VzRXZlbnQoKTsKKyAgICBIVE1MRm9ybUVsZW1lbnRXaXRoU3RhdGU6OmRpc3BhdGNoRm9j
dXNFdmVudCgpOwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVu
dCgpCkBAIC01ODgsNyArNTg2LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6ZGlzcGF0Y2hC
bHVyRXZlbgogICAgIC8vIFRoaXMgbWF0Y2hlcyBvdGhlciBicm93c2VycycgYmVoYXZpb3IuCiAg
ICAgaWYgKHVzZXNNZW51TGlzdCgpKQogICAgICAgICBtZW51TGlzdE9uQ2hhbmdlKCk7Ci0gICAg
SFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQoKTsKKyAgICBIVE1MRm9y
bUVsZW1lbnRXaXRoU3RhdGU6OmRpc3BhdGNoQmx1ckV2ZW50KCk7CiB9CiAKIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKQEAgLTYxMiw3ICs2
MTAsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2dCk7CisgICAgSFRNTEZvcm1FbGVtZW50V2l0aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2dCk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCogZXZ0KQpAQCAtMTA0NCw3ICsxMDQyLDcgQEAgdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6c2V0TGVuZ3RoKHVuc2lnbgogCiAgICAgaWYgKGRpZmYgPCAwKSB7IC8vIGFk
ZCBkdW1teSBlbGVtZW50cwogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBSZWZQdHI8RWxlbWVu
dD4gb3B0aW9uID0gb3duZXJEb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KCJvcHRpb24iLCBlYyk7
CisgICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gb3B0aW9uID0gZG9jdW1lbnQoKS0+Y3JlYXRl
RWxlbWVudCgib3B0aW9uIiwgZWMpOwogICAgICAgICAgICAgaWYgKCFvcHRpb24pCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBhZGQoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihvcHRpb24uZ2V0KCkpLCAwLCBlYyk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAko
cmV2aXNpb24gMjQxODApCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0zNyw4ICszNSw3IEBAIGNsYXNzIEhUTUxPcHRpb25FbGVtZW50OwogY2xhc3MgSFRN
TE9wdGlvbnNDb2xsZWN0aW9uOwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKIAotY2xhc3MgSFRNTFNl
bGVjdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEdlbmVyaWNGb3JtRWxlbWVudCB7Ci0KK2NsYXNzIEhU
TUxTZWxlY3RFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUg
ewogcHVibGljOgogICAgIEhUTUxTZWxlY3RFbGVtZW50KERvY3VtZW50KiwgSFRNTEZvcm1FbGVt
ZW50KiA9IDApOwogICAgIEhUTUxTZWxlY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOwpAQCAtODEsNyArNzgsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgUGFzc1JlZlB0cjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+IG9w
dGlvbnMoKTsKIAotICAgIHZpcnR1YWwgU3RyaW5nIHN0YXRlVmFsdWUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgc2F2ZVN0YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCByZXN0b3JlU3RhdGUoY29uc3QgU3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW5z
ZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNl
cHRpb25Db2RlJik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyNDE4MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICogQ29weXJpZ2h0IChDKSAy
MDA3IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQogICoKQEAgLTQ3LDcgKzQ1LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
CiBIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50KERvY3VtZW50ICpkb2Ms
IEhUTUxGb3JtRWxlbWVudCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnQodGV4dGFy
ZWFUYWcsIGRvYywgZikKKyAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGV4
dGFyZWFUYWcsIGRvYywgZikKICAgICAsIG1fcm93cygyKQogICAgICwgbV9jb2xzKDIwKQogICAg
ICwgbV93cmFwKHRhX1ZpcnR1YWwpCkBAIC01NSwxMiArNTMsNiBAQCBIVE1MVGV4dEFyZWFFbGVt
ZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50CiAgICAgLCBjYWNoZWRTZWxFbmQoLTEpCiB7CiAgICAg
c2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoKTsKLSAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1F
bGVtZW50V2l0aFN0YXRlKHRoaXMpOwotfQotCi1IVE1MVGV4dEFyZWFFbGVtZW50Ojp+SFRNTFRl
eHRBcmVhRWxlbWVudCgpCi17Ci0gICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVtZW50
V2l0aFN0YXRlKHRoaXMpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OnR5cGUoKSBjb25zdApAQCAtNjksOSArNjEsMTAgQEAgY29uc3QgQXRvbWljU3RyaW5n
JiBIVE1MVGV4dEFyZWFFbGVtZW50OgogICAgIHJldHVybiB0ZXh0YXJlYTsKIH0KIAotU3RyaW5n
IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnN0YXRlVmFsdWUoKSBjb25zdAorYm9vbCBIVE1MVGV4dEFy
ZWFFbGVtZW50OjpzYXZlU3RhdGUoU3RyaW5nJiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IHZhbHVlKCk7CisgICAgcmVzdWx0ID0gdmFsdWUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
dm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpyZXN0b3JlU3RhdGUoY29uc3QgU3RyaW5nJiBzdGF0
ZSkKQEAgLTE2NSw3ICsxNTgsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uY2hhbmdlQXR0cikKICAgICAg
ICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoY2hhbmdlRXZlbnQsIGF0dHIpOwogICAgIGVsc2UKLSAg
ICAgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CisgICAgICAgIEhUTUxGb3JtRWxlbWVudFdpdGhTdGF0ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CiB9CiAKIFJlbmRlck9iamVjdCogSFRNTFRleHRBcmVhRWxlbWVudDo6Y3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpCkBAIC0xOTIsMTIg
KzE4NSwxMiBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnJlc2V0KCkKIGJvb2wgSFRNTFRl
eHRBcmVhRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QK
IHsKICAgICAvLyBJZiB0ZXh0IGFyZWFzIGNhbiBiZSBmb2N1c2VkLCB0aGVuIHRoZXkgc2hvdWxk
IGFsd2F5cyBiZSBrZXlib2FyZCBmb2N1c2FibGUKLSAgICByZXR1cm4gSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudDo6aXNGb2N1c2FibGUoKTsKKyAgICByZXR1cm4gSFRNTEZvcm1FbGVtZW50V2l0aFN0
YXRlOjppc0ZvY3VzYWJsZSgpOwogfQogCiBib29sIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmlzTW91
c2VGb2N1c2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
Ojppc0ZvY3VzYWJsZSgpOworICAgIHJldHVybiBIVE1MRm9ybUVsZW1lbnRXaXRoU3RhdGU6Omlz
Rm9jdXNhYmxlKCk7CiB9CiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6Zm9jdXMoYm9vbCkK
QEAgLTI0MCw3ICsyMzMsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhCiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgKGV2dC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZ0LT5p
c0RyYWdFdmVudCgpIHx8IGV2dC0+aXNXaGVlbEV2ZW50KCkgfHwgZXZ0LT50eXBlKCkgPT0gYmx1
ckV2ZW50KSkKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5kZXJl
cigpKS0+Zm9yd2FyZEV2ZW50KGV2dCk7CiAKLSAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7CisgICAgSFRNTEZvcm1FbGVtZW50V2l0aFN0YXRlOjpk
ZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7CiB9CiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6
cmVuZGVyZXJXaWxsQmVEZXN0cm95ZWQoKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJl
YUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5oCShyZXZpc2lvbiAyNDE4MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQg
KEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAw
MCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0zMiwxMiArMzAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBT
ZWxlY3Rpb247CiAKLWNsYXNzIEhUTUxUZXh0QXJlYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEdlbmVy
aWNGb3JtRWxlbWVudCB7CitjbGFzcyBIVE1MVGV4dEFyZWFFbGVtZW50IDogcHVibGljIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUgewogcHVibGljOgogICAgIGVudW0gV3JhcE1ldGhv
ZCB7IHRhX05vV3JhcCwgdGFfVmlydHVhbCwgdGFfUGh5c2ljYWwgfTsKIAogICAgIEhUTUxUZXh0
QXJlYUVsZW1lbnQoRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7Ci0gICAgfkhUTUxU
ZXh0QXJlYUVsZW1lbnQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2Rl
KiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQogCkBAIC01MCw3
ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBl
KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBzdGF0ZVZhbHVlKCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIHNhdmVTdGF0ZShTdHJpbmcmIHZhbHVlKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgcmVzdG9yZVN0YXRlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgYm9vbCByZWFkT25seSgp
IGNvbnN0IHsgcmV0dXJuIGlzUmVhZE9ubHlDb250cm9sKCk7IH0KSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI0MTgwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMDctMDctMTYgIE1pdHogUGV0dGVsICA8bWl0ekB3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gdGVzdCBmb3Ig
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1NjkKKyAgICAgICAgICBS
ZXBybyBjcmFzaCBkdWUgdG8gc2F2ZWQgc3RhdGUgbm90IGJlaW5nIGNsZWFyZWQgd2hlbiBzZWxl
Y3QgYW5kIHRleHRhcmVhIGVsZW1lbnRzIGFyZSBhZG9wdGVkIGJ5IGFub3RoZXIgZG9jdW1lbnQK
KyAgICAgICAgICBhbmQgZm9yIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNzAxCisgICAgICAgICAgUkVHUkVTU0lPTiAocjIxNDMxKTogUmVwcm9kdWNpYmxlIGNyYXNo
IHJlc3VsdGluZyBmcm9tIGNhbGxpbmcgYWRvcHROb2RlIG9uIGEgcGFzc3dvcmQgZmllbGQKKwor
ICAgICAgICAqIGZhc3QvZm9ybXMvc2F2ZWQtc3RhdGUtYWRvcHROb2RlLWNyYXNoLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9zYXZlZC1zdGF0ZS1hZG9wdE5vZGUt
Y3Jhc2guaHRtbDogQWRkZWQuCisKIDIwMDctMDctMTAgIE1pdHogUGV0dGVsICA8bWl0ekB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEh5YXR0LgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9mb3Jtcy9zYXZlZC1zdGF0ZS1hZG9wdE5vZGUtY3Jhc2gtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2F2ZWQtc3RhdGUtYWRvcHROb2RlLWNy
YXNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMv
c2F2ZWQtc3RhdGUtYWRvcHROb2RlLWNyYXNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSBAQAorU1VDQ0VTUwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zYXZlZC1z
dGF0ZS1hZG9wdE5vZGUtY3Jhc2guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL3NhdmVkLXN0YXRlLWFkb3B0Tm9kZS1jcmFzaC5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zYXZlZC1zdGF0ZS1hZG9wdE5vZGUtY3Jhc2guaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAorPHNlbGVjdCBpZD0ic2VsZWN0Ij4KKyAgICA8
b3B0aW9uPlRydWZmbGVzPC9vcHRpb24+Cis8L3NlbGVjdD4KKzx0ZXh0YXJlYSBpZD0idGV4dGFy
ZWEiPgorTWFyc2htYWxsb3dzCis8L3RleHRhcmVhPgorPGlmcmFtZSBpZD0iaWZyYW1lIiBzcmM9
ImRhdGE6dGV4dC9odG1sLCI+PC9pZnJhbWU+Cis8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSJw
YXNzd29yZCIgdmFsdWU9InNlaWtvb0MiPgorPHNjcmlwdD4KKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
IH0KKworICAgIHZhciBuZXdEb2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWZyYW1lIiku
Y29udGVudERvY3VtZW50OworICAgIG5ld0RvYy5hZG9wdE5vZGUoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInNlbGVjdCIpKTsKKyAgICBuZXdEb2MuYWRvcHROb2RlKGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJ0ZXh0YXJlYSIpKTsKKyAgICBuZXdEb2MuYWRvcHROb2RlKGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJwYXNzd29yZCIpKTsKKyAgICBsb2NhdGlvbi5ocmVmPSJkYXRhOnRleHQvaHRt
bCxTVUNDRVNTPHNjcmlwdD5pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk8L3NjciIgKyAiaXB0PiI7Cis8L3NjcmlwdD4K
</data>
<flag name="review"
          id="6465"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>