<?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>74249</bug_id>
          
          <creation_ts>2011-12-10 17:10:10 -0800</creation_ts>
          <short_desc>Push more member functions from EditCommand to CompositeEditCommand</short_desc>
          <delta_ts>2011-12-14 15:16:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          <dependson>64414</dependson>
    
    <dependson>74337</dependson>
          <blocked>74490</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cshu</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>518842</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-10 17:10:10 -0800</bug_when>
    <thetext>Right now EditCommand has many member functions that are overridden by CompositeEditCommand. However, some of them only make sense on CompositeEditCommand. We should move them to CompositeEditCommand since CompositeEditCommand now exists only at the time of initial application of the command.

Also, it doesn&apos;t make much sense for EditCommandComposition to share the same super class (EditCommand) with SimpleEditCommand and CompositeEditCommand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518846</commentid>
    <comment_count>1</comment_count>
      <attachid>118700</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-10 17:39:07 -0800</bug_when>
    <thetext>Created attachment 118700
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519058</commentid>
    <comment_count>2</comment_count>
      <attachid>118747</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-12 00:41:03 -0800</bug_when>
    <thetext>Created attachment 118747
Cleanup + regression fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519317</commentid>
    <comment_count>3</comment_count>
      <attachid>118747</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-12 10:33:02 -0800</bug_when>
    <thetext>Comment on attachment 118747
Cleanup + regression fix

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        respondToUnappliedEditing exits early even when the unapplied command was a CreteLinkCommand.

Typo CreateLinkCommand.

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:74
&gt; +    const VisibleSelection&amp; startingSelection, const VisibleSelection endingSelection, bool wasCreateLink)

I suggest using was CreateLinkCommand as parameter name.

&gt; Source/WebCore/editing/CompositeEditCommand.h:42
&gt; +    static PassRefPtr&lt;EditCommandComposition&gt; create(Document*, const VisibleSelection&amp;, const VisibleSelection, bool wasCreateLink);

Ditto.

&gt; Source/WebCore/editing/CompositeEditCommand.h:48
&gt; +    bool wasCreateLinkCommand() { return m_wasCreateLink; }

Again I would prefer m_wasCreateLinkCommand. It just feels more understandable.

&gt; Source/WebCore/editing/CompositeEditCommand.h:55
&gt; +    EditCommandComposition(Document* document, const VisibleSelection&amp; startingSelection, const VisibleSelection&amp; endingSelection, bool wasCreateLink)

Ditto.

&gt; Source/WebCore/editing/CompositeEditCommand.h:62
&gt; +    bool m_wasCreateLink;

Ditto.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2246
&gt; +    frame-&gt;editor()-&gt;replaceSelectionWithText(text, selectReplacement, smartReplace);

I&apos;m not sure this code is equivalent. The PreventNesting option seems to be lost.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1129
&gt; +    frame()-&gt;editor()-&gt;replaceSelectionWithText(text, selectReplace, smartReplace);

Ditto.

&gt; Source/WebKit/gtk/webkit/webkitwebframe.cpp:1001
&gt; +    coreFrame-&gt;editor()-&gt;replaceSelectionWithText(text, selectReplacement, smartReplace);

Ditto.

&gt; Source/WebKit/mac/WebView/WebFrame.mm:1049
&gt; +    _private-&gt;coreFrame-&gt;editor()-&gt;replaceSelectionWithFragment(core(fragment), selectReplacement, smartReplace, matchStyle);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519322</commentid>
    <comment_count>4</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-12 10:35:48 -0800</bug_when>
    <thetext>The patch shows build errors on mac.
It would be better to add layout tests for the fix relative to the spellchecker regression. If you want to write the test I could run it and validate it for you, if you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519326</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-12 10:40:08 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 118747 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118747&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        respondToUnappliedEditing exits early even when the unapplied command was a CreteLinkCommand.
&gt; 
&gt; Typo CreateLinkCommand.

Will fix.

&gt; &gt; Source/WebCore/editing/CompositeEditCommand.cpp:74
&gt; &gt; +    const VisibleSelection&amp; startingSelection, const VisibleSelection endingSelection, bool wasCreateLink)
&gt; 
&gt; I suggest using was CreateLinkCommand as parameter name.

Sure, will change.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2246
&gt; &gt; +    frame-&gt;editor()-&gt;replaceSelectionWithText(text, selectReplacement, smartReplace);
&gt; 
&gt; I&apos;m not sure this code is equivalent. The PreventNesting option seems to be lost.

PreventNesting is always set in Editor::replaceSelectionWithFragment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519344</commentid>
    <comment_count>6</comment_count>
      <attachid>118817</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-12 10:52:48 -0800</bug_when>
    <thetext>Created attachment 118817
Fixed per Enrica&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519403</commentid>
    <comment_count>7</comment_count>
      <attachid>118817</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-12 13:14:05 -0800</bug_when>
    <thetext>Comment on attachment 118817
Fixed per Enrica&apos;s comments

Let me split this patch into 3 pieces:
1a - Remove dependency on ApplyCommand in WebKit
1b - Fix a regression in SpellingCorrectionController
2 - Push member functions from EditCommand to CompositeEditCommand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519407</commentid>
    <comment_count>8</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-12 13:17:37 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 118817 [details])
&gt; Let me split this patch into 3 pieces:
&gt; 1a - Remove dependency on ApplyCommand in WebKit
&gt; 1b - Fix a regression in SpellingCorrectionController
&gt; 2 - Push member functions from EditCommand to CompositeEditCommand.

Sounds like a good plan to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520758</commentid>
    <comment_count>9</comment_count>
      <attachid>119173</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 00:41:28 -0800</bug_when>
    <thetext>Created attachment 119173
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521001</commentid>
    <comment_count>10</comment_count>
      <attachid>119173</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-14 09:40:38 -0800</bug_when>
    <thetext>Comment on attachment 119173
cleanup

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

The changes look good, but there is a build failure. Please fix that.

&gt; Source/WebCore/editing/Editor.cpp:871
&gt; +    EditCommandComposition* composition = cmd-&gt;composition();

Nit. I would ASSERT composition directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521226</commentid>
    <comment_count>11</comment_count>
      <attachid>119282</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 13:12:39 -0800</bug_when>
    <thetext>Created attachment 119282
Fixed per Enrica&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521242</commentid>
    <comment_count>12</comment_count>
      <attachid>119282</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-14 13:30:22 -0800</bug_when>
    <thetext>Comment on attachment 119282
Fixed per Enrica&apos;s comment

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521243</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 13:31:10 -0800</bug_when>
    <thetext>Great. Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521341</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 15:16:13 -0800</bug_when>
    <thetext>Committed r102833: &lt;http://trac.webkit.org/changeset/102833&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118700</attachid>
            <date>2011-12-10 17:39:07 -0800</date>
            <delta_ts>2011-12-12 00:40:57 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>fix74249</filename>
            <type>text/plain</type>
            <size>24376</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2
aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyNCw4ICsxMTI0LDkgQEAKIHsKICAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KAogICAg
ICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgdGV4
dCk7Ci0gICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoCi0g
ICAgICAgIGZyYW1lKCktPmRvY3VtZW50KCksIGZyYWdtZW50LmdldCgpLCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlIHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNo
U3R5bGUgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcpKTsKKyAgICBi
b29sIHNtYXJ0UmVwbGFjZSA9IHRydWU7CisgICAgYm9vbCBzZWxlY3RSZXBsYWNlID0gdHJ1ZTsK
KyAgICBmcmFtZSgpLT5lZGl0b3IoKS0+cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHRleHQsIHNl
bGVjdFJlcGxhY2UsIHNtYXJ0UmVwbGFjZSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjppbnNl
cnRUZXh0KGNvbnN0IFdlYlN0cmluZyYgdGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTk2
LDEwICs5OTYsOSBAQAogdm9pZCB3ZWJraXRfd2ViX2ZyYW1lX3JlcGxhY2Vfc2VsZWN0aW9uKFdl
YktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciogdGV4dCkKIHsKICAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZShmcmFtZSk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgKLSAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rp
b24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgdGV4dCk7Ci0gICAgYXBwbHlDb21tYW5k
KFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoY29yZUZyYW1lLT5kb2N1bWVudCgpLCBm
cmFnbWVudC5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlIHwgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJl
dmVudE5lc3RpbmcpKTsKKyAgICBib29sIHNlbGVjdFJlcGxhY2VtZW50ID0gZmFsc2U7CisgICAg
Ym9vbCBzbWFydFJlcGxhY2UgPSB0cnVlOworICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnJlcGxh
Y2VTZWxlY3Rpb25XaXRoVGV4dCh0ZXh0LCBzZWxlY3RSZXBsYWNlbWVudCwgc21hcnRSZXBsYWNl
KTsKIH0KIAogLyoqCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJl
dmlzaW9uIDEwMjUyOSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEwNDYsMTcgKzEwNDYsNyBAQAogCiAtICh2b2lkKV9yZXBsYWNl
U2VsZWN0aW9uV2l0aEZyYWdtZW50OihET01Eb2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgc2Vs
ZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09M
KXNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOihCT09MKW1hdGNoU3R5bGUKIHsKLSAgICBpZiAoX3By
aXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpIHx8ICFmcmFnbWVudCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpDb21tYW5kT3B0aW9u
cyBvcHRpb25zID0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nOwotICAg
IGlmIChzZWxlY3RSZXBsYWNlbWVudCkKLSAgICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQ7Ci0gICAgaWYgKHNtYXJ0UmVwbGFjZSkKLSAg
ICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlOwot
ICAgIGlmIChtYXRjaFN0eWxlKQotICAgICAgICBvcHRpb25zIHw9IFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpNYXRjaFN0eWxlOwotICAgIGFwcGx5Q29tbWFuZChSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCksIGNvcmUoZnJhZ21l
bnQpLCBvcHRpb25zKSk7Ci0gICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnJl
dmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOworICAg
IF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLT5yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdt
ZW50KGNvcmUoZnJhZ21lbnQpLCBzZWxlY3RSZXBsYWNlbWVudCwgc21hcnRSZXBsYWNlLCBtYXRj
aFN0eWxlKTsKIH0KIAogLSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OihOU1N0cmlu
ZyAqKXRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQgc21hcnRS
ZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlz
aW9uIDEwMjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDIsNyArMzAyLDYgQEAKIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yQzFFUEtO
U181UmFuZ2VFTlNfMjBUZXh0SXRlcmF0b3JCZWhhdmlvckUKIF9fWk43V2ViQ29yZTEyVGV4dEl0
ZXJhdG9yRDFFdgogX19aTjdXZWJDb3JlMTJXb3JrZXJUaHJlYWQxN3dvcmtlclRocmVhZENvdW50
RXYKLV9fWk43V2ViQ29yZTEyYXBwbHlDb21tYW5kRU4zV1RGMTBQYXNzUmVmUHRySU5TXzExRWRp
dENvbW1hbmRFRUUKIF9fWk43V2ViQ29yZTEyY2FjaGVTdG9yYWdlRXYKIF9fWk43V2ViQ29yZTEy
Y3JlYXRlTWFya3VwRVBLTlNfNE5vZGVFTlNfMTNFQ2hpbGRyZW5Pbmx5RVBOM1dURjZWZWN0b3JJ
UFMwX0xtMEVFRU5TXzEzRUFic29sdXRlVVJMc0UKIF9fWk43V2ViQ29yZTEyY3JlYXRlTWFya3Vw
RVBLTlNfNVJhbmdlRVBOM1dURjZWZWN0b3JJUE5TXzROb2RlRUxtMEVFRU5TXzIzRUFubm90YXRl
Rm9ySW50ZXJjaGFuZ2VFYk5TXzEzRUFic29sdXRlVVJMc0UKQEAgLTg0MSwxMiArODQwLDE0IEBA
CiBfX1pON1dlYkNvcmU2RWRpdG9yMjNzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbkUxNldyaXRpbmdE
aXJlY3Rpb24KIF9fWk43V2ViQ29yZTZFZGl0b3IyNGFkdmFuY2VUb05leHRNaXNzcGVsbGluZ0Vi
CiBfX1pON1dlYkNvcmU2RWRpdG9yMjRjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGVFUE5TXzE5Q1NT
U3R5bGVEZWNsYXJhdGlvbkVOU18xMEVkaXRBY3Rpb25FCitfX1pON1dlYkNvcmU2RWRpdG9yMjRy
ZXBsYWNlU2VsZWN0aW9uV2l0aFRleHRFUktOM1dURjZTdHJpbmdFYmIKIF9fWk43V2ViQ29yZTZF
ZGl0b3IyNGlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjZk
ZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjZpbmNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjZ3cml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZEVSS04zV1RGNlN0cmluZ0VSS05TMV82VmVjdG9ySVMyX0xtMEVFRQogX19a
TjdXZWJDb3JlNkVkaXRvcjI3aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0RVJLTjNXVEY2U3Ry
aW5nRQogX19aTjdXZWJDb3JlNkVkaXRvcjI3cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkRVJL
TjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlNkVkaXRvcjI4cmVwbGFjZVNlbGVjdGlvbldpdGhG
cmFnbWVudEVOM1dURjEwUGFzc1JlZlB0cklOU18xNkRvY3VtZW50RnJhZ21lbnRFRUViYmIKIF9f
Wk43V2ViQ29yZTZFZGl0b3IyOWNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsRXYKIF9fWk43
V2ViQ29yZTZFZGl0b3IyOWNhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsRXYKIF9fWk43V2Vi
Q29yZTZFZGl0b3IzMGFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbkVQTlNfMTlDU1NTdHls
ZURlY2xhcmF0aW9uRU5TXzEwRWRpdEFjdGlvbkUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDI1MjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzEsOSArNzEsOSBAQAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogUGFz
c1JlZlB0cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9uPiBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpj
cmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHN0
YXJ0aW5nU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIGVuZGluZ1NlbGVjdGlvbikK
KyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzdGFydGluZ1NlbGVjdGlvbiwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiBlbmRpbmdTZWxlY3Rpb24sIGJvb2wgd2FzQ3JlYXRlTGluaykKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRDb21tYW5kQ29tcG9zaXRpb24oZG9jdW1lbnQsIHN0
YXJ0aW5nU2VsZWN0aW9uLCBlbmRpbmdTZWxlY3Rpb24pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEVkaXRDb21tYW5kQ29tcG9zaXRpb24oZG9jdW1lbnQsIHN0YXJ0aW5nU2VsZWN0aW9uLCBl
bmRpbmdTZWxlY3Rpb24sIHdhc0NyZWF0ZUxpbmspKTsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZENv
bXBvc2l0aW9uOjpkb0FwcGx5KCkKQEAgLTExOSwyMyArMTE5LDMzIEBACiAgICAgQVNTRVJUKGlz
VG9wTGV2ZWxDb21tYW5kKCkgfHwgIW1fY29tcG9zaXRpb24pOwogfQogCi12b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpkb1VuYXBwbHkoKQorYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJl
c2VydmVzVHlwaW5nU3R5bGUoKSBjb25zdAogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZG9SZWFw
cGx5KCkKK2Jvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzVHlwaW5nQ29tbWFuZCgpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiti
b29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppc0NyZWF0ZUxpbmtDb21tYW5kKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNob3Vs
ZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpl
bnN1cmVDb21wb3NpdGlvbigpCiB7CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQg
PSB0aGlzOwogICAgIHdoaWxlIChjb21tYW5kICYmIGNvbW1hbmQtPnBhcmVudCgpKQogICAgICAg
ICBjb21tYW5kID0gY29tbWFuZC0+cGFyZW50KCk7CiAgICAgaWYgKCFjb21tYW5kLT5tX2NvbXBv
c2l0aW9uKQotICAgICAgICBjb21tYW5kLT5tX2NvbXBvc2l0aW9uID0gRWRpdENvbW1hbmRDb21w
b3NpdGlvbjo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0aW5nU2VsZWN0aW9uKCksIGVuZGluZ1Nl
bGVjdGlvbigpKTsKKyAgICAgICAgY29tbWFuZC0+bV9jb21wb3NpdGlvbiA9IEVkaXRDb21tYW5k
Q29tcG9zaXRpb246OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydGluZ1NlbGVjdGlvbigpLCBlbmRp
bmdTZWxlY3Rpb24oKSwgaXNDcmVhdGVMaW5rQ29tbWFuZCgpKTsKICAgICByZXR1cm4gY29tbWFu
ZC0+bV9jb21wb3NpdGlvbi5nZXQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dENvbW1hbmQuaAkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxNyArNjAsOSBAQAogICAgIHZpcnR1
YWwgYm9vbCBpc1NpbXBsZUVkaXRDb21tYW5kKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb21wb3NpdGVFZGl0Q29tbWFuZCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRWRpdENvbW1hbmRDb21wb3NpdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzVHlwaW5nQ29tbWFuZCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0NyZWF0ZUxpbmtDb21tYW5kKCkgY29uc3Q7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVzVHlwaW5nU3R5bGUoKSBjb25zdDsKLQogICAgIGJvb2wg
aXNUb3BMZXZlbENvbW1hbmQoKSBjb25zdCB7IHJldHVybiAhbV9wYXJlbnQ7IH0KIAotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihi
b29sKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotCiBwcm90ZWN0ZWQ6CiAgICAgRWRpdENvbW1hbmQoRG9jdW1lbnQq
KTsKICAgICBFZGl0Q29tbWFuZChEb2N1bWVudCosIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CkBAIC04MywxMSArNzUsOSBAQAogCiAgICAgdm9pZCB1
cGRhdGVMYXlvdXQoKSBjb25zdDsKIAotcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBs
eSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBkb1JlYXBwbHkoKTsgLy8gY2FsbHMgZG9BcHBseSgpCiAKK3ByaXZhdGU6CiAgICAgUmVm
UHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFZpc2libGVTZWxlY3Rpb24gbV9zdGFydGlu
Z1NlbGVjdGlvbjsKICAgICBWaXNpYmxlU2VsZWN0aW9uIG1fZW5kaW5nU2VsZWN0aW9uOwpAQCAt
OTUsNyArODUsNyBAQAogICAgIFJlZlB0cjxFbGVtZW50PiBtX2VuZGluZ1Jvb3RFZGl0YWJsZUVs
ZW1lbnQ7CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIG1fcGFyZW50OwogCi0gICAgZnJpZW5k
IHZvaWQgYXBwbHlDb21tYW5kKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KTsKKyAgICBmcmllbmQg
dm9pZCBhcHBseUNvbW1hbmQoUGFzc1JlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4pOwogfTsK
IAogY2xhc3MgU2ltcGxlRWRpdENvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgewpAQCAtMTA0
LDYgKzk0LDggQEAKICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGdldE5vZGVzSW5D
b21tYW5kKEhhc2hTZXQ8Tm9kZSo+JikgPSAwOwogI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGRv
VW5hcHBseSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCk7IC8vIGNhbGxzIGRv
QXBwbHkoKQogCiBwcm90ZWN0ZWQ6CiAgICAgU2ltcGxlRWRpdENvbW1hbmQoRG9jdW1lbnQqIGRv
Y3VtZW50KSA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSB7IH0KQEAgLTEyMyw3ICsxMTUsNyBAQAog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxTaW1wbGVFZGl0Q29tbWFuZCo+KGNvbW1hbmQpOwogfQog
Ci12b2lkIGFwcGx5Q29tbWFuZChQYXNzUmVmUHRyPEVkaXRDb21tYW5kPik7Cit2b2lkIGFwcGx5
Q29tbWFuZChQYXNzUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPik7CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAJKHJldmlzaW9uIDEwMjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjU3LDcgKzE2NTcsNyBAQAogICAgIGJv
b2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0dGlu
Z3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICBib29sIHNob3VsZEJsaW5rID0gY2Fy
ZXRJc1Zpc2libGUoKSAmJiBpc0NhcmV0KCkgJiYgKGlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2Fy
ZXRCcm93c2luZyk7CiAgICAgCi0gICAgRWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCA9IG1f
ZnJhbWUgPyBtX2ZyYW1lLT5lZGl0b3IoKS0+bGFzdEVkaXRDb21tYW5kKCkgOiAwOworICAgIENv
bXBvc2l0ZUVkaXRDb21tYW5kKiBsYXN0RWRpdENvbW1hbmQgPSBtX2ZyYW1lID8gbV9mcmFtZS0+
ZWRpdG9yKCktPmxhc3RFZGl0Q29tbWFuZCgpIDogMDsKICAgICBib29sIHNob3VsZFN0b3BCbGlu
a2luZ0R1ZVRvVHlwaW5nQ29tbWFuZCA9IGxhc3RFZGl0Q29tbWFuZCAmJiBsYXN0RWRpdENvbW1h
bmQtPnNob3VsZFN0b3BDYXJldEJsaW5raW5nKCk7CiAKICAgICAvLyBJZiB0aGUgY2FyZXQgbW92
ZWQsIHN0b3AgdGhlIGJsaW5rIHRpbWVyIHNvIHdlIGNhbiByZXN0YXJ0IHdpdGggYQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDI1Mjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDAsNyArMjQwLDcgQEAKIHsKICAgICBBU1NFUlQoZnJhbWUpOwogCi0gICAgRWRp
dENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+bGFzdEVkaXRDb21t
YW5kKCk7CisgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1l
LT5lZGl0b3IoKS0+bGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKCFsYXN0RWRpdENvbW1hbmQg
fHwgIWxhc3RFZGl0Q29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkgfHwgIXN0YXRpY19jYXN0PFR5
cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQpLT5pc09wZW5Gb3JNb3JlVHlwaW5nKCkpCiAg
ICAgICAgIHJldHVybiAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5k
LmNwcAkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRR
dWV1ZS5oIgorI2luY2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9z
aXRpb24uaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogCkBAIC0xMDksNjAgKzExMCw2MiBA
QAogICAgICAgICBBU1NFUlQoaXNDb21wb3NpdGVFZGl0Q29tbWFuZCgpKTsKICAgICAgICAgLy8g
T25seSBuZWVkIHRvIGNhbGwgYXBwbGllZEVkaXRpbmcgZm9yIHRvcC1sZXZlbCBjb21tYW5kcywg
YW5kIFR5cGluZ0NvbW1hbmRzIGRvIGl0IG9uIHRoZWlyCiAgICAgICAgIC8vIG93biAoc2VlIFR5
cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCkuCi0gICAgICAgIGlmICghaXNU
eXBpbmdDb21tYW5kKCkpCisgICAgICAgIGlmICghdG9Db21wb3NpdGVFZGl0Q29tbWFuZCh0aGlz
KS0+aXNUeXBpbmdDb21tYW5kKCkpCiAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGxp
ZWRFZGl0aW5nKHRvQ29tcG9zaXRlRWRpdENvbW1hbmQodGhpcykpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4odGhpcyktPnNldFNob3VsZFJl
dGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKGZhbHNlKTsKICAgICB9Ci0KLSAgICBzZXRTaG91
bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihmYWxzZSk7CiB9CiAKIHZvaWQgRWRpdENv
bW1hbmQ6OnVuYXBwbHkoKQogewogICAgIEFTU0VSVChtX2RvY3VtZW50KTsKICAgICBBU1NFUlQo
bV9kb2N1bWVudC0+ZnJhbWUoKSk7Ci0gCisgICAgQVNTRVJUKGlzRWRpdENvbW1hbmRDb21wb3Np
dGlvbigpKTsKKwogICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAg
CisKICAgICAvLyBDaGFuZ2VzIHRvIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hZGUgc2lu
Y2UgdGhlIGxhc3QgZWRpdGluZyBvcGVyYXRpb24gdGhhdCAKICAgICAvLyByZXF1aXJlIGEgbGF5
b3V0LCBhcyBpbiA8cmRhcjovL3Byb2JsZW0vNTY1ODYwMz4uICBMb3cgbGV2ZWwgb3BlcmF0aW9u
cywgbGlrZSAKICAgICAvLyBSZW1vdmVOb2RlQ29tbWFuZCwgZG9uJ3QgcmVxdWlyZSBhIGxheW91
dCBiZWNhdXNlIHRoZSBoaWdoIGxldmVsIG9wZXJhdGlvbnMgdGhhdCAKICAgICAvLyB1c2UgdGhl
bSBwZXJmb3JtIG9uZSBpZiBvbmUgaXMgbmVjZXNzYXJ5IChsaWtlIGZvciB0aGUgY3JlYXRpb24g
b2YgVmlzaWJsZVBvc2l0aW9ucykuCi0gICAgaWYgKGlzVG9wTGV2ZWxDb21tYW5kKCkpCi0gICAg
ICAgIHVwZGF0ZUxheW91dCgpOwotICAgIAorICAgIHVwZGF0ZUxheW91dCgpOworCiAgICAgRGVs
ZXRlQnV0dG9uQ29udHJvbGxlciogZGVsZXRlQnV0dG9uQ29udHJvbGxlciA9IGZyYW1lLT5lZGl0
b3IoKS0+ZGVsZXRlQnV0dG9uQ29udHJvbGxlcigpOwogICAgIGRlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXItPmRpc2FibGUoKTsKLSAgICBkb1VuYXBwbHkoKTsKKworICAgIHRvRWRpdENvbW1hbmRDb21w
b3NpdGlvbih0aGlzKS0+ZG9VbmFwcGx5KCk7CisKICAgICBkZWxldGVCdXR0b25Db250cm9sbGVy
LT5lbmFibGUoKTsKIAotICAgIGlmIChpc0VkaXRDb21tYW5kQ29tcG9zaXRpb24oKSkKLSAgICAg
ICAgZnJhbWUtPmVkaXRvcigpLT51bmFwcGxpZWRFZGl0aW5nKHRvRWRpdENvbW1hbmRDb21wb3Np
dGlvbih0aGlzKSk7CisgICAgZnJhbWUtPmVkaXRvcigpLT51bmFwcGxpZWRFZGl0aW5nKHRvRWRp
dENvbW1hbmRDb21wb3NpdGlvbih0aGlzKSk7CiB9CiAKIHZvaWQgRWRpdENvbW1hbmQ6OnJlYXBw
bHkoKQogewogICAgIEFTU0VSVChtX2RvY3VtZW50KTsKICAgICBBU1NFUlQobV9kb2N1bWVudC0+
ZnJhbWUoKSk7CisgICAgQVNTRVJUKGlzRWRpdENvbW1hbmRDb21wb3NpdGlvbigpKTsKICAKICAg
ICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwotICAgIAorCiAgICAgLy8gQ2hh
bmdlcyB0byB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYWRlIHNpbmNlIHRoZSBsYXN0IGVk
aXRpbmcgb3BlcmF0aW9uIHRoYXQgCiAgICAgLy8gcmVxdWlyZSBhIGxheW91dCwgYXMgaW4gPHJk
YXI6Ly9wcm9ibGVtLzU2NTg2MDM+LiAgTG93IGxldmVsIG9wZXJhdGlvbnMsIGxpa2UgCiAgICAg
Ly8gUmVtb3ZlTm9kZUNvbW1hbmQsIGRvbid0IHJlcXVpcmUgYSBsYXlvdXQgYmVjYXVzZSB0aGUg
aGlnaCBsZXZlbCBvcGVyYXRpb25zIHRoYXQgCiAgICAgLy8gdXNlIHRoZW0gcGVyZm9ybSBvbmUg
aWYgb25lIGlzIG5lY2Vzc2FyeSAobGlrZSBmb3IgdGhlIGNyZWF0aW9uIG9mIFZpc2libGVQb3Np
dGlvbnMpLgotICAgIGlmIChpc1RvcExldmVsQ29tbWFuZCgpKQotICAgICAgICB1cGRhdGVMYXlv
dXQoKTsKKyAgICB1cGRhdGVMYXlvdXQoKTsKIAogICAgIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIq
IGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIgPSBmcmFtZS0+ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNv
bnRyb2xsZXIoKTsKICAgICBkZWxldGVCdXR0b25Db250cm9sbGVyLT5kaXNhYmxlKCk7Ci0gICAg
ZG9SZWFwcGx5KCk7CisKKyAgICB0b0VkaXRDb21tYW5kQ29tcG9zaXRpb24odGhpcyktPmRvVW5h
cHBseSgpOworCiAgICAgZGVsZXRlQnV0dG9uQ29udHJvbGxlci0+ZW5hYmxlKCk7CiAKLSAgICBp
ZiAoaXNFZGl0Q29tbWFuZENvbXBvc2l0aW9uKCkpCi0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+
cmVhcHBsaWVkRWRpdGluZyh0b0VkaXRDb21tYW5kQ29tcG9zaXRpb24odGhpcykpOworICAgIGZy
YW1lLT5lZGl0b3IoKS0+cmVhcHBsaWVkRWRpdGluZyh0b0VkaXRDb21tYW5kQ29tcG9zaXRpb24o
dGhpcykpOwogfQogCi12b2lkIEVkaXRDb21tYW5kOjpkb1JlYXBwbHkoKQordm9pZCBTaW1wbGVF
ZGl0Q29tbWFuZDo6ZG9SZWFwcGx5KCkKIHsKICAgICBkb0FwcGx5KCk7CiB9CkBAIC0yMDksMzAg
KzIxMiw2IEBACiAgICAgfQogfQogCi1ib29sIEVkaXRDb21tYW5kOjpwcmVzZXJ2ZXNUeXBpbmdT
dHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEVkaXRDb21tYW5k
Ojppc1R5cGluZ0NvbW1hbmQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBFZGl0Q29tbWFuZDo6aXNDcmVhdGVMaW5rQ29tbWFuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEVkaXRDb21tYW5kOjpzaG91bGRSZXRhaW5BdXRvY29ycmVjdGlv
bkluZGljYXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEVkaXRD
b21tYW5kOjpzZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihib29sKQotewot
fQotCiB2b2lkIEVkaXRDb21tYW5kOjp1cGRhdGVMYXlvdXQoKSBjb25zdAogewogICAgIGRvY3Vt
ZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwpAQCAtMjU5LDcg
KzIzOCw3IEBACiB9CiAjZW5kaWYKIAotdm9pZCBhcHBseUNvbW1hbmQoUGFzc1JlZlB0cjxFZGl0
Q29tbWFuZD4gY29tbWFuZCkKK3ZvaWQgYXBwbHlDb21tYW5kKFBhc3NSZWZQdHI8Q29tcG9zaXRl
RWRpdENvbW1hbmQ+IGNvbW1hbmQpCiB7CiAgICAgY29tbWFuZC0+YXBwbHkoKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdENvbW1h
bmQuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKQEAgLTQyNywxOCArNDI4LDE5IEBACiAg
ICAgfQogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0Fw
cGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kKiBjb21tYW5kKQordm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFu
ZCogY29tbWFuZCkKIHsKLSAgICBpZiAoY29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAh
Y29tbWFuZC0+c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKKyAgICBBU1NF
UlQoY29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQoKSkKKyAgICBpZiAoIWNvbW1hbmQtPnNob3Vs
ZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCiAgICAgICAgIG1fZnJhbWUtPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlv
bkluZGljYXRvcik7CiAKICAgICBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRv
Y29ycmVjdGlvbkFmdGVyQ29tbWFuZChjb21tYW5kKTsKICAgICBtX29yaWdpbmFsU3RyaW5nRm9y
TGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IFN0cmluZygpOwogfQogCi12b2lkIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1h
bmQqIGNvbW1hbmQpCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRU
b1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiogY29tbWFuZCkKIHsKLSAg
ICBpZiAoIWNvbW1hbmQtPmlzQ3JlYXRlTGlua0NvbW1hbmQoKSkKKyAgICBpZiAoIWNvbW1hbmQt
Pndhc0NyZWF0ZUxpbmtDb21tYW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBjb21tYW5kLT5z
dGFydGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCku
ZW5kKCkpOwogICAgIGlmICghcmFuZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5
cGluZ0NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuaAkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAKICAgICB2b2lk
IGZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSwgYm9vbCBraWxsUmluZyk7
CiAgICAgdm9pZCBkZWxldGVTZWxlY3Rpb24oYm9vbCBzbWFydERlbGV0ZSk7CiAgICAgdm9pZCBz
ZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9uVHlwZSB0eXBlKSB7IG1fY29tcG9zaXRp
b25UeXBlID0gdHlwZTsgfQorICAgIHZvaWQgc2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25J
bmRpY2F0b3IoYm9vbCByZXRhaW4pIHsgbV9zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGlj
YXRvciA9IHJldGFpbjsgfQogCiBwcml2YXRlOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFR5cGlu
Z0NvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5kIGNvbW1h
bmQsIGNvbnN0IFN0cmluZyYgdGV4dCA9ICIiLCBPcHRpb25zIG9wdGlvbnMgPSAwLCBUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eSkKQEAgLTEwMCwxMCAr
MTAxLDkgQEAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzVHlwaW5nQ29t
bWFuZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJlc2VydmVzVHlwaW5nU3R5bGU7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX3No
b3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKGJvb2wgcmV0YWluKSB7IG1fc2hv
dWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgPSByZXRhaW47IH0KLSAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV9wcmVzZXJ2ZXNUeXBpbmdTdHlsZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRS
ZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3I7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9
CiAgICAgdm9pZCBzZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhib29sIHByZXZlbnQpIHsg
bV9zaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyA9IHByZXZlbnQ7IH0KIAogICAgIHN0YXRpYyB2
b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5n
Q29tbWFuZCosIEZyYW1lKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJldmlzaW9u
IDEwMjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkwLDcgKzkwLDcgQEAKIAogICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWU7IH0KICAgICBEZWxldGVCdXR0b25Db250cm9sbGVyKiBkZWxldGVCdXR0b25Db250
cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVCdXR0b25Db250cm9sbGVyLmdldCgpOyB9
Ci0gICAgRWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCgpIHsgcmV0dXJuIG1fbGFzdEVkaXRD
b21tYW5kLmdldCgpOyB9CisgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFu
ZCgpIHsgcmV0dXJuIG1fbGFzdEVkaXRDb21tYW5kLmdldCgpOyB9CiAKICAgICB2b2lkIGhhbmRs
ZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOwogICAgIHZvaWQgaGFuZGxlSW5wdXRNZXRo
b2RLZXlkb3duKEtleWJvYXJkRXZlbnQqKTsKQEAgLTM3Myw2ICszNzMsOSBAQAogICAgIHZvaWQg
cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
OwogI2VuZGlmCiAKKyAgICB2b2lkIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFy
dFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7CisgICAgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJl
cGxhY2UpOworCiAgICAgYm9vbCBzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcihEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0OwogICAgIHZvaWQg
dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBvbmx5SGFuZGxlV29y
ZHNDb250YWluaW5nU2VsZWN0aW9uKTsKICAgICB2b2lkIGRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0
UG9zaXRpb24oY29uc3QgUG9zaXRpb24mLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsU3RyaW5nKTsK
QEAgLTM4Miw3ICszODUsNyBAQAogcHJpdmF0ZToKICAgICBGcmFtZSogbV9mcmFtZTsKICAgICBP
d25QdHI8RGVsZXRlQnV0dG9uQ29udHJvbGxlcj4gbV9kZWxldGVCdXR0b25Db250cm9sbGVyOwot
ICAgIFJlZlB0cjxFZGl0Q29tbWFuZD4gbV9sYXN0RWRpdENvbW1hbmQ7CisgICAgUmVmUHRyPENv
bXBvc2l0ZUVkaXRDb21tYW5kPiBtX2xhc3RFZGl0Q29tbWFuZDsKICAgICBSZWZQdHI8Tm9kZT4g
bV9yZW1vdmVkQW5jaG9yOwogICAgIFJlZlB0cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9kZTsKICAg
ICB1bnNpZ25lZCBtX2NvbXBvc2l0aW9uU3RhcnQ7CkBAIC00MDIsOCArNDA1LDYgQEAKICAgICBQ
YXNzUmVmUHRyPENsaXBib2FyZD4gbmV3R2VuZXJhbENsaXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQ
b2xpY3ksIEZyYW1lKik7CiAgICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQo
UGFzdGVib2FyZCopOwogICAgIHZvaWQgcGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiwg
Ym9vbCBhbGxvd1BsYWluVGV4dCk7Ci0gICAgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdt
ZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQs
IGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUpOwotICAgIHZvaWQgcmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJv
b2wgc21hcnRSZXBsYWNlKTsKICAgICB2b2lkIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBh
c3RlYm9hcmQqKTsKICAgICB2b2lkIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlv
bigpOwogICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3Nw
ZWxsaW5nUmFuZ2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0
Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuaAkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyNCArMzksMjcg
QEAKIAogY2xhc3MgRWRpdENvbW1hbmRDb21wb3NpdGlvbiA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4g
Y3JlYXRlKERvY3VtZW50KiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRDb21tYW5kQ29tcG9zaXRpb24+
IGNyZWF0ZShEb2N1bWVudCosIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uLCBib29sIHdhc0NyZWF0ZUxpbmspOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBw
bHkoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCkgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIGRvUmVhcHBseSgpIE9WRVJSSURFOworICAgIHZvaWQgZG9VbmFwcGx5
KCk7CisgICAgdm9pZCBkb1JlYXBwbHkoKTsKICAgICB2b2lkIGFwcGVuZChTaW1wbGVFZGl0Q29t
bWFuZCopOworICAgIGJvb2wgd2FzQ3JlYXRlTGlua0NvbW1hbmQoKSB7IHJldHVybiBtX3dhc0Ny
ZWF0ZUxpbms7IH0KIAogI2lmbmRlZiBOREVCVUcKICAgICB2aXJ0dWFsIHZvaWQgZ2V0Tm9kZXNJ
bkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mKTsKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEVkaXRD
b21tYW5kQ29tcG9zaXRpb24oRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzdGFydGluZ1NlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2Vs
ZWN0aW9uKQorICAgIEVkaXRDb21tYW5kQ29tcG9zaXRpb24oRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzdGFydGluZ1NlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uLCBib29sIHdhc0NyZWF0ZUxpbmspCiAgICAgICAgIDog
RWRpdENvbW1hbmQoZG9jdW1lbnQsIHN0YXJ0aW5nU2VsZWN0aW9uLCBlbmRpbmdTZWxlY3Rpb24p
CisgICAgICAgICwgbV93YXNDcmVhdGVMaW5rKHdhc0NyZWF0ZUxpbmspCiAgICAgeyB9CiAgICAg
dmlydHVhbCBib29sIGlzRWRpdENvbW1hbmRDb21wb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIFZlY3RvcjxSZWZQdHI8U2ltcGxlRWRpdENvbW1hbmQ+ID4g
bV9jb21tYW5kczsKKyAgICBib29sIG1fd2FzQ3JlYXRlTGluazsKIH07CiAKIGNsYXNzIENvbXBv
c2l0ZUVkaXRDb21tYW5kIDogcHVibGljIEVkaXRDb21tYW5kIHsKQEAgLTY2LDcgKzY5LDEzIEBA
CiAgICAgYm9vbCBpc0ZpcnN0Q29tbWFuZChFZGl0Q29tbWFuZCogY29tbWFuZCkgeyByZXR1cm4g
IW1fY29tbWFuZHMuaXNFbXB0eSgpICYmIG1fY29tbWFuZHMuZmlyc3QoKSA9PSBjb21tYW5kOyB9
CiAgICAgRWRpdENvbW1hbmRDb21wb3NpdGlvbiogY29tcG9zaXRpb24oKSB7IHJldHVybiBtX2Nv
bXBvc2l0aW9uLmdldCgpOyB9CiAgICAgRWRpdENvbW1hbmRDb21wb3NpdGlvbiogZW5zdXJlQ29t
cG9zaXRpb24oKTsKLQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXNUeXBpbmdTdHls
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1R5cGluZ0NvbW1hbmQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNDcmVhdGVMaW5rQ29tbWFuZCgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRTdG9wQ2FyZXRCbGlua2luZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29tcG9zaXRlRWRpdENvbW1hbmQo
RG9jdW1lbnQqKTsKIApAQCAtMTQ2LDkgKzE1NSw2IEBACiAgICAgVmVjdG9yPFJlZlB0cjxFZGl0
Q29tbWFuZD4gPiBtX2NvbW1hbmRzOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBkb1Vu
YXBwbHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCk7Ci0KICAgICBib29sIGlzQ29t
cG9zaXRlRWRpdENvbW1hbmQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAKICAg
ICBSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4gbV9jb21wb3NpdGlvbjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oCShyZXZpc2lvbiAxMDI1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOSBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENvbXBvc2l0ZUVkaXRDb21tYW5kOwog
Y2xhc3MgRWRpdG9yQ2xpZW50OwotY2xhc3MgRWRpdENvbW1hbmQ7CitjbGFzcyBFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKIApA
QCAtODcsOCArODgsOCBAQAogICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGlu
Z0lmQXBwcm9wcmlhdGUoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKIAogICAg
IHZvaWQgcmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9u
KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOyBVTlVTRURfUEFSQU0o
Y29ycmVjdGlvbik7IH0pCi0gICAgdm9pZCByZXNwb25kVG9BcHBsaWVkRWRpdGluZyhFZGl0Q29t
bWFuZCopIFVOTEVTU19FTkFCTEVEKHt9KQotICAgIHZvaWQgcmVzcG9uZFRvVW5hcHBsaWVkRWRp
dGluZyhFZGl0Q29tbWFuZCopIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIHZvaWQgcmVzcG9uZFRv
QXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqKSBVTkxFU1NfRU5BQkxFRCh7fSkK
KyAgICB2b2lkIHJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlv
biopIFVOTEVTU19FTkFCTEVEKHt9KQogICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsg
VU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCiAKICAgICB2b2lkIHN0b3BQZW5kaW5nQ29y
cmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFC
TEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxMDI1MjkpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyNDEsMTIgKzIyNDEsOSBAQAogCiB2b2lkIFdlYlBhZ2U6OnJlcGxhY2VTZWxl
Y3Rpb25XaXRoVGV4dChGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBp
ZiAoZnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHRleHRGcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQoZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCB0ZXh0
KTsKLSAgICBhcHBseUNvbW1hbmQoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShmcmFt
ZS0+ZG9jdW1lbnQoKSwgdGV4dEZyYWdtZW50LnJlbGVhc2UoKSwgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OlNlbGVjdFJlcGxhY2VtZW50IHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNo
U3R5bGUgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcpKTsKLSAgICBm
cmFtZS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWdu
VG9FZGdlSWZOZWVkZWQpOworICAgIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQgPSB0cnVlOworICAg
IGJvb2wgc21hcnRSZXBsYWNlID0gdHJ1ZTsKKyAgICBmcmFtZS0+ZWRpdG9yKCktPnJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dCh0ZXh0LCBzZWxlY3RSZXBsYWNlbWVudCwgc21hcnRSZXBsYWNlKTsK
IH0KIAogdm9pZCBXZWJQYWdlOjpjbGVhclNlbGVjdGlvbigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118747</attachid>
            <date>2011-12-12 00:41:03 -0800</date>
            <delta_ts>2011-12-12 10:52:43 -0800</delta_ts>
            <desc>Cleanup + regression fix</desc>
            <filename>bug-74249-20111212004102.patch</filename>
            <type>text/plain</type>
            <size>32737</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDExLTEyLTExICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFB1c2ggbW9yZSBtZW1iZXIgZnVu
