§
    ä¶»jg0  ã                   óX  — d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
mZ ddlmZmZ ddlmZmZmZmZ ddlmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddl m!Z!m"Z"m#Z#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+  G d„ d¦  «        Z, G d„ d¦  «        Z- G d„ d¦  «        Z. G d„ d¦  «        Z/dS )zÅ
Unit tests for Persistent SQLite Account Database, Bank-Grade Security,
Device Remember-Me, and Level 1 Character Creation with Season Persistence.
Following Autonomous TDD Closed-Loop standards.
é    N)ÚPath)ÚDictÚAny)ÚAccountÚAccountStatusÚRoleÚAuthTokenPair)ÚPasswordHasherÚTokenService)ÚCaptchaEngine)ÚEmailVerificationServiceÚMockEmailSender)ÚOAuthService)ÚDatabaseAccountRepository)ÚBankGradeSecurityEngineÚSecurityEventTypeÚDeviceFingerprintÚRememberTokenResult)ÚCharacterServiceÚ	CharacterÚCharacterClassÚCharacterCreationResult)ÚAuthServicec                   ó.   — e Zd Zdeddfd„Zdeddfd„ZdS )ÚTestDatabaseAccountRepositoryÚtmp_pathÚreturnNc                 óX  — t          |dz  ¦  «        }t          |¬¦  «        }t          ¦   «         }|                     d¦  «        }|                     d|dt
          j        ¬¦  «        }|j        }|j        }d}	 ||	¦  «        }
|
s±dd	t          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        d
œz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}	}
|j        }d}||k    }|sªt          j        d|fd||f¦  «        d	t          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|                     d¦  «        }d }||u}|s—t          j        d|fd||f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}|j        }|j        }	||	k    }|sèt          j        d|fd||	f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	t          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	|                     |j        ¦  «        }d }||u}|s—t          j        d|fd||f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|                     d¦  «        }d }||u}|s—t          j        d|fd||f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}|                     d¦  «        }d }||u}|s—t          j        d|fd||f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )Nztest_auth.db©Údb_pathzBankGrade#Exile2026zemperor@freeexile.ioÚEmperorSword©ÚemailÚpassword_hashÚusernameÚstatusÚacc_zlassert %(py8)s
{%(py8)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.account_id
}.startswith
}(%(py6)s)
}Úaccount)Úpy0Úpy2Úpy4Úpy6Úpy8©ú==)z-%(py2)s
{%(py2)s = %(py0)s.email
} == %(py5)s©r)   r*   Úpy5úassert %(py7)sÚpy7©úis not©z%(py0)s is not %(py3)sÚacc_by_email©r)   Úpy3úassert %(py5)sr1   ©zR%(py2)s
{%(py2)s = %(py0)s.account_id
} == %(py6)s
{%(py6)s = %(py4)s.account_id
}©r)   r*   r+   r,   úassert %(py8)sr-   Ú	acc_by_id)z0%(py2)s
{%(py2)s = %(py0)s.username
} == %(py5)sÚacc_by_userzEMPEROR@FREEEXILE.IOÚacc_caps)Ústrr   r
   Úhash_passwordÚcreate_accountr   ÚACTIVEÚ
account_idÚ
startswithÚ@py_builtinsÚlocalsÚ
@pytest_arÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr#   Ú_call_reprcompareÚget_by_emailÚ	get_by_idr%   Úget_by_username)Úselfr   r    ÚrepoÚhasherÚpwd_hashr(   Ú@py_assert1Ú@py_assert3Ú@py_assert5Ú@py_assert7Ú@py_format9Ú@py_assert4Ú@py_format6Ú@py_format8r7   Ú@py_assert2Ú@py_format4Ú@py_format7r>   r?   r@   s                         úFC:\Projects\FreeExile\tests\unit\test_persistent_auth_and_character.pyÚ-test_database_initialization_and_account_crudzKTestDatabaseAccountRepository.test_database_initialization_and_account_crud(   s™  € Ý�h Ñ/Ñ0Ô0ˆÝ(°Ð9Ñ9Ô9ˆõ  Ñ!Ô!ˆØ×'Ò'Ð(=Ñ>Ô>ˆØ×%Ò%Ø(Ø"Ø#Ý Ô'ð	 &ñ 
ô 
ˆð Ô!Ð4Ð!Ô,Ð4¨VÐ4Ð,Ð,¨VÑ4Ô4Ð4Ð4Ð4Ð4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ˆwÑ4Ô4Ð4Õ4Ô4ˆwÑ4Ô4Ð4Ð4Õ4Ô4Ð!Ñ4Ô4Õ4Ô4Ð,Ñ4Ô4Õ4Ô4¨VÑ4Ô4Õ4Ô4Ð4Ñ4Ô4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ØŒ}Ð6Ð 6Ð6ˆ}Ð 6Ò6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6ˆ}Ð 6Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6ˆwÑ6Ô6Ð6Õ6Ô6ˆwÑ6Ô6Ð6Ð6Õ6Ô6ˆ}Ñ6Ô6Õ6Ô6Ð 6Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ð ×(Ò(Ð)?Ñ@Ô@ˆØ#'Ð'ˆ| 4Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'ˆ| 4Ð'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'ˆ|Ñ'Ô'Ð'Õ'Ô'ˆ|Ñ'Ô'Ð'Ð'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'ØÔ&Ð<¨'Ô*<Ð<Ð&Ð*<Ò<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð&Ð*<Ð<Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<ˆ|Ñ<Ô<Ð<Õ<Ô<ˆ|Ñ<Ô<Ð<Ð<Õ<Ô<Ð&Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<¨'Ñ<Ô<Ð<Õ<Ô<¨'Ñ<Ô<Ð<Ð<Õ<Ô<Ð*<Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<à—N’N 7Ô#5Ñ6Ô6ˆ	Ø $Ð$ˆy Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆy Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆyÑ$Ô$Ð$Õ$Ô$ˆyÑ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$ØÔ!Ð3 ^Ð3Ð! ^Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð! ^Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆyÑ3Ô3Ð3Õ3Ô3ˆyÑ3Ô3Ð3Ð3Õ3Ô3Ð!Ñ3Ô3Õ3Ô3 ^Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3à×*Ò*¨>Ñ:Ô:ˆØ"&Ð&ˆ{ $Ð&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ{ $Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆ{Ñ&Ô&Ð&Õ&Ô&ˆ{Ñ&Ô&Ð&Ð&Õ&Ô& $Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&ð ×$Ò$Ð%;Ñ<Ô<ˆØ#Ð#ˆx˜tÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆx˜tÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Ð#Õ#Ô#˜tÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ó    c                 óT  — t          |dz  ¦  «        }t          |¬¦  «        }|                     dddt          j        ¬¦  «        }|                     d|j        ¦  «         |                     d¦  «        }d }||u}|s—t          j	        d|fd	||f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        dœz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚d x}}|j        }|j        }
||
k    }|sèt          j	        d|fd||
f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}
|                     d¦  «         |j        }d} ||¦  «        }
d }|
|u }|sÐt          j	        d|fd|
|f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |
¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}
x}}d S )Nztest_auth_tokens.dbr   ztoken_user@freeexile.ioÚ
hash_dummyÚ	TokenUserr"   Úrf_token_12345r4   r6   Ú	found_accr8   r:   r1   r.   r;   r(   r<   r=   r-   ©Úis)zb%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_account_by_refresh_token
}(%(py4)s)
} is %(py9)srS   )r)   r*   r+   r,   Úpy9úassert %(py11)sÚpy11)rA   r   rC   r   rD   Ústore_refresh_tokenrE   Úget_account_by_refresh_tokenrI   rN   rG   rH   rJ   rK   rL   rM   Úrevoke_refresh_token)rR   r   r    rS   r(   rh   r^   rV   r_   r\   rX   rW   r`   rZ   Ú@py_assert8rY   Ú@py_format10Ú@py_format12s                     ra   Ú'test_database_refresh_token_persistencezETestDatabaseAccountRepository.test_database_refresh_token_persistenceH   sŸ  € Ý�hÐ!6Ñ6Ñ7Ô7ˆÝ(°Ð9Ñ9Ô9ˆà×%Ò%Ø+Ø&Ø Ý Ô'ð	 &ñ 
ô 
ˆð 	× Ò Ð!1°7Ô3EÑFÔFÐFØ×5Ò5Ð6FÑGÔGˆ	Ø $Ð$ˆy Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆy Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆyÑ$Ô$Ð$Õ$Ô$ˆyÑ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$ØÔ#Ð9 wÔ'9Ð9Ð#Ð'9Ò9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð#Ð'9Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9ˆyÑ9Ô9Ð9Õ9Ô9ˆyÑ9Ô9Ð9Ð9Õ9Ô9Ð#Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9 wÑ9Ô9Ð9Õ9Ô9 wÑ9Ô9Ð9Ð9Õ9Ô9Ð'9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9à×!Ò!Ð"2Ñ3Ô3Ð3ØÔ0ÐJÐ1AÐJÐ0Ð0Ð1AÑBÔBÐJÀdÐJÐBÀdÐJÐJÐJÐJÕJÔJÐJÐJÐJÐJÐBÀdÐJÑJÔJÐJÕJÔJÑJÔJÐJÐJÕJÔJˆtÑJÔJÐJÕJÔJˆtÑJÔJÐJÐJÕJÔJÐ0ÑJÔJÕJÔJÐ1AÑJÔJÕJÔJÐBÑJÔJÕJÔJÀdÑJÔJÐJÐJÑJÐJÐJÐJÐJÐJÑJÐJÕJÕJÔJÐJÑJÔJÑJÔJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJrc   )Ú__name__Ú
__module__Ú__qualname__r   rb   rt   © rc   ra   r   r   '   sa   € € € € € ð$Àdð $Ètð $ð $ð $ð $ð@KÀð KÈð Kð Kð Kð Kð Kð Krc   r   c                   ó.   — e Zd Zdeddfd„Zdeddfd„ZdS )ÚTestBankGradeSecurityEnginer   r   Nc                 ó„  — t          |dz  ¦  «        }t          |¬¦  «        }t          |¬¦  «        }|                     dddt          j        ¬¦  «        }t          dd	d
d¬¦  «        }|                     |j        |d¬¦  «        }|j	        }d}	||	u }
|
sªt          j        d|
fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}x}
}	|j        }d }	||	u}
|
sªt          j        d|
fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}x}
}	|                     |j        |¬¦  «        }|j	        }d}	||	u }
|
sªt          j        d|
fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}x}
}	|j        }|j        }||k    }
|
sèt          j        d|
fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}x}
}t          dd d!d"¬¦  «        }|                     |j        |¬¦  «        }|j	        }d#}	||	u }
|
sªt          j        d|
fd||	f¦  «        d$t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd$t          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}x}
}	d%}|j        }	|	j        } |¦   «         }||v }|sÐt          j        d&|fd'||f¦  «        t          j        |¦  «        d$t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd$t          j        |	¦  «        t          j        |¦  «        t          j        |¦  «        d(œz  }d)d*|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}x}x}	x}}|                     |j        ¦  «         |                     |j        |¬¦  «        }|j	        }d#}	||	u }
|
sªt          j        d|
fd||	f¦  «        d+t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd+t          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}x}
}	d S ),Nztest_bank_security.dbr   ©Ú
repositoryzvip_bank@freeexile.ioÚsecure_hashÚ	VipPlayerr"   Úiphone_16_pro_max_001ziPhone 16 Pro MaxÚhw_a18pro_metal3_9948z113.161.45.22©Ú	device_idÚdevice_nameÚhardware_hashÚ	client_ipé   )rE   ÚdeviceÚ
valid_daysTri   ©z/%(py2)s
{%(py2)s = %(py0)s.success
} is %(py5)sÚrem_resr0   r2   r3   r4   )z5%(py2)s
{%(py2)s = %(py0)s.raw_token
} is not %(py5)s)Ú	raw_tokenÚcurrent_deviceÚauth_resr.   r;   r(   r<   r=   r-   zEmulator BlueStacksÚhw_tampered_x86z
45.12.99.1FÚ
hijack_reszfingerprint mismatch©Úin©za%(py1)s in %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.message
}.lower
}()
}©Úpy1r9   r1   r3   rk   rl   rm   Úrevoked_check)rA   r   r   rC   r   rD   r   Úissue_remember_tokenrE   ÚsuccessrI   rN   rG   rH   rJ   rK   rL   rM   rŒ   Úauthenticate_remember_tokenÚmessageÚlowerÚrevoke_remember_token)rR   r   r    rS   Ú
sec_enginer(   rˆ   r‹   rV   r[   rW   r\   r]   rŽ   rX   r`   rZ   Úhacker_devicer�   Ú@py_assert0Ú@py_assert6rq   r^   rr   rs   r–   s                             ra   Ú3test_remember_me_token_lifecycle_and_device_bindingzOTestBankGradeSecurityEngine.test_remember_me_token_lifecycle_and_device_binding]   s  € Ý�hÐ!8Ñ8Ñ9Ô9ˆÝ(°Ð9Ñ9Ô9ˆÝ,¸Ð=Ñ=Ô=ˆ
à×%Ò%Ø)Ø'Ø Ý Ô'ð	 &ñ 
ô 
ˆõ #Ø-Ø+Ø1Ø%ð	
ñ 
ô 
ˆð ×1Ò1ØÔ)ØØð 2ñ 
ô 
ˆð
 ŒÐ& $Ð&ˆ $Ð&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ $Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆwÑ&Ô&Ð&Õ&Ô&ˆwÑ&Ô&Ð&Ð&Õ&Ô&ˆÑ&Ô&Õ&Ô& $Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØÔ Ð,¨Ð,Ð ¨Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð ¨Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆwÑ,Ô,Ð,Õ,Ô,ˆwÑ,Ô,Ð,Ð,Õ,Ô,Ð Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ð ×9Ò9ØÔ'Ø!ð :ñ 
ô 
ˆð ÔÐ' 4Ð'Ð 4Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð 4Ð'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'ˆxÑ'Ô'Ð'Õ'Ô'ˆxÑ'Ô'Ð'Ð'Õ'Ô'ÐÑ'Ô'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØÔ"Ð8 gÔ&8Ð8Ð"Ð&8Ò8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð"Ð&8Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆxÑ8Ô8Ð8Õ8Ô8ˆxÑ8Ô8Ð8Ð8Õ8Ô8Ð"Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8 gÑ8Ô8Ð8Õ8Ô8 gÑ8Ô8Ð8Ð8Õ8Ô8Ð&8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8õ *Ø-Ø-Ø+Ø"ð	
ñ 
ô 
ˆð  ×;Ò;ØÔ'Ø(ð <ñ 
ô 
ˆ
ð Ô!Ð* UÐ*Ð! UÐ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð! UÐ*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*ˆzÑ*Ô*Ð*Õ*Ô*ˆzÑ*Ô*Ð*Ð*Õ*Ô*Ð!Ñ*Ô*Õ*Ô* UÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø%ÐC¨Ô);ÐCÐ);Ô)AÐCÐ)AÐ)AÑ)CÔ)CÐCÐ%Ð)CÐCÐCÐCÐCÕCÔCÐCÐCÐCÐCÐ%Ð)CÐCÑCÔCÕCÔCÐ%ÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔC¨ÑCÔCÐCÕCÔC¨ÑCÔCÐCÐCÕCÔCÐ);ÑCÔCÕCÔCÐ)AÑCÔCÕCÔCÐ)CÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCð 	×(Ò(¨Ô):Ñ;Ô;Ð;Ø"×>Ò>ØÔ'Ø!ð ?ñ 
ô 
ˆð Ô$Ð-¨Ð-Ð$¨Ð-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð$¨Ð-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆ}Ñ-Ô-Ð-Õ-Ô-ˆ}Ñ-Ô-Ð-Ð-Õ-Ô-Ð$Ñ-Ô-Õ-Ô-¨Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-rc   c                 óÞ
  — t          |dz  ¦  «        }t          |¬¦  «        }t          |¬¦  «        }|                     dddt          j        ¬¦  «        }t          dd	d
