package com.l7tech.server.transport.ftp;

import com.l7tech.common.ftp.FtpCommand;
import java.util.HashMap;
import org.apache.ftpserver.command.Command;
import org.apache.ftpserver.command.CommandFactory;
import org.apache.ftpserver.command.NotSupportedCommand;
import org.apache.ftpserver.command.impl.ABOR;
import org.apache.ftpserver.command.impl.ACCT;
import org.apache.ftpserver.command.impl.APPE;
import org.apache.ftpserver.command.impl.AUTH;
import org.apache.ftpserver.command.impl.CDUP;
import org.apache.ftpserver.command.impl.CWD;
import org.apache.ftpserver.command.impl.DELE;
import org.apache.ftpserver.command.impl.EPRT;
import org.apache.ftpserver.command.impl.EPSV;
import org.apache.ftpserver.command.impl.HELP;
import org.apache.ftpserver.command.impl.LIST;
import org.apache.ftpserver.command.impl.MDTM;
import org.apache.ftpserver.command.impl.MKD;
import org.apache.ftpserver.command.impl.MLSD;
import org.apache.ftpserver.command.impl.MLST;
import org.apache.ftpserver.command.impl.MODE;
import org.apache.ftpserver.command.impl.NLST;
import org.apache.ftpserver.command.impl.NOOP;
import org.apache.ftpserver.command.impl.OPTS;
import org.apache.ftpserver.command.impl.PASS;
import org.apache.ftpserver.command.impl.PASV;
import org.apache.ftpserver.command.impl.PBSZ;
import org.apache.ftpserver.command.impl.PORT;
import org.apache.ftpserver.command.impl.PROT;
import org.apache.ftpserver.command.impl.PWD;
import org.apache.ftpserver.command.impl.QUIT;
import org.apache.ftpserver.command.impl.REIN;
import org.apache.ftpserver.command.impl.REST;
import org.apache.ftpserver.command.impl.RETR;
import org.apache.ftpserver.command.impl.RMD;
import org.apache.ftpserver.command.impl.RNFR;
import org.apache.ftpserver.command.impl.RNTO;
import org.apache.ftpserver.command.impl.SIZE;
import org.apache.ftpserver.command.impl.STAT;
import org.apache.ftpserver.command.impl.STRU;
import org.apache.ftpserver.command.impl.SYST;
import org.apache.ftpserver.command.impl.TYPE;
import org.apache.ftpserver.command.impl.USER;

class h implements CommandFactory {
   private static final String[] a;
   private final HashMap<String, Command> b = new HashMap<>();
   private static final String[] c;

   public h() {
      String[] var1 = c;
      this.b.put(var1[30], new ABOR());
      this.b.put(var1[50], new ACCT());
      this.b.put(var1[16], new APPE());
      this.b.put(var1[6], new AUTH());
      this.b.put(var1[40], new CDUP());
      this.b.put(var1[45], new CWD());
      this.b.put(var1[25], new DELE());
      this.b.put(var1[11], new EPRT());
      this.b.put(var1[20], new EPSV());
      this.b.put(var1[8], new FtpCommands.FEAT(a));
      this.b.put(var1[32], new HELP());
      this.b.put(var1[35], new FtpCommands.LANG());
      this.b.put(var1[12], new LIST());
      this.b.put(var1[29], new MDTM());
      this.b.put(var1[4], new MKD());
      this.b.put(var1[2], new MLSD());
      this.b.put(var1[17], new MLST());
      this.b.put(var1[24], new MODE());
      this.b.put(var1[46], new NLST());
      this.b.put(var1[39], new NOOP());
      this.b.put(var1[0], new OPTS());
      this.b.put(var1[37], new PASS());
      this.b.put(var1[7], new PASV());
      this.b.put(var1[22], new PBSZ());
      this.b.put(var1[41], new PORT());
      this.b.put(var1[43], new PROT());
      this.b.put(var1[21], new PWD());
      this.b.put(var1[13], new QUIT());
      this.b.put(var1[14], new REIN());
      this.b.put(var1[47], new REST());
      this.b.put(var1[44], new RETR());
      this.b.put(var1[23], new RMD());
      this.b.put(var1[36], new RNFR());
      this.b.put(var1[18], new RNTO());
      this.b.put(var1[48], new NotSupportedCommand());
      this.b.put(var1[28], new SIZE());
      this.b.put(var1[38], new STAT());
      this.b.put(var1[34], new m(FtpCommand.STOR));
      this.b.put(var1[53], new m(FtpCommand.STOU));
      this.b.put(var1[33], new STRU());
      this.b.put(var1[5], new SYST());
      this.b.put(var1[51], new TYPE());
      this.b.put(var1[10], new USER());
   }

   public Command getCommand(String var1) {
      return var1 != null && !var1.equals("") ? this.b.get(var1.toUpperCase()) : null;
   }

