:- use_module( library( pce) ) .
initial_state( [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) .
�������_�����( [ �| _] , 0 , �) .
�������_�����
( [ _
| [ �
1 | �
] ] , �����
, �������
) :- �����
1 is �����
- 1 , �������_�����
( [ �
1 | �
] , �����
1 , �������
) .
��������_�_������( [ ] , �������, 0 , [ �������] ) .
��������_�_������( [ �| �] , �������, 0 , [ �������| [ �| �] ] ) .
��������_�_������
( [ �
| �
] , �������
, �����
, [ �
| �
1 ] ) :- �����
1 is �����
- 1 , ��������_�_������( �, �������, �����1 , �1 ) .
�������_��_������( [ _| �] , 0 , �) .
�������_��_������
( [ �
| �
] , �����
, [ �
| �
1 ] ) :- �����
1 is �����
- 1 , �������_��_������( �, �����1 , �1 ) .
win_stateX( [ 1 , 1 , 1 , _, _, _, _, _, _] ) .
win_stateX( [ _, _, _, 1 , 1 , 1 , _, _, _] ) .
win_stateX( [ _, _, _, _, _, _, 1 , 1 , 1 ] ) .
win_stateX( [ 1 , _, _, 1 , _, _, 1 , _, _] ) .
win_stateX( [ _, 1 , _, _, 1 , _, _, 1 , _] ) .
win_stateX( [ _, _, 1 , _, _, 1 , _, _, 1 ] ) .
win_stateX( [ 1 , _, _, _, 1 , _, _, _, 1 ] ) .
win_stateX( [ _, _, 1 , _, 1 , _, 1 , _, _] ) .
win_stateO( [ 2 , 2 , 2 , _, _, _, _, _, _] ) .
win_stateO( [ _, _, _, 2 , 2 , 2 , _, _, _] ) .
win_stateO( [ _, _, _, _, _, _, 2 , 2 , 2 ] ) .
win_stateO( [ 2 , _, _, 2 , _, _, 2 , _, _] ) .
win_stateO( [ _, 2 , _, _, 2 , _, _, 2 , _] ) .
win_stateO( [ _, _, 2 , _, _, 2 , _, _, 2 ] ) .
win_stateO( [ 2 , _, _, _, 2 , _, _, _, 2 ] ) .
win_stateO( [ _, _, 2 , _, 2 , _, 2 , _, _] ) .
pattern( [ _, _, _, _, 0 , _, _, _, _] , 1 , 1 ) :- ! .
pattern( [ 0 , 2 , 2 , _, _, _, _, _, _] , 0 , 0 ) :- ! .
pattern( [ _, _, _, 0 , 2 , 2 , _, _, _] , 0 , 1 ) :- ! .
pattern( [ _, _, _, _, _, _, 0 , 2 , 2 ] , 0 , 2 ) :- ! .
pattern( [ 0 , _, _, 2 , _, _, 2 , _, _] , 0 , 0 ) :- ! .
pattern( [ _, 0 , _, _, 2 , _, _, 2 , _] , 1 , 0 ) :- ! .
pattern( [ _, _, 0 , _, _, 2 , _, _, 2 ] , 2 , 0 ) :- ! .
pattern( [ 0 , _, _, _, 2 , _, _, _, 2 ] , 0 , 0 ) :- ! .
pattern( [ _, _, 0 , _, 2 , _, 2 , _, _] , 2 , 0 ) :- ! .
pattern( [ 2 , 0 , 2 , _, _, _, _, _, _] , 1 , 0 ) :- ! .
pattern( [ _, _, _, 2 , 0 , 2 , _, _, _] , 1 , 1 ) :- ! .
pattern( [ _, _, _, _, _, _, 2 , 0 , 2 ] , 1 , 2 ) :- ! .
pattern( [ 2 , _, _, 0 , _, _, 2 , _, _] , 0 , 1 ) :- ! .
pattern( [ _, 2 , _, _, 0 , _, _, 2 , _] , 1 , 1 ) :- ! .
pattern( [ _, _, 2 , _, _, 0 , _, _, 2 ] , 2 , 1 ) :- ! .
pattern( [ 2 , _, _, _, 0 , _, _, _, 2 ] , 1 , 1 ) :- ! .
pattern( [ _, _, 2 , _, 0 , _, 2 , _, _] , 1 , 1 ) :- ! .
pattern( [ 2 , 2 , 0 , _, _, _, _, _, _] , 2 , 0 ) :- ! .
pattern( [ _, _, _, 2 , 2 , 0 , _, _, _] , 2 , 1 ) :- ! .
pattern( [ _, _, _, _, _, _, 2 , 2 , 0 ] , 2 , 2 ) :- ! .
pattern( [ 2 , _, _, 2 , _, _, 0 , _, _] , 0 , 2 ) :- ! .
pattern( [ _, 2 , _, _, 2 , _, _, 0 , _] , 1 , 2 ) :- ! .
pattern( [ _, _, 2 , _, _, 2 , _, _, 0 ] , 2 , 2 ) :- ! .
pattern( [ 2 , _, _, _, 2 , _, _, _, 0 ] , 2 , 2 ) :- ! .
pattern( [ _, _, 2 , _, 2 , _, 0 , _, _] , 0 , 2 ) :- ! .
pattern( [ 0 , 1 , 1 , _, _, _, _, _, _] , 0 , 0 ) :- ! .
pattern( [ _, _, _, 0 , 1 , 1 , _, _, _] , 0 , 1 ) :- ! .
pattern( [ _, _, _, _, _, _, 0 , 1 , 1 ] , 0 , 2 ) :- ! .
pattern( [ 0 , _, _, 1 , _, _, 1 , _, _] , 0 , 0 ) :- ! .
pattern( [ _, 0 , _, _, 1 , _, _, 1 , _] , 1 , 0 ) :- ! .
pattern( [ _, _, 0 , _, _, 1 , _, _, 1 ] , 2 , 0 ) :- ! .
pattern( [ 0 , _, _, _, 1 , _, _, _, 1 ] , 0 , 0 ) :- ! .
pattern( [ _, _, 0 , _, 1 , _, 1 , _, _] , 2 , 0 ) :- ! .
pattern( [ 1 , 0 , 1 , _, _, _, _, _, _] , 1 , 0 ) :- ! .
pattern( [ _, _, _, 1 , 0 , 1 , _, _, _] , 1 , 1 ) :- ! .
pattern( [ _, _, _, _, _, _, 1 , 0 , 1 ] , 1 , 2 ) :- ! .
pattern( [ 1 , _, _, 0 , _, _, 1 , _, _] , 0 , 1 ) :- ! .
pattern( [ _, 1 , _, _, 0 , _, _, 1 , _] , 1 , 1 ) :- ! .
pattern( [ _, _, 1 , _, _, 0 , _, _, 1 ] , 2 , 1 ) :- ! .
pattern( [ 1 , _, _, _, 0 , _, _, _, 1 ] , 1 , 1 ) :- ! .
pattern( [ _, _, 1 , _, 0 , _, 1 , _, _] , 1 , 1 ) :- ! .
pattern( [ 1 , 1 , 0 , _, _, _, _, _, _] , 2 , 0 ) :- ! .
pattern( [ _, _, _, 1 , 1 , 0 , _, _, _] , 2 , 1 ) :- ! .
pattern( [ _, _, _, _, _, _, 1 , 1 , 0 ] , 2 , 2 ) :- ! .
pattern( [ 1 , _, _, 1 , _, _, 0 , _, _] , 0 , 2 ) :- ! .
pattern( [ _, 1 , _, _, 1 , _, _, 0 , _] , 1 , 2 ) :- ! .
pattern( [ _, _, 1 , _, _, 1 , _, _, 0 ] , 2 , 2 ) :- ! .
pattern( [ 1 , _, _, _, 1 , _, _, _, 0 ] , 2 , 2 ) :- ! .
pattern( [ _, _, 1 , _, 1 , _, 0 , _, _] , 0 , 2 ) :- ! .
pattern( [ _, 0 , _, _, 2 , _, _, _, 1 ] , 1 , 0 ) .
pattern( [ _, 0 , 1 , _, 2 , _, _, _, _] , 1 , 0 ) .
pattern( [ _, 0 , _, _, 2 , _, 1 , _, _] , 1 , 0 ) .
pattern( [ 1 , 0 , _, _, 2 , _, _, _, _] , 1 , 0 ) .
pattern( [ 0 , _, _, _, 1 , _, _, _, _] , 0 , 0 ) .
pattern( [ _, _, _, _, 1 , _, _, _, _] , 0 , 2 ) .
pattern( [ _, _, _, _, 1 , _, _, _, _] , 2 , 0 ) .
pattern( [ _, _, _, _, 1 , _, _, _, _] , 2 , 2 ) .
pattern( _, 0 , 0 ) .
pattern( _, 1 , 0 ) .
pattern( _, 2 , 0 ) .
pattern( _, 1 , 0 ) .
pattern( _, 1 , 1 ) .
pattern( _, 1 , 2 ) .
pattern( _, 2 , 0 ) .
pattern( _, 2 , 1 ) .
pattern( _, 2 , 2 ) .
x_o( 0 , ' ' ) .
x_o( 1 , 'X' ) .
x_o( 2 , 'O' ) .
show( State) :-
�������_�����( State, 0 , A) ,
�������_�����( State, 1 , B) ,
�������_�����( State, 2 , C) ,
�������_�����( State, 3 , D) ,
�������_�����( State, 4 , E) ,
�������_�����( State, 5 , F) ,
�������_�����( State, 6 , G) ,
�������_�����( State, 7 , H) ,
�������_�����( State, 8 , I) ,
x_o( A, A1) ,
x_o( B, B1) ,
x_o( C, C1) ,
x_o( D, D1) ,
x_o( E, E1) ,
x_o( F, F1) ,
x_o( G, G1) ,
x_o( H, H1) ,
x_o( I, I1) ,
is_free( X, Y, State) :-
�������_�����( State, N, A) ,
A = 0 .
make_move( X, Y, State, Type, State_next) :-
is_free( X, Y, State) ,
�������_��_������( State, N, State1) ,
��������_�_������( State1, Type, N, State_next) ,
show( State_next) .
check( State) :-
win_stateX( StateX) ,
member( State, [ StateX] ) ,
new( Dialog, dialog( "�������� ��������") ) ,
new( F, text( "�������� ��������") ) ,
send( Dialog, append, F) ,
check( State) :-
win_stateO( StateO) ,
member( State, [ StateO] ) ,
new( Dialog, dialog( "������ ��������") ) ,
new( F, text( "������ ��������") ) ,
send( Dialog, append, F) ,
check( State) :-
not( member( 0 , State) ) ,
new( Dialog, dialog( "�����") ) ,
new( F, text( "�����") ) ,
send( Dialog, append, F) ,
next_move( State, N) :-
I = 0 ,
write ( "������� ����� ������� ������ ����"
) , write ( '\n' ) , write ( "������� ����� ������ ������ ����"
) , write ( '\n' ) , make_move( X, Y, State, Type, NewState) , ! ,
not( check( NewState) ) ,
next_move( NewState, N1) .
next_move( State, N) :-
I = 1 ,
pattern( State, X, Y) ,
make_move( X, Y, State, Type, NewState) , ! ,
not( check( NewState) ) ,
next_move( NewState, N1) .
game( ) :-
initial_state( State) ,
next_move( State, 0 ) .
menu( ) :-
new( Main, dialog( '����' ) ) ,
send_list( Main, append, [
button( '������ ����' , message( @ prolog, init) ) ,
button( '�����' , message( Main, destroy) )
init( ) :-
new( Game, dialog( '����' ) ) ,
new( X_11, button( 'X' ) ) ,
new( X_12, button( 'X' ) ) ,
new( X_13, button( 'X' ) ) ,
new( X_14, button( 'X' ) ) ,
new( X_15, button( 'X' ) ) ,
new( X_16, button( 'X' ) ) ,
new( X_17, button( 'X' ) ) ,
new( X_18, button( 'X' ) ) ,
new( X_19, button( 'X' ) ) ,
new( X_21, button( '���' , message( @ prolog, change, X_11, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19) ) ) ,
new( X_22, button( '���' , message( @ prolog, change, X_12, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19) ) ) ,
new( X_23, button( '���' , message( @ prolog, change, X_13, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19) ) ) ,
send( Game, append, X_11) ,
send( Game, append, X_12, right) ,
send( Game, append, X_13, right) ,
send( Game, append, X_21, below) ,
send( Game, append, X_22, right) ,
send( Game, append, X_23, right) ,
new( X_24, button( '���' , message( @ prolog, change, X_14, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19) ) ) ,
new( X_25, button( '���' , message( @ prolog, change, X_15, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19) ) ) ,
new( X_26, button( '���' , message( @ prolog, change, X_16, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19) ) ) ,
send( Game, append, X_14, below) ,
send( Game, append, X_15, right) ,
send( Game, append, X_16, right) ,
send( Game, append, X_24, below) ,
send( Game, append, X_25, right) ,
send( Game, append, X_26, right) ,
new( X_27, button( '���' , message( @ prolog, change, X_17, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19) ) ) ,
new( X_28, button( '���' , message( @ prolog, change, X_18, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19) ) ) ,
new( X_29, button( '���' , message( @ prolog, change, X_19, X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19) ) ) ,
send( Game, append, X_17, below) ,
send( Game, append, X_18, right) ,
send( Game, append, X_19, right) ,
send( Game, append, X_27, below) ,
send( Game, append, X_28, right) ,
send( Game, append, X_29, right) ,
game1( [ X_11, X_12, X_13, X_14, X_15, X_16, X_17, X_18, X_19] ) .
game1( ListPole) :- change_view( ListPole, [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) .
change_view( ListPole, State) :-
�������_�����( State, 0 , A) ,
�������_�����( State, 1 , B) ,
�������_�����( State, 2 , C) ,
�������_�����( State, 3 , D) ,
�������_�����( State, 4 , E) ,
�������_�����( State, 5 , F) ,
�������_�����( State, 6 , G) ,
�������_�����( State, 7 , H) ,
�������_�����( State, 8 , I) ,
x_o( A, A1) ,
x_o( B, B1) ,
x_o( C, C1) ,
x_o( D, D1) ,
x_o( E, E1) ,
x_o( F, F1) ,
x_o( G, G1) ,
x_o( H, H1) ,
x_o( I, I1) ,
�������_�����( ListPole, 0 , A2) ,
�������_�����( ListPole, 1 , B2) ,
�������_�����( ListPole, 2 , C2) ,
�������_�����( ListPole, 3 , D2) ,
�������_�����( ListPole, 4 , E2) ,
�������_�����( ListPole, 5 , F2) ,
�������_�����( ListPole, 6 , G2) ,
�������_�����( ListPole, 7 , H2) ,
�������_�����( ListPole, 8 , I2) ,
send( A2, name, A1) ,
send( B2, name, B1) ,
send( C2, name, C1) ,
send( D2, name, D1) ,
send( E2, name, E1) ,
send( F2, name, F1) ,
send( G2, name, G1) ,
send( H2, name, H1) ,
send( I2, name, I1) .
get_state( ListPole, [ A, B, C, D, E, F, G, H, I] ) :-
�������_�����( ListPole, 0 , A2) ,
�������_�����( ListPole, 1 , B2) ,
�������_�����( ListPole, 2 , C2) ,
�������_�����( ListPole, 3 , D2) ,
�������_�����( ListPole, 4 , E2) ,
�������_�����( ListPole, 5 , F2) ,
�������_�����( ListPole, 6 , G2) ,
�������_�����( ListPole, 7 , H2) ,
�������_�����( ListPole, 8 , I2) ,
get( A2, name, A1) ,
get( B2, name, B1) ,
get( C2, name, C1) ,
get( D2, name, D1) ,
get( E2, name, E1) ,
get( F2, name, F1) ,
get( G2, name, G1) ,
get( H2, name, H1) ,
get( I2, name, I1) ,
x_o( A, A1) ,
x_o( B, B1) ,
x_o( C, C1) ,
x_o( D, D1) ,
x_o( E, E1) ,
x_o( F, F1) ,
x_o( G, G1) ,
x_o( H, H1) ,
x_o( I, I1) .
change( X, A, B, C, D, E, F, J, H, I) :-
get( X, name, X1) ,
%write(ListPole),
x_o( N, X1) ,
N = 0 ,
send( X, name, "X") ,
get_state( [ A, B, C, D, E, F, J, H, I] , State) , ! ,
not( check( State) ) ,
pattern( State, X0, Y0) ,
make_move( X0, Y0, State, Type, NewState) , ! ,
change_view( [ A, B, C, D, E, F, J, H, I] , NewState) ,
not( check( NewState) ) .
% ���������() :-
% game().
%:- ���������.
:- menu.
Oi0gdXNlX21vZHVsZShsaWJyYXJ5KHBjZSkpLgoKCmluaXRpYWxfc3RhdGUoWzAsMCwwLDAsMCwwLDAsMCwwXSkuCgrvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KFvvv718X10sIDAsIO+/vSkuCu+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oW198W++/vTF877+9XV0sIO+/ve+/ve+/ve+/ve+/vSwg77+977+977+977+977+977+977+9KSA6LSDvv73vv73vv73vv73vv70xIGlzIO+/ve+/ve+/ve+/ve+/vS0xLCDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KFvvv70xfO+/vV0sIO+/ve+/ve+/ve+/ve+/vTEsIO+/ve+/ve+/ve+/ve+/ve+/ve+/vSkuCgrvv73vv73vv73vv73vv73vv73vv73vv71f77+9X++/ve+/ve+/ve+/ve+/ve+/vShbXSwg77+977+977+977+977+977+977+9LCAwLCBb77+977+977+977+977+977+977+9XSkuCu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv71f77+977+977+977+977+977+9KFvvv71877+9XSwg77+977+977+977+977+977+977+9LCAwLCBb77+977+977+977+977+977+977+9fFvvv71877+9XV0pLgrvv73vv73vv73vv73vv73vv73vv73vv71f77+9X++/ve+/ve+/ve+/ve+/ve+/vShb77+9fO+/vV0sIO+/ve+/ve+/ve+/ve+/ve+/ve+/vSwg77+977+977+977+977+9LCBb77+9fO+/vTFdKSA6LSAg77+977+977+977+977+9MSBpcyDvv73vv73vv73vv73vv70tMSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv71f77+977+977+977+977+977+9KO+/vSwg77+977+977+977+977+977+977+9LCDvv73vv73vv73vv73vv70xLCDvv70xKSAuCgrvv73vv73vv73vv73vv73vv73vv71f77+977+9X++/ve+/ve+/ve+/ve+/ve+/vShbX3zvv71dLCAwLCDvv70pLgrvv73vv73vv73vv73vv73vv73vv71f77+977+9X++/ve+/ve+/ve+/ve+/ve+/vShb77+9fO+/vV0sIO+/ve+/ve+/ve+/ve+/vSwgW++/vXzvv70xXSkgOi0g77+977+977+977+977+9MSBpcyDvv73vv73vv73vv73vv70tMSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv71f77+977+977+977+977+977+9KO+/vSwg77+977+977+977+977+9MSwg77+9MSkuCgp3aW5fc3RhdGVYKFsxLDEsMSxfLF8sXyxfLF8sX10pLgp3aW5fc3RhdGVYKFtfLF8sXywxLDEsMSxfLF8sX10pLgp3aW5fc3RhdGVYKFtfLF8sXyxfLF8sXywxLDEsMV0pLgp3aW5fc3RhdGVYKFsxLF8sXywxLF8sXywxLF8sX10pLgp3aW5fc3RhdGVYKFtfLDEsXyxfLDEsXyxfLDEsX10pLgp3aW5fc3RhdGVYKFtfLF8sMSxfLF8sMSxfLF8sMV0pLgp3aW5fc3RhdGVYKFsxLF8sXyxfLDEsXyxfLF8sMV0pLgp3aW5fc3RhdGVYKFtfLF8sMSxfLDEsXywxLF8sX10pLgoKd2luX3N0YXRlTyhbMiwyLDIsXyxfLF8sXyxfLF9dKS4Kd2luX3N0YXRlTyhbXyxfLF8sMiwyLDIsXyxfLF9dKS4Kd2luX3N0YXRlTyhbXyxfLF8sXyxfLF8sMiwyLDJdKS4Kd2luX3N0YXRlTyhbMixfLF8sMixfLF8sMixfLF9dKS4Kd2luX3N0YXRlTyhbXywyLF8sXywyLF8sXywyLF9dKS4Kd2luX3N0YXRlTyhbXyxfLDIsXyxfLDIsXyxfLDJdKS4Kd2luX3N0YXRlTyhbMixfLF8sXywyLF8sXyxfLDJdKS4Kd2luX3N0YXRlTyhbXyxfLDIsXywyLF8sMixfLF9dKS4KCgpwYXR0ZXJuKFtfLCBfLF8sIF8sIDAsIF8sIF8sIF8sIF9dLCAxLCAxKSA6LSAhLgoKcGF0dGVybihbMCwyLDIsXyxfLF8sXyxfLF9dLCAwLCAwKSA6LSAhLgpwYXR0ZXJuKFtfLF8sXywwLDIsMixfLF8sX10sIDAsIDEpIDotICEuCnBhdHRlcm4oW18sXyxfLF8sXyxfLDAsMiwyXSwgMCwgMikgOi0gIS4KcGF0dGVybihbMCxfLF8sMixfLF8sMixfLF9dLCAwLCAwKSA6LSAhLgpwYXR0ZXJuKFtfLDAsXyxfLDIsXyxfLDIsX10sIDEsIDApIDotICEuCnBhdHRlcm4oW18sXywwLF8sXywyLF8sXywyXSwgMiwgMCkgOi0gIS4KcGF0dGVybihbMCxfLF8sXywyLF8sXyxfLDJdLCAwLCAwKSA6LSAhLgpwYXR0ZXJuKFtfLF8sMCxfLDIsXywyLF8sX10sIDIsIDApIDotICEuCgpwYXR0ZXJuKFsyLDAsMixfLF8sXyxfLF8sX10sIDEsIDApIDotICEuCnBhdHRlcm4oW18sXyxfLDIsMCwyLF8sXyxfXSwgMSwgMSkgOi0gIS4KcGF0dGVybihbXyxfLF8sXyxfLF8sMiwwLDJdLCAxLCAyKSA6LSAhLgpwYXR0ZXJuKFsyLF8sXywwLF8sXywyLF8sX10sIDAsIDEpIDotICEuCnBhdHRlcm4oW18sMixfLF8sMCxfLF8sMixfXSwgMSwgMSkgOi0gIS4KcGF0dGVybihbXyxfLDIsXyxfLDAsXyxfLDJdLCAyLCAxKSA6LSAhLgpwYXR0ZXJuKFsyLF8sXyxfLDAsXyxfLF8sMl0sIDEsIDEpIDotICEuCnBhdHRlcm4oW18sXywyLF8sMCxfLDIsXyxfXSwgMSwgMSkgOi0gIS4KCnBhdHRlcm4oWzIsMiwwLF8sXyxfLF8sXyxfXSwgMiwgMCkgOi0gIS4KcGF0dGVybihbXyxfLF8sMiwyLDAsXyxfLF9dLCAyLCAxKSA6LSAhLgpwYXR0ZXJuKFtfLF8sXyxfLF8sXywyLDIsMF0sIDIsIDIpIDotICEuCnBhdHRlcm4oWzIsXyxfLDIsXyxfLDAsXyxfXSwgMCwgMikgOi0gIS4KcGF0dGVybihbXywyLF8sXywyLF8sXywwLF9dLCAxLCAyKSA6LSAhLgpwYXR0ZXJuKFtfLF8sMixfLF8sMixfLF8sMF0sIDIsIDIpIDotICEuCnBhdHRlcm4oWzIsXyxfLF8sMixfLF8sXywwXSwgMiwgMikgOi0gIS4KcGF0dGVybihbXyxfLDIsXywyLF8sMCxfLF9dLCAwLCAyKSA6LSAhLgoKCnBhdHRlcm4oWzAsMSwxLF8sXyxfLF8sXyxfXSwgMCwgMCkgOi0gIS4KcGF0dGVybihbXyxfLF8sMCwxLDEsXyxfLF9dLCAwLCAxKSA6LSAhLgpwYXR0ZXJuKFtfLF8sXyxfLF8sXywwLDEsMV0sIDAsIDIpIDotICEuCnBhdHRlcm4oWzAsXyxfLDEsXyxfLDEsXyxfXSwgMCwgMCkgOi0gIS4KcGF0dGVybihbXywwLF8sXywxLF8sXywxLF9dLCAxLCAwKSA6LSAhLgpwYXR0ZXJuKFtfLF8sMCxfLF8sMSxfLF8sMV0sIDIsIDApIDotICEuCnBhdHRlcm4oWzAsXyxfLF8sMSxfLF8sXywxXSwgMCwgMCkgOi0gIS4KcGF0dGVybihbXyxfLDAsXywxLF8sMSxfLF9dLCAyLCAwKSA6LSAhLgoKcGF0dGVybihbMSwwLDEsXyxfLF8sXyxfLF9dLCAxLCAwKSA6LSAhLgpwYXR0ZXJuKFtfLF8sXywxLDAsMSxfLF8sX10sIDEsIDEpIDotICEuCnBhdHRlcm4oW18sXyxfLF8sXyxfLDEsMCwxXSwgMSwgMikgOi0gIS4KcGF0dGVybihbMSxfLF8sMCxfLF8sMSxfLF9dLCAwLCAxKSA6LSAhLgpwYXR0ZXJuKFtfLDEsXyxfLDAsXyxfLDEsX10sIDEsIDEpIDotICEuCnBhdHRlcm4oW18sXywxLF8sXywwLF8sXywxXSwgMiwgMSkgOi0gIS4KcGF0dGVybihbMSxfLF8sXywwLF8sXyxfLDFdLCAxLCAxKSA6LSAhLgpwYXR0ZXJuKFtfLF8sMSxfLDAsXywxLF8sX10sIDEsIDEpIDotICEuCgpwYXR0ZXJuKFsxLDEsMCxfLF8sXyxfLF8sX10sIDIsIDApIDotICEuCnBhdHRlcm4oW18sXyxfLDEsMSwwLF8sXyxfXSwgMiwgMSkgOi0gIS4KcGF0dGVybihbXyxfLF8sXyxfLF8sMSwxLDBdLCAyLCAyKSA6LSAhLgpwYXR0ZXJuKFsxLF8sXywxLF8sXywwLF8sX10sIDAsIDIpIDotICEuCnBhdHRlcm4oW18sMSxfLF8sMSxfLF8sMCxfXSwgMSwgMikgOi0gIS4KcGF0dGVybihbXyxfLDEsXyxfLDEsXyxfLDBdLCAyLCAyKSA6LSAhLgpwYXR0ZXJuKFsxLF8sXyxfLDEsXyxfLF8sMF0sIDIsIDIpIDotICEuCnBhdHRlcm4oW18sXywxLF8sMSxfLDAsXyxfXSwgMCwgMikgOi0gIS4KCgoKcGF0dGVybihbXywgMCxfLCBfLCAyLCBfLCBfLCBfLCAxXSwgMSwgMCkuCnBhdHRlcm4oW18sIDAsMSwgXywgMiwgXywgXywgXywgX10sIDEsIDApLgpwYXR0ZXJuKFtfLCAwLF8sIF8sIDIsIF8sIDEsIF8sIF9dLCAxLCAwKS4KcGF0dGVybihbMSwgMCxfLCBfLCAyLCBfLCBfLCBfLCBfXSwgMSwgMCkuCgpwYXR0ZXJuKFswLCBfLF8sIF8sIDEsIF8sIF8sIF8sIF9dLCAwLCAwKS4KcGF0dGVybihbXywgXyxfLCBfLCAxLCBfLCBfLCBfLCBfXSwgMCwgMikuCnBhdHRlcm4oW18sIF8sXywgXywgMSwgXywgXywgXywgX10sIDIsIDApLgpwYXR0ZXJuKFtfLCBfLF8sIF8sIDEsIF8sIF8sIF8sIF9dLCAyLCAyKS4KCnBhdHRlcm4oXywgMCwgMCkuCnBhdHRlcm4oXywgMSwgMCkuCnBhdHRlcm4oXywgMiwgMCkuCnBhdHRlcm4oXywgMSwgMCkuCnBhdHRlcm4oXywgMSwgMSkuCnBhdHRlcm4oXywgMSwgMikuCnBhdHRlcm4oXywgMiwgMCkuCnBhdHRlcm4oXywgMiwgMSkuCnBhdHRlcm4oXywgMiwgMikuCgoKCgp4X28oMCwgJyAnKS4KeF9vKDEsICdYJykuCnhfbygyLCAnTycpLgoKCnNob3coU3RhdGUpIDotCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KFN0YXRlLCAwLCBBKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oU3RhdGUsIDEsIEIpLAogICAg77+977+977+977+977+977+977+9X++/ve+/ve+/ve+/ve+/vShTdGF0ZSwgMiwgQyksCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KFN0YXRlLCAzLCBEKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oU3RhdGUsIDQsIEUpLAogICAg77+977+977+977+977+977+977+9X++/ve+/ve+/ve+/ve+/vShTdGF0ZSwgNSwgRiksCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KFN0YXRlLCA2LCBHKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oU3RhdGUsIDcsIEgpLAogICAg77+977+977+977+977+977+977+9X++/ve+/ve+/ve+/ve+/vShTdGF0ZSwgOCwgSSksCiAgICB4X28oQSwgQTEpLAogICAgeF9vKEIsIEIxKSwKICAgIHhfbyhDLCBDMSksCiAgICB4X28oRCwgRDEpLAogICAgeF9vKEUsIEUxKSwKICAgIHhfbyhGLCBGMSksCiAgICB4X28oRywgRzEpLAogICAgeF9vKEgsIEgxKSwKICAgIHhfbyhJLCBJMSksCiAgICB3cml0ZSgiICIpLAogICAgd3JpdGUoIiAiKSwKICAgIHdyaXRlKCIwIiksCiAgICB3cml0ZSgiMSIpLAogICAgd3JpdGUoIjIiKSwKICAgIHdyaXRlKCdcbicpLAogICAgd3JpdGUoIiAiKSwKICAgIHdyaXRlKCIgIiksCiAgICB3cml0ZSgiLSIpLAogICAgd3JpdGUoIi0iKSwKICAgIHdyaXRlKCItIiksCiAgICB3cml0ZSgnXG4nKSwKICAgIHdyaXRlKCIwIiksCiAgICB3cml0ZSgifCIpLAogICAgd3JpdGUoQTEpLAogICAgd3JpdGUoQjEpLAogICAgd3JpdGUoQzEpLAogICAgd3JpdGUoJ1xuJyksCiAgICB3cml0ZSgiMSIpLAogICAgd3JpdGUoInwiKSwKICAgIHdyaXRlKEQxKSwKICAgIHdyaXRlKEUxKSwKICAgIHdyaXRlKEYxKSwKICAgIHdyaXRlKCdcbicpLAogICAgd3JpdGUoIjIiKSwKICAgIHdyaXRlKCJ8IiksCiAgICB3cml0ZShHMSksCiAgICB3cml0ZShIMSksCiAgICB3cml0ZShJMSksCiAgICB3cml0ZSgnXG4nKS4KCmlzX2ZyZWUoWCwgWSwgU3RhdGUpIDotCiAgICBOIGlzIFkqMytYLAogICAg77+977+977+977+977+977+977+9X++/ve+/ve+/ve+/ve+/vShTdGF0ZSwgTiwgQSksCiAgICBBID0gMC4KCm1ha2VfbW92ZShYLCBZLCBTdGF0ZSwgVHlwZSwgU3RhdGVfbmV4dCkgOi0KICAgIGlzX2ZyZWUoWCwgWSwgU3RhdGUpLAogICAgTiBpcyBZKjMrWCwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv71f77+977+977+977+977+977+9KFN0YXRlLCBOLCBTdGF0ZTEpLAogICAg77+977+977+977+977+977+977+977+9X++/vV/vv73vv73vv73vv73vv73vv70oU3RhdGUxLCBUeXBlLCBOLCBTdGF0ZV9uZXh0KSwKICAgIHNob3coU3RhdGVfbmV4dCkuCgpjaGVjayhTdGF0ZSkgOi0KICAgIHdpbl9zdGF0ZVgoU3RhdGVYKSwKICAgIG1lbWJlcihTdGF0ZSwgW1N0YXRlWF0pLAogICAgd3JpdGUoIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv73vv73vv73vv73vv70iKSx3cml0ZSgnXG4nKSwKICAgIG5ldyhEaWFsb2csIGRpYWxvZygi77+977+977+977+977+977+977+977+9IO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSIpKSwKICAgIG5ldyhGLCB0ZXh0KCLvv73vv73vv73vv73vv73vv73vv73vv70g77+977+977+977+977+977+977+977+9IikpLAogICAgc2VuZChEaWFsb2csIGFwcGVuZCwgRiksCiAgICBzZW5kKERpYWxvZywgb3BlbiksICEuCgpjaGVjayhTdGF0ZSkgOi0KICAgIHdpbl9zdGF0ZU8oU3RhdGVPKSwKICAgIG1lbWJlcihTdGF0ZSwgW1N0YXRlT10pLAogICAgd3JpdGUoIu+/ve+/ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv73vv73vv73vv73vv70iKSx3cml0ZSgnXG4nKSwKICAgIG5ldyhEaWFsb2csIGRpYWxvZygi77+977+977+977+977+977+9IO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSIpKSwKICAgIG5ldyhGLCB0ZXh0KCLvv73vv73vv73vv73vv73vv70g77+977+977+977+977+977+977+977+9IikpLAogICAgc2VuZChEaWFsb2csIGFwcGVuZCwgRiksCiAgICBzZW5kKERpYWxvZywgb3BlbiksICEuCgpjaGVjayhTdGF0ZSkgOi0KICAgIG5vdChtZW1iZXIoMCwgU3RhdGUpKSwKICAgIHdyaXRlKCLvv73vv73vv73vv73vv70iKSx3cml0ZSgnXG4nKSwKICAgIG5ldyhEaWFsb2csIGRpYWxvZygi77+977+977+977+977+9IikpLAogICAgbmV3KEYsIHRleHQoIu+/ve+/ve+/ve+/ve+/vSIpKSwKICAgIHNlbmQoRGlhbG9nLCBhcHBlbmQsIEYpLAogICAgc2VuZChEaWFsb2csIG9wZW4pLCEuCgpuZXh0X21vdmUoU3RhdGUsIE4pIDotCiAgICBJIGlzIE4gbW9kIDIsCiAgICBJID0gMCwKICAgIFR5cGUgaXMgMSwKICAgIHdyaXRlKCLvv73vv73vv73vv73vv73vv73vv70g77+977+977+977+977+9IO+/ve+/ve+/ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv73vv73vv70g77+977+977+977+9Iiksd3JpdGUoJ1xuJyksCiAgICByZWFkKFgpLAogICAgd3JpdGUoIu+/ve+/ve+/ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv73vv70g77+977+977+977+977+977+9IO+/ve+/ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv70iKSx3cml0ZSgnXG4nKSwKICAgIHJlYWQoWSksCiAgICBtYWtlX21vdmUoWCwgWSwgU3RhdGUsIFR5cGUsIE5ld1N0YXRlKSwgISwKICAgIG5vdChjaGVjayhOZXdTdGF0ZSkpLAogICAgTjEgaXMgTisxLAogICAgbmV4dF9tb3ZlKE5ld1N0YXRlLCBOMSkuCgpuZXh0X21vdmUoU3RhdGUsIE4pIDotCiAgICBJIGlzIE4gbW9kIDIsCiAgICBJID0gMSwKICAgIFR5cGUgaXMgMiwKICAgIHBhdHRlcm4oU3RhdGUsIFgsIFkpLAogICAgbWFrZV9tb3ZlKFgsIFksIFN0YXRlLCBUeXBlLCBOZXdTdGF0ZSksICEsCiAgICBub3QoY2hlY2soTmV3U3RhdGUpKSwKICAgIE4xIGlzIE4rMSwKICAgIG5leHRfbW92ZShOZXdTdGF0ZSwgTjEpLgoKCgpnYW1lKCk6LQogICAgaW5pdGlhbF9zdGF0ZShTdGF0ZSksCiAgICBuZXh0X21vdmUoU3RhdGUsIDApLgoKbWVudSgpOi0KICAgIG5ldyhNYWluLCBkaWFsb2coJ++/ve+/ve+/ve+/vScpKSwKICAgIHNlbmRfbGlzdChNYWluLCBhcHBlbmQsIFsKICAgICAgICAgICAgICAgICAgICBidXR0b24oJ++/ve+/ve+/ve+/ve+/ve+/vSDvv73vv73vv73vv70nLCBtZXNzYWdlKEBwcm9sb2csIGluaXQpKSwKICAgICAgICAgICAgICAgICAgICBidXR0b24oJ++/ve+/ve+/ve+/ve+/vScsIG1lc3NhZ2UoTWFpbiwgZGVzdHJveSkpCiAgICAgICAgICAgICAgICAgICAgXSksIHNlbmQoTWFpbiwgb3BlbikuCgppbml0KCkgOi0KICAgIG5ldyhHYW1lLCBkaWFsb2coJ++/ve+/ve+/ve+/vScpKSwKICAgIG5ldyhYXzExLCBidXR0b24oJ1gnKSksCiAgICBuZXcoWF8xMiwgYnV0dG9uKCdYJykpLAogICAgbmV3KFhfMTMsIGJ1dHRvbignWCcpKSwKCiAgICBuZXcoWF8xNCwgYnV0dG9uKCdYJykpLAogICAgbmV3KFhfMTUsIGJ1dHRvbignWCcpKSwKICAgIG5ldyhYXzE2LCBidXR0b24oJ1gnKSksCgogICAgbmV3KFhfMTcsIGJ1dHRvbignWCcpKSwKICAgIG5ldyhYXzE4LCBidXR0b24oJ1gnKSksCiAgICBuZXcoWF8xOSwgYnV0dG9uKCdYJykpLAoKICAgIG5ldyhYXzIxLGJ1dHRvbign77+977+977+9JywgbWVzc2FnZShAcHJvbG9nLCBjaGFuZ2UsIFhfMTEsIFhfMTEsIFhfMTIsIFhfMTMsIFhfMTQsIFhfMTUsIFhfMTYsIFhfMTcsIFhfMTgsIFhfMTkpKSksCiAgICBuZXcoWF8yMixidXR0b24oJ++/ve+/ve+/vScsIG1lc3NhZ2UoQHByb2xvZywgY2hhbmdlLCBYXzEyLCBYXzExLCBYXzEyLCBYXzEzLCBYXzE0LCBYXzE1LCBYXzE2LCBYXzE3LCBYXzE4LCBYXzE5KSkpLAogICAgbmV3KFhfMjMsYnV0dG9uKCfvv73vv73vv70nLCBtZXNzYWdlKEBwcm9sb2csIGNoYW5nZSwgWF8xMywgWF8xMSwgWF8xMiwgWF8xMywgWF8xNCwgWF8xNSwgWF8xNiwgWF8xNywgWF8xOCwgWF8xOSkpKSwKICAgIHNlbmQoR2FtZSwgYXBwZW5kLCBYXzExKSwKICAgIHNlbmQoR2FtZSwgYXBwZW5kLCBYXzEyLCByaWdodCksCiAgICBzZW5kKEdhbWUsIGFwcGVuZCwgWF8xMywgcmlnaHQpLAogICAgc2VuZChHYW1lLCBhcHBlbmQsIFhfMjEsIGJlbG93KSwKICAgIHNlbmQoR2FtZSwgYXBwZW5kLCBYXzIyLCByaWdodCksCiAgICBzZW5kKEdhbWUsIGFwcGVuZCwgWF8yMywgcmlnaHQpLAoKCiAgICBuZXcoWF8yNCxidXR0b24oJ++/ve+/ve+/vScsIG1lc3NhZ2UoQHByb2xvZywgY2hhbmdlLCBYXzE0LCBYXzExLCBYXzEyLCBYXzEzLCBYXzE0LCBYXzE1LCBYXzE2LCBYXzE3LCBYXzE4LCBYXzE5KSkpLAogICAgbmV3KFhfMjUsYnV0dG9uKCfvv73vv73vv70nLCBtZXNzYWdlKEBwcm9sb2csIGNoYW5nZSwgWF8xNSwgWF8xMSwgWF8xMiwgWF8xMywgWF8xNCwgWF8xNSwgWF8xNiwgWF8xNywgWF8xOCwgWF8xOSkpKSwKICAgIG5ldyhYXzI2LGJ1dHRvbign77+977+977+9JywgbWVzc2FnZShAcHJvbG9nLCBjaGFuZ2UsIFhfMTYsIFhfMTEsIFhfMTIsIFhfMTMsIFhfMTQsIFhfMTUsIFhfMTYsIFhfMTcsIFhfMTgsIFhfMTkpKSksCiAgICBzZW5kKEdhbWUsIGFwcGVuZCwgWF8xNCwgYmVsb3cpLAogICAgc2VuZChHYW1lLCBhcHBlbmQsIFhfMTUsIHJpZ2h0KSwKICAgIHNlbmQoR2FtZSwgYXBwZW5kLCBYXzE2LCByaWdodCksCiAgICBzZW5kKEdhbWUsIGFwcGVuZCwgWF8yNCwgYmVsb3cpLAogICAgc2VuZChHYW1lLCBhcHBlbmQsIFhfMjUsIHJpZ2h0KSwKICAgIHNlbmQoR2FtZSwgYXBwZW5kLCBYXzI2LCByaWdodCksCgoKICAgIG5ldyhYXzI3LGJ1dHRvbign77+977+977+9JywgbWVzc2FnZShAcHJvbG9nLCBjaGFuZ2UsIFhfMTcsIFhfMTEsIFhfMTIsIFhfMTMsIFhfMTQsIFhfMTUsIFhfMTYsIFhfMTcsIFhfMTgsIFhfMTkpKSksCiAgICBuZXcoWF8yOCxidXR0b24oJ++/ve+/ve+/vScsIG1lc3NhZ2UoQHByb2xvZywgY2hhbmdlLCBYXzE4LCBYXzExLCBYXzEyLCBYXzEzLCBYXzE0LCBYXzE1LCBYXzE2LCBYXzE3LCBYXzE4LCBYXzE5KSkpLAogICAgbmV3KFhfMjksYnV0dG9uKCfvv73vv73vv70nLCBtZXNzYWdlKEBwcm9sb2csIGNoYW5nZSwgWF8xOSwgWF8xMSwgWF8xMiwgWF8xMywgWF8xNCwgWF8xNSwgWF8xNiwgWF8xNywgWF8xOCwgWF8xOSkpKSwKICAgIHNlbmQoR2FtZSwgYXBwZW5kLCBYXzE3LCBiZWxvdyksCiAgICBzZW5kKEdhbWUsIGFwcGVuZCwgWF8xOCwgcmlnaHQpLAogICAgc2VuZChHYW1lLCBhcHBlbmQsIFhfMTksIHJpZ2h0KSwKICAgIHNlbmQoR2FtZSwgYXBwZW5kLCBYXzI3LCBiZWxvdyksCiAgICBzZW5kKEdhbWUsIGFwcGVuZCwgWF8yOCwgcmlnaHQpLAogICAgc2VuZChHYW1lLCBhcHBlbmQsIFhfMjksIHJpZ2h0KSwKCiAgICBzZW5kKEdhbWUsIG9wZW4pLAogICAgZ2FtZTEoW1hfMTEsIFhfMTIsIFhfMTMsIFhfMTQsIFhfMTUsIFhfMTYsIFhfMTcsIFhfMTgsIFhfMTldKS4KCmdhbWUxKExpc3RQb2xlKSA6LSBjaGFuZ2VfdmlldyhMaXN0UG9sZSwgWzAsMCwwLDAsMCwwLDAsMCwwXSkuCgpjaGFuZ2VfdmlldyhMaXN0UG9sZSwgU3RhdGUpIDotCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KFN0YXRlLCAwLCBBKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oU3RhdGUsIDEsIEIpLAogICAg77+977+977+977+977+977+977+9X++/ve+/ve+/ve+/ve+/vShTdGF0ZSwgMiwgQyksCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KFN0YXRlLCAzLCBEKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oU3RhdGUsIDQsIEUpLAogICAg77+977+977+977+977+977+977+9X++/ve+/ve+/ve+/ve+/vShTdGF0ZSwgNSwgRiksCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KFN0YXRlLCA2LCBHKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oU3RhdGUsIDcsIEgpLAogICAg77+977+977+977+977+977+977+9X++/ve+/ve+/ve+/ve+/vShTdGF0ZSwgOCwgSSksCiAgICB4X28oQSwgQTEpLAogICAgeF9vKEIsIEIxKSwKICAgIHhfbyhDLCBDMSksCiAgICB4X28oRCwgRDEpLAogICAgeF9vKEUsIEUxKSwKICAgIHhfbyhGLCBGMSksCiAgICB4X28oRywgRzEpLAogICAgeF9vKEgsIEgxKSwKICAgIHhfbyhJLCBJMSksCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KExpc3RQb2xlLCAwLCBBMiksCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KExpc3RQb2xlLCAxLCBCMiksCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KExpc3RQb2xlLCAyLCBDMiksCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KExpc3RQb2xlLCAzLCBEMiksCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KExpc3RQb2xlLCA0LCBFMiksCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KExpc3RQb2xlLCA1LCBGMiksCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KExpc3RQb2xlLCA2LCBHMiksCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KExpc3RQb2xlLCA3LCBIMiksCiAgICDvv73vv73vv73vv73vv73vv73vv71f77+977+977+977+977+9KExpc3RQb2xlLCA4LCBJMiksCiAgICBzZW5kKEEyLCBuYW1lLCBBMSksCiAgICBzZW5kKEIyLCBuYW1lLCBCMSksCiAgICBzZW5kKEMyLCBuYW1lLCBDMSksCiAgICBzZW5kKEQyLCBuYW1lLCBEMSksCiAgICBzZW5kKEUyLCBuYW1lLCBFMSksCiAgICBzZW5kKEYyLCBuYW1lLCBGMSksCiAgICBzZW5kKEcyLCBuYW1lLCBHMSksCiAgICBzZW5kKEgyLCBuYW1lLCBIMSksCiAgICBzZW5kKEkyLCBuYW1lLCBJMSkuCgpnZXRfc3RhdGUoTGlzdFBvbGUsIFtBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJXSkgOi0KICAgIHdyaXRlKExpc3RQb2xlKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oTGlzdFBvbGUsIDAsIEEyKSwKICAgIHdyaXRlKEEyKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oTGlzdFBvbGUsIDEsIEIyKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oTGlzdFBvbGUsIDIsIEMyKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oTGlzdFBvbGUsIDMsIEQyKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oTGlzdFBvbGUsIDQsIEUyKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oTGlzdFBvbGUsIDUsIEYyKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oTGlzdFBvbGUsIDYsIEcyKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oTGlzdFBvbGUsIDcsIEgyKSwKICAgIO+/ve+/ve+/ve+/ve+/ve+/ve+/vV/vv73vv73vv73vv73vv70oTGlzdFBvbGUsIDgsIEkyKSwKICAgIGdldChBMiwgbmFtZSwgQTEpLAogICAgZ2V0KEIyLCBuYW1lLCBCMSksCiAgICBnZXQoQzIsIG5hbWUsIEMxKSwKICAgIGdldChEMiwgbmFtZSwgRDEpLAogICAgZ2V0KEUyLCBuYW1lLCBFMSksCiAgICBnZXQoRjIsIG5hbWUsIEYxKSwKICAgIGdldChHMiwgbmFtZSwgRzEpLAogICAgZ2V0KEgyLCBuYW1lLCBIMSksCiAgICBnZXQoSTIsIG5hbWUsIEkxKSwKICAgIHhfbyhBLCBBMSksCiAgICB4X28oQiwgQjEpLAogICAgeF9vKEMsIEMxKSwKICAgIHhfbyhELCBEMSksCiAgICB4X28oRSwgRTEpLAogICAgeF9vKEYsIEYxKSwKICAgIHhfbyhHLCBHMSksCiAgICB4X28oSCwgSDEpLAogICAgeF9vKEksIEkxKS4KCmNoYW5nZShYLCBBLCBCLCBDLCBELCBFLCBGLCBKLCBILCBJKSA6LQogICAgZ2V0KFgsIG5hbWUsIFgxKSwKICAgICV3cml0ZShMaXN0UG9sZSksCiAgICB4X28oTiwgWDEpLAogICAgTiA9IDAsCiAgICBzZW5kKFgsIG5hbWUsICJYIiksCiAgICBnZXRfc3RhdGUoW0EsIEIsIEMsIEQsIEUsIEYsIEosIEgsIEldLCBTdGF0ZSksICEsCiAgICBub3QoY2hlY2soU3RhdGUpKSwKICAgIFR5cGUgaXMgMiwKICAgIHBhdHRlcm4oU3RhdGUsIFgwLCBZMCksCiAgICBtYWtlX21vdmUoWDAsIFkwLCBTdGF0ZSwgVHlwZSwgTmV3U3RhdGUpLCAhLAogICAgY2hhbmdlX3ZpZXcoW0EsIEIsIEMsIEQsIEUsIEYsIEosIEgsIEldLCBOZXdTdGF0ZSksCiAgICBub3QoY2hlY2soTmV3U3RhdGUpKS4KCiUg77+977+977+977+977+977+977+977+977+9KCkgOi0KJSAgICBnYW1lKCkuCiU6LSDvv73vv73vv73vv73vv73vv73vv73vv73vv70uCjotbWVudS4KCg==