d¬¦  «        }t          dd¦  «        D �]i}|                     |j	        |¦  «        \  }}	d}
|	|
u }|s—t          j        d|fd|	|
f¦  «        dt          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        ndt          j        |
¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}}
d}
||
k    }|s—t          j        d|fd||
f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}}
�Œk|                     |j	        |¦  «        \  }}	d}
|	|
u }|s—t          j        d|fd|	|
f¦  «        dt          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        ndt          j        |
¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}}
d}
||
k    }|s—t          j        d|fd||
f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}}
|                     |j	        ¦  «        }t'          |¦  «        }
d}|
|k    }|sòt          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j        t&          ¦  «        rt          j        t&          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        t          j        |¦  «        dœz  }d d!|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}
x}}|d         d"         }t(          j        }|j        }||k    }
|
sÇt          j        d#|
fd$||f¦  «        t          j        |¦  «        d%t          j        ¦   «         v st          j        t(          ¦  «        rt          j        t(          ¦  «        nd%t          j        |¦  «        t          j        |¦  «        d&œz  }d'd(|iz  }t!          t          j        |¦  «        ¦  «        ‚d x}x}
x}}d S ))Nztest_audit.dbr   r|   ztarget@freeexile.ioÚpwdÚ	TargetAccr"   Údev_001ÚBrowserÚhw_001z192.168.1.1r‚   é   é   Fri   )z%(py0)s is %(py3)sÚ	is_lockedr8   r:   r1   r   )ú>=)z%(py0)s >= %(py3)sÚdelayTg      Œ@)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sÚlenÚlogs©r)   r•   r9   r,   r=   r-   Ú
event_typer.   )zJ%(py1)s == %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.LOCKOUT
}.value
}r   )r•   r9   r1   r3   úassert %(py9)srk   )rA   r   r   rC   r   rD   r   ÚrangeÚrecord_login_failurerE   rI   rN   rG   rH   rJ   rK   rL   rM   Úget_audit_logs_for_accountr­   r   ÚLOCKOUTÚvalue)rR   r   r    rS   r�   r(   rˆ   Úir¬   rª   r^   rV   r_   r\   r®   rX   r[   r`   rZ   rŸ   r    r]   rr   s                          ra   Ú*test_progressive_lockout_and_audit_loggingzFTestBankGradeSecurityEngine.test_progressive_lockout_and_audit_logging—   s$  € Ý�h Ñ0Ñ1Ô1ˆÝ(°Ð9Ñ9Ô9ˆÝ,¸Ð=Ñ=Ô=ˆ
à×%Ò%Ø'ØØ Ý Ô'ð	 &ñ 
ô 
ˆõ #ØØ!Ø"Ø#ð	
ñ 
ô 
ˆõ �q˜!‘”ð 	ñ 	ˆAØ)×>Ò>¸wÔ?QÐSYÑZÔZÑˆE�9Ø %Ð%�9 Ð%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%�9 Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�9Ñ%Ô%Ð%Õ%Ô%�9Ñ%Ô%Ð%Ð%Õ%Ô% Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%ØÐ�5˜A’:ÐÐÐÕÔÐÐÐÐ�5˜AÐÑÔÐÕÔÑÔÐÐÕÔ�5ÑÔÐÕÔ�5ÑÔÐÐÕÔ˜AÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÑð &×:Ò:¸7Ô;MÈvÑVÔVÑˆˆyØ Ð ˆy˜DÐ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆy˜DÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆyÑ Ô Ð Õ Ô ˆyÑ Ô Ð Ð Õ Ô ˜DÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð ØÐˆu˜Š~ÐÐÐÕÔÐÐÐÐˆu˜ÐÑÔÐÕÔÑÔÐÐÕÔˆuÑÔÐÕÔˆuÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð ×4Ò4°WÔ5GÑHÔHˆÝ�4‰yŒyÐ˜AÐˆy˜AŠ~ÐÐÐÕÔÐÐÐÐˆy˜AÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�4ÑÔÐÕÔ�4ÑÔÐÐÕÔˆyÑÔÕÔ˜AÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ�AŒw�|Ô$ÐGÕ(9Ô(AÐGÐ(AÔ(GÐGÐ$Ð(GÒGÐGÐGÐGÕGÔGÐGÐGÐGÐGÐ$Ð(GÐGÑGÔGÕGÔGÐ$ÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔGÕ(9ÑGÔGÐGÕGÔGÕ(9ÑGÔGÐGÐGÕGÔGÐ(AÑGÔGÕGÔGÐ(GÑGÔGÐGÐGÑGÐGÐGÐGÐGÐGÑGÐGÕGÕGÔGÐGÑGÔGÑGÔGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGrc   )ru   rv   rw   r   r¡   r¸   rx   rc   ra   rz   rz   \   sb   € € € € € ð8.ÈDð 8.ÐUYð 8.ð 8.ð 8.ð 8.ðt!HÀ4ð !HÈDð !Hð !Hð !Hð !Hð !Hð !Hrc   rz   c                   ó   — e Zd Zdeddfd„ZdS )Ú)TestCharacterCreationAndSeasonPersistencer   r   Nc                 ó  — t          |dz  ¦  «        }t          |¬¦  «        }t          |¬¦  «        }|                     dddt          j        ¬¦  «        }|                     |j        ¦  «        }t          |¦  «        }d}||k    }	|	sòt          j
        d	|	fd
||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}	}|                     |j        dt$          j        d¬¦  «        }|j        }d}	||	u }|sªt          j
        d|fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	|j        }d }	||	u}|sªt          j
        d|fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	|j        }|j        }d}	||	k    }|sªt          j
        d	|fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	|j        }d}	||	k    }|sªt          j
        d	|fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	|j        }d }	||	k    }|sªt          j
        d	|fd!||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	|j        }d }	||	k    }|sªt          j
        d	|fd"||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	|j        }d#}	||	k    }|sªt          j
        d	|fd$||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	|j        }d#}	||	k    }|sªt          j
        d	|fd%||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	|j        }d}	||	k    }|sªt          j
        d	|fd&||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	|j        }d'}	||	k    }|sªt          j
        d	|fd(||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	|                     |j        dt$          j        d¬¦  «        }|j        }d)}	||	u }|sªt          j
        d|fd||	f¦  «        d*t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd*t          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	d+}|j        }	|	j         } |¦   «         }||v }|sÐt          j
        d,|fd-||f¦  «        t          j        |¦  «        d*t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd*t          j        |	¦  «        t          j        |¦  «        t          j        |¦  «        d.œz  }d/d0|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}	x}}|                     |j        ¦  «        }t          |¦  «        }d}||k    }	|	sòt          j
        d	|	fd
||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndd1t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd1t          j        |¦  «        t          j        |¦  «        dœz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}	}|d         }|j!        }d}||k    }	|	st          j
        d	|	fd2||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d3œz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}	}|d         }|j        }d}||k    }	|	st          j
        d	|	fd4||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d3œz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}	}d S )5Nztest_char.dbr   r|   znew_player@freeexile.ioÚpassÚ
NoviceHeror"   r   r.   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr­   Úchars_initialr¯   r=   r-   u   VÃ´ Danh Kiáº¿mÚseason_01_minh_nguyet©rE   ÚnameÚ
class_typeÚ	season_idTri   rŠ   Ú
create_resr0   r2   r3   r4   )z5%(py2)s
{%(py2)s = %(py0)s.character
} is not %(py5)sr¨   )z-%(py2)s
{%(py2)s = %(py0)s.level
} == %(py5)sÚchar)z2%(py2)s
{%(py2)s = %(py0)s.experience
} == %(py5)séd   )z2%(py2)s
{%(py2)s = %(py0)s.current_hp
} == %(py5)s)z.%(py2)s
{%(py2)s = %(py0)s.max_hp
} == %(py5)sé2   )z4%(py2)s
{%(py2)s = %(py0)s.current_mana
} == %(py5)s)z0%(py2)s
{%(py2)s = %(py0)s.max_mana
} == %(py5)s)z1%(py2)s
{%(py2)s = %(py0)s.season_id
} == %(py5)sÚzone_boundless_sanctuary)z7%(py2)s
{%(py2)s = %(py0)s.current_zone_id
} == %(py5)sFÚdup_reszalready takenr‘   r“   r”   rl   rm   Úchars)z,%(py3)s
{%(py3)s = %(py1)s.name
} == %(py6)s)r•   r9   r,   )z-%(py3)s
{%(py3)s = %(py1)s.level
} == %(py6)s)"rA   r   r   rC   r   rD   Úlist_charactersrE   r­   rI   rN   rG   rH   rJ   rK   rL   rM   Úcreate_characterr   ÚSWORD_MASTERr˜   Ú	characterÚlevelÚ
experienceÚ
current_hpÚmax_hpÚcurrent_manaÚmax_manarÃ   Úcurrent_zone_idÚFERAL_BERSERKERrš   r›   rÁ   )rR   r   r    rS   Úchar_servicer(   r¾   r^   rX   r[   r`   rZ   rÄ   rV   rW   r\   r]   rÅ   rÉ   rŸ   r    rq   rr   rs   rÊ   s                            ra   Ú*test_create_level_1_character_from_scratchzTTestCharacterCreationAndSeasonPersistence.test_create_level_1_character_from_scratch¼   so  € Ý�h Ñ/Ñ0Ô0ˆÝ(°Ð9Ñ9Ô9ˆÝ'°4Ð8Ñ8Ô8ˆà×%Ò%Ø+Ø Ø!Ý Ô'ð	 &ñ 
ô 
ˆð %×4Ò4°WÔ5GÑHÔHˆÝ�=Ñ!Ô!Ð& QÐ&Ð! QÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð! QÐ&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�sÑ&Ô&Ð&Õ&Ô&�sÑ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�=Ñ&Ô&Ð&Õ&Ô&�=Ñ&Ô&Ð&Ð&Õ&Ô&Ð!Ñ&Ô&Õ&Ô& QÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð "×2Ò2ØÔ)Ø"Ý%Ô2Ø-ð	 3ñ 
ô 
ˆ
ð Ô!Ð) TÐ)Ð! TÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð! TÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆzÑ)Ô)Ð)Õ)Ô)ˆzÑ)Ô)Ð)Ð)Õ)Ô)Ð!Ñ)Ô)Õ)Ô) TÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔ#Ð/¨4Ð/Ð#¨4Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð#¨4Ð/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ˆzÑ/Ô/Ð/Õ/Ô/ˆzÑ/Ô/Ð/Ð/Õ/Ô/Ð#Ñ/Ô/Õ/Ô/¨4Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/àÔ#ˆØŒzÐ˜QÐˆz˜QŠÐÐÐÕÔÐÐÐÐˆz˜QÐÑÔÐÕÔÑÔÐÐÕÔˆtÑÔÐÕÔˆtÑÔÐÐÕÔˆzÑÔÕÔ˜QÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØŒÐ# !Ð#ˆ !Ò#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ !Ð#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆtÑ#Ô#Ð#Õ#Ô#ˆtÑ#Ô#Ð#Ð#Õ#Ô#ˆÑ#Ô#Õ#Ô# !Ñ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ØŒÐ% #Ð%ˆ #Ò%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%ˆ #Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆtÑ%Ô%Ð%Õ%Ô%ˆtÑ%Ô%Ð%Ð%Õ%Ô%ˆÑ%Ô%Õ%Ô% #Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ØŒ{Ð!˜cÐ!ˆ{˜cÒ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ{˜cÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆtÑ!Ô!Ð!Õ!Ô!ˆtÑ!Ô!Ð!Ð!Õ!Ô!ˆ{Ñ!Ô!Õ!Ô!˜cÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ØÔ Ð& BÐ&Ð  BÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð  BÐ&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆtÑ&Ô&Ð&Õ&Ô&ˆtÑ&Ô&Ð&Ð&Õ&Ô&Ð Ñ&Ô&Õ&Ô& BÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØŒ}Ð" Ð"ˆ} Ò"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ} Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆtÑ"Ô"Ð"Õ"Ô"ˆtÑ"Ô"Ð"Ð"Õ"Ô"ˆ}Ñ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ØŒ~Ð8Ð!8Ð8ˆ~Ð!8Ò8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8ˆ~Ð!8Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆtÑ8Ô8Ð8Õ8Ô8ˆtÑ8Ô8Ð8Ð8Õ8Ô8ˆ~Ñ8Ô8Õ8Ô8Ð!8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8àÔ#ÐAÐ'AÐAÐ#Ð'AÒAÐAÐAÐAÕAÔAÐAÐAÐAÐAÐ#Ð'AÐAÑAÔAÐAÕAÔAÑAÔAÐAÐAÕAÔAˆtÑAÔAÐAÕAÔAˆtÑAÔAÐAÐAÕAÔAÐ#ÑAÔAÕAÔAÐ'AÑAÔAÐAÐAÑAÐAÐAÐAÐAÐAÑAÐAÕAÕAÔAÐAÑAÔAÑAÔAÐAÐAÐAÐAÐAÐAÐAð ×/Ò/ØÔ)Ø"Ý%Ô5Ø-ð	 0ñ 
ô 
ˆð ŒÐ' %Ð'ˆ %Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'ˆ %Ð'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'ˆwÑ'Ô'Ð'Õ'Ô'ˆwÑ'Ô'Ð'Ð'Õ'Ô'ˆÑ'Ô'Õ'Ô' %Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØÐ9 '¤/Ð9 /Ô"7Ð9Ð"7Ð"7Ñ"9Ô"9Ð9ˆÐ"9Ð9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9ˆÐ"9Ð9Ñ9Ô9Õ9Ô9ˆÑ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9 'Ñ9Ô9Ð9Õ9Ô9 'Ñ9Ô9Ð9Ð9Õ9Ô9 /Ñ9Ô9Õ9Ô9Ð"7Ñ9Ô9Õ9Ô9Ð"9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ð ×,Ò,¨WÔ-?Ñ@Ô@ˆÝ�5‰zŒzÐ˜QÐˆz˜QŠÐÐÐÕÔÐÐÐÐˆz˜QÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�5ÑÔÐÕÔ�5ÑÔÐÐÕÔˆzÑÔÕÔ˜QÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ�QŒxÐ1ˆxŒ}Ð1Ð 1Ð1ˆ}Ð 1Ò1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1ˆ}Ð 1Ð1Ñ1Ô1Õ1Ô1ˆxÑ1Ô1Õ1Ô1ˆ}Ñ1Ô1Õ1Ô1Ð 1Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø�QŒxÐ"ˆxŒ~Ð" Ð"ˆ~ Ò"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ~ Ð"Ñ"Ô"Õ"Ô"ˆxÑ"Ô"Õ"Ô"ˆ~Ñ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"rc   )ru   rv   rw   r   rØ   rx   rc   ra   rº   rº   »   s6   € € € € € ð3#À4ð 3#ÈDð 3#ð 3#ð 3#ð 3#ð 3#ð 3#rc   rº   c                   ó   — e Zd Zdeddfd„ZdS )Ú3TestFullIntegratedAuthWithPersistentDBAndRememberMer   r   Nc           
      óÖ  — t          |dz  ¦  «        }t          |¬¦  «        }t          ¦   «         }t          d¬¦  «        }t	          d¬¦  «        }t          ¦   «         }t          |dd¬	¦  «        }t          ||¬
