HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Windows/System32/zh-TW/wlancfg.dll.mui
MZ����@���	�!�L�!This program cannot be run in DOS mode.

$5�<�q�R�q�R�q�R�e���p�R�e�P�p�R�Richq�R�PEL�!D

p�j@ 8@8.rdata�@@.rsrcP B@@P��
T88P��$��8.rdata8x.rdata$zzzdbg �.rsrc$01�2@�.rsrc$02 o�2��OS]>�e�SF�Qu^�{���P���0�H�(�@�`�Z�
x��
���
���
��*��+��,�- �.8�/P�0h�7��8��i��j�����������(��@��X��p���������������������0��H��`��x������������������� ��8��P��h����������������������(��@��X��p���������������	�	�0	�H	�`	�x	��	� �	�!�	�$�	�+�	�-
�. 
�/8
�1P
�3h
�7�
�;�
�<�
�?�
�@�
�C�
�D�I(�J@�KX�Lp�M��Q��U��W������B��0@P`p��������

 
0
@
P
`
p
�
�
�
�
�
�
�
�
 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p��������t2��,3l��3��h4N��4��P<\��T��\��Xk��$t�
�����0�>�p�8
���>����ЬX�(�N�x��������.��^�L����p�����`����t���D�Ժf�<���Ľ����x����l�|���$�
�0�p���<�����`��������(������^� �j���������\���V�T���0�,�\�����F�(��@��\���T�����������J��������T����T�`�6�����0v����|r�������X��0	:�l(��X�������pv��0���*�0
�<��,F�tB��%x�0*�80��06�07���7���<~�=���@:��BS�MUIXML_FORMAT_TRANSFORMXML_WLANREPORT_TRANSFORM�����P+�i9�^Q\201��,�
�r~	IE������MUIzh-TW*g1\�}#��}	�_j�d\O�}��]b_bck(W-N�e#��}-N�e#��}ck(W"uuܕo�ck(W�c"}ck(WW�I�!q�l��X��v�rKa\NP-��[��v�e�X0Rh�<hgQ0
*Rd�h�<hgQ�vNP-��[��v0
-��[D}Kanj
�0
o�:ynj
�0
\ WLAN -��[�j2QX[�p XML �j0
_U�R;N�c�}�0
\Pbk;N�c�}�0
PA͑�etet;N�c�}�-��[0
IHV ���v}T�N0
PA	#��}0R!q�}�}�0
�
O(u�e_: %1!s! [name=]<string> [[ssid=]<string>] [[interface=]<string>] 

�Sxe:

    j�            <P
    ssid          - !q�}�}v SSID0
    name          - (u�e#��}Vf��v-��[�j
T1z0
    interface     - Vf�#��}�v�Nb�
T1z0

�P;�:

    O(uc�[�v-��[�j#��}0R ssid f}�[�v!q�}�}�0�|q}
N�S	gNP�S(u�v�Nb��
    GR�S�Nweu interface �Sxe0&TGRg�_c�[�v�Nb�Vf�#��}0

    profile name �Sxe/f�_���Sxe�� ssid /f�Sweu�v�Sxe0�-��[�j-N�S	gNP
    SSID�GRgO(udk SSID �O#��}0�-��[�j-N	gYP SSID�GR�_�c�[ ssid �S
    xe0

    �|q}
N	giQP�N
N�v�S(u�Nb���O��� interface �Sxe0c�[ interface Bf�
    r��Sxe
N�S�N/f,�(uW[CQ
T1z0

    �c�[�v�Nb��]�}#��}0R!q�}�}��dk}T�NgHQ��vMR#��}�v�}�-N�e#��}�6q�_
    �QVf�#��}0R�e�v�}�0 6q����iQP�}�/f�vT�v�}��GRdk}T�N�Sg�P�V
    b�R��
Ng�WL��NUO�R\O0

�{�O:

    %1!s! name=Profile1 ssid=SSID1
    %1!s! name=Profile2 ssid=SSID2 interface="Wireless Network Connection"
-N�e!q�}�}v#��}0
�
O(u�e_: %1!s! [[interface=]<string>]

�Sxe:

    j�            <P
    interface     - Vf�-N�e#��}�v�Nb�
T1z0

�P;�: 

    (Wc�[�v�Nb�
N-N�e!q�}�}v#��}0

    �Y�g�|q}
N	giQP�N
N�v�S(u�Nb���O��� interface �Sxe0
    (W�Nb�
T1z-N�S�NO(u,�(uW[CQ�Nc�[YP�Nb�0

�{�O:

   %1!s! 
   %1!s! interface="Wireless Network Connection"
PA(\!q�}�}e�X0RAQ1�b\���v!q�}�}�
                 n�U0

O(u�e_: %1!s! [permission=]allow|block|denyall [[ssid=]<string>] 
          [networktype=]infrastructure|adhoc

�Sxe:

    j�            <P
    permission    - �{x�hV�v
kP�^��W0
    ssid          - !q�}�}v SSID0
    networktype   - !q�}�}v�}�^��W0

�P;�:

    \!q�}�}e�X0R(W�|q}
N-��[�vAQ1��T\���}�n�U0

    �Y�g
kP��p allow b block��O���	g ssid �Sxe0�Y�g
kP��p denyall�
    �O
N���f}�[ ssid �Sxe0

�{�O:

    %1!s! permission=allow ssid=ssid1 networktype=infrastructure
    %1!s! permission=block ssid=ssid2 networktype=adhoc
    %1!s! permission=denyall networktype=adhoc
\ WLAN -��[�j�e�X0R��f�
N�vc�[�Nb�0
;
O(u�e_: %1!s! [filename=]<string> [[interface=]<string>] [[user=]all|current]

�Sxe:

    j�            <P
    filename      - -��[�j XML �jHh�v
T1z0
    interface     - �Nb�
T1z0
    user          - O(u��{
W�@b	gO(u�b�S	g�vMR�vO(u�0

�P;�: 

    �p@b	gb�vMR�vO(u�(W�Nb�
N�e�X!q�}�}�-��[�j0

    ���	g filename �Sxe0�[/fS+T-��[�jnj�e�v XML �jHh
    
T1z0

    interface �Sxe�Sweu0�[/f1u "netsh wlan show interface" 
    }T�No�:y�vvQ-NNP�Nb�
T1z0�Y�g�]c�[�Nb�
T1z�
    -��[�jg�e�X0Rc�[�v�Nb��&TGRg�e�X(W@b	g!q�}
    �Nb�
N0

    user �Sxe�Sweu0dk�Sxec�[dk-��[�j/fWY(u0RhQ�O(u�
    b/f�S	g�vMR�vO(u�0�-��`�l/fWY(u0R@b	gO(u�0

�{�O:

    %1!s! filename="Profile1.xml" interface="Wireless Network Connection"
    user=current
�
O(u�e_: %1!s! [permission=]allow|block|denyall [[ssid=]<string>] 
       [networktype=]infrastructure

�Sxe:

    j�             <P
    permission    - �{x��v
kP�^��W0
    ssid          - !q�}�}v SSID0
    networktype   - !q�}�}v�}�^��W0

�P;�:

    \!q�}�}e�X��](W�|q}
N-��[�vAQ1��T
    \���v�}�n�U0

    �Y�g
kP��p allow b block��O(u�Sxe ssid0�Y�g
kP��p
    denyall�GR
N�a�c�O�Sxe ssid0

�{�O:

    %1!s! permission=allow ssid=ssid1 networktype=infrastructure
_U�Rs�0}nj
� Wi-Fi IHV ��0
>
O(u�e_: %1!s! 

�P;�:

    _U�Rs�0}nj
� Wi-Fi IHV ��0

�{�O:

    %1!s! 
\Pbks�0}nj
� Wi-Fi IHV ��0
>
O(u�e_: %1!s! 

�P;�:

    \Pbks�0}nj
� Wi-Fi IHV ��0

�{�O:

    %1!s! 
'�_AQ1�b\���v!q�}�}�n�U�yd�
                 !q�}�}�0
�
O(u�e_: %1!s! [permission=]allow|block|denyall [[ssid=]<string>] 
          [networktype=]infrastructure|adhoc

�Sxe:

    j�            <P
    permission    - �{x�hV�v
kP�^��W0
    ssid          - !q�}�}v SSID0
    networktype   - !q�}�}v�}�^��W0

�P;�: 

    �_�|q}
N-��[�vAQ1�b\���}�n�U�yd�!q�}�}�0

    �Y�g
kP��p allow b block��O���	g ssid �Sxe0
    �Y�g
kP��p denyall��O
N���f}�[ ssid �Sxe0

�{�O:

    %1!s! permission=allow ssid=ssid1 networktype=infrastructure
    %1!s! permission=block ssid=ssid2 networktype=adhoc
    %1!s! permission=denyall networktype=adhoc
*Rd�NbYP�Nb��v WLAN -��[�j0
�
O(u�e_: %1!s! [name=]<string> [[interface=]<string>]

�Sxe:

    j�            <P
    name          - ��*Rd�KN-��[�j�v
T1z0
    interface     - �Nb�
T1z

�P;�:

    �_�g�Nb�b@b	g�Nb��yd�!q�}�}�-��[�j0

    name �Sxe/f�_����v0�[/f��*Rd�KN-��[�j�v
T1z0
    interface �Sxe�Sweu0�c�[dk�Sxe�GR�Sg�_c�[�v�Nb�*Rd�-��[�j0�weu
    dk�Sxe�GRg�_wQ	gr�-��[�j�v@b	g�Nb�*Rd�r�-��[�j0

    �`�S�N�p-��[�j
T1zO(u,�(uW[CQ�wQ	g�v&{
T1z�v-��[�j��g���yd�0

�{�O:

    %1!s! name="Profile 1" interface="Wireless Network Connection"
    %1!s! name="Profile 1" i=*
�
O(u�e_: %1!s! [permission=]allow|block|denyall [[ssid=]<string>] 
       [networktype=]infrastructure

�Sxe:

    j�             <P
    permission    - �{x��v
kP�^��W0
    ssid          - !q�}�}v SSID0
    networktype   - !q�}�}v�}�^��W0

�P;�:

    �_�](W�|q}
N-��[�vAQ1��T\���v�}�n�U-N
    �yd�!q�}�}�0

    �Y�g
kP��p allow b block��O(u�Sxe ssid0�Y�g
kP�
    �p denyall�GR
N�a�c�O�Sxe ssid0

�{�O:

    %1!s! permission=allow ssid=ssid1 networktype=infrastructure
/S�Qc�[-��[�j0R XML �jHh0
�
O(u�e_: %1!s! [name=]<string> [folder=]<string> [[interface=]<string>] [key=<string>]

�Sxe:

    j�            <P
    name          - ��/S�Q�v-��[�j
T1z0
    folder        - \��2QX[-��[�j XML �jHh�vnj�e>Y
                    
T1z0
    interface     - -��[dk-��[�j�v�Nb�
T1z0 
    key           - 傁��N}�eW[o�:yёp��ˊ-��[ key=clear0

�P;�:

    \x��S�v-��[�j2QX[0Rc�[nj�e>Y-N�v XML �jHh0
\�e�kP
    /S�Q�v-��[�j��[�v8��Q�jHh
T1z�p
    "Interface Name-Profile Name.xml"0

    folder0name �S interface I{�Sxe���S�Nweu0�Y�gc�[
    -��[�j
T1z�GRg2QX[c�[�v-��[�j0&TGRg2QX[�NN�Nb�
    
N�v-��[�j0

    �Y�g�c�O folder �Sxe�GR�_�c�[�S�_,g_j��f�X[�S�v
    �s	gnj�e>Y0�[�S�NO(u�vMR�]\O�v��vU}
\_�
    _N�S�NO(u�v
\_0dkY�"." h�:y�vMR�v�]\O�v��
    � ".." h�:y�vMR�]\O�v��v
Nd\�v�0
    nj�e>Y
T1z
N��/f UNC (�(u}T
Tca�O) _0
    �Ogq�-��-��[�jg2QX[(W�vMR�v�]\O�v�-N0
    

    �Y�gc�[�Nb�
T1z�\�Sg2QX[c�[KN�Nb�
Nc�[�v-��[�j0
    &TGRg2QX[�|q}
NwQ	gc�[
T1z�v@b	g
    -��[�j0
    
    �Y�g���}�eW[�vёp���N|T�S�/f,g_j�|q}�{t�T�8��Q XML �jHh\S
    �b}�eW[�vёp�0&TGR�8��Q XML �jHh\S�b�R�[�vёp�0

�{�O�

    %1!s! name="profile 1" folder=c:\profiles
        interface="Wireless Network Connection"
    %1!s! name="profile 2" folder=.
    %1!s! name="profile 3" folder=. key=clear
_U(ub\P(u�Nb�
N�v��R-��[��/�0
&
O(u�e_: %1!s! [enabled=]yes|no [interface=]<string>

�Sxe:

    j�          <P
    enabled     - \��R-��[��/�-��[�p_U(ub\P(u0
    interface   - �_����fvQ-��[�v�Nb�
T1z0

�P;�: 

    _U(ub\P(u�Nb�
N�v��R-��[��/�0�Y�g�]\P(u�
    Windows \
Ng�_c�[�v�Nb���R#��}0R�NUO!q�}�}�0

    iQP�Sxe��/f�_���v0

�{�O:

    %1!s! enabled=yes interface="Wireless Network Connection"
-��[!q�}�}�-��[�j�v�U}Y-��[��^0
�
O(u�e_: %1!s! [name=]<string> [interface=]<string> [priority=]<integer>

�Sxe:

    j�          <P
    name        - �����f*QHQ��^�vO(u�-��[�j
T1z0
    interface   - -��[dk-��[�j�v�Nb�
T1z0
    priority    - r�O(u�-��[�j�v�e*QHQ��^0

�P;�:

    -��[�Nb�
N!q�}�}�-��[�j�v�U}Y-��[��^0
    	NP�Sxe��/f�_���v0

    �S	gO(u�-��[�j�v��^�S�N���f0�D}�SGR-��[�j/f/U���v0
    dkY��D}�SGR-��[�j�v*QHQ��^8l`�ؚ�e
O(u�-��[�j0

    priority �Sxe��c�[ca(u-��[�jn�U-N
    -��[�j�v�eMOn0�Y�g/f 1�r�-��[�j\g�y�
    O(u�-��[�jn�U-N�v,{NPMOn0

�{�O:

    %1!s! name="profile1" interface="Wireless Network Connection"
    priority=1
'(W�S���v�}�n�U-No�:yb��υ\���v
                 �}�0
�
O(u�e_: %1!s! [display=]show|hide

�Sxe:

    j�          <P
    display     - (W�S���v�}�n�U-No�:yb��υ\���v�}�0

�P;�: 

    c�[/f&T��(W�S���v�}�n�U-No�:yb��υ\���v�}�0�Y�g\P(u��S���v!q�}
    �}�n�U-N\
Ngo�:y\���v�}�0

    ���	g display �Sxe0

�{�O:

    %1!s! display=show 

	_U(ub\P(u��d�0

O(u�e_: %1!s! [mode=]yes|no|persistent] 

�Sxe:

    j�           <P
    mode        - _U(u�c�~��d�b\P(u��d�0

�P;�:

    _U(ub\P(u��d���N�S-��[/f&Tc�~��d��vx��0
    �Y�g_U(u�\g6eƖ!q�}@S�W�}v��d����
    &N2QX[0R��d��jHh0

    ���	g�Sxe!j_0(W persistent !j_N�(W�|q}͑�e��_j�_�
    �N6qgc�~��d�0�Y�g!j_/f-��p disable�GRg\Pbk
    c�~�S^�c�~��d�0

�{�O:

    %1!s! mode=yes 

(AQ1�b
NAQ1��kP�N�^�z@b	gO(u��v
                 -��[�j0
�
O(u�e_: %1!s! [[enabled=]yes|no]

�Sxe:

    j�          <P
    enabled     - AQ1�b
NAQ1��kP�N�^�z@b	gO(u��v-��[�j0

�P;�:

    �Y�g enabled /f yes�GRAQ1��kP�N�^�z@b	gO(u��v-��[�j0

    enabled �Sxe/f
N�Sweu�v0

�{�O:

    %1!s! enabled=yes
_U(ub\P(u�Nb�
N�v MAC ��_jS0

O(u�e_: %1!s! [enabled=]yes|no [interface=]<string>

�Sxe:

    j�          <P
    enabled     - \ MAC ��_jS-��[�p�]_U(ub�]\P(u0
    interface   - \���fvQ-��[�v�Nb�
T1z0

�P;�:

    ��Nb�
N/e�c��_jS�b��_jS�R���]1u�|q}�{t�T\���GRdk}T�N\g1YWe0

    iQP�Sxe��/f�_���v0

�{�O:

    %1!s! enabled=yes interface="Wireless Network Connection"
PA!o�:y_U(ub\P(u��R-��[
                 ��/�0
D
O(u�e_: %1!s!

�P;�:

      o�:y�(u-��[(W�kP�Nb�
N_U(ub\P(u��R-��[��/�0

�{�O:

      %1!s!

o�:y\���v�}�o�:y-��[0
F
O(u�e_: %1!s!

�P;�:

      o�:y�(u-��[/f&Tg(W�S���v�}�n�U-No�:y\���v�}�0

�{�O:

      %1!s!
o�:y��f�
N!q�}@S�W�}�E��Rz_�vgQ�[0
�
O(u�e_: %1!s! [[interface=]<string>]

�Sxe:

    j�             <P
    interface     - ��o�:yE��Rz_nj
��v�Nb�
T1z0

�P;�:

    o�:y�|q}
N�v 802.11 !q�}@S�W�}��Nb��TE��Rz_nj
�0

�{�O:

    %1!s!
o�:yAQ1��T\���v�}�n�U0
�
O(u�e_: %1!s! [permission=]allow|block

�Sxe:

    j�             <P
    permission    - x��SAQ1�b\���}�n�U0

�P;�:

    o�:y�|q}
N@b-��[AQ1��T\���v�}�n�U0

�{�O:

    %1!s!
    %1!s! permission=allow
    %1!s! permission=block
#o�:y�|q}
N�v!q�}@S�W�}��Nb�
                 n�U
D
O(u�e_: %1!s!

�P;�:

   o�:y�|q}
N-��[�v!q�}@S�W�}��Nb�0
   �P}T�N�l	g�Sxe0

�{�O:

   %1!s!
o�:y��f��S�Nw���v�}�n�U0
�
O(u�e_: %1!s! [[interface=]<string>] [[mode=]ssid/bssid]

�Sxe:

    j�            <P
    interface    - -��[dk-��[�j�v�Nb�
T1z0
    mode         - �S�_s�0}�v bssid nj
�0

�P;�:

    o�:y�|q}�S(u�v�}�0
    interface �T bssid �Sxe���Sweu0

    �Y�gf}�[�Nb�
T1z�\�SgR�Qf}�[
    �Nb�
N�v�}�0&TGR�\gR�Q�|q}
    �S���v@b	g�}�0

    �Y�gf}�[ mode=bssid�\_NgR�Q�kP ssid
    �S���v bssid0&TGR\�SgR�Q ssid0

�{�O:

    %1!s! interface="Wireless Network Connection"
    %1!s! mode=Bssid
    %1!s!
o�:y��f�
N-��[�v-��[�jn�U0
f
O(u�e_: %1!s! [[name=]<string>] [interface=<string>] [key=<string>]

�Sxe:

    j�            <P
    name          - ��o�:y�v-��[�j
T1z0
    interface     - -��[dk-��[�j�v�Nb�
T1z0
    key           - �N}�eW[o�:yёp��-��[ key=clear

�P;�:

    o�:y-��[�jnj�ebR�Q�|q}
N�v-��[�j0
    name �S interface �Sxe���S�Nweu0

    �Y�gf}�[-��[�j
T1z�\go�:y-��[�j�vgQ�[0
    &TGR\�SgR�Q-��[�j
T1z�T�c�0

    �Y�gf}�[�Nb�
T1z�\�SgR�Qf}�[�Nb�
N�v
    c�[-��[�j0&TGR\R�Q�|q}
NwQ	gf}�[
T1z�v@b	g-��[�j0

    �Y�g\ key -��[�p "clear"��N|T�S�/f,g_j�|q}�{t�T�
    \g�N}�eW[o�:yёp�0

    �D}�SGR-��[�j/f/U���v0O(u�-��[�j/f�S���[�v�&NN
    vQ�U}Y-��[�S�N���f0

�{�O:

    %1!s! name="profile 1" interface="Wireless Network Connection"
    %1!s! name="profile 2"
    %1!s! name="profile 3" key=clear
    %1!s!
o�:y!q�}@S�W�}v�(u-��[0
�
O(u�e_: %1!s!

�P;�:

      o�:y!q�}��R-��[
g�R�v�(u-��[�S�b/f&T(W�kP�Nb�
N_U(ub\P(u��R-��[
      ��/���N�S/f&T��(W�S���v�}�n�U-No�:y\���v�}�0

      O(u "show filters" }T�N�S�N�S�_AQ1��T\���v�{x�hVn�U0

�{�O:

      %1!s!
o�:y_U(ub\P(u!q�}@S�W�}��d�0
8
O(u�e_: %1!s!

�P;�:

    o�:y_U(ub\P(u!q�}@S�W�}��d�0

�{�O:

    %1!s!
o�:y�[te�v!q�}݈n�T�}�nj
�0
�
O(u�e_: %1!s!

�P;�:

    o�:y�|q}
N�[te�v 802.11 !q�}�Nb�nj
�0�}T!q�}-��[�S�b:
        - !q�}E��Rz_nj
�
        - !q�}�Nb��rKa
        - !q�}D}Ka-��[
        - !q�}�}��{x�hV
        - !q�}�}�-��[�jn�U�Ts�0}nj�e
        - �S���v!q�}�}�

�{�O:

    %1!s!
o�:y�kP�N/f&TAQ1��^�z@b	g�v
    O(u�-��[�j0
L
O(u�e_: %1!s!

�P;�:

    o�:yhQ�W-��[/f&TAQ1��^�z@b	g�vO(u�-��[�j
    b
NAQ1��kP�N�^�z0

�{�O:

    %1!s!
o�:y MAC ��_jS�]_U(ub�]\P(u0
I
O(u�e_: %1!s!

�P;�:

      o�:y�kP�Nb�
N�v MAC ��_jS��/�/f&T�]_U(u�vhQ�W-��[0

�{�O:

      %1!s!

o�:y�|q}�v!q�}�R��
5
O(u�e_: %1!s!

�P;�:

      o�:y�|q}�v!q�}�R��

�{�O:

      %1!s!
"uuo�:ygяKN!q�}�]\O���knj
��v1XJT0
v
O(u�e_: %1!s! [duration=<string>] [log=<string>] [logger=<autologger,...>]

�P;�:

    "uuo�:ygяKN!q�}�]\O���knj
��v1XJT09h�d�-�<P�\9h�d�`�|q}
N�v�N�N
    ���j�"uuN��S	N)Y�v!q�};m�R1XJT0

    O(ux��d'`�v duration �Sxec�[)Yxe�sS�S���f1XJT�vg��0

    �`_N�S�N�c�O etl �jHh�v_ZP�p�N�N�v�O�n��
N��O(u��f��N�N���j0

    �`�S�N�c�O��R��hV
g�Rn�U (�N�ޞR���kP
g�R)��NNuO�d�S���j0
    �-�g�d�S WiFiSession � LwtNetLog ���j0

�{�O:

    %1!s! duration="7" log="logpath.etl" logger="name1,name2"
PA�
O(u�e_: %1!s!

�P;�:

      o�:y!q�}��R-��[
g�R�v�(u-��[�S�b/f&T(W�kP�Nb�
N_U(ub\P(u��R-��[
      ��/��/f&T��(W�S���v�}�n�U-No�:y\���v�}���N�S/f&T(W GP -��[�v�}�
      
N�PO(u GP -��[�j0

      O(u "show filters" }T�N�S�N�S�_AQ1��T\���v�{x�hVn�U0

�{�O:

      %1!s!
o�:y [(W GP -��[�v�}�
N�PO(u GP -��[�j] -��[0
[
O(u�e_: %1!s!

�P;�:

              o�:yhQ�W-��[�/f&T(W GP -��[�v�}�
N�PO(u GP -��[�j0

�{�O:

              %1!s!
-��[!q�}�}�-��[�j-N�v�Sxe0
�
O(u�e_: %1!s! [name=]<string> [[interface=]<string>] 
       [SSIDname=<string>] [ConnectionType=ESS|IBSS] [autoSwitch=yes|no]
       [ConnectionMode=auto|manual] [nonBroadcast=yes|no] 
       [Randomization=[yes|no|daily]] 
       [authentication=open|shared|WPA|WPA2|WPAPSK|WPA2PSK] 
       [encryption=none|WEP|TKIP|AES] [keyType=networkKey|passphrase] 
       [keyIndex=1-4] [keyMaterial=<string>] [PMKCacheMode=yes|no] 
       [PMKCacheSize=1-255] [PMKCacheTTL=300-86400] [preAuthMode=yes|no] 
       [preAuthThrottle=1-16 [FIPS=yes|no] 
       [useOneX=yes|no] [authMode=machineOrUser|machineOnly|userOnly|guest] 
       [ssoMode=preLogon|postLogon|none] [maxDelay=1-120] 
       [allowDialog=yes|no] [userVLAN=yes|no] 
       [heldPeriod=1-3600] [AuthPeriod=1-3600] [StartPeriod=1-3600] 
       [maxStart=1-100] [maxAuthFailures=1-100] [cacheUserData = yes|no] 
       [cost=default|unrestricted|fixed|variable] 
i
�Sxe:

    j�             <P
    name           - ���O9e�v-��[�j
T1z0
    interface      - -��[�v-��[�j@b(W�v�Nb�
T1z0
    SSIDname       - !q�}@S�W�}v SSID�g'Yw��^/f 320
    ConnectionType - c�[�}�/f�WyP}�i (ESS) b�_j�d\O (IBSS)0
    ConnectionMode - �N��RbKb�R�e_#��}0R�}�0
                     �#��}^��W�p IBSS�GR�_�-��pKb�R0
    autoSwitch     - �{
W-N	gca(u�}�Bf���R#��}�}v
                     +oJ�L��p0
    randomization  - _U(ub\P(u MAC MO@W��_jS0
    nonBroadcast   - /f&T��#��}󁱖υ�v�}�0
    authentication - ��O(u�vW�I�^��W0
    encryption     - ��O(u�v�R�[�e�l0
    keyType        - qQ(uёp�/f�}�ёp�b�ܖ�[�x0
    keyIndex       - �ar�O(uёp�"}_�O�R�[!q�}�}�Amϑ0
    keyMaterial    - �}�ёp�b�ܖ�[�x0
    PMKCacheMode   - /f&T��O(u PMK �_�S0�S	g
\ WPA2 �}�Mb	gHe0
    PMKCacheSize   - (u6b�z
N PMK �_�S-N�v��vxe�v0
    PMKCacheTTL    - �OYu PMK �_�S�vBf��w��^ (�y)0
    preAuthMode    - /f&T\O(u�HQW�I�0�S	g
\ WPA2 �}�Mb	gHe0
    preAuthThrottle - Vf�0�я�v AP �N2�L�͑�eW�I��v!kxe0
    FIPS           - _U(u (Enable) b\P(u (Disable) FIPS !j_0
    useOneX        - /f&T��O(u 802.1X W�I�0
    authMode       - (u�eW�I��v��I�^��W0
    ssoMode        - ��Vf��v�UN{veQ^��W (�Y�g	g�vq�)0
    maxDelay       - �^�z�UN{veQ#��}�v>�Bf<P0
    allowDialog    - AQ1� (Allow) b
NAQ1� (Disallow) �HQ{veQBfo�:y
\q��eJX0
    userVLAN       - c�[vuO(u�W�I�Bf��}�/f&T��R�c0R
NT�v VLAN0
    heldPeriod     - iQ!kVf�W�I�KN���v����Bf�� (�y)0
    AuthPeriod     - (u6b�zI{�_W�I�hV�V�a�vBf��
NP� (�y)0
    StartPeriod    - (W EAPOL-Start KNMRI{P�vBf��w��^ (�y)
    maxStart       - �P��v EAPOL-Start 
�o`�vg'Yxe�v0
    maxAuthFailures - 
\�e�gND}��I��vW�I��Q�sW�I�1YWe@b��
                      AQ1�!kxe�v
NP�0
    cacheUserData  - /f&T�_�SO(u���I��N�O�_�~O(u0
    cost          -  �-��[�jܕo��vb,g0

�P;�:

    �O9ec�[�v-��[�j0�/f	gc�[�Nb��GR�Sg�O9ec�[�Nb�
N
    �v-��[�j0

    �Sxe name �p�_���Sxe0d��N-��[�j
T1z��Nb�KNY����_�
    �\c�[�SNP�Sxe0

�{�O:

    %1!s! name=Profile1 authMode=userOnly ssoMode=preLogon 
    %1!s! name=Profile2 ssoMode=none fips=yes 
PA
-��[;N�c�}�gQ�[0
�
O(u�e_: %1!s! [mode=]allow|disallow [ssid=]<ssid>
                         [key=]<passphrase> [keyUsage=]persistent|temporary

�Sxe:

    j�            <P
    mode            c�[/f&TAQ1�b�ybk;N�c�}�0
    ssid            ;N�c�}v SSID0
    key             ;N�c�}�@bO(u�vO(u��[hQ'`ёp�0
    keyUsage        c�[O(u��[hQ'`ёp�/fc�~�vb�fBf�v0
   

�P;�:

    �P}T�Ng���f;N�c�}vgQ�[�S+T: ;N�c�}v SSID�AQ1�b�ybk�|q}
    -N�v;N�c�}���N�S;N�c�}�@bO(u�vO(u��[hQ'`ёp�0
    
    O(u��[hQ'`ёp��ar�/f 8 0R 63 P ASCII W[CQ��O�Y��ܖ�[�x�b
    /f 64 PASmQ2�MOxeW[���Nh� 32 P�N2�MOMOCQD}0 

    �Y�g\ keyUsage c�[�p persistent�\g2QX[ёp��ܖ�[�x�&N(W*g�O�Q!k_U
    �R;N�c�}�BfO(u0&TGR\�Sg(W�vMRbN!k_U�R;N�c�}�BfO(u�[0N�e
    \Pbk;N�c�}��\g�_�|q}*Rd��fX[�v�[hQ'`ёp�0�Y�g*gc�[ keyUsage�
    GR�-��p persistent0

    dk}T�N����|q}�{�T
kP�Mb��AQ1�b�ybk;N�c�}�0 

�{�O:

    %1!s! mode=allow 
    %1!s! ssid=ssid1 
    %1!s! key=passphrase keyUsage=persistent 

o�:y;N�c�}�gQ�[�T�rKa0
�
O(u�e_: %1!s! [[setting=]security]

�Sxe:

    j�            <P
    setting         c�[��o�:y�v;N�c�}�-��[0

�P;�:

    �P}T�Ngo�:y;N�c�}vgQ�[�TvQ�rKa (��]_U�R)0

    �c�[ setting �Sxe��P}T�N\go�:y�[hQ'`o�{�l�T;N�c�}vёp�0
    �S	g�|q}�{t�TMb�S�Nw0R�[hQ'`ёp�0

�{�O:

    %1!s!
    %1!s! setting=security
_U�R;N�c�}�0
Q
O(u�e_: %1!s!

�P;�:

    �P}T�Ng��Bl WLAN 
g�R_U�R;N�c�}�0
    �P}T�N����|q}�{t�T
kP�0

�{�O:

    %1!s!
\Pbk;N�c�}�0
>
O(u�e_: %1!s!

�P;�:

    �P}T�Ng��Bl WLAN 
g�R\Pbk;N�c�}�0

�{�O:

    %1!s!
͑�etet;N�c�}�-��[0
�
O(u�e_: %1!s! [data=]key

�Sxe:

    j�            <P
    data            c�[��͑�etet�v;N�c�}�nj�e0

�P;�:

    �P}T�N�S��Bl WLAN 
g�R
\;N�c�}�O(u�e�v�[hQ'`ёp�0

�{�O:

    %1!s! ёp�
o�:yAQ1�R�NO(u���I�-��[0
V
O(u�e_: %1!s!

�P;�:

      o�:y/f&TAQ1�O(uR�NO(u���I��vhQ�W-��[
      (W 802.1x �}�-NW�I�0

�{�O:

      %1!s!
4AQ1�b�ybkO(u�O(uR�NO(u���I�
                         �N2�L��}�I�0
�
O(u�e_: %1!s! [allow=]yes|no

�Sxe:

    j�          <P
    allow     - AQ1�b�ybkR�NO(u���I�0

�P;�:

    c�[AQ1�b�ybk(W(u6b�z
NO(uqQ(uO(u���I���N2�L��}�W�I�0

    ���	g allow �Sxe0

�{�O:

    %1!s! allow=yes 

\-��[�j^��W-��[�p alluser b peruser0 
[
O(u�e_: %1!s! [name=]<string> [profiletype=]all|current [[interface=]<string>]

�Sxe:

    j�           <P
    name           - �����f�v-��[�j
T1z0
    profiletype    - �`���v-��[�j^��W [all-user/per-user]0
    interface      - (WvQ
N-��[-��[�j�v�Nb�
T1z0

�P;�:

    ���f@bc�[-��[�j�v-��[�j^��W0�Y�gc�[�Nb��GR�Sg���fr��Nb�
N�v-��[�j0

    ���	g name �T profiletype �Sxe0

�{�O:

    %1!s! name=Profile1 profiletype=all
\;N�c�}�-��[�j/S�Qb XML �jHh0
l
O(u�e_: %1!s!

�P;�:

    dk}T�Ng\;N�c�}�(u6b�z-��[�j2QX[b XML �jHh0�`�S�N\�[�e�X�vQ�N
    �v Windows !q�}(u6b�z�N#��}�dk;N�c�}�0

�{�O:

    %1!s! 

"uu WLAN zfga��d�1XJT.
O
O(u�e_: %1!s!

�P;�:

    dk}T�Ng"uu WLAN zfga��d�1XJT�&N��r�1XJT�n�P}Y1XJT WLAN OUL�0

�{�O:

    %1!s! 
-��[\��g0
�
O(u�e_: %1!s! [value=]0-60

�Sxe:

    j�          <P
    value - c�[Bf��w��^ (R�)��(Wdkg��\�f\P
\dk�}v��R#��}Vf�0

�P;�:

    �O9ec�[�v�BfhV0��P<P�vc�[�UMO/fR�0
    Kb�R#��}Vf�0�]\O���k���fb�ZԚ#��}Bf�
    g͑-�\���rKa0


�{�O:

    %1!s! value=2
    %1!s! 25 

PA�Qxe  %1!s! �P�V/��� %2!u!:
}T�Nx�� "%1!s!" 
Nck�x�v<P "%2!s!"0NPbYP}T�N�v�Sxe
Nck�xbz�1Y0
 x�� "%1!s!" �v<P
Nck�x0�a�p 8 0R 63 PW[CQ0
PA}T�Nx�� "%1!s!" 
Nck�x�v<P "%2!s!"0

�|q}
N�l	gdk.z!q�}�Nb�0
�|q}
N�l	g!q�}�Nb�0PA!q�}��R-��[
g�R (wlansvc) &N*g�WL�0'#��}0R!q�}��R-��[
g�R (wlansvc) Bf|vu/���: /��� %1!lu!0PA
�|q}
N	g %1!d! P�Nb�: 

�|q}
N	g %1!d! P�Nb�: 
�
    
T1z                   : %1!s!
    �c�                   : %2!s!
    GUID                   : %3!s!
    �[ԚMO@W               : %4!02x!:%5!02x!:%6!02x!:%7!02x!:%8!02x!:%9!02x!
    �rKa                   : %10!s!
!    -��[�j                 : %1!s! 
p
    SSID                   : %1!s!
    BSSID                  : %2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!:%7!02x!]
    �}�^��W               : %1!s!
    !q�}���l^��W           : %2!s!
    W�I�                   : %3!s!_
    �R�[�e_               : %1!s!
    #��}!j_               : %2!s!
    �S�                   : %3!d!c
    �c6e��s (Mbps)        : %1!s!
    �P8���s (Mbps)        : %2!s!
    
�_�                   : %3!d!%% 
-��[�j�fX[-��[�j�c"} (�[hQ)�c"} (
N�[hQ)��R#��}!qHe  (H2E)PA=    ;N�c�}�(u6b�z: %1!02x!:%2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!
M                             %1!02x!:%2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!

    ;N�c�}�rKa  : %1!s!
PA�Nb� %2!s! 
N�e�X-��[�j %1!s!0-��[�j<h_/��� 0x%1!X!: %2!s! 
!q�l�e�X-��[�j0/��� %x%1!X!: %2!s! 
/!q�l�e�X-��[�j "%1!s!"0�]	gT
T�v-��[�jX[(W�e�D}�SGR-NbO(u���W
NT�N!q�l���[0�`�l	g�p�vMRO(u��e�X-��[�j "%1!s!" �v
kP�0�`�l	g�p@b	gO(u��e�X-��[�j "%1!s!" �v
kP�0(!q�}�Nb�aS "%2!s!" 
N/e�c-��[�j "%1!s!" -N�v�[hQ'`b#��}-��[0(!q�l(W�Nb� "%3!s!" 
N�e�X-��[�j0/��� 0x%1!X!: %2!s! 
�NUO�Nb�
N��~b
N0R-��[�j "%1!s!"0�]*Rd��Nb� "%2!s!" �v-��[�j "%1!s!"0,�`�l	g�� Y�v
kP��b�Nb� "%2!s!" 
N�v-��[�j "%1!s!" /f�D}�SGR-��[�j0�]�)R�f�e-��[�j "%1!s!" �v*QHQ��^0 *g
\ "%2!s!" ���f-��[�j "%1!s!" �v*QHQ��^0 �NUO�S(u�Nb�
N���l	g-��[�j "%1!s!"0 -��[�j�U}Y-��[��^�_ 1 ���Y0!q�l���f�D}�SGR-��[�j "%1!s!" �v*QHQ��^0"
�]�)R(W�jHh "%2!s!" -N2QX[�Nb�-��[�j "%1!s!"0
�NUO�Nb�
N��~b
N0R-��[�j "%1!s!"0�Nb� "%2!s!" 
N~b
N0R-��[�j "%1!s!"0	�|q}
N�l	g-��[�j0$
�]�)R(W�jHh "%2!s!" -N2QX[�D}�SGR-��[�j "%1!s!"0
c�[�vnj�e>Y "%1!s!" 
Nck�x0(W��f�
N~b
N0R-��[�j "%1!s!"0�Nb� "%2!s!" 
N�l	g-��[�j "%1!s!"0	�|q}
N�l	g-��[�j0-��[�j
N/f!q�}@S�W�}�-��[�j0b
�Nb� %1!s! 
N�v-��[�j %2!s!: 
======================================================================= 


�Nb� %1!s! 
N�v-��[�j: 
    %1!s! : %2!s!
    <!q>
0
�D}�SGR-��[�j (/U��)
---------------------------------

O(u�-��[�j
-------------

    %1!s!
PA(Wdk-��[�j-N-��[�v EAP �e�l
NX[(W0-��[�j-NS�b�v EAP �e�l-��[!qHe0��Bl�v�d\O����cؚ
kP�0PA2
�|q}
N�vAQ1�n�U (O(u�) 
------------------------------- 
2
�|q}
N�v\��n�U (O(u�) 
------------------------------- 
    <!q>
    SSID: "%1!s!"�^��W: %2!s!
;
�|q}
N�vAQ1�n�U (�D}�SGR) 
--------------------------------------- 
;
�|q}
N�v\��n�U (�D}�SGR) 
--------------------------------------- 
"
!q�}@S�W�}�-��[ 
--------------------- 
    (W�Nb� "%2!s!" 
N_U(u��R-��[��/�
    (W�Nb� "%2!s!" 
N\P(u��R-��[��/�
    (W�S���v�}�n�U-No�:y\���v�}�: %1!s!/f

&T

PA     �P(W GP -��[�v�}�
NO(u GP -��[�j: %1!s!/f

&T

    AQ1�R�NO(u���I�(u�e�}�W�I�: %1!s!/f

&T

    \��g: %1!d! R�0

    \��g: *g-��[0

PA    �Nb� %1!s! 
N/e�c MAC ��_jS�R��
"    �Nb� %1!s! �v MAC ��_jS�R���]1u�|q}�{t�T\P(u
    �Nb� %1!s! �v MAC ��_jS�R���]\P(u
    �Nb� %1!s! �v MAC ��_jS�R���]_U(u
PA
!q�}�|q}�R��
------------ 
)    #��c0R 802.11 !q�}���l�v)Y�}xe�v 802.11 : %1!u!

)    #��c0R 802.11 !q�}���l�v)Y�}xe�v 802.11 (!q�l�S�_<P)

0    �R��d\}͑-�                                : /e�c

1    �R��d\}͑-�                                : 
N/e�c

    FLDR /e�c (!q�l�S�_<P)

2    qQX[/e�c                                    : �N�e

@    qQX[/e�c                                    : Wi-Fi He���]M�NO� 1x1

;    qQX[/e�c                                    : Wi-Fi He���]�}c

;    qQX[/e�c                                    : ͅYrwQ	g�ؚ�v*QHQ��^

6    PLDR                                        : /e�c

7    PLDR                                        : 
N/e�c

    PLDR /e�c (!q�l�S�_<P)

@    ݈n�S�NTBf(WvQ
N�d\O�v�S�xe�v
NP�                                 : %1!u!

     ݈n�S�NTBf(WvQ
N�d\O�v�S�xe�v
NP� (!q�l�S�_<P)

    !q�}�R��!q�lO(u

 
�Nb�
T1z       : %1!s! 
�vMR	g %1!d! P�S���v�}�0
y
SSID %1!d! : %2!s!
    �}�^��W                : %3!s!
    W�I�                    : %4!s!
    �R�[                    : %5!s! 
�    BSSID %1!d!                 : %2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!:%7!02x!
         
�_�               : %8!d!%%  
         !q�}���l^��W       : %9!s!
         �S�               : %10!d! 
!q�lo�:y�S(u�v�}���V�pr��Nb�
N�v��R
-��[�]%1!s!0
         �W,g��s (Mbps)    :         vQ�N��s (Mbps)    : %1!s!
"         ����v MFP          : %1!x!
�
SSID %1!d! : %2!s!
    HESSID                  : %3!s!
    Network type            : %4!s!
    Authentication          : %5!s!
    Encryption              : %6!s! 
PA         Dmg �c6e��s (Mbps):         Dmg |v���s (Mbps):
�Nb�
T1z: %1!s!

    !q�lO(udk�Nb��vE��Rz_nj
�0
"    E��Rz_                  : %1!s!
$    �^FU                      : %1!s!
#    �c�O�                    : %1!s!
6    Hr,g                      : %1!d!.%2!d!.%3!d!.%4!d!
$    �eg                      : %1!s!
)    �jHh                      : =~qQ %1!d! P
$    INF �jHh                  : %1!s!
&                                %1!s!
,    ^��W                      : �Pq} Wi-Fi E��Rz_
,    ^��W                      : �S�Y Wi-Fi E��Rz_
    IHV 
g�R/f&TX[(W          : /f
E    IHV �Nb�aS OUI            : [%1!02x! %2!02x! %3!02x!]�^��W: [%4!02x!]
!    IHV �dEQ'` DLL _       : %1!s!
%    IHV UI �dEQ'` ClSID       : {%1!s!}
&    IHV :��e CLSID            : {%1!s!}
    /e�c�v!q�}���l^��W        : %1!s!    �WyP}�i!j_-N/e�c�vW�I��S�R�[�e_:
.                                %1!-16s!%2!s!
    �_j�d\O!j_-N/e�c�vW�I��S�R�[�e_:
PA    /e�c FIPS 140-2 !j_      : /f
    /e�c FIPS 140-2 !j_      : &T
+    /e�c FIPS 140-2 !j_      : /f [E��Rz_c�QlxԚ�v�[]
6    /e�c�v!q�}o�:yhV: %1!s! (Wb_E��Rz_: %2!s!�Wi-Fi E��Rz_: %3!s!)
/f&TPA    /f&T/e�c;N�c�}�          : /f
    /f&T/e�c;N�c�}�          : &T

&N*g(W�|q}
N_U(u!q�}��d�0!q�}��d��vMRck(W�WL�-N0
!q�}��d��vMR�]\Pbk0
��d���\2QX[(W "%1!s!"0
g�_��d���2QX[(W "%1!s!"0&N*g(W�|q}
N_U(uc�~!q�}��d�0c�~!q�}��d��vMRck(W�WL�-N0c�~!q�}��d��vMR�]\Pbk0PA:    /e�c 802.11w �{t
�Fh�Ow�                                 : /f
:    /e�c 802.11w �{t
�Fh�Ow�                                 : &T
�

=======================================================================
============================= o�:y�Nb��R�� ============================
=======================================================================

!!q�}�|q}nj
�Xd��
(Bf��: %1!s! %2!s! %3!s!)
�

======================================================================= 
============================== o�:yE��Rz_ =========================== 
=======================================================================

�

======================================================================= 
============================= o�:y�Nb� ========================= 
=======================================================================

�

======================================================================= 
============================= o�:y-��[ =========================== 
=======================================================================

�

======================================================================= 
============================== o�:y�{x�hV =========================== 
=======================================================================

�

======================================================================= 
============================= o�:y-��[�j =========================== 
=======================================================================

�

======================================================================= 
========================== o�:y-��[�j
T1z=* ======================= 
=======================================================================

�

======================================================================= 
======================= o�:y�}�!j_=BSSID ====================== 
=======================================================================

�

======================================================================= 
=========================== SHOW CREATEALLUSER ======================== 
=======================================================================

�

======================================================================= 
=========================== o�:y;N�c�}� ======================= 
=======================================================================


-��[�jnj
� 
------------------- 
!    
T1z                   : %1!s!
!    Hr,g                   : %1!d!
    �c�            : %1!s!
!    ^��W                   : %1!s!
!q�}@S�W�}�	g�}@S�W�}�*g�w�v^��W    �c6Rx��        : 
        #��}!j_           : ��R#��}
        #��}!j_           : Kb�R#��}
(        �}��^�d           : sSO�}�*g�^�d���/f2�L�#��}
.        AutoSwitch         : R�c0R�ca(u�v�}� (�S���vq�)
%        AutoSwitch         :
NR�c0RvQ�N�}�

#��}-��[ 
--------------------- 
    �}�^��W               : %1!s!
�WyP}�iAdhoc�NUO�}�^��WPA*g�w!    SSID xe�v              : %1!d!
%                             "%1!s!"
�D}�SGR-��[�j�vMRO(u�-��[�j@b	gO(u�-��[�j�]WY(u: %1!s!
#    SSID 
T1z              : "%1!s!"
#    SSID 
T1z              : "%1!s!"
    !q�}���l^��W           : %1!s!�%1!s!�NUO!q�}���l^��WFHSSDSSSIR �W;�802.11a802.11b802.11g!q�l��X��]�[��v�^FU(0x%X)    �^FU�dEQX�%R�x            :      �^FU�dEQ                  : 
NX[(W
802.11n802.11ac802.11ad802.11ax[  ]

0x%1!02X! 
�[hQ'`-��[ 
----------------- 
!    W�I�                   : %1!s!
    �R�[�e_               : %1!s!
��_UR�NWPA-EnterpriseWPA-PersonalWPA-NoneWPA2-Enterprise
WPA2-Personal*g�w!qWEPTKIPCCMP	WEP-40bit
WEP-104 MOCQ
WPA-Use-Group*g�w    �[hQ'`ёp�             : %1!s!
�s(W:\    ёp�"}_               : %1!d!
TS�R�^FU�[��vTS�R�^FU�[��vGCMPWPA3-OmiWPA3-P�NGCMP-256PAGMAC-256OWE!    802.1X                 : �]_U(u
!    EAP ^��W               : %1!s!
/    EAP ^��W               : 
\�a�dk-��[�j�v EAP �e�l
NX[(W0
    ��I��]-��[             : /f
    ��I��]-��[             : &T
    802.1X W�I���I� : %1!s!
��f�bO(u���I���f���I�O(u���I��Oӌ��I�*gc�[&T    �_�SO(u�nj
� : %1!s!
/f*gc�[PA!        ^��W               : %1!s!
        �^r�
NP� (�y)    : %1!d!
�HQ{veQ�_�~{veQ        vQ�N
\q��eJX : %1!s!
        
\q��eJX8�eQ (�y) : %1!d!
�]_U(u�]\P(u'        �}��^�d           : �S	gdk�}�ck(W�^�dBfMb#��}

    �UN{veQ-��[: 
    �^FU�dEQnj�ew��^       : %1!d!
    ёp�gQ�[               : %1!s!
PA     FIPS !j_              �%1!s!
�]_U(u�]\P(u        O(u�W�I� VLAN    : %1!s!
�]_U(u�]\P(u        MAC ��_jS         ��]_U(u
        MAC ��_jS         ��]\P(u
        MAC ��_jS         ��k)Y
�|q}
N�vTN�Nn�U-N�]	gdk�{x�hV0�|q}
N�vAQ1�n�U-N�]	gdk�{x�hV0 �|q}
N�v\��n�U-N�]	gdk�{x�hV0 f�JT: dk�{x�hV��D}�SGR]��z�\
NguHe0 
�]�)R(W�|q}
N�e�X�{x�hV0PA�]�)R�yd��|q}�v�{x�hV0	�|q}
N�l	g�{x�hV0PAm
# ----------------------------------------
# !q�}@S�W�}�-��[
# ----------------------------------------
pushd %1!s!

popd
# !q�}@S�W�}�-��[P}>\7

# AQ1��{x�hVn�U
# ----------------------------------------
7

# \���{x�hVn�U
# ----------------------------------------
4
%1!s! %2!s! %3!s!=%4!s! %5!s!="%6!s!" %7!s!="%8!s!"&
%1!s! %2!s! %3!s!=%4!s! %5!s!="%6!s!"�Nb� "%2!s!" 
N�v��R-��[�]%1!s!0�]_U(u�]\P(u�`�l	g�� Y�v
kP��b�D}�SGR�]WY(u0�Nb� "%2!s!" 
N�vMO@W��_jS�]%1!s!0PA_U(u\P(ur��Nb�
N/e�c��_jS�R���br��R���]1u�|q}�{t�T\��0(W�S���v�}�n�U-No�:y\���v�}��]-��p: %1!s!0�`�l	g�� Y�v
kP��b�D}�SGR�]WY(u0PA!q�}��d��]_U�R0
c�~!q�}��d��]_U(u0!q�}��d��]\Pbk0
c�~!q�}��d��]\Pbk0
!q�}��d��](W�WL�-N0c�~!q�}��d��](W�WL�-N0	!q�}��d�&N*g�WL�0c�~!q�}��d�&N*g�WL�0
&N*g(W�|q}
N-��[!q�}��d�0&N*g(W�|q}
N-��[c�~!q�}��d�0��d���8��Q_ "%1!s!" 
N/fck�x�v�0
��d���\2QX[(W "%1!s!"0
��d���2QX[(W "%1!s!"0PA
AQ1��kP�N�^�z@b	gO(u��v-��[�j0

&N
N/f�kP�N��AQ1��^�z@b	gO(u��v-��[�j0
�`�l	g�� Y�v
kP��b�D}�SGR�]WY(u0*g\-��[�j "%1!s!" c>mf}c�[�v�Nb�0	b�R�[b#��}��Bl0#��}��Bl1YWe�/����p 0x%1!X!0-��[�j "%1!s!" c�[�v�}�!q�l(u�O#��}0 -��[�j "%1!s!" c�[�v�}�!q�l#��}0
�S�V: %2!s!!!q�l#��}0�Nb�aS "%1!s!" 
N�v WLAN ��R-��[�]\P(u0SSID "%1!s!" 
NX[(W�e-��[�j "%2!s!" -N0PA�Nb� "%1!s!" b�R�[b-N�e#��}��Bl0!�Nb� "%1!s!"  -N�e#��}��Bl1YWe�/����p 0x%2!X!0#!q�l-N�e#��}0�Nb�aS "%1!s!" 
N�v WLAN ��R-��[�]\P(u0)�Nb� "%2!s!" 
N�v-��[�j "%1!s!" �]�)R���f�p@b	gO(u�-��[�j0
PA)�Nb� "%2!s!" 
N�v-��[�j "%1!s!" �]�)R���f�p�vMRO(u�-��[�j0
4�Nb� "%2!s!" 
N�v-��[�j "%1!s!" /f�D}�SGR-��[�j0
!q�l�O9e�D}�SGR-��[�j�v^��W0 
.�`�l	g�� Y�v
kP��!q�l���f�Nb� "%2!s!" 
NKN-��[�j "%1!s!" �v-��[�j^��W0
$�Nb� "%2!s!" �v-��[�j "%1!s!" �]/f@b	gO(u�-��[�j0
$�Nb� "%2!s!" �v-��[�j "%1!s!" �]/f�vMRO(u�-��[�j0
PA 
�Nb� "%2!s!" �v-��[�j "%1!s!" �]�)R�f�e0

!q�l�O9e-��[�j0/��� 0x%1!X!: %2!s!

�`�l	g
kP��O9e�vMRO(u��v-��[�j "%1!s!"0

�`�l	g
kP��O9e@b	gO(u��v-��[�j "%1!s!"0
*
!q�}�Nb�aS "%2!s!" 
N/e�c-��[�j "%1!s!" -N�v�[hQ'`b#��}-��[0
)
�Nb� "%2!s!" 
N-��[�j "%1!s!" -N�v oneX -��[*g_U(u0 
4
�Nb� "%2!s!" 
N�v-��[�j "%1!s!" -N*g_U(u IHV -��[0ˊc�[ MS W�I�^��W0 

8�eQ�v�Sxe
\�e�S�Y-��[�j-��[!qHe0 
%
!q�l�p!q�}�Nb�aS "%2!s!" �v-��[�j "%1!s!" -��[b,g0

dk�|q}
N/e�cb,g-��[0
 PAWLAN 
g�R-NAQ1�;N�c�}�!j_0WLAN 
g�R-N
NAQ1�;N�c�}�!j_0(!q�l���f WLAN 
g�R-N�v;N�c�}�!j_/e�c0
�l	g�� Y�v
kP�b�]WY(u�D}�SGR0�]�)R���f;N�c�}v SSID0 
;N�c�}�!j_�]-��[bAQ1�0 
;N�c�}�!j_�]-��[b
NAQ1�0 
AQ1�R�NO(u���I��]-��[�p: %1!s!0�`�l	g�� Y�v
kP��b�D}�SGR�]WY(u0�]b�R���f;N�c�}vO(u�ёp��ܖ�[�x0 
\��g/f-��[�p %1!d! R�0�`�l	g�� Y�v
kP��b�D}�SGR�]WY(u0    WLAN 
g�R-N/f&TAQ1�;N�c�}�!j_: /f

    WLAN 
g�R-N/f&TAQ1�;N�c�}�!j_: &T

"
;N�c�}�-��[ 
----------------------- 
#    SSID 
T1z              : "%1!s!"
    g'Y�v(u6b�zxe�v       : %1!d!
"
;N�c�}�rKa   
--------------------- 
!    �rKa                   : %1!s!
!q�lO(u\*g���Y�]_U�RM    BSSID                  : %1!02x!:%2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!
    !q�}���l^��W           : %1!s!
!    �S�                   : %1!d!
    (u6b�zxe�v             : %1!d!
PAE        %1!02x!:%2!02x!:%3!02x!:%4!02x!:%5!02x!:%6!02x!        %7!s!
�]W�I�!qHe.
;N�c�}[hQ'`-��[ 
-------------------------------- 
    �|q}�[hQ'`ёp�          : <�]�R�[>
    �|q}�[hQ'`ёp�          : %1!s!
    !j_                    : AQ1�
     !j_                    : 
NAQ1�
    O(u��[hQ'`ёp�O(u�e_: Persistent
    O(u��[hQ'`ёp�O(u�e_: Temporary
    O(u��[hQ'`ёp�        : %1!s!
    O(u��[hQ'`ёp�        : <*gc�[>
"    -��[                    : <*g-��[>
WLAN 
g�R
N/e�cO(u-��[�j "%1!s!" �v#��}0;N�c�}�    ;N�c�}�(u6b�z
NP�        : %1!d!
    ;N�c�}�(u6b�z
NP�        : *gP�6R

�]_U�R;N�c�}�0 
!q�l_U�R;N�c�}�0 

�]\Pbk;N�c�}�0 
!q�l\Pbk;N�c�}�0t1u�N�x/f %1!d!0 
�]�)R͑�etet;N�c�}v�[hQ'`ёp�0 
�`�_�O(u�|q}�{t�T
kP��_}T�N�c:yW[CQ�WL��P}T�N0 
#��}0R;N�c�}�-��[�j�]b�R2QX[0R�jHh "%1!s!"0 
\*g-��[;N�c�}�-��[�j0 
PA%"%1!s!" -N�s(W�]	g�SO(u�v WLAN zfga��d����j�1XJT�jHh0
 �N6q�S�NO(u WLAN zfga��d����j�MO�e "%1!s!"0
ck(W"uu1XJT ... 

ck(W"uu���j ... 
�[b0
1YWe�/����p 0x%1!X!
"%1!s!" -N�l	g��1XJT�vzfga��d����j0
ck(W�gb� WLAN �N�N ...
ck(W�gb� NCSI �N�N ...
ck(W�gb� NDIS �N�N ...
ck(W�gb� EAP �N�N ...
ck(W�gb� WCM �N�N ...

ck(W�gb�8h�_�N�N ...

ck(W�gb��|q}�N�N ...
ck(W�WL� ipconfig ...
ck(W�WL� netsh wlan show all ...
ck(W�gb�!q�}-��[�j ...
ck(W�gb��|q}�TO(u��aI� ...
ck(W�gb�O(u�nj
� ...

ck(W�gb��}�݈n ...

1XJT�]�[eQ: %1!s!
PA
b,g-��[
-------------
     b,g                   : 
N�SP�6R
    b,g                   : �V�[
    b,g                   : ���R
    b,g                   : 
Nf
    b,g                   : 
Ni�(u
    �cяnj�eP�6R           : /f
    �cяnj�eP�6R           : &T
    ��N�nj�eP�6R           : /f
    ��N�nj�eP�6R           : &T
    �X^X                   : /f
    �X^X                   : &T
    +oJ�                   : /f
    +oJ�                   : &T
PA    b,g�O�n               : �-�<P
    b,g�O�n               : �D}�SGR
    b,g�O�n               : O(u�
    b,g�O�n               : �d\O�T
PA
��R-��[
------------- 
6    O(uϑ (MB)                                  : %1!d!
5    O(uTekBf��                             : %1!s! %2!s!
3    nj�eP�6R (MB)                              : %1!d!
8    8�eQ;��[ (Kbps)                                 : %1!d!
.    3^�U1�g���Y�eg                    : %1!s! %2!s!
    3^�U1�gBf��                  : 
'       t^xe                      : %1!d!
%       gxe                    : %1!d!
(       )Yxe                       : %1!d!
'       Bfxe                      : %1!d!
&       R�xe                    : %1!d!
%       �yxe                    : %1!d!
!       �k�yxe               : %1!d!
(    ͑-�3^�U1�g                          : /f
PA(    ͑-�3^�U1�g                          : &T
3    �P8�'Y\
NP� (MB)                            : %1!d!
8    8��Q;��[ (Kbps)                                 : %1!d!
PA'
!q�}݈n�R�� 
---------------------------- 
I    WDI Hr,g (Windows)                          : %1!u!.%2!u!.%3!u!.%4!u!

5    ̗ԚHr,g                                    : %1!S!

4    �z�S                                        : /e�c

5    �z�S                                        : 
N/e�c

3    ߎԚ_ AP                                   : /e�c

4    ߎԚ_ AP                                   : 
N/e�c

/    �}��v��hV!j_                              : /e�c

0    �}��v��hV!j_                              : 
N/e�c

4    Wi-Fi Direct ݈n                           : /e�c

5    Wi-Fi Direct ݈n                           : 
N/e�c

6    Wi-Fi Direct GO                             : /e�c

7    Wi-Fi Direct GO                             : 
N/e�c

3    Wi-Fi Direct (u6b�z                         : /e�c

4    Wi-Fi Direct (u6b�z                         : 
N/e�c

PA/e�c


N/e�c


Nf

.    �mT!j_                                    : 2    IBSS                                        : .    RƖ)Y�}                                    : .    �R\O
�Fh                                    : ,    ANQP 
g�Rnj
��c"}                           : .    DOT11k ��0�1XJT                             : *    �S�Ow��v�{t
�Fh                            : +    P2P ���R�c}��S(u'`                          : .    P2P ݈n�c"}                                : ,    P2P 
g�R
T1z�c"}                            : ,    P2P 
g�Rnj
��c"}                            : .    P2P ̀of�c"}                                : 2    FIPS                                        : .    �zsS#��}                                    : 0    Dx �_}T NLO                                 : 2    D0 NLO                                      : *    �^8O�S��N�c�[JT                            : ,    �R��d\}͑-�                                : ,    s^�Sd\}͑-�                                : /    MAC ��_jS                                  : *    IHV �^8O'`!jD}�]-��[                        : 2    Tx zz��nj�eAmxe�v                           : %1!u!

2    Rx zz��nj�eAmxe�v                           : %1!u!

0    /e�c�vTBf�S�xe�v                          : %1!u!

4    P2P GO #��c�W�xe                           : %1!u!

1    P2P (u6b�z#��c�W�xe                        : %1!u!

0    P2P L��R AP (u6b�zxe�v
NP�                  : %1!u!

.    /e�c�v ANQP 
g�R�JTxe�v
NP�                : %1!u!

I    WDI Hr,g (IHV)                              : %1!u!.%2!u!.%3!u!.%4!u!

2    qQX[/e�c                                    : *g�w

2    qQX[/e�c                                    : !qHe

.    �_�I��c                                    : 2    MU-MIMO                                     : /    Miracast �c6ehV                             : *    BSS I��c (802.11v)                    : 1    P2P GO (�e 5 GHz)                           : +    /SAm�cd\}͑-�                              : ,    ASP 2.0 
g�R
T1z�c"}                        : ,    ASP 2.0 
g�Rnj
��c"}                        : .    /e�c IP �dEQ                                : &    SAE W�I�                          : +    FTM \O�p_U�RhV                            : -    MBO /e�c                                 : &    WPA3 SUITE-B W�I�                 : 0    WPA3 SUITE-B FIPS !j_                      : %    OWE W�I�                          :    SAE ܖJn
\CQ }W�I�          : F
    !q�}���l�rKa           : lxԚ %1!s!
                             ߎԚ %2!s!��_Uܕ��ck(WR�c?    qQX[/e�c                                    : WLAN He���]M�NO� 1x1

:    qQX[/e�c                                    : WLAN He���]�}c

4    WFD ݈n                                    : /e�c

5    WFD ݈n                                    : 
N/e�c

6    WFD GO                                      : /e�c

7    WFD GO                                      : 
N/e�c

3    WFD (u6b�z                                  : /e�c

4    WFD (u6b�z                                  : 
N/e�c

+    ^��W                      : �Pq} WLAN E��Rz_
+    ^��W                      : �Su WLAN E��Rz_
5    /e�c�v!q�}o�:yhV: %1!s! (Wb_E��Rz_: %2!s!�WLAN E��Rz_: %3!s!)
PA!q�l�^�z\S�j0/����x: %1!d!
!q�l\ %1!s! �e�X0R\S�j0/����x: %2!d!
PA�4VS_VERSION_INFO��
4aJ
4aJ?�StringFileInfo�040404B0LCompanyNameMicrosoft CorporationPFileDescriptionWlan Netsh TS�Rz_ DLLn'FileVersion10.0.19041.3636 (WinBuild.160101.0800)8InternalNamewlancfg.dll�.LegalCopyright� Microsoft Corporation. All rights reserved.HOriginalFilenamewlancfg.dll.muij%ProductNameMicrosoft� Windows� Operating SystemDProductVersion10.0.19041.3636DVarFileInfo$Translation�<?xml version="1.0" encoding="utf-8"?>

<!--
Copyright (c) 2016  Microsoft Corporation

Module Name:

xml-format.xsl

Abstract:

Stylesheet used to format XML

Revision History:

01-19-2016  marcguy      initial version
-->

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" version="1.0" indent="no" omit-xml-declaration="no"/>
  
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
PA<?xml version="1.0" encoding="utf-8"?>

<!--
Copyright (c) 2014  Microsoft Corporation

Module Name:

wlanreport-stylesheet.xsl

Abstract:

Stylesheet defining how the xml report is
transformed into the html report

Revision History:

09-28-2014  ryanwood      initial version
02-01-2015  ryanwood      add in rendering for custom commands
-->

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template name="css">
        <style type="text/css">
          body {
          margin: 0;
          padding: 0;
          background-color: #EFEFEF;
          font-family: "segoe ui light", "segoe ui";
          letter-spacing: 0.03em;
          }

          table {
          border-collapse: collapse;
          }

          th {
          border: 1px solid #222;
          text-align: center;
          }

          tr {
          height: 1.5em;
          border: 1px solid #222;
          }

          td {
          border: 1px solid #222;
          }

          #top-btn {
          position: fixed;
          padding: 5px;
          border: 2px solid #333;
          cursor: pointer;
          }
          #top-btn p {
          margin: 0;
          }

          #report-wrapper {
          width: 1000px;
          margin: 0 auto;
          }

          #session-graph-wrapper {
          background-color: #1F1F1F;
          outline: 2px solid #AAA;
          }

          #session-graph {
          cursor: pointer;
          }

          #graph-event-info {
          float: left;
          width: 500px;
          height: 170px;
          color: #DDD;
          padding: 0px 30px 0px 20px;
          }
          #graph-event-info h4 {
          margin: 0px 0px 10px 0px;
          }

          #event-info {
          margin: 0;
          height: 135px overflow: scroll;
          }

          #sysinfo {
          margin: 0px 0px 30px 0px;
          }
          #sysinfo p {
          margin: 0;
          padding: 0;
          }

          #report-info p {
          margin: 0;
          padding: 0;
          }

          #disconnect-status tr {
          border: 1px solid #222;
          }

          #disconnect-status td {
          border: 1px solid #222;
          }

          #disconnect-status .status {
          width: 300px;
          padding-top: 0px;
          }

          #disconnect-reasons .reason {
          width: 800px;
          padding-top: 0;
          }

          .count {
          width: 75px;
          text-align: center;
          }

          .graph-background {
          position: absolute;
          z-index: -1;
          height: 1.5em;
          margin: -1px;
          background-color: rgb(171,168,244);
          }
          .graph-background.success {
          background-color: rgb(108, 216, 108);
          }

          .graph-background.failure {
          background-color: rgb(216, 108, 108);
          }

          .graph-background.warning {
          background-color: rgb(216, 216, 108);
          }

          #session-durations {
          border-left: 1px solid #222;
          overflow: hidden;
          }

          #duration-labels {
          text-align: center;
          }

          #duration-graph {
          height: 550px;
          border: none;
          }
          #duration-graph td {
          width: 80px;
          padding: 0px 2px 0px 2px;
          vertical-align: top;
          position: relative;
          border: none;
          }

          .duration-bar {
          width: 80px;
          position: absolute;
          }

          .bar-label {
          width: 80px;
          position: absolute;
          text-align: center;
          font-weight: bold;
          }

          .bar-background {
          background-color: rgb(171,168,244);
          display: block;
          width: 100%;
          height: 100%;
          outline: 1px solid #222;
          }

          .session {
          background-color: #FFF;
          margin: 0px 0px 20px 0px;
          padding: 10px;
          border: 2px solid #666;
          }
          .session p {
          margin: 0.2em;
          }

          .session table {
          width: 100%;
          }

          .session .event-header {
          width: 75px;
          }

          .session .time-header {
          width: 180px;
          }

          .session .message-header {
          width: auto;
          }

          .successful {
          background-color: #1BEB00;
          }

          .warning {
          background-color: #EBEB00;
          }

          .failed {
          background-color: #F00;
          }

          .info {
          background-color: #E2E2E2;
          }

          .message {
          width: 700px;
          height: 1.5em;
          overflow: hidden;
          white-space: pre;
          text-overflow: ellipsis;
          }
          .message.show {
          height: auto;
          overflow: auto;
          white-space: normal;
          }

          .message .expand-btn {
          cursor: pointer;
          }

          .error {
          background-color: rgb(255,178,178);
          font-weight: bold;
          }

          .ndis.sleep {
          background-color: #AF9AE4;
          }

          .ndis.wake {
          background-color: #E49AEF;
          }

          .wlan {
          background-color: #FFF;
          }
          .wlan.connect {
          background-color: #9AE4A6;
          }

          .wlan.disconnect {
          background-color: #F5BE9C;
          }

          .ncsi.internet {
          background-color: #9CCAF5;
          }

          .ncsi.local {
          background-color: #F1F59C;
          }

          .ncsi.none {
          background-color: #F59C9C;
          }
		  
          .wcm {
          background-color: #F0FFFF;
          }
		  
          .eap {
          background-color: #FFFFF0;
          }
		  
          .glow {
          font-weight: bold;
          outline: 3px solid #000000;
          }
		  
          #commands-output {
          margin: 0px 0px 30px 0px;
          }
          .command-output {
          background-color: #000;
          color: #C0C0C0;
          padding: 5px;
          outline: 5px solid #BBB;
          }
        </style>
    </xsl:template>
    
    <xsl:template name="js">
        var wlanReport = ( function()
        {
            var wlanReport = {},

            pointRadius = 8,
            eventOffset = 50,
            wlanYOffset = 0,
            ncsiYOffset = 100,
            ndisYOffset = 200,
            eventRenderInfo,
            boundRenderInfo,
            wlanBounds = [],
            connectivityBounds = [],
            powerBounds = [],

            bindToggleMessageBtns,
            toggleMessage,
            timeToXCoord,
            findNewestEvent,
            calculateEventCoordinates,
            findwlanBounds,
            findConnectivityBounds,
            findPowerBounds,
            drawEvents,
            drawPoint,
            drawSessionBounds,
            drawBound,
            drawAxis,
            drawEventRegionLabels,
            drawLegend,
            drawLegendLabel,
            drawSessionGraph,
            eventClickHandler,
            eventMouseMoveHandler,
            calculateSessionDuration,
            getSnapshotAtXY,
            getSessionAtXY,
            convertSnapshotTimes,
            convertFileTimeToUnixTime,
            fixCommandOutputFormatting,
			checkForEmptyReport,
            bindTopBtn;

            eventRenderInfo = {
                'Connect':   {'label':'C', 'color':'#9AE4A6'},
                'Disconnect':{'label':'D', 'color':'#F5BE9C'},
                'Sleep':     {'label':'S', 'color':'#AF9AE4'},
                'CS-Sleep':  {'label':'S', 'color':'#AF9AE4'},
                'Wake':      {'label':'W', 'color':'#E49AEF'},
                'CS-Wake':   {'label':'W', 'color':'#E49AEF'},
                'Internet':  {'label':'I', 'color':'#9CCAF5'},
                'Local':     {'label':'L', 'color':'#F1F59C'},
                'None':      {'label':'N', 'color':'#F59C9C'},
                'Error':     {'label':'X', 'color':'#FF0000'}
            };

            boundRenderInfo = {
                'Connected':       {'fill':'rgba(0,210,0,0.3)','stroke':'rgba(0,210,0,0.8)', 'lineWidth':'3'},
                'Power':           {'fill':'rgba(0,0,0,0.95)', 'stroke':'rgba(20,20,20,1.0)','lineWidth':'1'},
                'ConnectedStandby':{'fill':'rgba(0,135,0,0.3)','stroke':'rgba(0,100,0,0.95)','lineWidth':'1'}
            };

            bindToggleMessageBtns = function()
            {
                var divElements,
                    expandBtn,
                    i;

                divElements = document.getElementsByTagName('div');

                for( i = 0; i &lt; divElements.length; i++ ) {
                    if( divElements[i].className === 'message' ) {
                        expandBtn = divElements[i].firstChild;
                        expandBtn.addEventListener('click', toggleMessage(expandBtn), false);
                    }
                }
            };

            toggleMessage = function(btn)
            {
                return function() {
                    var message = btn.parentNode;

                    if(message.className === "message")
                    {
                        message.className = "message show";
                        btn.innerHTML = "[&#8210;]"; //A digit width hyphen. This way the button doesn't shrink (by much)
                    }
                    else
                    {
                        message.className = "message";
                        btn.innerHTML = "[+]";
                    }
                }
            };
            
            // Calculate the X coordinate for the snapshot based on the time it
            // occured relative to the 48 hours displayed on the graph.
            timeToXCoord = function(startTimeStr, snapshotTimeStr, width)
            {
                var twoDaysInMS  = (1000 * 60 * 60 * 24) * 2,
                    startTime    = parseInt(startTimeStr, 10),
                    snapshotTime = parseInt(snapshotTimeStr, 10),
                    endTime = startTime - twoDaysInMS,
                    xPosRatio    = 0;

                xPosRatio = (snapshotTime - startTime) / (endTime - startTime);

                return (width - (xPosRatio * width));
            };

            calculateEventCoordinates = function(canvas)
            {
                var width,
                    height,
                    xOffset  = 10,
                    yOffset  = 0,
                    xPos     = 0,
                    yPos     = 0,
                    lastXPos = [],
                    minXDiff = 2 * pointRadius, //The min difference between points to prevent them from overlapping
                    startTime,
                    i;

                if(snapshots.length === 0) {
                    return;
                }

                width = canvas.width;
                height = canvas.height;

                lastXPos[wlanYOffset] = -1;
                lastXPos[ndisYOffset] = -1;
                lastXPos[ncsiYOffset] = -1;

                startTime = findNewestEvent();

                for(i = 0; i &lt; snapshots.length; i++)
                {
                    if(snapshots[i].type === 'Connect') {
                        yOffset = wlanYOffset;
                    } else if(snapshots[i].type === 'Disconnect') {
                        yOffset = wlanYOffset;
                    } else if(snapshots[i].type === 'Error') {
                        yOffset = wlanYOffset;
                    } else if(snapshots[i].type === 'Wake' || snapshots[i].type === 'CS-Wake') {
                        yOffset = ndisYOffset;
                    } else if(snapshots[i].type === 'Sleep' || snapshots[i].type === 'CS-Sleep') {
                        yOffset = ndisYOffset;
                    } else {
                        yOffset = ncsiYOffset;
                    }

                    xPos = timeToXCoord(startTime, snapshots[i].time, width) - xOffset;
                    if(lastXPos[yOffset] >= 0 &amp;&amp; (lastXPos[yOffset]) - xPos &lt; minXDiff)
                    {
                        // Keep track of the offset we are adding to events to make sure that events
                        // remain in chronological order across their different y-axis channels (wlan,ndis,ncsi)
                        xOffset += (minXDiff - (lastXPos[yOffset] - xPos));
                        xPos = lastXPos[yOffset] - minXDiff;
                    }
                    
                    yPos = eventOffset + yOffset;
                    snapshots[i].x = xPos;
                    snapshots[i].y = yPos;

                    lastXPos[yOffset] = xPos;

                    // If the xPos is greater than the width of the canvas
                    // stop calculating cordinates since they won't fit anyways.
                    if (xPos > width) {
                        snapshots = snapshots.slice(0, i); //Discard the points that don't fit
                        break;
                    }
                }
            };

            // Unfortunatly the newest event is not always the first event in the list,
            // so we have to do a search for the newest event
            findNewestEvent = function()
            {
                var startTime = 0,
                    i;

                for(i = 0; i &lt; snapshots.length; i++) {
                    startTime = Math.max(startTime, snapshots[i].time);
                }

                return startTime;
            };

            drawEvents = function(canvas)
            {
                var graph,
                pointLabel,
                snapshot,
                style,
                i;

                graph = canvas.getContext('2d');

                if(snapshots.length === 0){
                    graph.font = "18px sans-serif";
                    graph.fillStyle = "#EFEFEF";
                    graph.textAlign = "center";
                    graph.fillText("No events from the last 48 hours to display", canvas.width/2, canvas.height/2);
                    return;
                }

                graph.strokeStyle = "#111";
                graph.lineWidth = 1;

                for( i = 0; i &lt; snapshots.length; i++)
                {
                    snapshot = snapshots[i];
                    
                    if(snapshot.error !== "0") {
                      style = eventRenderInfo["Error"];
                    } else {
                      style = eventRenderInfo[snapshot.type];
                    }
                
                    if( style === undefined) {
                        continue;
                    }
                
                    graph.fillStyle = style.color;
                    pointLabel = style.label;

                    drawPoint(graph, snapshot.x, snapshot.y, pointLabel);

                }
            };

            drawPoint = function(graph, x, y, label)
            {
                graph.font = "10px sans-serif";
                graph.textAlign = "center";

                graph.beginPath();
                graph.arc( x, y, pointRadius, 0, 2 * Math.PI, false);
                graph.fill();
                graph.stroke();

                graph.fillStyle = "#222";
                graph.fillText(label, x, y + (pointRadius/2));
            };

            findwlanBounds = function()
            {
                var connectEvent    = null,
                    disconnectEvent = null,
                    isConnected     = false,
                    currentEvent,
                    type,
                    boundType,
                    i;

                // Snapshots only include the state from the last 48 hours.
                // In order to properly draw session bounds we need to know
                // the state from when the 48 hours started. i.e. was a session
                // in progress already when the 48 section began. To fnd this out
                // look to see if the first wlan event is a disconnect or a connect.
                for(i = snapshots.length - 1; i &gt;= 0; i-- )
                {
                    if( snapshots[i].type === 'Disconnect' ) {
                        isConnected = true;
                        break;
                    } else if (snapshots[i].type === 'Connect'){
                        isConnected = false;
                        break;
                    }
                }

                // If we start in a connected state draw a bound from the left side
                // of the graph to the first wlan/ndis event
                if( isConnected ) {
                    for(i = snapshots.length - 1; i &gt;= 0; i-- )
                    {
                        type = snapshots[i].type;
                        
                        if(type === 'Wake' || type === 'CS-Wake' )
                        {
                            boundType = type === 'Wake' ? 'Sleep' : 'CS-Sleep';
                            
                            powerBounds.push({'type':boundType, 'sleepEvent':snapshots[i], 'wakeEvent':snapshots[i], 'x':0, 'y':snapshots[i].y,
                                'width':snapshots[i].x, 'height':200});
                                break;
                        }
                        else if(type === 'Disconnect')
                        {
                            wlanBounds.push({'connectEvent':snapshots[i], 'disconnectEvent':snapshots[i], 'x':0, 'y': wlanYOffset + eventOffset,
                                'width':snapshots[i].x, 'height':200});
                                break;
                        }
                    }
                }
                
                // Loop through all of the events finding pairs of events to draw a box between
                // indicating the start and stop of a particular wlan state. Current pairs include
                //
                // Connect->Disconnect/Error/Sleep/CS-Sleep
                // Wake->Disconnect/Error/Sleep/CS-Sleep (if previously connected)
                //
                for(i = snapshots.length - 1; i &gt;= 0; i-- )
                {
                    currentEvent = snapshots[i];
                    type = currentEvent.type;

                    if ( type === 'Internet' || type === 'Local' || type == 'None')
                    {
                        continue;
                    }

                    if( type === 'Connect' )
                    {
                        if (connectEvent === null)
                        {
                            connectEvent = snapshots[i];
                        }
                        isConnected = true;
                    }
                    else if( type === 'Disconnect' || type === 'Sleep' || type === 'CS-Sleep')
                    {
                        disconnectEvent = snapshots[i];

                        // If we are stopping the session because of the Sleep, consider the
                        // session to still be connected since we will likely do a fast reconnect
                        // on wake meaning we will not see a new connect event
                        if( type !== 'Sleep' &amp;&amp; type !== 'CS-Sleep')
                        {
                            isConnected = false;
                        }

                        // If we have a connect event and a disconnect event, have the session bounds be a box connecting them
                        if(connectEvent !== null &amp;&amp; disconnectEvent !== null )
                        {
                            wlanBounds.push({'connectEvent':connectEvent, 'disconnectEvent':disconnectEvent, 'x':connectEvent.x, 'y': wlanYOffset + eventOffset,
                                'width':disconnectEvent.x - connectEvent.x, 'height':200});
                        }

                        // If we only have a disconnect event, and it is the first connection event,
                        // Draw a session bounds from the left end of the graph to the disconnect
                        if( connectEvent === null &amp;&amp; wlanBounds.length === 0 )
                        {
                            wlanBounds.push({'connectEvent':null, 'disconnectEvent':disconnectEvent, 'x':0, 'y':wlanYOffset + eventOffset,
                                'width':disconnectEvent.x, 'height':200});
                        }

                        connectEvent = null;
                        disconnectEvent = null;
                    }
                    else if( type === 'Wake' || type === 'CS-Wake' )
                    {
                        if(isConnected &amp;&amp; connectEvent === null)
                        {
                            connectEvent = snapshots[i];
                        }
                    }
                }

                // If there is a current active session with no disconnect draw its bound
                // The bound will be from the connect to beyond the end of the graph
                if( connectEvent !== null &amp;&amp; disconnectEvent === null)
                {
                    wlanBounds.push({'connectEvent':connectEvent, 'disconnectEvent':null, 'x':connectEvent.x, 'y':wlanYOffset + eventOffset,
                        'width':1000, 'height':200});
                }
            };

            findConnectivityBounds = function()
            {
                var connectivityStart    = null,
                    connectivityEnd      = null,
                    isConnectedToNetwork = false,
                    i;

                for(i = snapshots.length - 1; i &gt;= 0; i-- )
                {
                    if (snapshots[i].type === 'Connect')
                    {
                        isConnectedToNetwork = true;
                    }
                    else if (snapshots[i].type === 'Disconnect' || snapshots[i].type === 'Sleep' || snapshots[i].type === 'Error')
                    {
                        connectivityEnd = snapshots[i];

                        // Draw the bounds of the last capability from when it
                        // started to when the disconnect event happened
                        if (connectivityStart !== null) {
                            connectivityBounds.push({'startEvent':connectivityStart, 'endEvent':connectivityEnd, 'x':connectivityStart.x, 'y':connectivityStart.y,
                                'width':connectivityEnd.x - connectivityStart.x, 'height':2*pointRadius});
                        }

                        if (snapshots[i].type === 'Disconnect') {
                            isConnectedToNetwork = false;
                        }

                        connectivityStart = null;
                        connectivityEnd = null;
                    }
                    else if(snapshots[i].type === 'Internet' || snapshots[i].type === 'Local' || snapshots[i].type === 'None')
                    {
                        // Don't draw bounds between capability events
                        // that are not part of a session
                        if( !isConnectedToNetwork )
                        {
                            continue;
                        }

                        if( connectivityStart == null )
                        {
                            connectivityStart = snapshots[i];
                        }
                        else
                        {
                            connectivityEnd = snapshots[i];

                            connectivityBounds.push({'startEvent':connectivityStart, 'endEvent':connectivityEnd, 'x':connectivityStart.x, 'y':connectivityStart.y,
                                'width':connectivityEnd.x - connectivityStart.x, 'height':2*pointRadius});

                            connectivityStart = connectivityEnd;
                            connectivityEnd = null;
                        }
                    }
                    else if ( snapshots[i].type === 'Disconnect' &amp;&amp; connectivityStart !== null )
                    {
                        // Do not draw connectivity bounds that span from one session to another.
                        // On disconnect there is an implicit capability None where the current
                        // capability would end.
                        connectivityBounds.push({'startEvent':connectivityStart, 'endEvent':snapshots[i], 'x':connectivityStart.x, 'y':connectivityStart.y,
                            'width':snapshots[i].x - connectivityStart.x, 'height':2*pointRadius});

                        connectivityStart = null;
                        connectivityEnd = null;
                    }
                }

                // If the last connectivity event started a bounds, creat a region
                // from it to the edge of the graph
                if(connectivityStart)
                {
                    connectivityBounds.push({'startEvent':connectivityStart, 'endEvent':null, 'x':connectivityStart.x, 'y':connectivityStart.y,
                        'width':1000, 'height':2*pointRadius});
                }
            };

            findPowerBounds = function()
            {
                var sleepEvent = null,
                    wakeEvent  = null,
                    isConnected = false,
                    boundType = 'Sleep',
                    i;
                
                // Find the initial connected state
                for(i = snapshots.length - 1; i &gt;= 0; i-- )
                {
                    if( snapshots[i].type === 'Disconnect' ) {
                        isConnected = true;
                        break;
                    } else if (snapshots[i].type === 'Connect'){
                        isConnected = false;
                        break;
                    }
                }
                
                // Generate power bounds
                for(i = snapshots.length - 1; i &gt;= 0; i--)
                {
                    if(snapshots[i].type === 'CS-Sleep' || snapshots[i].type === 'Sleep')
                    {
                        sleepEvent = snapshots[i];
                    }
                    else if( snapshots[i].type === 'CS-Wake' || snapshots[i].type === 'Wake')
                    {
                        wakeEvent = snapshots[i];

                        // If we have a sleep and a wake, draw a bounds between them
                        if(sleepEvent !== null &amp;&amp; wakeEvent !== null) {
                            
                            // If we are connected to a network and the power event is a connected standby
                            // sleep, draw a light green box for the time asleep signifying that the 
                            // connection is still active
                            if( isConnected &amp;&amp; sleepEvent.type === 'CS-Sleep')
                            {
                                boundType = 'CS-Sleep';
                            }
                            else
                            {
                                boundType = 'Sleep';
                            }
                            
                            powerBounds.push({'type':boundType, 'sleepEvent':sleepEvent, 'wakeEvent':wakeEvent, 'x':sleepEvent.x, 'y':wakeEvent.y,
                                'width':wakeEvent.x - sleepEvent.x, 'height':200});
                        }

                        sleepEvent = null;
                        wakeEvent = null;
                    }
                    else if( snapshots[i].type === 'Connect')
                    {
                        isConnected = true;
                    }
                    else if( snapshots[i].type === 'Disconnect')
                    {
                        isConnected = false;
                    }
                }
            };

            drawSessionBounds = function(canvas)
            {
                var graph,
                    session,
                    i;

                graph = canvas.getContext('2d');

                if(wlanBounds)
                {
                    for(i = wlanBounds.length - 1; i &gt;= 0; i--)
                    {
                        session = wlanBounds[i];
                        drawBound(graph, 'Connect', session.x, session.width);
                    }
                }

                if(powerBounds)
                {
                    for(i = powerBounds.length - 1; i &gt;= 0; i--)
                    {
                        session = powerBounds[i];
                        drawBound(graph, session.type, session.x, session.width);
                    }
                }

                // Draw Internet/Limited connectivity bounds
                graph.fillStyle = "rgba(235,235,0,0.4)";
                graph.strokeStyle = "rgba(30,30,30,0.8)";
                graph.lineWidth = 1;


                if(connectivityBounds)
                {
                    for(i = 0; i &lt; connectivityBounds.length; i++)
                    {
                        session = connectivityBounds[i];
                        if(session.startEvent.type === 'Local')
                        {
                            graph.fillStyle = "rgba(235,235,0,0.4)";
                        }
                        else if(session.startEvent.type === 'None')
                        {
                            graph.fillStyle = "rgba(235,0,0,0.4)";
                        }
                        else
                        {
                            // Don't draw bounds when the capability is internet
                            continue;
                            //graph.fillStyle = "rgba(156,202,245,0.6)";
                        }

                        graph.fillRect( session.x, session.y - pointRadius, session.width, session.height);
                    }
                }
            };

            drawBound = function(graph, type, x, width)
            {
                var style,
                    y      = 50,
                    height = 200;

                if(type === 'Connect' || type === 'Disconnect')
                {
                    style = boundRenderInfo['Connected'];
                }
                else if(type === 'Sleep' || type === 'Wake')
                {
                    style = boundRenderInfo['Power'];
                }
                else if(type === 'CS-Sleep' || type === 'CS-Wake' )
                {
                    style = boundRenderInfo['ConnectedStandby'];
                }
                else
                {
                    style = boundRenderInfo['Connected'];
                }

                graph.fillStyle = style['fill'];
                graph.strokeStyle = style['stroke'];
                graph.lineWidth = style['lineWidth'];

                graph.fillRect(x, y, width, height);
                graph.strokeRect(x, y, width, height);
            }

            drawAxis = function(canvas)
            {
                var graph,
                    width,
                    height,
                    xPadding,
                    yPadding,
                    step,
                    twoDaysInHours = 48,
                    i;

                width = canvas.width;
                height = canvas.height;
                xPadding = 10;
                yPadding = 15;

                graph = canvas.getContext('2d');


                // Separate WLAN/NCSI/NDIS events
                // into their own 'lanes'
                graph.fillStyle = "#141414";
                graph.fillRect(0, 0, width, 100);   //WLAN lane
                graph.fillRect(0, 200, width, 100); //NDIS lane
                
                //Draw a line for each of the 48 hours in 2 days
                graph.strokeStyle = "#333";
                graph.lineWidth = 1;
                graph.font = "12px sans-serif";
                graph.fillStyle = "#555";
                graph.textAlign = "center";

                step = width/twoDaysInHours;

                for( i = 0; i &lt; twoDaysInHours; i++)
                {
                    graph.beginPath();
                    graph.moveTo((step * i), 0);
                    graph.lineTo((step * i), height - yPadding);
                    graph.stroke();
                }

                // Label X axis
                graph.fillText('Oldest', 30, height - 5);
                graph.fillText('Newest', width - 30, height - 5);
            };

            drawEventRegionLabels = function(canvas)
            {
                var graph = canvas.getContext('2d');

                // Label event regions
                graph.font = "12px sans-serif";
                graph.textAlign = "center";
                graph.strokeStyle = "#333";
                graph.lineWidth = 1;

                graph.fillStyle = "#050505";
                //WLAN
                graph.fillRect(0, 0, 40, 20);
                graph.strokeRect(0,0,40,20);
                //NCSI
                graph.fillRect(0, 101, 40, 20);
                graph.strokeRect(0,101,40,20);
                //NDIS
                graph.fillRect(0, 201, 40, 20);
                graph.strokeRect(0,201,40,20);

                graph.fillStyle = "#EEE";
                graph.fillText('WLAN', 20, 15);
                graph.fillText('NCSI', 20, 115);
                graph.fillText('NDIS', 20, 215);
            };

            drawLegend = function()
            {
                var canvas,
                    legend,
                    width,
                    height,
                    x;

                canvas = document.getElementById('graph-legend');
                width = canvas.width;
                height = canvas.height;
                symbolX = 20;
                textX = 40;

                legend = canvas.getContext('2d');

                // Connect
                legend.fillStyle = eventRenderInfo['Connect'].color;
                drawPoint(legend, symbolX, 10, eventRenderInfo['Connect'].label);
                drawLegendLabel(legend, textX, 13, "- Started a connection");

                // Disconnect
                legend.fillStyle = eventRenderInfo['Disconnect'].color;
                drawPoint(legend, symbolX, 30, eventRenderInfo['Disconnect'].label);
                drawLegendLabel(legend, textX, 33, "- Disconnected from a network");

                // Sleep
                legend.fillStyle = eventRenderInfo['Sleep'].color;
                drawPoint(legend, symbolX, 50, eventRenderInfo['Sleep'].label);
                drawLegendLabel(legend, textX, 53, "- Wireless adapter entered a low power state");

                // Wake
                legend.fillStyle = eventRenderInfo['Wake'].color;
                drawPoint(legend, symbolX, 70, eventRenderInfo['Wake'].label);
                drawLegendLabel(legend, textX, 73, "- Wireless adapter entered a working power state");

                // Capability Internet
                legend.fillStyle = eventRenderInfo['Internet'].color;
                drawPoint(legend, symbolX, 90, eventRenderInfo['Internet'].label);
                drawLegendLabel(legend, textX, 93, "- Network is connected to the internet");

                // Capability Local
                legend.fillStyle = eventRenderInfo['Local'].color;
                drawPoint(legend, symbolX, 110, eventRenderInfo['Local'].label);
                drawLegendLabel(legend, textX, 113, "- Network has limited connectivity");

                // Capability None
                legend.fillStyle = eventRenderInfo['None'].color;
                drawPoint(legend, symbolX, 130, eventRenderInfo['None'].label);
                drawLegendLabel(legend, textX, 133, "- Network has no connectivity");

                // Error
                legend.fillStyle = eventRenderInfo['Error'].color;
                drawPoint(legend, symbolX, 150, eventRenderInfo['Error'].label);
                drawLegendLabel(legend, textX, 153, "- Error");
            };

            drawLegendLabel = function(legend, x, y, text)
            {
                legend.font = "14px sans-serif";
                legend.fillStyle = '#DDD';
                legend.textAlign = "left";
                legend.fillText(text, x, y);
            };

            drawSessionGraph = function()
            {
                var canvas,
                    events;

                canvas = document.getElementById('session-graph');

                calculateEventCoordinates(canvas);

                drawAxis(canvas);

                findwlanBounds();
                findConnectivityBounds();
                findPowerBounds();
                drawSessionBounds(canvas);

                drawEvents(canvas);

                drawEventRegionLabels(canvas);

                drawLegend();

                canvas.addEventListener('click', eventClickHandler, false);
                canvas.addEventListener('mousemove', eventMouseMoveHandler, false);
            };

            eventClickHandler = function(e)
            {
                var canvas = document.getElementById('session-graph'),
                    x,
                    y,
                    snapshot,
                    originalClass;

                e = e || window.event;

                if( e.stopPropogation )
                {
                    e.stopPropogation();
                } else {
                    e.cancelBubble = true;
                }

                x = e.offsetX;
                y = e.offsetY;

                snapshot = getSnapshotAtXY(x,y);
                
                // Emphasize the selected event by placing a border
                // around it that dissapears after one second
                if( snapshot !== null)
                {
                    window.location.hash = snapshot.correspondingEvent;
                    evtElement = document.getElementById(snapshot.correspondingEvent).parentNode.parentNode;
                    originalClass = evtElement.className;
                    evtElement.className = evtElement.className + ' glow';

                    setTimeout(function(){
                        evtElement.className = originalClass;
                    }, 1000);
                }
            };

            eventMouseMoveHandler = function(e)
            {
                var summary,
                    x,
                    y,
                    snapshot,
                    session,
                    startEvent = null,
                    endEvent   = null,
                    i;

                e = e || window.event;

                if( e.stopPropogation )
                {
                    e.stopPropogation();
                } else {
                    e.cancelBubble = true;
                }

                x = e.offsetX;
                y = e.offsetY;
                summary = document.getElementById('event-info');

                snapshot = getSnapshotAtXY(x,y);

                summary.innerHTML = "Hover over a session or event to view a summary <br/> Click on an event to jump to it in the session list";
                
                // Handle mouseover on snapshot events
                if(snapshot !== null)
                {
                    if(snapshot.type === 'Connect')
                    {
                        summary.innerHTML = 'Started a connection to a wireless network <br/>' +
                        '<br/>' + snapshot.date + '<br/>' +
                        'Connection mode: ' + snapshot.connectionMode + '<br/>' +
                        'Profile: ' + snapshot.profileName + '<br/>' +
                        'SSID: ' + snapshot.ssid;
                    }
                    else if(snapshot.type === 'Disconnect')
                    {
                        summary.innerHTML = snapshot.disconnectReason + '<br/>' +
                        '<br/>' + snapshot.date + '<br/>' +
                        'Connection mode: ' + snapshot.connectionMode + '<br/>' +
                        'Profile: ' + snapshot.profileName + '<br/>' +
                        'SSID: ' + snapshot.ssid;
                    }
                    else if( snapshot.type === 'Wake' || snapshot.type === 'CS-Wake' ||
                            snapshot.type === 'Sleep' || snapshot.type === 'CS-Sleep' )
                    {
                        summary.innerHTML = snapshot.message + '<br/>' +
                        '<br/>' + snapshot.date + '<br/>';

                    }
                    else if(snapshot.type === 'Internet' || snapshot.type == 'Local' || snapshot.type == 'None')
                    {
                        summary.innerHTML = snapshot.message + '<br/>' +
                        '<br/>' + snapshot.date + '<br/>';

                    }
                    else if( snapshot.type === 'Error' )
                    {
                        var messageCutoffIndex = 0;
                        messageCutoffIndex = snapshot.message.indexOf('br') - 1;
                        summary.innerHTML = snapshot.message.substring(0,messageCutoffIndex) + '<br/>' +
                        '<br/>' + snapshot.date + '<br/>';
                    }

                    return;
                }

                session = getSessionAtXY(x,y);
                
                // Handle mouseover on session bounds
                if( session !== null)
                {
                    startEvent = session.connectEvent;
                    endEvent = session.disconnectEvent;
                    if(startEvent !== null &amp;&amp; endEvent !== null)
                    {
                        summary.innerHTML = 'Session duration: ' + calculateSessionDuration(startEvent.time, endEvent.time) + '<br/>' +
                        'Start time: ' + startEvent.date.toLocaleString() + '<br/>' +
                        'End time: ' + endEvent.date.toLocaleString() + '<br/>' +
                        'Disconnect reason: ' + endEvent.disconnectReason + '<br/>';
                    }
                    else if(startEvent !== null)
                    {
                        summary.innerHTML = 'Session duration: Ongoing' + '<br/>' +
                        'Start time: ' + startEvent.date.toLocaleString() + '<br/>';
                    }
                    else if(endEvent !== null)
                    {
                        summary.innerHTML = 'End time: ' + endEvent.date.toLocaleString() + '<br/>' +
                        'Disconnect reason: ' + endEvent.disconnectReason + '<br/>';
                    }
                }
            };

            calculateSessionDuration = function(start, end )
            {
                var duration = (end - start) / 1000,
                    hours    = parseInt( duration / (60 * 60), 10),
                    minutes  = parseInt((duration / 60) % 60, 10),
                    seconds  = Math.round(duration % 60);

                return (hours + ' hours ' + minutes + ' minutes ' + seconds + ' seconds');
            };

            getSnapshotAtXY = function(x, y)
            {
                var snapshot,
                    i;

                // Check to see if the mouse pointer correspondes to an event
                for(i = 0; i &lt; snapshots.length; i++)
                {
                    snapshot = snapshots[i];
                    if( x &gt;= snapshot.x - pointRadius &amp;&amp; x &lt;= snapshot.x + pointRadius )
                    {
                        if(y &gt;= snapshot.y - pointRadius &amp;&amp; y &lt;= snapshot.y + pointRadius)
                        {
                            return snapshot;
                        }
                    }
                }

                return null;
            };

            getSessionAtXY = function(x, y)
            {
                var session,
                    i;

                // Check to see if the mouse pointer corresponds to a session
                for(i = 0; i &lt; wlanBounds.length; i++)
                {
                    session = wlanBounds[i];
                    if( x &gt;= session.x &amp;&amp; x &lt;= session.x + session.width )
                    {
                        if(y &gt;= session.y &amp;&amp; y &lt;= session.y + session.height)
                        {
                            return session;
                        }
                    }
                }

                return null;
            };

            convertSnapshotTimes = function()
            {
                var i;
                for(i = 0; i &lt; snapshots.length; i++)
                {
                    snapshots[i].time = convertFileTimeToUnixTime(snapshots[i].time);
                    snapshots[i].date = new Date(snapshots[i].time);
                }
            };

            convertFileTimeToUnixTime = function(time)
            {
                var nanoSecondsPerMS   = 10000,
                    yearDifferenceInMS = 11644473600000; //MS between 1601 and 1970

                return (time / nanoSecondsPerMS) - yearDifferenceInMS;
            };
			
            fixCommandOutputFormatting = function()
            {
                var commandTextboxes = document.getElementsByTagName("textarea"),
                    textbox,
                    i;
				
                for(i in commandTextboxes)
                {
                    textbox = commandTextboxes[i];
                    if(textbox.className === "command-output")
                    {
	                    var output = textbox.innerHTML;
	                    output = output.replace(/\n\n\n\n/g, '\n');
	                    textbox.innerHTML = output.trim();
                    }
                }
				
            };
			
            checkForEmptyReport = function()
            {
                var sessionList = document.getElementById('session-list'),
                    eventsSummary;
				
                if(sessionList.innerHTML == '')
                {
                    sessionList.innerHTML = "<h4>No WLAN events were found on this system.</h4>";
                    sessionList.style.margin = "0 0 100px 0";
					
                    eventsSummary =  document.getElementById('events-summary');
                    eventsSummary.parentNode.removeChild(eventsSummary);
                }
            };
			
            bindTopBtn = function()
            {
                var btn           = document.getElementById('top-btn'),
                    reportWrapper = document.getElementById('report-wrapper');

                btn.style.left = (reportWrapper.offsetLeft - btn.clientWidth - 20) + 'px';
                btn.style.top = '30px';

                btn.addEventListener('click', function() {
                    window.scrollTo(0,0);
                    window.history.replaceState({}, '', window.location.href.split('#')[0]);
                }, false);
            };

            wlanReport.initialize = function()
            {
                bindTopBtn();
                bindToggleMessageBtns();
                convertSnapshotTimes();
                drawSessionGraph();
                fixCommandOutputFormatting();
                checkForEmptyReport();
            };

            return wlanReport;
        }());

        window.addEventListener('load', wlanReport.initialize, false);
    </xsl:template>

    <!--Replace gratuitous line breaks in event messages with single <br>'s-->
    <xsl:template name="replace">
        <xsl:param name="message"/>

        <!-- \r\n\r\n sequence -->
        <xsl:variable name="linebreak" select="'&#13;&#10;&#13;&#10;'" />

        <xsl:choose>
            <xsl:when test="contains($message, $linebreak)">
                <xsl:value-of select="substring-before($message, $linebreak)"/>
                    <br/>
				<xsl:call-template name="replace">
                    <xsl:with-param name="message" select="substring-after($message, $linebreak)"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$message"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
	
	<!--Special replace function to properly format the WCM preferred interface list-->
    <xsl:template name="replaceSingleNewlines">
        <xsl:param name="message"/>

        <!-- \r\n sequence -->
        <xsl:variable name="linebreak" select="'&#13;&#10;'" />

        <xsl:choose>
            <xsl:when test="contains($message, $linebreak)">
                <xsl:value-of select="substring-before($message, $linebreak)"/>
                    <br/>
				<xsl:call-template name="replaceSingleNewlines">
                    <xsl:with-param name="message" select="substring-after($message, $linebreak)"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$message"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
	
    <xsl:template match="/WlanReport">
        <html>
        <head>
            <meta charset="utf-8" />
            <meta http-equiv="X-UA-Compatible" content="IE=edge" />
            <title>wlan report</title>
            
            <!-- Include the css into the output file-->
            <xsl:call-template name="css" />
        </head>
        <body>
            <div id="top-btn">
                <p>Top</p>
            </div>
            <div id="report-wrapper">
                <h1>Wlan Report</h1>
                <div id="session-graph-wrapper">
                    <canvas id="session-graph" width="1000" height="315"></canvas>
                    <div id="graph-event-info">
                        <h4>Summary</h4>
                        <p id="event-info">
                            Hover over a session or event to view a summary <br />
                            Click on an event to jump to it in the session list
                        </p>
                    </div>
                    <canvas id="graph-legend" width="400" height="170"></canvas>
                </div>
                <div id="report-info">
                    <h2>Report Info</h2>
                    <p>Report created:<b><xsl:value-of select="ReportInformation/ReportDate" /></b></p>
                    <p>Report duration:<b><xsl:value-of select="ReportInformation/ReportDuration" /> days</b></p>
                </div>
                <div id="sysinfo">
                    <xsl:choose>
                        <xsl:when test="not(SystemInformation/ComputerName = '')">
                            <h2>General System Info</h2>
                            <p>ComputerName: <b><xsl:value-of select="SystemInformation/ComputerName" /></b></p>
                            <p>System Manufacturer:<b><xsl:value-of select="SystemInformation/SystemManufacturer" /></b></p>
                            <p>System Product Name:<b><xsl:value-of select="SystemInformation/SystemProductName" /></b></p>
                            <p>BIOS Date:<b><xsl:value-of select="SystemInformation/BIOSDate" /></b></p>
                            <p>BIOS Version:<b><xsl:value-of select="SystemInformation/BIOSVersion" /></b></p>
                            <p>OS Build:<b><xsl:value-of select="SystemInformation/OSBuild" /></b></p>
                            <p>Machine Id: <b><xsl:value-of select="SystemInformation/MachineId" /></b></p>
                            <p>MDM joined: 
                                <xsl:choose>
                                  <xsl:when test="SystemInformation/MDMRegistered = '1'">
                                      <b>True</b>
                                  </xsl:when>
                                  <xsl:when test="SystemInformation/MDMRegistered = '0'">
                                      <b>False</b>
                                  </xsl:when>
                                  <xsl:otherwise>
                                      <b>Unknown</b>
                                  </xsl:otherwise>
                                </xsl:choose>
                            </p>
							
                            <h2>User Info</h2>
                            <p>Username: <b><xsl:value-of select="UserInformation/Username" /></b></p>
                            <p>User Domain:<b><xsl:value-of select="UserInformation/UserDomain" /></b></p>
                            <p>User DNS Domain:<b><xsl:value-of select="UserInformation/UserDnsDomain" /></b></p>
                        </xsl:when>
                    </xsl:choose>
                    <h2>Network Adapters</h2>
                    <xsl:for-each select="SystemInformation/NetworkAdapters/Adapter">
                        <p>Device: <b><xsl:value-of select="Name" /></b></p>						
                        <p>PNP ID: <b><xsl:value-of select="PnpId" /></b></p>
                        <p>Guid: <b><xsl:value-of select="Guid" /></b></p>
                        <p>Current driver version: <b><xsl:value-of select="DriverVersion" /></b></p>
                        <p>Driver date: <b><xsl:value-of select="DriverDate" /></b></p>
                        <p>DevNode flags: <b><xsl:value-of select="DevNodeFlags" /></b></p>
                        <xsl:choose>
                            <xsl:when test="not(ProblemNumber = '')">
                                <p>Problem number: <b><xsl:value-of select="ProblemNumber" /></b></p>
                            </xsl:when>
                        </xsl:choose>
                        <br />
                    </xsl:for-each>
                </div>
				
                <div id="commands-output">
                    <h2>Script Output</h2>
                    <xsl:for-each select="ScriptOutput/CustomCommand">
                        <h3> Output for <em>'<xsl:value-of select="Command" />'</em></h3>
                        <textarea class="command-output" cols="91" rows="25" readonly="true" spellcheck="false">
                        <xsl:value-of select="Output" />
                        </textarea>
                    </xsl:for-each>
                </div>
              
                <div id="commands-output">
                    <h2>Profile Output</h2>
                    <textarea class="command-output" cols="91" rows="25" readonly="true" spellcheck="false">
                        <xsl:for-each select="Profiles/Interface">
                            <xsl:for-each select="Profile">
                                <xsl:text>&#13;</xsl:text><xsl:comment>Interface: <xsl:value-of select="../@name"/>, Profile: <xsl:value-of select="./@name"/></xsl:comment><xsl:text>&#13;</xsl:text>
                                <xsl:value-of select="." />
                            </xsl:for-each>
                        </xsl:for-each>
                    </textarea>
                </div>
				
                <div id="events-summary">
                    <h2>Summary</h2>
                    <h3>Session Success/Failures</h3>
                    <table id="disconnect-status">
                        <xsl:variable name="max-status-width" select="300" />
                        <tr>
                            <th>Status</th>
                            <th>Count</th>
                        </tr>
                        <tr>
                            <td class="status">
                                <span class="graph-background success">
                                    <xsl:attribute name="style">
                                        <xsl:value-of select="concat('width: ', format-number( (WlanEventsSummary/StatusSummary/Successful div WlanEventsSummary/@total) * $max-status-width, '0.##'), 'px')" />
                                    </xsl:attribute>
                                    &#160;
                                </span>
                                Successes
                            </td>
                            <td class="count">
                                <xsl:value-of select="WlanEventsSummary/StatusSummary/Successful" />
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <span class="graph-background failure">
                                    <xsl:attribute name="style">
                                        <xsl:value-of select="concat('width: ', format-number( (WlanEventsSummary/StatusSummary/Failed div WlanEventsSummary/@total) * $max-status-width, '0.##'), 'px')" />
                                    </xsl:attribute>
                                    &#160;
                                </span>
                                Failures
                            </td>
                            <td class="count">
                                <xsl:value-of select="WlanEventsSummary/StatusSummary/Failed" />
                            </td>
                        </tr>
                        <tr>
                            <td class="status">
                                <span class="graph-background warning">
                                    <xsl:attribute name="style">
                                        <xsl:value-of select="concat('width: ', format-number( (WlanEventsSummary/StatusSummary/Warning div WlanEventsSummary/@total) * $max-status-width, '0.##'), 'px')" />
                                    </xsl:attribute>
                                    &#160;
                                </span>
                                Warnings
                            </td>
                            <td class="count">
                                <xsl:value-of select="WlanEventsSummary/StatusSummary/Warning" />
                            </td>
                        </tr>
                    </table>

                    <h3>Disconnect Reasons</h3>
                    <table id="disconnect-reasons">
                        <tr>
                            <th>Reason</th>
                            <th>Count</th>
                        </tr>
                        <xsl:variable name="max-reason-width" select="800" />
                        <xsl:for-each select="WlanEventsSummary/DisconnectReasons/Reason">
                            <xsl:sort select="@count" data-type="number" order="descending" />
                            <tr>
                                <td class="reason">
                                    <span class="graph-background">
                                        <xsl:attribute name="style">
                                            <xsl:value-of select="concat('width: ', format-number((@count div ../../@total) * $max-reason-width, '0.##'), 'px')" />
                                        </xsl:attribute>
                                        <xsl:attribute name="class">
                                            graph-background <xsl:value-of select="@type" />
                                        </xsl:attribute>
                                        &#160;
                                    </span>
                                    <xsl:value-of select="@message" />
                                </td>
                                <td class="count">
                                    <xsl:value-of select="@count" />
                                </td>
                            </tr>
                        </xsl:for-each>
                    </table>
                    <h3>Session Durations</h3>
                    <table id="session-durations">
                        <tr id="duration-graph">
                            <!--Find the most frequent duration. This will be the tallest bar others are scaled against-->
                            <xsl:variable name="duration-mode"
                                          select="WlanEventsSummary/SessionDurations/Duration[not(../Duration > .)]" />
                            <xsl:variable name="max-height" select="520" />
                            <xsl:for-each select="WlanEventsSummary/SessionDurations/Duration">

                                <xsl:variable name="bar-height-ratio" select=". div $duration-mode" />

                                <!--Make sure the bar height has a minimum value of 0 -->
                                <xsl:variable name="bar-height">
                                    <xsl:choose>
                                        <xsl:when test="string(number($bar-height-ratio))='NaN'">0</xsl:when>
                                        <xsl:otherwise>
                                            <xsl:value-of select="format-number( $max-height * $bar-height-ratio, '0')" />
                                        </xsl:otherwise>
                                    </xsl:choose>
                                </xsl:variable>

                                <td>
                                    <xsl:attribute name="style">
                                        <xsl:value-of select="concat('top: ', 550 - $bar-height, 'px;')" />
                                    </xsl:attribute>
                                    <div class="duration-bar">
                                        <xsl:attribute name="style">
                                            <xsl:value-of select="concat('height: ', $bar-height, 'px;')" />
                                        </xsl:attribute>
                                        <span class="bar-label">
                                            <xsl:attribute name="style">
                                                <xsl:value-of select="concat('bottom: ', $bar-height, 'px;')" />
                                            </xsl:attribute>
                                            <xsl:value-of select="." />
                                        </span>
                                        <span class="bar-background">
                                            &#160;
                                        </span>
                                    </div>
                                </td>
                            </xsl:for-each>
                        </tr>
                        <tr id="duration-labels">
                            <xsl:for-each select="WlanEventsSummary/SessionDurations/Duration">
                                <td>
                                    <xsl:value-of select="@time" /><br />minutes
                                </td>
                            </xsl:for-each>
                        </tr>
                    </table>
                </div>
				
                <h2>Wireless Sessions</h2>
                <div id="session-list">
                    <xsl:for-each select="WlanEvents/WlanSession">
                        <div class="session">
                            <xsl:choose>
                                <xsl:when test="@success != 3">
                                    <!-- 3 is the Id of standalone events not tied to a session. Do not show a summary for these events-->
                                    <p>Interface:<b><xsl:value-of select="@interface" /></b></p>
                                    <p>Interface GUID: <b><xsl:value-of select="@guid" /></b></p>
                                    <p>Connection Mode:<b><xsl:value-of select="@mode" /></b></p>
                                    <p>Profile:<b><xsl:value-of select="@profile" /></b></p>
                                    <p>SSID:<b><xsl:value-of select="@ssid" /></b></p>
                                    <p>BSS Type:<b><xsl:value-of select="@bss" /></b></p>
                                    <p>Session Duration:
                                        <b>
                                            <!-- Initial duration is in seconds. Manipulate it into a readable string -->
                                            <xsl:value-of select="format-number(floor(@duration div (60 * 60)), '0')" /> hours
                                            <xsl:value-of select="format-number(floor((@duration div 60) mod 60), '0')" /> minutes
                                            <xsl:value-of select="format-number(floor(@duration mod 60), '0')" /> seconds
                                        </b>
                                    </p>
                                    <p>Disconnect Reason:<b><xsl:value-of select="@disconnect" /></b></p>
                                </xsl:when>
                            </xsl:choose>
                            <table>
                                <xsl:choose>
                                    <xsl:when test="@success = 0">
                                        <!--Successful session-->
                                        <tr class="successful">
                                            <th class="event-header">EventId</th>
                                            <th class="time-header">Time</th>
                                            <th class="message-header">Message</th>
                                        </tr>
                                    </xsl:when>
                                    <xsl:when test="@success = 1">
                                        <!--Warning session-->
                                        <tr class="warning">
                                            <th class="event-header">EventId</th>
                                            <th class="time-header">Time</th>
                                            <th class="message-header">Message</th>
                                        </tr>
                                    </xsl:when>
                                    <xsl:when test="@success = 3">
                                        <!--Info session-->
                                        <tr class="info">
                                            <th class="event-header">EventId</th>
                                            <th class="time-header">Time</th>
                                            <th class="message-header">Message</th>
                                        </tr>
                                    </xsl:when>
                                    <xsl:otherwise>
                                        <tr class="failed">
                                            <th class="event-header">EventId</th>
                                            <th class="time-header">Time</th>
                                            <th class="message-header">Message</th>
                                        </tr>
                                    </xsl:otherwise>
                                </xsl:choose>
                                <xsl:for-each select="WlanEvent">
                                    <tr>
                                        <xsl:attribute name="class">
                                            <xsl:choose>
                                                <xsl:when test="@error > 0">
                                                    error
                                                </xsl:when>
                                                <xsl:otherwise>
                                                    <xsl:value-of select="@type" />
                                                </xsl:otherwise>
                                            </xsl:choose>
                                        </xsl:attribute>
                                        <td>
                                            <xsl:value-of select="EventID" />
                                            <a>
                                                <xsl:attribute name="id">
                                                    <xsl:value-of select="UID" />
                                                </xsl:attribute>
                                            </a>
                                        </td>
                                        <td>
                                            <xsl:value-of select="EventTime" />
                                        </td>
                                        <td>
                                            <div class="message">
                                                <span class="expand-btn">[+]</span>
                                                <span class="message-body">
                                                    <xsl:choose>
                                                        <xsl:when test="EventID = 1020">
                                                            <xsl:call-template name="replaceSingleNewlines">
                                                                <xsl:with-param name="message" select="EventMessage" />
                                                            </xsl:call-template>
                                                        </xsl:when>
                                                        <xsl:otherwise>
                                                            <xsl:call-template name="replace">
                                                                <xsl:with-param name="message" select="EventMessage" />
                                                            </xsl:call-template>
                                                        </xsl:otherwise>
                                                    </xsl:choose>
                                                </span>
                                            </div>
                                        </td>
                                    </tr>
                                </xsl:for-each>
                            </table>
                        </div>
                    </xsl:for-each>
                </div>
            </div>
        
            <!--Write out all of the snapshot information-->
            <script type="text/javascript">
                var snapshots = [
                    <xsl:for-each select="SessionSnapshot/Session">
                        {
                            "type":"<xsl:value-of select="EventType"/>",
                            "error":"<xsl:value-of select="EventError"/>",
                            "time":"<xsl:value-of select="EventTime"/>",
                            "message":"<xsl:call-template name="replace">
                                            <xsl:with-param name="message" select="EventMessage"/>
                                        </xsl:call-template>",
                            "connectionMode":"<xsl:value-of select="EventConnectionMode"/>",
                            "profileName":"<xsl:value-of select="EventProfileName"/>",
                            "ssid":"<xsl:value-of select="EventSSID"/>",
                            "disconnectReason":"<xsl:value-of select="EventDisconnectReason"/>",
                            "correspondingEvent":"<xsl:value-of select="CorrespondingEvent"/>" 
                        },
                    </xsl:for-each>
                ];
            
                <!-- Include the javascript into the output file-->
                <xsl:call-template name="js"/>
            </script>
        </body>
    </html>
  </xsl:template>

</xsl:stylesheet>
PPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGX