package com.l7tech.server;

import com.l7tech.gateway.common.cluster.ClusterProperty;
import com.l7tech.gateway.common.cluster.ClusterPropertyDescriptor;
import com.l7tech.server.cluster.ClusterPropertyCache;
import com.l7tech.server.cluster.ClusterPropertyListener;
import com.l7tech.util.CollectionUtils;
import com.l7tech.util.Config;
import com.l7tech.util.Functions;
import com.l7tech.util.Option;
import com.l7tech.util.SyspropUtil;
import com.l7tech.util.CollectionUtils.MapBuilder;
import com.l7tech.util.ConfigFactory.ConfigProviderSpi;
import com.l7tech.util.ConfigFactory.DefaultConfig;
import com.l7tech.util.ConfigFactory.DefaultConfig.ValidatorFactory;
import com.l7tech.util.ValidationUtils.Validator;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.logging.Logger;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedResource;

public class ServerConfig extends DefaultConfig implements ClusterPropertyListener {
   private final AtomicReference<Map<String, String>> a = new AtomicReference<>();
   private static final String b;
   private static final String c;
   private static final String d;
   private static final String e;
   private static final String f;
   private static final String g;
   private static final String h;
   private static final String i;
   private static final String j;
   private final AtomicReference<Map<String, String>> k = new AtomicReference<>(Collections.emptyMap());
   private final AtomicReference<Map<String, String>> l = new AtomicReference<>(Collections.emptyMap());
   private final ReadWriteLock m = new ReentrantReadWriteLock(false);
   private final Properties n;
   private final long o = System.currentTimeMillis();
   private final Logger p = Logger.getLogger(this.getClass().getName());
   private PropertyChangeListener q;
   private static AtomicReference<ClusterPropertyCache> r;
   private String s;
   private static final String[] u;

   @Deprecated
   public static ServerConfig getInstance() {
      return ay.a;
   }

   public void registerServerConfigProperties(@NotNull Iterable<ServerConfig.PropertyRegistrationInfo> var1) {
      try {
         if (var1 == null) {
            a(0);
         }
      } catch (IllegalStateException var15) {
         throw a(var15);
      }

      for (ServerConfig.PropertyRegistrationInfo var3 : var1) {
         this.m.writeLock().lock();

         try {
            this.c();
            if (var3.d != null) {
               String[] var5 = u;
               this.n.setProperty(var3.a + var5[49], var3.d);
            }

            try {
               if (var3.c != null) {
                  this.n.setProperty(var3.a + u[16], var3.c);
               }
            } catch (IllegalStateException var12) {
               throw a(var12);
            }

            try {
               if (var3.b != null) {
                  this.n.setProperty(var3.a + u[32], var3.b);
               }
            } catch (IllegalStateException var13) {
               throw a(var13);
            }

            try {
               if (var3.e != null) {
                  this.n.setProperty(var3.a + u[24], var3.e);
               }
            } catch (IllegalStateException var11) {
               throw a(var11);
            }
         } finally {
            this.m.writeLock().unlock();
         }
      }
   }

   @Deprecated
   public void registerServerConfigProperties(String[][] var1) {
      this.registerServerConfigProperties(Functions.map(Arrays.asList(var1), new ax(this)));
   }

   public void setPropertyChangeListener(PropertyChangeListener var1) {
      this.m.writeLock().lock();

      try {
         this.c();
         if (this.q != null) {
            throw new IllegalStateException(u[39]);
         }

         this.q = var1;
      } finally {
         this.m.writeLock().unlock();
      }
   }

   public void setClusterPropertyCache(ClusterPropertyCache var1) {
      r.compareAndSet(null, var1);
   }

   @Override
   public void clusterPropertyChanged(ClusterProperty var1, ClusterProperty var2) {
      this.a(var2, var1);
   }

   @Override
   public void clusterPropertyDeleted(ClusterProperty var1) {
      this.a(var1, var1);
   }

   public Map<String, String> getClusterPropertyNames() {
      String[] var1 = u;
      return this.a(var1[9], var1[2]);
   }

   public Map<String, String> getClusterPropertyDefaults() {
      String[] var1 = u;
      return this.a(var1[9], var1[8]);
   }

   public Map<String, String> getClusterPropertyVisibilities() {
      String[] var1 = u;
      return this.a(var1[9], var1[36]);
   }

   public Map<String, Validator<String>> getClusterPropertyValidators() {
      MapBuilder var1 = CollectionUtils.mapBuilder();
      ValidatorFactory var2 = this.a();
      String[] var7 = u;
      Map var3 = this.a(var7[9], var7[2]);

      for (String var5 : var3.keySet()) {
         String var6 = this.getNameFromClusterName(var5);
         var1.put(var5, (Validator)this.buildValidator(var6, var2, (var0, var1x) -> {
            try {
               if (var0 != null) {
                  var0.setHints(var1x);
               }
            } catch (IllegalStateException var2x) {
               throw a(var2x);
            }
         }));
      }

      return var1.unmodifiableMap();
   }

   private ValidatorFactory<Validator<String>, Validator<String>, Validator<String>, Validator<String>> a() {
      return new b(this);
   }

   public String getClusterPropertyName(String var1) {
      return this.f(var1 + u[9]);
   }

   public String getNameFromClusterName(String var1) {
      Map var2 = this.a.get();
      if (var2 == null) {
         synchronized (this.a) {
            var2 = this.a.get();
            if (var2 == null) {
               var2 = this.e(u[9]);
               this.a.set(var2);
            }
         }
      }

      return (String)var2.get(var1);
   }

   public String getPropertyDescription(String var1) {
      return this.f(var1 + u[2]);
   }

   public long getServerBootTime() {
      return this.o;
   }

   public String getHostname() {
      this.m.readLock().lock();

      String var1;
      try {
         var1 = this.s;
      } finally {
         this.m.readLock().unlock();
      }

      if (var1 == null) {
         String[] var5 = u;
         var1 = this.getProperty(var5[1], null);
         if (var1 == null) {
            try {
               var1 = InetAddress.getLocalHost().getCanonicalHostName().toLowerCase();
            } catch (UnknownHostException var16) {
               try {
                  var1 = InetAddress.getLocalHost().getHostName().toLowerCase();
               } catch (UnknownHostException var15) {
                  var5 = u;
                  this.p.warning(var5[34]);
               }
            }
         }

         if (var1 == null) {
            var1 = u[7];
         }

         this.m.writeLock().lock();

         try {
            this.c();
            this.s = var1;
         } finally {
            this.m.writeLock().unlock();
         }
      }

      return var1;
   }

   public int getAttachmentDiskThreshold() {
      String[] var5 = u;
      String var1 = this.getProperty(var5[0], null);
      int var2 = 0;

      label26: {
         try {
            if (var1 == null || var1.length() <= 0) {
               break label26;
            }
         } catch (NumberFormatException var7) {
            throw a(var7);
         }

         try {
            var2 = Integer.parseInt(var1);
         } catch (NumberFormatException var6) {
         }
      }

      if (var2 < 1) {
         int var3 = 1048576;
         String var4 = u[4] + var3 + ")";
         this.p.severe(var4);
         return var3;
      } else {
         return var2;
      }
   }

   public File getAttachmentDirectory() {
      return this.getLocalDirectoryProperty(u[45], true);
   }

