/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.jdo.tck.pc.fieldtypes;

import java.io.Serializable;

public class FieldsOfShort {
  public int identifier;
  private Short Short0;
  private Short Short1;
  private Short Short2;
  private Short Short3;
  private Short Short4;
  private Short Short5;
  private Short Short6;
  private Short Short7;
  private static Short Short8;
  private transient Short Short9;
  private transient Short Short10;
  private transient Short Short11;
  private transient Short Short12;
  private transient Short Short13;
  private transient Short Short14;
  private final Short Short15 = Short.valueOf((short) 5);
  private volatile Short Short16;
  private volatile Short Short17;
  private volatile Short Short18;
  private volatile Short Short19;
  private volatile Short Short20;
  private volatile Short Short21;
  private volatile Short Short22;
  private volatile Short Short23;
  private static transient Short Short24;
  private static final Short Short25 = Short.valueOf((short) 5);
  private static volatile Short Short26;
  private final transient Short Short27 = Short.valueOf((short) 5);
  private transient volatile Short Short28;
  private transient volatile Short Short29;
  private transient volatile Short Short30;
  private transient volatile Short Short31;
  private transient volatile Short Short32;
  private transient volatile Short Short33;
  private static final transient Short Short34 = Short.valueOf((short) 5);
  private static transient volatile Short Short35;
  public Short Short36;
  public Short Short37;
  public Short Short38;
  public Short Short39;
  public Short Short40;
  public Short Short41;
  public Short Short42;
  public Short Short43;
  public static Short Short44;
  public transient Short Short45;
  public transient Short Short46;
  public transient Short Short47;
  public transient Short Short48;
  public transient Short Short49;
  public transient Short Short50;
  public final Short Short51 = Short.valueOf((short) 5);
  public volatile Short Short52;
  public volatile Short Short53;
  public volatile Short Short54;
  public volatile Short Short55;
  public volatile Short Short56;
  public volatile Short Short57;
  public volatile Short Short58;
  public volatile Short Short59;
  public static transient Short Short60;
  public static final Short Short61 = Short.valueOf((short) 5);
  public static volatile Short Short62;
  public final transient Short Short63 = Short.valueOf((short) 5);
  public transient volatile Short Short64;
  public transient volatile Short Short65;
  public transient volatile Short Short66;
  public transient volatile Short Short67;
  public transient volatile Short Short68;
  public transient volatile Short Short69;
  public static final transient Short Short70 = Short.valueOf((short) 5);
  public static transient volatile Short Short71;
  protected Short Short72;
  protected Short Short73;
  protected Short Short74;
  protected Short Short75;
  protected Short Short76;
  protected Short Short77;
  protected Short Short78;
  protected Short Short79;
  protected static Short Short80;
  protected transient Short Short81;
  protected transient Short Short82;
  protected transient Short Short83;
  protected transient Short Short84;
  protected transient Short Short85;
  protected transient Short Short86;
  protected final Short Short87 = Short.valueOf((short) 5);
  protected volatile Short Short88;
  protected volatile Short Short89;
  protected volatile Short Short90;
  protected volatile Short Short91;
  protected volatile Short Short92;
  protected volatile Short Short93;
  protected volatile Short Short94;
  protected volatile Short Short95;
  protected static transient Short Short96;
  protected static final Short Short97 = Short.valueOf((short) 5);
  protected static volatile Short Short98;
  protected final transient Short Short99 = Short.valueOf((short) 5);
  protected transient volatile Short Short100;
  protected transient volatile Short Short101;
  protected transient volatile Short Short102;
  protected transient volatile Short Short103;
  protected transient volatile Short Short104;
  protected transient volatile Short Short105;
  protected static final transient Short Short106 = Short.valueOf((short) 5);
  protected static transient volatile Short Short107;
  Short Short108;
  Short Short109;
  Short Short110;
  Short Short111;
  Short Short112;
  Short Short113;
  Short Short114;
  Short Short115;
  static Short Short116;
  transient Short Short117;
  transient Short Short118;
  transient Short Short119;
  transient Short Short120;
  transient Short Short121;
  transient Short Short122;
  final Short Short123 = Short.valueOf((short) 5);
  volatile Short Short124;
  volatile Short Short125;
  volatile Short Short126;
  volatile Short Short127;
  volatile Short Short128;
  volatile Short Short129;
  volatile Short Short130;
  volatile Short Short131;
  static transient Short Short132;
  static final Short Short133 = Short.valueOf((short) 5);
  static volatile Short Short134;
  final transient Short Short135 = Short.valueOf((short) 5);
  transient volatile Short Short136;
  transient volatile Short Short137;
  transient volatile Short Short138;
  transient volatile Short Short139;
  transient volatile Short Short140;
  transient volatile Short Short141;
  static final transient Short Short142 = Short.valueOf((short) 5);
  static transient volatile Short Short143;

