<?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>133986</bug_id>
          
          <creation_ts>2014-06-17 10:34:16 -0700</creation_ts>
          <short_desc>Teach run-{safari, webkit-app} about iOS Simulator</short_desc>
          <delta_ts>2014-06-20 10:23:28 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>iPhone / iPad</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="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aestes</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dfarler</cc>
    
    <cc>mitz</cc>
    
    <cc>mrowe</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1016152</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-06-17 10:34:16 -0700</bug_when>
    <thetext>We should make run-{safari, webkit-app} able to launch Safari on iOS or an existing iOS WebKit-based app in the iOS Simulator using the built WebKit framework.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016153</commentid>
    <comment_count>1</comment_count>
      <attachid>233242</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-06-17 10:36:54 -0700</bug_when>
    <thetext>Created attachment 233242
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016567</commentid>
    <comment_count>2</comment_count>
      <attachid>233242</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-06-18 15:52:09 -0700</bug_when>
    <thetext>Comment on attachment 233242
Patch

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

r=me

&gt; Tools/ChangeLog:8
&gt; +        Extract the logic from old-run-webkit-tests to install an launch {DumpRenderTree, WebKitTestRunnerApp}.app

Typo:  &quot;an&quot; =&gt; &quot;and&quot;

&gt; Tools/ChangeLog:25
&gt; +        (mobilesafariBundle): Added.

Nit:  mobileSafariBundle()?

&gt; Tools/ChangeLog:29
&gt; +        (loadIPhoneSimulatorNotificationIfNeeded): Added.

Can we rename this to loadIOSSimulatorNotificationIfNeeded()?

I guess this would require the Perl module to be renamed, too, unless we wanted to update this code first, then change the Perl module at a later time.

I&apos;m okay either way (not renaming it now, or renaming the webkitdirs.pm code in anticipation of renaming the module later).

&gt; Tools/ChangeLog:34
&gt; +        (findOrCreateSimulatorForIPhoneDevice): Added.

Can we rename this to findOrCreateSimulatorForIOSDevice()?

&gt; Tools/Scripts/run-webkit-app:53
&gt; +if (willUseIOSDeviceSDKWhenBuilding()) {
&gt; +    die &quot;Only running app in iOS Simulator is supported now.&quot;;
&gt; +}
&gt; +if (willUseIOSSimulatorSDKWhenBuilding()) {
&gt; +    # FIXME: We should ensure that $appPath is a path to an app bundle as opposed to the actual executable file.
&gt; +    exit exitStatus(runIOSWebKitApp($appPath));
&gt; +}
&gt;  exit exitStatus(runMacWebKitApp($appPath, USE_OPEN_COMMAND));

It seems like this &apos;switch&apos; code could be extracted into a method in webkitdirs.pm, since there is similar code in runSafari().

Not necessary to land this patch, though.

&gt; Tools/Scripts/webkitdirs.pm:63
&gt; +       &amp;findOrCreateSimulatorForIPhoneDevice

IPhone =&gt; IOS

&gt; Tools/Scripts/webkitdirs.pm:102
&gt; +my $didLoadIPhoneSimulatorNotification;

IPhone =&gt; IOS (if we&apos;re okay renaming this before the Perl module)

&gt; Tools/Scripts/webkitdirs.pm:2156
&gt; +    # Use MobileSafari.app in product directory if present (good for Safari development team).

Nit: Parenthetical text in comment probably isn&apos;t necessary here.

&gt; Tools/Scripts/webkitdirs.pm:2163
&gt; +sub plistPathFromBundle($)

Should this be named plistPathFromIOSBundle() since Mac OS X bundles are usually deeper (with the interesting stuff under Contents)?

&gt; Tools/Scripts/webkitdirs.pm:2171
&gt; +sub appIdentiferFromBundle($)

Should this be named appIdentiferFromIOSBundle() since Mac OS X bundles are usually deeper (with the interesting stuff under Contents)?

&gt; Tools/Scripts/webkitdirs.pm:2179
&gt; +sub appDisplayNameFromBundle($)

Should this be named appDisplayNameFromIOSBundle() since Mac OS X bundles are usually deeper (with the interesting stuff under Contents)?

&gt; Tools/Scripts/webkitdirs.pm:2221
&gt; +    return (grep {$_-&gt;{name} eq $simulatorName} iOSSimulatorDevices())[0];

Might be useful to warn() if more than one item is returned here (which would indicate we&apos;re creating duplicate devices):
(grep {$_-&gt;{name} eq $simulatorName} iOSSimulatorDevices())

&gt; Tools/Scripts/webkitdirs.pm:2284
&gt; +    my ($appBundle, $simulatedDevice, $simulatorOptions) = @_;

This needs a &quot;require Foundation;&quot; line in the method in case it&apos;s called before &quot;require IPhoneSimulatorNotification;&quot; (which is what make this code work in old-run-webkit-tests).