   public File getLocalDirectoryProperty(String var1, boolean var2) {
      File var3 = this.getLocalDirectoryProperty(var1, null, var2);

      try {
         if (var3 == null) {
            throw new IllegalStateException(u[51] + var1 + u[28]);
         } else {
            return var3;
         }
      } catch (IllegalStateException var4) {
         throw a(var4);
      }
   }

   public File getLocalDirectoryProperty(String var1, String var2, boolean var3) {
      String var4 = this.getProperty(var1, null);

      label60: {
         try {
            if (var4 == null || var4.length() < 1) {
               break label60;
            }
         } catch (IllegalStateException var10) {
            throw a(var10);
         }

         File var5 = new File(var4);

         try {
            if (!var5.exists()) {
               var5.mkdirs();
            }
         } catch (IllegalStateException var9) {
            throw a(var9);
         }

         if (!var5.exists()) {
            String[] var17 = u;
            String var14 = var17[5] + var1 + var17[40] + var4 + var17[10];
            this.p.severe(var14);
            throw new RuntimeException(var14);
         }

         if (!var5.isDirectory()) {
            String[] var16 = u;
            String var13 = var16[5] + var1 + var16[12] + var4 + var16[27];
            this.p.severe(var13);
            throw new RuntimeException(var13);
         }

         if (!var5.canRead()) {
            String[] var15 = u;
            String var12 = var15[5] + var1 + var15[29] + var4 + var15[38];
            this.p.severe(var12);
            throw new RuntimeException(var12);
         }

         try {
            if (!var3 || var5.canWrite()) {
               return var5;
            }
         } catch (IllegalStateException var8) {
            throw a(var8);
         }

         String[] var7 = u;
         String var6 = var7[5] + var1 + var7[29] + var4 + var7[13];
         this.p.severe(var6);
         throw new RuntimeException(var6);
      }

      String[] var18 = u;
      String var11 = var18[3] + var1 + var18[44] + var2 + ")";
      this.p.severe(var11);
      return new File(var2);
   }

   boolean a(String var1) {
      this.m.readLock().lock();

      try {
         String[] var4 = u;
         return var4[22].equals(this.n.getProperty(var1 + var4[19]));
      } finally {
         this.m.readLock().unlock();
      }
   }

   public boolean putProperty(String param1, String param2) {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 0
      // 01: aload 1
      // 02: invokevirtual com/l7tech/server/ServerConfig.a (Ljava/lang/String;)Z
      // 05: ifne 0e
      // 08: bipush 0
      // 09: ireturn
      // 0a: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0d: athrow
      // 0e: aload 0
      // 0f: getfield com/l7tech/server/ServerConfig.m Ljava/util/concurrent/locks/ReadWriteLock;
      // 12: invokeinterface java/util/concurrent/locks/ReadWriteLock.writeLock ()Ljava/util/concurrent/locks/Lock; 1
      // 17: invokeinterface java/util/concurrent/locks/Lock.lock ()V 1
      // 1c: aload 0
      // 1d: invokevirtual com/l7tech/server/ServerConfig.c ()V
      // 20: aload 0
      // 21: getfield com/l7tech/server/ServerConfig.n Ljava/util/Properties;
      // 24: aload 1
      // 25: aload 2
      // 26: invokevirtual java/util/Properties.setProperty (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
      // 29: checkcast java/lang/String
      // 2c: astore 3
      // 2d: aload 0
      // 2e: getfield com/l7tech/server/ServerConfig.m Ljava/util/concurrent/locks/ReadWriteLock;
      // 31: invokeinterface java/util/concurrent/locks/ReadWriteLock.writeLock ()Ljava/util/concurrent/locks/Lock; 1
      // 36: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 3b: goto 51
      // 3e: astore 4
      // 40: aload 0
      // 41: getfield com/l7tech/server/ServerConfig.m Ljava/util/concurrent/locks/ReadWriteLock;
      // 44: invokeinterface java/util/concurrent/locks/ReadWriteLock.writeLock ()Ljava/util/concurrent/locks/Lock; 1
      // 49: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 4e: aload 4
      // 50: athrow
      // 51: aload 0
      // 52: aload 1
      // 53: invokevirtual com/l7tech/server/ServerConfig.d (Ljava/lang/String;)V
      // 56: aload 0
      // 57: getfield com/l7tech/server/ServerConfig.m Ljava/util/concurrent/locks/ReadWriteLock;
      // 5a: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 5f: invokeinterface java/util/concurrent/locks/Lock.lock ()V 1
      // 64: aload 0
      // 65: getfield com/l7tech/server/ServerConfig.q Ljava/beans/PropertyChangeListener;
      // 68: astore 4
      // 6a: aload 0
      // 6b: getfield com/l7tech/server/ServerConfig.m Ljava/util/concurrent/locks/ReadWriteLock;
      // 6e: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 73: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 78: goto 8e
      // 7b: astore 5
      // 7d: aload 0
      // 7e: getfield com/l7tech/server/ServerConfig.m Ljava/util/concurrent/locks/ReadWriteLock;
      // 81: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 86: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 8b: aload 5
      // 8d: athrow
      // 8e: aload 4
      // 90: ifnull e5
      // 93: aload 3
      // 94: ifnull b8
      // 97: goto 9e
      // 9a: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 9d: athrow
      // 9e: aload 2
      // 9f: ifnull b8
      // a2: goto a9
      // a5: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // a8: athrow
      // a9: aload 3
      // aa: aload 2
      // ab: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // ae: ifne e5
      // b1: goto b8
      // b4: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // b7: athrow
      // b8: new java/beans/PropertyChangeEvent
      // bb: dup
      // bc: aload 0
      // bd: aload 1
      // be: aload 3
      // bf: aload 2
      // c0: invokespecial java/beans/PropertyChangeEvent.<init> (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
      // c3: astore 5
      // c5: aload 4
      // c7: aload 5
      // c9: invokeinterface java/beans/PropertyChangeListener.propertyChange (Ljava/beans/PropertyChangeEvent;)V 2
      // ce: goto e5
      // d1: astore 6
      // d3: aload 0
      // d4: getfield com/l7tech/server/ServerConfig.p Ljava/util/logging/Logger;
      // d7: getstatic java/util/logging/Level.WARNING Ljava/util/logging/Level;
      // da: getstatic com/l7tech/server/ServerConfig.u [Ljava/lang/String;
      // dd: bipush 43
      // df: aaload
      // e0: aload 6
      // e2: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
      // e5: bipush 1
      // e6: ireturn
      // try (0 -> 6): 6 java/lang/Exception
      // try (12 -> 21): 26 null
      // try (26 -> 27): 26 null
      // try (40 -> 43): 48 null
      // try (48 -> 49): 48 null
      // try (62 -> 71): 72 java/lang/Exception
      // try (57 -> 64): 65 java/lang/Exception
      // try (55 -> 59): 60 java/lang/Exception
      // try (82 -> 85): 86 java/lang/Exception
   }

   public boolean removeProperty(String var1) {
      try {
         if (!this.a(var1)) {
            return false;
         }
      } catch (IllegalStateException var6) {
         throw a(var6);
      }

      this.m.writeLock().lock();

      try {
         this.c();
         this.n.remove(var1);
      } finally {
         this.m.writeLock().unlock();
      }

      this.d(var1);
      return true;
   }

