<?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>143544</bug_id>
          
          <creation_ts>2015-04-08 17:38:38 -0700</creation_ts>
          <short_desc>Allow LaunchServices to handle URLs on link navigations</short_desc>
          <delta_ts>2015-04-10 22:08:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1083789</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-04-08 17:38:38 -0700</bug_when>
    <thetext>Allow LaunchServices to handle URLs on link navigations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083790</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-04-08 17:38:57 -0700</bug_when>
    <thetext>&lt;rdar://problem/19446826&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083793</commentid>
    <comment_count>2</comment_count>
      <attachid>250398</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-04-08 17:44:27 -0700</bug_when>
    <thetext>Created attachment 250398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083794</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-08 17:47:21 -0700</bug_when>
    <thetext>Attachment 250398 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Cocoa/NavigationState.mm:231:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/Cocoa/NavigationState.mm:231:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebKit2/UIProcess/Cocoa/NavigationState.mm:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/Cocoa/NavigationState.mm:291:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:912:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:924:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:2365:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 7 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083799</commentid>
    <comment_count>4</comment_count>
      <attachid>250398</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-04-08 18:14:29 -0700</bug_when>
    <thetext>Comment on attachment 250398
Patch

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

&gt; Source/WebCore/platform/spi/ios/LaunchServicesSPI.h:39
&gt; +typedef void (^ LSAppLinkOpenCompletionHandler)(BOOL success, NSError *error);

No space after ^.

&gt; Source/WebKit2/UIProcess/Cocoa/NavigationState.mm:240
&gt; +            dispatch_async(dispatch_get_main_queue(), [completionHandler, success] {
&gt; +                completionHandler(success);
&gt; +            });

This is copying the completion handler on a background queue - that&apos;s not thread safe and will break if the completion handler has bound strings for example. I think you&apos;re going to have to create an std::function pointer and pass it across the thread boundary and then explicitly delete it on the main thread.