  public static final boolean[] isPersistent = {
    true, true, true, false, true, true, true, false, false, false,
    false, true, true, true, false, false, true, true, true, false,
    true, true, true, false, false, false, false, false, false, false,
    true, true, true, false, false, false, true, true, true, false,
    true, true, true, false, false, false, false, true, true, true,
    false, false, true, true, true, false, true, true, true, false,
    false, false, false, false, false, false, true, true, true, false,
    false, false, true, true, true, false, true, true, true, false,
    false, false, false, true, true, true, false, false, true, true,
    true, false, true, true, true, false, false, false, false, false,
    false, false, true, true, true, false, false, false, true, true,
    true, false, true, true, true, false, false, false, false, true,
    true, true, false, false, true, true, true, false, true, true,
    true, false, false, false, false, false, false, false, true, true,
    true, false, false, false
  };

  public static final boolean[] isStatic = {
    false, false, false, false, false, false, false, false, true, false,
    false, false, false, false, false, false, false, false, false, false,
    false, false, false, false, true, true, true, false, false, false,
    false, false, false, false, true, true, false, false, false, false,
    false, false, false, false, true, false, false, false, false, false,
    false, false, false, false, false, false, false, false, false, false,
    true, true, true, false, false, false, false, false, false, false,
    true, true, false, false, false, false, false, false, false, false,
    true, false, false, false, false, false, false, false, false, false,
    false, false, false, false, false, false, true, true, true, false,
    false, false, false, false, false, false, true, true, false, false,
    false, false, false, false, false, false, true, false, false, false,
    false, false, false, false, false, false, false, false, false, false,
    false, false, true, true, true, false, false, false, false, false,
    false, false, true, true
  };

  public static final boolean[] isFinal = {
    false, false, false, false, false, false, false, false, false, false,
    false, false, false, false, false, true, false, false, false, false,
    false, false, false, false, false, true, false, true, false, false,
    false, false, false, false, true, false, false, false, false, false,
    false, false, false, false, false, false, false, false, false, false,
    false, true, false, false, false, false, false, false, false, false,
    false, true, false, true, false, false, false, false, false, false,
    true, false, false, false, false, false, false, false, false, false,
    false, false, false, false, false, false, false, true, false, false,
    false, false, false, false, false, false, false, true, false, true,
    false, false, false, false, false, false, true, false, false, false,
    false, false, false, false, false, false, false, false, false, false,
    false, false, false, true, false, false, false, false, false, false,
    false, false, false, true, false, true, false, false, false, false,
    false, false, true, false
  };