   protected Option<String> getConfigPropertyDirect(String var1) {
      String var2;
      if (var1.startsWith(u[21])) {
         var2 = this.k.get().get(var1);

         try {
            if (var2 == null) {
               return Option.optional(SyspropUtil.getProperty(var1));
            }
         } catch (IllegalStateException var3) {
            throw a(var3);
         }
      } else {
         var2 = var1;
      }

      return Option.optional(this.a(var2, true));
   }

   protected ServerConfig(Properties var1, long var2) {
      super(var1, var2);
      this.n = new Properties();

      for (String var5 : var1.stringPropertyNames()) {
         this.n.setProperty(var5, var1.getProperty(var5));
      }

      MapBuilder var13 = CollectionUtils.mapBuilder();
      MapBuilder var14 = CollectionUtils.mapBuilder();

      for (String var7 : this.n.stringPropertyNames()) {
         String[] var11 = u;
         if (var7.endsWith(var11[17])) {
            String var8 = var1.getProperty(var7);
            String var9 = this.expand(var8);

            try {
               if (var9 == null || !var9.startsWith(var11[41])) {
                  continue;
               }
            } catch (IllegalStateException var12) {
               throw a(var12);
            }

            String var10 = var7.substring(0, var7.length() - u[14].length());
            var13.put(var9, var10);
            var14.put(var10, var9);
         }
      }

      this.k.set(var13.unmodifiableMap());
      this.l.set(var14.unmodifiableMap());
      this.b();
   }

   private String b(String var1) {
      return this.a(var1, true);
   }

   private String a(String param1, boolean param2) {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 000: aload 1
      // 001: getstatic com/l7tech/server/ServerConfig.u [Ljava/lang/String;
      // 004: astore 14
      // 006: aload 14
      // 008: bipush 14
      // 00a: aaload
      // 00b: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 010: astore 3
      // 011: aload 1
      // 012: aload 14
      // 014: bipush 6
      // 016: aaload
      // 017: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 01c: astore 4
      // 01e: aload 1
      // 01f: aload 14
      // 021: bipush 8
      // 023: aaload
      // 024: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 029: astore 5
      // 02b: aload 1
      // 02c: aload 14
      // 02e: bipush 9
      // 030: aaload
      // 031: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 036: astore 6
      // 038: aload 0
      // 039: aload 3
      // 03a: invokevirtual com/l7tech/server/ServerConfig.f (Ljava/lang/String;)Ljava/lang/String;
      // 03d: astore 7
      // 03f: aload 0
      // 040: aload 4
      // 042: invokevirtual com/l7tech/server/ServerConfig.f (Ljava/lang/String;)Ljava/lang/String;
      // 045: astore 8
      // 047: aload 0
      // 048: aload 5
      // 04a: invokevirtual com/l7tech/server/ServerConfig.f (Ljava/lang/String;)Ljava/lang/String;
      // 04d: astore 9
      // 04f: aload 0
      // 050: aload 6
      // 052: invokevirtual com/l7tech/server/ServerConfig.f (Ljava/lang/String;)Ljava/lang/String;
      // 055: astore 10
      // 057: aconst_null
      // 058: astore 11
      // 05a: aload 0
      // 05b: pop
      // 05c: getstatic com/l7tech/server/ServerConfig.r Ljava/util/concurrent/atomic/AtomicReference;
      // 05f: invokevirtual java/util/concurrent/atomic/AtomicReference.get ()Ljava/lang/Object;
      // 062: checkcast com/l7tech/server/cluster/ClusterPropertyCache
      // 065: astore 12
      // 067: aload 7
      // 069: ifnull 09b
      // 06c: aload 7
      // 06e: invokevirtual java/lang/String.length ()I
      // 071: ifle 09b
      // 074: goto 07b
      // 077: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 07a: athrow
      // 07b: aload 0
      // 07c: getfield com/l7tech/server/ServerConfig.p Ljava/util/logging/Logger;
      // 07f: aload 7
      // 081: getstatic com/l7tech/server/ServerConfig.u [Ljava/lang/String;
      // 084: astore 14
      // 086: aload 14
      // 088: bipush 47
      // 08a: aaload
      // 08b: swap
      // 08c: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 091: invokevirtual java/util/logging/Logger.finest (Ljava/lang/String;)V
      // 094: aload 7
      // 096: invokestatic com/l7tech/util/SyspropUtil.getProperty (Ljava/lang/String;)Ljava/lang/String;
      // 099: astore 11
      // 09b: aload 11
      // 09d: ifnonnull 18c
      // 0a0: iload 2
      // 0a1: ifeq 18c
      // 0a4: goto 0ab
      // 0a7: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0aa: athrow
      // 0ab: aload 10
      // 0ad: ifnull 18c
      // 0b0: goto 0b7
      // 0b3: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0b6: athrow
      // 0b7: aload 10
      // 0b9: invokevirtual java/lang/String.length ()I
      // 0bc: ifle 18c
      // 0bf: goto 0c6
      // 0c2: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0c5: athrow
      // 0c6: aload 12
      // 0c8: ifnonnull 0f3
      // 0cb: goto 0d2
      // 0ce: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0d1: athrow
      // 0d2: aload 0
      // 0d3: getfield com/l7tech/server/ServerConfig.p Ljava/util/logging/Logger;
      // 0d6: aload 1
      // 0d7: getstatic com/l7tech/server/ServerConfig.u [Ljava/lang/String;
      // 0da: bipush 48
      // 0dc: aaload
      // 0dd: swap
      // 0de: getstatic com/l7tech/server/ServerConfig.u [Ljava/lang/String;
      // 0e1: bipush 31
      // 0e3: aaload
      // 0e4: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001" ]
      // 0e9: invokevirtual java/util/logging/Logger.warning (Ljava/lang/String;)V
      // 0ec: goto 18c
      // 0ef: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0f2: athrow
      // 0f3: aload 0
      // 0f4: getfield com/l7tech/server/ServerConfig.p Ljava/util/logging/Logger;
      // 0f7: aload 10
      // 0f9: getstatic com/l7tech/server/ServerConfig.u [Ljava/lang/String;
      // 0fc: astore 14
      // 0fe: aload 14
      // 100: bipush 46
      // 102: aaload
      // 103: swap
      // 104: ldc "'"
      // 106: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001" ]
      // 10b: invokevirtual java/util/logging/Logger.finest (Ljava/lang/String;)V
      // 10e: aload 12
      // 110: aload 10
      // 112: invokevirtual com/l7tech/server/cluster/ClusterPropertyCache.getCachedEntityByName (Ljava/lang/String;)Lcom/l7tech/gateway/common/cluster/ClusterProperty;
      // 115: astore 13
      // 117: aload 13
      // 119: ifnonnull 139
      // 11c: aload 0
      // 11d: getfield com/l7tech/server/ServerConfig.p Ljava/util/logging/Logger;
      // 120: aload 10
      // 122: aload 14
      // 124: bipush 52
      // 126: aaload
      // 127: swap
      // 128: ldc "'"
      // 12a: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001" ]
      // 12f: invokevirtual java/util/logging/Logger.finest (Ljava/lang/String;)V
      // 132: goto 167
      // 135: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 138: athrow
      // 139: aload 0
      // 13a: getfield com/l7tech/server/ServerConfig.p Ljava/util/logging/Logger;
      // 13d: aload 10
      // 13f: aload 13
      // 141: invokevirtual com/l7tech/gateway/common/cluster/ClusterProperty.getValue ()Ljava/lang/String;
      // 144: getstatic com/l7tech/server/ServerConfig.u [Ljava/lang/String;
      // 147: astore 14
      // 149: aload 14
      // 14b: bipush 20
      // 14d: aaload
      // 14e: dup_x2
      // 14f: pop
      // 150: aload 14
      // 152: bipush 42
      // 154: aaload
      // 155: swap
      // 156: ldc "'"
      // 158: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001\u0001\u0001" ]
      // 15d: invokevirtual java/util/logging/Logger.finest (Ljava/lang/String;)V
      // 160: aload 13
      // 162: invokevirtual com/l7tech/gateway/common/cluster/ClusterProperty.getValue ()Ljava/lang/String;
      // 165: astore 11
      // 167: goto 18c
      // 16a: astore 13
      // 16c: aload 0
      // 16d: getfield com/l7tech/server/ServerConfig.p Ljava/util/logging/Logger;
      // 170: getstatic java/util/logging/Level.WARNING Ljava/util/logging/Level;
      // 173: aload 10
      // 175: getstatic com/l7tech/server/ServerConfig.u [Ljava/lang/String;
      // 178: astore 14
      // 17a: aload 14
      // 17c: bipush 11
      // 17e: aaload
      // 17f: swap
      // 180: ldc "'"
      // 182: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001" ]
      // 187: aload 13
      // 189: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
      // 18c: aload 11
      // 18e: ifnonnull 198
      // 191: aload 0
      // 192: aload 1
      // 193: invokevirtual com/l7tech/server/ServerConfig.f (Ljava/lang/String;)Ljava/lang/String;
      // 196: astore 11
      // 198: aload 11
      // 19a: ifnonnull 1ba
      // 19d: aload 0
      // 19e: getfield com/l7tech/server/ServerConfig.p Ljava/util/logging/Logger;
      // 1a1: aload 9
      // 1a3: getstatic com/l7tech/server/ServerConfig.u [Ljava/lang/String;
      // 1a6: astore 14
      // 1a8: aload 14
      // 1aa: bipush 23
      // 1ac: aaload
      // 1ad: swap
      // 1ae: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 1b3: invokevirtual java/util/logging/Logger.finest (Ljava/lang/String;)V
      // 1b6: aload 9
      // 1b8: astore 11
      // 1ba: aload 11
      // 1bc: ifnull 1d7
      // 1bf: aload 11
      // 1c1: invokevirtual java/lang/String.length ()I
      // 1c4: bipush 2
      // 1c5: if_icmplt 1d7
      // 1c8: goto 1cf
      // 1cb: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1ce: athrow
      // 1cf: aload 0
      // 1d0: aload 11
      // 1d2: invokevirtual com/l7tech/server/ServerConfig.c (Ljava/lang/String;)Ljava/lang/String;
      // 1d5: astore 11
      // 1d7: aload 11
      // 1d9: ifnull 21b
      // 1dc: getstatic com/l7tech/server/ServerConfig.u [Ljava/lang/String;
      // 1df: bipush 22
      // 1e1: aaload
      // 1e2: aload 8
      // 1e4: invokevirtual java/lang/String.equalsIgnoreCase (Ljava/lang/String;)Z
      // 1e7: ifeq 21b
      // 1ea: goto 1f1
      // 1ed: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1f0: athrow
      // 1f1: aload 7
      // 1f3: ifnull 21b
      // 1f6: goto 1fd
      // 1f9: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1fc: athrow
      // 1fd: aload 7
      // 1ff: invokevirtual java/lang/String.length ()I
      // 202: ifle 21b
      // 205: goto 20c
      // 208: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 20b: athrow
      // 20c: aload 7
      // 20e: aload 11
      // 210: invokestatic java/lang/System.setProperty (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
      // 213: pop
      // 214: goto 21b
      // 217: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 21a: athrow
      // 21b: aload 11
      // 21d: areturn
      // try (126 -> 139): 139 java/lang/Exception
      // try (90 -> 108): 108 java/lang/Exception
      // try (84 -> 92): 93 java/lang/Exception
      // try (79 -> 87): 88 java/lang/Exception
      // try (74 -> 81): 82 java/lang/Exception
      // try (72 -> 76): 77 java/lang/Exception
      // try (50 -> 55): 56 java/lang/Exception
      // try (122 -> 163): 164 java/lang/Exception
      // try (200 -> 206): 207 java/lang/Exception
      // try (213 -> 221): 222 java/lang/Exception
      // try (215 -> 226): 227 java/lang/Exception
      // try (224 -> 232): 233 java/lang/Exception
      // try (229 -> 239): 240 java/lang/Exception
   }