¦  «        }	t          |¬¦  «        }
t          |¬¦  «        }t          ||||||	|
|¬¦  «        }|                     d¬¦  «        }|j                             ¦   «         }t          |d         ¦  «        |d         t          |d         ¦  «        }}}|dk    r||z   n|dk    r||z
  n||z  }|                     ddd|j        t          |¦  «        d¬¦  «        }|j        }d}||u }|sªt%          j        d|fd||f¦  «        dt)          j        ¦   «         v st%          j        |¦  «        rt%          j        |¦  «        ndt%          j        |¦  «        t%          j        |¦  «        dœz  }dd|iz  }t1          t%          j        |¦  «        ¦  «        ‚d x}x}}|j                             d¦  «        }d }||u}|s—t%          j        d|fd ||f¦  «        d!t)          j        ¦   «         v st%          j        |¦  «        rt%          j        |¦  «        nd!t%          j        |¦  «        d"œz  }d#d$|iz  }t1          t%          j        |¦  «        ¦  «        ‚d x}}|                     d|j        ¬%¦  «        }|j        }d}||u }|sªt%          j        d|fd||f¦  «        d&t)          j        ¦   «         v st%          j        |¦  «        rt%          j        |¦  «        nd&t%          j        |¦  «        t%          j        |¦  «        dœz  }dd|iz  }t1          t%          j        |¦  «        ¦  «        ‚d x}x}}t=          d'd(d)d¬*¦  «        }|                     dddd|¬+¦  «        }|j        }d}||u }|sªt%          j        d|fd||f¦  «        d,t)          j        ¦   «         v st%          j        |¦  «        rt%          j        |¦  «        nd,t%          j        |¦  «        t%          j        |¦  «        dœz  }dd|iz  }t1          t%          j        |¦  «        ¦  «        ‚d x}x}}|j         }d }||u}|sªt%          j        d|fd-||f¦  «        d,t)          j        ¦   «         v st%          j        |¦  «        rt%          j        |¦  «        nd,t%          j        |¦  «        t%          j        |¦  «        dœz  }dd|iz  }t1          t%          j        |¦  «        ¦  «        ‚d x}x}}| !                    |j         |¬.¦  «        }|j        }d}||u }|sªt%          j        d|fd||f¦  «        d/t)          j        ¦   «         v st%          j        |¦  «        rt%          j        |¦  «        nd/t%          j        |¦  «        t%          j        |¦  «        dœz  }dd|iz  }t1          t%          j        |¦  «        ¦  «        ‚d x}x}}|j"        }|j"        } || k    }|sèt%          j        d0|fd1|| f¦  «        d/t)          j        ¦   «         v st%          j        |¦  «        rt%          j        |¦  «        nd/t%          j        |¦  «        d,t)          j        ¦   «         v st%          j        |¦  «        rt%          j        |¦  «        nd,t%          j        | ¦  «        d2œz  }!d3d4|!iz  }"t1          t%          j        |"¦  «        ¦  «        ‚d x}x}} |j#         $                    |j"        d5tJ          j&        d6¬7¦  «        }#|#j        }d}||u }|sªt%          j        d|fd||f¦  «        d8t)          j        ¦   «         v st%          j        |#¦  «        rt%          j        |#¦  «        nd8t%          j        |¦  «        t%          j        |¦  «        dœz  }dd|iz  }t1          t%          j        |¦  «        ¦  «        ‚d x}x}}|#j'        }|j(        }d}$||$k    } | s½t%          j        d0| fd9||$f¦  «        d8t)          j        ¦   «         v st%          j        |#¦  «        rt%          j        |#¦  «        nd8t%          j        |¦  «        t%          j        |¦  «        t%          j        |$¦  «        d:œz  }d;d<|iz  }%t1          t%          j        |%¦  «        ¦  «        ‚d x}x}x} }$|#j'        }|j)        }d6}$||$k    } | s½t%          j        d0| fd=||$f¦  «        d8t)          j        ¦   «         v st%          j        |#¦  «        rt%          j        |#¦  «        nd8t%          j        |¦  «        t%          j        |¦  «        t%          j        |$¦  «        d:œz  }d;d<|iz  }%t1          t%          j        |%¦  «        ¦  «        ‚d x}x}x} }$d S )>Nzintegrated_auth.dbr   Ú3secret_test_key_freeexile_2026_super_secure_32bytes)Ú