  public static final String[] fieldSpecs = {
    "private Short Short0",
    "embedded= true   private Short Short1",
    "embedded= false   private Short Short2",
    "persistence-modifier= none    private Short Short3",
    "persistence-modifier= persistent    private Short Short4",
    "persistence-modifier= persistent  embedded= true   private Short Short5",
    "persistence-modifier= persistent  embedded= false   private Short Short6",
    "persistence-modifier= transactional    private Short Short7",
    "private static Short Short8",
    "private transient Short Short9",
    "persistence-modifier= none    private transient Short Short10",
    "persistence-modifier= persistent    private transient Short Short11",
    "persistence-modifier= persistent  embedded= true   private transient Short Short12",
    "persistence-modifier= persistent  embedded= false   private transient Short Short13",
    "persistence-modifier= transactional    private transient Short Short14",
    "private final Short Short15",
    "private volatile Short Short16",
    "embedded= true   private volatile Short Short17",
    "embedded= false   private volatile Short Short18",
    "persistence-modifier= none    private volatile Short Short19",
    "persistence-modifier= persistent    private volatile Short Short20",
    "persistence-modifier= persistent  embedded= true   private volatile Short Short21",
    "persistence-modifier= persistent  embedded= false   private volatile Short Short22",
    "persistence-modifier= transactional    private volatile Short Short23",
    "private static transient Short Short24",
    "private static final Short Short25",
    "private static volatile Short Short26",
    "private transient final Short Short27",
    "private transient volatile Short Short28",
    "persistence-modifier= none    private transient volatile Short Short29",
    "persistence-modifier= persistent    private transient volatile Short Short30",
    "persistence-modifier= persistent  embedded= true   private transient volatile Short Short31",
    "persistence-modifier= persistent  embedded= false   private transient volatile Short Short32",
    "persistence-modifier= transactional    private transient volatile Short Short33",
    "private static transient final Short Short34",
    "private static transient volatile Short Short35",
    "public Short Short36",
    "embedded= true   public Short Short37",
    "embedded= false   public Short Short38",
    "persistence-modifier= none    public Short Short39",
    "persistence-modifier= persistent    public Short Short40",
    "persistence-modifier= persistent  embedded= true   public Short Short41",
    "persistence-modifier= persistent  embedded= false   public Short Short42",
    "persistence-modifier= transactional    public Short Short43",
    "public static Short Short44",
    "public transient Short Short45",
    "persistence-modifier= none    public transient Short Short46",
    "persistence-modifier= persistent    public transient Short Short47",
    "persistence-modifier= persistent  embedded= true   public transient Short Short48",
    "persistence-modifier= persistent  embedded= false   public transient Short Short49",
    "persistence-modifier= transactional    public transient Short Short50",
    "public final Short Short51",
    "public volatile Short Short52",
    "embedded= true   public volatile Short Short53",
    "embedded= false   public volatile Short Short54",
    "persistence-modifier= none    public volatile Short Short55",
    "persistence-modifier= persistent    public volatile Short Short56",
    "persistence-modifier= persistent  embedded= true   public volatile Short Short57",
    "persistence-modifier= persistent  embedded= false   public volatile Short Short58",
    "persistence-modifier= transactional    public volatile Short Short59",
    "public static transient Short Short60",
    "public static final Short Short61",
    "public static volatile Short Short62",
    "public transient final Short Short63",
    "public transient volatile Short Short64",
    "persistence-modifier= none    public transient volatile Short Short65",
    "persistence-modifier= persistent    public transient volatile Short Short66",
    "persistence-modifier= persistent  embedded= true   public transient volatile Short Short67",
    "persistence-modifier= persistent  embedded= false   public transient volatile Short Short68",
    "persistence-modifier= transactional    public transient volatile Short Short69",
    "public static transient final Short Short70",
    "public static transient volatile Short Short71",
    "protected Short Short72",
    "embedded= true   protected Short Short73",
    "embedded= false   protected Short Short74",
    "persistence-modifier= none    protected Short Short75",
    "persistence-modifier= persistent    protected Short Short76",
    "persistence-modifier= persistent  embedded= true   protected Short Short77",
    "persistence-modifier= persistent  embedded= false   protected Short Short78",
    "persistence-modifier= transactional    protected Short Short79",
    "protected static Short Short80",
    "protected transient Short Short81",
    "persistence-modifier= none    protected transient Short Short82",
    "persistence-modifier= persistent    protected transient Short Short83",
    "persistence-modifier= persistent  embedded= true   protected transient Short Short84",
    "persistence-modifier= persistent  embedded= false   protected transient Short Short85",
    "persistence-modifier= transactional    protected transient Short Short86",
    "protected final Short Short87",
    "protected volatile Short Short88",
    "embedded= true   protected volatile Short Short89",
    "embedded= false   protected volatile Short Short90",
    "persistence-modifier= none    protected volatile Short Short91",
    "persistence-modifier= persistent    protected volatile Short Short92",
    "persistence-modifier= persistent  embedded= true   protected volatile Short Short93",
    "persistence-modifier= persistent  embedded= false   protected volatile Short Short94",
    "persistence-modifier= transactional    protected volatile Short Short95",
    "protected static transient Short Short96",
    "protected static final Short Short97",
    "protected static volatile Short Short98",
    "protected transient final Short Short99",
    "protected transient volatile Short Short100",
    "persistence-modifier= none    protected transient volatile Short Short101",
    "persistence-modifier= persistent    protected transient volatile Short Short102",
    "persistence-modifier= persistent  embedded= true   protected transient volatile Short Short103",
    "persistence-modifier= persistent  embedded= false   protected transient volatile Short Short104",
    "persistence-modifier= transactional    protected transient volatile Short Short105",
    "protected static transient final Short Short106",
    "protected static transient volatile Short Short107",
    "Short Short108",
    "embedded= true   Short Short109",
    "embedded= false   Short Short110",
    "persistence-modifier= none    Short Short111",
    "persistence-modifier= persistent    Short Short112",
    "persistence-modifier= persistent  embedded= true   Short Short113",
    "persistence-modifier= persistent  embedded= false   Short Short114",
    "persistence-modifier= transactional    Short Short115",
    "static Short Short116",
    "transient Short Short117",
    "persistence-modifier= none    transient Short Short118",
    "persistence-modifier= persistent    transient Short Short119",
    "persistence-modifier= persistent  embedded= true   transient Short Short120",
    "persistence-modifier= persistent  embedded= false   transient Short Short121",
    "persistence-modifier= transactional    transient Short Short122",
    "final Short Short123",
    "volatile Short Short124",
    "embedded= true   volatile Short Short125",
    "embedded= false   volatile Short Short126",
    "persistence-modifier= none    volatile Short Short127",
    "persistence-modifier= persistent    volatile Short Short128",
    "persistence-modifier= persistent  embedded= true   volatile Short Short129",
    "persistence-modifier= persistent  embedded= false   volatile Short Short130",
    "persistence-modifier= transactional    volatile Short Short131",
    "static transient Short Short132",
    "static final Short Short133",
    "static volatile Short Short134",
    "transient final Short Short135",
    "transient volatile Short Short136",
    "persistence-modifier= none    transient volatile Short Short137",
    "persistence-modifier= persistent    transient volatile Short Short138",
    "persistence-modifier= persistent  embedded= true   transient volatile Short Short139",
    "persistence-modifier= persistent  embedded= false   transient volatile Short Short140",
    "persistence-modifier= transactional    transient volatile Short Short141",
    "static transient final Short Short142",
    "static transient volatile Short Short143"
  };