&gt; Source/WebKit2/UIProcess/Cocoa/NavigationState.mm:255
&gt; +        tryAppLink(localNavigationAction, [localListener, localNavigationAction] (bool followedLinkToApp) {

What&apos;s ensuring that the web view doesn&apos;t go away while waiting for the completion handler to be invoked?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084336</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-04-10 10:53:39 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 250398 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250398&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/spi/ios/LaunchServicesSPI.h:39
&gt; &gt; +typedef void (^ LSAppLinkOpenCompletionHandler)(BOOL success, NSError *error);
&gt; 
&gt; No space after ^.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/Cocoa/NavigationState.mm:240
&gt; &gt; +            dispatch_async(dispatch_get_main_queue(), [completionHandler, success] {
&gt; &gt; +                completionHandler(success);
&gt; &gt; +            });
&gt; 
&gt; This is copying the completion handler on a background queue - that&apos;s not
&gt; thread safe and will break if the completion handler has bound strings for
&gt; example. I think you&apos;re going to have to create an std::function pointer and
&gt; pass it across the thread boundary and then explicitly delete it on the main
&gt; thread.

Ok. How about if I just use a block?

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/Cocoa/NavigationState.mm:255
&gt; &gt; +        tryAppLink(localNavigationAction, [localListener, localNavigationAction] (bool followedLinkToApp) {
&gt; 
&gt; What&apos;s ensuring that the web view doesn&apos;t go away while waiting for the
&gt; completion handler to be invoked?

Nothing, though that should be fine.  The listener will be invalidated and thus when it is called with success or failure, it will just do nothing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084445</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-04-10 18:45:59 -0700</bug_when>
    <thetext>Committed r182648: &lt;http://trac.webkit.org/changeset/182648&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084477</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-04-10 22:08:35 -0700</bug_when>
    <thetext>Build fix in &lt;http://trac.webkit.org/r182650&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250398</attachid>
            <date>2015-04-08 17:44:27 -0700</date>
            <delta_ts>2015-04-10 18:27:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143544-20150408174337.patch</filename>
            <type>text/plain</type>
            <size>23616</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxODI1NzUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE1LTA0LTA4ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgQWxsb3cgTGF1bmNoU2VydmljZXMgdG8gaGFuZGxlIFVSTHMg
b24gbGluayBuYXZpZ2F0aW9ucworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTk0NDY4MjY+Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM1NDQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QbGF0
Zm9ybS5oOgorICAgICAgICBBZGQgSEFWRSBtYWNybyBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5Lgor
CiAyMDE1LTA0LTA4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
IGFuZCBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFk
ZCBDTWFrZSBidWlsZCBzeXN0ZW0gZm9yIFdpbkNhaXJvIHBvcnQuCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJ
KHJldmlzaW9uIDE4MjU3NSkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUyOCw2ICs1MjgsMTAgQEAKICNkZWZpbmUgV1RGX1VTRV9XRUJfVEhSRUFEIDEK
ICNkZWZpbmUgV1RGX1VTRV9RVUlDS19MT09LIDEKIAorI2lmIF9fSVBIT05FX09TX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDkwMDAwCisjZGVmaW5lIEhBVkVfQVBQX0xJTktTIDEKKyNlbmRpZgor
CiAjaWYgQ1BVKEFSTTY0KQogI2RlZmluZSBFTkFCTEVfSklUX0NPTlNUQU5UX0JMSU5ESU5HIDAK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyNTc1KQorKysgU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDQtMDgg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBBbGxvdyBMYXVuY2hTZXJ2
aWNlcyB0byBoYW5kbGUgVVJMcyBvbiBsaW5rIG5hdmlnYXRpb25zCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8xOTQ0NjgyNj4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MzU0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBsYXRmb3JtL3NwaS9pb3MvTGF1bmNoU2VydmljZXNTUEkuaDogQWRkZWQuCisgICAgICAgIEFk
ZCBuZXcgU1BJIGhlYWRlci4KKwogMjAxNS0wNC0wOCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgRXhwb3NlIHRoZSAiU2hhcmUiIG1lbnUgZm9yIGxpbmtzLCBp
bWFnZXMsIGFuZCBtZWRpYS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4MjU3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjUxNCw2ICsyNTE0LDcgQEAKIAkJN0M0Qzk2REQxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFi
bGVTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDNEM5NkQ5MUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtLmggKi87IH07CiAJ
CTdDNEM5NkRFMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtUmVhZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNEM5NkRBMUFE
NDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtUmVhZGVyLmNwcCAqLzsgfTsKIAkJN0M0
Qzk2REYxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1SZWFkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNEM5NkRCMUFENDQ4MzUw
MDM2NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtUmVhZGVyLmggKi87IH07CisJCTdDNEM5NkUzMUFE
NDRBQkYwMDM2NUE1MCAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0Qzk2RTIxQUQ0NEFCRjAwMzY1QTUwIC8qIExh
dW5jaFNlcnZpY2VzU1BJLmggKi87IH07CiAJCTdDNEVERDc0MUE3QjYwNzgwMDE5OEM0RCAvKiBG
b250Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1tICovOyB9OwogCQk3QzUy
MkQ0QjE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzUyMkQ0OTE1QjQ3N0U4MDA5QjdD
OTUgLyogSW5zcGVjdG9yT3ZlcmxheS5jcHAgKi87IH07CiAJCTdDNTM0M0ZDMTdCNzRCNjMwMDQy
MzJGMCAvKiBKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M1MzQzRkExN0I3NEI2MzAwNDIzMkYwIC8qIEpT
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgKi87IH07CkBAIC01ODU5LDcgKzU4NjAsNyBAQAog
CQlDRTEyNTIzQjFBMTY3MTEwMDA4NjQ0ODAgLyogTlNGaWxlTWFuYWdlclNQSS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UxMjUyM0ExQTE2NzExMDAw
ODY0NDgwIC8qIE5TRmlsZU1hbmFnZXJTUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlDRTEyNTIzRDFBMTY3NkNEMDA4NjQ0ODAgLyogUXVhcnR6
Q29yZVNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0UxMjUyM0MxQTE2NzZDRDAwODY0NDgwIC8qIFF1YXJ0ekNvcmVTUEkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRTEyNTI0MTFBMTZCMUI2MDA4
NjQ0ODAgLyogTWVkaWFQbGF5ZXJTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENFMTI1MjQwMUExNkIxQjYwMDg2NDQ4MCAvKiBNZWRpYVBsYXllclNQ
SS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNF
MTI1MjQzMUExNkMwMUEwMDg2NDQ4MCAvKiBDb3JlVUlTUEkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFMTI1MjQyMUExNkMwMUEwMDg2NDQ4MCAvKiBD
b3JlVUlTUEkuaCAqLzsgfTsKKwkJQ0UxMjUyNDMxQTE2QzAxQTAwODY0NDgwIC8qIENvcmVVSVNQ
SS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UxMjUy
NDIxQTE2QzAxQTAwODY0NDgwIC8qIENvcmVVSVNQSS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNFMTI1MjQ1MUExNkMyMjUwMDg2NDQ4MCAvKiBE
eW5hbWljTGlua2VyU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRTEyNTI0NDFBMTZDMjI1MDA4NjQ0ODAgLyogRHluYW1pY0xpbmtlclNQSS5oICov
OyB9OwogCQlDRTEyNTI0NzFBMTZDMkMyMDA4NjQ0ODAgLyogTlNQb2ludGVyRnVuY3Rpb25zU1BJ
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTEyNTI0
NjFBMTZDMkMyMDA4NjQ0ODAgLyogTlNQb2ludGVyRnVuY3Rpb25zU1BJLmggKi87IH07CiAJCUNF
MTI1MjQ5MUExNkMzQkMwMDg2NDQ4MCAvKiBNb2JpbGVHZXN0YWx0U1BJLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTEyNTI0ODFBMTZDM0JDMDA4NjQ0
ODAgLyogTW9iaWxlR2VzdGFsdFNQSS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC05NzczLDYgKzk3NzQsNyBAQAogCQk3QzRDOTZEOTFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1JlYWRhYmxlU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDNEM5NkRBMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtUmVhZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1SZWFk
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzRDOTZEQjFBRDQ0ODM1MDAz
NjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1JlYWRhYmxlU3RyZWFtUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDNEM5NkUyMUFENDRBQkYwMDM2NUE1MCAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMYXVuY2hTZXJ2aWNlc1NQSS5oOyBw
YXRoID0gaW9zL0xhdW5jaFNlcnZpY2VzU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDNEVERDczMUE3QjYwNzgwMDE5OEM0RCAvKiBGb250Q29jb2EubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGb250Q29jb2EubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNTIyRDQ5MTVCNDc3RTgwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVy
bGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rvck92
ZXJsYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzUyMkQ0QTE1QjQ3OEIy
MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnNwZWN0b3JPdmVybGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xODc1NCwxMCArMTg3NTYsMTEgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUNFMTI1MjQyMUEx
NkMwMUEwMDg2NDQ4MCAvKiBDb3JlVUlTUEkuaCAqLywKIAkJCQlDRUMzMzdBRTFBNDYwODZEMDA5
Qjg1MjMgLyogR3JhcGhpY3NTZXJ2aWNlc1NQSS5oICovLAotCQkJCUNFMTI1MjQ4MUExNkMzQkMw
MDg2NDQ4MCAvKiBNb2JpbGVHZXN0YWx0U1BJLmggKi8sCisJCQkJN0M0Qzk2RTIxQUQ0NEFCRjAw
MzY1QTUwIC8qIExhdW5jaFNlcnZpY2VzU1BJLmggKi8sCiAJCQkJQ0UxMjUyNDAxQTE2QjFCNjAw
ODY0NDgwIC8qIE1lZGlhUGxheWVyU1BJLmggKi8sCi0JCQkJQ0UxMjUyMzgxQTE2NkZBMDAwODY0
NDgwIC8qIFF1aWNrTG9va1NQSS5oICovLAorCQkJCUNFMTI1MjQ4MUExNkMzQkMwMDg2NDQ4MCAv
KiBNb2JpbGVHZXN0YWx0U1BJLmggKi8sCiAJCQkJNkZBRDRBNTYxQTlEMEZBRTAwOUY3RDNDIC8q
IE9wZW5HTEVTU1BJLmggKi8sCisJCQkJQ0UxMjUyMzgxQTE2NkZBMDAwODY0NDgwIC8qIFF1aWNr
TG9va1NQSS5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBpb3M7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjU1MDEsNiArMjU1MDQsNyBAQAogCQkJCUIyRkEzRENGMEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR1BhdGhTZWdMaW5ldG9BYnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEz
REQxMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0REMzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRo
U2VnTGluZXRvSG9yaXpvbnRhbFJlbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0M0Qzk2RTMxQUQ0
NEFCRjAwMzY1QTUwIC8qIExhdW5jaFNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MkZBM0RENTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnTGluZXRvUmVsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMkZBM0RENzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnTGlu
ZXRvVmVydGljYWxBYnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREQ5MEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5oIGluIEhlYWRlcnMgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvaW9zL0xhdW5jaFNlcnZpY2VzU1BJLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2lvcy9MYXVuY2hTZXJ2
aWNlc1NQSS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2lv
cy9MYXVuY2hTZXJ2aWNlc1NQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIExhdW5jaFNlcnZpY2VzU1BJX2gKKyNkZWZpbmUgTGF1bmNoU2Vy
dmljZXNTUElfaAorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2lmIFVT
RShBUFBMRV9JTlRFUk5BTF9TREspCisKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSA5MDAwMAorI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZpY2VzL0xTQXBwTGlua1ByaXYu
aD4KKyNlbmRpZgorCisjZW5kaWYKKwordHlwZWRlZiB2b2lkICheIExTQXBwTGlua09wZW5Db21w
bGV0aW9uSGFuZGxlcikoQk9PTCBzdWNjZXNzLCBOU0Vycm9yICplcnJvcik7CisKKyNpZiAhVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKKworI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDkwMDAwCitAaW50ZXJmYWNlIExTQXBwTGluayA6IE5TT2JqZWN0IDxOU1NlY3VyZUNv
ZGluZz4KK0BlbmQKKworQGludGVyZmFjZSBMU0FwcExpbmsgKERldGFpbHMpCisrICh2b2lkKW9w
ZW5XaXRoVVJMOihOU1VSTCAqKWFVUkwgY29tcGxldGlvbkhhbmRsZXI6KExTQXBwTGlua09wZW5D
b21wbGV0aW9uSGFuZGxlciljb21wbGV0aW9uSGFuZGxlcjsKK0BlbmQKKyNlbmRpZgorCisjZW5k
aWYKKworI2VuZGlmIC8vIExhdW5jaFNlcnZpY2VzU1BJX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE4MjU3NSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDE1LTA0LTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgQWxsb3cgTGF1bmNoU2VydmljZXMgdG8gaGFuZGxlIFVSTHMgb24gbGluayBu
YXZpZ2F0aW9ucworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTk0NDY4MjY+CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM1NDQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9O
YXZpZ2F0aW9uU3RhdGUubW06CisgICAgICAgIChXZWJLaXQ6OnRyeUFwcExpbmspOgorICAgICAg
ICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICBPbmx5IGxldCBMYXVuY2hTZXJ2aWNlcyBo
YXZlIGEgY3JhY2sgYXQgdGhlIFVSTCBpZiB0aGUgbmF2aWdhdGlvbiBpczoKKyAgICAgICAgICAg
IDEpIGEgbWFpbiBmcmFtZSBuYXZpZ2F0aW9uCisgICAgICAgICAgICAyKSBhIHJlc3VsdCBvZiBh
IHVzZXIgZ2VzdHVyZQorCiAyMDE1LTA0LTA4ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxl
LmNvbT4KIAogICAgICAgICBFeHBvc2UgdGhlICJTaGFyZSIgbWVudSBmb3IgbGlua3MsIGltYWdl
cywgYW5kIG1lZGlhLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL05hdmln
YXRpb25TdGF0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvTmF2aWdhdGlvblN0YXRlLm1tCShyZXZpc2lvbiAxODI1NzUpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02
NCw2ICs2NCwxMCBAQAogI2ltcG9ydCA8V2ViQ29yZS9DcmVkZW50aWFsLmg+CiAjaW1wb3J0IDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAorI2lmIEhBVkUoQVBQX0xJTktTKQorI2ltcG9ydCA8V2Vi
Q29yZS9MYXVuY2hTZXJ2aWNlc1NQSS5oPgorI2VuZGlmCisKICNpZiBVU0UoUVVJQ0tfTE9PSykK
ICNpbXBvcnQgIlF1aWNrTG9va0RvY3VtZW50RGF0YS5oIgogI2VuZGlmCkBAIC0yMjQsMjggKzIy
OCw1NiBAQCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6On5OYXZpCiB7CiB9CiAK
K3N0YXRpYyB2b2lkIHRyeUFwcExpbmsoUmVmUHRyPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4gbmF2
aWdhdGlvbkFjdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gY29tcGxldGlvbkhhbmRs
ZXIpCit7CisjaWYgSEFWRShBUFBfTElOS1MpCisgICAgYm9vbCBtYWluRnJhbWVOYXZpZ2F0aW9u
ID0gIW5hdmlnYXRpb25BY3Rpb24tPnRhcmdldEZyYW1lKCkgfHwgbmF2aWdhdGlvbkFjdGlvbi0+
dGFyZ2V0RnJhbWUoKS0+aXNNYWluRnJhbWUoKTsKKyAgICBib29sIGlzUHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlID0gbmF2aWdhdGlvbkFjdGlvbi0+aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAg
ICBpZiAobWFpbkZyYW1lTmF2aWdhdGlvbiAmJiBpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSkgewor
ICAgICAgICBbTFNBcHBMaW5rIG9wZW5XaXRoVVJMOm5hdmlnYXRpb25BY3Rpb24tPnJlcXVlc3Qo
KS51cmwoKSBjb21wbGV0aW9uSGFuZGxlcjpbY29tcGxldGlvbkhhbmRsZXJdKEJPT0wgc3VjY2Vz
cywgTlNFcnJvciAqKSB7CisgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbY29tcGxldGlvbkhhbmRsZXIsIHN1Y2Nlc3NdIHsKKyAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihzdWNjZXNzKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOworfQorCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVu
dDo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXZWJQYWdlUHJveHkmLCBBUEk6Ok5h
dmlnYXRpb25BY3Rpb24mIG5hdmlnYXRpb25BY3Rpb24sIFJlZjxXZWJGcmFtZVBvbGljeUxpc3Rl
bmVyUHJveHk+JiYgbGlzdGVuZXIsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkKIHsKICAgICBpZiAo
IW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkRlY2lzaW9uSGFuZGxlcikgewotICAgICAgICBS
ZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiBuc1VSTFJlcXVlc3QgPSBhZG9wdE5TKHdyYXBwZXIoKkFQ
STo6VVJMUmVxdWVzdDo6Y3JlYXRlKG5hdmlnYXRpb25BY3Rpb24ucmVxdWVzdCgpKS5sZWFrUmVm
KCkpKTsKKyAgICAgICAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4gbG9jYWxOYXZpZ2F0
aW9uQWN0aW9uID0gJm5hdmlnYXRpb25BY3Rpb247CisgICAgICAgIFJlZlB0cjxXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHk+IGxvY2FsTGlzdGVuZXIgPSBXVEY6Om1vdmUobGlzdGVuZXIpOwog
Ci0gICAgICAgIGlmICghbmF2aWdhdGlvbkFjdGlvbi50YXJnZXRGcmFtZSgpKSB7Ci0gICAgICAg
ICAgICBsaXN0ZW5lci0+dXNlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAg
ICAgICAgdHJ5QXBwTGluayhsb2NhbE5hdmlnYXRpb25BY3Rpb24sIFtsb2NhbExpc3RlbmVyLCBs
b2NhbE5hdmlnYXRpb25BY3Rpb25dIChib29sIGZvbGxvd2VkTGlua1RvQXBwKSB7CisgICAgICAg
ICAgICBpZiAoZm9sbG93ZWRMaW5rVG9BcHApIHsKKyAgICAgICAgICAgICAgICBsb2NhbExpc3Rl
bmVyLT5pZ25vcmUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgaWYgKFtOU1VSTENvbm5lY3Rpb24gY2FuSGFuZGxlUmVxdWVzdDpuc1VSTFJlcXVl
c3QuZ2V0KCldKSB7Ci0gICAgICAgICAgICBsaXN0ZW5lci0+dXNlKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbG9jYWxOYXZpZ2F0aW9uQWN0aW9u
LT50YXJnZXRGcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgbG9jYWxMaXN0ZW5lci0+dXNlKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBS
ZXRhaW5QdHI8TlNVUkxSZXF1ZXN0PiBuc1VSTFJlcXVlc3QgPSBhZG9wdE5TKHdyYXBwZXIoKkFQ
STo6VVJMUmVxdWVzdDo6Y3JlYXRlKGxvY2FsTmF2aWdhdGlvbkFjdGlvbi0+cmVxdWVzdCgpKS5s
ZWFrUmVmKCkpKTsKKyAgICAgICAgICAgIGlmIChbTlNVUkxDb25uZWN0aW9uIGNhbkhhbmRsZVJl
cXVlc3Q6bnNVUkxSZXF1ZXN0LmdldCgpXSkgeworICAgICAgICAgICAgICAgIGxvY2FsTGlzdGVu
ZXItPnVzZSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAogI2lm
IFBMQVRGT1JNKE1BQykKLSAgICAgICAgLy8gQSBmaWxlIFVSTCBzaG91bGRuJ3QgZmFsbCB0aHJv
dWdoIHRvIGhlcmUsIGJ1dCBpZiBpdCBkaWQsCi0gICAgICAgIC8vIGl0IHdvdWxkIGJlIGEgc2Vj
dXJpdHkgcmlzayB0byBvcGVuIGl0LgotICAgICAgICBpZiAoIVtbbnNVUkxSZXF1ZXN0IFVSTF0g
aXNGaWxlVVJMXSkKLSAgICAgICAgICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBv
cGVuVVJMOltuc1VSTFJlcXVlc3QgVVJMXV07CisgICAgICAgICAgICAvLyBBIGZpbGUgVVJMIHNo
b3VsZG4ndCBmYWxsIHRocm91Z2ggdG8gaGVyZSwgYnV0IGlmIGl0IGRpZCwKKyAgICAgICAgICAg
IC8vIGl0IHdvdWxkIGJlIGEgc2VjdXJpdHkgcmlzayB0byBvcGVuIGl0LgorICAgICAgICAgICAg
aWYgKCFbW25zVVJMUmVxdWVzdCBVUkxdIGlzRmlsZVVSTF0pCisgICAgICAgICAgICAgICAgW1tO
U1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5VUkw6W25zVVJMUmVxdWVzdCBVUkxdXTsK
ICNlbmRpZgotICAgICAgICBsaXN0ZW5lci0+aWdub3JlKCk7CisgICAgICAgICAgICBsb2NhbExp
c3RlbmVyLT5pZ25vcmUoKTsKKyAgICAgICAgfSk7CisKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMjUzLDE0ICsyODUsMjMgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25D
bGllbnQ6OgogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAK
KyAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiBsb2NhbE5hdmlnYXRpb25BY3Rpb24g
PSAmbmF2aWdhdGlvbkFjdGlvbjsKICAgICBSZWZQdHI8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5PiBsb2NhbExpc3RlbmVyID0gV1RGOjptb3ZlKGxpc3RlbmVyKTsKICAgICBSZWZQdHI8Q29t
cGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcj4gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2Fs
bENoZWNrZXI6OmNyZWF0ZShuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcih3ZWJW
aWV3OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246ZGVjaXNpb25IYW5kbGVyOikpOwot
ICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZp
ZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rp
b24pIGRlY2lzaW9uSGFuZGxlcjpbbG9jYWxMaXN0ZW5lciwgY2hlY2tlcl0oV0tOYXZpZ2F0aW9u
QWN0aW9uUG9saWN5IGFjdGlvblBvbGljeSkgeworICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2Vi
VmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIGRlY2lzaW9uSGFuZGxlcjpbbG9jYWxM
aXN0ZW5lciwgbG9jYWxOYXZpZ2F0aW9uQWN0aW9uLCBjaGVja2VyXShXS05hdmlnYXRpb25BY3Rp
b25Qb2xpY3kgYWN0aW9uUG9saWN5KSB7CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0
aW9uSGFuZGxlcigpOwogCiAgICAgICAgIHN3aXRjaCAoYWN0aW9uUG9saWN5KSB7CiAgICAgICAg
IGNhc2UgV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3c6Ci0gICAgICAgICAgICBsb2NhbExp
c3RlbmVyLT51c2UoKTsKKyAgICAgICAgICAgIHRyeUFwcExpbmsobG9jYWxOYXZpZ2F0aW9uQWN0
aW9uLCBbbG9jYWxMaXN0ZW5lcl0gKGJvb2wgZm9sbG93ZWRMaW5rVG9BcHApIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZm9sbG93ZWRMaW5rVG9BcHApIHsKKyAgICAgICAgICAgICAgICAgICAgbG9j
YWxMaXN0ZW5lci0+aWdub3JlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBsb2NhbExpc3RlbmVyLT51c2UoKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5Q2FuY2VsOgpJbmRleDogU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwko
cmV2aXNpb24gMTgyNTc1KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTUtMDQtMDggIFNhbSBXZWluaWcgIDxzYW1Ad2Vi
a2l0Lm9yZz4KKworICAgICAgICBBbGxvdyBMYXVuY2hTZXJ2aWNlcyB0byBoYW5kbGUgVVJMcyBv
biBsaW5rIG5hdmlnYXRpb25zCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xOTQ0NjgyNj4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzU0NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ29uZmlndXJh
dGlvbnMvV2ViS2l0TGVnYWN5LnhjY29uZmlnOgorICAgICAgICBMaW5rIE1vYmlsZUNvcmVTZXJ2
aWNlcy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAg
ICAgIChzaG91bGRUcnlBcHBMaW5rKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToK
KyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRVcFBvbGljeUxpc3RlbmVyKToKKyAg
ICAgICAgT25seSBsZXQgTGF1bmNoU2VydmljZXMgaGF2ZSBhIGNyYWNrIGF0IHRoZSBVUkwgaWYg
dGhlIG5hdmlnYXRpb24gaXM6CisgICAgICAgICAgICAxKSBhIG1haW4gZnJhbWUgbmF2aWdhdGlv
bgorICAgICAgICAgICAgMikgYSByZXN1bHQgb2YgYSB1c2VyIGdlc3R1cmUKKwogMjAxNS0wNC0w
OCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRXhwb3NlIHRo
ZSAiU2hhcmUiIG1lbnUgZm9yIGxpbmtzLCBpbWFnZXMsIGFuZCBtZWRpYS4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25zL1dlYktpdExlZ2FjeS54Y2NvbmZpZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9Db25maWd1cmF0aW9ucy9XZWJLaXRMZWdhY3kueGNj
b25maWcJKHJldmlzaW9uIDE4MjU3NSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRp
b25zL1dlYktpdExlZ2FjeS54Y2NvbmZpZwkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBA
QCBJTlNUQUxMSERSU19TQ1JJUFRfUEhBU0UgPSBZRVM7CiBQUk9EVUNUX05BTUUgPSBXZWJLaXRM
ZWdhY3k7CiBVTUJSRUxMQV9GUkFNRVdPUktTX0RJUiA9ICQoUFJPRFVDVElPTl9GUkFNRVdPUktT
X0RJUikvV2ViS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3M7CiAKLU9USEVSX0xE
RkxBR1Nbc2RrPWlwaG9uZSpdID0gJChpbmhlcml0ZWQpIC1sb2JqYyAtbHNxbGl0ZTMgLWZyYW1l
d29yayBDRk5ldHdvcmsgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiAtZnJhbWV3b3JrIENvcmVH
cmFwaGljcyAtZnJhbWV3b3JrIENvcmVUZXh0IC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJhbWV3
b3JrIEdyYXBoaWNzU2VydmljZXMgLWZyYW1ld29yayBJbWFnZUlPIC1mcmFtZXdvcmsgT3BlbkdM
RVMgLWxNb2JpbGVHZXN0YWx0OworT1RIRVJfTERGTEFHU1tzZGs9aXBob25lKl0gPSAkKGluaGVy
aXRlZCkgLWxvYmpjIC1sc3FsaXRlMyAtZnJhbWV3b3JrIENGTmV0d29yayAtZnJhbWV3b3JrIENv
cmVGb3VuZGF0aW9uIC1mcmFtZXdvcmsgQ29yZUdyYXBoaWNzIC1mcmFtZXdvcmsgQ29yZVRleHQg
LWZyYW1ld29yayBGb3VuZGF0aW9uIC1mcmFtZXdvcmsgR3JhcGhpY3NTZXJ2aWNlcyAtZnJhbWV3
b3JrIEltYWdlSU8gLWZyYW1ld29yayBPcGVuR0xFUyAtZnJhbWV3b3JrIE1vYmlsZUNvcmVTZXJ2
aWNlcyAtbE1vYmlsZUdlc3RhbHQ7CiBPVEhFUl9MREZMQUdTW3Nkaz1tYWNvc3gqXSA9ICQoaW5o
ZXJpdGVkKSAtZnJhbWV3b3JrIENhcmJvbiAtZnJhbWV3b3JrIENvY29hIC1mcmFtZXdvcmsgRGlz
a0FyYml0cmF0aW9uIC1mcmFtZXdvcmsgSU9LaXQgLWZyYW1ld29yayBPcGVuR0w7CiAKIFNFQ1RP
UkRFUl9GTEFHUyA9ICQoU0VDVE9SREVSX0ZMQUdTXyQoQ09ORklHVVJBVElPTikpOwpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5oCShyZXZpc2lvbiAxODI1NzUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEs
NyArMjIxLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgUmVtb3RlQVhPYmplY3RSZWYgYWNj
ZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KICAgICAKLSAg
ICBSZXRhaW5QdHI8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lcj4gc2V0VXBQb2xpY3lMaXN0ZW5lcihX
ZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0aW9uKTsKKyAgICBSZXRhaW5QdHI8V2ViRnJhbWVQb2xp
Y3lMaXN0ZW5lcj4gc2V0VXBQb2xpY3lMaXN0ZW5lcihXZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0
aW9uLCBOU1VSTCAqYXBwTGlua1VSTCA9IG5pbCk7CiAKICAgICBOU0RpY3Rpb25hcnkgKmFjdGlv
bkRpY3Rpb25hcnkoY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbiYsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6Rm9ybVN0YXRlPikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQko
cmV2aXNpb24gMTgyNTc1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsMTEgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg+CiAjZW5kaWYK
IAorI2lmIEhBVkUoQVBQX0xJTktTKQorI2ltcG9ydCA8V2ViQ29yZS9MYXVuY2hTZXJ2aWNlc1NQ
SS5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkUnVuLmg+CisjZW5kaWYKKwogI2lm
IEVOQUJMRShDT05URU5UX0ZJTFRFUklORykKICNpbXBvcnQgPFdlYkNvcmUvUG9saWN5Q2hlY2tl
ci5oPgogI2VuZGlmCkBAIC0xNzIsOSArMTc3LDE2IEBAIE5TU3RyaW5nICpXZWJQbHVnaW5Db250
YWluZXJLZXkgPSBAIldlYlAKIEBpbnRlcmZhY2UgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lciA6IE5T
T2JqZWN0IDxXZWJQb2xpY3lEZWNpc2lvbkxpc3RlbmVyLCBXZWJGb3JtU3VibWlzc2lvbkxpc3Rl
bmVyPiB7CiAgICAgUmVmUHRyPEZyYW1lPiBfZnJhbWU7CiAgICAgRnJhbWVQb2xpY3lGdW5jdGlv
biBfcG9saWN5RnVuY3Rpb247CisjaWYgSEFWRShBUFBfTElOS1MpCisgICAgUmV0YWluUHRyPE5T
VVJMPiBfYXBwTGlua1VSTDsKKyNlbmRpZgogfQogCiAtIChpZClpbml0V2l0aEZyYW1lOihGcmFt
ZSopZnJhbWUgcG9saWN5RnVuY3Rpb246KEZyYW1lUG9saWN5RnVuY3Rpb24pcG9saWN5RnVuY3Rp
b247CisjaWYgSEFWRShBUFBfTElOS1MpCistIChpZClpbml0V2l0aEZyYW1lOihGcmFtZSopZnJh
bWUgcG9saWN5RnVuY3Rpb246KEZyYW1lUG9saWN5RnVuY3Rpb24pcG9saWN5RnVuY3Rpb24gYXBw
TGlua1VSTDooTlNVUkwgKil1cmw7CisjZW5kaWYKKwogLSAodm9pZClpbnZhbGlkYXRlOwogCiBA
ZW5kCkBAIC04NzEsMjQgKzg4Myw0NSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERlY2lkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaXNpb25MaXN0ZW5l
cjpzZXRVcFBvbGljeUxpc3RlbmVyKFdURjo6bW92ZShmdW5jdGlvbikpLmdldCgpXTsKIH0KIAor
CitzdGF0aWMgQk9PTCBzaG91bGRUcnlBcHBMaW5rKFdlYlZpZXcgKndlYlZpZXcsIGNvbnN0IE5h
dmlnYXRpb25BY3Rpb24mIGFjdGlvbiwgRnJhbWUqIHRhcmdldEZyYW1lKQoreworI2lmIEhBVkUo
QVBQX0xJTktTKQorICAgIEJPT0wgbWFpbkZyYW1lTmF2aWdhdGlvbiA9ICF0YXJnZXRGcmFtZSB8
fCB0YXJnZXRGcmFtZS0+aXNNYWluRnJhbWUoKTsKKyAgICBpZiAoIW1haW5GcmFtZU5hdmlnYXRp
b24pCisgICAgICAgIHJldHVybiBOTzsKKworICAgIGlmICghYWN0aW9uLnByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSgpKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICByZXR1cm4gWUVTOworI2Vsc2UK
KyAgICByZXR1cm4gTk87CisjZW5kaWYKK30KKwogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oY29uc3QgTmF2aWdhdGlvbkFj
dGlvbiYgYWN0aW9uLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8
Rm9ybVN0YXRlPiBmb3JtU3RhdGUsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLCBGcmFtZVBvbGlj
eUZ1bmN0aW9uIGZ1bmN0aW9uKQogewogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3
KG1fd2ViRnJhbWUuZ2V0KCkpOworICAgIEJPT0wgdHJ5QXBwTGluayA9IHNob3VsZFRyeUFwcExp
bmsod2ViVmlldywgYWN0aW9uLCBudWxscHRyKTsKKwogICAgIFtbd2ViVmlldyBfcG9saWN5RGVs
ZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldwogICAgICAgICAgICAgZGVjaWRlUG9saWN5
Rm9yTmV3V2luZG93QWN0aW9uOmFjdGlvbkRpY3Rpb25hcnkoYWN0aW9uLCBmb3JtU3RhdGUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJl
cXVlc3QoVXBkYXRlSFRUUEJvZHkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdG
cmFtZU5hbWU6ZnJhbWVOYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2lzaW9uTGlz
dGVuZXI6c2V0VXBQb2xpY3lMaXN0ZW5lcihXVEY6Om1vdmUoZnVuY3Rpb24pKS5nZXQoKV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2lzaW9uTGlzdGVuZXI6c2V0VXBQb2xpY3lMaXN0
ZW5lcihXVEY6Om1vdmUoZnVuY3Rpb24pLCB0cnlBcHBMaW5rID8gKE5TVVJMICopcmVxdWVzdC51
cmwoKSA6IG5pbCkuZ2V0KCldOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oY29uc3QgTmF2aWdhdGlvbkFjdGlv
biYgYWN0aW9uLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9y
bVN0YXRlPiBmb3JtU3RhdGUsIEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24pCiB7CiAgICAg
V2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CisgICAgQk9P
TCB0cnlBcHBMaW5rID0gc2hvdWxkVHJ5QXBwTGluayh3ZWJWaWV3LCBhY3Rpb24sIGNvcmUobV93
ZWJGcmFtZS5nZXQoKSkpOworCiAgICAgW1t3ZWJWaWV3IF9wb2xpY3lEZWxlZ2F0ZUZvcndhcmRl
cl0gd2ViVmlldzp3ZWJWaWV3CiAgICAgICAgICAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbjphY3Rpb25EaWN0aW9uYXJ5KGFjdGlvbiwgZm9ybVN0YXRlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVl
c3QoVXBkYXRlSFRUUEJvZHkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmcmFtZTptX3dlYkZyYW1lLmdldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVjaXNpb25MaXN0ZW5lcjpzZXRVcFBvbGljeUxpc3RlbmVyKFdURjo6bW92ZShmdW5jdGlv
bikpLmdldCgpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpc2lvbkxpc3Rl
bmVyOnNldFVwUG9saWN5TGlzdGVuZXIoV1RGOjptb3ZlKGZ1bmN0aW9uKSwgdHJ5QXBwTGluayA/
IChOU1VSTCAqKXJlcXVlc3QudXJsKCkgOiBuaWwpLmdldCgpXTsKIH0KIAogdm9pZCBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6Y2FuY2VsUG9saWN5Q2hlY2soKQpAQCAtMTQ3MiwxMiArMTUwNSwxNyBA
QCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEJlCiB7CiB9CiAKLVJldGFp
blB0cjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyPiBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2V0VXBQ
b2xpY3lMaXN0ZW5lcihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uKQorUmV0YWluUHRyPFdl
YkZyYW1lUG9saWN5TGlzdGVuZXI+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRVcFBvbGljeUxp
c3RlbmVyKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIE5TVVJMICphcHBMaW5rVVJMKQog
ewogICAgIC8vIEZJWE1FOiA8cmRhcjovLzU2MzQzODE+IFdlIG5lZWQgdG8gc3VwcG9ydCBtdWx0
aXBsZSBhY3RpdmUgcG9saWN5IGxpc3RlbmVycy4KICAgICBbbV9wb2xpY3lMaXN0ZW5lciBpbnZh
bGlkYXRlXTsKIAotICAgIG1fcG9saWN5TGlzdGVuZXIgPSBhZG9wdE5TKFtbV2ViRnJhbWVQb2xp
Y3lMaXN0ZW5lciBhbGxvY10gaW5pdFdpdGhGcmFtZTpjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpIHBv
bGljeUZ1bmN0aW9uOmZ1bmN0aW9uXSk7CisjaWYgSEFWRShBUFBfTElOS1MpCisgICAgaWYgKGFw
cExpbmtVUkwpCisgICAgICAgIG1fcG9saWN5TGlzdGVuZXIgPSBhZG9wdE5TKFtbV2ViRnJhbWVQ
b2xpY3lMaXN0ZW5lciBhbGxvY10gaW5pdFdpdGhGcmFtZTpjb3JlKG1fd2ViRnJhbWUuZ2V0KCkp
IHBvbGljeUZ1bmN0aW9uOmZ1bmN0aW9uIGFwcExpbmtVUkw6YXBwTGlua1VSTF0pOworICAgIGVs
c2UKKyNlbmRpZgorICAgICAgICBtX3BvbGljeUxpc3RlbmVyID0gYWRvcHROUyhbW1dlYkZyYW1l
UG9saWN5TGlzdGVuZXIgYWxsb2NdIGluaXRXaXRoRnJhbWU6Y29yZShtX3dlYkZyYW1lLmdldCgp
KSBwb2xpY3lGdW5jdGlvbjpmdW5jdGlvbl0pOwogCiAgICAgcmV0dXJuIG1fcG9saWN5TGlzdGVu
ZXI7CiB9CkBAIC0yMjcxLDYgKzIzMDksMTkgQEAgLSAoaWQpaW5pdFdpdGhGcmFtZTooRnJhbWUq
KWZyYW1lIHBvbGljeQogICAgIHJldHVybiBzZWxmOwogfQogCisjaWYgSEFWRShBUFBfTElOS1Mp
CistIChpZClpbml0V2l0aEZyYW1lOihGcmFtZSopZnJhbWUgcG9saWN5RnVuY3Rpb246KEZyYW1l
UG9saWN5RnVuY3Rpb24pcG9saWN5RnVuY3Rpb24gYXBwTGlua1VSTDooTlNVUkwgKilhcHBMaW5r
VVJMCit7CisgICAgc2VsZiA9IFtzZWxmIGluaXRXaXRoRnJhbWU6ZnJhbWUgcG9saWN5RnVuY3Rp
b246cG9saWN5RnVuY3Rpb25dOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIF9hcHBMaW5rVVJMID0gYXBwTGlua1VSTDsKKworICAgIHJldHVybiBzZWxmOworfQor
I2VuZGlmCisKIC0gKHZvaWQpaW52YWxpZGF0ZQogewogICAgIF9mcmFtZSA9IG51bGxwdHI7CkBA
IC0yMzA5LDYgKzIzNjAsMjAgQEAgLSAodm9pZClkb3dubG9hZAogCiAtICh2b2lkKXVzZQogewor
I2lmIEhBVkUoQVBQX0xJTktTKQorICAgIGlmIChfYXBwTGlua1VSTCAmJiBfZnJhbWUpIHsKKyAg
ICAgICAgW0xTQXBwTGluayBvcGVuV2l0aFVSTDpfYXBwTGlua1VSTC5nZXQoKSBjb21wbGV0aW9u
SGFuZGxlcjpeKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqKSB7CisgICAgICAgICAgICBXZWJUaHJl
YWRSdW4oXnsKKyAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgICAgICAgICAg
ICAgW3NlbGYgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbjpQb2xpY3lJZ25vcmVdOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgW3NlbGYgcmVjZWl2ZWRQb2xpY3lEZWNp
c2lvbjpQb2xpY3lVc2VdOworICAgICAgICAgICAgfSk7CisgICAgICAgIH1dOworICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmCisKICAgICBbc2VsZiByZWNlaXZlZFBvbGljeURlY2lzaW9u
OlBvbGljeVVzZV07CiB9CiAK
</data>
<flag name="review"
          id="275185"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>