   private String c(String param1) {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 1
      // 01: invokevirtual java/lang/String.length ()I
      // 04: istore 2
      // 05: aload 1
      // 06: bipush 0
      // 07: invokevirtual java/lang/String.charAt (I)C
      // 0a: istore 3
      // 0b: aload 1
      // 0c: iload 2
      // 0d: bipush 1
      // 0e: isub
      // 0f: invokevirtual java/lang/String.charAt (I)C
      // 12: istore 4
      // 14: iload 3
      // 15: bipush 34
      // 17: if_icmpne 28
      // 1a: iload 4
      // 1c: bipush 34
      // 1e: if_icmpeq 43
      // 21: goto 28
      // 24: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 27: athrow
      // 28: iload 3
      // 29: bipush 39
      // 2b: if_icmpne 4c
      // 2e: goto 35
      // 31: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 34: athrow
      // 35: iload 4
      // 37: bipush 39
      // 39: if_icmpne 4c
      // 3c: goto 43
      // 3f: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 42: athrow
      // 43: aload 1
      // 44: bipush 1
      // 45: iload 2
      // 46: bipush 1
      // 47: isub
      // 48: invokevirtual java/lang/String.substring (II)Ljava/lang/String;
      // 4b: astore 1
      // 4c: aload 1
      // 4d: areturn
      // try (13 -> 19): 20 java/lang/IllegalStateException
      // try (16 -> 25): 26 java/lang/IllegalStateException
      // try (22 -> 31): 32 java/lang/IllegalStateException
   }

   private void b() {
      this.m.readLock().lock();

      HashSet var1;
      try {
         var1 = new HashSet<>(this.n.stringPropertyNames());
      } finally {
         this.m.readLock().unlock();
      }

      for (String var3 : var1) {
         try {
            if (var3 == null) {
               continue;
            }
         } catch (IllegalStateException var11) {
            throw a(var11);
         }

         String[] var5 = u;
         if (var3.endsWith(var5[18])) {
            String var4 = var3.substring(0, var3.length() - var5[6].length());

            try {
               if (var4.length() < 1) {
                  continue;
               }
            } catch (IllegalStateException var10) {
               throw a(var10);
            }

            this.b(var4);
         }
      }
   }

   private void d(String var1) {
      this.notifyPropertyChanged(var1);
      String var2 = this.l.get().get(var1);

      try {
         if (var2 != null) {
            this.notifyPropertyChanged(var2);
         }
      } catch (IllegalStateException var3) {
         throw a(var3);
      }
   }