  public int getLength() {
    return fieldSpecs.length;
  }

  public Short get(int index) {
    switch (index) {
      case (0):
        return Short0;
      case (1):
        return Short1;
      case (2):
        return Short2;
      case (3):
        return Short3;
      case (4):
        return Short4;
      case (5):
        return Short5;
      case (6):
        return Short6;
      case (7):
        return Short7;
      case (8):
        return Short8;
      case (9):
        return Short9;
      case (10):
        return Short10;
      case (11):
        return Short11;
      case (12):
        return Short12;
      case (13):
        return Short13;
      case (14):
        return Short14;
      case (15):
        return Short15;
      case (16):
        return Short16;
      case (17):
        return Short17;
      case (18):
        return Short18;
      case (19):
        return Short19;
      case (20):
        return Short20;
      case (21):
        return Short21;
      case (22):
        return Short22;
      case (23):
        return Short23;
      case (24):
        return Short24;
      case (25):
        return Short25;
      case (26):
        return Short26;
      case (27):
        return Short27;
      case (28):
        return Short28;
      case (29):
        return Short29;
      case (30):
        return Short30;
      case (31):
        return Short31;
      case (32):
        return Short32;
      case (33):
        return Short33;
      case (34):
        return Short34;
      case (35):
        return Short35;
      case (36):
        return Short36;
      case (37):
        return Short37;
      case (38):
        return Short38;
      case (39):
        return Short39;
      case (40):
        return Short40;
      case (41):
        return Short41;
      case (42):
        return Short42;
      case (43):
        return Short43;
      case (44):
        return Short44;
      case (45):
        return Short45;
      case (46):
        return Short46;
      case (47):
        return Short47;
      case (48):
        return Short48;
      case (49):
        return Short49;
      case (50):
        return Short50;
      case (51):
        return Short51;
      case (52):
        return Short52;
      case (53):
        return Short53;
      case (54):
        return Short54;
      case (55):
        return Short55;
      case (56):
        return Short56;
      case (57):
        return Short57;
      case (58):
        return Short58;
      case (59):
        return Short59;
      case (60):
        return Short60;
      case (61):
        return Short61;
      case (62):
        return Short62;
      case (63):
        return Short63;
      case (64):
        return Short64;
      case (65):
        return Short65;
      case (66):
        return Short66;
      case (67):
        return Short67;
      case (68):
        return Short68;
      case (69):
        return Short69;
      case (70):
        return Short70;
      case (71):
        return Short71;
      case (72):
        return Short72;
      case (73):
        return Short73;
      case (74):
        return Short74;
      case (75):
        return Short75;
      case (76):
        return Short76;
      case (77):
        return Short77;
      case (78):
        return Short78;
      case (79):
        return Short79;
      case (80):
        return Short80;
      case (81):
        return Short81;
      case (82):
        return Short82;
      case (83):
        return Short83;
      case (84):
        return Short84;
      case (85):
        return Short85;
      case (86):
        return Short86;
      case (87):
        return Short87;
      case (88):
        return Short88;
      case (89):
        return Short89;
      case (90):
        return Short90;
      case (91):
        return Short91;
      case (92):
        return Short92;
      case (93):
        return Short93;
      case (94):
        return Short94;
      case (95):
        return Short95;
      case (96):
        return Short96;
      case (97):
        return Short97;
      case (98):
        return Short98;
      case (99):
        return Short99;
      case (100):
        return Short100;
      case (101):
        return Short101;
      case (102):
        return Short102;
      case (103):
        return Short103;
      case (104):
        return Short104;
      case (105):
        return Short105;
      case (106):
        return Short106;
      case (107):
        return Short107;
      case (108):
        return Short108;
      case (109):
        return Short109;
      case (110):
        return Short110;
      case (111):
        return Short111;
      case (112):
        return Short112;
      case (113):
        return Short113;
      case (114):
        return Short114;
      case (115):
        return Short115;
      case (116):
        return Short116;
      case (117):
        return Short117;
      case (118):
        return Short118;
      case (119):
        return Short119;
      case (120):
        return Short120;
      case (121):
        return Short121;
      case (122):
        return Short122;
      case (123):
        return Short123;
      case (124):
        return Short124;
      case (125):
        return Short125;
      case (126):
        return Short126;
      case (127):
        return Short127;
      case (128):
        return Short128;
      case (129):
        return Short129;
      case (130):
        return Short130;
      case (131):
        return Short131;
      case (132):
        return Short132;
      case (133):
        return Short133;
      case (134):
        return Short134;
      case (135):
        return Short135;
      case (136):
        return Short136;
      case (137):
        return Short137;
      case (138):
        return Short138;
      case (139):
        return Short139;
      case (140):
        return Short140;
      case (141):
        return Short141;
      case (142):
        return Short142;
      case (143):
        return Short143;
      default:
        throw new IndexOutOfBoundsException();
    }
  }