This code is all PerlObjC bridge code, and will fail if the Foundation module is not included before it&apos;s run.  (And we don&apos;t want &quot;use Foundation;&quot; here since that&apos;s a compile-time directive for Perl and will break everyone that doesn&apos;t have the Foundation module.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016685</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-06-19 09:47:48 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; Tools/ChangeLog:8
&gt; &gt; +        Extract the logic from old-run-webkit-tests to install an launch {DumpRenderTree, WebKitTestRunnerApp}.app
&gt; 
&gt; Typo:  &quot;an&quot; =&gt; &quot;and&quot;
&gt; 

Will fix.

&gt; &gt; Tools/ChangeLog:25
&gt; &gt; +        (mobilesafariBundle): Added.
&gt; 
&gt; Nit:  mobileSafariBundle()?
&gt; 

Will fix.

&gt; &gt; Tools/ChangeLog:29
&gt; &gt; +        (loadIPhoneSimulatorNotificationIfNeeded): Added.
&gt; 
&gt; Can we rename this to loadIOSSimulatorNotificationIfNeeded()?
&gt; 
&gt; I guess this would require the Perl module to be renamed, too, unless we wanted to update this code first, then change the Perl module at a later time.
&gt; 
&gt; I&apos;m okay either way (not renaming it now, or renaming the webkitdirs.pm code in anticipation of renaming the module later).
&gt; 

I&apos;m going to defer renaming this function and the Perl module to bug #134062 so as to keep the focus of this patch on teaching run-{safari, webkit-app} about iOS Simulator.

&gt; &gt; Tools/ChangeLog:34
&gt; &gt; +        (findOrCreateSimulatorForIPhoneDevice): Added.
&gt; 
&gt; Can we rename this to findOrCreateSimulatorForIOSDevice()?
&gt; 

Will rename to findOrCreateSimulatorForIOSDevice().

&gt; &gt; Tools/Scripts/run-webkit-app:53
&gt; &gt; +if (willUseIOSDeviceSDKWhenBuilding()) {
&gt; &gt; +    die &quot;Only running app in iOS Simulator is supported now.&quot;;
&gt; &gt; +}
&gt; &gt; +if (willUseIOSSimulatorSDKWhenBuilding()) {
&gt; &gt; +    # FIXME: We should ensure that $appPath is a path to an app bundle as opposed to the actual executable file.
&gt; &gt; +    exit exitStatus(runIOSWebKitApp($appPath));
&gt; &gt; +}
&gt; &gt;  exit exitStatus(runMacWebKitApp($appPath, USE_OPEN_COMMAND));
&gt; 
&gt; It seems like this &apos;switch&apos; code could be extracted into a method in webkitdirs.pm, since there is similar code in runSafari().
&gt; 
&gt; Not necessary to land this patch, though.
&gt; 

Will extract common code into a shared subroutine called webkitdirs::runIOSWebKitApp that will be used by both this script and webkitdirs::runSafari(). Then we can simplify the code in run-webkit-app to read:

...
if (isIOSWebKit()) {
    exit exitStatus(runIOSWebKitApp($appPath));
}
exit exitStatus(runMacWebKitApp($appPath, USE_OPEN_COMMAND)); 

&gt; &gt; Tools/Scripts/webkitdirs.pm:63
&gt; &gt; +       &amp;findOrCreateSimulatorForIPhoneDevice
&gt; 
&gt; IPhone =&gt; IOS
&gt; 

Will fix.

&gt; &gt; Tools/Scripts/webkitdirs.pm:102
&gt; &gt; +my $didLoadIPhoneSimulatorNotification;
&gt; 
&gt; IPhone =&gt; IOS (if we&apos;re okay renaming this before the Perl module)
&gt; 

As aforementioned I plan to defer to renaming this function and the Perl module to bug #134062.

&gt; &gt; Tools/Scripts/webkitdirs.pm:2156
&gt; &gt; +    # Use MobileSafari.app in product directory if present (good for Safari development team).
&gt; 
&gt; Nit: Parenthetical text in comment probably isn&apos;t necessary here.
&gt; 
&gt; &gt; Tools/Scripts/webkitdirs.pm:2163
&gt; &gt; +sub plistPathFromBundle($)
&gt; 
&gt; Should this be named plistPathFromIOSBundle() since Mac OS X bundles are usually deeper (with the interesting stuff under Contents)?

Notice that this function works for both Mac and iOS app bundles.

&gt; 
&gt; &gt; Tools/Scripts/webkitdirs.pm:2171
&gt; &gt; +sub appIdentiferFromBundle($)
&gt; 
&gt; Should this be named appIdentiferFromIOSBundle() since Mac OS X bundles are usually deeper (with the interesting stuff under Contents)?
&gt; 

Ditto.

&gt; &gt; Tools/Scripts/webkitdirs.pm:2179
&gt; &gt; +sub appDisplayNameFromBundle($)
&gt; 
&gt; Should this be named appDisplayNameFromIOSBundle() since Mac OS X bundles are usually deeper (with the interesting stuff under Contents)?
&gt; 

Ditto.

&gt; &gt; Tools/Scripts/webkitdirs.pm:2221
&gt; &gt; +    return (grep {$_-&gt;{name} eq $simulatorName} iOSSimulatorDevices())[0];
&gt; 
&gt; Might be useful to warn() if more than one item is returned here (which would indicate we&apos;re creating duplicate devices):
&gt; (grep {$_-&gt;{name} eq $simulatorName} iOSSimulatorDevices())
&gt; 

Will update this function to read:

sub iosSimulatorDeviceByName($)
{
    my ($simulatorName) = @_;
    my @devices = grep {$_-&gt;{name} eq $simulatorName} iOSSimulatorDevices();
    my $deviceToUse = $devices[0];
    if (@devices &gt; 1) {
        print &quot;Warning: Found more than one simulator device named &apos;$simulatorName&apos;.\n&quot;;
        print &quot;         Using simulator device with UDID: $deviceToUse-&gt;{UDID}.\n&quot;;
        print &quot;         To see the list of simulator devices, run:\n&quot;;
        print &quot;         xcrun --sdk iphonesimulator simctl list\n&quot;;
    }
    return $deviceToUse;
}

&gt; &gt; Tools/Scripts/webkitdirs.pm:2284
&gt; &gt; +    my ($appBundle, $simulatedDevice, $simulatorOptions) = @_;
&gt; 
&gt; This needs a &quot;require Foundation;&quot; line in the method in case it&apos;s called before &quot;require IPhoneSimulatorNotification;&quot; (which is what make this code work in old-run-webkit-tests).
&gt; 
&gt; This code is all PerlObjC bridge code, and will fail if the Foundation module is not included before it&apos;s run.  (And we don&apos;t want &quot;use Foundation;&quot; here since that&apos;s a compile-time directive for Perl and will break everyone that doesn&apos;t have the Foundation module.)

I&apos;ll fix this by moving the call to loadIPhoneSimulatorNotificationIfNeeded() that appears later in this function to the top of this function such that we call it before defining $makeNSDictionaryFromHash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016950</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-06-20 10:21:20 -0700</bug_when>
    <thetext>Committed r170189: &lt;http://trac.webkit.org/changeset/170189&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016951</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-06-20 10:23:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/17344733&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233242</attachid>
            <date>2014-06-17 10:36:54 -0700</date>
            <delta_ts>2014-06-18 15:52:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133986-20140617103631.patch</filename>
            <type>text/plain</type>
            <size>20216</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5OTE3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzc5M2JiODQ2YTFhNzc5MzI5YzMzZGM0ZGVjMmE0N2Yz
Mzg3YTJkNS4uYjQ4ZTA4ZjYyMmY2NTYxMGZmNWZiMzFhNDQ3YjViZmY0NzZkMWFkMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQz
IEBACisyMDE0LTA2LTE3ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAg
ICAgICBUZWFjaCBydW4te3NhZmFyaSwgd2Via2l0LWFwcH0gYWJvdXQgaU9TIFNpbXVsYXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzOTg2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXh0cmFjdCB0
aGUgbG9naWMgZnJvbSBvbGQtcnVuLXdlYmtpdC10ZXN0cyB0byBpbnN0YWxsIGFuIGxhdW5jaCB7
RHVtcFJlbmRlclRyZWUsIFdlYktpdFRlc3RSdW5uZXJBcHB9LmFwcAorICAgICAgICBpbnRvIGdl
bmVyYWwtcHVycG9zZSByb3V0aW5lcyBpbiB3ZWJraXRkaXJzLnBtIHNvIHRoYXQgdGhleSBjYW4g
YmUgdXNlZCBib3RoIGJ5IHNjcmlwdCBvbGQtcnVuLXdlYmtpdC10ZXN0cworICAgICAgICBhbmQg
cnVuLXNhZmFyaS4KKworICAgICAgICAqIFNjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHM6Cisg
ICAgICAgIChpbnN0YWxsQW5kTGF1bmNoRHVtcFRvb2xBcHBVc2luZ05vdGlmaWNhdGlvbik6IEV4
dHJhY3RlZCBsb2dpYyB0byBpbnN0YWxsIGFuZCBsYXVuY2gge0R1bXBSZW5kZXJUcmVlLAorICAg
ICAgICBXZWJLaXRUZXN0UnVubmVyQXBwfS5hcHAgaW50byB3ZWJraXRkaXJzOjppbnN0YWxsQW5k
TGF1bmNoSU9TV2ViS2l0QXBwSW5TaW11bGF0b3IoKSBhbmQgbW9kaWZpZWQgY29kZQorICAgICAg
ICB0byBjYWxsIGl0LgorICAgICAgICAob3BlbklQaG9uZVNpbXVsYXRvcik6IERlbGV0ZWQ7IG1v
dmVkIGxvZ2ljIHRvIHdlYmtpdGRpcnM6Om9wZW5JT1NTaW11bGF0b3IoKS4KKyAgICAgICAgKHF1
aXRJUGhvbmVTaW11bGF0b3IpOiBEZWxldGVkOyBtb3ZlZCBsb2dpYyB0byB3ZWJraXRkaXJzOjpx
dWl0SU9TU2ltdWxhdG9yKCkuCisgICAgICAgICogU2NyaXB0cy9ydW4td2Via2l0LWFwcDogTW9k
aWZpZWQgdG8gY2FsbCBydW5JT1NXZWJLaXRBcHAoKSB3aGVuIHRoZSBpT1Mgc2ltdWxhdG9yIFNE
SyBpcyB1c2VkCisgICAgICAgIChzYXksIGJ5IHNwZWNpZnlpbmcgdGhlIG9wdGlvbmFsIGNvbW1h
bmQtbGluZSBhcmd1bWVudCAtLXNpbXVsYXRvcikuIEZvciBub3csIGRpZSgpIHdpdGggYW4gZXJy
b3IKKyAgICAgICAgd2hlbiB0aGUgaU9TIGRldmljZSBTREsgaXMgdXNlZCBhcyB3ZSBkb24ndCBz
dXBwb3J0IGxhdW5jaGluZyBhbiBhcHAgb24gdGhlIGRldmljZSBhdCB0aGlzIHRpbWUuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRkaXJzLnBtOgorICAgICAgICAoeGNvZGVTREtWZXJzaW9uKTog
QWRkZWQuCisgICAgICAgIChzZXR1cElPU1dlYktpdEVudmlyb25tZW50KTogQWRkZWQuCisgICAg
ICAgIChpbnN0YWxsZWRNb2JpbGVTYWZhcmlCdW5kbGUpOiBBZGRlZC4KKyAgICAgICAgKG1vYmls
ZXNhZmFyaUJ1bmRsZSk6IEFkZGVkLgorICAgICAgICAocGxpc3RQYXRoRnJvbUJ1bmRsZSk6IEFk
ZGVkLgorICAgICAgICAoYXBwSWRlbnRpZmVyRnJvbUJ1bmRsZSk6IEFkZGVkLgorICAgICAgICAo
YXBwRGlzcGxheU5hbWVGcm9tQnVuZGxlKTogQWRkZWQuCisgICAgICAgIChsb2FkSVBob25lU2lt
dWxhdG9yTm90aWZpY2F0aW9uSWZOZWVkZWQpOiBBZGRlZC4KKyAgICAgICAgKG9wZW5JT1NTaW11
bGF0b3IpOiBBZGRlZC4KKyAgICAgICAgKHF1aXRJT1NTaW11bGF0b3IpOiBBZGRlZC4KKyAgICAg
ICAgKGlvc1NpbXVsYXRvckRldmljZUJ5TmFtZSk6IEFkZGVkLgorICAgICAgICAoaW9zU2ltdWxh
dG9yUnVudGltZSk6IEFkZGVkLgorICAgICAgICAoZmluZE9yQ3JlYXRlU2ltdWxhdG9yRm9ySVBo
b25lRGV2aWNlKTogQWRkZWQuCisgICAgICAgIChydW5JT1NXZWJLaXRBcHBJblNpbXVsYXRvcik6
IEFkZGVkLgorICAgICAgICAoaW5zdGFsbEFuZExhdW5jaElPU1dlYktpdEFwcEluU2ltdWxhdG9y
KTogQWRkZWQuCisgICAgICAgIChydW5TYWZhcmkpOiBNb2RpZmllZCB0byBjYWxsIHJ1bklPU1dl
YktpdEFwcEluU2ltdWxhdG9yKCkgdGhlIGlPUyBzaW11bGF0b3IgU0RLIGlzIHVzZWQuIEZvciBu
b3csCisgICAgICAgIGRpZSgpIHdpdGggYW4gZXJyb3Igd2hlbiB0aGUgaU9TIGRldmljZSBTREsg
aXMgdXNlZCBhcyB3ZSBkb24ndCBzdXBwb3J0IGxhdW5jaGluZyBTYWZhcmkgb24gdGhlCisgICAg
ICAgIGRldmljZSBhdCB0aGlzIHRpbWUuCisKIDIwMTQtMDYtMTIgIENhcmxvcyBBbGJlcnRvIExv
cGV6IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gUGVyZm9ybWFu
Y2UgdGVzdHMgc2hvdWxkIGJlIGFsd2F5cyByYW4gd2l0aCBXS1RSLgpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13
ZWJraXQtdGVzdHMKaW5kZXggYjA3MTQ2N2M1ODJlOWJhZWI2ZThjODZhNTBlOTFlODFmODZjMGZh
OS4uZGQyNjVjNjg2M2QxNTE1YzEyYTdiZWNhOTQ0MGEwM2MxNzJlNjZlMiAxMDA3NTUKLS0tIGEv
VG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL29s
ZC1ydW4td2Via2l0LXRlc3RzCkBAIC0xMjgsOSArMTI4LDcgQEAgc3ViIHRvV2luZG93c1BhdGgo
JCk7CiBzdWIgdmFsaWRhdGVTa2lwcGVkQXJnKCQkOyQpOwogc3ViIHdyaXRlVG9GaWxlKCQkKTsK
IHN1YiBpbnN0YWxsQW5kTGF1bmNoRHVtcFRvb2xBcHBVc2luZ05vdGlmaWNhdGlvbigkJCk7Ci1z
dWIgb3BlbklQaG9uZVNpbXVsYXRvcigpOwogc3ViIHF1aXREdW1wVG9vbFVzaW5nTm90aWZpY2F0
aW9uKCk7Ci1zdWIgcXVpdElQaG9uZVNpbXVsYXRvcigpOwogc3ViIHNpbXVsYXRvclNlc3Npb25V
VUlEKCk7CiAKICMgQXJndW1lbnQgaGFuZGxpbmcKQEAgLTQ2MCw3ICs0NTgsNyBAQCBzZXRDb25m
aWd1cmF0aW9uUHJvZHVjdERpcihDd2Q6OmFic19wYXRoKCRyb290KSkgaWYgKGRlZmluZWQoJHJv
b3QpKTsKIG15ICRwcm9kdWN0RGlyID0gcHJvZHVjdERpcigpOwogJHByb2R1Y3REaXIgLj0gIi9Q
cm9ncmFtcyIgaWYgaXNHdGsoKTsKIAotcXVpdElQaG9uZVNpbXVsYXRvcigpIGlmIGlzSU9TV2Vi
S2l0KCk7CitxdWl0SU9TU2ltdWxhdG9yKCkgaWYgaXNJT1NXZWJLaXQoKTsKIAogIyBTYXZlIHRo
ZSBjdXJyZW50IGRpcmVjdG9yeSBiZWZvcmUgY2hhZ2luZyBpdCB2aWEgY2hkaXJXZWJLaXQKIG15
ICRjdXJyZW50RGlyID0gY3dkKCk7CkBAIC01MDMsNyArNTAxLDcgQEAgaWYgKGlzQXBwbGVNYWNX
ZWJLaXQoKSkgewogICAgIGV2YWwgJ3VzZSBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ7JzsKIH0KIAot
b3BlbklQaG9uZVNpbXVsYXRvcigpIGlmIGlzSU9TV2ViS2l0KCk7CitvcGVuSU9TU2ltdWxhdG9y
KCkgaWYgaXNJT1NXZWJLaXQoKTsKIAogaWYgKGlzQXBwbGVNYWNXZWJLaXQoKSkgewogICAgIHB1
c2ggQElOQywgJHByb2R1Y3REaXI7CkBAIC0xMTY0LDcgKzExNjIsNyBAQCBwcmludGYgIlxuJTAu
MmZzIHRvdGFsIHRlc3RpbmcgdGltZVxuIiwgJHRvdGFsVGVzdGluZ1RpbWUgLiAiIjsKIAogISRp
c0R1bXBUb29sT3BlbiB8fCBkaWUgIkZhaWxlZCB0byBjbG9zZSAkZHVtcFRvb2xOYW1lLlxuIjsK
IAotcXVpdElQaG9uZVNpbXVsYXRvcigpIGlmIGlzSU9TV2ViS2l0KCk7CitxdWl0SU9TU2ltdWxh
dG9yKCkgaWYgaXNJT1NXZWJLaXQoKTsKIAogJGlzSHR0cGRPcGVuID0gIWNsb3NlSFRUUEQoKTsK
IGNsb3NlV2ViU29ja2V0U2VydmVyKCk7CkBAIC0xMzYyLDEwMyArMTM2MCwxNyBAQCBzdWIgd3Jp
dGVUb0ZpbGUoJCQpCiBzdWIgaW5zdGFsbEFuZExhdW5jaER1bXBUb29sQXBwVXNpbmdOb3RpZmlj
YXRpb24oJCQpCiB7CiAgICAgbXkgKCRhcmdzLCAkY2xlYW5FbnYpID0gQF87Ci0KLSAgICBteSAk
aVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9uID0gbmV3IElQaG9uZVNpbXVsYXRvck5vdGlmaWNh
dGlvbjsKLSAgICAkaVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9uLT5zdGFydE9ic2VydmluZ0Fw
cGxpY2F0aW9uTGF1bmNoZWROb3RpZmljYXRpb24oKTsKLQotICAgIG15ICRtYWtlTlNEaWN0aW9u
YXJ5RnJvbUhhc2ggPSBzdWIgewotICAgICAgICBteSAoJGRpY3QpID0gQF87Ci0gICAgICAgIG15
ICRyZXN1bHQgPSBOU011dGFibGVEaWN0aW9uYXJ5LT5hbGxvYygpLT5pbml0V2l0aENhcGFjaXR5
XyhzY2FsYXIoa2V5cyAleyRkaWN0fSkpOwotICAgICAgICBmb3IgbXkgJGtleSAoa2V5cyAleyRk
aWN0fSkgewotICAgICAgICAgICAgJHJlc3VsdC0+c2V0T2JqZWN0X2ZvcktleV8oTlNTdHJpbmct
PnN0cmluZ1dpdGhDU3RyaW5nXygkZGljdC0+eyRrZXl9KSwgTlNTdHJpbmctPnN0cmluZ1dpdGhD
U3RyaW5nXygka2V5KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICRyZXN1bHQtPmF1dG9y
ZWxlYXNlKCk7Ci0gICAgfTsKLQotICAgIG15ICRtYWtlTlNBcnJheUZyb21BcnJheSA9IHN1YiB7
Ci0gICAgICAgIG15ICgkYXJyYXkpID0gQF87Ci0gICAgICAgIG15ICRyZXN1bHQgPSBOU011dGFi
bGVBcnJheS0+YWxsb2MoKS0+aW5pdFdpdGhDYXBhY2l0eV8oc2NhbGFyKEB7JGFycmF5fSkpOwot
ICAgICAgICBmb3IgbXkgJGl0ZW0gKEB7JGFycmF5fSkgewotICAgICAgICAgICAgJHJlc3VsdC0+
YWRkT2JqZWN0XyhOU1N0cmluZy0+c3RyaW5nV2l0aENTdHJpbmdfKCRpdGVtKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuICRyZXN1bHQtPmF1dG9yZWxlYXNlKCk7Ci0gICAgfTsKLQotICAg
IG15ICRkZXZpY2VOYW1lID0gImlQaG9uZSA1IFdlYktpdCBUZXN0ZXIiOwotICAgIG15ICRkZXZp
Y2VUeXBlID0gImNvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbURldmljZVR5cGUuaVBob25lLTUi
OwotCi0gICAgaWYgKGFyY2hpdGVjdHVyZSgpIGVxICd4ODZfNjQnKSB7Ci0gICAgICAgICRkZXZp
Y2VOYW1lID0gImlQaG9uZSA1cyBXZWJLaXQgVGVzdGVyIjsKLSAgICAgICAgJGRldmljZVR5cGUg
PSAiY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltRGV2aWNlVHlwZS5pUGhvbmUtNXMiOwotICAg
IH0KLQotICAgIGNob21wKG15ICRzZGtWZXJzaW9uID0gYHhjcnVuIC0tc2RrIGlwaG9uZXNpbXVs
YXRvciAtLXNob3ctc2RrLXZlcnNpb25gKTsKLSAgICAkc2RrVmVyc2lvbiA9fiBzL1wuLy0vOwot
Ci0gICAgbXkgJHJ1bnRpbWUgPSAiY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGltZS5p
T1MtJHNka1ZlcnNpb24iOwotCi0gICAgbXkgQGRldmljZXMgPSBpT1NTaW11bGF0b3JEZXZpY2Vz
KCk7Ci0gICAgbXkgJGRldmljZSA9IChncmVwIHsKLSAgICAgICAgJF8tPntuYW1lfSBlcSAkZGV2
aWNlTmFtZSBhbmQgJF8tPntydW50aW1lfSBlcSAkcnVudGltZSBhbmQgJF8tPntkZXZpY2VUeXBl
fSBlcSAkZGV2aWNlVHlwZTsKLSAgICB9IEBkZXZpY2VzKVswXTsKLQotICAgIGlmIChub3QgJGRl
dmljZSkgewotICAgICAgICBwcmludCAiQ3JlYXRpbmcgc2ltdWxhdG9yIGRldmljZTogJGRldmlj
ZU5hbWVcbiI7Ci0gICAgICAgICRkZXZpY2UgPSBjcmVhdGVpT1NTaW11bGF0b3JEZXZpY2UoJGRl
dmljZU5hbWUsICRkZXZpY2VUeXBlLCAkcnVudGltZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
cHJpbnQgIkZvdW5kIHNpbXVsYXRvciBkZXZpY2Ugd2l0aCBwcm9wZXJ0aWVzOiAiIC4gRHVtcGVy
KCRkZXZpY2UpOwotICAgIH0KLQotICAgIG15ICRpZGVudGlmaWVyID0gaU9TRHVtcFRvb2xBcHBJ
ZGVudGlmaWVyKCk7Ci0gICAgbXkgJGFwcGxpY2F0aW9uUGF0aDsKLQorICAgIG15ICRwcm9kdWN0
RGlyID0gcHJvZHVjdERpcigpOworICAgIG15ICRhcHBCdW5kbGU7CiAgICAgaWYgKCR1c2VXZWJL
aXRUZXN0UnVubmVyKSB7Ci0gICAgICAgICRhcHBsaWNhdGlvblBhdGggPSAiJHByb2R1Y3REaXIv
V2ViS2l0VGVzdFJ1bm5lckFwcC5hcHAiOworICAgICAgICAkYXBwQnVuZGxlID0gIiRwcm9kdWN0
RGlyL1dlYktpdFRlc3RSdW5uZXJBcHAuYXBwIjsKICAgICB9IGVsc2UgewotICAgICAgICAkYXBw
bGljYXRpb25QYXRoID0gIiRwcm9kdWN0RGlyL0R1bXBSZW5kZXJUcmVlLmFwcCI7CisgICAgICAg
ICRhcHBCdW5kbGUgPSAiJHByb2R1Y3REaXIvRHVtcFJlbmRlclRyZWUuYXBwIjsKICAgICB9Ci0K
LSAgICBteSAkZGljdCA9IHsKLSAgICAgICAgYXBwbGljYXRpb25Bcmd1bWVudHMgPT4gJiRtYWtl
TlNBcnJheUZyb21BcnJheSgkYXJncyksCi0gICAgICAgIGFwcGxpY2F0aW9uRW52aXJvbm1lbnQg
PT4gJiRtYWtlTlNEaWN0aW9uYXJ5RnJvbUhhc2goJGNsZWFuRW52KSwKLSAgICAgICAgYXBwbGlj
YXRpb25JZGVudGlmaWVyID0+IE5TU3RyaW5nLT5zdHJpbmdXaXRoQ1N0cmluZ18oJGlkZW50aWZp
ZXIpLAotICAgICAgICBhcHBsaWNhdGlvblBhdGggPT4gTlNTdHJpbmctPnN0cmluZ1dpdGhDU3Ry
aW5nXygkYXBwbGljYXRpb25QYXRoKSwKLSAgICAgICAgZGV2aWNlVURJRCA9PiBOU1N0cmluZy0+
c3RyaW5nV2l0aENTdHJpbmdfKCRkZXZpY2UtPntVRElEfSksCi0gICAgICAgIHNlc3Npb25VVUlE
ID0+IE5TU3RyaW5nLT5zdHJpbmdXaXRoQ1N0cmluZ18oc2ltdWxhdG9yU2Vzc2lvblVVSUQoKSks
Ci0gICAgfTsKLSAgICAkaVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9uLT5wb3N0U3RhcnRTZXNz
aW9uTm90aWZpY2F0aW9uKCRkaWN0KTsKLQotICAgIHdoaWxlICghJGlQaG9uZVNpbXVsYXRvck5v
dGlmaWNhdGlvbi0+aGFzUmVjZWl2ZWRBcHBsaWNhdGlvbkxhdW5jaGVkTm90aWZpY2F0aW9uKCkp
IHsKLSAgICAgICAgbXkgJGRhdGUgPSBOU0RhdGUtPmFsbG9jKCktPmluaXRXaXRoVGltZUludGVy
dmFsU2luY2VOb3dfKDAuMSk7Ci0gICAgICAgIE5TUnVuTG9vcC0+Y3VycmVudFJ1bkxvb3AtPnJ1
blVudGlsRGF0ZV8oJGRhdGUpOwotICAgICAgICAkZGF0ZS0+cmVsZWFzZSgpOwotICAgIH0KLQot
ICAgIHByaW50ICIkaWRlbnRpZmllciBoYXMgbGF1bmNoZWQuXG4iOwotCi0gICAgJGlQaG9uZVNp
bXVsYXRvck5vdGlmaWNhdGlvbi0+c3RvcE9ic2VydmluZ0FwcGxpY2F0aW9uTGF1bmNoZWROb3Rp
ZmljYXRpb24oKTsKLQotICAgIHJldHVybiAkaVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9uLT5h
cHBsaWNhdGlvbkxhdW5jaGVkQXBwbGljYXRpb25QSUQoKTsKLX0KLQotc3ViIG9wZW5JUGhvbmVT
aW11bGF0b3IoKQotewotICAgIG15ICRpUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb24gPSBuZXcg
SVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9uOwotICAgICRpUGhvbmVTaW11bGF0b3JOb3RpZmlj
YXRpb24tPnN0YXJ0T2JzZXJ2aW5nUmVhZHlOb3RpZmljYXRpb24oKTsKLQotICAgIG15ICRkZXZp
Y2VOYW1lID0gYXJjaGl0ZWN0dXJlKCkgZXEgJ2kzODYnID8gImlQaG9uZSA1IiA6ICJpUGhvbmUg
NXMiOwotCi0gICAgc3lzdGVtICJvcGVuIiwgIi1hIiwgJHNpbXVsYXRvckFwcCwgIi0tYXJncyIs
ICItU2Vzc2lvbk9uTGF1bmNoIiwgIk5PIiwgIi1TaW11bGF0ZURldmljZSIsICRkZXZpY2VOYW1l
OwotCi0gICAgZGllICQhIGlmIGV4aXRTdGF0dXMoJD8pOwotCi0gICAgd2hpbGUgKCEkaVBob25l
U2ltdWxhdG9yTm90aWZpY2F0aW9uLT5oYXNSZWNlaXZlZFJlYWR5Tm90aWZpY2F0aW9uKCkpIHsK
LSAgICAgICAgbXkgJGRhdGUgPSBOU0RhdGUtPmFsbG9jKCktPmluaXRXaXRoVGltZUludGVydmFs
U2luY2VOb3dfKDAuMSk7Ci0gICAgICAgIE5TUnVuTG9vcC0+Y3VycmVudFJ1bkxvb3AtPnJ1blVu
dGlsRGF0ZV8oJGRhdGUpOwotICAgICAgICAkZGF0ZS0+cmVsZWFzZSgpOwotICAgIH0KLQotICAg
ICRpUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb24tPnN0b3BPYnNlcnZpbmdSZWFkeU5vdGlmaWNh
dGlvbigpOworICAgIG15ICRzaW11bGF0b3JPcHRpb25zID0ge2FwcGxpY2F0aW9uQXJndW1lbnRz
ID0+ICRhcmdzLCBhcHBsaWNhdGlvbkVudmlyb25tZW50ID0+ICRjbGVhbkVudiwgc2Vzc2lvblVV
SUQgPT4gc2ltdWxhdG9yU2Vzc2lvblVVSUQoKX07CisgICAgbXkgJHBpZCA9IGluc3RhbGxBbmRM
YXVuY2hJT1NXZWJLaXRBcHBJblNpbXVsYXRvcigkYXBwQnVuZGxlLCBmaW5kT3JDcmVhdGVTaW11
bGF0b3JGb3JJUGhvbmVEZXZpY2UoIldlYktpdCBUZXN0ZXIiKSwgJHNpbXVsYXRvck9wdGlvbnMp
OworICAgIHByaW50IGFwcERpc3BsYXlOYW1lRnJvbUJ1bmRsZSgkYXBwQnVuZGxlKSAuICIgaGFz
IGxhdW5jaGVkLlxuIjsKKyAgICByZXR1cm4gJHBpZDsKIH0KIAogc3ViIHF1aXREdW1wVG9vbFVz
aW5nTm90aWZpY2F0aW9uKCkKQEAgLTE0ODgsMTEgKzE0MDAsNiBAQCBzdWIgcXVpdER1bXBUb29s
VXNpbmdOb3RpZmljYXRpb24oKQogICAgICRpUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb24tPnN0
b3BPYnNlcnZpbmdBcHBsaWNhdGlvblF1aXROb3RpZmljYXRpb24oKTsKIH0KIAotc3ViIHF1aXRJ
UGhvbmVTaW11bGF0b3IoKQotewotICAgIHN5c3RlbSAib3Nhc2NyaXB0IiwgIi1lIiwgInRlbGwg
YXBwbGljYXRpb24gXCJpT1MgU2ltdWxhdG9yXCIgdG8gcXVpdCI7Ci19Ci0KIHN1YiBzaW11bGF0
b3JTZXNzaW9uVVVJRCgpCiB7CiAgICAgcmV0dXJuICJ0aGVBd2Vzb21lVW5pcXVlU2Vzc2lvbklk
ZW50aWZpZXJGb3JEdW1wUmVuZGVyVHJlZSI7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1
bi13ZWJraXQtYXBwIGIvVG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LWFwcAppbmRleCBlZjk4ZjZh
OTU4ZGRiNTFmNTJhMWZkY2RhM2QxZjExZmYzOWEwYmNmLi5kOWQ0Nzk0NmE2ZDE0MDNhOTA2ZmU5
ODRhZWZhNjFhNTQ3OWNmMzZiIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi13ZWJraXQt
YXBwCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC1hcHAKQEAgLTQzLDQgKzQzLDExIEBA
IGRpZSAiRGlkIG5vdCBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIHRvIG9wZW4gKGUuZy4gcnVuLXdl
YmtpdC1hcHAgQXBwTmFtZSkuXG4iIHVuCiBjaGVja0ZyYW1ld29ya3MoKTsKIAogbXkgJGFwcFBh
dGggPSBzaGlmdChAQVJHVik7CitpZiAod2lsbFVzZUlPU0RldmljZVNES1doZW5CdWlsZGluZygp
KSB7CisgICAgZGllICJPbmx5IHJ1bm5pbmcgYXBwIGluIGlPUyBTaW11bGF0b3IgaXMgc3VwcG9y
dGVkIG5vdy4iOworfQoraWYgKHdpbGxVc2VJT1NTaW11bGF0b3JTREtXaGVuQnVpbGRpbmcoKSkg
eworICAgICMgRklYTUU6IFdlIHNob3VsZCBlbnN1cmUgdGhhdCAkYXBwUGF0aCBpcyBhIHBhdGgg
dG8gYW4gYXBwIGJ1bmRsZSBhcyBvcHBvc2VkIHRvIHRoZSBhY3R1YWwgZXhlY3V0YWJsZSBmaWxl
LgorICAgIGV4aXQgZXhpdFN0YXR1cyhydW5JT1NXZWJLaXRBcHAoJGFwcFBhdGgpKTsKK30KIGV4
aXQgZXhpdFN0YXR1cyhydW5NYWNXZWJLaXRBcHAoJGFwcFBhdGgsIFVTRV9PUEVOX0NPTU1BTkQp
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0ZGlycy5wbQppbmRleCAzZTViYzZlMDY5MjY4YWMyNzgxNmJhZDMzMmNhNWZkOTRk
ODFlNzZjLi45YTU2YTg5NzQzMWFiOGQ4OWNjYzRjOWYyZDdlNWQzODNjYTNkNjc1IDEwMDc1NQot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRkaXJzLnBtCkBAIC01Miw2ICs1Miw3IEBAIEJFR0lOIHsKICAgICAgICAmWGNvZGVPcHRpb25T
dHJpbmcKICAgICAgICAmWGNvZGVPcHRpb25TdHJpbmdOb0NvbmZpZwogICAgICAgICZYY29kZU9w
dGlvbnMKKyAgICAgICAmYXBwRGlzcGxheU5hbWVGcm9tQnVuZGxlCiAgICAgICAgJmJhc2VQcm9k
dWN0RGlyCiAgICAgICAgJmNoZGlyV2ViS2l0CiAgICAgICAgJmNoZWNrRnJhbWV3b3JrcwpAQCAt
NTksMTAgKzYwLDE1IEBAIEJFR0lOIHsKICAgICAgICAmY21ha2VCYXNlZFBvcnROYW1lCiAgICAg
ICAgJmN1cnJlbnRTVk5SZXZpc2lvbgogICAgICAgICZkZWJ1Z1NhZmFyaQorICAgICAgICZmaW5k
T3JDcmVhdGVTaW11bGF0b3JGb3JJUGhvbmVEZXZpY2UKKyAgICAgICAmaW5zdGFsbEFuZExhdW5j
aElPU1dlYktpdEFwcEluU2ltdWxhdG9yCisgICAgICAgJmlvc1NpbXVsYXRvckRldmljZUJ5TmFt
ZQogICAgICAgICZubVBhdGgKKyAgICAgICAmb3BlbklPU1NpbXVsYXRvcgogICAgICAgICZwYXNz
ZWRDb25maWd1cmF0aW9uCiAgICAgICAgJnByaW50SGVscEFuZEV4aXRGb3JSdW5BbmREZWJ1Z1dl
YktpdEFwcElmTmVlZGVkCiAgICAgICAgJnByb2R1Y3REaXIKKyAgICAgICAmcXVpdElPU1NpbXVs
YXRvcgogICAgICAgICZydW5NYWNXZWJLaXRBcHAKICAgICAgICAmc2FmYXJpUGF0aAogICAgICAg
ICZzZXRDb25maWd1cmF0aW9uCkBAIC05Myw2ICs5OSw3IEBAIG15ICRzb3VyY2VEaXI7CiBteSAk
Y3VycmVudFNWTlJldmlzaW9uOwogbXkgJGRlYnVnZ2VyOwogbXkgJGlQaG9uZVNpbXVsYXRvclZl
cnNpb247CitteSAkZGlkTG9hZElQaG9uZVNpbXVsYXRvck5vdGlmaWNhdGlvbjsKIG15ICRubVBh
dGg7CiBteSAkb3NYVmVyc2lvbjsKIG15ICRnZW5lcmF0ZURzeW07CkBAIC00MzcsNiArNDQ0LDE3
IEBAIHN1YiBYY29kZVNES1BhdGgKICAgICByZXR1cm4gJHNka1BhdGg7CiB9CiAKK3N1YiB4Y29k
ZVNES1ZlcnNpb24KK3sKKyAgICBkZXRlcm1pbmVYY29kZVNESygpOworCisgICAgZGllICJDYW4n
dCBmaW5kIHRoZSBTREsgdmVyc2lvbiBiZWNhdXNlIG5vIFhjb2RlIFNESyB3YXMgc3BlY2lmaWVk
IiBpZiAhJHhjb2RlU0RLOworCisgICAgY2hvbXAobXkgJHNka1ZlcnNpb24gPSBgeGNydW4gLS1z
ZGsgJHhjb2RlU0RLIC0tc2hvdy1zZGstdmVyc2lvbmApOworICAgIGRpZSAiRmFpbGVkIHRvIGdl
dCBTREsgdmVyc2lvbiBmcm9tIHhjcnVuIiBpZiBleGl0U3RhdHVzKCQ/KTsKKworICAgIHJldHVy
biAkc2RrVmVyc2lvbjsKK30KIAogc3ViIHByb2dyYW1GaWxlc1BhdGgKIHsKQEAgLTIxMTYsNiAr
MjEzNCwyMDYgQEAgc3ViIHNldHVwTWFjV2ViS2l0RW52aXJvbm1lbnQoJCkKICAgICBzZXRVcEd1
YXJkTWFsbG9jSWZOZWVkZWQoKTsKIH0KIAorc3ViIHNldHVwSU9TV2ViS2l0RW52aXJvbm1lbnQo
JCkKK3sKKyAgICBteSAoJGR5bGRGcmFtZXdvcmtQYXRoKSA9IEBfOworICAgICRkeWxkRnJhbWV3
b3JrUGF0aCA9IEZpbGU6OlNwZWMtPnJlbDJhYnMoJGR5bGRGcmFtZXdvcmtQYXRoKTsKKworICAg
ICRFTlZ7RFlMRF9GUkFNRVdPUktfUEFUSH0gPSAkZHlsZEZyYW1ld29ya1BhdGg7CisgICAgJEVO
VntEWUxEX0xJQlJBUllfUEFUSH0gPSAkZHlsZEZyYW1ld29ya1BhdGg7CisKKyAgICBzZXRVcEd1
YXJkTWFsbG9jSWZOZWVkZWQoKTsKK30KKworc3ViIGluc3RhbGxlZE1vYmlsZVNhZmFyaUJ1bmRs
ZSgpCit7CisgICAgcmV0dXJuIEZpbGU6OlNwZWMtPmNhdGZpbGUoWGNvZGVTREtQYXRoKCksICJB
cHBsaWNhdGlvbnMiLCAiTW9iaWxlU2FmYXJpLmFwcCIpOworfQorCitzdWIgbW9iaWxlc2FmYXJp
QnVuZGxlKCkKK3sKKyAgICBkZXRlcm1pbmVDb25maWd1cmF0aW9uUHJvZHVjdERpcigpOworICAg
ICMgVXNlIE1vYmlsZVNhZmFyaS5hcHAgaW4gcHJvZHVjdCBkaXJlY3RvcnkgaWYgcHJlc2VudCAo
Z29vZCBmb3IgU2FmYXJpIGRldmVsb3BtZW50IHRlYW0pLgorICAgIGlmIChpc0FwcGxlTWFjV2Vi
S2l0KCkgJiYgLWQgIiRjb25maWd1cmF0aW9uUHJvZHVjdERpci9Nb2JpbGVTYWZhcmkuYXBwIikg
eworICAgICAgICByZXR1cm4gIiRjb25maWd1cmF0aW9uUHJvZHVjdERpci9Nb2JpbGVTYWZhcmku
YXBwIjsKKyAgICB9CisgICAgcmV0dXJuIGluc3RhbGxlZE1vYmlsZVNhZmFyaUJ1bmRsZSgpOwor
fQorCitzdWIgcGxpc3RQYXRoRnJvbUJ1bmRsZSgkKQoreworICAgIG15ICgkYXBwQnVuZGxlKSA9
IEBfOworICAgIHJldHVybiAiJGFwcEJ1bmRsZS9JbmZvLnBsaXN0IiBpZiAtZiAiJGFwcEJ1bmRs
ZS9JbmZvLnBsaXN0IjsgIyBpT1MgYXBwIGJ1bmRsZQorICAgIHJldHVybiAiJGFwcEJ1bmRsZS9D
b250ZW50cy9JbmZvLnBsaXN0IiBpZiAiJGFwcEJ1bmRsZS9Db250ZW50cy9JbmZvLnBsaXN0Ijsg
IyBNYWMgYXBwIGJ1bmRsZQorICAgIHJldHVybiAiIjsKK30KKworc3ViIGFwcElkZW50aWZlckZy
b21CdW5kbGUoJCkKK3sKKyAgICBteSAoJGFwcEJ1bmRsZSkgPSBAXzsKKyAgICBteSAkcGxpc3RQ
YXRoID0gcGxpc3RQYXRoRnJvbUJ1bmRsZSgkYXBwQnVuZGxlKTsKKyAgICBjaG9tcChteSAkYnVu
ZGxlSWRlbnRpZmVyID0gYGRlZmF1bHRzIHJlYWQgJyRwbGlzdFBhdGgnIENGQnVuZGxlSWRlbnRp
ZmllciAyPiAvZGV2L251bGxgKTsKKyAgICByZXR1cm4gJGJ1bmRsZUlkZW50aWZlcjsKK30KKwor
c3ViIGFwcERpc3BsYXlOYW1lRnJvbUJ1bmRsZSgkKQoreworICAgIG15ICgkYXBwQnVuZGxlKSA9
IEBfOworICAgIG15ICRwbGlzdFBhdGggPSBwbGlzdFBhdGhGcm9tQnVuZGxlKCRhcHBCdW5kbGUp
OworICAgIGNob21wKG15ICRidW5kbGVEaXNwbGF5TmFtZSA9IGBkZWZhdWx0cyByZWFkICckcGxp
c3RQYXRoJyBDRkJ1bmRsZURpc3BsYXlOYW1lIDI+IC9kZXYvbnVsbGApOworICAgIHJldHVybiAk
YnVuZGxlRGlzcGxheU5hbWU7Cit9CisKK3N1YiBsb2FkSVBob25lU2ltdWxhdG9yTm90aWZpY2F0
aW9uSWZOZWVkZWQoKQoreworICAgIHJldHVybiBpZiAkZGlkTG9hZElQaG9uZVNpbXVsYXRvck5v
dGlmaWNhdGlvbjsKKyAgICBwdXNoKEBJTkMsIHByb2R1Y3REaXIoKSAuICIvbGliL3Blcmw1L2Rh
cndpbi10aHJlYWQtbXVsdGktMmxldmVsIik7CisgICAgcmVxdWlyZSBJUGhvbmVTaW11bGF0b3JO
b3RpZmljYXRpb247CisgICAgJGRpZExvYWRJUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb24gPSAx
OworfQorCitzdWIgb3BlbklPU1NpbXVsYXRvcigpCit7CisgICAgY2hvbXAobXkgJGRldmVsb3Bl
ckRpcmVjdG9yeSA9ICRFTlZ7REVWRUxPUEVSX0RJUn0gfHwgYHhjb2RlLXNlbGVjdCAtLXByaW50
LXBhdGhgKTsKKyAgICBteSAkaW9zU2ltdWxhdG9yUGF0aCA9IEZpbGU6OlNwZWMtPmNhdGZpbGUo
JGRldmVsb3BlckRpcmVjdG9yeSwgIkFwcGxpY2F0aW9ucyIsICJpT1MgU2ltdWxhdG9yLmFwcCIp
OworCisgICAgbG9hZElQaG9uZVNpbXVsYXRvck5vdGlmaWNhdGlvbklmTmVlZGVkKCk7CisKKyAg
ICBteSAkaVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9uID0gbmV3IElQaG9uZVNpbXVsYXRvck5v
dGlmaWNhdGlvbjsKKyAgICAkaVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9uLT5zdGFydE9ic2Vy
dmluZ1JlYWR5Tm90aWZpY2F0aW9uKCk7CisgICAgc3lzdGVtKCJvcGVuIiwgIi1hIiwgJGlvc1Np
bXVsYXRvclBhdGgsICItLWFyZ3MiLCAiLVNlc3Npb25PbkxhdW5jaCIsICJOTyIpID09IDAgb3Ig
ZGllICJGYWlsZWQgdG8gb3BlbiAkaW9zU2ltdWxhdG9yUGF0aDogJCEiOworICAgIHdoaWxlICgh
JGlQaG9uZVNpbXVsYXRvck5vdGlmaWNhdGlvbi0+aGFzUmVjZWl2ZWRSZWFkeU5vdGlmaWNhdGlv
bigpKSB7CisgICAgICAgIG15ICRkYXRlID0gTlNEYXRlLT5hbGxvYygpLT5pbml0V2l0aFRpbWVJ
bnRlcnZhbFNpbmNlTm93XygwLjEpOworICAgICAgICBOU1J1bkxvb3AtPmN1cnJlbnRSdW5Mb29w
LT5ydW5VbnRpbERhdGVfKCRkYXRlKTsKKyAgICAgICAgJGRhdGUtPnJlbGVhc2UoKTsKKyAgICB9
CisgICAgJGlQaG9uZVNpbXVsYXRvck5vdGlmaWNhdGlvbi0+c3RvcE9ic2VydmluZ1JlYWR5Tm90
aWZpY2F0aW9uKCk7Cit9CisKK3N1YiBxdWl0SU9TU2ltdWxhdG9yKCkKK3sKKyAgICByZXR1cm4g
c3lzdGVtIHsib3Nhc2NyaXB0In0gIm9zYXNjcmlwdCIsICItZSIsICd0ZWxsIGFwcGxpY2F0aW9u
ICJpT1MgU2ltdWxhdG9yIiB0byBxdWl0JzsKK30KKworc3ViIGlvc1NpbXVsYXRvckRldmljZUJ5
TmFtZSgkKQoreworICAgIG15ICgkc2ltdWxhdG9yTmFtZSkgPSBAXzsKKyAgICByZXR1cm4gKGdy
ZXAgeyRfLT57bmFtZX0gZXEgJHNpbXVsYXRvck5hbWV9IGlPU1NpbXVsYXRvckRldmljZXMoKSlb
MF07Cit9CisKK3N1YiBpb3NTaW11bGF0b3JSdW50aW1lKCkKK3sKKyAgICBteSAkeGNvZGVTREtW
ZXJzaW9uID0geGNvZGVTREtWZXJzaW9uKCk7CisgICAgJHhjb2RlU0RLVmVyc2lvbiA9fiBzL1wu
Ly0vOworICAgIHJldHVybiAiY29tLmFwcGxlLkNvcmVTaW11bGF0b3IuU2ltUnVudGltZS5pT1Mt
JHhjb2RlU0RLVmVyc2lvbiI7Cit9CisKK3N1YiBmaW5kT3JDcmVhdGVTaW11bGF0b3JGb3JJUGhv
bmVEZXZpY2UoJCkKK3sKKyAgICBteSAoJHNpbXVsYXRvck5hbWVTdWZmaXgpID0gQF87CisgICAg
bXkgJHNpbXVsYXRvck5hbWU7CisgICAgbXkgJHNpbXVsYXRvckRldmljZVR5cGU7CisgICAgaWYg
KGFyY2hpdGVjdHVyZSgpIGVxICJ4ODZfNjQiKSB7CisgICAgICAgICRzaW11bGF0b3JOYW1lID0g
ImlQaG9uZSA1cyAiIC4gJHNpbXVsYXRvck5hbWVTdWZmaXg7CisgICAgICAgICRzaW11bGF0b3JE
ZXZpY2VUeXBlID0gImNvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbURldmljZVR5cGUuaVBob25l
LTVzIjsKKyAgICB9IGVsc2UgeworICAgICAgICAkc2ltdWxhdG9yTmFtZSA9ICJpUGhvbmUgNSAi
IC4gJHNpbXVsYXRvck5hbWVTdWZmaXg7CisgICAgICAgICRzaW11bGF0b3JEZXZpY2VUeXBlID0g
ImNvbS5hcHBsZS5Db3JlU2ltdWxhdG9yLlNpbURldmljZVR5cGUuaVBob25lLTUiOworICAgIH0K
KyAgICBteSAkc2ltdWxhdGVkRGV2aWNlID0gaW9zU2ltdWxhdG9yRGV2aWNlQnlOYW1lKCRzaW11
bGF0b3JOYW1lKTsKKyAgICByZXR1cm4gJHNpbXVsYXRlZERldmljZSBpZiAkc2ltdWxhdGVkRGV2
aWNlOworICAgIHJldHVybiBjcmVhdGVpT1NTaW11bGF0b3JEZXZpY2UoJHNpbXVsYXRvck5hbWUs
ICRzaW11bGF0b3JEZXZpY2VUeXBlLCBpb3NTaW11bGF0b3JSdW50aW1lKCkpOworfQorCitzdWIg
cnVuSU9TV2ViS2l0QXBwSW5TaW11bGF0b3IoJDskKQoreworICAgIG15ICgkYXBwQnVuZGxlLCAk
c2ltdWxhdG9yT3B0aW9ucykgPSBAXzsKKyAgICBteSAkcHJvZHVjdERpciA9IHByb2R1Y3REaXIo
KTsKKyAgICBteSAkYXBwRGlzcGxheU5hbWUgPSBhcHBEaXNwbGF5TmFtZUZyb21CdW5kbGUoJGFw
cEJ1bmRsZSk7CisgICAgcHJpbnQgIlN0YXJ0aW5nICRhcHBEaXNwbGF5TmFtZSB3aXRoIERZTERf
RlJBTUVXT1JLX1BBVEggc2V0IHRvIHBvaW50IHRvIGJ1aWx0IFdlYktpdCBpbiAkcHJvZHVjdERp
ci5cbiI7CisKKyAgICAkc2ltdWxhdG9yT3B0aW9ucyA9IHt9IHVubGVzcyAkc2ltdWxhdG9yT3B0
aW9uczsKKworICAgIG15ICVzaW11bGF0b3JFTlY7CisgICAgJXNpbXVsYXRvckVOViA9ICV7JHNp
bXVsYXRvck9wdGlvbnMtPnthcHBsaWNhdGlvbkVudmlyb25tZW50fX0gaWYgJHNpbXVsYXRvck9w
dGlvbnMtPnthcHBsaWNhdGlvbkVudmlyb25tZW50fTsKKyAgICB7CisgICAgICAgIGxvY2FsICVF
TlY7ICMgU2hhZG93IGdsb2JhbC1zY29wZSAlRU5WIHNvIHRoYXQgY2hhbmdlcyB0byBpdCB3aWxs
IG5vdCBiZSBzZWVuIG91dHNpZGUgb2YgdGhpcyBzY29wZS4KKyAgICAgICAgc2V0dXBJT1NXZWJL
aXRFbnZpcm9ubWVudCgkcHJvZHVjdERpcik7CisgICAgICAgICVzaW11bGF0b3JFTlYgPSAlRU5W
OworICAgIH0KKyAgICAkc2ltdWxhdG9yT3B0aW9ucy0+e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9
ID0gXCVzaW11bGF0b3JFTlY7CisgICAgcmV0dXJuIGluc3RhbGxBbmRMYXVuY2hJT1NXZWJLaXRB
cHBJblNpbXVsYXRvcigkYXBwQnVuZGxlLCBmaW5kT3JDcmVhdGVTaW11bGF0b3JGb3JJUGhvbmVE
ZXZpY2UoIkZvciBXZWJLaXQgRGV2ZWxvcG1lbnQiKSwgJHNpbXVsYXRvck9wdGlvbnMpIDw9IDA7
Cit9CisKKyMgTGF1bmNoZXMgdGhlIGlPUyBXZWJLaXQtYmFzZWQgYXBwbGljYXRpb24gaW4gdGhl
IHNwZWNpZmllZCBzaW11bGF0b3IgZGV2aWNlIGFuZCBkeW5hbWljYWxseQorIyBsaW5rZWQgYWdh
aW5zdCB0aGUgYnVpbHQgV2ViS2l0LiBUaGUgYXBwbGljYXRpb24gd2lsbCBiZSBpbnN0YWxsZWQg
aWYgYXBwbGljYWJsZS4KKyMKKyMgQXJnczoKKyMgICAkYXBwQnVuZGxlOiB0aGUgcGF0aCB0byB0
aGUgYXBwIGJ1bmRsZSB0byBsYXVuY2guCisjICAgJHNpbXVsYXRlZERldmljZTogdGhlIHNpbXVs
YXRvciBkZXZpY2UgdG8gdXNlIHRvIHJ1biB0aGUgYXBwLgorIyAgICRzaW11bGF0b3JPcHRpb25z
OiBhIGhhc2ggcmVmZXJlbmNlIHJlcHJlc2VudGluZyBvcHRpb25hbCBzaW11bGF0b3Igb3B0aW9u
cy4KKyMgICAgIHNlc3Npb25VVUlEOiBhIHVuaXF1ZSBpZGVudGlmZXIgdG8gdXNlIGZvciB0aGUg
aU9TIFNpbXVsYXRvciBzZXNzaW9uLiBEZWZhdWx0cyB0byBhbiBpZGVudGlmZXIKKyMgICAgICAg
ICAgICAgICAgICBvZiB0aGUgZm9ybSAidGhlQXdlc29tZVVuaXF1ZVNlc3Npb25JZGVudGlmaWVy
Rm9yWCIgd2hlcmUgWCBpcyB0aGUgZGlzcGxheSBuYW1lIG9mCisjICAgICAgICAgICAgICAgICAg
dGhlIHNwZWNpZmllZCBhcHAuCisjICAgICBhcHBsaWNhdGlvbkFyZ3VtZW50czogYW4gYXJyYXkg
cmVmZXJlbmNlIHJlcHJlc2VudGluZyB0aGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGFwcCAo
ZGVmYXVsdHMgdG8gXEBBUkdWKS4KKyMgICAgIGFwcGxpY2F0aW9uRW52aXJvbm1lbnQ6IGEgaGFz
aCByZWZlcmVuY2UgcmVwcmVzZW50aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gdXNl
IHdoZW4gbGF1bmNoaW5nIHRoZSBhcHAgKGRlZmF1bHRzIHRvIHt9KS4KKyMKKyMgUmV0dXJucyB0
aGUgcHJvY2VzcyBpZGVudGlmaWVyIG9mIHRoZSBsYXVuY2hlZCBhcHAuCitzdWIgaW5zdGFsbEFu
ZExhdW5jaElPU1dlYktpdEFwcEluU2ltdWxhdG9yKCQkOyQpCit7CisgICAgbXkgKCRhcHBCdW5k
bGUsICRzaW11bGF0ZWREZXZpY2UsICRzaW11bGF0b3JPcHRpb25zKSA9IEBfOworICAgIG15ICRt
YWtlTlNEaWN0aW9uYXJ5RnJvbUhhc2ggPSBzdWIgeworICAgICAgICBteSAoJGRpY3QpID0gQF87
CisgICAgICAgIG15ICRyZXN1bHQgPSBOU011dGFibGVEaWN0aW9uYXJ5LT5hbGxvYygpLT5pbml0
V2l0aENhcGFjaXR5XyhzY2FsYXIoa2V5cyAleyRkaWN0fSkpOworICAgICAgICBmb3IgbXkgJGtl
eSAoa2V5cyAleyRkaWN0fSkgeworICAgICAgICAgICAgJHJlc3VsdC0+c2V0T2JqZWN0X2Zvcktl
eV8oTlNTdHJpbmctPnN0cmluZ1dpdGhDU3RyaW5nXygkZGljdC0+eyRrZXl9KSwgTlNTdHJpbmct
PnN0cmluZ1dpdGhDU3RyaW5nXygka2V5KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICRy
ZXN1bHQtPmF1dG9yZWxlYXNlKCk7CisgICAgfTsKKyAgICBteSAkbWFrZU5TQXJyYXlGcm9tQXJy
YXkgPSBzdWIgeworICAgICAgICBteSAoJGFycmF5KSA9IEBfOworICAgICAgICBteSAkcmVzdWx0
ID0gTlNNdXRhYmxlQXJyYXktPmFsbG9jKCktPmluaXRXaXRoQ2FwYWNpdHlfKHNjYWxhcihAeyRh
cnJheX0pKTsKKyAgICAgICAgZm9yIG15ICRpdGVtIChAeyRhcnJheX0pIHsKKyAgICAgICAgICAg
ICRyZXN1bHQtPmFkZE9iamVjdF8oTlNTdHJpbmctPnN0cmluZ1dpdGhDU3RyaW5nXygkaXRlbSkp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiAkcmVzdWx0LT5hdXRvcmVsZWFzZSgpOworICAg
IH07CisKKyAgICBteSAkc2ltdWxhdG9yRU5WSGFzaFJlZiA9IHt9OworICAgICRzaW11bGF0b3JF
TlZIYXNoUmVmID0gJHNpbXVsYXRvck9wdGlvbnMtPnthcHBsaWNhdGlvbkVudmlyb25tZW50fSBp
ZiAkc2ltdWxhdG9yT3B0aW9ucyAmJiAkc2ltdWxhdG9yT3B0aW9ucy0+e2FwcGxpY2F0aW9uRW52
aXJvbm1lbnR9OworICAgIG15ICRhcHBsaWNhdGlvbkFyZ3VtZW50cyA9IFxAQVJHVjsKKyAgICAk
YXBwbGljYXRpb25Bcmd1bWVudHMgPSAkc2ltdWxhdG9yT3B0aW9ucy0+e2FwcGxpY2F0aW9uQXJn
dW1lbnRzfSBpZiAkc2ltdWxhdG9yT3B0aW9ucyAmJiAkc2ltdWxhdG9yT3B0aW9ucy0+e2FwcGxp
Y2F0aW9uQXJndW1lbnRzfTsKKyAgICBteSAkc2Vzc2lvblVVSUQ7CisgICAgaWYgKCRzaW11bGF0
b3JPcHRpb25zICYmICRzaW11bGF0b3JPcHRpb25zLT57c2Vzc2lvblVVSUR9KSB7CisgICAgICAg
ICRzZXNzaW9uVVVJRCA9ICRzaW11bGF0b3JPcHRpb25zLT57c2Vzc2lvblVVSUR9OworICAgIH0g
ZWxzZSB7CisgICAgICAgICRzZXNzaW9uVVVJRCA9ICJ0aGVBd2Vzb21lVW5pcXVlU2Vzc2lvbklk
ZW50aWZpZXJGb3IiIC4gYXBwRGlzcGxheU5hbWVGcm9tQnVuZGxlKCRhcHBCdW5kbGUpOworICAg
IH0KKyAgICAjIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSB0aGUgaU9TIGFwcGxpY2F0aW9uIGFkb3B0
IHRoZSBmaWxlcyBkZXNjcmlwdG9ycyBmb3Igb3VyIHN0YW5kYXJkIG91dHB1dCBhbmQgZXJyb3Ig
c3RyZWFtcy4KKyAgICBteSAkc2Vzc2lvbkluZm8gPSB7CisgICAgICAgIGFwcGxpY2F0aW9uQXJn
dW1lbnRzID0+ICYkbWFrZU5TQXJyYXlGcm9tQXJyYXkoJGFwcGxpY2F0aW9uQXJndW1lbnRzKSwK
KyAgICAgICAgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9PiAmJG1ha2VOU0RpY3Rpb25hcnlGcm9t
SGFzaCgkc2ltdWxhdG9yRU5WSGFzaFJlZiksCisgICAgICAgIGFwcGxpY2F0aW9uSWRlbnRpZmll
ciA9PiBOU1N0cmluZy0+c3RyaW5nV2l0aENTdHJpbmdfKGFwcElkZW50aWZlckZyb21CdW5kbGUo
JGFwcEJ1bmRsZSkpLAorICAgICAgICBhcHBsaWNhdGlvblBhdGggPT4gTlNTdHJpbmctPnN0cmlu
Z1dpdGhDU3RyaW5nXygkYXBwQnVuZGxlKSwKKyAgICAgICAgZGV2aWNlVURJRCA9PiBOU1N0cmlu
Zy0+c3RyaW5nV2l0aENTdHJpbmdfKCRzaW11bGF0ZWREZXZpY2UtPntVRElEfSksCisgICAgICAg
IHNlc3Npb25VVUlEID0+IE5TU3RyaW5nLT5zdHJpbmdXaXRoQ1N0cmluZ18oJHNlc3Npb25VVUlE
KSwKKyAgICB9OworCisgICAgb3BlbklPU1NpbXVsYXRvcigpOworCisgICAgbG9hZElQaG9uZVNp
bXVsYXRvck5vdGlmaWNhdGlvbklmTmVlZGVkKCk7CisgICAgbXkgJGlQaG9uZVNpbXVsYXRvck5v
dGlmaWNhdGlvbiA9IG5ldyBJUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb247CisgICAgJGlQaG9u
ZVNpbXVsYXRvck5vdGlmaWNhdGlvbi0+c3RhcnRPYnNlcnZpbmdBcHBsaWNhdGlvbkxhdW5jaGVk
Tm90aWZpY2F0aW9uKCk7CisgICAgJGlQaG9uZVNpbXVsYXRvck5vdGlmaWNhdGlvbi0+cG9zdFN0
YXJ0U2Vzc2lvbk5vdGlmaWNhdGlvbigkc2Vzc2lvbkluZm8pOworICAgIHdoaWxlICghJGlQaG9u
ZVNpbXVsYXRvck5vdGlmaWNhdGlvbi0+aGFzUmVjZWl2ZWRBcHBsaWNhdGlvbkxhdW5jaGVkTm90
aWZpY2F0aW9uKCkpIHsKKyAgICAgICAgbXkgJGRhdGUgPSBOU0RhdGUtPmFsbG9jKCktPmluaXRX
aXRoVGltZUludGVydmFsU2luY2VOb3dfKDAuMSk7CisgICAgICAgIE5TUnVuTG9vcC0+Y3VycmVu
dFJ1bkxvb3AtPnJ1blVudGlsRGF0ZV8oJGRhdGUpOworICAgICAgICAkZGF0ZS0+cmVsZWFzZSgp
OworICAgIH0KKyAgICAkaVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9uLT5zdG9wT2JzZXJ2aW5n
QXBwbGljYXRpb25MYXVuY2hlZE5vdGlmaWNhdGlvbigpOworICAgIHJldHVybiAkaVBob25lU2lt
dWxhdG9yTm90aWZpY2F0aW9uLT5hcHBsaWNhdGlvbkxhdW5jaGVkQXBwbGljYXRpb25QSUQoKTsK
K30KKwogc3ViIHJ1bk1hY1dlYktpdEFwcCgkOyQpCiB7CiAgICAgbXkgKCRhcHBQYXRoLCAkdXNl
T3BlbkNvbW1hbmQpID0gQF87CkBAIC0yMTg5LDggKzI0MDcsMTMgQEAgc3ViIGRlYnVnU2FmYXJp
CiAKIHN1YiBydW5TYWZhcmkKIHsKLQogICAgIGlmIChpc0FwcGxlTWFjV2ViS2l0KCkpIHsKKyAg
ICAgICAgaWYgKHdpbGxVc2VJT1NEZXZpY2VTREtXaGVuQnVpbGRpbmcoKSkgeworICAgICAgICAg
ICAgZGllICJPbmx5IHJ1bm5pbmcgU2FmYXJpIGluIGlPUyBTaW11bGF0b3IgaXMgc3VwcG9ydGVk
IG5vdy4iOworICAgICAgICB9CisgICAgICAgIGlmICh3aWxsVXNlSU9TU2ltdWxhdG9yU0RLV2hl
bkJ1aWxkaW5nKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBydW5JT1NXZWJLaXRBcHBJblNpbXVs
YXRvcihtb2JpbGVzYWZhcmlCdW5kbGUoKSk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJ1
bk1hY1dlYktpdEFwcChzYWZhcmlQYXRoKCkpOwogICAgIH0KIAo=
</data>
<flag name="review"
          id="257736"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>