   private void a(ClusterProperty param1, ClusterProperty param2) {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 0
      // 01: aload 1
      // 02: invokevirtual com/l7tech/gateway/common/cluster/ClusterProperty.getName ()Ljava/lang/String;
      // 05: invokevirtual com/l7tech/server/ServerConfig.getNameFromClusterName (Ljava/lang/String;)Ljava/lang/String;
      // 08: astore 3
      // 09: aload 3
      // 0a: ifnull c6
      // 0d: aload 0
      // 0e: aload 3
      // 0f: invokevirtual com/l7tech/server/ServerConfig.d (Ljava/lang/String;)V
      // 12: aload 0
      // 13: getfield com/l7tech/server/ServerConfig.m Ljava/util/concurrent/locks/ReadWriteLock;
      // 16: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 1b: invokeinterface java/util/concurrent/locks/Lock.lock ()V 1
      // 20: aload 0
      // 21: getfield com/l7tech/server/ServerConfig.q Ljava/beans/PropertyChangeListener;
      // 24: astore 4
      // 26: aload 0
      // 27: getfield com/l7tech/server/ServerConfig.m Ljava/util/concurrent/locks/ReadWriteLock;
      // 2a: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 2f: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 34: goto 4a
      // 37: astore 5
      // 39: aload 0
      // 3a: getfield com/l7tech/server/ServerConfig.m Ljava/util/concurrent/locks/ReadWriteLock;
      // 3d: invokeinterface java/util/concurrent/locks/ReadWriteLock.readLock ()Ljava/util/concurrent/locks/Lock; 1
      // 42: invokeinterface java/util/concurrent/locks/Lock.unlock ()V 1
      // 47: aload 5
      // 49: athrow
      // 4a: aload 4
      // 4c: ifnull c6
      // 4f: aload 2
      // 50: ifnull 65
      // 53: goto 5a
      // 56: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 59: athrow
      // 5a: aload 2
      // 5b: invokevirtual com/l7tech/gateway/common/cluster/ClusterProperty.getValue ()Ljava/lang/String;
      // 5e: goto 6b
      // 61: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 64: athrow
      // 65: aload 0
      // 66: aload 3
      // 67: bipush 0
      // 68: invokevirtual com/l7tech/server/ServerConfig.a (Ljava/lang/String;Z)Ljava/lang/String;
      // 6b: astore 5
      // 6d: aload 0
      // 6e: aload 3
      // 6f: aconst_null
      // 70: invokevirtual com/l7tech/server/ServerConfig.getProperty (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
      // 73: astore 6
      // 75: aload 5
      // 77: ifnull 97
      // 7a: aload 6
      // 7c: ifnull 97
      // 7f: goto 86
      // 82: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 85: athrow
      // 86: aload 5
      // 88: aload 6
      // 8a: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 8d: ifne c6
      // 90: goto 97
      // 93: invokestatic com/l7tech/server/ServerConfig.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 96: athrow
      // 97: new java/beans/PropertyChangeEvent
      // 9a: dup
      // 9b: aload 0
      // 9c: aload 3
      // 9d: aload 5
      // 9f: aload 6
      // a1: invokespecial java/beans/PropertyChangeEvent.<init> (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
      // a4: astore 7
      // a6: aload 4
      // a8: aload 7
      // aa: invokeinterface java/beans/PropertyChangeListener.propertyChange (Ljava/beans/PropertyChangeEvent;)V 2
      // af: goto c6
      // b2: astore 8
      // b4: aload 0
      // b5: getfield com/l7tech/server/ServerConfig.p Ljava/util/logging/Logger;
      // b8: getstatic java/util/logging/Level.WARNING Ljava/util/logging/Level;
      // bb: getstatic com/l7tech/server/ServerConfig.u [Ljava/lang/String;
      // be: bipush 25
      // c0: aaload
      // c1: aload 8
      // c3: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
      // c6: return
      // try (14 -> 17): 22 null
      // try (22 -> 23): 22 null
      // try (53 -> 62): 63 java/lang/Exception
      // try (51 -> 55): 56 java/lang/Exception
      // try (31 -> 39): 39 java/lang/Exception
      // try (29 -> 33): 34 java/lang/Exception
      // try (73 -> 76): 77 java/lang/Exception
   }

   private void c() {
      this.a.set(null);
   }

   private Map<String, String> e(String var1) {
      HashMap var2 = new HashMap();
      if (var1 != null) {
         this.m.readLock().lock();

         try {
            for (Entry var5 : this.n.entrySet()) {
               String var6 = (String)var5.getKey();
               String var7 = (String)var5.getValue();
               if (var6 != null) {
                  try {
                     if (var7 == null) {
                        continue;
                     }
                  } catch (IllegalStateException var12) {
                     throw a(var12);
                  }

                  if (var6.endsWith(var1)) {
                     String var8 = var6.substring(0, var6.length() - var1.length());
                     var2.put(var7, var8);
                  }
               }
            }
         } finally {
            this.m.readLock().unlock();
         }
      }

      return var2;
   }

   public ClusterPropertyDescriptor getClusterPropertyDescriptor(String var1) {
      this.m.readLock().lock();

      try {
         String var2 = this.getNameFromClusterName(var1);
         if (var2 != null) {
            String[] var7 = u;
            String var3 = this.f(var2 + var7[35]);
            ValidatorFactory var4 = this.a();

            ClusterPropertyDescriptor var10000;
            ClusterPropertyDescriptor var10001;
            String var10002;
            String var10003;
            String var10004;
            String var10005;
            label47: {
               try {
                  var10000 = new ClusterPropertyDescriptor;
                  var10001 = var10000;
                  var10002 = var1;
                  var10003 = this.f(var2 + var7[2]);
                  var10004 = this.f(var2 + var7[8]);
                  if (var3 == null) {
                     var10005 = var7[26];
                     break label47;
                  }
               } catch (IllegalStateException var10) {
                  throw a(var10);
               }

               var10005 = var3;
            }

            var10001./* $VF: Unable to resugar constructor */<init>(
               var10002, var10003, var10004, Boolean.parseBoolean(var10005), Option.optional((Validator)this.buildValidator(var2, var4, (var0, var1x) -> {
                  try {
                     if (var0 != null) {
                        var0.setHints(var1x);
                     }
                  } catch (IllegalStateException var2x) {
                     throw a(var2x);
                  }
               }))
            );
            return var10000;
         }
      } finally {
         this.m.readLock().unlock();
      }

      return null;
   }

   private Map<String, String> a(String var1, String var2) {
      TreeMap var3 = new TreeMap();
      if (var1 != null) {
         this.m.readLock().lock();

         try {
            for (Entry var5 : this.n.entrySet()) {
               String var6 = (String)var5.getKey();
               String var7 = (String)var5.getValue();
               if (var6 != null) {
                  try {
                     if (var7 == null) {
                        continue;
                     }
                  } catch (IllegalStateException var13) {
                     throw a(var13);
                  }

                  try {
                     if (var6.endsWith(var1)) {
                        var3.put(var7, this.f(var6.substring(0, var6.length() - var1.length()) + var2));
                     }
                  } catch (IllegalStateException var12) {
                     throw a(var12);
                  }
               }
            }
         } finally {
            this.m.readLock().unlock();
         }
      }

      return var3;
   }