Y3Rpb25zIGZyb20gRWRpdENvbW1hbmQgdG8gQ29tcG9zaXRlRWRpdENvbW1hbmQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MjQ5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBwcmVzZXJ2ZXNUeXBp
bmdTdHlsZSwgaXNUeXBpbmdDb21tYW5kLCBpc0NyZWF0ZUxpbmtDb21tYW5kLCBzaG91bGRSZXRh
aW5BdXRvY29ycmVjdGlvbkluZGljYXRvcgorICAgICAgICBhbmQgc2hvdWxkU3RvcENhcmV0Qmxp
bmtpbmcgZnJvbSBFZGl0Q29tbWFuZCB0byBDb21wb3NpdGVFZGl0Q29tbWFuZC4KKworICAgICAg
ICBBbHNvIG1vdmUgZG9VbmFwcGx5IGFuZCBkb1JlYXBwbHkgZnJvbSBFZGl0Q29tbWFuZCB0byBT
aW1wbGVFZGl0Q29tbWFuZCBzaW5jZSBvbmx5IHN1YmNsYXNzZXMgb2YKKyAgICAgICAgU2ltcGxl
RWRpdENvbW1hbmQgaW1wbGVtZW50IGVpdGhlci4KKworICAgICAgICBJbiBhZGRpdGlvbiwgdGhp
cyBwYXRjaCBmaXhlcyBhIHJlZ3Jlc3Npb24gZnJvbSByMTAyMzU3IHRoYXQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcidzCisgICAgICAgIHJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcgZXhp
dHMgZWFybHkgZXZlbiB3aGVuIHRoZSB1bmFwcGxpZWQgY29tbWFuZCB3YXMgYSBDcmV0ZUxpbmtD
b21tYW5kLgorICAgICAgICAoVW5mb3J0dW5hdGVseSBubyB0ZXN0cyBiZWNhdXNlIHRoaXMgZmVh
dHVyZSBpcyBvbmx5IGV4ZXJjaXNlZCBvbiBMaW9uIHRvIHdoaWNoIEkgZG9uJ3QgaGF2ZSBhY2Nl
c3MpCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9z
aXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9u
Ojpkb1VuYXBwbHkpOiBDYWxsIGRvVW5hcHBseSBkaXJlY3RseSBzaW5jZSBTaW1wbGVFZGl0Q29t
bWFuZCBubyBsb25nZXIKKyAgICAgICAgaGFzIHVuYXBwbHkvcmVhcHBseS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OmRvUmVhcHBseSk6IERpdHRvIHdpdGggZG9S
ZWFwcGx5LgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnByZXNlcnZl
c1R5cGluZ1N0eWxlKTogTW92ZWQgZnJvbSBFZGl0Q29tbWFuZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjppc1R5cGluZ0NvbW1hbmQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjppc0NyZWF0ZUxpbmtDb21tYW5kKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2hvdWxkUmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjplbnN1cmVDb21wb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21w
b3NpdGlvbjo6d2FzQ3JlYXRlTGlua0NvbW1hbmQpOiBBZGRlZDsgbWlycm9ycyB0aGUgdmFsdWUg
b2YgaXNDcmVhdGVMaW5rQ29tbWFuZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29t
cG9zaXRpb246OkVkaXRDb21tYW5kQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlRWRpdENvbW1hbmQ6OnNob3VsZFN0b3BDYXJldEJsaW5raW5nKTogTW92ZWQgZnJvbSBF
ZGl0Q29tbWFuZC4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRDb21tYW5kOjphcHBseSk6IENhbGwgc2V0U2hvdWxkUmV0YWluQXV0b2Nv
cnJlY3Rpb25JbmRpY2F0b3Igb25seSBvbiBUeXBpbmdDb21tYW5kLiBBbHRob3VnaAorICAgICAg
ICBFZGl0Q29tbWFuZCBzdXBwb3J0ZWQgc2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRp
Y2F0b3IsIG9ubHkgVHlwaW5nQ29tbWFuZCBzdG9yZWQgdGhlIHZhbHVlLgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdENvbW1hbmQ6OnVuYXBwbHkpOiBBc3N1bWUgdW5hcHBseSBpcyBvbmx5IGNhbGxl
ZCBvbiBFZGl0Q29tbWFuZENvbXBvc2l0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1h
bmQ6OnJlYXBwbHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUVkaXRDb21tYW5k
Ojpkb1JlYXBwbHkpOiBNb3ZlZCBmcm9tIEVkaXRDb21tYW5kLgorICAgICAgICAoV2ViQ29yZTo6
YXBwbHlDb21tYW5kKTogVGFrZXMgQ29tcG9zaXRlRWRpdENvbW1hbmQgaW5zdGVhZCBvZiBFZGl0
Q29tbWFuZC4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmg6CisgICAgICAgICogZWRp
dGluZy9FZGl0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGFzdEVkaXRDb21tYW5k
KTogUmV0dXJucyBDb21wb3NpdGVFZGl0Q29tbWFuZCBpbnN0ZWFkIG9mIEVkaXRDb21tYW5kLgor
ICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAqIGVkaXRpbmcvU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGluZyk6IFRha2VzIENv
bXBvc2l0ZUVkaXRDb21tYW5kIGluc3RlYWQgb2YKKyAgICAgICAgRWRpdENvbW1hbmQuCisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFw
cGxpZWRFZGl0aW5nKTogVGFrZXMgRWRpdENvbW1hbmRDb21wb3NpdGlvbiBpbnN0ZWFkIG9mCisg
ICAgICAgIEVkaXRDb21tYW5kLgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5oOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVu
Rm9yVHlwaW5nKTogTWFkZSB0aGlzIG1lbWJlciBmdW5jdGlvbiBwdWJsaWMgc2luY2Ugbm93Cisg
ICAgICAgIGl0J3MgY2FsbGVkIGV4cGxpY2l0bHkgaW4gRWRpdENvbW1hbmQ6OmFwcGx5LgorICAg
ICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5n
Q29tbWFuZDo6c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpOgorCiAyMDEx
LTEyLTExICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
c2UgW1N1cHBsZW1lbnRhbF0gSURMIGluIFdlYlNvY2tldApJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4JKHJldmlzaW9uIDEwMjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDIsNyArMzAyLDYgQEAgX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0
b3I4c3VicmFuZ2VFUE5TXwogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3JDMUVQS05TXzVSYW5n
ZUVOU18yMFRleHRJdGVyYXRvckJlaGF2aW9yRQogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3JE
MUV2CiBfX1pON1dlYkNvcmUxMldvcmtlclRocmVhZDE3d29ya2VyVGhyZWFkQ291bnRFdgotX19a
TjdXZWJDb3JlMTJhcHBseUNvbW1hbmRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTFFZGl0Q29tbWFu
ZEVFRQogX19aTjdXZWJDb3JlMTJjYWNoZVN0b3JhZ2VFdgogX19aTjdXZWJDb3JlMTJjcmVhdGVN
YXJrdXBFUEtOU180Tm9kZUVOU18xM0VDaGlsZHJlbk9ubHlFUE4zV1RGNlZlY3RvcklQUzBfTG0w
RUVFTlNfMTNFQWJzb2x1dGVVUkxzRQogX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU181
UmFuZ2VFUE4zV1RGNlZlY3RvcklQTlNfNE5vZGVFTG0wRUVFTlNfMjNFQW5ub3RhdGVGb3JJbnRl
cmNoYW5nZUViTlNfMTNFQWJzb2x1dGVVUkxzRQpAQCAtODQxLDEyICs4NDAsMTQgQEAgX19aTjdX
ZWJDb3JlNkVkaXRvcjIxaXNTZWxlY3Rpb25NaXNzcGVsbAogX19aTjdXZWJDb3JlNkVkaXRvcjIz
c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb25FMTZXcml0aW5nRGlyZWN0aW9uCiBfX1pON1dlYkNvcmU2
RWRpdG9yMjRhZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmdFYgogX19aTjdXZWJDb3JlNkVkaXRvcjI0
Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMTBF
ZGl0QWN0aW9uRQorX19aTjdXZWJDb3JlNkVkaXRvcjI0cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0
RVJLTjNXVEY2U3RyaW5nRWJiCiBfX1pON1dlYkNvcmU2RWRpdG9yMjRpc1NlbGVjdGlvblVuZ3Jh
bW1hdGljYWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgog
X19aTjdXZWJDb3JlNkVkaXRvcjI2d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmRFUktOM1dURjZT
dHJpbmdFUktOUzFfNlZlY3RvcklTMl9MbTBFRUUKIF9fWk43V2ViQ29yZTZFZGl0b3IyN2hhbmRs
ZUNvcnJlY3Rpb25QYW5lbFJlc3VsdEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0
b3IyN3JlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZEVSS04zV1RGNlN0cmluZ0UKK19fWk43V2Vi
Q29yZTZFZGl0b3IyOHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnRFTjNXVEYxMFBhc3NSZWZQ
dHJJTlNfMTZEb2N1bWVudEZyYWdtZW50RUVFYmJiCiBfX1pON1dlYkNvcmU2RWRpdG9yMjljYW5E
ZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjljYW5JbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMzBhcHBseVBhcmFn
cmFwaFN0eWxlVG9TZWxlY3Rpb25FUE5TXzE5Q1NTU3R5bGVEZWNsYXJhdGlvbkVOU18xMEVkaXRB
Y3Rpb25FCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcAkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDkgKzcxLDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogUGFzc1Jl
ZlB0cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9uPiBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpjcmVh
dGUoRG9jdW1lbnQqIGRvY3VtZW50LAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHN0YXJ0
aW5nU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIGVuZGluZ1NlbGVjdGlvbikKKyAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzdGFydGluZ1NlbGVjdGlvbiwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiBlbmRpbmdTZWxlY3Rpb24sIGJvb2wgd2FzQ3JlYXRlTGluaykKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRDb21tYW5kQ29tcG9zaXRpb24oZG9jdW1lbnQsIHN0YXJ0
aW5nU2VsZWN0aW9uLCBlbmRpbmdTZWxlY3Rpb24pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEVkaXRDb21tYW5kQ29tcG9zaXRpb24oZG9jdW1lbnQsIHN0YXJ0aW5nU2VsZWN0aW9uLCBlbmRp
bmdTZWxlY3Rpb24sIHdhc0NyZWF0ZUxpbmspKTsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZENvbXBv
c2l0aW9uOjpkb0FwcGx5KCkKQEAgLTg1LDE0ICs4NSwxNCBAQCB2b2lkIEVkaXRDb21tYW5kQ29t
cG9zaXRpb246OmRvVW5hcHBseSgpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBtX2NvbW1hbmRzLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6ZTsgaSAhPSAwOyAtLWkpCi0gICAgICAgIG1f
Y29tbWFuZHNbaSAtIDFdLT51bmFwcGx5KCk7CisgICAgICAgIG1fY29tbWFuZHNbaSAtIDFdLT5k
b1VuYXBwbHkoKTsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpkb1JlYXBwbHko
KQogewogICAgIHNpemVfdCBzaXplID0gbV9jb21tYW5kcy5zaXplKCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgIT0gc2l6ZTsgKytpKQotICAgICAgICBtX2NvbW1hbmRzW2ldLT5yZWFwcGx5
KCk7CisgICAgICAgIG1fY29tbWFuZHNbaV0tPmRvUmVhcHBseSgpOwogfQogCiB2b2lkIEVkaXRD
b21tYW5kQ29tcG9zaXRpb246OmFwcGVuZChTaW1wbGVFZGl0Q29tbWFuZCogY29tbWFuZCkKQEAg
LTExOSwxNCArMTE5LDI0IEBAIENvbXBvc2l0ZUVkaXRDb21tYW5kOjp+Q29tcG9zaXRlRWRpdENv
bW0KICAgICBBU1NFUlQoaXNUb3BMZXZlbENvbW1hbmQoKSB8fCAhbV9jb21wb3NpdGlvbik7CiB9
CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRvVW5hcHBseSgpCitib29sIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpkb1JlYXBwbHkoKQorYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aXNUeXBp
bmdDb21tYW5kKCkgY29uc3QKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzQ3JlYXRlTGlua0Nv
bW1hbmQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25zdAor
eworICAgIHJldHVybiBmYWxzZTsKIH0KIAogRWRpdENvbW1hbmRDb21wb3NpdGlvbiogQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OmVuc3VyZUNvbXBvc2l0aW9uKCkKQEAgLTEzNSw3ICsxNDUsNyBAQCBF
ZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBDb21wb3NpdGVFZGl0Q29tCiAgICAgd2hpbGUgKGNvbW1h
bmQgJiYgY29tbWFuZC0+cGFyZW50KCkpCiAgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kLT5wYXJl
bnQoKTsKICAgICBpZiAoIWNvbW1hbmQtPm1fY29tcG9zaXRpb24pCi0gICAgICAgIGNvbW1hbmQt
Pm1fY29tcG9zaXRpb24gPSBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpjcmVhdGUoZG9jdW1lbnQo
KSwgc3RhcnRpbmdTZWxlY3Rpb24oKSwgZW5kaW5nU2VsZWN0aW9uKCkpOworICAgICAgICBjb21t
YW5kLT5tX2NvbXBvc2l0aW9uID0gRWRpdENvbW1hbmRDb21wb3NpdGlvbjo6Y3JlYXRlKGRvY3Vt
ZW50KCksIHN0YXJ0aW5nU2VsZWN0aW9uKCksIGVuZGluZ1NlbGVjdGlvbigpLCBpc0NyZWF0ZUxp
bmtDb21tYW5kKCkpOwogICAgIHJldHVybiBjb21tYW5kLT5tX2NvbXBvc2l0aW9uLmdldCgpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFu
ZC5oCShyZXZpc2lvbiAxMDI1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDI0ICszOSwyNyBAQCBjbGFzcyBU
ZXh0OwogCiBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uIDogcHVibGljIEVkaXRDb21tYW5k
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9u
PiBjcmVhdGUoRG9jdW1lbnQqLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlv
bj4gY3JlYXRlKERvY3VtZW50KiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24sIGJvb2wgd2FzQ3JlYXRlTGluayk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9B
cHBseSgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCkgT1ZFUlJJREU7CisgICAgdm9pZCBkb1VuYXBw
bHkoKTsKKyAgICB2b2lkIGRvUmVhcHBseSgpOwogICAgIHZvaWQgYXBwZW5kKFNpbXBsZUVkaXRD
b21tYW5kKik7CisgICAgYm9vbCB3YXNDcmVhdGVMaW5rQ29tbWFuZCgpIHsgcmV0dXJuIG1fd2Fz
Q3JlYXRlTGluazsgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgIHZpcnR1YWwgdm9pZCBnZXROb2Rl
c0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYpOwogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgRWRp
dENvbW1hbmRDb21wb3NpdGlvbihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHN0YXJ0aW5nU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdT
ZWxlY3Rpb24pCisgICAgRWRpdENvbW1hbmRDb21wb3NpdGlvbihEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHN0YXJ0aW5nU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24sIGJvb2wgd2FzQ3JlYXRlTGluaykKICAgICAgICAg
OiBFZGl0Q29tbWFuZChkb2N1bWVudCwgc3RhcnRpbmdTZWxlY3Rpb24sIGVuZGluZ1NlbGVjdGlv
bikKKyAgICAgICAgLCBtX3dhc0NyZWF0ZUxpbmsod2FzQ3JlYXRlTGluaykKICAgICB7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNFZGl0Q29tbWFuZENvbXBvc2l0aW9uKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgVmVjdG9yPFJlZlB0cjxTaW1wbGVFZGl0Q29tbWFuZD4g
PiBtX2NvbW1hbmRzOworICAgIGJvb2wgbV93YXNDcmVhdGVMaW5rOwogfTsKIAogY2xhc3MgQ29t
cG9zaXRlRWRpdENvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgewpAQCAtNjYsNyArNjksMTMg
QEAgcHVibGljOgogICAgIGJvb2wgaXNGaXJzdENvbW1hbmQoRWRpdENvbW1hbmQqIGNvbW1hbmQp
IHsgcmV0dXJuICFtX2NvbW1hbmRzLmlzRW1wdHkoKSAmJiBtX2NvbW1hbmRzLmZpcnN0KCkgPT0g
Y29tbWFuZDsgfQogICAgIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbXBvc2l0aW9uKCkgeyBy
ZXR1cm4gbV9jb21wb3NpdGlvbi5nZXQoKTsgfQogICAgIEVkaXRDb21tYW5kQ29tcG9zaXRpb24q
IGVuc3VyZUNvbXBvc2l0aW9uKCk7Ci0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVz
VHlwaW5nU3R5bGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBpbmdDb21tYW5kKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzQ3JlYXRlTGlua0NvbW1hbmQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbXBvc2l0ZUVk
aXRDb21tYW5kKERvY3VtZW50Kik7CiAKQEAgLTE0Niw5ICsxNTUsNiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgVmVjdG9yPFJlZlB0cjxFZGl0Q29tbWFuZD4gPiBtX2NvbW1hbmRzOwogCiBwcml2YXRlOgot
ICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5
KCk7Ci0KICAgICBib29sIGlzQ29tcG9zaXRlRWRpdENvbW1hbmQoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiB0cnVlOyB9CiAKICAgICBSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4gbV9j
b21wb3NpdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCShy
ZXZpc2lvbiAxMDI1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJTY29wZWRFdmVudFF1ZXVlLmgi
CisjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5o
IgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAKQEAgLTEwOSw2MCArMTEwLDYyIEBAIHZvaWQg
RWRpdENvbW1hbmQ6OmFwcGx5KCkKICAgICAgICAgQVNTRVJUKGlzQ29tcG9zaXRlRWRpdENvbW1h
bmQoKSk7CiAgICAgICAgIC8vIE9ubHkgbmVlZCB0byBjYWxsIGFwcGxpZWRFZGl0aW5nIGZvciB0
b3AtbGV2ZWwgY29tbWFuZHMsIGFuZCBUeXBpbmdDb21tYW5kcyBkbyBpdCBvbiB0aGVpcgogICAg
ICAgICAvLyBvd24gKHNlZSBUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQp
LgotICAgICAgICBpZiAoIWlzVHlwaW5nQ29tbWFuZCgpKQorICAgICAgICBpZiAoIXRvQ29tcG9z
aXRlRWRpdENvbW1hbmQodGhpcyktPmlzVHlwaW5nQ29tbWFuZCgpKQogICAgICAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5hcHBsaWVkRWRpdGluZyh0b0NvbXBvc2l0ZUVkaXRDb21tYW5kKHRoaXMp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+
KHRoaXMpLT5zZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihmYWxzZSk7CiAg
ICAgfQotCi0gICAgc2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoZmFsc2Up
OwogfQogCiB2b2lkIEVkaXRDb21tYW5kOjp1bmFwcGx5KCkKIHsKICAgICBBU1NFUlQobV9kb2N1
bWVudCk7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQtPmZyYW1lKCkpOwotIAorICAgIEFTU0VSVChp
c0VkaXRDb21tYW5kQ29tcG9zaXRpb24oKSk7CisKICAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3Vt
ZW50LT5mcmFtZSgpOwotICAgIAorCiAgICAgLy8gQ2hhbmdlcyB0byB0aGUgZG9jdW1lbnQgbWF5
IGhhdmUgYmVlbiBtYWRlIHNpbmNlIHRoZSBsYXN0IGVkaXRpbmcgb3BlcmF0aW9uIHRoYXQgCiAg
ICAgLy8gcmVxdWlyZSBhIGxheW91dCwgYXMgaW4gPHJkYXI6Ly9wcm9ibGVtLzU2NTg2MDM+LiAg
TG93IGxldmVsIG9wZXJhdGlvbnMsIGxpa2UgCiAgICAgLy8gUmVtb3ZlTm9kZUNvbW1hbmQsIGRv
bid0IHJlcXVpcmUgYSBsYXlvdXQgYmVjYXVzZSB0aGUgaGlnaCBsZXZlbCBvcGVyYXRpb25zIHRo
YXQgCiAgICAgLy8gdXNlIHRoZW0gcGVyZm9ybSBvbmUgaWYgb25lIGlzIG5lY2Vzc2FyeSAobGlr
ZSBmb3IgdGhlIGNyZWF0aW9uIG9mIFZpc2libGVQb3NpdGlvbnMpLgotICAgIGlmIChpc1RvcExl
dmVsQ29tbWFuZCgpKQotICAgICAgICB1cGRhdGVMYXlvdXQoKTsKLSAgICAKKyAgICB1cGRhdGVM
YXlvdXQoKTsKKwogICAgIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIqIGRlbGV0ZUJ1dHRvbkNvbnRy
b2xsZXIgPSBmcmFtZS0+ZWRpdG9yKCktPmRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKTsKICAgICBk
ZWxldGVCdXR0b25Db250cm9sbGVyLT5kaXNhYmxlKCk7Ci0gICAgZG9VbmFwcGx5KCk7CisKKyAg
ICB0b0VkaXRDb21tYW5kQ29tcG9zaXRpb24odGhpcyktPmRvVW5hcHBseSgpOworCiAgICAgZGVs
ZXRlQnV0dG9uQ29udHJvbGxlci0+ZW5hYmxlKCk7CiAKLSAgICBpZiAoaXNFZGl0Q29tbWFuZENv
bXBvc2l0aW9uKCkpCi0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+dW5hcHBsaWVkRWRpdGluZyh0
b0VkaXRDb21tYW5kQ29tcG9zaXRpb24odGhpcykpOworICAgIGZyYW1lLT5lZGl0b3IoKS0+dW5h
cHBsaWVkRWRpdGluZyh0b0VkaXRDb21tYW5kQ29tcG9zaXRpb24odGhpcykpOwogfQogCiB2b2lk
IEVkaXRDb21tYW5kOjpyZWFwcGx5KCkKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAg
QVNTRVJUKG1fZG9jdW1lbnQtPmZyYW1lKCkpOworICAgIEFTU0VSVChpc0VkaXRDb21tYW5kQ29t
cG9zaXRpb24oKSk7CiAgCiAgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsK
LSAgICAKKwogICAgIC8vIENoYW5nZXMgdG8gdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFk
ZSBzaW5jZSB0aGUgbGFzdCBlZGl0aW5nIG9wZXJhdGlvbiB0aGF0IAogICAgIC8vIHJlcXVpcmUg
YSBsYXlvdXQsIGFzIGluIDxyZGFyOi8vcHJvYmxlbS81NjU4NjAzPi4gIExvdyBsZXZlbCBvcGVy
YXRpb25zLCBsaWtlIAogICAgIC8vIFJlbW92ZU5vZGVDb21tYW5kLCBkb24ndCByZXF1aXJlIGEg
bGF5b3V0IGJlY2F1c2UgdGhlIGhpZ2ggbGV2ZWwgb3BlcmF0aW9ucyB0aGF0IAogICAgIC8vIHVz
ZSB0aGVtIHBlcmZvcm0gb25lIGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVh
dGlvbiBvZiBWaXNpYmxlUG9zaXRpb25zKS4KLSAgICBpZiAoaXNUb3BMZXZlbENvbW1hbmQoKSkK
LSAgICAgICAgdXBkYXRlTGF5b3V0KCk7CisgICAgdXBkYXRlTGF5b3V0KCk7CiAKICAgICBEZWxl
dGVCdXR0b25Db250cm9sbGVyKiBkZWxldGVCdXR0b25Db250cm9sbGVyID0gZnJhbWUtPmVkaXRv
cigpLT5kZWxldGVCdXR0b25Db250cm9sbGVyKCk7CiAgICAgZGVsZXRlQnV0dG9uQ29udHJvbGxl
ci0+ZGlzYWJsZSgpOwotICAgIGRvUmVhcHBseSgpOworCisgICAgdG9FZGl0Q29tbWFuZENvbXBv
c2l0aW9uKHRoaXMpLT5kb1JlYXBwbHkoKTsKKwogICAgIGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIt
PmVuYWJsZSgpOwogCi0gICAgaWYgKGlzRWRpdENvbW1hbmRDb21wb3NpdGlvbigpKQotICAgICAg
ICBmcmFtZS0+ZWRpdG9yKCktPnJlYXBwbGllZEVkaXRpbmcodG9FZGl0Q29tbWFuZENvbXBvc2l0
aW9uKHRoaXMpKTsKKyAgICBmcmFtZS0+ZWRpdG9yKCktPnJlYXBwbGllZEVkaXRpbmcodG9FZGl0
Q29tbWFuZENvbXBvc2l0aW9uKHRoaXMpKTsKIH0KIAotdm9pZCBFZGl0Q29tbWFuZDo6ZG9SZWFw
cGx5KCkKK3ZvaWQgU2ltcGxlRWRpdENvbW1hbmQ6OmRvUmVhcHBseSgpCiB7CiAgICAgZG9BcHBs
eSgpOwogfQpAQCAtMjA5LDMwICsyMTIsNiBAQCB2b2lkIEVkaXRDb21tYW5kOjpzZXRFbmRpbmdT
ZWxlY3Rpb24oY29uCiAgICAgfQogfQogCi1ib29sIEVkaXRDb21tYW5kOjpwcmVzZXJ2ZXNUeXBp
bmdTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEVkaXRDb21t
YW5kOjppc1R5cGluZ0NvbW1hbmQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBFZGl0Q29tbWFuZDo6aXNDcmVhdGVMaW5rQ29tbWFuZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIEVkaXRDb21tYW5kOjpzaG91bGRSZXRhaW5BdXRvY29ycmVj
dGlvbkluZGljYXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEVk
aXRDb21tYW5kOjpzZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihib29sKQot
ewotfQotCiB2b2lkIEVkaXRDb21tYW5kOjp1cGRhdGVMYXlvdXQoKSBjb25zdAogewogICAgIGRv
Y3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwpAQCAtMjU5
LDcgKzIzOCw3IEBAIHZvaWQgU2ltcGxlRWRpdENvbW1hbmQ6OmFkZE5vZGVBbmREZXNjZW4KIH0K
ICNlbmRpZgogCi12b2lkIGFwcGx5Q29tbWFuZChQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjb21t
YW5kKQordm9pZCBhcHBseUNvbW1hbmQoUGFzc1JlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4g
Y29tbWFuZCkKIHsKICAgICBjb21tYW5kLT5hcHBseSgpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdENvbW1hbmQuaAkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxNyArNjAsOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzU2ltcGxlRWRpdENvbW1hbmQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0NvbXBvc2l0ZUVkaXRDb21tYW5kKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0Q29tbWFuZENv
bXBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNU
eXBpbmdDb21tYW5kKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ3JlYXRlTGlua0NvbW1h
bmQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNv
bnN0OwogCiAgICAgYm9vbCBpc1RvcExldmVsQ29tbWFuZCgpIGNvbnN0IHsgcmV0dXJuICFtX3Bh
cmVudDsgfQogCi0gICAgdmlydHVhbCBib29sIHNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5k
aWNhdG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFJldGFpbkF1dG9jb3Jy
ZWN0aW9uSW5kaWNhdG9yKGJvb2wpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdG9wQ2FyZXRC
bGlua2luZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KIHByb3RlY3RlZDoKICAgICBFZGl0
Q29tbWFuZChEb2N1bWVudCopOwogICAgIEVkaXRDb21tYW5kKERvY3VtZW50KiwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKQEAgLTgzLDExICs3NSw5
IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgdXBkYXRlTGF5b3V0KCkgY29uc3Q7CiAKLXByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRv
VW5hcHBseSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCk7IC8vIGNhbGxzIGRv
QXBwbHkoKQogCitwcml2YXRlOgogICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAg
ICBWaXNpYmxlU2VsZWN0aW9uIG1fc3RhcnRpbmdTZWxlY3Rpb247CiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBtX2VuZGluZ1NlbGVjdGlvbjsKQEAgLTk1LDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8RWxlbWVudD4gbV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50OwogICAgIENvbXBvc2l0
ZUVkaXRDb21tYW5kKiBtX3BhcmVudDsKIAotICAgIGZyaWVuZCB2b2lkIGFwcGx5Q29tbWFuZChQ
YXNzUmVmUHRyPEVkaXRDb21tYW5kPik7CisgICAgZnJpZW5kIHZvaWQgYXBwbHlDb21tYW5kKFBh
c3NSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+KTsKIH07CiAKIGNsYXNzIFNpbXBsZUVkaXRD
b21tYW5kIDogcHVibGljIEVkaXRDb21tYW5kIHsKQEAgLTEwNCw2ICs5NCw4IEBAIHB1YmxpYzoK
ICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGdldE5vZGVzSW5Db21tYW5kKEhhc2hT
ZXQ8Tm9kZSo+JikgPSAwOwogI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCk7IC8vIGNhbGxzIGRvQXBwbHkoKQogCiBw
cm90ZWN0ZWQ6CiAgICAgU2ltcGxlRWRpdENvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KSA6IEVk
aXRDb21tYW5kKGRvY3VtZW50KSB7IH0KQEAgLTEyMyw3ICsxMTUsNyBAQCBpbmxpbmUgU2ltcGxl
RWRpdENvbW1hbmQqIHRvU2ltcGxlRWRpdENvCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNpbXBs
ZUVkaXRDb21tYW5kKj4oY29tbWFuZCk7CiB9CiAKLXZvaWQgYXBwbHlDb21tYW5kKFBhc3NSZWZQ
dHI8RWRpdENvbW1hbmQ+KTsKK3ZvaWQgYXBwbHlDb21tYW5kKFBhc3NSZWZQdHI8Q29tcG9zaXRl
RWRpdENvbW1hbmQ+KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDEwMjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogCiAg
ICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogICAgIERlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIqIGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBt
X2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KLSAgICBFZGl0Q29tbWFuZCogbGFzdEVk
aXRDb21tYW5kKCkgeyByZXR1cm4gbV9sYXN0RWRpdENvbW1hbmQuZ2V0KCk7IH0KKyAgICBDb21w
b3NpdGVFZGl0Q29tbWFuZCogbGFzdEVkaXRDb21tYW5kKCkgeyByZXR1cm4gbV9sYXN0RWRpdENv
bW1hbmQuZ2V0KCk7IH0KIAogICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2
ZW50Kik7CiAgICAgdm9pZCBoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCop
OwpAQCAtMzczLDYgKzM3Myw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlYWRTZWxlY3Rpb25Gcm9t
UGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKICNlbmRpZgogCisgICAg
dm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4sIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1h
dGNoU3R5bGUpOworICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmlu
ZyYsIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlKTsKKwogICAgIGJv
b2wgc2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUs
IGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZU1hcmtlcnNGb3JX
b3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJvb2wgb25seUhhbmRsZVdvcmRzQ29udGFpbmluZ1NlbGVj
dGlvbik7CiAgICAgdm9pZCBkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBv
c2l0aW9uJiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZyk7CkBAIC0zODIsNyArMzg1LDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGcmFtZSogbV9mcmFtZTsKICAgICBPd25QdHI8RGVs
ZXRlQnV0dG9uQ29udHJvbGxlcj4gbV9kZWxldGVCdXR0b25Db250cm9sbGVyOwotICAgIFJlZlB0
cjxFZGl0Q29tbWFuZD4gbV9sYXN0RWRpdENvbW1hbmQ7CisgICAgUmVmUHRyPENvbXBvc2l0ZUVk
aXRDb21tYW5kPiBtX2xhc3RFZGl0Q29tbWFuZDsKICAgICBSZWZQdHI8Tm9kZT4gbV9yZW1vdmVk
QW5jaG9yOwogICAgIFJlZlB0cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9kZTsKICAgICB1bnNpZ25l
ZCBtX2NvbXBvc2l0aW9uU3RhcnQ7CkBAIC00MDIsOCArNDA1LDYgQEAgcHJpdmF0ZToKICAgICBQ
YXNzUmVmUHRyPENsaXBib2FyZD4gbmV3R2VuZXJhbENsaXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQ
b2xpY3ksIEZyYW1lKik7CiAgICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQo
UGFzdGVib2FyZCopOwogICAgIHZvaWQgcGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiwg
Ym9vbCBhbGxvd1BsYWluVGV4dCk7Ci0gICAgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdt
ZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQs
IGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUpOwotICAgIHZvaWQgcmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJv
b2wgc21hcnRSZXBsYWNlKTsKICAgICB2b2lkIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBh
c3RlYm9hcmQqKTsKICAgICB2b2lkIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlv
bigpOwogICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3Nw
ZWxsaW5nUmFuZ2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAJKHJldmlzaW9uIDEwMjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjU3LDcgKzE2NTcsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKICAgICBib29sIGNhcmV0QnJvd3Npbmcg
PSBtX2ZyYW1lLT5zZXR0aW5ncygpICYmIG1fZnJhbWUtPnNldHRpbmdzKCktPmNhcmV0QnJvd3Np
bmdFbmFibGVkKCk7CiAgICAgYm9vbCBzaG91bGRCbGluayA9IGNhcmV0SXNWaXNpYmxlKCkgJiYg
aXNDYXJldCgpICYmIChpc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpOwogICAg
IAotICAgIEVkaXRDb21tYW5kKiBsYXN0RWRpdENvbW1hbmQgPSBtX2ZyYW1lID8gbV9mcmFtZS0+
ZWRpdG9yKCktPmxhc3RFZGl0Q29tbWFuZCgpIDogMDsKKyAgICBDb21wb3NpdGVFZGl0Q29tbWFu
ZCogbGFzdEVkaXRDb21tYW5kID0gbV9mcmFtZSA/IG1fZnJhbWUtPmVkaXRvcigpLT5sYXN0RWRp
dENvbW1hbmQoKSA6IDA7CiAgICAgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0Nv
bW1hbmQgPSBsYXN0RWRpdENvbW1hbmQgJiYgbGFzdEVkaXRDb21tYW5kLT5zaG91bGRTdG9wQ2Fy
ZXRCbGlua2luZygpOwogCiAgICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9wIHRoZSBibGlu
ayB0aW1lciBzbyB3ZSBjYW4gcmVzdGFydCB3aXRoIGEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2
aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIK
IAorI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKICNpbmNsdWRlICJF
ZGl0b3JDbGllbnQuaCIKQEAgLTQyNywxOCArNDI4LDE5IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6cmVzcG8KICAgICB9CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmQqIGNvbW1hbmQp
Cit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0
aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kKiBjb21tYW5kKQogewotICAgIGlmIChjb21tYW5kLT5p
c1RvcExldmVsQ29tbWFuZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlv
bkluZGljYXRvcigpKQorICAgIEFTU0VSVChjb21tYW5kLT5pc1RvcExldmVsQ29tbWFuZCgpKQor
ICAgIGlmICghY29tbWFuZC0+c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkK
ICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERv
Y3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKIAogICAgIG1hcmtQcmVjZWRpbmdX
aGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOwog
ICAgIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5n
KCk7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvVW5h
cHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZCogY29tbWFuZCkKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBv
c2l0aW9uKiBjb21tYW5kKQogewotICAgIGlmICghY29tbWFuZC0+aXNDcmVhdGVMaW5rQ29tbWFu
ZCgpKQorICAgIGlmICghY29tbWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUt
PmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFu
ZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7CiAgICAgaWYgKCFyYW5nZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oCShyZXZpc2lvbiAxMDI1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOSBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENvbXBvc2l0ZUVkaXRDb21tYW5kOwog
Y2xhc3MgRWRpdG9yQ2xpZW50OwotY2xhc3MgRWRpdENvbW1hbmQ7CitjbGFzcyBFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKIApA
QCAtODcsOCArODgsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9uQmVm
b3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9
KQogCiAgICAgdm9pZCByZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNv
cnJlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7IFVOVVNF
RF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKLSAgICB2b2lkIHJlc3BvbmRUb0FwcGxpZWRFZGl0aW5n
KEVkaXRDb21tYW5kKikgVU5MRVNTX0VOQUJMRUQoe30pCi0gICAgdm9pZCByZXNwb25kVG9VbmFw
cGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kKikgVU5MRVNTX0VOQUJMRUQoe30pCisgICAgdm9pZCBy
ZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCopIFVOTEVTU19FTkFC
TEVEKHsgfSkKKyAgICB2b2lkIHJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRD
b21wb3NpdGlvbiopIFVOTEVTU19FTkFCTEVEKHsgfSkKICAgICB2b2lkIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKSBVTkxFU1Nf
RU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24pOyB9KQogCiAgICAgdm9pZCBzdG9w
UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKSBV
TkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24pOyB9KQpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDI1MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDAsNyArMjQwLDcgQEAgVHlwaW5nQ29tbWFuZCogVHlwaW5nQ29tbWFuZDo6bGFzdFR5
cGluZwogewogICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBFZGl0Q29tbWFuZCogbGFzdEVkaXRD
b21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5sYXN0RWRpdENvbW1hbmQoKTsKKyAgICBDb21wb3Np
dGVFZGl0Q29tbWFuZCogbGFzdEVkaXRDb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5sYXN0RWRp
dENvbW1hbmQoKTsKICAgICBpZiAoIWxhc3RFZGl0Q29tbWFuZCB8fCAhbGFzdEVkaXRDb21tYW5k
LT5pc1R5cGluZ0NvbW1hbmQoKSB8fCAhc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RF
ZGl0Q29tbWFuZCktPmlzT3BlbkZvck1vcmVUeXBpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCShyZXZpc2lvbiAxMDI1
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAkod29ya2luZyBj
b3B5KQpAQCAtNzYsNiArNzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3J3YXJkRGVsZXRlS2V5
UHJlc3NlZChUZXh0R3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcpOwogICAgIHZvaWQgZGVsZXRl
U2VsZWN0aW9uKGJvb2wgc21hcnREZWxldGUpOwogICAgIHZvaWQgc2V0Q29tcG9zaXRpb25UeXBl
KFRleHRDb21wb3NpdGlvblR5cGUgdHlwZSkgeyBtX2NvbXBvc2l0aW9uVHlwZSA9IHR5cGU7IH0K
KyAgICB2b2lkIHNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKGJvb2wgcmV0
YWluKSB7IG1fc2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgPSByZXRhaW47IH0K
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUeXBpbmdDb21tYW5kPiBjcmVhdGUo
RG9jdW1lbnQqIGRvY3VtZW50LCBFVHlwaW5nQ29tbWFuZCBjb21tYW5kLCBjb25zdCBTdHJpbmcm
IHRleHQgPSAiIiwgT3B0aW9ucyBvcHRpb25zID0gMCwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCkBAIC0xMDAsMTAgKzEwMSw5IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRp
dGluZ0FjdGlvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1R5cGluZ0NvbW1hbmQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVzVHlwaW5nU3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3ByZXNlcnZlc1R5cGluZ1N0eWxlOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFJl
dGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRSZXRh
aW5BdXRvY29ycmVjdGlvbkluZGljYXRvcjsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRS
ZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihib29sIHJldGFpbikgeyBtX3Nob3VsZFJldGFp
bkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yID0gcmV0YWluOyB9Ci0gICAgdmlydHVhbCBib29sIHNo
b3VsZFN0b3BDYXJldEJsaW5raW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
cHJlc2VydmVzVHlwaW5nU3R5bGU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmV0YWluQXV0
b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3Nob3VsZFJl
dGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yOyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZFN0
b3BDYXJldEJsaW5raW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZv
aWQgc2V0U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcoYm9vbCBwcmV2ZW50KSB7IG1fc2hvdWxk
UHJldmVudFNwZWxsQ2hlY2tpbmcgPSBwcmV2ZW50OyB9CiAKICAgICBzdGF0aWMgdm9pZCB1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQq
LCBGcmFtZSopOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNTU5KQorKysgU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMTIt
MTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUHVzaCBtb3Jl
IG1lbWJlciBmdW5jdGlvbnMgZnJvbSBFZGl0Q29tbWFuZCB0byBDb21wb3NpdGVFZGl0Q29tbWFu
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyNDkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDYWxsIEVk
aXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0IGluc3RlYWQgb2YgbWFudWFsbHkgY3JlYXRp
bmcgYW5kIGFwcGx5aW5nIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpy
ZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQpOgorCiAyMDExLTEyLTExICBHb3BhbCBSYWdoYXZhbiAg
PGdvcGFsLjEucmFnaGF2YW5Abm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gUVF1aWNrV2ViVmll
dyBtaXNzaW5nIHRpdGxlQ2hhbmdlZCBzaWduYWwgdGVzdHMKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDEwMjUyOSkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjI0MSwxMiArMjI0MSw5IEBAIHZvaWQgV2ViUGFnZTo6ZGlkU2VsZWN0SXRlbUZy
b21BY3RpdmVDb24KIAogdm9pZCBXZWJQYWdlOjpyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoRnJh
bWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgaWYgKGZyYW1lLT5zZWxlY3Rp
b24oKS0+aXNOb25lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiB0ZXh0RnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGZyYW1lLT5zZWxl
Y3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgdGV4dCk7Ci0gICAgYXBwbHlDb21t
YW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZnJhbWUtPmRvY3VtZW50KCksIHRl
eHRGcmFnbWVudC5yZWxlYXNlKCksIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBs
YWNlbWVudCB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlIHwgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nKSk7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigp
LT5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkKTsK
KyAgICBib29sIHNlbGVjdFJlcGxhY2VtZW50ID0gdHJ1ZTsKKyAgICBib29sIHNtYXJ0UmVwbGFj
ZSA9IHRydWU7CisgICAgZnJhbWUtPmVkaXRvcigpLT5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQo
dGV4dCwgc2VsZWN0UmVwbGFjZW1lbnQsIHNtYXJ0UmVwbGFjZSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6Y2xlYXJTZWxlY3Rpb24oKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDEwMjU1OSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMTItMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUHVzaCBtb3JlIG1lbWJlciBmdW5jdGlvbnMgZnJvbSBF
ZGl0Q29tbWFuZCB0byBDb21wb3NpdGVFZGl0Q29tbWFuZAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyNDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDYWxsIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0IGluc3RlYWQgb2YgbWFudWFsbHkgY3JlYXRpbmcgYW5kIGFwcGx5aW5nIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLgorCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6cmVwbGFjZVNlbGVjdGlvbik6CisKIDIwMTEtMTIt
MDkgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIFJlbW92ZSBmb3J3YXJkaW5nIGhlYWRlcnMgZm9yIFdlYkxheWVyIEFQSXMKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24g
MTAyNTI5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEyNCw4ICsxMTI0LDkgQEAgdm9pZCBXZWJGcmFtZUltcGw6OnJl
cGxhY2VTZWxlY3Rpb24oY29ucwogewogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoCiAgICAgICAgIGZyYW1lKCktPnNlbGVjdGlv
bigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCB0ZXh0KTsKLSAgICBhcHBseUNvbW1hbmQo
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgKLSAgICAgICAgZnJhbWUoKS0+ZG9jdW1l
bnQoKSwgZnJhZ21lbnQuZ2V0KCksIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTbWFydFJlcGxh
Y2UgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSB8IFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpQcmV2ZW50TmVzdGluZykpOworICAgIGJvb2wgc21hcnRSZXBsYWNlID0gdHJ1
ZTsKKyAgICBib29sIHNlbGVjdFJlcGxhY2UgPSB0cnVlOworICAgIGZyYW1lKCktPmVkaXRvcigp
LT5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQodGV4dCwgc2VsZWN0UmVwbGFjZSwgc21hcnRSZXBs
YWNlKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6Omluc2VydFRleHQoY29uc3QgV2ViU3RyaW5n
JiB0ZXh0KQpJbmRleDogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNTU5KQorKysgU291cmNl
L1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTEtMTItMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUHVz
aCBtb3JlIG1lbWJlciBmdW5jdGlvbnMgZnJvbSBFZGl0Q29tbWFuZCB0byBDb21wb3NpdGVFZGl0
Q29tbWFuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzQyNDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
YWxsIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0IGluc3RlYWQgb2YgbWFudWFsbHkg
Y3JlYXRpbmcgYW5kIGFwcGx5aW5nIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLgorCisgICAgICAg
ICogd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfZnJhbWVf
cmVwbGFjZV9zZWxlY3Rpb24pOgorCiAyMDExLTEyLTA5ICBKb29uZSBIdXIgIDxqb29uZS5odXJA
Y29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFtHVEtdIEluaXRpYWwgaW1wbGVtZW50YXRpb24g
b2YgQWNjZWxlcmF0ZWQgQ29tcG9zaXRpbmcgdXNpbmcgQ2x1dHRlcgpJbmRleDogU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCShyZXZpc2lvbiAxMDI1MjkpCisr
KyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OTYsMTAgKzk5Niw5IEBAIFdlYktpdE5ldHdvcmtSZXNwb25zZSogd2Via2l0X3dl
Yl9mcmFtZV8KIHZvaWQgd2Via2l0X3dlYl9mcmFtZV9yZXBsYWNlX3NlbGVjdGlvbihXZWJLaXRX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IGNoYXIqIHRleHQpCiB7CiAgICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoZnJhbWUpOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoCi0gICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkt
PnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHRleHQpOwotICAgIGFwcGx5Q29tbWFuZChSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGNvcmVGcmFtZS0+ZG9jdW1lbnQoKSwgZnJhZ21l
bnQuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNtYXJ0UmVwbGFjZSB8IFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpNYXRjaFN0eWxlIHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnRO
ZXN0aW5nKSk7CisgICAgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCA9IGZhbHNlOworICAgIGJvb2wg
c21hcnRSZXBsYWNlID0gdHJ1ZTsKKyAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5yZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQodGV4dCwgc2VsZWN0UmVwbGFjZW1lbnQsIHNtYXJ0UmVwbGFjZSk7CiB9
CiAKIC8qKgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNTU5KQorKysgU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTEtMTItMTEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUHVz
aCBtb3JlIG1lbWJlciBmdW5jdGlvbnMgZnJvbSBFZGl0Q29tbWFuZCB0byBDb21wb3NpdGVFZGl0
Q29tbWFuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzQyNDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
YWxsIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCBpbnN0ZWFkIG9mIG1hbnVh
bGx5IGNyZWF0aW5nIGFuZCBhcHBseWluZyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC4KKyAgICAg
ICAgVGhlIG9ubHkgYmVoYXZpb3JhbCBkaWZmZXJlbmNlIGlzIHRoYXQgbmV3IGNvZGUgd2lsbCBl
bmQgdXAgY2hlY2tpbmcgZm9yIHNwZWxsIGNoZWNrcy4KKworICAgICAgICBIb3dldmVyLCB0aGlz
IGRpZmZlcmVuY2UgYXBwZWFycyB0byBiZSB1bmludGVudGlvbmFsIHNpbmNlIHRoZSBjb2RlIHBy
ZWRhdGVzIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzczODg2CisgICAgICAgIHdo
aWNoIGludHJvZHVjZWQgYW4gaW52b2NhdGlvbiBvZiBzcGVsbGNoZWNrIGNvZGUuIFVuZm9ydHVu
YXRlbHksIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnl3YXkgb2YgdGVzdGluZyB0aGlzLgor
CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3Jl
cGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6c2VsZWN0UmVwbGFjZW1lbnQ6c21hcnRSZXBsYWNl
Om1hdGNoU3R5bGU6XSk6CisKIDIwMTEtMTItMDcgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNv
bT4KIAogICAgICAgICBGaXggdGhlIDMyLWJpdCBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA0NiwxNyArMTA0Niw3
IEBAIC0gKHZvaWQpIF9yZXN1bWVBbmltYXRpb25zCiAKIC0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rp
b25XaXRoRnJhZ21lbnQ6KERPTURvY3VtZW50RnJhZ21lbnQgKilmcmFnbWVudCBzZWxlY3RSZXBs
YWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRS
ZXBsYWNlIG1hdGNoU3R5bGU6KEJPT0wpbWF0Y2hTdHlsZQogewotICAgIGlmIChfcHJpdmF0ZS0+
Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkgfHwgIWZyYWdtZW50KQotICAgICAgICBy
ZXR1cm47Ci0gICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OkNvbW1hbmRPcHRpb25zIG9wdGlv
bnMgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3Rpbmc7Ci0gICAgaWYgKHNl
bGVjdFJlcGxhY2VtZW50KQotICAgICAgICBvcHRpb25zIHw9IFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpTZWxlY3RSZXBsYWNlbWVudDsKLSAgICBpZiAoc21hcnRSZXBsYWNlKQotICAgICAgICBv
cHRpb25zIHw9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTbWFydFJlcGxhY2U7Ci0gICAgaWYg
KG1hdGNoU3R5bGUpCi0gICAgICAgIG9wdGlvbnMgfD0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
Ok1hdGNoU3R5bGU7Ci0gICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpj
cmVhdGUoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSwgY29yZShmcmFnbWVudCksIG9w
dGlvbnMpKTsKLSAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+cmV2ZWFsU2Vs
ZWN0aW9uKFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CisgICAgX3ByaXZh
dGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCktPnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY29y
ZShmcmFnbWVudCksIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUp
OwogfQogCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4
dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6
KEJPT0wpc21hcnRSZXBsYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118817</attachid>
            <date>2011-12-12 10:52:48 -0800</date>
            <delta_ts>2011-12-14 00:41:19 -0800</delta_ts>
            <desc>Fixed per Enrica&apos;s comments</desc>
            <filename>bug-74249-20111212105247.patch</filename>
            <type>text/plain</type>
            <size>34028</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjU1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDExLTEyLTExICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFB1c2ggbW9yZSBtZW1iZXIgZnVu
