<?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>153342</bug_id>
          
          <creation_ts>2016-01-21 21:34:36 -0800</creation_ts>
          <short_desc>Document::createElement has too many function overrides</short_desc>
          <delta_ts>2016-03-01 21:42:50 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150225</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1157585</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-01-21 21:34:36 -0800</bug_when>
    <thetext>Document::createElement has one variant exposed to DOM and another used for internal element creation.
Rename the one used internally to createBuiltinElement and add createBuiltinHTMLElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157587</commentid>
    <comment_count>1</comment_count>
      <attachid>269550</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-01-21 21:47:29 -0800</bug_when>
    <thetext>Created attachment 269550
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157921</commentid>
    <comment_count>2</comment_count>
      <attachid>269550</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-01-22 17:51:01 -0800</bug_when>
    <thetext>Comment on attachment 269550
Cleanup

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

built-in is two words so it should be spelled createBuiltInHTMLElement

&gt; Source/WebCore/editing/IndentOutdentCommand.cpp:75
&gt; +    RefPtr&lt;HTMLElement&gt; newList = document().createBuiltinHTMLElement(listNode-&gt;tagQName());

Type should be Ref here, not RefPtr. Better, use auto.

&gt; Source/WebCore/editing/htmlediting.cpp:983
&gt; +    RefPtr&lt;HTMLElement&gt; spanElement = document.createBuiltinHTMLElement(spanTag);

Ditto.

&gt; Source/WebCore/editing/cocoa/EditorCocoa.mm:60
&gt; +    Ref&lt;HTMLElement&gt; styleElement = frame-&gt;document()-&gt;createBuiltinHTMLElement(HTMLNames::spanTag);

Better to use auto.

&gt; Source/WebCore/editing/ios/EditorIOS.mm:494
&gt; +        Ref&lt;HTMLElement&gt; anchor = frame.document()-&gt;createBuiltinHTMLElement(HTMLNames::aTag);

Ditto.

&gt; Source/WebCore/editing/ios/EditorIOS.mm:583
&gt; +    Ref&lt;HTMLElement&gt; imageElement = m_frame.document()-&gt;createBuiltinHTMLElement(HTMLNames::imgTag);

Ditto.

&gt; Source/WebCore/editing/mac/EditorMac.mm:592
&gt; +    Ref&lt;HTMLElement&gt; anchor = frame.document()-&gt;createBuiltinHTMLElement(HTMLNames::aTag);

Ditto.

&gt; Source/WebCore/editing/mac/EditorMac.mm:633
&gt; +    Ref&lt;HTMLElement&gt; imageElement = document().createBuiltinHTMLElement(HTMLNames::imgTag);

Ditto.

&gt; Source/WebCore/html/FTPDirectoryDocument.cpp:107
&gt; +    Ref&lt;HTMLElement&gt; element = document()-&gt;createBuiltinHTMLElement(tdTag);

Ditto.

&gt; Source/WebCore/html/FTPDirectoryDocument.cpp:138
&gt; +    Ref&lt;HTMLElement&gt; anchorElement = document()-&gt;createBuiltinHTMLElement(aTag);

Ditto.

&gt; Source/WebCore/html/FTPDirectoryDocument.cpp:142
&gt; +    Ref&lt;HTMLElement&gt; tdElement = document()-&gt;createBuiltinHTMLElement(tdTag);

Ditto.

&gt; Source/WebCore/html/FTPDirectoryDocument.cpp:328
&gt; +    Ref&lt;HTMLElement&gt; bodyElement = document()-&gt;createBuiltinHTMLElement(bodyTag);

Ditto.

&gt; Source/WebCore/html/FTPDirectoryDocument.cpp:332
&gt; +    Ref&lt;HTMLElement&gt; tableElement = document()-&gt;createBuiltinHTMLElement(tableTag);

Ditto.

&gt; Source/WebCore/html/HTMLSelectElement.cpp:479
&gt; +            Ref&lt;HTMLElement&gt; option = HTMLOptionElement::create(document());
&gt; +            add(option.ptr(), nullptr, ec);

How about doing this as a one-liner?

    add(HTMLOptionElement::create(document()).ptr(), nullptr, ec);

&gt; Source/WebCore/html/ImageDocument.cpp:213
&gt; +    Ref&lt;HTMLElement&gt; rootElement = Document::createBuiltinHTMLElement(htmlTag);

How about auto?

&gt; Source/WebCore/html/ImageDocument.cpp:219
&gt; +    Ref&lt;HTMLElement&gt; body = Document::createBuiltinHTMLElement(bodyTag);

Ditto.

&gt; Source/WebCore/html/MediaDocument.cpp:81
&gt; +    Ref&lt;HTMLElement&gt; rootElement = document()-&gt;createBuiltinHTMLElement(htmlTag);

Ditto.

&gt; Source/WebCore/html/MediaDocument.cpp:90
&gt; +    Ref&lt;HTMLElement&gt; headElement = document()-&gt;createBuiltinHTMLElement(headTag);

Ditto.

&gt; Source/WebCore/html/MediaDocument.cpp:93
&gt; +    Ref&lt;HTMLElement&gt; metaElement = document()-&gt;createBuiltinHTMLElement(metaTag);

Ditto.

&gt; Source/WebCore/html/MediaDocument.cpp:99
&gt; +    Ref&lt;HTMLElement&gt; body = document()-&gt;createBuiltinHTMLElement(bodyTag);

Ditto.

&gt; Source/WebCore/html/MediaDocument.cpp:102
&gt; +    Ref&lt;HTMLElement&gt; mediaElement = document()-&gt;createBuiltinHTMLElement(videoTag);

Ditto.

&gt; Source/WebCore/html/MediaDocument.cpp:117
&gt; +    Ref&lt;HTMLElement&gt; sourceElement = document()-&gt;createBuiltinHTMLElement(sourceTag);

Ditto.

&gt; Source/WebCore/html/MediaDocument.cpp:243
&gt; +        Ref&lt;HTMLEmbedElement&gt; embedElement = HTMLEmbedElement::create(embedTag, *this, false);

Ditto.

&gt; Source/WebCore/html/PluginDocument.cpp:70
&gt; +    Ref&lt;HTMLHtmlElement&gt; rootElement = HTMLHtmlElement::create(*document());

Ditto.

&gt; Source/WebCore/html/PluginDocument.cpp:82
&gt; +    Ref&lt;HTMLElement&gt; body = document()-&gt;createBuiltinHTMLElement(bodyTag);

Ditto.

&gt; Source/WebCore/html/PluginDocument.cpp:93
&gt; +    Ref&lt;HTMLElement&gt; embedElement = document()-&gt;createBuiltinHTMLElement(embedTag);

Ditto.

&gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:621
&gt; +    RefPtr&lt;Element&gt; element = ownerDocumentForCurrentNode().createBuiltinElement(tagName, true);

Should be Ref, not RefPtr.

&gt; Source/WebCore/html/shadow/MediaControlElements.cpp:808
&gt; +    Ref&lt;HTMLElement&gt; captionsHeader = document().createBuiltinHTMLElement(h3Tag);

Ditto.

&gt; Source/WebCore/html/shadow/MediaControlElements.cpp:811
&gt; +    Ref&lt;HTMLElement&gt; captionsMenuList = document().createBuiltinHTMLElement(ulTag);

Ditto.

&gt; Source/WebCore/html/shadow/MediaControlElements.cpp:814
&gt; +        Ref&lt;HTMLElement&gt; menuItem = document().createBuiltinHTMLElement(liTag);

Ditto.

&gt; Source/WebCore/xml/XMLErrors.cpp:89
&gt; +    Ref&lt;Element&gt; reportElement = doc-&gt;createBuiltinElement(QualifiedName(nullAtom, &quot;parsererror&quot;, xhtmlNamespaceURI), true);

Ditto.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:527
&gt; +        Ref&lt;HTMLElement&gt; annotationStyleElement = document-&gt;createBuiltinHTMLElement(styleTag);

Ditto.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:520
&gt; +        Ref&lt;HTMLElement&gt; annotationStyleElement = document-&gt;createBuiltinHTMLElement(styleTag);

Ditto.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:797
&gt; +    m_passwordContainer = document-&gt;createBuiltinHTMLElement(divTag);

Ditto.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:74
&gt; +    Ref&lt;HTMLElement&gt; styledElement = document.createBuiltinHTMLElement(selectTag);

Ditto.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:84
&gt; +        Ref&lt;HTMLElement&gt; choiceOption = document.createBuiltinHTMLElement(optionTag);

Ditto.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:94
&gt; +    return styledElement.ptr();

I think this is wrong. It should be WTFMove(styledElement), I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164839</commentid>
    <comment_count>3</comment_count>
      <attachid>269550</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-02-15 13:08:29 -0800</bug_when>
    <thetext>Comment on attachment 269550
Cleanup

I&apos;m not really rejecting this patch, just getting it off request queue until you have time to respond to Darin&apos;s review.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269550</attachid>
            <date>2016-01-21 21:47:29 -0800</date>
            <delta_ts>2016-02-15 13:08:29 -0800</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-153342-20160121214701.patch</filename>
            <type>text/plain</type>
            <size>40582</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTMxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE2LTAxLTIxICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERvY3VtZW50OjpjcmVhdGVFbGVt