   private String f(String var1) {
      this.m.readLock().lock();

      try {
         return this.expand(this.n.getProperty(var1));
      } finally {
         this.m.readLock().unlock();
      }
   }

   static {
      String[] var5 = new String[54];
      int var3 = 0;
      String var2 = ">\u001d\u0014$Y&d:\u0007\u0014\u0001S=b\u000b\u0001\u0012 I&f3\r\b7\u0006\u00131T/d:\fq\r\u00056Y<`/\u001d\t*T\r\u000b\u0001\u0005eJ<f/\f\u00121Cn\u0091\u000b\u0001\u0005eJ<f/\f\u00121Cnh+\u001d\u0001&R#l1\u001d$,I%]7\u001b\u00056R!e;I\t6\u001a;g;\f\u0006,T+m\u007f\u0006\u0012eS \u007f>\u0005\t!\u0014nY3\f\u00016_nl1\u001a\u00157_n}7\f@\u0016_-|-\f35[ )\u0018\b\u0014 M/p\u007f\u0000\u0013eJ<f/\f\u0012)Cnj0\u0007\u0006,];{:\rNe\u001af^6\u0005\feO=l\u007f\r\u0005#[;e+I\u000f#\u001a\r\u000b\u0001\u0005eJ<f/\f\u00121Cn\u0012q\u001a\u00051i7z+\f\r\u0015H!y:\u001b\u0014<\u000e\n\u0007\u000b+U9g\u0018\b\u0014 M/p\bq\r\u0005#[;e+\u0010q\n\f0I:l-9\u0012*J+{+\u0010bsI\t6\u001a<l.\u001c\t7_*)=\u001c\u0014eY!|3\r@+U:)=\f@#U;g;I\u000f7\u001a-{:\b\u0014 ^`)\u007f9\f [=l\u007f\f\u000e6O<l\u007f\u001d\b \u001a\th+\f\u0017$Cn`,I\u00107U>l-\u0005\u0019eS z+\b\f)_*' \u001c\u0006\u0015)^ .+I\u0006,T*)<\u0005\u00156N+{\u007f\u0019\u0012*J+{+\u0010@b\u0013\u007f\r\u0005#S l;I\u0004,H+j+\u0006\u0012<\u001aX\u007f\u001e\b,Y&)6\u001a@5H+z:\u0007\u0014eX;}\u007f\u0000\u0013eT!}\u007f\u001e\u0012,N/k3\fNe\u001a\u001ee:\b\u0013 \u001a+g,\u001c\u0012 \u001a:a:I'$N+~>\u0010@,Iny-\u0006\u0010 H\"p\u007f\u0000\u000e6N/e3\f\u0004k\u000fq\u001a\u00196N+d\u000f\u001b\u000f5_<}&\u001e-\f\u0007,I:l-:\u00057L+{\u001c\u0006\u000e#S)Y-\u0006\u0010 H:`:\u001a\fq\r\u00056Y<`/\u001d\t*T\u000fq\u001a\u00196N+d\u000f\u001b\u000f5_<}&\u0012q\u001a\u00051i7z+\f\r\u0015H!y:\u001b\u0014<\bq\u0004\u00151[,e:\u0017\n\u001a\t+]nj3\u001c\u00131_<)/\u001b\u000f5_<}&I\u000b<\u0006\rkVy}:\n\bk\u0004+\u001b\u0015 \u0014\n\u001a\t+]nm:\u000f\u00010V:))\b\f0_n\u0010q\u001f\u0001)S*h+\u0000\u000f+\u0014:p/\f;\n\u0007\u0005=J+j+\f\u0004e_6j:\u0019\u0014,U );\u001c\u0012,T))/\u001b\u000f5_<}&I\u0003-[ n:I\u00053_ }\u007f\r\t6J/}<\u0001N\u0004+\u001b\u0015 [\u007f\u001e\b,Y&)6\u001a@5H+z:\u0007\u0014eX;}\u007f\u0000\u0013eT!}\u007f\b@!S<l<\u001d\u000f7C`)\u007f9\f [=l\u007f\f\u000e6O<l\u007f\u001d\b \u001a\th+\f\u0017$Cn`,I\u00107U>l-\u0005\u0019eS z+\b\f)_*'\u0002xG\u0013\u007f\r\u0005#S l;I\u0004,H+j+\u0006\u0012<\u001a\u001e<\u0006\rjVy}:\n\bjI+{)\f\u0012ji+{)\f\u0012\u0006U o6\u000eYxI\b$Inh\u007f\n\f0I:l-I\u00107U>l-\u001d\t Inb:\u0010@!_(`1\f\u0004i\u001a,|+I\u0014-_nJ3\u001c\u00131_<Y-\u0006\u0010 H:p\u001c\b\u0003-_n`,I\u000e*Nnp:\u001d@$L/`3\b\u0002)_\u0010q\n\f0I:l-9\u0012*J+{+\u0010\u0011-\f\u0007,I:{>\u001d\t*T\u0007g9\u0006\u00130\u0017\u0006\u00131t/d:I\u0010$H/d:\u001d\u00057\u001a f+I\u0013 Nnh1\r@!S=j0\u001f\u00057Cno>\u0000\f ^`\bq\u001f\t6S,e:\bq\u001f\t6S,e:\u0010q\u001f\u0001)S*h+\u0000\u000f+\u0014:p/\fX\u007f\u001e\b,Y&)6\u001a@5H+z:\u0007\u0014eX;}\u007f\u0000\u0013eT!}\u007f\u001b\u0005$^/k3\fNe\u001a\u001ee:\b\u0013 \u001a+g,\u001c\u0012 \u001a:a:I'$N+~>\u0010@,Iny-\u0006\u0010 H\"p\u007f\u0000\u000e6N/e3\f\u0004k#/\u001b\u000f5_<}&*\b$T)l\u0013\u0000\u00131_ l-I\u0001)H+h;\u0010@6_:(\u001bsI\u0004 \\'g:\r@$In}7\f@!S<l<\u001d\u000f7Cn\u000b<\u0006\rkVy}:\n\bk\u0004\u007fT@b;\n\u0007\u0005=J+j+\f\u0004e_6j:\u0019\u0014,U );\u001c\u0012,T))/\u001b\u000f5_<}&I\u0003-[ n:I\u00053_ }\u007f\r\t6J/}<\u0001N_\u007f\u0000\u0013eT!}\u007f\r\u0005#S l;G@ej\"l>\u001a\u0005e_ z*\u001b\u0005eN&h+I\u0014-_nN>\u001d\u00052[7)6\u001a@5H!y:\u001b\f<\u001a-f1\u000f\t\"O<l;G@e\u0012\u0019`3\u0005@0I+);\f\u0006$O\"}\u007f\u0006\u0006e\u0013>\u001d\u0014$Y&d:\u0007\u0014\u0001S<l<\u001d\u000f7C\u001f\u001c\u0001\u0005&Q'g8I\u0006*Hnj3\u001c\u00131_<)/\u001b\u000f5_<}&IG\u0019\u001c\u0001\u0005&Q'g8I3<I:l2I\u00107U>l-\u001d\u0019e\n\u000f\u001b\u000f5_<}&IG\bq\r\u0005#[;e+>\u001e\u001b\u00070W+g+I\u0006*HnI\u0011\u0006\u0014\u000bO\"e\u007f\u0019\u00017[#l+\f\u0012e\u001dkzxI\u000f#\u001akzqL\u0013eW;z+I\u000e*Nnk:I\u000e0V\"%\u0012\u0000\u00136S n\u007f\u000f\t)_nj0\u0007\u0006,];{>\u001d\t*Tny-\u0006\u0010 H:p\u007fN";
      int var4 = ">\u001d\u0014$Y&d:\u0007\u0014\u0001S=b\u000b\u0001\u0012 I&f3\r\b7\u0006\u00131T/d:\fq\r\u00056Y<`/\u001d\t*T\r\u000b\u0001\u0005eJ<f/\f\u00121Cn\u0091\u000b\u0001\u0005eJ<f/\f\u00121Cnh+\u001d\u0001&R#l1\u001d$,I%]7\u001b\u00056R!e;I\t6\u001a;g;\f\u0006,T+m\u007f\u0006\u0012eS \u007f>\u0005\t!\u0014nY3\f\u00016_nl1\u001a\u00157_n}7\f@\u0016_-|-\f35[ )\u0018\b\u0014 M/p\u007f\u0000\u0013eJ<f/\f\u0012)Cnj0\u0007\u0006,];{:\rNe\u001af^6\u0005\feO=l\u007f\r\u0005#[;e+I\u000f#\u001a\r\u000b\u0001\u0005eJ<f/\f\u00121Cn\u0012q\u001a\u00051i7z+\f\r\u0015H!y:\u001b\u0014<\u000e\n\u0007\u000b+U9g\u0018\b\u0014 M/p\bq\r\u0005#[;e+\u0010q\n\f0I:l-9\u0012*J+{+\u0010bsI\t6\u001a<l.\u001c\t7_*)=\u001c\u0014eY!|3\r@+U:)=\f@#U;g;I\u000f7\u001a-{:\b\u0014 ^`)\u007f9\f [=l\u007f\f\u000e6O<l\u007f\u001d\b \u001a\th+\f\u0017$Cn`,I\u00107U>l-\u0005\u0019eS z+\b\f)_*' \u001c\u0006\u0015)^ .+I\u0006,T*)<\u0005\u00156N+{\u007f\u0019\u0012*J+{+\u0010@b\u0013\u007f\r\u0005#S l;I\u0004,H+j+\u0006\u0012<\u001aX\u007f\u001e\b,Y&)6\u001a@5H+z:\u0007\u0014eX;}\u007f\u0000\u0013eT!}\u007f\u001e\u0012,N/k3\fNe\u001a\u001ee:\b\u0013 \u001a+g,\u001c\u0012 \u001a:a:I'$N+~>\u0010@,Iny-\u0006\u0010 H\"p\u007f\u0000\u000e6N/e3\f\u0004k\u000fq\u001a\u00196N+d\u000f\u001b\u000f5_<}&\u001e-\f\u0007,I:l-:\u00057L+{\u001c\u0006\u000e#S)Y-\u0006\u0010 H:`:\u001a\fq\r\u00056Y<`/\u001d\t*T\u000fq\u001a\u00196N+d\u000f\u001b\u000f5_<}&\u0012q\u001a\u00051i7z+\f\r\u0015H!y:\u001b\u0014<\bq\u0004\u00151[,e:\u0017\n\u001a\t+]nj3\u001c\u00131_<)/\u001b\u000f5_<}&I\u000b<\u0006\rkVy}:\n\bk\u0004+\u001b\u0015 \u0014\n\u001a\t+]nm:\u000f\u00010V:))\b\f0_n\u0010q\u001f\u0001)S*h+\u0000\u000f+\u0014:p/\f;\n\u0007\u0005=J+j+\f\u0004e_6j:\u0019\u0014,U );\u001c\u0012,T))/\u001b\u000f5_<}&I\u0003-[ n:I\u00053_ }\u007f\r\t6J/}<\u0001N\u0004+\u001b\u0015 [\u007f\u001e\b,Y&)6\u001a@5H+z:\u0007\u0014eX;}\u007f\u0000\u0013eT!}\u007f\b@!S<l<\u001d\u000f7C`)\u007f9\f [=l\u007f\f\u000e6O<l\u007f\u001d\b \u001a\th+\f\u0017$Cn`,I\u00107U>l-\u0005\u0019eS z+\b\f)_*'\u0002xG\u0013\u007f\r\u0005#S l;I\u0004,H+j+\u0006\u0012<\u001a\u001e<\u0006\rjVy}:\n\bjI+{)\f\u0012ji+{)\f\u0012\u0006U o6\u000eYxI\b$Inh\u007f\n\f0I:l-I\u00107U>l-\u001d\t Inb:\u0010@!_(`1\f\u0004i\u001a,|+I\u0014-_nJ3\u001c\u00131_<Y-\u0006\u0010 H:p\u001c\b\u0003-_n`,I\u000e*Nnp:\u001d@$L/`3\b\u0002)_\u0010q\n\f0I:l-9\u0012*J+{+\u0010\u0011-\f\u0007,I:{>\u001d\t*T\u0007g9\u0006\u00130\u0017\u0006\u00131t/d:I\u0010$H/d:\u001d\u00057\u001a f+I\u0013 Nnh1\r@!S=j0\u001f\u00057Cno>\u0000\f ^`\bq\u001f\t6S,e:\bq\u001f\t6S,e:\u0010q\u001f\u0001)S*h+\u0000\u000f+\u0014:p/\fX\u007f\u001e\b,Y&)6\u001a@5H+z:\u0007\u0014eX;}\u007f\u0000\u0013eT!}\u007f\u001b\u0005$^/k3\fNe\u001a\u001ee:\b\u0013 \u001a+g,\u001c\u0012 \u001a:a:I'$N+~>\u0010@,Iny-\u0006\u0010 H\"p\u007f\u0000\u000e6N/e3\f\u0004k#/\u001b\u000f5_<}&*\b$T)l\u0013\u0000\u00131_ l-I\u0001)H+h;\u0010@6_:(\u001bsI\u0004 \\'g:\r@$In}7\f@!S<l<\u001d\u000f7Cn\u000b<\u0006\rkVy}:\n\bk\u0004\u007fT@b;\n\u0007\u0005=J+j+\f\u0004e_6j:\u0019\u0014,U );\u001c\u0012,T))/\u001b\u000f5_<}&I\u0003-[ n:I\u00053_ }\u007f\r\t6J/}<\u0001N_\u007f\u0000\u0013eT!}\u007f\r\u0005#S l;G@ej\"l>\u001a\u0005e_ z*\u001b\u0005eN&h+I\u0014-_nN>\u001d\u00052[7)6\u001a@5H!y:\u001b\f<\u001a-f1\u000f\t\"O<l;G@e\u0012\u0019`3\u0005@0I+);\f\u0006$O\"}\u007f\u0006\u0006e\u0013>\u001d\u0014$Y&d:\u0007\u0014\u0001S<l<\u001d\u000f7C\u001f\u001c\u0001\u0005&Q'g8I\u0006*Hnj3\u001c\u00131_<)/\u001b\u000f5_<}&IG\u0019\u001c\u0001\u0005&Q'g8I3<I:l2I\u00107U>l-\u001d\u0019e\n\u000f\u001b\u000f5_<}&IG\bq\r\u0005#[;e+>\u001e\u001b\u00070W+g+I\u0006*HnI\u0011\u0006\u0014\u000bO\"e\u007f\u0019\u00017[#l+\f\u0012e\u001dkzxI\u000f#\u001akzqL\u0013eW;z+I\u000e*Nnk:I\u000e0V\"%\u0012\u0000\u00136S n\u007f\u000f\t)_nj0\u0007\u0006,];{>\u001d\t*Tny-\u0006\u0010 H:p\u007fN"
         .length();
      char var1 = 23;
      int var7 = -1;

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

         while (true) {
            String var8 = b(var10000, g(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     u = var5;
                     String[] var9 = u;
                     j = u[21];
                     b = var9[14];
                     d = var9[2];
                     e = var9[8];
                     h = var9[36];
                     i = var9[9];
                     g = var9[53];
                     c = var9[6];
                     f = var9[37];
                     r = new AtomicReference<>();
                     return;
                  }

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

                  var2 = "@W\u0011w\u0007j+z]C4\u001bm7~]C`\u0012?6oUTpK8\u0011 NPx\u0002{9zQ^zEm=i]I";
                  var4 = "@W\u0011w\u0007j+z]C4\u001bm7~]C`\u0012?6oUTpK8\u0011 NPx\u0002{9zQ^zEm=i]I".length();
                  var1 = 27;
                  var7 = -1;
            }

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

   private static Exception a(Exception var0) {
      return var0;
   }

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

      return var10000;
   }

   private static String b(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 -> 126;
            case 1 -> 72;
            case 2 -> 65;
            case 3 -> 100;
            case 4 -> 27;
            case 5 -> 111;
            default -> 40;
         });
      }

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

   @ManagedResource(description = "Server config", objectName = "l7tech:type=ServerConfig")
   public static class ManagedServerConfig {
      final ServerConfig a;

      protected ManagedServerConfig(ServerConfig var1) {
         this.a = var1;
      }

      @ManagedOperation(description = "Get Property Value")
      public String getProperty(String var1) {
         return this.a.b(var1);
      }

      @ManagedAttribute(description = "Property Names", currencyTimeLimit = 30)
      public Set<String> getPropertyNames() {
         this.a.m.readLock().lock();

         TreeSet var1;
         try {
            var1 = new TreeSet<>(this.a.n.stringPropertyNames());
         } finally {
            this.a.m.readLock().unlock();
         }

         return var1;
      }
   }

   public static final class PropertyRegistrationInfo {
      @NotNull
      private final String a;
      @Nullable
      private final String b;
      @Nullable
      private final String c;
      @Nullable
      private final String d;
      @Nullable
      private final String e;
      private static final String[] f;

      public PropertyRegistrationInfo(@NotNull String var1, @Nullable String var2, @Nullable String var3, @Nullable String var4) {
         if (var1 == null) {
            a(0);
         }

         this(var1, var2, var3, var4, null);
      }

      public PropertyRegistrationInfo(@NotNull String var1, @Nullable String var2, @Nullable String var3, @Nullable String var4, @Nullable String var5) {
         if (var1 == null) {
            a(1);
         }

         super();
         this.a = var1;
         this.b = var2;
         this.c = var3;
         this.d = var4;
         this.e = var5;
      }

      public static ServerConfig.PropertyRegistrationInfo prInfo(@NotNull String var0, @Nullable String var1, @Nullable String var2, @Nullable String var3) {
         try {
            if (var0 == null) {
               a(2);
            }
         } catch (IllegalArgumentException var4) {
            throw a(var4);
         }

         return new ServerConfig.PropertyRegistrationInfo(var0, var1, var2, var3);
      }

      public static ServerConfig.PropertyRegistrationInfo prInfo(
         @NotNull String var0, @Nullable String var1, @Nullable String var2, @Nullable String var3, @Nullable String var4
      ) {
         try {
            if (var0 == null) {
               a(3);
            }
         } catch (IllegalArgumentException var5) {
            throw a(var5);
         }

         return new ServerConfig.PropertyRegistrationInfo(var0, var1, var2, var3, var4);
      }

      @NotNull
      public String getName() {
         try {
            if (this.a == null) {
               a(4);
            }

            return this.a;
         } catch (IllegalArgumentException var1) {
            throw a(var1);
         }
      }

      private static IllegalArgumentException a(IllegalArgumentException var0) {
         return var0;
      }

      static {
         String[] var5 = new String[9];
         int var3 = 0;
         String var2 = ",:\u000ekm\u001ej*6\u000bkrLl90\u0011kRLl90\u0011\u0007nGx&2G\u0014sFn*'\u0017=SLy&&\u00176`]w ;**gF\u0007(0\u0017\n`D{7,:\u000ekm\u001ej*6\u000bkrLl90\u0011kRLl90\u0011\u0007nGx&2G\u0014sFn*'\u0017=SLy&&\u00176`]w ;**gF>\u000e'\u00041lLp;u\u0005+s\t^\u0001:\u0017\ntEro%\u00026`D{;0\u0011d&\fmhu\f\"!\fmap\u0010dl\\m;u\r+u\t|*u\r1mE\b?'\f4OHs**\u000f\u001b\f0O\\r#u\u000e!uAq+uF7/\fmo8\u00167u\tp !C6d]k=;C*tEr\u0004!4\u000e!";
         int var4 = ",:\u000ekm\u001ej*6\u000bkrLl90\u0011kRLl90\u0011\u0007nGx&2G\u0014sFn*'\u0017=SLy&&\u00176`]w ;**gF\u0007(0\u0017\n`D{7,:\u000ekm\u001ej*6\u000bkrLl90\u0011kRLl90\u0011\u0007nGx&2G\u0014sFn*'\u0017=SLy&&\u00176`]w ;**gF>\u000e'\u00041lLp;u\u0005+s\t^\u0001:\u0017\ntEro%\u00026`D{;0\u0011d&\fmhu\f\"!\fmap\u0010dl\\m;u\r+u\t|*u\r1mE\b?'\f4OHs**\u000f\u001b\f0O\\r#u\u000e!uAq+uF7/\fmo8\u00167u\tp !C6d]k=;C*tEr\u0004!4\u000e!"
            .length();
         char var1 = '7';
         int var7 = -1;

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

            while (true) {
               String var8 = a(var10000, a(var10001));
               switch (var10002) {
                  case 0:
                     var5[var3++] = var8;
                     if ((var7 += var1) >= var4) {
                        f = var5;
                        return;
                     }

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

                     var2 = "\u0014[jJ\u0012p\u0006X@MM\u0000!";
                     var4 = "\u0014[jJ\u0012p\u0006X@MM\u0000!".length();
                     var1 = 6;
                     var7 = -1;
               }

               var10000 = 26;
               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] ^ 99);
         }

         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 -> 50;
               case 1 -> 40;
               case 2 -> 30;
               case 3 -> 57;
               case 4 -> 124;
               case 5 -> 84;
               default -> 99;
            });
         }

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

   public static class ServerConfigConfigProviderSpi implements ConfigProviderSpi {
      public Config newConfig(Properties var1, long var2) {
         return new ServerConfig(var1, var2);
      }
   }
}