Y3Rpb25zIGZyb20gRWRpdENvbW1hbmQgdG8gQ29tcG9zaXRlRWRpdENvbW1hbmQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MjQ5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBwcmVzZXJ2ZXNUeXBp
bmdTdHlsZSwgaXNUeXBpbmdDb21tYW5kLCBpc0NyZWF0ZUxpbmtDb21tYW5kLCBzaG91bGRSZXRh
aW5BdXRvY29ycmVjdGlvbkluZGljYXRvcgorICAgICAgICBhbmQgc2hvdWxkU3RvcENhcmV0Qmxp
bmtpbmcgZnJvbSBFZGl0Q29tbWFuZCB0byBDb21wb3NpdGVFZGl0Q29tbWFuZC4KKworICAgICAg
ICBBbHNvIG1vdmUgZG9VbmFwcGx5IGFuZCBkb1JlYXBwbHkgZnJvbSBFZGl0Q29tbWFuZCB0byBT
aW1wbGVFZGl0Q29tbWFuZCBzaW5jZSBvbmx5IHN1YmNsYXNzZXMgb2YKKyAgICAgICAgU2ltcGxl
RWRpdENvbW1hbmQgaW1wbGVtZW50IGVpdGhlci4KKworICAgICAgICBJbiBhZGRpdGlvbiwgdGhp
cyBwYXRjaCBmaXhlcyBhIHJlZ3Jlc3Npb24gZnJvbSByMTAyMzU3IHRoYXQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcidzCisgICAgICAgIHJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcgZXhp
dHMgZWFybHkgZXZlbiB3aGVuIHRoZSB1bmFwcGxpZWQgY29tbWFuZCB3YXMgYSBDcmVhdGVMaW5r
Q29tbWFuZC4KKyAgICAgICAgKFVuZm9ydHVuYXRlbHkgbm8gdGVzdHMgYmVjYXVzZSB0aGlzIGZl
YXR1cmUgaXMgb25seSBleGVyY2lzZWQgb24gTGlvbiB0byB3aGljaCBJIGRvbid0IGhhdmUgYWNj
ZXNzKQorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBv
c2l0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlv
bjo6ZG9VbmFwcGx5KTogQ2FsbCBkb1VuYXBwbHkgZGlyZWN0bHkgc2luY2UgU2ltcGxlRWRpdENv
bW1hbmQgbm8gbG9uZ2VyCisgICAgICAgIGhhcyB1bmFwcGx5L3JlYXBwbHkuCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpkb1JlYXBwbHkpOiBEaXR0byB3aXRoIGRv
UmVhcHBseS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcmVzZXJ2
ZXNUeXBpbmdTdHlsZSk6IE1vdmVkIGZyb20gRWRpdENvbW1hbmQuCisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6aXNUeXBpbmdDb21tYW5kKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6aXNDcmVhdGVMaW5rQ29tbWFuZCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnNob3VsZFJldGFp
bkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVFZGl0Q29tbWFuZDo6ZW5zdXJlQ29tcG9zaXRpb24pOgorICAgICAgICAqIGVkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29t
cG9zaXRpb246Ondhc0NyZWF0ZUxpbmtDb21tYW5kKTogQWRkZWQ7IG1pcnJvcnMgdGhlIHZhbHVl
IG9mIGlzQ3JlYXRlTGlua0NvbW1hbmQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENv
bXBvc2l0aW9uOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0ZUVkaXRDb21tYW5kOjpzaG91bGRTdG9wQ2FyZXRCbGlua2luZyk6IE1vdmVkIGZyb20g
RWRpdENvbW1hbmQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6YXBwbHkpOiBDYWxsIHNldFNob3VsZFJldGFpbkF1dG9j
b3JyZWN0aW9uSW5kaWNhdG9yIG9ubHkgb24gVHlwaW5nQ29tbWFuZC4gQWx0aG91Z2gKKyAgICAg
ICAgRWRpdENvbW1hbmQgc3VwcG9ydGVkIHNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5k
aWNhdG9yLCBvbmx5IFR5cGluZ0NvbW1hbmQgc3RvcmVkIHRoZSB2YWx1ZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRDb21tYW5kOjp1bmFwcGx5KTogQXNzdW1lIHVuYXBwbHkgaXMgb25seSBjYWxs
ZWQgb24gRWRpdENvbW1hbmRDb21wb3NpdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21t
YW5kOjpyZWFwcGx5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVFZGl0Q29tbWFu
ZDo6ZG9SZWFwcGx5KTogTW92ZWQgZnJvbSBFZGl0Q29tbWFuZC4KKyAgICAgICAgKFdlYkNvcmU6
OmFwcGx5Q29tbWFuZCk6IFRha2VzIENvbXBvc2l0ZUVkaXRDb21tYW5kIGluc3RlYWQgb2YgRWRp
dENvbW1hbmQuCisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVk
aXRpbmcvRWRpdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omxhc3RFZGl0Q29tbWFu
ZCk6IFJldHVybnMgQ29tcG9zaXRlRWRpdENvbW1hbmQgaW5zdGVhZCBvZiBFZGl0Q29tbWFuZC4K
KyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKToKKyAgICAgICAgKiBlZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcpOiBUYWtlcyBD
b21wb3NpdGVFZGl0Q29tbWFuZCBpbnN0ZWFkIG9mCisgICAgICAgIEVkaXRDb21tYW5kLgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvVW5h
cHBsaWVkRWRpdGluZyk6IFRha2VzIEVkaXRDb21tYW5kQ29tcG9zaXRpb24gaW5zdGVhZCBvZgor
ICAgICAgICBFZGl0Q29tbWFuZC4KKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0
aW9uQWZ0ZXJDb21tYW5kKTogVGFrZXMKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBpbnN0ZWFk
IG9mIEVkaXRDb21tYW5kLgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5oOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9y
VHlwaW5nKTogTWFkZSB0aGlzIG1lbWJlciBmdW5jdGlvbiBwdWJsaWMgc2luY2Ugbm93CisgICAg
ICAgIGl0J3MgY2FsbGVkIGV4cGxpY2l0bHkgaW4gRWRpdENvbW1hbmQ6OmFwcGx5LgorICAgICAg
ICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpOgorCiAyMDExLTEy
LTExICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVc2Ug
W1N1cHBsZW1lbnRhbF0gSURMIGluIFdlYlNvY2tldApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHJldmlzaW9uIDEwMjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDIsNyArMzAyLDYgQEAgX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3I4
c3VicmFuZ2VFUE5TXwogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3JDMUVQS05TXzVSYW5nZUVO
U18yMFRleHRJdGVyYXRvckJlaGF2aW9yRQogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3JEMUV2
CiBfX1pON1dlYkNvcmUxMldvcmtlclRocmVhZDE3d29ya2VyVGhyZWFkQ291bnRFdgotX19aTjdX
ZWJDb3JlMTJhcHBseUNvbW1hbmRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTFFZGl0Q29tbWFuZEVF
RQogX19aTjdXZWJDb3JlMTJjYWNoZVN0b3JhZ2VFdgogX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJr
dXBFUEtOU180Tm9kZUVOU18xM0VDaGlsZHJlbk9ubHlFUE4zV1RGNlZlY3RvcklQUzBfTG0wRUVF
TlNfMTNFQWJzb2x1dGVVUkxzRQogX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU181UmFu
Z2VFUE4zV1RGNlZlY3RvcklQTlNfNE5vZGVFTG0wRUVFTlNfMjNFQW5ub3RhdGVGb3JJbnRlcmNo
YW5nZUViTlNfMTNFQWJzb2x1dGVVUkxzRQpAQCAtODQxLDEyICs4NDAsMTQgQEAgX19aTjdXZWJD
b3JlNkVkaXRvcjIxaXNTZWxlY3Rpb25NaXNzcGVsbAogX19aTjdXZWJDb3JlNkVkaXRvcjIzc2V0
QmFzZVdyaXRpbmdEaXJlY3Rpb25FMTZXcml0aW5nRGlyZWN0aW9uCiBfX1pON1dlYkNvcmU2RWRp
dG9yMjRhZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmdFYgogX19aTjdXZWJDb3JlNkVkaXRvcjI0Y29t
cHV0ZUFuZFNldFR5cGluZ1N0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMTBFZGl0
QWN0aW9uRQorX19aTjdXZWJDb3JlNkVkaXRvcjI0cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0RVJL
TjNXVEY2U3RyaW5nRWJiCiBfX1pON1dlYkNvcmU2RWRpdG9yMjRpc1NlbGVjdGlvblVuZ3JhbW1h
dGljYWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxF
dgogX19aTjdXZWJDb3JlNkVkaXRvcjI2aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19a
TjdXZWJDb3JlNkVkaXRvcjI2d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmRFUktOM1dURjZTdHJp
bmdFUktOUzFfNlZlY3RvcklTMl9MbTBFRUUKIF9fWk43V2ViQ29yZTZFZGl0b3IyN2hhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0b3Iy
N3JlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZEVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29y
ZTZFZGl0b3IyOHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnRFTjNXVEYxMFBhc3NSZWZQdHJJ
TlNfMTZEb2N1bWVudEZyYWdtZW50RUVFYmJiCiBfX1pON1dlYkNvcmU2RWRpdG9yMjljYW5EZWNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjljYW5JbmNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMzBhcHBseVBhcmFncmFw
aFN0eWxlVG9TZWxlY3Rpb25FUE5TXzE5Q1NTU3R5bGVEZWNsYXJhdGlvbkVOU18xMEVkaXRBY3Rp
b25FCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcAkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDkgKzcxLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogUGFzc1JlZlB0
cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9uPiBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpjcmVhdGUo
RG9jdW1lbnQqIGRvY3VtZW50LAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHN0YXJ0aW5n
U2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uIGVuZGluZ1NlbGVjdGlvbikKKyAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzdGFydGluZ1NlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiBlbmRpbmdTZWxlY3Rpb24sIGJvb2wgd2FzQ3JlYXRlTGluaykKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEVkaXRDb21tYW5kQ29tcG9zaXRpb24oZG9jdW1lbnQsIHN0YXJ0aW5n
U2VsZWN0aW9uLCBlbmRpbmdTZWxlY3Rpb24pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVk
aXRDb21tYW5kQ29tcG9zaXRpb24oZG9jdW1lbnQsIHN0YXJ0aW5nU2VsZWN0aW9uLCBlbmRpbmdT
ZWxlY3Rpb24sIHdhc0NyZWF0ZUxpbmspKTsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0
aW9uOjpkb0FwcGx5KCkKQEAgLTg1LDE0ICs4NSwxNCBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9z
aXRpb246OmRvVW5hcHBseSgpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBtX2NvbW1hbmRzLnNpemUo
KTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6ZTsgaSAhPSAwOyAtLWkpCi0gICAgICAgIG1fY29t
bWFuZHNbaSAtIDFdLT51bmFwcGx5KCk7CisgICAgICAgIG1fY29tbWFuZHNbaSAtIDFdLT5kb1Vu
YXBwbHkoKTsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpkb1JlYXBwbHkoKQog
ewogICAgIHNpemVfdCBzaXplID0gbV9jb21tYW5kcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgIT0gc2l6ZTsgKytpKQotICAgICAgICBtX2NvbW1hbmRzW2ldLT5yZWFwcGx5KCk7
CisgICAgICAgIG1fY29tbWFuZHNbaV0tPmRvUmVhcHBseSgpOwogfQogCiB2b2lkIEVkaXRDb21t
YW5kQ29tcG9zaXRpb246OmFwcGVuZChTaW1wbGVFZGl0Q29tbWFuZCogY29tbWFuZCkKQEAgLTEx
OSwxNCArMTE5LDI0IEBAIENvbXBvc2l0ZUVkaXRDb21tYW5kOjp+Q29tcG9zaXRlRWRpdENvbW0K
ICAgICBBU1NFUlQoaXNUb3BMZXZlbENvbW1hbmQoKSB8fCAhbV9jb21wb3NpdGlvbik7CiB9CiAK
LXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRvVW5hcHBseSgpCitib29sIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjpkb1JlYXBwbHkoKQorYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aXNUeXBpbmdD
b21tYW5kKCkgY29uc3QKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzQ3JlYXRlTGlua0NvbW1h
bmQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogRWRpdENvbW1hbmRDb21wb3NpdGlvbiogQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OmVuc3VyZUNvbXBvc2l0aW9uKCkKQEAgLTEzNSw3ICsxNDUsNyBAQCBFZGl0
Q29tbWFuZENvbXBvc2l0aW9uKiBDb21wb3NpdGVFZGl0Q29tCiAgICAgd2hpbGUgKGNvbW1hbmQg
JiYgY29tbWFuZC0+cGFyZW50KCkpCiAgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kLT5wYXJlbnQo
KTsKICAgICBpZiAoIWNvbW1hbmQtPm1fY29tcG9zaXRpb24pCi0gICAgICAgIGNvbW1hbmQtPm1f
Y29tcG9zaXRpb24gPSBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpjcmVhdGUoZG9jdW1lbnQoKSwg
c3RhcnRpbmdTZWxlY3Rpb24oKSwgZW5kaW5nU2VsZWN0aW9uKCkpOworICAgICAgICBjb21tYW5k
LT5tX2NvbXBvc2l0aW9uID0gRWRpdENvbW1hbmRDb21wb3NpdGlvbjo6Y3JlYXRlKGRvY3VtZW50
KCksIHN0YXJ0aW5nU2VsZWN0aW9uKCksIGVuZGluZ1NlbGVjdGlvbigpLCBpc0NyZWF0ZUxpbmtD
b21tYW5kKCkpOwogICAgIHJldHVybiBjb21tYW5kLT5tX2NvbXBvc2l0aW9uLmdldCgpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5o
CShyZXZpc2lvbiAxMDI1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDI0ICszOSwyNyBAQCBjbGFzcyBUZXh0
OwogCiBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uIDogcHVibGljIEVkaXRDb21tYW5kIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9uPiBj
cmVhdGUoRG9jdW1lbnQqLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4g
Y3JlYXRlKERvY3VtZW50KiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24sIGJvb2wgd2FzQ3JlYXRlTGlua0NvbW1hbmQpOwogCiAgICAgdmlydHVhbCB2b2lk
IGRvQXBwbHkoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCkgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIGRvUmVhcHBseSgpIE9WRVJSSURFOworICAgIHZvaWQgZG9V
bmFwcGx5KCk7CisgICAgdm9pZCBkb1JlYXBwbHkoKTsKICAgICB2b2lkIGFwcGVuZChTaW1wbGVF
ZGl0Q29tbWFuZCopOworICAgIGJvb2wgd2FzQ3JlYXRlTGlua0NvbW1hbmQoKSB7IHJldHVybiBt
X3dhc0NyZWF0ZUxpbmtDb21tYW5kOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2
b2lkIGdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+Jik7CiAjZW5kaWYKIAogcHJpdmF0
ZToKLSAgICBFZGl0Q29tbWFuZENvbXBvc2l0aW9uKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIGVuZGluZ1NlbGVjdGlvbikKKyAgICBFZGl0Q29tbWFuZENvbXBvc2l0aW9uKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbiwgYm9vbCB3YXNDcmVhdGVMaW5r
Q29tbWFuZCkKICAgICAgICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCwgc3RhcnRpbmdTZWxlY3Rp
b24sIGVuZGluZ1NlbGVjdGlvbikKKyAgICAgICAgLCBtX3dhc0NyZWF0ZUxpbmtDb21tYW5kKHdh
c0NyZWF0ZUxpbmtDb21tYW5kKQogICAgIHsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRDb21t
YW5kQ29tcG9zaXRpb24oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBW
ZWN0b3I8UmVmUHRyPFNpbXBsZUVkaXRDb21tYW5kPiA+IG1fY29tbWFuZHM7CisgICAgYm9vbCBt
X3dhc0NyZWF0ZUxpbmtDb21tYW5kOwogfTsKIAogY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQg
OiBwdWJsaWMgRWRpdENvbW1hbmQgewpAQCAtNjYsNyArNjksMTMgQEAgcHVibGljOgogICAgIGJv
b2wgaXNGaXJzdENvbW1hbmQoRWRpdENvbW1hbmQqIGNvbW1hbmQpIHsgcmV0dXJuICFtX2NvbW1h
bmRzLmlzRW1wdHkoKSAmJiBtX2NvbW1hbmRzLmZpcnN0KCkgPT0gY29tbWFuZDsgfQogICAgIEVk
aXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbXBvc2l0aW9uKCkgeyByZXR1cm4gbV9jb21wb3NpdGlv
bi5nZXQoKTsgfQogICAgIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGVuc3VyZUNvbXBvc2l0aW9u
KCk7Ci0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVzVHlwaW5nU3R5bGUoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBpbmdDb21tYW5kKCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGlzQ3JlYXRlTGlua0NvbW1hbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkU3RvcENhcmV0QmxpbmtpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbXBvc2l0ZUVkaXRDb21tYW5kKERvY3VtZW50
Kik7CiAKQEAgLTE0Niw5ICsxNTUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgVmVjdG9yPFJlZlB0cjxF
ZGl0Q29tbWFuZD4gPiBtX2NvbW1hbmRzOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBk
b1VuYXBwbHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCk7Ci0KICAgICBib29sIGlz
Q29tcG9zaXRlRWRpdENvbW1hbmQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAK
ICAgICBSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4gbV9jb21wb3NpdGlvbjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDI1MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxl
Y3Rpb24uaCIKICNpbmNsdWRlICJTY29wZWRFdmVudFF1ZXVlLmgiCisjaW5jbHVkZSAiVHlwaW5n
Q29tbWFuZC5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgImh0bWxl
ZGl0aW5nLmgiCiAKQEAgLTEwOSw2MCArMTEwLDYyIEBAIHZvaWQgRWRpdENvbW1hbmQ6OmFwcGx5
KCkKICAgICAgICAgQVNTRVJUKGlzQ29tcG9zaXRlRWRpdENvbW1hbmQoKSk7CiAgICAgICAgIC8v
IE9ubHkgbmVlZCB0byBjYWxsIGFwcGxpZWRFZGl0aW5nIGZvciB0b3AtbGV2ZWwgY29tbWFuZHMs
IGFuZCBUeXBpbmdDb21tYW5kcyBkbyBpdCBvbiB0aGVpcgogICAgICAgICAvLyBvd24gKHNlZSBU
eXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQpLgotICAgICAgICBpZiAoIWlz
VHlwaW5nQ29tbWFuZCgpKQorICAgICAgICBpZiAoIXRvQ29tcG9zaXRlRWRpdENvbW1hbmQodGhp
cyktPmlzVHlwaW5nQ29tbWFuZCgpKQogICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5hcHBs
aWVkRWRpdGluZyh0b0NvbXBvc2l0ZUVkaXRDb21tYW5kKHRoaXMpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KHRoaXMpLT5zZXRTaG91bGRS
ZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihmYWxzZSk7CiAgICAgfQotCi0gICAgc2V0U2hv
dWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoZmFsc2UpOwogfQogCiB2b2lkIEVkaXRD
b21tYW5kOjp1bmFwcGx5KCkKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgQVNTRVJU
KG1fZG9jdW1lbnQtPmZyYW1lKCkpOwotIAorICAgIEFTU0VSVChpc0VkaXRDb21tYW5kQ29tcG9z
aXRpb24oKSk7CisKICAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwotICAg
IAorCiAgICAgLy8gQ2hhbmdlcyB0byB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYWRlIHNp
bmNlIHRoZSBsYXN0IGVkaXRpbmcgb3BlcmF0aW9uIHRoYXQgCiAgICAgLy8gcmVxdWlyZSBhIGxh
eW91dCwgYXMgaW4gPHJkYXI6Ly9wcm9ibGVtLzU2NTg2MDM+LiAgTG93IGxldmVsIG9wZXJhdGlv
bnMsIGxpa2UgCiAgICAgLy8gUmVtb3ZlTm9kZUNvbW1hbmQsIGRvbid0IHJlcXVpcmUgYSBsYXlv
dXQgYmVjYXVzZSB0aGUgaGlnaCBsZXZlbCBvcGVyYXRpb25zIHRoYXQgCiAgICAgLy8gdXNlIHRo
ZW0gcGVyZm9ybSBvbmUgaWYgb25lIGlzIG5lY2Vzc2FyeSAobGlrZSBmb3IgdGhlIGNyZWF0aW9u
IG9mIFZpc2libGVQb3NpdGlvbnMpLgotICAgIGlmIChpc1RvcExldmVsQ29tbWFuZCgpKQotICAg
ICAgICB1cGRhdGVMYXlvdXQoKTsKLSAgICAKKyAgICB1cGRhdGVMYXlvdXQoKTsKKwogICAgIERl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXIqIGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIgPSBmcmFtZS0+ZWRp
dG9yKCktPmRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKTsKICAgICBkZWxldGVCdXR0b25Db250cm9s
bGVyLT5kaXNhYmxlKCk7Ci0gICAgZG9VbmFwcGx5KCk7CisKKyAgICB0b0VkaXRDb21tYW5kQ29t
cG9zaXRpb24odGhpcyktPmRvVW5hcHBseSgpOworCiAgICAgZGVsZXRlQnV0dG9uQ29udHJvbGxl
ci0+ZW5hYmxlKCk7CiAKLSAgICBpZiAoaXNFZGl0Q29tbWFuZENvbXBvc2l0aW9uKCkpCi0gICAg
ICAgIGZyYW1lLT5lZGl0b3IoKS0+dW5hcHBsaWVkRWRpdGluZyh0b0VkaXRDb21tYW5kQ29tcG9z
aXRpb24odGhpcykpOworICAgIGZyYW1lLT5lZGl0b3IoKS0+dW5hcHBsaWVkRWRpdGluZyh0b0Vk
aXRDb21tYW5kQ29tcG9zaXRpb24odGhpcykpOwogfQogCiB2b2lkIEVkaXRDb21tYW5kOjpyZWFw
cGx5KCkKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQt
PmZyYW1lKCkpOworICAgIEFTU0VSVChpc0VkaXRDb21tYW5kQ29tcG9zaXRpb24oKSk7CiAgCiAg
ICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsKLSAgICAKKwogICAgIC8vIENo
YW5nZXMgdG8gdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFkZSBzaW5jZSB0aGUgbGFzdCBl
ZGl0aW5nIG9wZXJhdGlvbiB0aGF0IAogICAgIC8vIHJlcXVpcmUgYSBsYXlvdXQsIGFzIGluIDxy
ZGFyOi8vcHJvYmxlbS81NjU4NjAzPi4gIExvdyBsZXZlbCBvcGVyYXRpb25zLCBsaWtlIAogICAg
IC8vIFJlbW92ZU5vZGVDb21tYW5kLCBkb24ndCByZXF1aXJlIGEgbGF5b3V0IGJlY2F1c2UgdGhl
IGhpZ2ggbGV2ZWwgb3BlcmF0aW9ucyB0aGF0IAogICAgIC8vIHVzZSB0aGVtIHBlcmZvcm0gb25l
IGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVhdGlvbiBvZiBWaXNpYmxlUG9z
aXRpb25zKS4KLSAgICBpZiAoaXNUb3BMZXZlbENvbW1hbmQoKSkKLSAgICAgICAgdXBkYXRlTGF5
b3V0KCk7CisgICAgdXBkYXRlTGF5b3V0KCk7CiAKICAgICBEZWxldGVCdXR0b25Db250cm9sbGVy
KiBkZWxldGVCdXR0b25Db250cm9sbGVyID0gZnJhbWUtPmVkaXRvcigpLT5kZWxldGVCdXR0b25D
b250cm9sbGVyKCk7CiAgICAgZGVsZXRlQnV0dG9uQ29udHJvbGxlci0+ZGlzYWJsZSgpOwotICAg
IGRvUmVhcHBseSgpOworCisgICAgdG9FZGl0Q29tbWFuZENvbXBvc2l0aW9uKHRoaXMpLT5kb1Jl
YXBwbHkoKTsKKwogICAgIGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPmVuYWJsZSgpOwogCi0gICAg
aWYgKGlzRWRpdENvbW1hbmRDb21wb3NpdGlvbigpKQotICAgICAgICBmcmFtZS0+ZWRpdG9yKCkt
PnJlYXBwbGllZEVkaXRpbmcodG9FZGl0Q29tbWFuZENvbXBvc2l0aW9uKHRoaXMpKTsKKyAgICBm
cmFtZS0+ZWRpdG9yKCktPnJlYXBwbGllZEVkaXRpbmcodG9FZGl0Q29tbWFuZENvbXBvc2l0aW9u
KHRoaXMpKTsKIH0KIAotdm9pZCBFZGl0Q29tbWFuZDo6ZG9SZWFwcGx5KCkKK3ZvaWQgU2ltcGxl
RWRpdENvbW1hbmQ6OmRvUmVhcHBseSgpCiB7CiAgICAgZG9BcHBseSgpOwogfQpAQCAtMjA5LDMw
ICsyMTIsNiBAQCB2b2lkIEVkaXRDb21tYW5kOjpzZXRFbmRpbmdTZWxlY3Rpb24oY29uCiAgICAg
fQogfQogCi1ib29sIEVkaXRDb21tYW5kOjpwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEVkaXRDb21tYW5kOjppc1R5cGluZ0NvbW1h
bmQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFZGl0Q29tbWFuZDo6
aXNDcmVhdGVMaW5rQ29tbWFuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIEVkaXRDb21tYW5kOjpzaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEVkaXRDb21tYW5kOjpzZXRTaG91
bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihib29sKQotewotfQotCiB2b2lkIEVkaXRD
b21tYW5kOjp1cGRhdGVMYXlvdXQoKSBjb25zdAogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwpAQCAtMjU5LDcgKzIzOCw3IEBAIHZvaWQg
U2ltcGxlRWRpdENvbW1hbmQ6OmFkZE5vZGVBbmREZXNjZW4KIH0KICNlbmRpZgogCi12b2lkIGFw
cGx5Q29tbWFuZChQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjb21tYW5kKQordm9pZCBhcHBseUNv
bW1hbmQoUGFzc1JlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gY29tbWFuZCkKIHsKICAgICBj
b21tYW5kLT5hcHBseSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29t
bWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQu
aAkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFu
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxNyArNjAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGlzU2ltcGxlRWRpdENvbW1hbmQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc0NvbXBvc2l0ZUVkaXRDb21tYW5kKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0Q29tbWFuZENvbXBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNUeXBpbmdDb21tYW5kKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ3JlYXRlTGlua0NvbW1hbmQoKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0OwogCiAgICAgYm9vbCBp
c1RvcExldmVsQ29tbWFuZCgpIGNvbnN0IHsgcmV0dXJuICFtX3BhcmVudDsgfQogCi0gICAgdmly
dHVhbCBib29sIHNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKGJv
b2wpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdG9wQ2FyZXRCbGlua2luZygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0KIHByb3RlY3RlZDoKICAgICBFZGl0Q29tbWFuZChEb2N1bWVudCop
OwogICAgIEVkaXRDb21tYW5kKERvY3VtZW50KiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mKTsKQEAgLTgzLDExICs3NSw5IEBAIHByb3RlY3RlZDoKIAog
ICAgIHZvaWQgdXBkYXRlTGF5b3V0KCkgY29uc3Q7CiAKLXByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIGRvQXBwbHkoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCk7IC8vIGNhbGxzIGRvQXBwbHkoKQogCitwcml2YXRl
OgogICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBWaXNpYmxlU2VsZWN0aW9u
IG1fc3RhcnRpbmdTZWxlY3Rpb247CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBtX2VuZGluZ1NlbGVj
dGlvbjsKQEAgLTk1LDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RWxlbWVudD4gbV9l
bmRpbmdSb290RWRpdGFibGVFbGVtZW50OwogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kKiBtX3Bh
cmVudDsKIAotICAgIGZyaWVuZCB2b2lkIGFwcGx5Q29tbWFuZChQYXNzUmVmUHRyPEVkaXRDb21t
YW5kPik7CisgICAgZnJpZW5kIHZvaWQgYXBwbHlDb21tYW5kKFBhc3NSZWZQdHI8Q29tcG9zaXRl
RWRpdENvbW1hbmQ+KTsKIH07CiAKIGNsYXNzIFNpbXBsZUVkaXRDb21tYW5kIDogcHVibGljIEVk
aXRDb21tYW5kIHsKQEAgLTEwNCw2ICs5NCw4IEBAIHB1YmxpYzoKICNpZm5kZWYgTkRFQlVHCiAg
ICAgdmlydHVhbCB2b2lkIGdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+JikgPSAwOwog
I2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZG9SZWFwcGx5KCk7IC8vIGNhbGxzIGRvQXBwbHkoKQogCiBwcm90ZWN0ZWQ6CiAgICAgU2lt
cGxlRWRpdENvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KSA6IEVkaXRDb21tYW5kKGRvY3VtZW50
KSB7IH0KQEAgLTEyMyw3ICsxMTUsNyBAQCBpbmxpbmUgU2ltcGxlRWRpdENvbW1hbmQqIHRvU2lt
cGxlRWRpdENvCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNpbXBsZUVkaXRDb21tYW5kKj4oY29t
bWFuZCk7CiB9CiAKLXZvaWQgYXBwbHlDb21tYW5kKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KTsK
K3ZvaWQgYXBwbHlDb21tYW5kKFBhc3NSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+KTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJl
dmlzaW9uIDEwMjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogCiAgICAgRnJhbWUqIGZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogICAgIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIqIGRl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZUJ1dHRvbkNvbnRy
b2xsZXIuZ2V0KCk7IH0KLSAgICBFZGl0Q29tbWFuZCogbGFzdEVkaXRDb21tYW5kKCkgeyByZXR1
cm4gbV9sYXN0RWRpdENvbW1hbmQuZ2V0KCk7IH0KKyAgICBDb21wb3NpdGVFZGl0Q29tbWFuZCog
bGFzdEVkaXRDb21tYW5kKCkgeyByZXR1cm4gbV9sYXN0RWRpdENvbW1hbmQuZ2V0KCk7IH0KIAog
ICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Kik7CiAgICAgdm9pZCBo
YW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCopOwpAQCAtMzczLDYgKzM3Myw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKICNlbmRpZgogCisgICAgdm9pZCByZXBsYWNlU2VsZWN0
aW9uV2l0aEZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIGJvb2wgc2VsZWN0
UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUpOworICAgIHZv
aWQgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0UmVw
bGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlKTsKKwogICAgIGJvb2wgc2VsZWN0aW9uU3RhcnRI
YXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVu
Z3RoKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0
aW5nKGJvb2wgb25seUhhbmRsZVdvcmRzQ29udGFpbmluZ1NlbGVjdGlvbik7CiAgICAgdm9pZCBk
ZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgU3Ry
aW5nJiBvcmlnaW5hbFN0cmluZyk7CkBAIC0zODIsNyArMzg1LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBGcmFtZSogbV9mcmFtZTsKICAgICBPd25QdHI8RGVsZXRlQnV0dG9uQ29udHJvbGxl
cj4gbV9kZWxldGVCdXR0b25Db250cm9sbGVyOwotICAgIFJlZlB0cjxFZGl0Q29tbWFuZD4gbV9s
YXN0RWRpdENvbW1hbmQ7CisgICAgUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBtX2xhc3RF
ZGl0Q29tbWFuZDsKICAgICBSZWZQdHI8Tm9kZT4gbV9yZW1vdmVkQW5jaG9yOwogICAgIFJlZlB0
cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9kZTsKICAgICB1bnNpZ25lZCBtX2NvbXBvc2l0aW9uU3Rh
cnQ7CkBAIC00MDIsOCArNDA1LDYgQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPENsaXBib2Fy
ZD4gbmV3R2VuZXJhbENsaXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CiAg
ICAgdm9pZCBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCopOwogICAg
IHZvaWQgcGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiwgYm9vbCBhbGxvd1BsYWluVGV4
dCk7Ci0gICAgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4sIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNl
LCBib29sIG1hdGNoU3R5bGUpOwotICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNv
bnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlKTsK
ICAgICB2b2lkIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQqKTsKICAgICB2
b2lkIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogICAgIHZvaWQgbWFy
a01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBj
aGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEw
MjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjU3LDcgKzE2NTcsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRh
dGVBcHBlYXJhbmNlKCkKICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5n
cygpICYmIG1fZnJhbWUtPnNldHRpbmdzKCktPmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CiAgICAg
Ym9vbCBzaG91bGRCbGluayA9IGNhcmV0SXNWaXNpYmxlKCkgJiYgaXNDYXJldCgpICYmIChpc0Nv
bnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpOwogICAgIAotICAgIEVkaXRDb21tYW5k
KiBsYXN0RWRpdENvbW1hbmQgPSBtX2ZyYW1lID8gbV9mcmFtZS0+ZWRpdG9yKCktPmxhc3RFZGl0
Q29tbWFuZCgpIDogMDsKKyAgICBDb21wb3NpdGVFZGl0Q29tbWFuZCogbGFzdEVkaXRDb21tYW5k
ID0gbV9mcmFtZSA/IG1fZnJhbWUtPmVkaXRvcigpLT5sYXN0RWRpdENvbW1hbmQoKSA6IDA7CiAg
ICAgYm9vbCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQgPSBsYXN0RWRpdENv
bW1hbmQgJiYgbGFzdEVkaXRDb21tYW5kLT5zaG91bGRTdG9wQ2FyZXRCbGlua2luZygpOwogCiAg
ICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9wIHRoZSBibGluayB0aW1lciBzbyB3ZSBjYW4g
cmVzdGFydCB3aXRoIGEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMTAyNTI5KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkNvbXBv
c2l0ZUVkaXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKQEAg
LTQyNywxOCArNDI4LDE5IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVz
cG8KICAgICB9CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9u
ZFRvQXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmQqIGNvbW1hbmQpCit2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRD
b21tYW5kKiBjb21tYW5kKQogewotICAgIGlmIChjb21tYW5kLT5pc1RvcExldmVsQ29tbWFuZCgp
ICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpKQorICAg
IEFTU0VSVChjb21tYW5kLT5pc1RvcExldmVsQ29tbWFuZCgpKQorICAgIGlmICghY29tbWFuZC0+
c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKICAgICAgICAgbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3Jy
ZWN0aW9uSW5kaWNhdG9yKTsKIAotICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRl
ZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOworICAgIG1hcmtQcmVjZWRpbmdX
aGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQtPmVu
ZGluZ1NlbGVjdGlvbigpKTsKICAgICBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRv
Y29ycmVjdGlvbiA9IFN0cmluZygpOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmQqIGNvbW1hbmQpCit2
b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRp
bmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiogY29tbWFuZCkKIHsKLSAgICBpZiAoIWNvbW1hbmQt
PmlzQ3JlYXRlTGlua0NvbW1hbmQoKSkKKyAgICBpZiAoIWNvbW1hbmQtPndhc0NyZWF0ZUxpbmtD
b21tYW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlv
bigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5kKCkpOwogICAgIGlm
ICghcmFuZ2UpCkBAIC01MTMsOSArNTE1LDkgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjpkZWxldAogICAgIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9u
ID0gcG9zaXRpb247CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFy
a1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQo
RWRpdENvbW1hbmQqIGNvbW1hbmQpCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21t
YW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKIHsKLSAgICBQb3Np
dGlvbiBlbmRPZlNlbGVjdGlvbiA9IGNvbW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpLmVuZCgpOwor
ICAgIFBvc2l0aW9uIGVuZE9mU2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uLmVuZCgpOwogICAg
IGlmIChlbmRPZlNlbGVjdGlvbiAhPSBtX3Bvc2l0aW9uRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVj
dGlvbikKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTAyNTI5
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKIGNsYXNzIEVkaXRvckNsaWVudDsKLWNs
YXNzIEVkaXRDb21tYW5kOworY2xhc3MgRWRpdENvbW1hbmRDb21wb3NpdGlvbjsKIGNsYXNzIEZy
YW1lOwogY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiAKQEAgLTg3LDggKzg4LDggQEAgcHVibGlj
OgogICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUo
KSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKIAogICAgIHZvaWQgcmVzcG9uZFRv
VW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBjb25zdCBT
dHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKSBVTkxFU1NfRU5BQkxF
RCh7IFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOyBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0p
Ci0gICAgdm9pZCByZXNwb25kVG9BcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZCopIFVOTEVTU19F
TkFCTEVEKHt9KQotICAgIHZvaWQgcmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFu
ZCopIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIHZvaWQgcmVzcG9uZFRvQXBwbGllZEVkaXRpbmco
Q29tcG9zaXRlRWRpdENvbW1hbmQqKSBVTkxFU1NfRU5BQkxFRCh7IH0pCisgICAgdm9pZCByZXNw
b25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24qKSBVTkxFU1NfRU5B
QkxFRCh7IH0pCiAgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0o
b2xkU2VsZWN0aW9uKTsgfSkKIAogICAgIHZvaWQgc3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURf
UEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKQEAgLTEyNSw3ICsxMjYsNyBAQCBwcml2YXRlOgogICAg
IEVkaXRvckNsaWVudCogY2xpZW50KCk7CiAgICAgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVj
a2VyKCk7CiAgICAgRmxvYXRSZWN0IHJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKikg
Y29uc3Q7Ci0gICAgdm9pZCBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29y
cmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCopOworICAgIHZvaWQgbWFya1ByZWNlZGlu
Z1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiBlbmRpbmdTZWxlY3Rpb24pOwogCiAgICAgRWRpdG9yQ2xpZW50KiBtX2Ns
aWVudDsKICAgICBGcmFtZSogbV9mcmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmNwcAkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDcgKzI0MCw3IEBA
IFR5cGluZ0NvbW1hbmQqIFR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmcKIHsKICAgICBBU1NFUlQo
ZnJhbWUpOwogCi0gICAgRWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5lZGl0
b3IoKS0+bGFzdEVkaXRDb21tYW5kKCk7CisgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIGxhc3RF
ZGl0Q29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+bGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYg
KCFsYXN0RWRpdENvbW1hbmQgfHwgIWxhc3RFZGl0Q29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkg
fHwgIXN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQpLT5pc09wZW5G
b3JNb3JlVHlwaW5nKCkpCiAgICAgICAgIHJldHVybiAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcg
QEAgcHVibGljOgogICAgIHZvaWQgZm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFy
aXR5LCBib29sIGtpbGxSaW5nKTsKICAgICB2b2lkIGRlbGV0ZVNlbGVjdGlvbihib29sIHNtYXJ0
RGVsZXRlKTsKICAgICB2b2lkIHNldENvbXBvc2l0aW9uVHlwZShUZXh0Q29tcG9zaXRpb25UeXBl
IHR5cGUpIHsgbV9jb21wb3NpdGlvblR5cGUgPSB0eXBlOyB9CisgICAgdm9pZCBzZXRTaG91bGRS
ZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihib29sIHJldGFpbikgeyBtX3Nob3VsZFJldGFp
bkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yID0gcmV0YWluOyB9CiAKIHByaXZhdGU6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8VHlwaW5nQ29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwg
RVR5cGluZ0NvbW1hbmQgY29tbWFuZCwgY29uc3QgU3RyaW5nJiB0ZXh0ID0gIiIsIE9wdGlvbnMg
b3B0aW9ucyA9IDAsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51
bGFyaXR5KQpAQCAtMTAwLDEwICsxMDEsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBk
b0FwcGx5KCk7CiAgICAgdmlydHVhbCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNUeXBpbmdDb21tYW5kKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZXNUeXBp
bmdTdHlsZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbklu
ZGljYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRp
Y2F0b3I7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25J
bmRpY2F0b3IoYm9vbCByZXRhaW4pIHsgbV9zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGlj
YXRvciA9IHJldGFpbjsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdG9wQ2FyZXRCbGlua2lu
ZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVzVHlw
aW5nU3R5bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3ByZXNlcnZlc1R5cGluZ1N0eWxl
OyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9y
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbklu
ZGljYXRvcjsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdG9wQ2FyZXRCbGlua2luZygpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KICAgICB2b2lkIHNldFNob3VsZFByZXZlbnRT
cGVsbENoZWNraW5nKGJvb2wgcHJldmVudCkgeyBtX3Nob3VsZFByZXZlbnRTcGVsbENoZWNraW5n
ID0gcHJldmVudDsgfQogCiAgICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJl
bnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5kKiwgRnJhbWUqKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEwMjU1OSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTEyLTExICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFB1c2ggbW9yZSBtZW1iZXIgZnVuY3Rpb25zIGZy
b20gRWRpdENvbW1hbmQgdG8gQ29tcG9zaXRlRWRpdENvbW1hbmQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MjQ5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2FsbCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rp
b25XaXRoVGV4dCBpbnN0ZWFkIG9mIG1hbnVhbGx5IGNyZWF0aW5nIGFuZCBhcHBseWluZyBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVwbGFjZVNlbGVjdGlvbldpdGhU
ZXh0KToKKwogMjAxMS0xMi0xMSAgR29wYWwgUmFnaGF2YW4gIDxnb3BhbC4xLnJhZ2hhdmFuQG5v
a2lhLmNvbT4KIAogICAgICAgICBbUXRdIFFRdWlja1dlYlZpZXcgbWlzc2luZyB0aXRsZUNoYW5n
ZWQgc2lnbmFsIHRlc3RzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxMDI1MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNDEsMTIgKzIy
NDEsOSBAQCB2b2lkIFdlYlBhZ2U6OmRpZFNlbGVjdEl0ZW1Gcm9tQWN0aXZlQ29uCiAKIHZvaWQg
V2ViUGFnZTo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiB0ZXh0KQogewotICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gdGV4dEZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChmcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIHRleHQpOwotICAgIGFwcGx5Q29tbWFuZChSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6Y3JlYXRlKGZyYW1lLT5kb2N1bWVudCgpLCB0ZXh0RnJhZ21lbnQucmVsZWFzZSgp
LCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQgfCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2
ZW50TmVzdGluZykpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+cmV2ZWFsU2VsZWN0aW9uKFNj
cm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CisgICAgYm9vbCBzZWxlY3RSZXBs
YWNlbWVudCA9IHRydWU7CisgICAgYm9vbCBzbWFydFJlcGxhY2UgPSB0cnVlOworICAgIGZyYW1l
LT5lZGl0b3IoKS0+cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHRleHQsIHNlbGVjdFJlcGxhY2Vt
ZW50LCBzbWFydFJlcGxhY2UpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmNsZWFyU2VsZWN0aW9uKCkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDI1NTkpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1
IEBACisyMDExLTEyLTExICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAg
ICAgIFB1c2ggbW9yZSBtZW1iZXIgZnVuY3Rpb25zIGZyb20gRWRpdENvbW1hbmQgdG8gQ29tcG9z
aXRlRWRpdENvbW1hbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc0MjQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ2FsbCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dCBpbnN0ZWFkIG9mIG1h
bnVhbGx5IGNyZWF0aW5nIGFuZCBhcHBseWluZyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC4KKwor
ICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZUltcGw6OnJlcGxhY2VTZWxlY3Rpb24pOgorCiAyMDExLTEyLTA5ICBKYW1lcyBSb2JpbnNvbiAg
PGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZW1vdmUgZm9yd2Fy
ZGluZyBoZWFkZXJzIGZvciBXZWJMYXllciBBUElzCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDEwMjUyOSkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MjQsOCArMTEyNCw5IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpyZXBsYWNlU2VsZWN0aW9uKGNvbnMK
IHsKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KAogICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSwgdGV4dCk7Ci0gICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpjcmVhdGUoCi0gICAgICAgIGZyYW1lKCktPmRvY3VtZW50KCksIGZyYWdtZW50LmdldCgp
LCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlIHwgUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6Ok1hdGNoU3R5bGUgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5l
c3RpbmcpKTsKKyAgICBib29sIHNtYXJ0UmVwbGFjZSA9IHRydWU7CisgICAgYm9vbCBzZWxlY3RS
ZXBsYWNlID0gdHJ1ZTsKKyAgICBmcmFtZSgpLT5lZGl0b3IoKS0+cmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0KHRleHQsIHNlbGVjdFJlcGxhY2UsIHNtYXJ0UmVwbGFjZSk7CiB9CiAKIHZvaWQgV2Vi
RnJhbWVJbXBsOjppbnNlcnRUZXh0KGNvbnN0IFdlYlN0cmluZyYgdGV4dCkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEwMjU1OSkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTEyLTExICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFB1c2ggbW9yZSBtZW1iZXIgZnVuY3Rp
b25zIGZyb20gRWRpdENvbW1hbmQgdG8gQ29tcG9zaXRlRWRpdENvbW1hbmQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MjQ5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2FsbCBFZGl0b3I6OnJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dCBpbnN0ZWFkIG9mIG1hbnVhbGx5IGNyZWF0aW5nIGFuZCBhcHBseWlu
ZyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC4KKworICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJm
cmFtZS5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX2ZyYW1lX3JlcGxhY2Vfc2VsZWN0aW9uKToK
KwogMjAxMS0xMi0wOSAgSm9vbmUgSHVyICA8am9vbmUuaHVyQGNvbGxhYm9yYS5jby51az4KIAog
ICAgICAgICBbR1RLXSBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIEFjY2VsZXJhdGVkIENvbXBv
c2l0aW5nIHVzaW5nIENsdXR0ZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYmZyYW1lLmNwcAkocmV2aXNpb24gMTAyNTI5KQorKysgU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTk2LDEwICs5OTYs
OSBAQCBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHdlYmtpdF93ZWJfZnJhbWVfCiB2b2lkIHdlYmtp
dF93ZWJfZnJhbWVfcmVwbGFjZV9zZWxlY3Rpb24oV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBjaGFyKiB0ZXh0KQogewogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKGZyYW1lKTsKLSAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21U
ZXh0KAotICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCB0ZXh0KTsKLSAgICBhcHBseUNvbW1hbmQoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OmNyZWF0ZShjb3JlRnJhbWUtPmRvY3VtZW50KCksIGZyYWdtZW50LmdldCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpTbWFydFJlcGxhY2UgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHls
ZSB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZykpOworICAgIGJvb2wg
c2VsZWN0UmVwbGFjZW1lbnQgPSBmYWxzZTsKKyAgICBib29sIHNtYXJ0UmVwbGFjZSA9IHRydWU7
CisgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHRleHQs
IHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UpOwogfQogCiAvKioKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEwMjU1OSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDExLTEyLTExICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFB1c2ggbW9yZSBtZW1iZXIgZnVuY3Rp
b25zIGZyb20gRWRpdENvbW1hbmQgdG8gQ29tcG9zaXRlRWRpdENvbW1hbmQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MjQ5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2FsbCBFZGl0b3I6OnJlcGxhY2VT
ZWxlY3Rpb25XaXRoRnJhZ21lbnQgaW5zdGVhZCBvZiBtYW51YWxseSBjcmVhdGluZyBhbmQgYXBw
bHlpbmcgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuCisgICAgICAgIFRoZSBvbmx5IGJlaGF2aW9y
YWwgZGlmZmVyZW5jZSBpcyB0aGF0IG5ldyBjb2RlIHdpbGwgZW5kIHVwIGNoZWNraW5nIGZvciBz
cGVsbCBjaGVja3MuCisKKyAgICAgICAgSG93ZXZlciwgdGhpcyBkaWZmZXJlbmNlIGFwcGVhcnMg
dG8gYmUgdW5pbnRlbnRpb25hbCBzaW5jZSB0aGUgY29kZSBwcmVkYXRlcyBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC83Mzg4NgorICAgICAgICB3aGljaCBpbnRyb2R1Y2VkIGFuIGlu
dm9jYXRpb24gb2Ygc3BlbGxjaGVjayBjb2RlLiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBkb2Vzbid0
IHNlZW0gdG8gYmUgYW55d2F5IG9mIHRlc3RpbmcgdGhpcy4KKworICAgICAgICAqIFdlYlZpZXcv
V2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZy
YWdtZW50OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0pOgorCiAy
MDExLTEyLTA3ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRo
ZSAzMi1iaXQgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0J
KHJldmlzaW9uIDEwMjUyOSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNDYsMTcgKzEwNDYsNyBAQCAtICh2b2lkKSBfcmVzdW1l
QW5pbWF0aW9ucwogCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OihET01E
b2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0
UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOihC
T09MKW1hdGNoU3R5bGUKIHsKLSAgICBpZiAoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9u
KCktPmlzTm9uZSgpIHx8ICFmcmFnbWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpDb21tYW5kT3B0aW9ucyBvcHRpb25zID0gUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nOwotICAgIGlmIChzZWxlY3RSZXBsYWNlbWVudCkKLSAg
ICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1l
bnQ7Ci0gICAgaWYgKHNtYXJ0UmVwbGFjZSkKLSAgICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlOwotICAgIGlmIChtYXRjaFN0eWxlKQotICAgICAg
ICBvcHRpb25zIHw9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlOwotICAgIGFw
cGx5Q29tbWFuZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKF9wcml2YXRlLT5jb3Jl
RnJhbWUtPmRvY3VtZW50KCksIGNvcmUoZnJhZ21lbnQpLCBvcHRpb25zKSk7Ci0gICAgX3ByaXZh
dGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOworICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRv
cigpLT5yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGNvcmUoZnJhZ21lbnQpLCBzZWxlY3RS
ZXBsYWNlbWVudCwgc21hcnRSZXBsYWNlLCBtYXRjaFN0eWxlKTsKIH0KIAogLSAodm9pZClfcmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6
KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119173</attachid>
            <date>2011-12-14 00:41:28 -0800</date>
            <delta_ts>2011-12-14 13:12:35 -0800</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-74249-20111214004125.patch</filename>
            <type>text/plain</type>
            <size>27047</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjc0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDExLTEyLTE0ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFB1c2ggbW9yZSBtZW1iZXIgZnVu