   static {
      String[] var5 = new String[54];
      int var3 = 0;
      String var2 = "\r\u0011s>\u0004\u0011\b}(\u0004\u000f\rt)\u0004\u0017\u0015aU\u0003\u000f\nc\u0004\u0011\u0018t9\u0004\u0003\u0014s%\u0004\u0012\u0000t;\u0004\u0004\u0004f9\u0004\u0007\u0011t;\u0004\u0017\u0012b?\u0004\u0007\u0011u9\u0004\u000e\bt9\u0004\u0013\u0014n9\u0004\u0010\u0004n#\u001a\u000f\rt9)\u0012C8$\u001c f%C$8\u001c9p1Oy\u0011B\u001fd\u0004\u0003\u0011w(\u0004\u000f\rt9\u0004\u0010\u000fs\"\u0004\u0007\u0011u9\u0004\u0007\u0011t;\u0003\u0012\u0016c\u0004\u0012\u0003t7\u0003\u0010\fc\u0004\u000f\u000ec(\u0004\u0006\u0004k(\u0004\u0012\u0000t;\u0006\u000f\u000ec()\u001b\u0004\u0011\b}(\u0004\u000f\u0005s \u0004\u0003\u0003h?\u0004\u000f\u0005s \u0004\n\u0004k=\u0004\u0011\u0015u8\u0004\u0011\u0015h?\u0004\u000e\u0000i*\u0004\u0010\u000fa?\u0004\u0012\u0000t>\u0004\u0011\u0015f9\u0004\f\u000eh=\u0004\u0001\u0005r=\u0004\u0012\u000eu9\u0004\u0016\u0017a>\u0004\u0012\u0013h9\u0004\u0010\u0004s?\u0003\u0001\u0016c\u0004\f\rt9\u0004\u0010\u0004t9\u0004\u0011\bs(\u0007\u000e\u0000i*)$D\u0004\u0003\u0002d9\u0004\u0016\u0018w(";
      int var4 = "\r\u0011s>\u0004\u0011\b}(\u0004\u000f\rt)\u0004\u0017\u0015aU\u0003\u000f\nc\u0004\u0011\u0018t9\u0004\u0003\u0014s%\u0004\u0012\u0000t;\u0004\u0004\u0004f9\u0004\u0007\u0011t;\u0004\u0017\u0012b?\u0004\u0007\u0011u9\u0004\u000e\bt9\u0004\u0013\u0014n9\u0004\u0010\u0004n#\u001a\u000f\rt9)\u0012C8$\u001c f%C$8\u001c9p1Oy\u0011B\u001fd\u0004\u0003\u0011w(\u0004\u000f\rt9\u0004\u0010\u000fs\"\u0004\u0007\u0011u9\u0004\u0007\u0011t;\u0003\u0012\u0016c\u0004\u0012\u0003t7\u0003\u0010\fc\u0004\u000f\u000ec(\u0004\u0006\u0004k(\u0004\u0012\u0000t;\u0006\u000f\u000ec()\u001b\u0004\u0011\b}(\u0004\u000f\u0005s \u0004\u0003\u0003h?\u0004\u000f\u0005s \u0004\n\u0004k=\u0004\u0011\u0015u8\u0004\u0011\u0015h?\u0004\u000e\u0000i*\u0004\u0010\u000fa?\u0004\u0012\u0000t>\u0004\u0011\u0015f9\u0004\f\u000eh=\u0004\u0001\u0005r=\u0004\u0012\u000eu9\u0004\u0016\u0017a>\u0004\u0012\u0013h9\u0004\u0010\u0004s?\u0003\u0001\u0016c\u0004\f\rt9\u0004\u0010\u0004t9\u0004\u0011\bs(\u0007\u000e\u0000i*)$D\u0004\u0003\u0002d9\u0004\u0016\u0018w("
         .length();
      char var1 = 4;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 44;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var9 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var9;
                  if ((var7 += var1) >= var4) {
                     c = var5;
                     String[] var10 = new String[11];
                     String[] var8 = c;
                     var10[0] = var8[1];
                     var10[1] = var8[31];
                     var10[2] = var8[52];
                     var10[3] = var8[49];
                     var10[4] = var8[15];
                     var10[5] = var8[27];
                     var10[6] = var8[3];
                     var10[7] = var8[19];
                     var10[8] = var8[9];
                     var10[9] = var8[26];
                     var10[10] = var8[42];
                     a = var10;
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var9;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "\u001d\ty4$\u001fs\u001d\tk-\u0004\u001c\u0018e5";
                  var4 = "\u001d\ty4$\u001fs\u001d\tk-\u0004\u001c\u0018e5".length();
                  var1 = 11;
                  var7 = -1;
            }

            var10000 = 33;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

   private static char[] a(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 6);
      }

      return var10000;
   }

   private static String a(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 110;
            case 1 -> 109;
            case 2 -> 11;
            case 3 -> 65;
            case 4 -> 37;
            case 5 -> 109;
            default -> 6;
         });
      }

      return new String(var10001).intern();
   }
}