  public boolean set(int index, Short value) {
    if (fieldSpecs[index].indexOf("final") != -1) return false;
    switch (index) {
      case (0):
        Short0 = value;
        break;
      case (1):
        Short1 = value;
        break;
      case (2):
        Short2 = value;
        break;
      case (3):
        Short3 = value;
        break;
      case (4):
        Short4 = value;
        break;
      case (5):
        Short5 = value;
        break;
      case (6):
        Short6 = value;
        break;
      case (7):
        Short7 = value;
        break;
      case (8):
        Short8 = value;
        break;
      case (9):
        Short9 = value;
        break;
      case (10):
        Short10 = value;
        break;
      case (11):
        Short11 = value;
        break;
      case (12):
        Short12 = value;
        break;
      case (13):
        Short13 = value;
        break;
      case (14):
        Short14 = value;
        break;
      case (16):
        Short16 = value;
        break;
      case (17):
        Short17 = value;
        break;
      case (18):
        Short18 = value;
        break;
      case (19):
        Short19 = value;
        break;
      case (20):
        Short20 = value;
        break;
      case (21):
        Short21 = value;
        break;
      case (22):
        Short22 = value;
        break;
      case (23):
        Short23 = value;
        break;
      case (24):
        Short24 = value;
        break;
      case (26):
        Short26 = value;
        break;
      case (28):
        Short28 = value;
        break;
      case (29):
        Short29 = value;
        break;
      case (30):
        Short30 = value;
        break;
      case (31):
        Short31 = value;
        break;
      case (32):
        Short32 = value;
        break;
      case (33):
        Short33 = value;
        break;
      case (35):
        Short35 = value;
        break;
      case (36):
        Short36 = value;
        break;
      case (37):
        Short37 = value;
        break;
      case (38):
        Short38 = value;
        break;
      case (39):
        Short39 = value;
        break;
      case (40):
        Short40 = value;
        break;
      case (41):
        Short41 = value;
        break;
      case (42):
        Short42 = value;
        break;
      case (43):
        Short43 = value;
        break;
      case (44):
        Short44 = value;
        break;
      case (45):
        Short45 = value;
        break;
      case (46):
        Short46 = value;
        break;
      case (47):
        Short47 = value;
        break;
      case (48):
        Short48 = value;
        break;
      case (49):
        Short49 = value;
        break;
      case (50):
        Short50 = value;
        break;
      case (52):
        Short52 = value;
        break;
      case (53):
        Short53 = value;
        break;
      case (54):
        Short54 = value;
        break;
      case (55):
        Short55 = value;
        break;
      case (56):
        Short56 = value;
        break;
      case (57):
        Short57 = value;
        break;
      case (58):
        Short58 = value;
        break;
      case (59):
        Short59 = value;
        break;
      case (60):
        Short60 = value;
        break;
      case (62):
        Short62 = value;
        break;
      case (64):
        Short64 = value;
        break;
      case (65):
        Short65 = value;
        break;
      case (66):
        Short66 = value;
        break;
      case (67):
        Short67 = value;
        break;
      case (68):
        Short68 = value;
        break;
      case (69):
        Short69 = value;
        break;
      case (71):
        Short71 = value;
        break;
      case (72):
        Short72 = value;
        break;
      case (73):
        Short73 = value;
        break;
      case (74):
        Short74 = value;
        break;
      case (75):
        Short75 = value;
        break;
      case (76):
        Short76 = value;
        break;
      case (77):
        Short77 = value;
        break;
      case (78):
        Short78 = value;
        break;
      case (79):
        Short79 = value;
        break;
      case (80):
        Short80 = value;
        break;
      case (81):
        Short81 = value;
        break;
      case (82):
        Short82 = value;
        break;
      case (83):
        Short83 = value;
        break;
      case (84):
        Short84 = value;
        break;
      case (85):
        Short85 = value;
        break;
      case (86):
        Short86 = value;
        break;
      case (88):
        Short88 = value;
        break;
      case (89):
        Short89 = value;
        break;
      case (90):
        Short90 = value;
        break;
      case (91):
        Short91 = value;
        break;
      case (92):
        Short92 = value;
        break;
      case (93):
        Short93 = value;
        break;
      case (94):
        Short94 = value;
        break;
      case (95):
        Short95 = value;
        break;
      case (96):
        Short96 = value;
        break;
      case (98):
        Short98 = value;
        break;
      case (100):
        Short100 = value;
        break;
      case (101):
        Short101 = value;
        break;
      case (102):
        Short102 = value;
        break;
      case (103):
        Short103 = value;
        break;
      case (104):
        Short104 = value;
        break;
      case (105):
        Short105 = value;
        break;
      case (107):
        Short107 = value;
        break;
      case (108):
        Short108 = value;
        break;
      case (109):
        Short109 = value;
        break;
      case (110):
        Short110 = value;
        break;
      case (111):
        Short111 = value;
        break;
      case (112):
        Short112 = value;
        break;
      case (113):
        Short113 = value;
        break;
      case (114):
        Short114 = value;
        break;
      case (115):
        Short115 = value;
        break;
      case (116):
        Short116 = value;
        break;
      case (117):
        Short117 = value;
        break;
      case (118):
        Short118 = value;
        break;
      case (119):
        Short119 = value;
        break;
      case (120):
        Short120 = value;
        break;
      case (121):
        Short121 = value;
        break;
      case (122):
        Short122 = value;
        break;
      case (124):
        Short124 = value;
        break;
      case (125):
        Short125 = value;
        break;
      case (126):
        Short126 = value;
        break;
      case (127):
        Short127 = value;
        break;
      case (128):
        Short128 = value;
        break;
      case (129):
        Short129 = value;
        break;
      case (130):
        Short130 = value;
        break;
      case (131):
        Short131 = value;
        break;
      case (132):
        Short132 = value;
        break;
      case (134):
        Short134 = value;
        break;
      case (136):
        Short136 = value;
        break;
      case (137):
        Short137 = value;
        break;
      case (138):
        Short138 = value;
        break;
      case (139):
        Short139 = value;
        break;
      case (140):
        Short140 = value;
        break;
      case (141):
        Short141 = value;
        break;
      case (143):
        Short143 = value;
        break;
      default:
        throw new IndexOutOfBoundsException();
    }
    return true;
  }

  public static class Oid implements Serializable {

    private static final long serialVersionUID = 1L;

    public int identifier;

    public Oid() {}

    public Oid(String s) {
      identifier = Integer.parseInt(justTheId(s));
    }

    public String toString() {
      return this.getClass().getName() + ": " + identifier;
    }

    public int hashCode() {
      return identifier;
    }

    public boolean equals(Object other) {
      if (other != null && (other instanceof Oid)) {
        Oid k = (Oid) other;
        return k.identifier == this.identifier;
      }
      return false;
    }

    protected static String justTheId(String str) {
      return str.substring(str.indexOf(':') + 1);
    }
  }
}