Y3Rpb25zIGZyb20gRWRpdENvbW1hbmQgdG8gQ29tcG9zaXRlRWRpdENvbW1hbmQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MjQ5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgc3RhcnRpbmdSb290
RWRpdGFibGVFbGVtZW50IGFuZCBlbmRpbmdSb290RWRpdGFibGVFbGVtZW50IGZyb20gRWRpdENv
bW1hbmQgdG8gRWRpdENvbW1hbmRDb21wb3NpdGlvbiwKKyAgICAgICAgYW5kIGlzVHlwaW5nQ29t
bWFuZCwgcHJlc2VydmVzVHlwaW5nU3R5bGUsIHNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5k
aWNhdG9yLAorICAgICAgICBzZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciwg
YW5kIHNob3VsZFN0b3BDYXJldEJsaW5raW5nIGZyb20gRWRpdENvbW1hbmQgdG8gQ29tcG9zaXRl
RWRpdENvbW1hbmQuCisgICAgICAgIEFsc28gcmVtb3ZlZCBFZGl0Q29tbWFuZDo6dXBkYXRlTGF5
b3V0KCkuCisKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OmRvQXBwbHkpOgor
ICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZSk6CisgICAgICAgICogZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnNldFN0YXJ0aW5nU2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnNldEVuZGluZ1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJlc2VydmVzVHlwaW5nU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzVHlwaW5nQ29t
bWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2hvdWxkUmV0
YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
RWRpdENvbW1hbmQ6OnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjphZGRCbG9ja1BsYWNlaG9sZGVy
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhDb250ZW50c1RvTmV3QmxvY2tJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOgorICAgICAgICAqIGVkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5k
Q29tcG9zaXRpb246OnN0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjplbmRpbmdSb290RWRpdGFibGVFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpzaG91bGRTdG9wQ2FyZXRC
bGlua2luZyk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Zml4dXBXaGl0ZXNwYWNl
KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRDb21tYW5kOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6dW5h
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6cmVhcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6c2V0U3RhcnRpbmdTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdENvbW1hbmQ6OnNldEVuZGluZ1NlbGVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0Q29tbWFuZDo6c2V0UGFyZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21t
YW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6aXNFZGl0Q29tbWFuZENvbXBv
c2l0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjphcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnVu
YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFwcGxpZWRFZGl0
aW5nKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpsYXN0RWRpdENvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2Up
OgorICAgICAgICAqIGVkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3JhcGgpOgorICAgICAg
ICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0lu
c2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGlu
Zy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omxh
c3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcpOgorICAgICAgICAqIGVkaXRpbmcv
VHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6c2hvdWxk
UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpOgorCiAyMDExLTEyLTEzICBIYWppbWUgTW9y
cml0YSAgPG1vcnJpdGFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYXR0ZW1w
dCBmb3IgZml4aW5nIHdpbmRvd3MgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDI3MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDggKzg3LDggQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENv
bW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgZm9ybWF0U2VsZWN0aW9uKHN0YXJ0T2ZTZWxlY3Rpb24s
IGVuZE9mU2VsZWN0aW9uKTsKIAotICAgIHVwZGF0ZUxheW91dCgpOwotICAgIAorICAgIGRvY3Vt
ZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCiAgICAgQVNT
RVJUKHN0YXJ0U2NvcGUgPT0gZW5kU2NvcGUpOwogICAgIEFTU0VSVChzdGFydEluZGV4ID49IDAp
OwogICAgIEFTU0VSVChzdGFydEluZGV4IDw9IGVuZEluZGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDI3MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5Qmxv
Y2tTdHlsZSgKICAgICAvLyB1cGRhdGUgZG9jdW1lbnQgbGF5b3V0IG9uY2UgYmVmb3JlIHJlbW92
aW5nIHN0eWxlcwogICAgIC8vIHNvIHRoYXQgd2UgYXZvaWQgdGhlIGV4cGVuc2Ugb2YgdXBkYXRp
bmcgYmVmb3JlIGVhY2ggYW5kIGV2ZXJ5IGNhbGwKICAgICAvLyB0byBjaGVjayBhIGNvbXB1dGVk
IHN0eWxlCi0gICAgdXBkYXRlTGF5b3V0KCk7CisgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICAvLyBnZXQgcG9zaXRpb25zIHdlIHdh
bnQgdG8gdXNlIGZvciBhcHBseWluZyBzdHlsZQogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc3RhcnRQ
b3NpdGlvbigpOwpAQCAtNTQwLDcgKzU0MCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFw
cGx5SW5saW5lU3R5bGUKICAgICAvLyB1cGRhdGUgZG9jdW1lbnQgbGF5b3V0IG9uY2UgYmVmb3Jl
IHJlbW92aW5nIHN0eWxlcwogICAgIC8vIHNvIHRoYXQgd2UgYXZvaWQgdGhlIGV4cGVuc2Ugb2Yg
dXBkYXRpbmcgYmVmb3JlIGVhY2ggYW5kIGV2ZXJ5IGNhbGwKICAgICAvLyB0byBjaGVjayBhIGNv
bXB1dGVkIHN0eWxlCi0gICAgdXBkYXRlTGF5b3V0KCk7CisgICAgZG9jdW1lbnQoKS0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICAvLyBhZGp1c3QgdG8gdGhl
IHBvc2l0aW9ucyB3ZSB3YW50IHRvIHVzZSBmb3IgYXBwbHlpbmcgc3R5bGUKICAgICBQb3NpdGlv
biBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKQEAgLTYzMCw3ICs2MzAsNyBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgLy8gdXBkYXRlIGRvY3VtZW50IGxh
eW91dCBvbmNlIGJlZm9yZSBydW5uaW5nIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbgogICAgIC8v
IHNvIHRoYXQgd2UgYXZvaWQgdGhlIGV4cGVuc2Ugb2YgdXBkYXRpbmcgYmVmb3JlIGVhY2ggYW5k
IGV2ZXJ5IGNhbGwKICAgICAvLyB0byBjaGVjayBhIGNvbXB1dGVkIHN0eWxlCi0gICAgdXBkYXRl
TGF5b3V0KCk7CisgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZVRvQXBwbHkgPSBzdHls
ZTsKICAgICBpZiAoaGFzVGV4dERpcmVjdGlvbikgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDEwMjczMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OCw2ICs3OCw4IEBAIFBhc3NSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlv
bj4gRWRpdEMKIAogRWRpdENvbW1hbmRDb21wb3NpdGlvbjo6RWRpdENvbW1hbmRDb21wb3NpdGlv
bihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHN0YXJ0aW5nU2Vs
ZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24sIGJvb2wgd2Fz
Q3JlYXRlTGlua0NvbW1hbmQpCiAgICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCwgc3RhcnRpbmdT
ZWxlY3Rpb24sIGVuZGluZ1NlbGVjdGlvbikKKyAgICAsIG1fc3RhcnRpbmdSb290RWRpdGFibGVF
bGVtZW50KHN0YXJ0aW5nU2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAsIG1f
ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudChlbmRpbmdTZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxl
bWVudCgpKQogICAgICwgbV93YXNDcmVhdGVMaW5rQ29tbWFuZCh3YXNDcmVhdGVMaW5rQ29tbWFu
ZCkKIHsKIH0KQEAgLTEwNiw2ICsxMDgsMTggQEAgdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9u
OjphcHBlbmQoU2ltcAogICAgIG1fY29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpOwogfQogCit2b2lk
IEVkaXRDb21tYW5kQ29tcG9zaXRpb246OnNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBFZGl0Q29tbWFuZDo6c2V0U3RhcnRpbmdT
ZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICBtX3N0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudCA9
IHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7Cit9CisKK3ZvaWQgRWRpdENvbW1hbmRD
b21wb3NpdGlvbjo6c2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKK3sKKyAgICBFZGl0Q29tbWFuZDo6c2V0RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlv
bik7CisgICAgbV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50ID0gc2VsZWN0aW9uLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKK30KKwogI2lmbmRlZiBOREVCVUcKIHZvaWQgRWRpdENvbW1hbmRDb21w
b3NpdGlvbjo6Z2V0Tm9kZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mIG5vZGVzKQogewpAQCAt
MTUwLDYgKzE2NCwyNSBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppc0NyZWF0ZUxpbmtD
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcmVz
ZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjppc1R5cGluZ0NvbW1hbmQoKSBjb25zdAoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2hvdWxkUmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rp
b25JbmRpY2F0b3IoYm9vbCkKK3sKK30KKwogLy8KIC8vIHN1Z2FyeS1zd2VldCBjb252ZW5pZW5j
ZSBmdW5jdGlvbnMgdG8gaGVscCBjcmVhdGUgYW5kIGFwcGx5IGVkaXQgY29tbWFuZHMgaW4gY29t
cG9zaXRlIGNvbW1hbmRzCiAvLwpAQCAtNzI4LDcgKzc2MSw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4g
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmEKICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICB1cGRhdGVMYXlvdXQoKTsKKyAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBjb250YWluZXItPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVy
ZXItPmlzQmxvY2tGbG93KCkpCkBAIC03NzMsNyArODA2LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6bQogICAgIGlmIChwb3MuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIAotICAgIHVwZGF0ZUxheW91dCgpOworICAgIGRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIAogICAgIC8vIEl0J3Mgc3Ry
YW5nZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHZlcmlmeWluZyB0aGF0
IHBvcyBoYXMgbm90IGJlZW4gaW52YWxpZGF0ZWQKICAgICAvLyBieSBhbiBlYXJsaWVyIGNhbGwg
dG8gdGhpcyBmdW5jdGlvbi4gIFRoZSBjYWxsZXIsIGFwcGx5QmxvY2tTdHlsZSwgc2hvdWxkIGRv
IHRoaXMuCkBAIC0xMDgzLDcgKzExMTYsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBoCiAgICAgICAgIC8vIEZJWE1FOiBUcmltIHRleHQgYmV0d2VlbiBiZWZvcmVQ
YXJhZ3JhcGggYW5kIGFmdGVyUGFyYWdyYXBoIGlmIHRoZXkgYXJlbid0IGVxdWFsLgogICAgICAg
ICBpbnNlcnROb2RlQXQoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpLCBiZWZvcmVQYXJh
Z3JhcGguZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgICAgIC8vIE5lZWQgYW4gdXBkYXRlTGF5b3V0
IGhlcmUgaW4gY2FzZSBpbnNlcnRpbmcgdGhlIGJyIGhhcyBzcGxpdCBhIHRleHQgbm9kZS4KLSAg
ICAgICAgdXBkYXRlTGF5b3V0KCk7CisgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIH0KIAogICAgIFJlZlB0cjxSYW5nZT4gc3Rh
cnRUb0Rlc3RpbmF0aW9uUmFuZ2UoUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBmaXJzdFBvc2l0
aW9uSW5Ob2RlKGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSwgZGVzdGluYXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAkocmV2aXNpb24gMTAy
NzMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZChT
aW1wbGVFZGl0Q29tbWFuZCopOwogICAgIGJvb2wgd2FzQ3JlYXRlTGlua0NvbW1hbmQoKSBjb25z
dCB7IHJldHVybiBtX3dhc0NyZWF0ZUxpbmtDb21tYW5kOyB9CiAKKyAgICBFbGVtZW50KiBzdGFy
dGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0aW5nUm9vdEVk
aXRhYmxlRWxlbWVudC5nZXQoKTsgfQorICAgIEVsZW1lbnQqIGVuZGluZ1Jvb3RFZGl0YWJsZUVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQuZ2V0KCk7
IH0KKwogI2lmbmRlZiBOREVCVUcKICAgICB2aXJ0dWFsIHZvaWQgZ2V0Tm9kZXNJbkNvbW1hbmQo
SGFzaFNldDxOb2RlKj4mKTsKICNlbmRpZgpAQCAtNTQsOCArNTcsMTIgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBFZGl0Q29tbWFuZENvbXBvc2l0aW9uKERvY3VtZW50KiwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVu
ZGluZ1NlbGVjdGlvbiwgYm9vbCB3YXNDcmVhdGVMaW5rQ29tbWFuZCk7CiAgICAgdmlydHVhbCBi
b29sIGlzRWRpdENvbW1hbmRDb21wb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmRpbmdTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIE9WRVJSSURFOwogCiAgICAgVmVjdG9yPFJlZlB0
cjxTaW1wbGVFZGl0Q29tbWFuZD4gPiBtX2NvbW1hbmRzOworICAgIFJlZlB0cjxFbGVtZW50PiBt
X3N0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudDsKKyAgICBSZWZQdHI8RWxlbWVudD4gbV9lbmRp
bmdSb290RWRpdGFibGVFbGVtZW50OwogICAgIGJvb2wgbV93YXNDcmVhdGVMaW5rQ29tbWFuZDsK
IH07CiAKQEAgLTY4LDYgKzc1LDExIEBAIHB1YmxpYzoKICAgICBFZGl0Q29tbWFuZENvbXBvc2l0
aW9uKiBlbnN1cmVDb21wb3NpdGlvbigpOwogCiAgICAgdmlydHVhbCBib29sIGlzQ3JlYXRlTGlu
a0NvbW1hbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBpbmdDb21tYW5kKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIHNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9y
KGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdG9wQ2FyZXRCbGlua2luZygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb21wb3NpdGVF
ZGl0Q29tbWFuZChEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDI3MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjEsNyArMzYxLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1v
dmVOb2RlKAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBNYWtlIHN1cmUgZW1wdHkg
Y2VsbCBoYXMgc29tZSBoZWlnaHQsIGlmIGEgcGxhY2Vob2xkZXIgY2FuIGJlIGluc2VydGVkLgot
ICAgICAgICB1cGRhdGVMYXlvdXQoKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgICAgIFJlbmRlck9iamVjdCAqciA9IG5v
ZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmIChyICYmIHItPmlzVGFibGVDZWxsKCkgJiYgdG9S
ZW5kZXJUYWJsZUNlbGwociktPmNvbnRlbnRIZWlnaHQoKSA8PSAwKSB7CiAgICAgICAgICAgICBQ
b3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9zaXRpb24gPSBmaXJzdEVkaXRhYmxlUG9zaXRpb25Jbk5v
ZGUobm9kZS5nZXQoKSk7CkBAIC01MjgsNyArNTI4LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpoYW5kbGVHZW5lcgogCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmZpeHVw
V2hpdGVzcGFjZSgpCiB7Ci0gICAgdXBkYXRlTGF5b3V0KCk7CisgICAgZG9jdW1lbnQoKS0+dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgLy8gRklYTUU6IGlzUmVu
ZGVyZWRDaGFyYWN0ZXIgc2hvdWxkIGJlIHJlbW92ZWQsIGFuZCB3ZSBzaG91bGQgdXNlIFZpc2li
bGVQb3NpdGlvbjo6Y2hhcmFjdGVyQWZ0ZXIgYW5kIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVy
QmVmb3JlCiAgICAgaWYgKG1fbGVhZGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgIW1fbGVh
ZGluZ1doaXRlc3BhY2UuaXNSZW5kZXJlZENoYXJhY3RlcigpICYmIG1fbGVhZGluZ1doaXRlc3Bh
Y2UuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIFRleHQqIHRleHRO
b2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG1fbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5v
ZGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAkocmV2aXNp
b24gMTAyNzMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBFZGl0Q29tbWFuZDo6YXBwbHkoKQog
ICAgIC8vIFJlbW92ZU5vZGVDb21tYW5kLCBkb24ndCByZXF1aXJlIGEgbGF5b3V0IGJlY2F1c2Ug
dGhlIGhpZ2ggbGV2ZWwgb3BlcmF0aW9ucyB0aGF0IAogICAgIC8vIHVzZSB0aGVtIHBlcmZvcm0g
b25lIGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVhdGlvbiBvZiBWaXNpYmxl
UG9zaXRpb25zKS4KICAgICBpZiAoaXNUb3BMZXZlbENvbW1hbmQoKSkKLSAgICAgICAgdXBkYXRl
TGF5b3V0KCk7CisgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOwogCiAgICAgewogICAgICAgICBFdmVudFF1ZXVlU2NvcGUgc2NvcGU7CkBA
IC0xMDcsMTMgKzEwNywxMyBAQCB2b2lkIEVkaXRDb21tYW5kOjphcHBseSgpCiAKICAgICBpZiAo
aXNUb3BMZXZlbENvbW1hbmQoKSkgewogICAgICAgICBBU1NFUlQoaXNDb21wb3NpdGVFZGl0Q29t
bWFuZCgpKTsKKyAgICAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQgPSB0b0NvbXBv
c2l0ZUVkaXRDb21tYW5kKHRoaXMpOwogICAgICAgICAvLyBPbmx5IG5lZWQgdG8gY2FsbCBhcHBs
aWVkRWRpdGluZyBmb3IgdG9wLWxldmVsIGNvbW1hbmRzLCBhbmQgVHlwaW5nQ29tbWFuZHMgZG8g
aXQgb24gdGhlaXIKICAgICAgICAgLy8gb3duIChzZWUgVHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRk
ZWRUb09wZW5Db21tYW5kKS4KLSAgICAgICAgaWYgKCFpc1R5cGluZ0NvbW1hbmQoKSkKLSAgICAg
ICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+YXBwbGllZEVkaXRpbmcodG9Db21wb3NpdGVFZGl0Q29t
bWFuZCh0aGlzKSk7CisgICAgICAgIGlmICghY29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkpCisg
ICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGxpZWRFZGl0aW5nKGNvbW1hbmQpOworICAg
ICAgICBjb21tYW5kLT5zZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihmYWxz
ZSk7CiAgICAgfQotCi0gICAgc2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Io
ZmFsc2UpOwogfQogCiB2b2lkIEVkaXRDb21tYW5kOjp1bmFwcGx5KCkKQEAgLTEyOCw3ICsxMjgs
NyBAQCB2b2lkIEVkaXRDb21tYW5kOjp1bmFwcGx5KCkKICAgICAvLyBSZW1vdmVOb2RlQ29tbWFu
ZCwgZG9uJ3QgcmVxdWlyZSBhIGxheW91dCBiZWNhdXNlIHRoZSBoaWdoIGxldmVsIG9wZXJhdGlv
bnMgdGhhdCAKICAgICAvLyB1c2UgdGhlbSBwZXJmb3JtIG9uZSBpZiBvbmUgaXMgbmVjZXNzYXJ5
IChsaWtlIGZvciB0aGUgY3JlYXRpb24gb2YgVmlzaWJsZVBvc2l0aW9ucykuCiAgICAgaWYgKGlz
VG9wTGV2ZWxDb21tYW5kKCkpCi0gICAgICAgIHVwZGF0ZUxheW91dCgpOworICAgICAgICBkb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICAKICAg
ICBEZWxldGVCdXR0b25Db250cm9sbGVyKiBkZWxldGVCdXR0b25Db250cm9sbGVyID0gZnJhbWUt
PmVkaXRvcigpLT5kZWxldGVCdXR0b25Db250cm9sbGVyKCk7CiAgICAgZGVsZXRlQnV0dG9uQ29u
dHJvbGxlci0+ZGlzYWJsZSgpOwpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgRWRpdENvbW1hbmQ6
OnJlYXBwbHkoKQogICAgIC8vIFJlbW92ZU5vZGVDb21tYW5kLCBkb24ndCByZXF1aXJlIGEgbGF5
b3V0IGJlY2F1c2UgdGhlIGhpZ2ggbGV2ZWwgb3BlcmF0aW9ucyB0aGF0IAogICAgIC8vIHVzZSB0
aGVtIHBlcmZvcm0gb25lIGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVhdGlv
biBvZiBWaXNpYmxlUG9zaXRpb25zKS4KICAgICBpZiAoaXNUb3BMZXZlbENvbW1hbmQoKSkKLSAg
ICAgICAgdXBkYXRlTGF5b3V0KCk7CisgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAgRGVsZXRlQnV0dG9uQ29udHJvbGxlciog
ZGVsZXRlQnV0dG9uQ29udHJvbGxlciA9IGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlQnV0dG9uQ29u
dHJvbGxlcigpOwogICAgIGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPmRpc2FibGUoKTsKQEAgLTE4
MSwxNSArMTgxLDEyIEBAIHN0YXRpYyBpbmxpbmUgRWRpdENvbW1hbmRDb21wb3NpdGlvbiogY28K
IAogdm9pZCBFZGl0Q29tbWFuZDo6c2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgcykKIHsKLSAgICBFbGVtZW50KiByb290ID0gcy5yb290RWRpdGFibGVFbGVtZW50
KCk7CiAgICAgZm9yIChFZGl0Q29tbWFuZCogY21kID0gdGhpczsgOyBjbWQgPSBjbWQtPm1fcGFy
ZW50KSB7CiAgICAgICAgIGlmIChFZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBjb21wb3NpdGlvbiA9
IGNvbXBvc2l0aW9uSWZQb3NzaWJsZShjbWQpKSB7CiAgICAgICAgICAgICBBU1NFUlQoY21kLT5p
c1RvcExldmVsQ29tbWFuZCgpKTsKLSAgICAgICAgICAgIGNvbXBvc2l0aW9uLT5tX3N0YXJ0aW5n
U2VsZWN0aW9uID0gczsKLSAgICAgICAgICAgIGNvbXBvc2l0aW9uLT5tX3N0YXJ0aW5nUm9vdEVk
aXRhYmxlRWxlbWVudCA9IHJvb3Q7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxFZGl0Q29tbWFu
ZCo+KGNvbXBvc2l0aW9uKS0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ocyk7CiAgICAgICAgIH0KICAg
ICAgICAgY21kLT5tX3N0YXJ0aW5nU2VsZWN0aW9uID0gczsKLSAgICAgICAgY21kLT5tX3N0YXJ0
aW5nUm9vdEVkaXRhYmxlRWxlbWVudCA9IHJvb3Q7CiAgICAgICAgIGlmICghY21kLT5tX3BhcmVu
dCB8fCBjbWQtPm1fcGFyZW50LT5pc0ZpcnN0Q29tbWFuZChjbWQpKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMTk3LDQyICsxOTQsMTUgQEAgdm9pZCBFZGl0Q29tbWFuZDo6c2V0U3Rh
cnRpbmdTZWxlY3Rpb24oYwogCiB2b2lkIEVkaXRDb21tYW5kOjpzZXRFbmRpbmdTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmcykKIHsKLSAgICBFbGVtZW50KiByb290ID0gcy5yb290
RWRpdGFibGVFbGVtZW50KCk7CiAgICAgZm9yIChFZGl0Q29tbWFuZCogY21kID0gdGhpczsgY21k
OyBjbWQgPSBjbWQtPm1fcGFyZW50KSB7CiAgICAgICAgIGlmIChFZGl0Q29tbWFuZENvbXBvc2l0
aW9uKiBjb21wb3NpdGlvbiA9IGNvbXBvc2l0aW9uSWZQb3NzaWJsZShjbWQpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoY21kLT5pc1RvcExldmVsQ29tbWFuZCgpKTsKLSAgICAgICAgICAgIGNvbXBv
c2l0aW9uLT5tX2VuZGluZ1NlbGVjdGlvbiA9IHM7Ci0gICAgICAgICAgICBjb21wb3NpdGlvbi0+
bV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50ID0gcm9vdDsKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEVkaXRDb21tYW5kKj4oY29tcG9zaXRpb24pLT5zZXRFbmRpbmdTZWxlY3Rpb24ocyk7CiAg
ICAgICAgIH0KICAgICAgICAgY21kLT5tX2VuZGluZ1NlbGVjdGlvbiA9IHM7Ci0gICAgICAgIGNt
ZC0+bV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50ID0gcm9vdDsKICAgICB9CiB9CiAKLWJvb2wg
RWRpdENvbW1hbmQ6OnByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgRWRpdENvbW1hbmQ6OmlzVHlwaW5nQ29tbWFuZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEVkaXRDb21tYW5kOjpzaG91bGRSZXRhaW5B
dXRvY29ycmVjdGlvbkluZGljYXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIEVkaXRDb21tYW5kOjpzZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRv
cihib29sKQotewotfQotCi12b2lkIEVkaXRDb21tYW5kOjp1cGRhdGVMYXlvdXQoKSBjb25zdAot
ewotICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OwotfQotCiB2b2lkIEVkaXRDb21tYW5kOjpzZXRQYXJlbnQoQ29tcG9zaXRlRWRpdENvbW1hbmQq
IHBhcmVudCkKIHsKICAgICBBU1NFUlQoKHBhcmVudCAmJiAhbV9wYXJlbnQpIHx8ICghcGFyZW50
ICYmIG1fcGFyZW50KSk7CkBAIC0yNDEsOCArMjExLDYgQEAgdm9pZCBFZGl0Q29tbWFuZDo6c2V0
UGFyZW50KENvbXBvc2l0ZUVkaQogICAgIGlmIChwYXJlbnQpIHsKICAgICAgICAgbV9zdGFydGlu
Z1NlbGVjdGlvbiA9IHBhcmVudC0+bV9lbmRpbmdTZWxlY3Rpb247CiAgICAgICAgIG1fZW5kaW5n
U2VsZWN0aW9uID0gcGFyZW50LT5tX2VuZGluZ1NlbGVjdGlvbjsKLSAgICAgICAgbV9zdGFydGlu
Z1Jvb3RFZGl0YWJsZUVsZW1lbnQgPSBwYXJlbnQtPm1fZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVu
dDsKLSAgICAgICAgbV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50ID0gcGFyZW50LT5tX2VuZGlu
Z1Jvb3RFZGl0YWJsZUVsZW1lbnQ7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0Q29tbWFuZC5oCShyZXZpc2lvbiAxMDI3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDIyICs1NCwxMSBAQCBwdWJs
aWM6CiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0aW5nU2VsZWN0aW9uOyB9CiAgICAgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgZW5kaW5nU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRpbmdTZWxlY3Rpb247
IH0KIAotICAgIEVsZW1lbnQqIHN0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50LmdldCgpOyB9Ci0gICAgRWxlbWVu
dCogZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kaW5nUm9v
dEVkaXRhYmxlRWxlbWVudC5nZXQoKTsgfQotICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1NpbXBs
ZUVkaXRDb21tYW5kKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNDb21wb3NpdGVFZGl0Q29tbWFuZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBib29sIGlzRWRpdENvbW1hbmRDb21wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdmlydHVhbCBib29sIGlzVHlwaW5nQ29tbWFuZCgpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3Q7Ci0KICAgICBib29sIGlzVG9w
TGV2ZWxDb21tYW5kKCkgY29uc3QgeyByZXR1cm4gIW1fcGFyZW50OyB9CiAKLSAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoYm9vbCk7
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFN0b3BDYXJldEJsaW5raW5nKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLQogcHJvdGVjdGVkOgogICAgIEVkaXRDb21tYW5kKERvY3VtZW50Kik7CiAg
ICAgRWRpdENvbW1hbmQoRG9jdW1lbnQqLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYpOwpAQCAtNzcsMTAgKzY2LDggQEAgcHJvdGVjdGVkOgogICAgIERv
Y3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7IH0KICAg
ICBDb21wb3NpdGVFZGl0Q29tbWFuZCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7
IH0KIAotICAgIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYpOwotICAgIHZvaWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
KTsKLQotICAgIHZvaWQgdXBkYXRlTGF5b3V0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNl
dFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAogcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpID0gMDsKQEAgLTkwLDggKzc3LDYgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBtX3N0YXJ0aW5nU2VsZWN0aW9uOwogICAgIFZpc2libGVTZWxlY3Rpb24gbV9lbmRp
bmdTZWxlY3Rpb247Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fc3RhcnRpbmdSb290RWRpdGFibGVF
bGVtZW50OwotICAgIFJlZlB0cjxFbGVtZW50PiBtX2VuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQ7
CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIG1fcGFyZW50OwogCiAgICAgZnJpZW5kIHZvaWQg
YXBwbHlDb21tYW5kKFBhc3NSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDEwMjczMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU0LDEwICs4NTQsOCBA
QCB2b2lkIEVkaXRvcjo6b3V0ZGVudCgpCiAgICAgYXBwbHlDb21tYW5kKEluZGVudE91dGRlbnRD
b21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgSW5kZW50T3V0ZGVudENvbW1hbmQ6
Ok91dGRlbnQpKTsKIH0KIAotc3RhdGljIHZvaWQgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFu
Z2VkRXZlbnRzKGNvbnN0IEVkaXRDb21tYW5kJiBjb21tYW5kKQorc3RhdGljIHZvaWQgZGlzcGF0
Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKEVsZW1lbnQqIHN0YXJ0Um9vdCwgRWxlbWVu
dCogZW5kUm9vdCkKIHsKLSAgICBFbGVtZW50KiBzdGFydFJvb3QgPSBjb21tYW5kLnN0YXJ0aW5n
Um9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIEVsZW1lbnQqIGVuZFJvb3QgPSBjb21tYW5kLmVu
ZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgIGlm
IChzdGFydFJvb3QpCiAgICAgICAgIHN0YXJ0Um9vdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNl
LCBmYWxzZSksIGVjKTsKQEAgLTg2OSw3ICs4NjcsOSBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVk
aXRpbmcoUGFzc1JlZlB0cjxDCiB7CiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5
b3V0KCk7CiAKLSAgICBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoKmNtZCk7
CisgICAgQVNTRVJUKGNtZC0+Y29tcG9zaXRpb24oKSk7CisgICAgRWRpdENvbW1hbmRDb21wb3Np
dGlvbiogY29tcG9zaXRpb24gPSBjbWQtPmNvbXBvc2l0aW9uKCk7CisgICAgZGlzcGF0Y2hFZGl0
YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKGNvbXBvc2l0aW9uLT5zdGFydGluZ1Jvb3RFZGl0YWJs
ZUVsZW1lbnQoKSwgY29tcG9zaXRpb24tPmVuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oY21kLT5lbmRpbmdTZWxlY3Rpb24oKSk7
CiAKICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9BcHBsaWVkRWRpdGluZyhjbWQu
Z2V0KCkpOwpAQCAtODk4LDcgKzg5OCw3IEBAIHZvaWQgRWRpdG9yOjp1bmFwcGxpZWRFZGl0aW5n
KFBhc3NSZWZQdHIKIHsKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsK
ICAgICAKLSAgICBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoKmNtZCk7Cisg
ICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKGNtZC0+c3RhcnRpbmdSb290
RWRpdGFibGVFbGVtZW50KCksIGNtZC0+ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKICAg
ICAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQtPnN0YXJ0aW5nU2VsZWN0
aW9uKCkpOwogICAgIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIHRy
dWUsIHRydWUpOwpAQCAtOTE0LDcgKzkxNCw3IEBAIHZvaWQgRWRpdG9yOjpyZWFwcGxpZWRFZGl0
aW5nKFBhc3NSZWZQdHIKIHsKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQo
KTsKICAgICAKLSAgICBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoKmNtZCk7
CisgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKGNtZC0+c3RhcnRpbmdS
b290RWRpdGFibGVFbGVtZW50KCksIGNtZC0+ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpKTsK
ICAgICAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQtPmVuZGluZ1NlbGVj
dGlvbigpKTsKICAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCB0
cnVlLCB0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMTAyNzMw
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
OTEsNyArOTEsNyBAQCBwdWJsaWM6CiAKICAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lOyB9CiAgICAgRGVsZXRlQnV0dG9uQ29udHJvbGxlciogZGVsZXRlQnV0dG9uQ29u
dHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlQnV0dG9uQ29udHJvbGxlci5nZXQoKTsg
fQotICAgIEVkaXRDb21tYW5kKiBsYXN0RWRpdENvbW1hbmQoKSB7IHJldHVybiBtX2xhc3RFZGl0
Q29tbWFuZC5nZXQoKTsgfQorICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kKiBsYXN0RWRpdENvbW1h
bmQoKSB7IHJldHVybiBtX2xhc3RFZGl0Q29tbWFuZC5nZXQoKTsgfQogCiAgICAgdm9pZCBoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKICAgICB2b2lkIGhhbmRsZUlucHV0TWV0
aG9kS2V5ZG93bihLZXlib2FyZEV2ZW50Kik7CkBAIC0zODUsNyArMzg1LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBGcmFtZSogbV9mcmFtZTsKICAgICBPd25QdHI8RGVsZXRlQnV0dG9uQ29u
dHJvbGxlcj4gbV9kZWxldGVCdXR0b25Db250cm9sbGVyOwotICAgIFJlZlB0cjxFZGl0Q29tbWFu
ZD4gbV9sYXN0RWRpdENvbW1hbmQ7CisgICAgUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBt
X2xhc3RFZGl0Q29tbWFuZDsKICAgICBSZWZQdHI8Tm9kZT4gbV9yZW1vdmVkQW5jaG9yOwogICAg
IFJlZlB0cjxUZXh0PiBtX2NvbXBvc2l0aW9uTm9kZTsKICAgICB1bnNpZ25lZCBtX2NvbXBvc2l0
aW9uU3RhcnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAkocmV2aXNpb24gMTAyNzMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NTcsNyArMTY1Nyw3IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UoKQogICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1f
ZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+Y2FyZXRCcm93c2luZ0Vu
YWJsZWQoKTsKICAgICBib29sIHNob3VsZEJsaW5rID0gY2FyZXRJc1Zpc2libGUoKSAmJiBpc0Nh
cmV0KCkgJiYgKGlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZyk7CiAgICAgCi0g
ICAgRWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCA9IG1fZnJhbWUgPyBtX2ZyYW1lLT5lZGl0
b3IoKS0+bGFzdEVkaXRDb21tYW5kKCkgOiAwOworICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kKiBs
YXN0RWRpdENvbW1hbmQgPSBtX2ZyYW1lID8gbV9mcmFtZS0+ZWRpdG9yKCktPmxhc3RFZGl0Q29t
bWFuZCgpIDogMDsKICAgICBib29sIHNob3VsZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFu
ZCA9IGxhc3RFZGl0Q29tbWFuZCAmJiBsYXN0RWRpdENvbW1hbmQtPnNob3VsZFN0b3BDYXJldEJs
aW5raW5nKCk7CiAKICAgICAvLyBJZiB0aGUgY2FyZXQgbW92ZWQsIHN0b3AgdGhlIGJsaW5rIHRp
bWVyIHNvIHdlIGNhbiByZXN0YXJ0IHdpdGggYQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDEwMjczMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjEsOCArMTYxLDggQEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVu
dFBhcmFncgogICAgICAgICAgICAgICAgICAgICBzcGxpdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KHNwbGl0UG9pbnRQYXJlbnQpLCBzcGxpdFBvaW50KTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgdXBkYXRlTGF5b3V0KCk7CisKKyAgICAgICAgZG9j
dW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgICAg
IHZpc2libGVTdGFydE9mUGFyYWdyYXBoID0gVmlzaWJsZVBvc2l0aW9uKHZpc2libGVTdGFydE9m
UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkpOwogICAgICAgICB2aXNpYmxlRW5kT2ZQYXJhZ3Jh
cGggPSBWaXNpYmxlUG9zaXRpb24odmlzaWJsZUVuZE9mUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50
KCkpOwogICAgICAgICBpZiAodmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGguaXNOb3ROdWxsKCkgJiYg
IWlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaCkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAJKHJl
dmlzaW9uIDEwMjczMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFr
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEluc2Vy
dExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBQb3NpdGlvbiBlbmRpbmdQb3Np
dGlvbiA9IGZpcnN0UG9zaXRpb25Jbk5vZGUodGV4dE5vZGUpOwogICAgICAgICAKICAgICAgICAg
Ly8gSGFuZGxlIHdoaXRlc3BhY2UgdGhhdCBvY2N1cnMgYWZ0ZXIgdGhlIHNwbGl0Ci0gICAgICAg
IHVwZGF0ZUxheW91dCgpOworICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICAgICAgaWYgKCFlbmRpbmdQb3NpdGlvbi5pc1JlbmRl
cmVkQ2hhcmFjdGVyKCkpIHsKICAgICAgICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlVGV4
dE5vZGUocG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUodGV4dE5vZGUpKTsKICAgICAgICAgICAg
IC8vIENsZWFyIG91dCBhbGwgd2hpdGVzcGFjZSBhbmQgaW5zZXJ0IG9uZSBub24tYnJlYWtpbmcg
c3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gMTAyNzMwKQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yQ29tbWFuZDo6ZG8KICAgICBlbHNlCiAgICAgICAgIGluc2VydE5vZGVBZnRlcihibG9j
a1RvSW5zZXJ0LmdldCgpLCBzdGFydEJsb2NrKTsKIAotICAgIHVwZGF0ZUxheW91dCgpOworICAg
IGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAg
ICAgLy8gSWYgdGhlIHBhcmFncmFwaCBzZXBhcmF0b3Igd2FzIGluc2VydGVkIGF0IHRoZSBlbmQg
b2YgYSBwYXJhZ3JhcGgsIGFuIGVtcHR5IGxpbmUgbXVzdCBiZQogICAgIC8vIGNyZWF0ZWQuICBB
bGwgb2YgdGhlIG5vZGVzLCBzdGFydGluZyBhdCB2aXNpYmxlUG9zLCBhcmUgYWJvdXQgdG8gYmUg
YWRkZWQgdG8gdGhlIG5ldyBwYXJhZ3JhcGggCkBAIC0zODQsNyArMzg0LDcgQEAgdm9pZCBJbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogCiAgICAgLy8gSGFuZGxlIHdoaXRlc3Bh
Y2UgdGhhdCBvY2N1cnMgYWZ0ZXIgdGhlIHNwbGl0CiAgICAgaWYgKHNwbGl0VGV4dCkgewotICAg
ICAgICB1cGRhdGVMYXlvdXQoKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5h
bmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKICAgICAg
ICAgICAgIGluc2VydGlvblBvc2l0aW9uLm1vdmVUb09mZnNldCgwKTsKICAgICAgICAgaWYgKCFp
bnNlcnRpb25Qb3NpdGlvbi5pc1JlbmRlcmVkQ2hhcmFjdGVyKCkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkocmV2aXNpb24gMTAyNzMwKQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQwLDcgKzI0MCw3IEBAIFR5cGluZ0NvbW1hbmQqIFR5cGluZ0NvbW1hbmQ6Omxhc3RUeXBpbmcK
IHsKICAgICBBU1NFUlQoZnJhbWUpOwogCi0gICAgRWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFu
ZCA9IGZyYW1lLT5lZGl0b3IoKS0+bGFzdEVkaXRDb21tYW5kKCk7CisgICAgQ29tcG9zaXRlRWRp
dENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+bGFzdEVkaXRDb21t
YW5kKCk7CiAgICAgaWYgKCFsYXN0RWRpdENvbW1hbmQgfHwgIWxhc3RFZGl0Q29tbWFuZC0+aXNU
eXBpbmdDb21tYW5kKCkgfHwgIXN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENv
bW1hbmQpLT5pc09wZW5Gb3JNb3JlVHlwaW5nKCkpCiAgICAgICAgIHJldHVybiAwOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAkocmV2aXNpb24gMTAyNzMwKQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMSw3ICsxMDEsMTEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRp
dGluZ0FjdGlvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1R5cGluZ0NvbW1hbmQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVzVHlwaW5nU3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3ByZXNlcnZlc1R5cGluZ1N0eWxlOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFJl
dGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRSZXRh
aW5BdXRvY29ycmVjdGlvbkluZGljYXRvcjsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXRh
aW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aXNUb3BMZXZlbENvbW1hbmQoKSk7CisgICAgICAgIHJldHVybiBtX3Nob3VsZFJldGFpbkF1dG9j
b3JyZWN0aW9uSW5kaWNhdG9yOworICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUmV0
YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoYm9vbCByZXRhaW4pIHsgbV9zaG91bGRSZXRhaW5B
dXRvY29ycmVjdGlvbkluZGljYXRvciA9IHJldGFpbjsgfQogICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRTdG9wQ2FyZXRCbGlua2luZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2b2lkIHNl
dFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKGJvb2wgcHJldmVudCkgeyBtX3Nob3VsZFByZXZl
bnRTcGVsbENoZWNraW5nID0gcHJldmVudDsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119282</attachid>
            <date>2011-12-14 13:12:39 -0800</date>
            <delta_ts>2011-12-14 13:30:22 -0800</delta_ts>
            <desc>Fixed per Enrica&apos;s comment</desc>
            <filename>bug-74249-20111214131238.patch</filename>
            <type>text/plain</type>
            <size>28837</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjc0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDExLTEyLTE0ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFB1c2ggbW9yZSBtZW1iZXIgZnVu