ZW50IGhhcyB0b28gbWFueSBmdW5jdGlvbiBvdmVycmlkZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzM0MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZWQgdGhlIHZlcnNpb24gb2YgRG9jdW1l
bnQ6OmNyZWF0ZUVsZW1lbnQgdXNlZCBpbnRlcm5hbGx5IHRvIERvY3VtZW50OjpjcmVhdGVCdWls
dGluRWxlbWVudCwKKyAgICAgICAgYW5kIGFkZGVkIGNyZWF0ZUJ1aWx0aW5IVE1MRWxlbWVudCB3
aGljaCBjcmVhdGVzIGEgSFRNTCBlbGVtZW50LgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVEb2N1bWVudEZyYWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpoYXNWYWxpZE5hbWVzcGFjZUZvckF0dHJpYnV0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZUJ1aWx0aW5FbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpjcmVhdGVCdWlsdGluSFRNTEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OmNzc1JlZ2lvbnNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpjcmVhdGVFbGVtZW50TlMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJl
YWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFRpdGxlKToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBvcnRO
b2RlKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmRldGFjaEF0dHJpYnV0ZSk6CisgICAgICAgICogZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOgorICAgICAgICAqIGVkaXRpbmcvSW5kZW50T3V0ZGVu
dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5kZW50T3V0ZGVudENvbW1hbmQ6OnRy
eUluZGVudGluZ0FzTGlzdEl0ZW0pOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRWRpdG9yQ29j
b2EubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQp
OgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlSFRNTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVGFiU3BhbkVsZW1l
bnQpOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmNyZWF0ZUZyYWdtZW50Rm9ySW1hZ2VSZXNvdXJjZUFuZEFkZFJlc291cmNlKToK
KyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjcmVhdGVGcmFnbWVudEZvckltYWdlUmVzb3VyY2VBbmRBZGRSZXNvdXJjZSk6CisgICAg
ICAgICogaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
VFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjo6YXBwZW5kRW50cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6RlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmNyZWF0ZVRERm9yRmlsZW5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6RlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmxvYWREb2N1bWVudFRl
bXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpj
cmVhdGVCYXNpY0RvY3VtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRMZW5ndGgpOgorICAg
ICAgICAqIGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURv
Y3VtZW50OjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgICogaHRtbC9NZWRpYURv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnRQYXJzZXI6OmNyZWF0
ZURvY3VtZW50U3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRG9jdW1lbnQ6OnJl
cGxhY2VNZWRpYUVsZW1lbnRUaW1lckZpcmVkKToKKyAgICAgICAgKiBodG1sL1BsdWdpbkRvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRvY3VtZW50UGFyc2VyOjpjcmVhdGVE
b2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlv
blNpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0
ZUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0
RWxlbWVudDo6cmVidWlsZFRyYWNrTGlzdE1lbnUpOgorICAgICAgICAqIGh0bWwvdHJhY2svV2Vi
VlRURWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRFbGVtZW50OjpjcmVhdGVF
cXVpdmFsZW50SFRNTEVsZW1lbnQpOgorICAgICAgICAqIHhtbC9YTUxFcnJvcnMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlWEhUTUxQYXJzZXJFcnJvckhlYWRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxFcnJvcnM6Omluc2VydEVycm9yTWVzc2FnZUJsb2NrKToKKyAgICAgICAgKiB4
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxEb2N1bWVudFBhcnNlcjo6c3RhcnRFbGVtZW50TnMpOgorCiAyMDE2LTAxLTE5ICBOaWtv
cyBBbmRyb25pa29zICA8bmlrb3MuYW5kcm9uaWtvcy13ZWJraXRAY2lzcmEuY2Fub24uY29tLmF1
PgogCiAgICAgICAgIFNWRyAyIHJlcXVpcmVzIGEgbWVjaGFuaXNtIGZvciByZXN0cmljdGluZyBl
bnVtIHZhbHVlcyBleHBvc2VkIHRocm91Z2ggdGhlIERPTQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiAxOTUzMTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTUsNyArODk1LDcgQEAgUmVmUHRyPEVsZW1lbnQ+IERv
Y3VtZW50OjpjcmVhdGVFbGVtZW50KAogICAgIGlmIChpc1hIVE1MRG9jdW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlRWxlbWVudChRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCBuYW1lLCB4aHRtbE5hbWVzcGFjZVVSSSksICp0aGlzKTsKIAotICAgIHJldHVy
biBjcmVhdGVFbGVtZW50KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIG5hbWUsIG51bGxBdG9tKSwg
ZmFsc2UpOworICAgIHJldHVybiBjcmVhdGVCdWlsdGluRWxlbWVudChRdWFsaWZpZWROYW1lKG51
bGxBdG9tLCBuYW1lLCBudWxsQXRvbSkpOwogfQogCiBSZWY8RG9jdW1lbnRGcmFnbWVudD4gRG9j
dW1lbnQ6OmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpAQCAtMTA1MSw3ICsxMDUxLDcgQEAgYm9v
bCBEb2N1bWVudDo6aGFzVmFsaWROYW1lc3BhY2VGb3JBdHRyaQogfQogCiAvLyBGSVhNRTogVGhp
cyBzaG91bGQgcmVhbGx5IGJlIGluIGEgcG9zc2libGUgRWxlbWVudEZhY3RvcnkgY2xhc3MuCi1S
ZWY8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCitSZWY8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0
ZUJ1aWx0aW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGJvb2wgY3JlYXRlZEJ5
UGFyc2VyKQogewogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50OwogCkBAIC0xMDc2LDYgKzEw
NzYsMTIgQEAgUmVmPEVsZW1lbnQ+IERvY3VtZW50OjpjcmVhdGVFbGVtZW50KGNvbgogICAgIHJl
dHVybiBlbGVtZW50LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKK1JlZjxIVE1MRWxlbWVudD4gRG9j
dW1lbnQ6OmNyZWF0ZUJ1aWx0aW5IVE1MRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
KQoreworICAgIEFTU0VSVChuYW1lLm5hbWVzcGFjZVVSSSgpID09IHhodG1sTmFtZXNwYWNlVVJJ
KTsKKyAgICByZXR1cm4gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVFbGVtZW50KG5hbWUsICp0
aGlzLCBudWxscHRyLCBmYWxzZSk7Cit9CisKIGJvb2wgRG9jdW1lbnQ6OmNzc1JlZ2lvbnNFbmFi
bGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS5jc3NSZWdpb25zRW5hYmxlZCgpOyAKQEAgLTExMjAsNyArMTEyNiw3IEBAIFJl
ZlB0cjxFbGVtZW50PiBEb2N1bWVudDo6Y3JlYXRlRWxlbWVudE4KICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQocU5hbWUsIGZhbHNlKTsK
KyAgICByZXR1cm4gY3JlYXRlQnVpbHRpbkVsZW1lbnQocU5hbWUpOwogfQogCiBTdHJpbmcgRG9j
dW1lbnQ6OnJlYWR5U3RhdGUoKSBjb25zdApAQCAtMTU1NSw3ICsxNTYxLDcgQEAgdm9pZCBEb2N1
bWVudDo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aQogICAgICAgICBhdXRvKiBoZWFkRWxlbWVu
dCA9IGhlYWQoKTsKICAgICAgICAgaWYgKCFoZWFkRWxlbWVudCkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbV90aXRsZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KHRpdGxlVGFnLCBmYWxz
ZSk7CisgICAgICAgIG1fdGl0bGVFbGVtZW50ID0gSFRNTFRpdGxlRWxlbWVudDo6Y3JlYXRlKHRp
dGxlVGFnLCAqdGhpcyk7CiAgICAgICAgIGhlYWRFbGVtZW50LT5hcHBlbmRDaGlsZCgqbV90aXRs
ZUVsZW1lbnQsIEFTU0VSVF9OT19FWENFUFRJT04pOwogICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHJldmlzaW9uIDE5NTMxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTcsNyArMzk3LDggQEAgcHVibGljOgogICAgIFJlZlB0
cjxOb2RlPiBpbXBvcnROb2RlKE5vZGUqIGltcG9ydGVkTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGltcG9ydE5vZGUoaW1wb3J0ZWROb2RlLCBmYWxzZSwgZWMpOyB9CiAgICAgUmVm
UHRyPE5vZGU+IGltcG9ydE5vZGUoTm9kZSogaW1wb3J0ZWROb2RlLCBib29sIGRlZXAsIEV4Y2Vw
dGlvbkNvZGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8RWxlbWVudD4gY3JlYXRlRWxl
bWVudE5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIHF1YWxpZmll
ZE5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWY8RWxlbWVudD4g
Y3JlYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxFbGVtZW50PiBjcmVhdGVCdWlsdGluRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIgPSBmYWxzZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgUmVmPEhUTUxFbGVtZW50PiBjcmVhdGVCdWlsdGluSFRNTEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCiAgICAgYm9vbCBjc3NSZWdpb25zRW5hYmxlZCgpIGNv
bnN0OwogICAgIGJvb2wgY3NzQ29tcG9zaXRpbmdFbmFibGVkKCkgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTUzMTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Nyw3ICszNDcsNyBAQCBSZWY8RWxlbWVu
dD4gRWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91CiAKIFJlZjxFbGVtZW50PiBFbGVtZW50Ojpj
bG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKERvY3VtZW50JiB0YXJnZXRE
b2N1bWVudCkKIHsKLSAgICByZXR1cm4gdGFyZ2V0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdR
TmFtZSgpLCBmYWxzZSk7CisgICAgcmV0dXJuIHRhcmdldERvY3VtZW50LmNyZWF0ZUJ1aWx0aW5F
bGVtZW50KHRhZ1FOYW1lKCkpOwogfQogCiBSZWZQdHI8QXR0cj4gRWxlbWVudDo6ZGV0YWNoQXR0
cmlidXRlKHVuc2lnbmVkIGluZGV4KQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE5NTMxNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTUwLDcgKzE1NTAsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpzCiAKIFJlZjxFbGVtZW50PiBjcmVhdGVCbG9ja1BsYWNlaG9sZGVyRWxlbWVudChEb2N1bWVu
dCYgZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYnJUYWcs
IGZhbHNlKTsKKyAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlQnVpbHRpbkhUTUxFbGVtZW50KGJy
VGFnKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE5NTMxNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgSW5kZW50T3V0ZGVudENvbW1hbmQ6OnRy
eUluZGVudGluZ0EKICAgICBSZWZQdHI8RWxlbWVudD4gcHJldmlvdXNMaXN0ID0gRWxlbWVudFRy
YXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpzZWxlY3RlZExpc3RJdGVtKTsKICAgICBSZWZQdHI8
RWxlbWVudD4gbmV4dExpc3QgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZygqc2VsZWN0
ZWRMaXN0SXRlbSk7CiAKLSAgICBSZWZQdHI8RWxlbWVudD4gbmV3TGlzdCA9IGRvY3VtZW50KCku
Y3JlYXRlRWxlbWVudChsaXN0Tm9kZS0+dGFnUU5hbWUoKSwgZmFsc2UpOworICAgIFJlZlB0cjxI
VE1MRWxlbWVudD4gbmV3TGlzdCA9IGRvY3VtZW50KCkuY3JlYXRlQnVpbHRpbkhUTUxFbGVtZW50
KGxpc3ROb2RlLT50YWdRTmFtZSgpKTsKICAgICBpbnNlcnROb2RlQmVmb3JlKG5ld0xpc3QsIHNl
bGVjdGVkTGlzdEl0ZW0pOwogCiAgICAgbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMoc3RhcnQsIGVu
ZCwgbmV3TGlzdC5nZXQoKSwgc2VsZWN0ZWRMaXN0SXRlbS5nZXQoKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gMTk1MzE1KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzOCw3
ICs5MzgsNyBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVMaXN0SXRlbUVsCiAKIFJl
ZjxIVE1MRWxlbWVudD4gY3JlYXRlSFRNTEVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lKQogewotICAgIHJldHVybiBIVE1MRWxlbWVudEZhY3Rvcnk6
OmNyZWF0ZUVsZW1lbnQobmFtZSwgZG9jdW1lbnQpOworICAgIHJldHVybiBkb2N1bWVudC5jcmVh
dGVCdWlsdGluSFRNTEVsZW1lbnQobmFtZSk7CiB9CiAKIFJlZjxIVE1MRWxlbWVudD4gY3JlYXRl
SFRNTEVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUpCkBAIC05ODAsNyArOTgwLDcgQEAgUmVmPEVsZW1lbnQ+IGNyZWF0ZVRhYlNwYW5FbGVtZW50
KERvY3VtZQogICAgIFJlZlB0cjxOb2RlPiB0YWJUZXh0Tm9kZSA9IHBycFRhYlRleHROb2RlOwog
CiAgICAgLy8gTWFrZSB0aGUgc3BhbiB0byBob2xkIHRoZSB0YWIuCi0gICAgUmVmUHRyPEVsZW1l
bnQ+IHNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChzcGFuVGFnLCBmYWxzZSk7
CisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBzcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUJ1
aWx0aW5IVE1MRWxlbWVudChzcGFuVGFnKTsKICAgICBzcGFuRWxlbWVudC0+c2V0QXR0cmlidXRl
KGNsYXNzQXR0ciwgQXBwbGVUYWJTcGFuQ2xhc3MpOwogICAgIHNwYW5FbGVtZW50LT5zZXRBdHRy
aWJ1dGUoc3R5bGVBdHRyLCAid2hpdGUtc3BhY2U6cHJlIik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQkocmV2aXNpb24gMTk1MzE1KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiRWRpdGluZ1N0eWxlLmgiCiAjaW1wb3J0ICJG
cmFtZS5oIgogI2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIkhUTUxFbGVtZW50
LmgiCiAjaW1wb3J0ICJOU0F0dHJpYnV0ZWRTdHJpbmdTUEkuaCIKICNpbXBvcnQgIlJlbmRlckVs
ZW1lbnQuaCIKICNpbXBvcnQgIlJlbmRlclN0eWxlLmgiCkBAIC01Niw3ICs1Nyw3IEBAIFJlbmRl
clN0eWxlKiBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3QKICAgICBpZiAoIXR5cGluZ1N0eWxl
IHx8ICF0eXBpbmdTdHlsZS0+c3R5bGUoKSkKICAgICAgICAgcmV0dXJuICZwb3NpdGlvbi5kZXBy
ZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpOwogCi0gICAgUmVmPEVsZW1lbnQ+IHN0
eWxlRWxlbWVudCA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KEhUTUxOYW1lczo6
c3BhblRhZywgZmFsc2UpOworICAgIFJlZjxIVE1MRWxlbWVudD4gc3R5bGVFbGVtZW50ID0gZnJh
bWUtPmRvY3VtZW50KCktPmNyZWF0ZUJ1aWx0aW5IVE1MRWxlbWVudChIVE1MTmFtZXM6OnNwYW5U
YWcpOwogCiAgICAgU3RyaW5nIHN0eWxlVGV4dCA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpLT5hc1Rl
eHQoKSArICIgZGlzcGxheTogaW5saW5lIjsKICAgICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0
ZShIVE1MTmFtZXM6OnN0eWxlQXR0ciwgc3R5bGVUZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0JKHJldmlzaW9uIDE5NTMxNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDkxLDcgKzQ5
MSw3IEBAIGJvb2wgRWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkVVJMKGMKICAgICAgICAg
ICAgIHJldHVybiBmcmFnbWVudDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIFJl
ZjxFbGVtZW50PiBhbmNob3IgPSBmcmFtZS5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KEhUTUxO
YW1lczo6YVRhZywgZmFsc2UpOworICAgICAgICBSZWY8SFRNTEVsZW1lbnQ+IGFuY2hvciA9IGZy
YW1lLmRvY3VtZW50KCktPmNyZWF0ZUJ1aWx0aW5IVE1MRWxlbWVudChIVE1MTmFtZXM6OmFUYWcp
OwogICAgICAgICBhbmNob3ItPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyLCB1cmwu
c3RyaW5nKCkpOwogICAgICAgICBhbmNob3ItPmFwcGVuZENoaWxkKGZyYW1lLmRvY3VtZW50KCkt
PmNyZWF0ZVRleHROb2RlKFtbKE5TVVJMICopdXJsIGFic29sdXRlU3RyaW5nXSBwcmVjb21wb3Nl
ZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkpOwogCkBAIC01ODAsNyArNTgwLDcgQEAgUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OmNyZQogICAgIGlmICghcmVzb3VyY2Up
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmPEVsZW1lbnQ+IGltYWdlRWxlbWVu
dCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChIVE1MTmFtZXM6OmltZ1RhZywg
ZmFsc2UpOworICAgIFJlZjxIVE1MRWxlbWVudD4gaW1hZ2VFbGVtZW50ID0gbV9mcmFtZS5kb2N1
bWVudCgpLT5jcmVhdGVCdWlsdGluSFRNTEVsZW1lbnQoSFRNTE5hbWVzOjppbWdUYWcpOwogICAg
IC8vIEZJWE1FOiBUaGUgY29kZSBpbiBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyBjYWxs
cyBzZXREZWZlcnNMb2FkaW5nKHRydWUpLiBEb24ndCB3ZSBuZWVkIHRoYXQgaGVyZT8KICAgICBp
ZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2Fk
ZXIoKSkKICAgICAgICAgbG9hZGVyLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UuZ2V0KCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2aXNpb24g
MTk1MzE1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODksNyArNTg5LDcgQEAgYm9vbCBFZGl0b3I6OldlYkNvbnRlbnRSZWFk
ZXI6OnJlYWRVUkwoYwogICAgIGlmICh1cmwuc3RyaW5nKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBSZWY8RWxlbWVudD4gYW5jaG9yID0gZnJhbWUuZG9jdW1lbnQo
KS0+Y3JlYXRlRWxlbWVudChIVE1MTmFtZXM6OmFUYWcsIGZhbHNlKTsKKyAgICBSZWY8SFRNTEVs
ZW1lbnQ+IGFuY2hvciA9IGZyYW1lLmRvY3VtZW50KCktPmNyZWF0ZUJ1aWx0aW5IVE1MRWxlbWVu
dChIVE1MTmFtZXM6OmFUYWcpOwogICAgIGFuY2hvci0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
aHJlZkF0dHIsIHVybC5zdHJpbmcoKSk7CiAgICAgYW5jaG9yLT5hcHBlbmRDaGlsZChmcmFtZS5k
b2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZShbdGl0bGUgcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fu
b25pY2FsTWFwcGluZ10pKTsKIApAQCAtNjMwLDcgKzYzMCw3IEBAIFBhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gRWRpdG9yOjpjcmUKICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9
IG1fZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKICAgICAgICAgbG9hZGVyLT5hZGRB
cmNoaXZlUmVzb3VyY2UocmVzb3VyY2UuZ2V0KCkpOwogCi0gICAgUmVmPEVsZW1lbnQ+IGltYWdl
RWxlbWVudCA9IGRvY3VtZW50KCkuY3JlYXRlRWxlbWVudChIVE1MTmFtZXM6OmltZ1RhZywgZmFs
c2UpOworICAgIFJlZjxIVE1MRWxlbWVudD4gaW1hZ2VFbGVtZW50ID0gZG9jdW1lbnQoKS5jcmVh
dGVCdWlsdGluSFRNTEVsZW1lbnQoSFRNTE5hbWVzOjppbWdUYWcpOwogICAgIGltYWdlRWxlbWVu
dC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0ciwgcmVzb3VyY2UtPnVybCgpLnN0cmlu
ZygpKTsKIAogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50
KCkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9G
VFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAJKHJldmlzaW9uIDE5NTMxNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw3ICs3OCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBhcnNlQW5kQXBwZW5kT25lTGluZShj
b25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZEVudHJ5KGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBzaXplLCBjb25zdCBTdHJpbmcmIGRhdGUsIGJvb2wgaXNEaXJlY3Rvcnkp
OyAgICAKLSAgICBSZWY8RWxlbWVudD4gY3JlYXRlVERGb3JGaWxlbmFtZShjb25zdCBTdHJpbmcm
KTsKKyAgICBSZWY8SFRNTEVsZW1lbnQ+IGNyZWF0ZVRERm9yRmlsZW5hbWUoY29uc3QgU3RyaW5n
Jik7CiAKICAgICBSZWZQdHI8SFRNTFRhYmxlRWxlbWVudD4gbV90YWJsZUVsZW1lbnQ7CiAKQEAg
LTEwNCw3ICsxMDQsNyBAQCB2b2lkIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjphcHBlbmRF
CiAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvd0VsZW1lbnQgPSBtX3RhYmxlRWxlbWVudC0+aW5zZXJ0
Um93KC0xLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICByb3dFbGVtZW50LT5zZXRBdHRyaWJ1dGUo
SFRNTE5hbWVzOjpjbGFzc0F0dHIsICJmdHBEaXJlY3RvcnlFbnRyeVJvdyIpOwogCi0gICAgUmVm
PEVsZW1lbnQ+IGVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxz
ZSk7CisgICAgUmVmPEhUTUxFbGVtZW50PiBlbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlQnVp
bHRpbkhUTUxFbGVtZW50KHRkVGFnKTsKICAgICBlbGVtZW50LT5hcHBlbmRDaGlsZChUZXh0Ojpj
cmVhdGUoKmRvY3VtZW50KCksIFN0cmluZygmbm9CcmVha1NwYWNlLCAxKSksIElHTk9SRV9FWENF
UFRJT04pOwogICAgIGlmIChpc0RpcmVjdG9yeSkKICAgICAgICAgZWxlbWVudC0+c2V0QXR0cmli
dXRlKEhUTUxOYW1lczo6Y2xhc3NBdHRyLCAiZnRwRGlyZWN0b3J5SWNvbiBmdHBEaXJlY3RvcnlU
eXBlRGlyZWN0b3J5Iik7CkBAIC0xMTYsMTggKzExNiwxOCBAQCB2b2lkIEZUUERpcmVjdG9yeURv
Y3VtZW50UGFyc2VyOjphcHBlbmRFCiAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1l
czo6Y2xhc3NBdHRyLCAiZnRwRGlyZWN0b3J5RmlsZU5hbWUiKTsKICAgICByb3dFbGVtZW50LT5h
cHBlbmRDaGlsZChXVEZNb3ZlKGVsZW1lbnQpLCBJR05PUkVfRVhDRVBUSU9OKTsKIAotICAgIGVs
ZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxzZSk7CisgICAgZWxl
bWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUJ1aWx0aW5IVE1MRWxlbWVudCh0ZFRhZyk7CiAgICAg
ZWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKCpkb2N1bWVudCgpLCBkYXRlKSwgSUdO
T1JFX0VYQ0VQVElPTik7CiAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6Y2xh
c3NBdHRyLCAiZnRwRGlyZWN0b3J5RmlsZURhdGUiKTsKICAgICByb3dFbGVtZW50LT5hcHBlbmRD
aGlsZChXVEZNb3ZlKGVsZW1lbnQpLCBJR05PUkVfRVhDRVBUSU9OKTsKIAotICAgIGVsZW1lbnQg
PSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxzZSk7CisgICAgZWxlbWVudCA9
IGRvY3VtZW50KCktPmNyZWF0ZUJ1aWx0aW5IVE1MRWxlbWVudCh0ZFRhZyk7CiAgICAgZWxlbWVu
dC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKCpkb2N1bWVudCgpLCBzaXplKSwgSUdOT1JFX0VY
Q0VQVElPTik7CiAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6Y2xhc3NBdHRy
LCAiZnRwRGlyZWN0b3J5RmlsZVNpemUiKTsKICAgICByb3dFbGVtZW50LT5hcHBlbmRDaGlsZChX
VEZNb3ZlKGVsZW1lbnQpLCBJR05PUkVfRVhDRVBUSU9OKTsKIH0KIAotUmVmPEVsZW1lbnQ+IEZU
UERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpjcmVhdGVUREZvckZpbGVuYW1lKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUpCitSZWY8SFRNTEVsZW1lbnQ+IEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2Vy
OjpjcmVhdGVUREZvckZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiB7CiAgICAgU3Ry
aW5nIGZ1bGxVUkwgPSBkb2N1bWVudCgpLT5iYXNlVVJMKCkuc3RyaW5nKCk7CiAgICAgaWYgKGZ1
bGxVUkwuZW5kc1dpdGgoJy8nKSkKQEAgLTEzNSwxMSArMTM1LDExIEBAIFJlZjxFbGVtZW50PiBG
VFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcjoKICAgICBlbHNlCiAgICAgICAgIGZ1bGxVUkwgPSBm
dWxsVVJMICsgJy8nICsgZmlsZW5hbWU7CiAKLSAgICBSZWY8RWxlbWVudD4gYW5jaG9yRWxlbWVu
dCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoYVRhZywgZmFsc2UpOworICAgIFJlZjxIVE1M
RWxlbWVudD4gYW5jaG9yRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUJ1aWx0aW5IVE1MRWxl
bWVudChhVGFnKTsKICAgICBhbmNob3JFbGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpo
cmVmQXR0ciwgZnVsbFVSTCk7CiAgICAgYW5jaG9yRWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6
Y3JlYXRlKCpkb2N1bWVudCgpLCBmaWxlbmFtZSksIElHTk9SRV9FWENFUFRJT04pOwogCi0gICAg
UmVmPEVsZW1lbnQ+IHRkRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGRUYWcs
IGZhbHNlKTsKKyAgICBSZWY8SFRNTEVsZW1lbnQ+IHRkRWxlbWVudCA9IGRvY3VtZW50KCktPmNy
ZWF0ZUJ1aWx0aW5IVE1MRWxlbWVudCh0ZFRhZyk7CiAgICAgdGRFbGVtZW50LT5hcHBlbmRDaGls
ZChXVEZNb3ZlKGFuY2hvckVsZW1lbnQpLCBJR05PUkVfRVhDRVBUSU9OKTsKIAogICAgIHJldHVy
biB0ZEVsZW1lbnQ7CkBAIC0zMDQsNyArMzA0LDcgQEAgYm9vbCBGVFBEaXJlY3RvcnlEb2N1bWVu
dFBhcnNlcjo6bG9hZERvYwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIE90aGVyd2lz
ZSBjcmVhdGUgb25lIG1hbnVhbGx5Ci0gICAgdGFibGVFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3Jl
YXRlRWxlbWVudCh0YWJsZVRhZywgZmFsc2UpOworICAgIHRhYmxlRWxlbWVudCA9IGRvY3VtZW50
KCktPmNyZWF0ZUJ1aWx0aW5IVE1MRWxlbWVudCh0YWJsZVRhZyk7CiAgICAgbV90YWJsZUVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50Pih0YWJsZUVsZW1lbnQuZ2V0KCkpOwogICAg
IG1fdGFibGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIsICJmdHBEaXJl
Y3RvcnlUYWJsZSIpOwogCkBAIC0zMjUsMTEgKzMyNSwxMSBAQCB2b2lkIEZUUERpcmVjdG9yeURv
Y3VtZW50UGFyc2VyOjpjcmVhdGVCCiAKICAgICAvLyBGSVhNRTogTWFrZSB0aGlzICJiYXNpYyBk
b2N1bWVudCIgbW9yZSBhY2NlcHRhYmxlCiAKLSAgICBSZWY8RWxlbWVudD4gYm9keUVsZW1lbnQg
PSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KGJvZHlUYWcsIGZhbHNlKTsKKyAgICBSZWY8SFRN
TEVsZW1lbnQ+IGJvZHlFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlQnVpbHRpbkhUTUxFbGVt
ZW50KGJvZHlUYWcpOwogCiAgICAgZG9jdW1lbnQoKS0+YXBwZW5kQ2hpbGQoYm9keUVsZW1lbnQu
Y29weVJlZigpLCBJR05PUkVfRVhDRVBUSU9OKTsKIAotICAgIFJlZjxFbGVtZW50PiB0YWJsZUVs
ZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRhYmxlVGFnLCBmYWxzZSk7CisgICAg
UmVmPEhUTUxFbGVtZW50PiB0YWJsZUVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVCdWlsdGlu
SFRNTEVsZW1lbnQodGFibGVUYWcpOwogICAgIG1fdGFibGVFbGVtZW50ID0gZG93bmNhc3Q8SFRN
TFRhYmxlRWxlbWVudD4odGFibGVFbGVtZW50LnB0cigpKTsKICAgICBtX3RhYmxlRWxlbWVudC0+
c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyLCAiZnRwRGlyZWN0b3J5VGFibGUiKTsKICAg
ICBtX3RhYmxlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRyLCAid2lk
dGg6MTAwJSIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDE5NTMxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsOSArNDc1LDggQEAgdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6c2V0TGVuZ3RoKHVuc2lnbgogCiAgICAgaWYgKGRpZmYgPCAwKSB7IC8vIEFk
ZCBkdW1teSBlbGVtZW50cy4KICAgICAgICAgZG8gewotICAgICAgICAgICAgUmVmUHRyPEVsZW1l
bnQ+IG9wdGlvbiA9IGRvY3VtZW50KCkuY3JlYXRlRWxlbWVudChvcHRpb25UYWcsIGZhbHNlKTsK
LSAgICAgICAgICAgIEFTU0VSVChvcHRpb24pOwotICAgICAgICAgICAgYWRkKGRvd25jYXN0PEhU
TUxFbGVtZW50PihvcHRpb24uZ2V0KCkpLCBudWxscHRyLCBlYyk7CisgICAgICAgICAgICBSZWY8
SFRNTEVsZW1lbnQ+IG9wdGlvbiA9IEhUTUxPcHRpb25FbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQo
KSk7CisgICAgICAgICAgICBhZGQob3B0aW9uLnB0cigpLCBudWxscHRyLCBlYyk7CiAgICAgICAg
ICAgICBpZiAoZWMpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gd2hpbGUgKCsr
ZGlmZik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAJKHJldmlzaW9u
IDE5NTMxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMCwxMyArMjEwLDEzIEBAIFJlZjxEb2N1bWVudFBhcnNlcj4gSW1hZ2VE
b2N1bWVudDo6Y3JlYXQKIAogdm9pZCBJbWFnZURvY3VtZW50OjpjcmVhdGVEb2N1bWVudFN0cnVj
dHVyZSgpCiB7Ci0gICAgUmVmPEVsZW1lbnQ+IHJvb3RFbGVtZW50ID0gRG9jdW1lbnQ6OmNyZWF0
ZUVsZW1lbnQoaHRtbFRhZywgZmFsc2UpOworICAgIFJlZjxIVE1MRWxlbWVudD4gcm9vdEVsZW1l
bnQgPSBEb2N1bWVudDo6Y3JlYXRlQnVpbHRpbkhUTUxFbGVtZW50KGh0bWxUYWcpOwogICAgIGFw
cGVuZENoaWxkKHJvb3RFbGVtZW50LmNvcHlSZWYoKSk7CiAgICAgZG93bmNhc3Q8SFRNTEh0bWxF
bGVtZW50Pihyb290RWxlbWVudC5nZXQoKSkuaW5zZXJ0ZWRCeVBhcnNlcigpOwogCiAgICAgZnJh
bWUoKS0+aW5qZWN0VXNlclNjcmlwdHMoSW5qZWN0QXREb2N1bWVudFN0YXJ0KTsKIAotICAgIFJl
ZjxFbGVtZW50PiBib2R5ID0gRG9jdW1lbnQ6OmNyZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFsc2Up
OworICAgIFJlZjxIVE1MRWxlbWVudD4gYm9keSA9IERvY3VtZW50OjpjcmVhdGVCdWlsdGluSFRN
TEVsZW1lbnQoYm9keVRhZyk7CiAgICAgYm9keS0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgIm1h
cmdpbjogMHB4Iik7CiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzUERGTUlNRVR5cGUoZG9j
dW1lbnQoKS5sb2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpKSkKICAgICAgICAgZG93bmNhc3Q8
SFRNTEJvZHlFbGVtZW50Pihib2R5LmdldCgpKS5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yLCAid2hpdGUiLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lE
RU5UKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcAkocmV2aXNpb24g
MTk1MzE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwcml2YXRlOgogICAgIAogdm9pZCBNZWRpYURvY3Vt
ZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSgpCiB7Ci0gICAgUmVmPEVsZW1lbnQ+
IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7
CisgICAgUmVmPEhUTUxFbGVtZW50PiByb290RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUJ1
aWx0aW5IVE1MRWxlbWVudChodG1sVGFnKTsKICAgICBkb2N1bWVudCgpLT5hcHBlbmRDaGlsZChy
b290RWxlbWVudC5jb3B5UmVmKCksIElHTk9SRV9FWENFUFRJT04pOwogICAgIGRvY3VtZW50KCkt
PnNldENTU1RhcmdldChyb290RWxlbWVudC5wdHIoKSk7CiAgICAgZG93bmNhc3Q8SFRNTEh0bWxF
bGVtZW50Pihyb290RWxlbWVudC5nZXQoKSkuaW5zZXJ0ZWRCeVBhcnNlcigpOwpAQCAtODcsMTkg
Kzg3LDE5IEBAIHZvaWQgTWVkaWFEb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9jdW1lbnQKICAgICAg
ICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+aW5qZWN0VXNlclNjcmlwdHMoSW5qZWN0QXREb2N1bWVu
dFN0YXJ0KTsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBSZWY8RWxlbWVudD4gaGVhZEVsZW1l
bnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KGhlYWRUYWcsIGZhbHNlKTsKKyAgICBSZWY8
SFRNTEVsZW1lbnQ+IGhlYWRFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlQnVpbHRpbkhUTUxF
bGVtZW50KGhlYWRUYWcpOwogICAgIHJvb3RFbGVtZW50LT5hcHBlbmRDaGlsZChoZWFkRWxlbWVu
dC5jb3B5UmVmKCksIElHTk9SRV9FWENFUFRJT04pOwogCi0gICAgUmVmPEVsZW1lbnQ+IG1ldGFF
bGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChtZXRhVGFnLCBmYWxzZSk7CisgICAg
UmVmPEhUTUxFbGVtZW50PiBtZXRhRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUJ1aWx0aW5I
VE1MRWxlbWVudChtZXRhVGFnKTsKICAgICBtZXRhRWxlbWVudC0+c2V0QXR0cmlidXRlKG5hbWVB
dHRyLCAidmlld3BvcnQiKTsKICAgICBtZXRhRWxlbWVudC0+c2V0QXR0cmlidXRlKGNvbnRlbnRB
dHRyLCAid2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSx1c2VyLXNjYWxhYmxlPW5v
Iik7CiAgICAgaGVhZEVsZW1lbnQtPmFwcGVuZENoaWxkKFdURk1vdmUobWV0YUVsZW1lbnQpLCBJ
R05PUkVfRVhDRVBUSU9OKTsKICNlbmRpZgogCi0gICAgUmVmPEVsZW1lbnQ+IGJvZHkgPSBkb2N1
bWVudCgpLT5jcmVhdGVFbGVtZW50KGJvZHlUYWcsIGZhbHNlKTsKKyAgICBSZWY8SFRNTEVsZW1l
bnQ+IGJvZHkgPSBkb2N1bWVudCgpLT5jcmVhdGVCdWlsdGluSFRNTEVsZW1lbnQoYm9keVRhZyk7
CiAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENoaWxkKGJvZHkuY29weVJlZigpLCBJR05PUkVfRVhD
RVBUSU9OKTsKIAotICAgIFJlZjxFbGVtZW50PiBtZWRpYUVsZW1lbnQgPSBkb2N1bWVudCgpLT5j
cmVhdGVFbGVtZW50KHZpZGVvVGFnLCBmYWxzZSk7CisgICAgUmVmPEhUTUxFbGVtZW50PiBtZWRp
YUVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVCdWlsdGluSFRNTEVsZW1lbnQodmlkZW9UYWcp
OwogCiAgICAgbV9tZWRpYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVmlkZW9FbGVtZW50PihtZWRp
YUVsZW1lbnQucHRyKCkpOwogICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdHRyaWJ1dGUoY29udHJv
bHNBdHRyLCBlbXB0eUF0b20pOwpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgTWVkaWFEb2N1bWVu
dFBhcnNlcjo6Y3JlYXRlRG9jdW1lbnQKICNlbmRpZgogICAgIG1fbWVkaWFFbGVtZW50LT5zZXRB
dHRyaWJ1dGUoc3R5bGVBdHRyLCBlbGVtZW50U3R5bGUudG9TdHJpbmcoKSk7CiAKLSAgICBSZWY8
RWxlbWVudD4gc291cmNlRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoc291cmNl
VGFnLCBmYWxzZSk7CisgICAgUmVmPEhUTUxFbGVtZW50PiBzb3VyY2VFbGVtZW50ID0gZG9jdW1l
bnQoKS0+Y3JlYXRlQnVpbHRpbkhUTUxFbGVtZW50KHNvdXJjZVRhZyk7CiAgICAgSFRNTFNvdXJj
ZUVsZW1lbnQmIHNvdXJjZSA9IGRvd25jYXN0PEhUTUxTb3VyY2VFbGVtZW50Pihzb3VyY2VFbGVt
ZW50LmdldCgpKTsKICAgICBzb3VyY2Uuc2V0U3JjKGRvY3VtZW50KCktPnVybCgpKTsKIApAQCAt
MjQwLDIwICsyNDAsMTkgQEAgdm9pZCBNZWRpYURvY3VtZW50OjpyZXBsYWNlTWVkaWFFbGVtZW50
VAogICAgIGh0bWxCb2R5LT5zZXRBdHRyaWJ1dGUobWFyZ2luaGVpZ2h0QXR0ciwgIjAiKTsKIAog
ICAgIGlmIChIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQgPSBkZXNjZW5kYW50VmlkZW9F
bGVtZW50KCpodG1sQm9keSkpIHsKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBE
b2N1bWVudDo6Y3JlYXRlRWxlbWVudChlbWJlZFRhZywgZmFsc2UpOwotICAgICAgICBIVE1MRW1i
ZWRFbGVtZW50JiBlbWJlZEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRW1iZWRFbGVtZW50PigqZWxl
bWVudCk7CisgICAgICAgIFJlZjxIVE1MRW1iZWRFbGVtZW50PiBlbWJlZEVsZW1lbnQgPSBIVE1M
RW1iZWRFbGVtZW50OjpjcmVhdGUoZW1iZWRUYWcsICp0aGlzLCBmYWxzZSk7CiAKLSAgICAgICAg
ZW1iZWRFbGVtZW50LnNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsICIxMDAlIik7Ci0gICAgICAgIGVt
YmVkRWxlbWVudC5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgIjEwMCUiKTsKLSAgICAgICAgZW1i
ZWRFbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lQXR0ciwgInBsdWdpbiIpOwotICAgICAgICBlbWJl
ZEVsZW1lbnQuc2V0QXR0cmlidXRlKHNyY0F0dHIsIHVybCgpLnN0cmluZygpKTsKKyAgICAgICAg
ZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCAiMTAwJSIpOworICAgICAgICBl
bWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCAiMTAwJSIpOworICAgICAgICBl
bWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1lQXR0ciwgInBsdWdpbiIpOworICAgICAgICBl
bWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShzcmNBdHRyLCB1cmwoKS5zdHJpbmcoKSk7CiAKICAg
ICAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gbG9hZGVyKCk7CiAgICAgICAg
IEFTU0VSVChkb2N1bWVudExvYWRlcik7CiAgICAgICAgIGlmIChkb2N1bWVudExvYWRlcikKLSAg
ICAgICAgICAgIGVtYmVkRWxlbWVudC5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsIGRvY3VtZW50TG9h
ZGVyLT53cml0ZXIoKS5taW1lVHlwZSgpKTsKKyAgICAgICAgICAgIGVtYmVkRWxlbWVudC0+c2V0
QXR0cmlidXRlKHR5cGVBdHRyLCBkb2N1bWVudExvYWRlci0+d3JpdGVyKCkubWltZVR5cGUoKSk7
CiAKLSAgICAgICAgdmlkZW9FbGVtZW50LT5wYXJlbnROb2RlKCktPnJlcGxhY2VDaGlsZChlbWJl
ZEVsZW1lbnQsICp2aWRlb0VsZW1lbnQsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICB2aWRl
b0VsZW1lbnQtPnBhcmVudE5vZGUoKS0+cmVwbGFjZUNoaWxkKFdURk1vdmUoZW1iZWRFbGVtZW50
KSwgKnZpZGVvRWxlbWVudCwgSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcAkocmV2aXNpb24gMTk1MzE1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDkgKzY3LDkgQEAgcHJpdmF0ZToKIAogdm9pZCBQbHVnaW5Eb2N1bWVudFBhcnNlcjo6Y3Jl
YXRlRG9jdW1lbnRTdHJ1Y3R1cmUoKQogewotICAgIFJlZjxFbGVtZW50PiByb290RWxlbWVudCA9
IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgZmFsc2UpOworICAgIFJlZjxIVE1M
SHRtbEVsZW1lbnQ+IHJvb3RFbGVtZW50ID0gSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUoKmRvY3Vt
ZW50KCkpOwogICAgIGRvY3VtZW50KCktPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LmNvcHlSZWYo
KSwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgZG93bmNhc3Q8SFRNTEh0bWxFbGVtZW50Pihyb290
RWxlbWVudC5nZXQoKSkuaW5zZXJ0ZWRCeVBhcnNlcigpOworICAgIHJvb3RFbGVtZW50LT5pbnNl
cnRlZEJ5UGFyc2VyKCk7CiAKICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAg
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+aW5qZWN0VXNlclNjcmlwdHMoSW5qZWN0QXREb2N1bWVudFN0
YXJ0KTsKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBQbHVnaW5Eb2N1bWVudFBhcnNlcjo6Y3JlYXRl
RG9jdW1lbgogICAgIGRvY3VtZW50KCktPnByb2Nlc3NWaWV3cG9ydChBU0NJSUxpdGVyYWwoInVz
ZXItc2NhbGFibGU9bm8iKSwgVmlld3BvcnRBcmd1bWVudHM6OlBsdWdpbkRvY3VtZW50KTsKICNl
bmRpZgogCi0gICAgUmVmPEVsZW1lbnQ+IGJvZHkgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50
KGJvZHlUYWcsIGZhbHNlKTsKKyAgICBSZWY8SFRNTEVsZW1lbnQ+IGJvZHkgPSBkb2N1bWVudCgp
LT5jcmVhdGVCdWlsdGluSFRNTEVsZW1lbnQoYm9keVRhZyk7CiAgICAgYm9keS0+c2V0QXR0cmli
dXRlKG1hcmdpbndpZHRoQXR0ciwgQXRvbWljU3RyaW5nKCIwIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCkpOwogICAgIGJvZHktPnNldEF0dHJpYnV0ZShtYXJnaW5oZWlnaHRB
dHRyLCBBdG9taWNTdHJpbmcoIjAiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtODksOSArODksOSBAQCB2b2lkIFBsdWdpbkRvY3Vt
ZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVuCiAjZW5kaWYKIAogICAgIHJvb3RFbGVtZW50LT5hcHBl
bmRDaGlsZChib2R5LmNvcHlSZWYoKSwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgICAgIAotICAg
IFJlZjxFbGVtZW50PiBlbWJlZEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KGVt
YmVkVGFnLCBmYWxzZSk7Ci0gICAgICAgIAorCisgICAgUmVmPEhUTUxFbGVtZW50PiBlbWJlZEVs
ZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVCdWlsdGluSFRNTEVsZW1lbnQoZW1iZWRUYWcpOwor
CiAgICAgbV9lbWJlZEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRW1iZWRFbGVtZW50PihlbWJlZEVs
ZW1lbnQucHRyKCkpOwogICAgIG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRy
LCAiMTAwJSIpOwogICAgIG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwg
IjEwMCUiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rp
b25TaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
Q29uc3RydWN0aW9uU2l0ZS5jcHAJKHJldmlzaW9uIDE5NTMxNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjE4LDcgKzYxOCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OnRha2VBbGxDaGlsZHIK
IFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUVsZW1lbnQo
QXRvbWljSFRNTFRva2VuKiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkp
CiB7CiAgICAgUXVhbGlmaWVkTmFtZSB0YWdOYW1lKG51bGxBdG9tLCB0b2tlbi0+bmFtZSgpLCBu
YW1lc3BhY2VVUkkpOwotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gb3duZXJEb2N1bWVu
dEZvckN1cnJlbnROb2RlKCkuY3JlYXRlRWxlbWVudCh0YWdOYW1lLCB0cnVlKTsKKyAgICBSZWZQ
dHI8RWxlbWVudD4gZWxlbWVudCA9IG93bmVyRG9jdW1lbnRGb3JDdXJyZW50Tm9kZSgpLmNyZWF0
ZUJ1aWx0aW5FbGVtZW50KHRhZ05hbWUsIHRydWUpOwogICAgIHNldEF0dHJpYnV0ZXMoZWxlbWVu
dC5nZXQoKSwgdG9rZW4sIG1fcGFyc2VyQ29udGVudFBvbGljeSk7CiAgICAgcmV0dXJuIGVsZW1l
bnQucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAkocmV2aXNpb24gMTk1MzE1KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MDUsMTMgKzgwNSwxMyBAQCB2b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25z
VHJhY2tMaXN0CiAgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlcyogY2FwdGlvblByZWZlcmVuY2Vz
ID0gZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7CiAgICAg
VmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiB0cmFja3NGb3JNZW51ID0gY2FwdGlvblByZWZlcmVu
Y2VzLT5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7CiAKLSAgICBSZWY8RWxlbWVu
dD4gY2FwdGlvbnNIZWFkZXIgPSBkb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnQoaDNUYWcsIEFTU0VS
VF9OT19FWENFUFRJT04pOworICAgIFJlZjxIVE1MRWxlbWVudD4gY2FwdGlvbnNIZWFkZXIgPSBk
b2N1bWVudCgpLmNyZWF0ZUJ1aWx0aW5IVE1MRWxlbWVudChoM1RhZyk7CiAgICAgY2FwdGlvbnNI
ZWFkZXItPmFwcGVuZENoaWxkKGRvY3VtZW50KCkuY3JlYXRlVGV4dE5vZGUodGV4dFRyYWNrU3Vi
dGl0bGVzVGV4dCgpKSk7CiAgICAgYXBwZW5kQ2hpbGQoV1RGTW92ZShjYXB0aW9uc0hlYWRlcikp
OwotICAgIFJlZjxFbGVtZW50PiBjYXB0aW9uc01lbnVMaXN0ID0gZG9jdW1lbnQoKS5jcmVhdGVF
bGVtZW50KHVsVGFnLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBSZWY8SFRNTEVsZW1lbnQ+
IGNhcHRpb25zTWVudUxpc3QgPSBkb2N1bWVudCgpLmNyZWF0ZUJ1aWx0aW5IVE1MRWxlbWVudCh1
bFRhZyk7CiAKICAgICBmb3IgKGF1dG8mIHRleHRUcmFjayA6IHRyYWNrc0Zvck1lbnUpIHsKLSAg
ICAgICAgUmVmPEVsZW1lbnQ+IG1lbnVJdGVtID0gZG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50KGxp
VGFnLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgUmVmPEhUTUxFbGVtZW50PiBtZW51
SXRlbSA9IGRvY3VtZW50KCkuY3JlYXRlQnVpbHRpbkhUTUxFbGVtZW50KGxpVGFnKTsKICAgICAg
ICAgbWVudUl0ZW0tPmFwcGVuZENoaWxkKGRvY3VtZW50KCkuY3JlYXRlVGV4dE5vZGUoY2FwdGlv
blByZWZlcmVuY2VzLT5kaXNwbGF5TmFtZUZvclRyYWNrKHRleHRUcmFjay5nZXQoKSkpKTsKICAg
ICAgICAgY2FwdGlvbnNNZW51TGlzdC0+YXBwZW5kQ2hpbGQobWVudUl0ZW0uY29weVJlZigpKTsK
ICAgICAgICAgbV9tZW51SXRlbXMuYXBwZW5kKG1lbnVJdGVtLnB0cigpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRURWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRFbGVtZW50LmNwcAkocmV2aXNpb24gMTk1MzE1
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTUsMjQgKzk1LDI0IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IFdlYlZU
VEVsZW1lbnQ6OmMKICAgICBjYXNlIFdlYlZUVE5vZGVUeXBlQ2xhc3M6CiAgICAgY2FzZSBXZWJW
VFROb2RlVHlwZUxhbmd1YWdlOgogICAgIGNhc2UgV2ViVlRUTm9kZVR5cGVWb2ljZToKLSAgICAg
ICAgaHRtbEVsZW1lbnQgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUVsZW1lbnQoSFRNTE5h
bWVzOjpzcGFuVGFnLCBkb2N1bWVudCk7CisgICAgICAgIGh0bWxFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlQnVpbHRpbkhUTUxFbGVtZW50KEhUTUxOYW1lczo6c3BhblRhZyk7CiAgICAgICAgIGh0
bWxFbGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0aXRsZUF0dHIsIGdldEF0dHJpYnV0
ZSh2b2ljZUF0dHJpYnV0ZU5hbWUoKSkpOwogICAgICAgICBodG1sRWxlbWVudC0+c2V0QXR0cmli
dXRlKEhUTUxOYW1lczo6bGFuZ0F0dHIsIGdldEF0dHJpYnV0ZShsYW5nQXR0cmlidXRlTmFtZSgp
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViVlRUTm9kZVR5cGVJdGFsaWM6Ci0gICAg
ICAgIGh0bWxFbGVtZW50ID0gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVFbGVtZW50KEhUTUxO
YW1lczo6aVRhZywgZG9jdW1lbnQpOworICAgICAgICBodG1sRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUJ1aWx0aW5IVE1MRWxlbWVudChIVE1MTmFtZXM6OmlUYWcpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFdlYlZUVE5vZGVUeXBlQm9sZDoKLSAgICAgICAgaHRtbEVsZW1lbnQgPSBIVE1M
RWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUVsZW1lbnQoSFRNTE5hbWVzOjpiVGFnLCBkb2N1bWVudCk7
CisgICAgICAgIGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlQnVpbHRpbkhUTUxFbGVtZW50
KEhUTUxOYW1lczo6YlRhZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViVlRUTm9kZVR5
cGVVbmRlcmxpbmU6Ci0gICAgICAgIGh0bWxFbGVtZW50ID0gSFRNTEVsZW1lbnRGYWN0b3J5Ojpj
cmVhdGVFbGVtZW50KEhUTUxOYW1lczo6dVRhZywgZG9jdW1lbnQpOworICAgICAgICBodG1sRWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUJ1aWx0aW5IVE1MRWxlbWVudChIVE1MTmFtZXM6OnVUYWcp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdlYlZUVE5vZGVUeXBlUnVieToKLSAgICAgICAg
aHRtbEVsZW1lbnQgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUVsZW1lbnQoSFRNTE5hbWVz
OjpydWJ5VGFnLCBkb2N1bWVudCk7CisgICAgICAgIGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlQnVpbHRpbkhUTUxFbGVtZW50KEhUTUxOYW1lczo6cnVieVRhZyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgV2ViVlRUTm9kZVR5cGVSdWJ5VGV4dDoKLSAgICAgICAgaHRtbEVsZW1lbnQg
PSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUVsZW1lbnQoSFRNTE5hbWVzOjpydFRhZywgZG9j
dW1lbnQpOworICAgICAgICBodG1sRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUJ1aWx0aW5IVE1M
RWxlbWVudChIVE1MTmFtZXM6OnJ0VGFnKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MRXJyb3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS94bWwvWE1MRXJyb3JzLmNwcAkocmV2aXNpb24gMTk1MzE1KQorKysgU291cmNlL1dl
YkNvcmUveG1sL1hNTEVycm9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE3ICs4NiwxNyBA
QCB2b2lkIFhNTEVycm9yczo6YXBwZW5kRXJyb3JNZXNzYWdlKGNvbnN0CiAKIHN0YXRpYyBpbmxp
bmUgUmVmPEVsZW1lbnQ+IGNyZWF0ZVhIVE1MUGFyc2VyRXJyb3JIZWFkZXIoRG9jdW1lbnQqIGRv
YywgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2VzKQogewotICAgIFJlZjxFbGVtZW50PiByZXBv
cnRFbGVtZW50ID0gZG9jLT5jcmVhdGVFbGVtZW50KFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJw
YXJzZXJlcnJvciIsIHhodG1sTmFtZXNwYWNlVVJJKSwgdHJ1ZSk7CisgICAgUmVmPEVsZW1lbnQ+
IHJlcG9ydEVsZW1lbnQgPSBkb2MtPmNyZWF0ZUJ1aWx0aW5FbGVtZW50KFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sICJwYXJzZXJlcnJvciIsIHhodG1sTmFtZXNwYWNlVVJJKSwgdHJ1ZSk7CiAKICAg
ICBWZWN0b3I8QXR0cmlidXRlPiByZXBvcnRBdHRyaWJ1dGVzOwogICAgIHJlcG9ydEF0dHJpYnV0
ZXMuYXBwZW5kKEF0dHJpYnV0ZShzdHlsZUF0dHIsICJkaXNwbGF5OiBibG9jazsgd2hpdGUtc3Bh
Y2U6IHByZTsgYm9yZGVyOiAycHggc29saWQgI2M3NzsgcGFkZGluZzogMCAxZW0gMCAxZW07IG1h
cmdpbjogMWVtOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRkOyBjb2xvcjogYmxhY2siKSk7CiAgICAg
cmVwb3J0RWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyhyZXBvcnRBdHRyaWJ1dGVzKTsKIAot
ICAgIGF1dG8gaDMgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoaDNUYWcsIHRydWUpOworICAgIGF1dG8g
aDMgPSBkb2MtPmNyZWF0ZUJ1aWx0aW5FbGVtZW50KGgzVGFnLCB0cnVlKTsKICAgICByZXBvcnRF
bGVtZW50LT5wYXJzZXJBcHBlbmRDaGlsZChoMy5jb3B5UmVmKCkpOwogICAgIGgzLT5wYXJzZXJB
cHBlbmRDaGlsZChkb2MtPmNyZWF0ZVRleHROb2RlKCJUaGlzIHBhZ2UgY29udGFpbnMgdGhlIGZv
bGxvd2luZyBlcnJvcnM6IikpOwogCi0gICAgYXV0byBmaXhlZCA9IGRvYy0+Y3JlYXRlRWxlbWVu
dChkaXZUYWcsIHRydWUpOworICAgIGF1dG8gZml4ZWQgPSBkb2MtPmNyZWF0ZUJ1aWx0aW5FbGVt
ZW50KGRpdlRhZywgdHJ1ZSk7CiAgICAgVmVjdG9yPEF0dHJpYnV0ZT4gZml4ZWRBdHRyaWJ1dGVz
OwogICAgIGZpeGVkQXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlKHN0eWxlQXR0ciwgImZvbnQt
ZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTJweCIpKTsKICAgICBmaXhlZC0+cGFyc2VyU2V0
QXR0cmlidXRlcyhmaXhlZEF0dHJpYnV0ZXMpOwpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBp
bmxpbmUgUmVmPEVsZW1lbnQ+IGNyZWF0ZVhIVE1MUGEKIAogICAgIGZpeGVkLT5wYXJzZXJBcHBl
bmRDaGlsZChkb2MtPmNyZWF0ZVRleHROb2RlKGVycm9yTWVzc2FnZXMpKTsKIAotICAgIGgzID0g
ZG9jLT5jcmVhdGVFbGVtZW50KGgzVGFnLCB0cnVlKTsKKyAgICBoMyA9IGRvYy0+Y3JlYXRlQnVp
bHRpbkVsZW1lbnQoaDNUYWcsIHRydWUpOwogICAgIHJlcG9ydEVsZW1lbnQtPnBhcnNlckFwcGVu
ZENoaWxkKGgzLmdldCgpKTsKICAgICBoMy0+cGFyc2VyQXBwZW5kQ2hpbGQoZG9jLT5jcmVhdGVU
ZXh0Tm9kZSgiQmVsb3cgaXMgYSByZW5kZXJpbmcgb2YgdGhlIHBhZ2UgdXAgdG8gdGhlIGZpcnN0
IGVycm9yLiIpKTsKIApAQCAtMTIwLDIxICsxMjAsMjEgQEAgdm9pZCBYTUxFcnJvcnM6Omluc2Vy
dEVycm9yTWVzc2FnZUJsb2NrKAogICAgIC8vIENyZWF0ZSBlbGVtZW50cyBmb3IgZGlzcGxheQog
ICAgIFJlZlB0cjxFbGVtZW50PiBkb2N1bWVudEVsZW1lbnQgPSBtX2RvY3VtZW50LT5kb2N1bWVu
dEVsZW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkgewotICAgICAgICBhdXRvIHJv
b3RFbGVtZW50ID0gbV9kb2N1bWVudC0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCB0cnVlKTsKLSAg
ICAgICAgYXV0byBib2R5ID0gbV9kb2N1bWVudC0+Y3JlYXRlRWxlbWVudChib2R5VGFnLCB0cnVl
KTsKKyAgICAgICAgYXV0byByb290RWxlbWVudCA9IG1fZG9jdW1lbnQtPmNyZWF0ZUJ1aWx0aW5F
bGVtZW50KGh0bWxUYWcsIHRydWUpOworICAgICAgICBhdXRvIGJvZHkgPSBtX2RvY3VtZW50LT5j
cmVhdGVCdWlsdGluRWxlbWVudChib2R5VGFnLCB0cnVlKTsKICAgICAgICAgcm9vdEVsZW1lbnQt
PnBhcnNlckFwcGVuZENoaWxkKGJvZHkuY29weVJlZigpKTsKICAgICAgICAgbV9kb2N1bWVudC0+
cGFyc2VyQXBwZW5kQ2hpbGQocm9vdEVsZW1lbnQuY29weVJlZigpKTsKICAgICAgICAgZG9jdW1l
bnRFbGVtZW50ID0gV1RGTW92ZShib2R5KTsKICAgICB9CiAgICAgZWxzZSBpZiAoZG9jdW1lbnRF
bGVtZW50LT5uYW1lc3BhY2VVUkkoKSA9PSBTVkdOYW1lczo6c3ZnTmFtZXNwYWNlVVJJKSB7Ci0g
ICAgICAgIGF1dG8gcm9vdEVsZW1lbnQgPSBtX2RvY3VtZW50LT5jcmVhdGVFbGVtZW50KGh0bWxU
YWcsIHRydWUpOwotICAgICAgICBhdXRvIGhlYWQgPSBtX2RvY3VtZW50LT5jcmVhdGVFbGVtZW50
KGhlYWRUYWcsIHRydWUpOwotICAgICAgICBhdXRvIHN0eWxlID0gbV9kb2N1bWVudC0+Y3JlYXRl
RWxlbWVudChzdHlsZVRhZywgdHJ1ZSk7CisgICAgICAgIGF1dG8gcm9vdEVsZW1lbnQgPSBtX2Rv
Y3VtZW50LT5jcmVhdGVCdWlsdGluRWxlbWVudChodG1sVGFnLCB0cnVlKTsKKyAgICAgICAgYXV0
byBoZWFkID0gbV9kb2N1bWVudC0+Y3JlYXRlQnVpbHRpbkVsZW1lbnQoaGVhZFRhZywgdHJ1ZSk7
CisgICAgICAgIGF1dG8gc3R5bGUgPSBtX2RvY3VtZW50LT5jcmVhdGVCdWlsdGluRWxlbWVudChz
dHlsZVRhZywgdHJ1ZSk7CiAgICAgICAgIGhlYWQtPnBhcnNlckFwcGVuZENoaWxkKHN0eWxlLmNv
cHlSZWYoKSk7CiAgICAgICAgIHN0eWxlLT5wYXJzZXJBcHBlbmRDaGlsZChtX2RvY3VtZW50LT5j
cmVhdGVUZXh0Tm9kZSgiaHRtbCwgYm9keSB7IGhlaWdodDogMTAwJSB9IHBhcnNlcmVycm9yICsg
c3ZnIHsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJSB9IikpOwogICAgICAgICBzdHlsZS0+Zmlu
aXNoUGFyc2luZ0NoaWxkcmVuKCk7CiAgICAgICAgIHJvb3RFbGVtZW50LT5wYXJzZXJBcHBlbmRD
aGlsZChoZWFkLmNvcHlSZWYoKSk7Ci0gICAgICAgIGF1dG8gYm9keSA9IG1fZG9jdW1lbnQtPmNy
ZWF0ZUVsZW1lbnQoYm9keVRhZywgdHJ1ZSk7CisgICAgICAgIGF1dG8gYm9keSA9IG1fZG9jdW1l
bnQtPmNyZWF0ZUJ1aWx0aW5FbGVtZW50KGJvZHlUYWcsIHRydWUpOwogICAgICAgICByb290RWxl
bWVudC0+cGFyc2VyQXBwZW5kQ2hpbGQoYm9keS5jb3B5UmVmKCkpOwogCiAgICAgICAgIG1fZG9j
dW1lbnQtPnBhcnNlclJlbW92ZUNoaWxkKCpkb2N1bWVudEVsZW1lbnQpOwpAQCAtMTUyLDcgKzE1
Miw3IEBAIHZvaWQgWE1MRXJyb3JzOjppbnNlcnRFcnJvck1lc3NhZ2VCbG9jaygKICAgICBpZiAo
bV9kb2N1bWVudC0+dHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkgewogICAgICAgICBWZWN0b3I8
QXR0cmlidXRlPiBhdHRyaWJ1dGVzOwogICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1
dGUoc3R5bGVBdHRyLCAid2hpdGUtc3BhY2U6IG5vcm1hbCIpKTsKLSAgICAgICAgYXV0byBwYXJh
Z3JhcGggPSBtX2RvY3VtZW50LT5jcmVhdGVFbGVtZW50KHBUYWcsIHRydWUpOworICAgICAgICBh
dXRvIHBhcmFncmFwaCA9IG1fZG9jdW1lbnQtPmNyZWF0ZUJ1aWx0aW5FbGVtZW50KHBUYWcsIHRy
dWUpOwogICAgICAgICBwYXJhZ3JhcGgtPnBhcnNlclNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7
CiAgICAgICAgIHBhcmFncmFwaC0+cGFyc2VyQXBwZW5kQ2hpbGQobV9kb2N1bWVudC0+Y3JlYXRl
VGV4dE5vZGUoIlRoaXMgZG9jdW1lbnQgd2FzIGNyZWF0ZWQgYXMgdGhlIHJlc3VsdCBvZiBhbiBY
U0wgdHJhbnNmb3JtYXRpb24uIFRoZSBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBnaXZlbiBhcmUg
ZnJvbSB0aGUgdHJhbnNmb3JtZWQgcmVzdWx0LiIpKTsKICAgICAgICAgcmVwb3J0RWxlbWVudC0+
cGFyc2VyQXBwZW5kQ2hpbGQoV1RGTW92ZShwYXJhZ3JhcGgpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAJ
KHJldmlzaW9uIDE5NTMxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXJMaWJ4bWwyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIwLDcgKzgyMCw3IEBAIHZv
aWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKGMKICAgICBtX3Nhd0ZpcnN0RWxl
bWVudCA9IHRydWU7CiAKICAgICBRdWFsaWZpZWROYW1lIHFOYW1lKHByZWZpeCwgbG9jYWxOYW1l
LCB1cmkpOwotICAgIGF1dG8gbmV3RWxlbWVudCA9IG1fY3VycmVudE5vZGUtPmRvY3VtZW50KCku
Y3JlYXRlRWxlbWVudChxTmFtZSwgdHJ1ZSk7CisgICAgYXV0byBuZXdFbGVtZW50ID0gbV9jdXJy
ZW50Tm9kZS0+ZG9jdW1lbnQoKS5jcmVhdGVCdWlsdGluRWxlbWVudChxTmFtZSwgdHJ1ZSk7CiAK
ICAgICBWZWN0b3I8QXR0cmlidXRlPiBwcmVmaXhlZEF0dHJpYnV0ZXM7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTU0NDApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxNi0w
MS0yMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBEb2N1bWVu
dDo6Y3JlYXRlRWxlbWVudCBoYXMgdG9vIG1hbnkgZnVuY3Rpb24gb3ZlcnJpZGVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMzNDIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9QREYvRGVwcmVjYXRlZFBERlBsdWdpbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luOjpQREZQbHVnaW4pOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLm1tOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OlBERlBsdWdpbik6CisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6Y3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0pOgorICAgICAgICAq
IFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbToKKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbjo6Y3JlYXRlQW5ub3RhdGlv
bkVsZW1lbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4
dEFubm90YXRpb24ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpblRleHRBbm5vdGF0aW9u
OjpjcmVhdGVBbm5vdGF0aW9uRWxlbWVudCk6CisKIDIwMTYtMDEtMjEgIERlYW4gSmFja3NvbiAg
PGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgX2FsbG93c0RvdWJsZVRhcEdlc3R1cmVz
IGltcGxlbWVudGF0aW9uIG91dCBvZiBjYXRlZ29yeQpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvRGVwcmVjYXRlZFBERlBsdWdp
bi5tbQkocmV2aXNpb24gMTk1MzE1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MjEsMTAg
KzUyMSwxMCBAQCBQREZQbHVnaW46OlBERlBsdWdpbihXZWJGcmFtZSogZnJhbWUpCiAKICAgICBp
ZiAoc3VwcG9ydHNGb3JtcygpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHdlYkZy
YW1lKCktPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpOwotICAgICAgICBtX2Fubm90YXRpb25Db250
YWluZXIgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChkaXZUYWcsIGZhbHNlKTsKKyAgICAgICAg
bV9hbm5vdGF0aW9uQ29udGFpbmVyID0gZG9jdW1lbnQtPmNyZWF0ZUJ1aWx0aW5IVE1MRWxlbWVu
dChkaXZUYWcpOwogICAgICAgICBtX2Fubm90YXRpb25Db250YWluZXItPnNldEF0dHJpYnV0ZShp
ZEF0dHIsICJhbm5vdGF0aW9uQ29udGFpbmVyIik7CiAKLSAgICAgICAgUmVmPEVsZW1lbnQ+IGFu
bm90YXRpb25TdHlsZUVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChzdHlsZVRhZywg
ZmFsc2UpOworICAgICAgICBSZWY8SFRNTEVsZW1lbnQ+IGFubm90YXRpb25TdHlsZUVsZW1lbnQg
PSBkb2N1bWVudC0+Y3JlYXRlQnVpbHRpbkhUTUxFbGVtZW50KHN0eWxlVGFnKTsKICAgICAgICAg
YW5ub3RhdGlvblN0eWxlRWxlbWVudC0+c2V0VGV4dENvbnRlbnQoYW5ub3RhdGlvblN0eWxlLCBB
U1NFUlRfTk9fRVhDRVBUSU9OKTsKIAogICAgICAgICBtX2Fubm90YXRpb25Db250YWluZXItPmFw
cGVuZENoaWxkKFdURk1vdmUoYW5ub3RhdGlvblN0eWxlRWxlbWVudCkpOwpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHJl
dmlzaW9uIDE5NTMxNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYv
UERGUGx1Z2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MTcsNyArNTE3LDcgQEAgUERGUGx1Z2lu
OjpQREZQbHVnaW4oV2ViRnJhbWUqIGZyYW1lKQogICAgIGlmIChzdXBwb3J0c0Zvcm1zKCkpIHsK
ICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPmRv
Y3VtZW50KCk7CiAKLSAgICAgICAgUmVmPEVsZW1lbnQ+IGFubm90YXRpb25TdHlsZUVsZW1lbnQg
PSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudChzdHlsZVRhZywgZmFsc2UpOworICAgICAgICBSZWY8
SFRNTEVsZW1lbnQ+IGFubm90YXRpb25TdHlsZUVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlQnVp
bHRpbkhUTUxFbGVtZW50KHN0eWxlVGFnKTsKICAgICAgICAgYW5ub3RhdGlvblN0eWxlRWxlbWVu
dC0+c2V0VGV4dENvbnRlbnQoYW5ub3RhdGlvblN0eWxlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
IAogICAgICAgICBkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKS0+YXBwZW5kQ2hpbGQoYW5ub3Rh
dGlvblN0eWxlRWxlbWVudC5nZXQoKSk7CkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBQREZQbHVn
aW46OmNyZWF0ZVBhc3N3b3JkRW50cnlGb3JtKAogICAgICAgICByZXR1cm47CiAKICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAg
ICBtX3Bhc3N3b3JkQ29udGFpbmVyID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoZGl2VGFnLCBm
YWxzZSk7CisgICAgbV9wYXNzd29yZENvbnRhaW5lciA9IGRvY3VtZW50LT5jcmVhdGVCdWlsdGlu
SFRNTEVsZW1lbnQoZGl2VGFnKTsKICAgICBtX3Bhc3N3b3JkQ29udGFpbmVyLT5zZXRBdHRyaWJ1
dGUoaWRBdHRyLCAicGFzc3dvcmRDb250YWluZXIiKTsKIAogICAgIG1fcGFzc3dvcmRGaWVsZCA9
IFBERlBsdWdpblBhc3N3b3JkRmllbGQ6OmNyZWF0ZShtX3BkZkxheWVyQ29udHJvbGxlci5nZXQo
KSwgdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tCShyZXZp
c2lvbiAxOTUzMTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTcxLDkgKzcxLDcg
QEAgUGFzc1JlZlB0cjxFbGVtZW50PiBQREZQbHVnaW5DaG9pY2VBbm5vdAogICAgIERvY3VtZW50
JiBkb2N1bWVudCA9IHBhcmVudCgpLT5kb2N1bWVudCgpOwogICAgIFBERkFubm90YXRpb25DaG9p
Y2VXaWRnZXQgKmNob2ljZUFubm90YXRpb24gPSB0aGlzLT5jaG9pY2VBbm5vdGF0aW9uKCk7CiAK
LSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoc2Vs
ZWN0VGFnLCBmYWxzZSk7Ci0KLSAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpOworICAgIFJlZjxIVE1MRWxl
bWVudD4gc3R5bGVkRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUJ1aWx0aW5IVE1MRWxlbWVudChz
ZWxlY3RUYWcpOwogCiAgICAgLy8gRklYTUU6IE1hdGNoIGZvbnQgd2VpZ2h0IGFuZCBzdHlsZSBh
cyB3ZWxsPwogICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlDb2xvciwgY29sb3JGcm9tTlNDb2xvcihjaG9pY2VBbm5vdGF0aW9uLmZvbnRDb2xvciku
c2VyaWFsaXplZCgpKTsKQEAgLTgzLDcgKzgxLDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBQREZQ
bHVnaW5DaG9pY2VBbm5vdAogICAgIE5TU3RyaW5nICpzZWxlY3RlZENob2ljZSA9IGNob2ljZUFu
bm90YXRpb24uc3RyaW5nVmFsdWU7CiAKICAgICBmb3IgKE5TU3RyaW5nICpjaG9pY2UgaW4gY2hv
aWNlcykgewotICAgICAgICBSZWY8RWxlbWVudD4gY2hvaWNlT3B0aW9uID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudChvcHRpb25UYWcsIGZhbHNlKTsKKyAgICAgICAgUmVmPEhUTUxFbGVtZW50PiBj
aG9pY2VPcHRpb24gPSBkb2N1bWVudC5jcmVhdGVCdWlsdGluSFRNTEVsZW1lbnQob3B0aW9uVGFn
KTsKICAgICAgICAgY2hvaWNlT3B0aW9uLT5zZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBjaG9pY2Up
OwogICAgICAgICBjaG9pY2VPcHRpb24tPnNldFRleHRDb250ZW50KGNob2ljZSwgQVNTRVJUX05P
X0VYQ0VQVElPTik7CiAKQEAgLTkzLDcgKzkxLDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBQREZQ
bHVnaW5DaG9pY2VBbm5vdAogICAgICAgICBzdHlsZWRFbGVtZW50LT5hcHBlbmRDaGlsZChXVEZN
b3ZlKGNob2ljZU9wdGlvbikpOwogICAgIH0KIAotICAgIHJldHVybiBlbGVtZW50OworICAgIHJl
dHVybiBzdHlsZWRFbGVtZW50LnB0cigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luVGV4dEFu
bm90YXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5tbQkocmV2aXNpb24gMTk1MzE1KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5UZXh0QW5ub3Rh
dGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtODEsMzMgKzgxLDMxIEBAIFBERlBsdWdpblRleHRB
bm5vdGF0aW9uOjp+UERGUGx1Z2luVGV4dEEKIAogUGFzc1JlZlB0cjxFbGVtZW50PiBQREZQbHVn
aW5UZXh0QW5ub3RhdGlvbjo6Y3JlYXRlQW5ub3RhdGlvbkVsZW1lbnQoKQogewotICAgIFJlZlB0
cjxFbGVtZW50PiBlbGVtZW50OworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudDsKIAog
ICAgIERvY3VtZW50JiBkb2N1bWVudCA9IHBhcmVudCgpLT5kb2N1bWVudCgpOwogICAgIFBERkFu
bm90YXRpb25UZXh0V2lkZ2V0ICp0ZXh0QW5ub3RhdGlvbiA9IHRoaXMtPnRleHRBbm5vdGF0aW9u
KCk7CiAgICAgYm9vbCBpc011bHRpbGluZSA9IHRleHRBbm5vdGF0aW9uLmlzTXVsdGlsaW5lOwog
CiAgICAgaWYgKGlzTXVsdGlsaW5lKQotICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCh0ZXh0YXJlYVRhZywgZmFsc2UpOworICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlQnVpbHRpbkhUTUxFbGVtZW50KHRleHRhcmVhVGFnKTsKICAgICBlbHNlCi0gICAgICAg
IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGlucHV0VGFnLCBmYWxzZSk7CisgICAg
ICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVCdWlsdGluSFRNTEVsZW1lbnQoaW5wdXRUYWcp
OwogCiAgICAgZWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkua2V5ZG93bkV2
ZW50LCBldmVudExpc3RlbmVyKCksIGZhbHNlKTsKIAotICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxl
ZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSk7Ci0K
ICAgICBpZiAoIXRleHRBbm5vdGF0aW9uKQogICAgICAgICByZXR1cm4gZWxlbWVudDsKIAogICAg
IC8vIEZJWE1FOiBNYXRjaCBmb250IHdlaWdodCBhbmQgc3R5bGUgYXMgd2VsbD8KLSAgICBzdHls
ZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IsIGNvbG9y
RnJvbU5TQ29sb3IodGV4dEFubm90YXRpb24uZm9udENvbG9yKS5zZXJpYWxpemVkKCkpOwotICAg
IHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFt
aWx5LCB0ZXh0QW5ub3RhdGlvbi5mb250LmZhbWlseU5hbWUpOwotICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24sIGNzc0FsaWdubWVu
dFZhbHVlRm9yTlNUZXh0QWxpZ25tZW50KHRleHRBbm5vdGF0aW9uLmFsaWdubWVudCkpOworICAg
IGVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgY29sb3JG
cm9tTlNDb2xvcih0ZXh0QW5ub3RhdGlvbi5mb250Q29sb3IpLnNlcmlhbGl6ZWQoKSk7CisgICAg
ZWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHRl
eHRBbm5vdGF0aW9uLmZvbnQuZmFtaWx5TmFtZSk7CisgICAgZWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRBbGlnbiwgY3NzQWxpZ25tZW50VmFsdWVGb3JOU1Rl
eHRBbGlnbm1lbnQodGV4dEFubm90YXRpb24uYWxpZ25tZW50KSk7CiAKICAgICBpZiAoaXNNdWx0
aWxpbmUpCi0gICAgICAgIGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KHN0eWxlZEVsZW1l
bnQpLT5zZXRWYWx1ZSh0ZXh0QW5ub3RhdGlvbi5zdHJpbmdWYWx1ZSk7CisgICAgICAgIGRvd25j
YXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCplbGVtZW50KS5zZXRWYWx1ZSh0ZXh0QW5ub3RhdGlv
bi5zdHJpbmdWYWx1ZSk7CiAgICAgZWxzZQotICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PihzdHlsZWRFbGVtZW50KS0+c2V0VmFsdWUodGV4dEFubm90YXRpb24uc3RyaW5nVmFsdWUp
OworICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkuc2V0VmFsdWUo
dGV4dEFubm90YXRpb24uc3RyaW5nVmFsdWUpOwogCiAgICAgcmV0dXJuIGVsZW1lbnQ7CiB9Cg==
</data>
<flag name="review"
          id="294461"
          type_id="1"
          status="-"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>