secret_keyÚcaptcha_test_secret_123)Úhmac_secreti,  é<   )Úemail_senderÚcode_ttl_secondsÚcooldown_seconds)r}   Útoken_servicer|   )r}   rT   rä   Úcaptcha_engineÚemail_serviceÚoauth_serviceÚsecurity_engineÚcharacter_servicez	127.0.0.1)r†   r   r¨   é   ú+ú-zpersisted_warrior@freeexile.iozSecurePass#Exile2026ÚPersistedBlade)r#   Úpasswordr%   Ú
captcha_idÚcaptcha_solutionr†   Tri   rŠ   Úreg_resr0   r2   r3   r4   r6   Ú
otp_recordr8   r:   r1   )r#   Úverification_codeÚact_resÚiphone_client_01ziPhone 16 iOS NativeÚhw_apple_a18_secure_enclaver‚   )r#   rî   r†   Úremember_meÚdevice_fingerprintÚ	login_res)z:%(py2)s
{%(py2)s = %(py0)s.remember_token
} is not %(py5)s)Úremember_tokenrø   Úfast_login_resr.   r;   r<   r=   r-   u   Cá»• Kiáº¿m Ä�oáº¡n Há»“nr¿   rÀ   Úchar_res)zL%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.character
}.level
} == %(py7)s)r)   r*   r+   r3   r±   rk   )zP%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.character
}.season_id
} == %(py7)s)*rA   r   r
   r   r   r   r   r   r   r   r   Úrequest_captchaÚquestionÚsplitÚintÚquick_registerÚchallenge_idr˜   rI   rN   rG   rH   rJ   rK   rL   rM   ræ   Úget_active_recordÚverify_emailÚcoder   Úloginrú   Úlogin_with_remember_tokenrE   ré   rÌ   r   rÍ   rÎ   rÏ   rÃ   )&rR   r   r    rS   rT   rä   rå   rá   ræ   rç   r�   r×   Úauth_systemÚcaptchaÚpartsÚaÚopÚbÚansrñ   rV   r[   rW   r\   r]   rò   r^   r_   rô   rˆ   rù   rû   rX   r`   rZ   rü   r    rr   s&                                         ra   Ú2test_register_login_remember_me_and_character_flowzfTestFullIntegratedAuthWithPersistentDBAndRememberMe.test_register_login_remember_me_and_character_flowó   s›  € Ý�hÐ!5Ñ5Ñ6Ô6ˆÝ(°Ð9Ñ9Ô9ˆÝÑ!Ô!ˆÝ$Ð0eÐfÑfÔfˆÝ&Ð3LÐMÑMÔMˆÝ&Ñ(Ô(ˆÝ0Ø%Ø Øð
ñ 
ô 
ˆõ
 %°ÀMÐRÑRÔRˆÝ,¸Ð=Ñ=Ô=ˆ
Ý'°4Ð8Ñ8Ô8ˆå!ØØØ'Ø)Ø'Ø'Ø&Ø*ð	
ñ 	
ô 	
ˆð ×-Ò-¸Ð-ÑDÔDˆØÔ ×&Ò&Ñ(Ô(ˆÝ�u˜Q”x‘=”= %¨¤(­C°°a´©M¬Mˆqˆ2ˆØ˜S’y�yˆa�!‰eˆe°°c²	°	 q¨1¡u u¸qÀ1¹uˆà×,Ò,Ø2Ø+Ø%ØÔ+Ý  ™XœXØ!ð -ñ 
ô 
ˆð ŒÐ& $Ð&ˆ $Ð&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ $Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆwÑ&Ô&Ð&Õ&Ô&ˆwÑ&Ô&Ð&Ð&Õ&Ô&ˆÑ&Ô&Õ&Ô& $Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð !Ô.×@Ò@ÐAaÑbÔbˆ
Ø!%Ð%ˆz Ð%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%ˆz Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆzÑ%Ô%Ð%Õ%Ô%ˆzÑ%Ô%Ð%Ð%Õ%Ô% Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%à×*Ò*Ø2Ø(œoð +ñ 
ô 
ˆð ŒÐ& $Ð&ˆ $Ð&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ $Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆwÑ&Ô&Ð&Õ&Ô&ˆwÑ&Ô&Ð&Ð&Õ&Ô&ˆÑ&Ô&Õ&Ô& $Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&õ #Ø(Ø.Ø7Ø!ð	
ñ 
ô 
ˆð  ×%Ò%Ø2Ø+Ø!ØØ%ð &ñ 
ô 
ˆ	ð Ô Ð( DÐ(Ð  DÐ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð  DÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆyÑ(Ô(Ð(Õ(Ô(ˆyÑ(Ô(Ð(Ð(Õ(Ô(Ð Ñ(Ô(Õ(Ô( DÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÔ'Ð3¨tÐ3Ð'¨tÐ3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð'¨tÐ3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆyÑ3Ô3Ð3Õ3Ô3ˆyÑ3Ô3Ð3Ð3Õ3Ô3Ð'Ñ3Ô3Õ3Ô3¨tÑ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ð %×>Ò>Ø$Ô3Ø%ð ?ñ 
ô 
ˆð Ô%Ð-¨Ð-Ð%¨Ð-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð%¨Ð-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆ~Ñ-Ô-Ð-Õ-Ô-ˆ~Ñ-Ô-Ð-Ð-Õ-Ô-Ð%Ñ-Ô-Õ-Ô-¨Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÔ(Ð@¨IÔ,@Ð@Ð(Ð,@Ò@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@Ð(Ð,@Ð@Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@ˆ~Ñ@Ô@Ð@Õ@Ô@ˆ~Ñ@Ô@Ð@Ð@Õ@Ô@Ð(Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@¨IÑ@Ô@Ð@Õ@Ô@¨IÑ@Ô@Ð@Ð@Õ@Ô@Ð,@Ñ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@ð Ô0×AÒAØ Ô+Ø,Ý%Ô2Ø-ð	 Bñ 
ô 
ˆð ÔÐ' 4Ð'Ð 4Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð 4Ð'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'ˆxÑ'Ô'Ð'Õ'Ô'ˆxÑ'Ô'Ð'Ð'Õ'Ô'ÐÑ'Ô'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØÔ!Ð,Ð!Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆxÑ,Ô,Ð,Õ,Ô,ˆxÑ,Ô,Ð,Ð,Õ,Ô,Ð!Ñ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÔ!ÐFÐ!Ô+ÐFÐ/FÐFÐ+Ð/FÒFÐFÐFÐFÕFÔFÐFÐFÐFÐFÐ+Ð/FÐFÑFÔFÐFÕFÔFÑFÔFÐFÐFÕFÔFˆxÑFÔFÐFÕFÔFˆxÑFÔFÐFÐFÕFÔFÐ!ÑFÔFÕFÔFÐ+ÑFÔFÕFÔFÐ/FÑFÔFÐFÐFÑFÐFÐFÐFÐFÐFÑFÐFÕFÕFÔFÐFÑFÔFÑFÔFÐFÐFÐFÐFÐFÐFÐFÐFÐFÐFÐFrc   )ru   rv   rw   r   r  rx   rc   ra   rÚ   rÚ   ò   sG   € € € € € ðXGÈ4ð XGÐTXð XGð XGð XGð XGð XGð XGrc   rÚ   )0Ú__doc__ÚbuiltinsrG   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterI   ÚosÚtimeÚpytestÚpathlibr   Útypingr   r   Úserver.auth.modelsr   r   r   r	   Úserver.auth.cryptor
   r   Úserver.auth.captchar   Úserver.auth.email_verificationr   r   Úserver.auth.oauthr   Úserver.auth.databaser   Úserver.auth.bank_securityr   r   r   r   Úserver.auth.character_servicer   r   r   r   Úserver.auth.auth_servicer   r   rz   rº   rÚ   rx   rc   ra   ú<module>r#     sy  ððð ð € € € € € € € € € € € € €	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø -Ð -Ð -Ð -Ð -Ð -Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ *Ð *Ð *Ð *Ð *Ð *Ø :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0ð2Kð 2Kð 2Kð 2Kð 2Kñ 2Kô 2Kð 2Kðj\Hð \Hð \Hð \Hð \Hñ \Hô \Hð \Hð~4#ð 4#ð 4#ð 4#ð 4#ñ 4#ô 4#ð 4#ðnYGð YGð YGð YGð YGñ YGô YGð YGð YGð YGrc   