Y3Rpb25zIGZyb20gRWRpdENvbW1hbmQgdG8gQ29tcG9zaXRlRWRpdENvbW1hbmQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MjQ5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgc3RhcnRpbmdSb290
RWRpdGFibGVFbGVtZW50IGFuZCBlbmRpbmdSb290RWRpdGFibGVFbGVtZW50IGZyb20gRWRpdENv
bW1hbmQgdG8gRWRpdENvbW1hbmRDb21wb3NpdGlvbiwKKyAgICAgICAgYW5kIGlzVHlwaW5nQ29t
bWFuZCwgcHJlc2VydmVzVHlwaW5nU3R5bGUsIHNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5k
aWNhdG9yLAorICAgICAgICBzZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciwg
YW5kIHNob3VsZFN0b3BDYXJldEJsaW5raW5nIGZyb20gRWRpdENvbW1hbmQgdG8gQ29tcG9zaXRl
RWRpdENvbW1hbmQuCisgICAgICAgIEFsc28gcmVtb3ZlZCBFZGl0Q29tbWFuZDo6dXBkYXRlTGF5
b3V0KCkuCisKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OmRvQXBwbHkpOgor
ICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZSk6CisgICAgICAgICogZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnNldFN0YXJ0aW5nU2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OnNldEVuZGluZ1NlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJlc2VydmVzVHlwaW5nU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzVHlwaW5nQ29t
bWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2hvdWxkUmV0
YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
RWRpdENvbW1hbmQ6OnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjphZGRCbG9ja1BsYWNlaG9sZGVy
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhDb250ZW50c1RvTmV3QmxvY2tJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOgorICAgICAgICAqIGVkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5k
Q29tcG9zaXRpb246OnN0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjplbmRpbmdSb290RWRpdGFibGVFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpzaG91bGRTdG9wQ2FyZXRC
bGlua2luZyk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Zml4dXBXaGl0ZXNwYWNl
KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRDb21tYW5kOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6dW5h
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6cmVhcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6c2V0U3RhcnRpbmdTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdENvbW1hbmQ6OnNldEVuZGluZ1NlbGVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0Q29tbWFuZDo6c2V0UGFyZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21t
YW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6aXNFZGl0Q29tbWFuZENvbXBv
c2l0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjphcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnVu
YXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFwcGxpZWRFZGl0
aW5nKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpsYXN0RWRpdENvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2Up
OgorICAgICAgICAqIGVkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3JhcGgpOgorICAgICAg
ICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0lu
c2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGlu
Zy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omxh
c3RUeXBpbmdDb21tYW5kSWZTdGlsbE9wZW5Gb3JUeXBpbmcpOgorICAgICAgICAqIGVkaXRpbmcv
VHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6c2hvdWxk
UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpOgorCiAyMDExLTEyLTEzICBIYWppbWUgTW9y
cml0YSAgPG1vcnJpdGFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYXR0ZW1w
dCBmb3IgZml4aW5nIHdpbmRvd3MgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDI3MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDggKzg3LDggQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENv
bW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgZm9ybWF0U2VsZWN0aW9uKHN0YXJ0T2ZTZWxlY3Rpb24s
IGVuZE9mU2VsZWN0aW9uKTsKIAotICAgIHVwZGF0ZUxheW91dCgpOwotICAgIAorICAgIGRvY3Vt
ZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCiAgICAgQVNT
RVJUKHN0YXJ0U2NvcGUgPT0gZW5kU2NvcGUpOwogICAgIEFTU0VSVChzdGFydEluZGV4ID49IDAp
OwogICAgIEFTU0VSVChzdGFydEluZGV4IDw9IGVuZEluZGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDI3MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5Qmxv
Y2tTdHlsZSgKICAgICAvLyB1cGRhdGUgZG9jdW1lbnQgbGF5b3V0IG9uY2UgYmVmb3JlIHJlbW92
aW5nIHN0eWxlcwogICAgIC8vIHNvIHRoYXQgd2UgYXZvaWQgdGhlIGV4cGVuc2Ugb2YgdXBkYXRp
bmcgYmVmb3JlIGVhY2ggYW5kIGV2ZXJ5IGNhbGwKICAgICAvLyB0byBjaGVjayBhIGNvbXB1dGVk
IHN0eWxlCi0gICAgdXBkYXRlTGF5b3V0KCk7CisgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICAvLyBnZXQgcG9zaXRpb25zIHdlIHdh
bnQgdG8gdXNlIGZvciBhcHBseWluZyBzdHlsZQogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc3RhcnRQ
b3NpdGlvbigpOwpAQCAtNTQwLDcgKzU0MCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFw
cGx5SW5saW5lU3R5bGUKICAgICAvLyB1cGRhdGUgZG9jdW1lbnQgbGF5b3V0IG9uY2UgYmVmb3Jl
IHJlbW92aW5nIHN0eWxlcwogICAgIC8vIHNvIHRoYXQgd2UgYXZvaWQgdGhlIGV4cGVuc2Ugb2Yg
dXBkYXRpbmcgYmVmb3JlIGVhY2ggYW5kIGV2ZXJ5IGNhbGwKICAgICAvLyB0byBjaGVjayBhIGNv
bXB1dGVkIHN0eWxlCi0gICAgdXBkYXRlTGF5b3V0KCk7CisgICAgZG9jdW1lbnQoKS0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICAvLyBhZGp1c3QgdG8gdGhl
IHBvc2l0aW9ucyB3ZSB3YW50IHRvIHVzZSBmb3IgYXBwbHlpbmcgc3R5bGUKICAgICBQb3NpdGlv
biBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKQEAgLTYzMCw3ICs2MzAsNyBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgLy8gdXBkYXRlIGRvY3VtZW50IGxh
eW91dCBvbmNlIGJlZm9yZSBydW5uaW5nIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbgogICAgIC8v
IHNvIHRoYXQgd2UgYXZvaWQgdGhlIGV4cGVuc2Ugb2YgdXBkYXRpbmcgYmVmb3JlIGVhY2ggYW5k
IGV2ZXJ5IGNhbGwKICAgICAvLyB0byBjaGVjayBhIGNvbXB1dGVkIHN0eWxlCi0gICAgdXBkYXRl
TGF5b3V0KCk7CisgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZVRvQXBwbHkgPSBzdHls
ZTsKICAgICBpZiAoaGFzVGV4dERpcmVjdGlvbikgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDEwMjczMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OCw2ICs3OCw4IEBAIFBhc3NSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlv
bj4gRWRpdEMKIAogRWRpdENvbW1hbmRDb21wb3NpdGlvbjo6RWRpdENvbW1hbmRDb21wb3NpdGlv
bihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHN0YXJ0aW5nU2Vs
ZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24sIGJvb2wgd2Fz
Q3JlYXRlTGlua0NvbW1hbmQpCiAgICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCwgc3RhcnRpbmdT
ZWxlY3Rpb24sIGVuZGluZ1NlbGVjdGlvbikKKyAgICAsIG1fc3RhcnRpbmdSb290RWRpdGFibGVF
bGVtZW50KHN0YXJ0aW5nU2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAsIG1f
ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudChlbmRpbmdTZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxl
bWVudCgpKQogICAgICwgbV93YXNDcmVhdGVMaW5rQ29tbWFuZCh3YXNDcmVhdGVMaW5rQ29tbWFu
ZCkKIHsKIH0KQEAgLTEwNiw2ICsxMDgsMTggQEAgdm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9u
OjphcHBlbmQoU2ltcAogICAgIG1fY29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpOwogfQogCit2b2lk
IEVkaXRDb21tYW5kQ29tcG9zaXRpb246OnNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBFZGl0Q29tbWFuZDo6c2V0U3RhcnRpbmdT
ZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICBtX3N0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudCA9
IHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7Cit9CisKK3ZvaWQgRWRpdENvbW1hbmRD
b21wb3NpdGlvbjo6c2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKK3sKKyAgICBFZGl0Q29tbWFuZDo6c2V0RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlv
bik7CisgICAgbV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50ID0gc2VsZWN0aW9uLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKK30KKwogI2lmbmRlZiBOREVCVUcKIHZvaWQgRWRpdENvbW1hbmRDb21w
b3NpdGlvbjo6Z2V0Tm9kZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mIG5vZGVzKQogewpAQCAt
MTUwLDYgKzE2NCwyNSBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppc0NyZWF0ZUxpbmtD
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcmVz
ZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjppc1R5cGluZ0NvbW1hbmQoKSBjb25zdAoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2hvdWxkUmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rp
b25JbmRpY2F0b3IoYm9vbCkKK3sKK30KKwogLy8KIC8vIHN1Z2FyeS1zd2VldCBjb252ZW5pZW5j
ZSBmdW5jdGlvbnMgdG8gaGVscCBjcmVhdGUgYW5kIGFwcGx5IGVkaXQgY29tbWFuZHMgaW4gY29t
cG9zaXRlIGNvbW1hbmRzCiAvLwpAQCAtNzI4LDcgKzc2MSw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4g
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmEKICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICB1cGRhdGVMYXlvdXQoKTsKKyAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBjb250YWluZXItPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVy
ZXItPmlzQmxvY2tGbG93KCkpCkBAIC03NzMsNyArODA2LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6bQogICAgIGlmIChwb3MuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIAotICAgIHVwZGF0ZUxheW91dCgpOworICAgIGRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIAogICAgIC8vIEl0J3Mgc3Ry
YW5nZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHZlcmlmeWluZyB0aGF0
IHBvcyBoYXMgbm90IGJlZW4gaW52YWxpZGF0ZWQKICAgICAvLyBieSBhbiBlYXJsaWVyIGNhbGwg
dG8gdGhpcyBmdW5jdGlvbi4gIFRoZSBjYWxsZXIsIGFwcGx5QmxvY2tTdHlsZSwgc2hvdWxkIGRv
IHRoaXMuCkBAIC0xMDgzLDcgKzExMTYsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBoCiAgICAgICAgIC8vIEZJWE1FOiBUcmltIHRleHQgYmV0d2VlbiBiZWZvcmVQ
YXJhZ3JhcGggYW5kIGFmdGVyUGFyYWdyYXBoIGlmIHRoZXkgYXJlbid0IGVxdWFsLgogICAgICAg
ICBpbnNlcnROb2RlQXQoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpLCBiZWZvcmVQYXJh
Z3JhcGguZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgICAgIC8vIE5lZWQgYW4gdXBkYXRlTGF5b3V0
IGhlcmUgaW4gY2FzZSBpbnNlcnRpbmcgdGhlIGJyIGhhcyBzcGxpdCBhIHRleHQgbm9kZS4KLSAg
ICAgICAgdXBkYXRlTGF5b3V0KCk7CisgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIH0KIAogICAgIFJlZlB0cjxSYW5nZT4gc3Rh
cnRUb0Rlc3RpbmF0aW9uUmFuZ2UoUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBmaXJzdFBvc2l0
aW9uSW5Ob2RlKGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSwgZGVzdGluYXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAkocmV2aXNpb24gMTAy
NzMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZChT
aW1wbGVFZGl0Q29tbWFuZCopOwogICAgIGJvb2wgd2FzQ3JlYXRlTGlua0NvbW1hbmQoKSBjb25z
dCB7IHJldHVybiBtX3dhc0NyZWF0ZUxpbmtDb21tYW5kOyB9CiAKKyAgICBFbGVtZW50KiBzdGFy
dGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0aW5nUm9vdEVk
aXRhYmxlRWxlbWVudC5nZXQoKTsgfQorICAgIEVsZW1lbnQqIGVuZGluZ1Jvb3RFZGl0YWJsZUVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQuZ2V0KCk7
IH0KKwogI2lmbmRlZiBOREVCVUcKICAgICB2aXJ0dWFsIHZvaWQgZ2V0Tm9kZXNJbkNvbW1hbmQo
SGFzaFNldDxOb2RlKj4mKTsKICNlbmRpZgpAQCAtNTQsOCArNTcsMTIgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBFZGl0Q29tbWFuZENvbXBvc2l0aW9uKERvY3VtZW50KiwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVu
ZGluZ1NlbGVjdGlvbiwgYm9vbCB3YXNDcmVhdGVMaW5rQ29tbWFuZCk7CiAgICAgdmlydHVhbCBi
b29sIGlzRWRpdENvbW1hbmRDb21wb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmRpbmdTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIE9WRVJSSURFOwogCiAgICAgVmVjdG9yPFJlZlB0
cjxTaW1wbGVFZGl0Q29tbWFuZD4gPiBtX2NvbW1hbmRzOworICAgIFJlZlB0cjxFbGVtZW50PiBt
X3N0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudDsKKyAgICBSZWZQdHI8RWxlbWVudD4gbV9lbmRp
bmdSb290RWRpdGFibGVFbGVtZW50OwogICAgIGJvb2wgbV93YXNDcmVhdGVMaW5rQ29tbWFuZDsK
IH07CiAKQEAgLTY4LDYgKzc1LDExIEBAIHB1YmxpYzoKICAgICBFZGl0Q29tbWFuZENvbXBvc2l0
aW9uKiBlbnN1cmVDb21wb3NpdGlvbigpOwogCiAgICAgdmlydHVhbCBib29sIGlzQ3JlYXRlTGlu
a0NvbW1hbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBpbmdDb21tYW5kKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIHNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9y
KGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdG9wQ2FyZXRCbGlua2luZygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb21wb3NpdGVF
ZGl0Q29tbWFuZChEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDI3MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjEsNyArMzYxLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1v
dmVOb2RlKAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBNYWtlIHN1cmUgZW1wdHkg
Y2VsbCBoYXMgc29tZSBoZWlnaHQsIGlmIGEgcGxhY2Vob2xkZXIgY2FuIGJlIGluc2VydGVkLgot
ICAgICAgICB1cGRhdGVMYXlvdXQoKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgICAgIFJlbmRlck9iamVjdCAqciA9IG5v
ZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmIChyICYmIHItPmlzVGFibGVDZWxsKCkgJiYgdG9S
ZW5kZXJUYWJsZUNlbGwociktPmNvbnRlbnRIZWlnaHQoKSA8PSAwKSB7CiAgICAgICAgICAgICBQ
b3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9zaXRpb24gPSBmaXJzdEVkaXRhYmxlUG9zaXRpb25Jbk5v
ZGUobm9kZS5nZXQoKSk7CkBAIC01MjgsNyArNTI4LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpoYW5kbGVHZW5lcgogCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmZpeHVw
V2hpdGVzcGFjZSgpCiB7Ci0gICAgdXBkYXRlTGF5b3V0KCk7CisgICAgZG9jdW1lbnQoKS0+dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgLy8gRklYTUU6IGlzUmVu
ZGVyZWRDaGFyYWN0ZXIgc2hvdWxkIGJlIHJlbW92ZWQsIGFuZCB3ZSBzaG91bGQgdXNlIFZpc2li
bGVQb3NpdGlvbjo6Y2hhcmFjdGVyQWZ0ZXIgYW5kIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVy
QmVmb3JlCiAgICAgaWYgKG1fbGVhZGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgIW1fbGVh
ZGluZ1doaXRlc3BhY2UuaXNSZW5kZXJlZENoYXJhY3RlcigpICYmIG1fbGVhZGluZ1doaXRlc3Bh
Y2UuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIFRleHQqIHRleHRO
b2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG1fbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5v
ZGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAkocmV2aXNp
b24gMTAyNzMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBFZGl0Q29tbWFuZDo6YXBwbHkoKQog
ICAgIC8vIFJlbW92ZU5vZGVDb21tYW5kLCBkb24ndCByZXF1aXJlIGEgbGF5b3V0IGJlY2F1c2Ug
dGhlIGhpZ2ggbGV2ZWwgb3BlcmF0aW9ucyB0aGF0IAogICAgIC8vIHVzZSB0aGVtIHBlcmZvcm0g
b25lIGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVhdGlvbiBvZiBWaXNpYmxl
UG9zaXRpb25zKS4KICAgICBpZiAoaXNUb3BMZXZlbENvbW1hbmQoKSkKLSAgICAgICAgdXBkYXRl
TGF5b3V0KCk7CisgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOwogCiAgICAgewogICAgICAgICBFdmVudFF1ZXVlU2NvcGUgc2NvcGU7CkBA
IC0xMDcsMTMgKzEwNywxMyBAQCB2b2lkIEVkaXRDb21tYW5kOjphcHBseSgpCiAKICAgICBpZiAo
aXNUb3BMZXZlbENvbW1hbmQoKSkgewogICAgICAgICBBU1NFUlQoaXNDb21wb3NpdGVFZGl0Q29t
bWFuZCgpKTsKKyAgICAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQgPSB0b0NvbXBv
c2l0ZUVkaXRDb21tYW5kKHRoaXMpOwogICAgICAgICAvLyBPbmx5IG5lZWQgdG8gY2FsbCBhcHBs
aWVkRWRpdGluZyBmb3IgdG9wLWxldmVsIGNvbW1hbmRzLCBhbmQgVHlwaW5nQ29tbWFuZHMgZG8g
aXQgb24gdGhlaXIKICAgICAgICAgLy8gb3duIChzZWUgVHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRk
ZWRUb09wZW5Db21tYW5kKS4KLSAgICAgICAgaWYgKCFpc1R5cGluZ0NvbW1hbmQoKSkKLSAgICAg
ICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+YXBwbGllZEVkaXRpbmcodG9Db21wb3NpdGVFZGl0Q29t
bWFuZCh0aGlzKSk7CisgICAgICAgIGlmICghY29tbWFuZC0+aXNUeXBpbmdDb21tYW5kKCkpCisg
ICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGxpZWRFZGl0aW5nKGNvbW1hbmQpOworICAg
ICAgICBjb21tYW5kLT5zZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihmYWxz
ZSk7CiAgICAgfQotCi0gICAgc2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Io
ZmFsc2UpOwogfQogCiB2b2lkIEVkaXRDb21tYW5kOjp1bmFwcGx5KCkKQEAgLTEyOCw3ICsxMjgs
NyBAQCB2b2lkIEVkaXRDb21tYW5kOjp1bmFwcGx5KCkKICAgICAvLyBSZW1vdmVOb2RlQ29tbWFu
ZCwgZG9uJ3QgcmVxdWlyZSBhIGxheW91dCBiZWNhdXNlIHRoZSBoaWdoIGxldmVsIG9wZXJhdGlv
bnMgdGhhdCAKICAgICAvLyB1c2UgdGhlbSBwZXJmb3JtIG9uZSBpZiBvbmUgaXMgbmVjZXNzYXJ5
IChsaWtlIGZvciB0aGUgY3JlYXRpb24gb2YgVmlzaWJsZVBvc2l0aW9ucykuCiAgICAgaWYgKGlz
VG9wTGV2ZWxDb21tYW5kKCkpCi0gICAgICAgIHVwZGF0ZUxheW91dCgpOworICAgICAgICBkb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICAKICAg
ICBEZWxldGVCdXR0b25Db250cm9sbGVyKiBkZWxldGVCdXR0b25Db250cm9sbGVyID0gZnJhbWUt
PmVkaXRvcigpLT5kZWxldGVCdXR0b25Db250cm9sbGVyKCk7CiAgICAgZGVsZXRlQnV0dG9uQ29u
dHJvbGxlci0+ZGlzYWJsZSgpOwpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgRWRpdENvbW1hbmQ6
OnJlYXBwbHkoKQogICAgIC8vIFJlbW92ZU5vZGVDb21tYW5kLCBkb24ndCByZXF1aXJlIGEgbGF5
b3V0IGJlY2F1c2UgdGhlIGhpZ2ggbGV2ZWwgb3BlcmF0aW9ucyB0aGF0IAogICAgIC8vIHVzZSB0
aGVtIHBlcmZvcm0gb25lIGlmIG9uZSBpcyBuZWNlc3NhcnkgKGxpa2UgZm9yIHRoZSBjcmVhdGlv
biBvZiBWaXNpYmxlUG9zaXRpb25zKS4KICAgICBpZiAoaXNUb3BMZXZlbENvbW1hbmQoKSkKLSAg
ICAgICAgdXBkYXRlTGF5b3V0KCk7CisgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAgRGVsZXRlQnV0dG9uQ29udHJvbGxlciog
ZGVsZXRlQnV0dG9uQ29udHJvbGxlciA9IGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlQnV0dG9uQ29u
dHJvbGxlcigpOwogICAgIGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPmRpc2FibGUoKTsKQEAgLTE4
MSwxNSArMTgxLDEyIEBAIHN0YXRpYyBpbmxpbmUgRWRpdENvbW1hbmRDb21wb3NpdGlvbiogY28K
IAogdm9pZCBFZGl0Q29tbWFuZDo6c2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgcykKIHsKLSAgICBFbGVtZW50KiByb290ID0gcy5yb290RWRpdGFibGVFbGVtZW50
KCk7CiAgICAgZm9yIChFZGl0Q29tbWFuZCogY21kID0gdGhpczsgOyBjbWQgPSBjbWQtPm1fcGFy
ZW50KSB7CiAgICAgICAgIGlmIChFZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBjb21wb3NpdGlvbiA9
IGNvbXBvc2l0aW9uSWZQb3NzaWJsZShjbWQpKSB7CiAgICAgICAgICAgICBBU1NFUlQoY21kLT5p
c1RvcExldmVsQ29tbWFuZCgpKTsKLSAgICAgICAgICAgIGNvbXBvc2l0aW9uLT5tX3N0YXJ0aW5n
U2VsZWN0aW9uID0gczsKLSAgICAgICAgICAgIGNvbXBvc2l0aW9uLT5tX3N0YXJ0aW5nUm9vdEVk
aXRhYmxlRWxlbWVudCA9IHJvb3Q7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxFZGl0Q29tbWFu
ZCo+KGNvbXBvc2l0aW9uKS0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ocyk7CiAgICAgICAgIH0KICAg
ICAgICAgY21kLT5tX3N0YXJ0aW5nU2VsZWN0aW9uID0gczsKLSAgICAgICAgY21kLT5tX3N0YXJ0
aW5nUm9vdEVkaXRhYmxlRWxlbWVudCA9IHJvb3Q7CiAgICAgICAgIGlmICghY21kLT5tX3BhcmVu
dCB8fCBjbWQtPm1fcGFyZW50LT5pc0ZpcnN0Q29tbWFuZChjbWQpKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMTk3LDQyICsxOTQsMTUgQEAgdm9pZCBFZGl0Q29tbWFuZDo6c2V0U3Rh
cnRpbmdTZWxlY3Rpb24oYwogCiB2b2lkIEVkaXRDb21tYW5kOjpzZXRFbmRpbmdTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmcykKIHsKLSAgICBFbGVtZW50KiByb290ID0gcy5yb290
RWRpdGFibGVFbGVtZW50KCk7CiAgICAgZm9yIChFZGl0Q29tbWFuZCogY21kID0gdGhpczsgY21k
OyBjbWQgPSBjbWQtPm1fcGFyZW50KSB7CiAgICAgICAgIGlmIChFZGl0Q29tbWFuZENvbXBvc2l0
aW9uKiBjb21wb3NpdGlvbiA9IGNvbXBvc2l0aW9uSWZQb3NzaWJsZShjbWQpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoY21kLT5pc1RvcExldmVsQ29tbWFuZCgpKTsKLSAgICAgICAgICAgIGNvbXBv
c2l0aW9uLT5tX2VuZGluZ1NlbGVjdGlvbiA9IHM7Ci0gICAgICAgICAgICBjb21wb3NpdGlvbi0+
bV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50ID0gcm9vdDsKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEVkaXRDb21tYW5kKj4oY29tcG9zaXRpb24pLT5zZXRFbmRpbmdTZWxlY3Rpb24ocyk7CiAg
ICAgICAgIH0KICAgICAgICAgY21kLT5tX2VuZGluZ1NlbGVjdGlvbiA9IHM7Ci0gICAgICAgIGNt
ZC0+bV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50ID0gcm9vdDsKICAgICB9CiB9CiAKLWJvb2wg
RWRpdENvbW1hbmQ6OnByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgRWRpdENvbW1hbmQ6OmlzVHlwaW5nQ29tbWFuZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEVkaXRDb21tYW5kOjpzaG91bGRSZXRhaW5B
dXRvY29ycmVjdGlvbkluZGljYXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIEVkaXRDb21tYW5kOjpzZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRv
cihib29sKQotewotfQotCi12b2lkIEVkaXRDb21tYW5kOjp1cGRhdGVMYXlvdXQoKSBjb25zdAot
ewotICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OwotfQotCiB2b2lkIEVkaXRDb21tYW5kOjpzZXRQYXJlbnQoQ29tcG9zaXRlRWRpdENvbW1hbmQq
IHBhcmVudCkKIHsKICAgICBBU1NFUlQoKHBhcmVudCAmJiAhbV9wYXJlbnQpIHx8ICghcGFyZW50
ICYmIG1fcGFyZW50KSk7CkBAIC0yNDEsOCArMjExLDYgQEAgdm9pZCBFZGl0Q29tbWFuZDo6c2V0
UGFyZW50KENvbXBvc2l0ZUVkaQogICAgIGlmIChwYXJlbnQpIHsKICAgICAgICAgbV9zdGFydGlu
Z1NlbGVjdGlvbiA9IHBhcmVudC0+bV9lbmRpbmdTZWxlY3Rpb247CiAgICAgICAgIG1fZW5kaW5n
U2VsZWN0aW9uID0gcGFyZW50LT5tX2VuZGluZ1NlbGVjdGlvbjsKLSAgICAgICAgbV9zdGFydGlu
Z1Jvb3RFZGl0YWJsZUVsZW1lbnQgPSBwYXJlbnQtPm1fZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVu
dDsKLSAgICAgICAgbV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50ID0gcGFyZW50LT5tX2VuZGlu
Z1Jvb3RFZGl0YWJsZUVsZW1lbnQ7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0Q29tbWFuZC5oCShyZXZpc2lvbiAxMDI3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDIyICs1NCwxMSBAQCBwdWJs
aWM6CiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0aW5nU2VsZWN0aW9uOyB9CiAgICAgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgZW5kaW5nU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRpbmdTZWxlY3Rpb247
IH0KIAotICAgIEVsZW1lbnQqIHN0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50LmdldCgpOyB9Ci0gICAgRWxlbWVu
dCogZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kaW5nUm9v
dEVkaXRhYmxlRWxlbWVudC5nZXQoKTsgfQotICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1NpbXBs
ZUVkaXRDb21tYW5kKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNDb21wb3NpdGVFZGl0Q29tbWFuZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBib29sIGlzRWRpdENvbW1hbmRDb21wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdmlydHVhbCBib29sIGlzVHlwaW5nQ29tbWFuZCgpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3Q7Ci0KICAgICBib29sIGlzVG9w
TGV2ZWxDb21tYW5kKCkgY29uc3QgeyByZXR1cm4gIW1fcGFyZW50OyB9CiAKLSAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoYm9vbCk7
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFN0b3BDYXJldEJsaW5raW5nKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLQogcHJvdGVjdGVkOgogICAgIEVkaXRDb21tYW5kKERvY3VtZW50Kik7CiAg
ICAgRWRpdENvbW1hbmQoRG9jdW1lbnQqLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYpOwpAQCAtNzcsMTAgKzY2LDggQEAgcHJvdGVjdGVkOgogICAgIERv
Y3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7IH0KICAg
ICBDb21wb3NpdGVFZGl0Q29tbWFuZCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7
IH0KIAotICAgIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYpOwotICAgIHZvaWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
KTsKLQotICAgIHZvaWQgdXBkYXRlTGF5b3V0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNl
dFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAogcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpID0gMDsKQEAgLTkwLDggKzc3LDYgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBtX3N0YXJ0aW5nU2VsZWN0aW9uOwogICAgIFZpc2libGVTZWxlY3Rpb24gbV9lbmRp
bmdTZWxlY3Rpb247Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fc3RhcnRpbmdSb290RWRpdGFibGVF
bGVtZW50OwotICAgIFJlZlB0cjxFbGVtZW50PiBtX2VuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQ7
CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIG1fcGFyZW50OwogCiAgICAgZnJpZW5kIHZvaWQg
YXBwbHlDb21tYW5kKFBhc3NSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDEwMjczMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU0LDEwICs4NTQsOCBA
QCB2b2lkIEVkaXRvcjo6b3V0ZGVudCgpCiAgICAgYXBwbHlDb21tYW5kKEluZGVudE91dGRlbnRD
b21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgSW5kZW50T3V0ZGVudENvbW1hbmQ6
Ok91dGRlbnQpKTsKIH0KIAotc3RhdGljIHZvaWQgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFu
Z2VkRXZlbnRzKGNvbnN0IEVkaXRDb21tYW5kJiBjb21tYW5kKQorc3RhdGljIHZvaWQgZGlzcGF0
Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKEVsZW1lbnQqIHN0YXJ0Um9vdCwgRWxlbWVu
dCogZW5kUm9vdCkKIHsKLSAgICBFbGVtZW50KiBzdGFydFJvb3QgPSBjb21tYW5kLnN0YXJ0aW5n
Um9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIEVsZW1lbnQqIGVuZFJvb3QgPSBjb21tYW5kLmVu
ZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgIGlm
IChzdGFydFJvb3QpCiAgICAgICAgIHN0YXJ0Um9vdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNl
LCBmYWxzZSksIGVjKTsKQEAgLTg2OSw3ICs4NjcsOSBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVk
aXRpbmcoUGFzc1JlZlB0cjxDCiB7CiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5
b3V0KCk7CiAKLSAgICBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoKmNtZCk7
CisgICAgRWRpdENvbW1hbmRDb21wb3NpdGlvbiogY29tcG9zaXRpb24gPSBjbWQtPmNvbXBvc2l0
aW9uKCk7CisgICAgQVNTRVJUKGNvbXBvc2l0aW9uKTsKKyAgICBkaXNwYXRjaEVkaXRhYmxlQ29u
dGVudENoYW5nZWRFdmVudHMoY29tcG9zaXRpb24tPnN0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVu
dCgpLCBjb21wb3NpdGlvbi0+ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKICAgICBWaXNp
YmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQtPmVuZGluZ1NlbGVjdGlvbigpKTsKIAogICAg
IG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKGNtZC5nZXQoKSk7
CkBAIC04OTgsNyArODk4LDcgQEAgdm9pZCBFZGl0b3I6OnVuYXBwbGllZEVkaXRpbmcoUGFzc1Jl
ZlB0cgogewogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAgIAot
ICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50cygqY21kKTsKKyAgICBkaXNw
YXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoY21kLT5zdGFydGluZ1Jvb3RFZGl0YWJs
ZUVsZW1lbnQoKSwgY21kLT5lbmRpbmdSb290RWRpdGFibGVFbGVtZW50KCkpOwogICAgIAogICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+c3RhcnRpbmdTZWxlY3Rpb24oKSk7
CiAgICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1NlbGVjdGlvbiwgdHJ1ZSwgdHJ1
ZSk7CkBAIC05MTQsNyArOTE0LDcgQEAgdm9pZCBFZGl0b3I6OnJlYXBwbGllZEVkaXRpbmcoUGFz
c1JlZlB0cgogewogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAg
IAotICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50cygqY21kKTsKKyAgICBk
aXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoY21kLT5zdGFydGluZ1Jvb3RFZGl0
YWJsZUVsZW1lbnQoKSwgY21kLT5lbmRpbmdSb290RWRpdGFibGVFbGVtZW50KCkpOwogICAgIAog
ICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+ZW5kaW5nU2VsZWN0aW9uKCkp
OwogICAgIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIHRydWUsIHRy
dWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiAxMDI3MzApCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5
MSw3IEBAIHB1YmxpYzoKIAogICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJh
bWU7IH0KICAgICBEZWxldGVCdXR0b25Db250cm9sbGVyKiBkZWxldGVCdXR0b25Db250cm9sbGVy
KCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVCdXR0b25Db250cm9sbGVyLmdldCgpOyB9Ci0gICAg
RWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCgpIHsgcmV0dXJuIG1fbGFzdEVkaXRDb21tYW5k
LmdldCgpOyB9CisgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCgpIHsg
cmV0dXJuIG1fbGFzdEVkaXRDb21tYW5kLmdldCgpOyB9CiAKICAgICB2b2lkIGhhbmRsZUtleWJv
YXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOwogICAgIHZvaWQgaGFuZGxlSW5wdXRNZXRob2RLZXlk
b3duKEtleWJvYXJkRXZlbnQqKTsKQEAgLTM4NSw3ICszODUsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIE93blB0cjxEZWxldGVCdXR0b25Db250cm9sbGVy
PiBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI7Ci0gICAgUmVmUHRyPEVkaXRDb21tYW5kPiBtX2xh
c3RFZGl0Q29tbWFuZDsKKyAgICBSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IG1fbGFzdEVk
aXRDb21tYW5kOwogICAgIFJlZlB0cjxOb2RlPiBtX3JlbW92ZWRBbmNob3I7CiAgICAgUmVmUHRy
PFRleHQ+IG1fY29tcG9zaXRpb25Ob2RlOwogICAgIHVuc2lnbmVkIG1fY29tcG9zaXRpb25TdGFy
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCShyZXZp
c2lvbiAxMDI3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY1Nyw3ICsxNjU3LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+
c2V0dGluZ3MoKSAmJiBtX2ZyYW1lLT5zZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgp
OwogICAgIGJvb2wgc2hvdWxkQmxpbmsgPSBjYXJldElzVmlzaWJsZSgpICYmIGlzQ2FyZXQoKSAm
JiAoaXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKTsKICAgICAKLSAgICBFZGl0
Q29tbWFuZCogbGFzdEVkaXRDb21tYW5kID0gbV9mcmFtZSA/IG1fZnJhbWUtPmVkaXRvcigpLT5s
YXN0RWRpdENvbW1hbmQoKSA6IDA7CisgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIGxhc3RFZGl0
Q29tbWFuZCA9IG1fZnJhbWUgPyBtX2ZyYW1lLT5lZGl0b3IoKS0+bGFzdEVkaXRDb21tYW5kKCkg
OiAwOwogICAgIGJvb2wgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kID0gbGFz
dEVkaXRDb21tYW5kICYmIGxhc3RFZGl0Q29tbWFuZC0+c2hvdWxkU3RvcENhcmV0Qmxpbmtpbmco
KTsKIAogICAgIC8vIElmIHRoZSBjYXJldCBtb3ZlZCwgc3RvcCB0aGUgYmxpbmsgdGltZXIgc28g
d2UgY2FuIHJlc3RhcnQgd2l0aCBhCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVu
dE91dGRlbnRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luZGVudE91dGRlbnRDb21tYW5kLmNwcAkocmV2aXNpb24gMTAyNzMwKQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2MSw4ICsxNjEsOCBAQCB2b2lkIEluZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdy
CiAgICAgICAgICAgICAgICAgICAgIHNwbGl0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
c3BsaXRQb2ludFBhcmVudCksIHNwbGl0UG9pbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICB1cGRhdGVMYXlvdXQoKTsKKworICAgICAgICBkb2N1bWVudCgp
LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICAgICAgdmlzaWJs
ZVN0YXJ0T2ZQYXJhZ3JhcGggPSBWaXNpYmxlUG9zaXRpb24odmlzaWJsZVN0YXJ0T2ZQYXJhZ3Jh
cGguZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgICAgIHZpc2libGVFbmRPZlBhcmFncmFwaCA9IFZp
c2libGVQb3NpdGlvbih2aXNpYmxlRW5kT2ZQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKSk7CiAg
ICAgICAgIGlmICh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5pc05vdE51bGwoKSAmJiAhaXNTdGFy
dE9mUGFyYWdyYXBoKHZpc2libGVTdGFydE9mUGFyYWdyYXBoKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAkocmV2aXNpb24g
MTAyNzMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgSW5zZXJ0TGluZUJy
ZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIFBvc2l0aW9uIGVuZGluZ1Bvc2l0aW9uID0g
Zmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0Tm9kZSk7CiAgICAgICAgIAogICAgICAgICAvLyBIYW5k
bGUgd2hpdGVzcGFjZSB0aGF0IG9jY3VycyBhZnRlciB0aGUgc3BsaXQKLSAgICAgICAgdXBkYXRl
TGF5b3V0KCk7CisgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOwogICAgICAgICBpZiAoIWVuZGluZ1Bvc2l0aW9uLmlzUmVuZGVyZWRDaGFy
YWN0ZXIoKSkgewogICAgICAgICAgICAgUG9zaXRpb24gcG9zaXRpb25CZWZvcmVUZXh0Tm9kZShw
b3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZSh0ZXh0Tm9kZSkpOwogICAgICAgICAgICAgLy8gQ2xl
YXIgb3V0IGFsbCB3aGl0ZXNwYWNlIGFuZCBpbnNlcnQgb25lIG5vbi1icmVha2luZyBzcGFjZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDI3MzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JD
b21tYW5kOjpkbwogICAgIGVsc2UKICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKGJsb2NrVG9JbnNl
cnQuZ2V0KCksIHN0YXJ0QmxvY2spOwogCi0gICAgdXBkYXRlTGF5b3V0KCk7CisgICAgZG9jdW1l
bnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICAvLyBJ
ZiB0aGUgcGFyYWdyYXBoIHNlcGFyYXRvciB3YXMgaW5zZXJ0ZWQgYXQgdGhlIGVuZCBvZiBhIHBh
cmFncmFwaCwgYW4gZW1wdHkgbGluZSBtdXN0IGJlCiAgICAgLy8gY3JlYXRlZC4gIEFsbCBvZiB0
aGUgbm9kZXMsIHN0YXJ0aW5nIGF0IHZpc2libGVQb3MsIGFyZSBhYm91dCB0byBiZSBhZGRlZCB0
byB0aGUgbmV3IHBhcmFncmFwaCAKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIEluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAKICAgICAvLyBIYW5kbGUgd2hpdGVzcGFjZSB0aGF0
IG9jY3VycyBhZnRlciB0aGUgc3BsaXQKICAgICBpZiAoc3BsaXRUZXh0KSB7Ci0gICAgICAgIHVw
ZGF0ZUxheW91dCgpOworICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKICAgICAgICAgaWYgKGluc2VydGlvblBvc2l0aW9uLmFuY2hvclR5
cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQogICAgICAgICAgICAg
aW5zZXJ0aW9uUG9zaXRpb24ubW92ZVRvT2Zmc2V0KDApOwogICAgICAgICBpZiAoIWluc2VydGlv
blBvc2l0aW9uLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAxMDI3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjcsNyArNDI3LDcgQEAgdm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwbwogICAgIH0KIH0KIAotdm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGluZyhFZGl0
Q29tbWFuZCogY29tbWFuZCkKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVz
cG9uZFRvQXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQpCiB7CiAg
ICAgaWYgKGNvbW1hbmQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNvbW1hbmQtPnNob3VsZFJl
dGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCiAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbklu
ZGljYXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTAyNzMwKQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDYgKzM2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb21w
b3NpdGVFZGl0Q29tbWFuZDsKIGNsYXNzIEVkaXRvckNsaWVudDsKIGNsYXNzIEVkaXRDb21tYW5k
OwogY2xhc3MgRWRpdENvbW1hbmRDb21wb3NpdGlvbjsKQEAgLTg4LDcgKzg5LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUo
KSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKIAogICAgIHZvaWQgcmVzcG9uZFRv
VW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBjb25zdCBT
dHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKSBVTkxFU1NfRU5BQkxF
RCh7IFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOyBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0p
Ci0gICAgdm9pZCByZXNwb25kVG9BcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZCopIFVOTEVTU19F
TkFCTEVEKHt9KQorICAgIHZvaWQgcmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRp
dENvbW1hbmQqKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAgICAgdm9pZCByZXNwb25kVG9VbmFwcGxp
ZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24qKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAg
ICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob2xkU2VsZWN0aW9u
KTsgfSkKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShy
ZXZpc2lvbiAxMDI3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNyArMjQwLDcgQEAgVHlwaW5nQ29tbWFuZCogVHlw
aW5nQ29tbWFuZDo6bGFzdFR5cGluZwogewogICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBFZGl0
Q29tbWFuZCogbGFzdEVkaXRDb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5sYXN0RWRpdENvbW1h
bmQoKTsKKyAgICBDb21wb3NpdGVFZGl0Q29tbWFuZCogbGFzdEVkaXRDb21tYW5kID0gZnJhbWUt
PmVkaXRvcigpLT5sYXN0RWRpdENvbW1hbmQoKTsKICAgICBpZiAoIWxhc3RFZGl0Q29tbWFuZCB8
fCAhbGFzdEVkaXRDb21tYW5kLT5pc1R5cGluZ0NvbW1hbmQoKSB8fCAhc3RhdGljX2Nhc3Q8VHlw
aW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZCktPmlzT3BlbkZvck1vcmVUeXBpbmcoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5oCShyZXZpc2lvbiAxMDI3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSwxMSBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzVHlwaW5nQ29tbWFuZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXNU
eXBpbmdTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc2VydmVzVHlwaW5nU3R5bGU7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25z
dCB7IHJldHVybiBtX3Nob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yOyB9CisgICAg
dmlydHVhbCBib29sIHNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc1RvcExldmVsQ29tbWFuZCgpKTsKKyAgICAgICAgcmV0
dXJuIG1fc2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3I7CisgICAgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihib29sIHJl
dGFpbikgeyBtX3Nob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yID0gcmV0YWluOyB9
CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN0b3BDYXJldEJsaW5raW5nKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZvaWQgc2V0U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcoYm9vbCBw
cmV2ZW50KSB7IG1fc2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcgPSBwcmV2ZW50OyB9Cg==
</data>
<flag name="review"
          id="119245"
          type_id="1"
          status="+"
          setter="enrica"
    />
          </attachment>
      

    </bug>

</bugzilla>