Clazz.declarePackage("J.shape");
Clazz.load(["J.shape.AtomShape", "java.util.Hashtable", "JU.P3"], "J.shape.Labels", ["JU.AU", "$.BS", "$.PT", "J.c.PAL", "JM.LabelToken", "$.Text", "JS.SV", "JU.BSUtil", "$.C", "$.Font", "JV.JC"], function(){
var c$ = Clazz.decorateAsClass(function(){
this.strings = null;
this.formats = null;
this.bgcolixes = null;
this.fids = null;
this.offsets = null;
this.atomLabels = null;
this.labelBoxes = null;
this.bsFontSet = null;
this.bsBgColixSet = null;
this.defaultOffset = 0;
this.defaultAlignment = 0;
this.defaultZPos = 0;
this.defaultFontId = 0;
this.defaultColix = 0;
this.defaultBgcolix = 0;
this.defaultPaletteID = 0;
this.defaultPointer = 0;
this.zeroFontId = 0;
this.setDefaults = false;
this.isScaled = false;
this.scalePixelsPerMicron = 0;
this.ptTemp = null;
this.pickedAtom = -1;
this.lastPicked = -1;
this.pickedOffset = 0;
this.pickedX = 0;
this.pickedY = 0;
Clazz.instantialize(this, arguments);}, J.shape, "Labels", J.shape.AtomShape);
Clazz.prepareFields (c$, function(){
this.atomLabels =  new java.util.Hashtable();
this.ptTemp =  new JU.P3();
});
Clazz.overrideMethod(c$, "initShape", 
function(){
this.defaultFontId = this.zeroFontId = this.vwr.gdata.getFont3DFSS("SansSerif", "Plain", 13).fid;
this.defaultColix = 0;
this.defaultBgcolix = 0;
this.defaultOffset = 8396800;
this.defaultAlignment = 4;
this.defaultPointer = 0;
this.defaultZPos = 0;
this.translucentAllowed = false;
});
Clazz.overrideMethod(c$, "setProperty", 
function(propertyName, value, bs){
this.isActive = true;
var atoms = this.ms.at;
var ac = this.ms.ac;
if ("setDefaults" === propertyName) {
this.setDefaults = (value).booleanValue();
return;
}if ("color" === propertyName) {
var pid = J.c.PAL.pidOf(value);
var colix = JU.C.getColixO(value);
if (this.setDefaults) {
this.defaultColix = colix;
this.defaultPaletteID = pid;
} else {
var n = this.checkColixLength(colix, bs.length());
for (var i = bs.nextSetBit(0); i >= 0 && i < n; i = bs.nextSetBit(i + 1)) this.setLabelColix(i, colix, pid);

}return;
}if ("scalereference" === propertyName) {
if (this.strings == null) return;
var val = (value).floatValue();
var scalePixelsPerMicron = (val == 0 ? 0 : 10000 / val);
var n = Math.min(ac, this.strings.length);
for (var i = bs.nextSetBit(0); i >= 0 && i < n; i = bs.nextSetBit(i + 1)) {
var text = this.getLabel(i);
if (text == null) {
text = JM.Text.newLabel(this.vwr, null, this.strings[i], 0, 0, 0, scalePixelsPerMicron);
this.putLabel(i, text);
} else {
text.setScalePixelsPerMicron(scalePixelsPerMicron);
}}
return;
}if ("label" === propertyName) {
var isPicked = (this.isPickingMode() && bs.cardinality() == 1 && bs.nextSetBit(0) == this.lastPicked);
this.setScaling();
var tokens = null;
var nbs = this.checkStringLength(bs.length());
if (this.defaultColix != 0 || this.defaultPaletteID != 0) this.checkColixLength(this.defaultColix, bs.length());
if (this.defaultBgcolix != 0) this.checkBgColixLength(this.defaultBgcolix, bs.length());
if (Clazz.instanceOf(value,"JU.Lst")) {
var list = value;
var n = list.size();
tokens =  Clazz.newArray(-1, [null]);
for (var pt = 0, i = bs.nextSetBit(0); i >= 0 && i < nbs; i = bs.nextSetBit(i + 1)) {
if (pt >= n) {
this.setLabel(J.shape.Labels.nullToken, "", i, !isPicked);
continue;
}tokens[0] = null;
this.setLabel(tokens, JS.SV.sValue(list.get(pt++)), i, !isPicked);
}
} else {
var strLabel = value;
tokens = (strLabel == null || strLabel.length == 0 ? J.shape.Labels.nullToken :  Clazz.newArray(-1, [null]));
for (var i = bs.nextSetBit(0); i >= 0 && i < ac; i = bs.nextSetBit(i + 1)) this.setLabel(tokens, strLabel, i, !isPicked);

}if (this.vwr.getModelkitPropertySafely(null) === Boolean.TRUE) {
this.vwr.shm.notifyAtoms("atomslabeled",  Clazz.newArray(-1, [bs, null]));
}return;
}if (propertyName.startsWith("label:")) {
this.setScaling();
this.checkStringLength(ac);
var label = propertyName.substring(6);
if (label.length == 0) label = null;
this.setLabel( Clazz.newArray(-1, [null]), label, (value).intValue(), false);
return;
}if ("clearBoxes" === propertyName) {
this.labelBoxes = null;
return;
}if ("translucency" === propertyName || "bgtranslucency" === propertyName) {
return;
}if ("bgcolor" === propertyName) {
this.isActive = true;
if (this.bsBgColixSet == null) this.bsBgColixSet = JU.BS.newN(ac);
var bgcolix = JU.C.getColixO(value);
if (this.setDefaults) {
this.defaultBgcolix = bgcolix;
} else {
var n = this.checkBgColixLength(bgcolix, bs.length());
for (var i = bs.nextSetBit(0); i >= 0 && i < n; i = bs.nextSetBit(i + 1)) this.setBgcolix(i, bgcolix);

}return;
}if (this.bsFontSet == null) this.bsFontSet = JU.BS.newN(ac);
if ("fontsize" === propertyName) {
var fontsize = (value).intValue();
if (fontsize < 0) {
this.fids = null;
return;
}var f;
if (this.setDefaults) {
f = JU.Font.getFont3D(this.defaultFontId);
this.defaultFontId = this.vwr.getFont3D(f.fontFace, f.fontStyle, fontsize).fid;
} else {
for (var i = bs.nextSetBit(0); i >= 0 && i < ac; i = bs.nextSetBit(i + 1)) {
f = JU.Font.getFont3D(this.fids == null || i >= this.fids.length ? this.fids[i] : this.defaultFontId);
this.setFont(i, this.vwr.getFont3D(f.fontFace, f.fontStyle, fontsize).fid);
}
}return;
}if ("font" === propertyName) {
var fid = (value).fid;
if (this.setDefaults) {
this.defaultFontId = fid;
} else {
for (var i = bs.nextSetBit(0); i >= 0 && i < ac; i = bs.nextSetBit(i + 1)) this.setFont(i, fid);

}return;
}if ("offset" === propertyName) {
if (Clazz.instanceOf(value, Integer)) {
var offset = (value).intValue();
if (this.setDefaults) {
this.defaultOffset = offset;
} else {
for (var i = bs.nextSetBit(0); i >= 0 && i < ac; i = bs.nextSetBit(i + 1)) this.setOffsets(i, offset);

}} else if (!this.setDefaults) {
this.checkColixLength(-1, ac);
for (var i = bs.nextSetBit(0); i >= 0 && i < ac; i = bs.nextSetBit(i + 1)) this.setPymolOffset(i, value);

}return;
}if ("align" === propertyName) {
var type = value;
var hAlignment = (type.equalsIgnoreCase("right") ? 12 : type.equalsIgnoreCase("center") ? 8 : 4);
if (this.setDefaults) {
this.defaultAlignment = hAlignment;
} else {
for (var i = bs.nextSetBit(0); i >= 0 && i < ac; i = bs.nextSetBit(i + 1)) this.setHorizAlignment(i, hAlignment);

}return;
}if ("pointer" === propertyName) {
var pointer = (value).intValue();
if (this.setDefaults) {
this.defaultPointer = pointer;
} else {
for (var i = bs.nextSetBit(0); i >= 0 && i < ac; i = bs.nextSetBit(i + 1)) this.setPointer(i, pointer);

}return;
}if ("front" === propertyName) {
var TF = (value).booleanValue();
if (this.setDefaults) {
this.defaultZPos = (TF ? 32 : 0);
} else {
for (var i = bs.nextSetBit(0); i >= 0 && i < ac; i = bs.nextSetBit(i + 1)) this.setZPos(i, 32, TF);

}return;
}if ("group" === propertyName) {
var TF = (value).booleanValue();
if (this.setDefaults) {
this.defaultZPos = (TF ? 16 : 0);
} else {
for (var i = bs.nextSetBit(0); i >= 0 && i < ac; i = bs.nextSetBit(i + 1)) this.setZPos(i, 16, TF);

}return;
}if ("display" === propertyName || "toggleLabel" === propertyName) {
var mode = ("toggleLabel" === propertyName ? 0 : (value).booleanValue() ? 1 : -1);
if (this.mads == null) this.mads =  Clazz.newShortArray (ac, 0);
var strLabelPDB = null;
var tokensPDB = null;
var strLabelUNK = null;
var tokensUNK = null;
var strLabel;
var tokens;
var nstr = this.checkStringLength(bs.length());
var bgcolix = this.defaultBgcolix;
var nbg = this.checkBgColixLength(bgcolix, bs.length());
var thisMad = (mode >= 0 ? 1 : -1);
for (var i = bs.nextSetBit(0); i >= 0 && i < ac; i = bs.nextSetBit(i + 1)) {
var atom = atoms[i];
if (i < nstr && this.strings[i] != null) {
this.mads[i] = (mode == 1 || mode == 0 && this.mads[i] < 0 ? 1 : -1);
} else {
this.mads[i] = thisMad;
if (atom.getGroup3(false).equals("UNK")) {
if (strLabelUNK == null) {
strLabelUNK = this.vwr.getStandardLabelFormat(1);
tokensUNK = JM.LabelToken.compile(this.vwr, strLabelUNK, '\0', null);
}strLabel = strLabelUNK;
tokens = tokensUNK;
} else {
if (strLabelPDB == null) {
strLabelPDB = this.vwr.getStandardLabelFormat(2);
tokensPDB = JM.LabelToken.compile(this.vwr, strLabelPDB, '\0', null);
}strLabel = strLabelPDB;
tokens = tokensPDB;
}this.strings[i] = JM.LabelToken.formatLabelAtomArray(this.vwr, atom, tokens, '\0', null, this.ptTemp);
this.formats[i] = strLabel;
this.bsSizeSet.set(i);
if (i < nbg && !this.bsBgColixSet.get(i)) this.setBgcolix(i, this.defaultBgcolix);
}atom.setShapeVisibility(this.vf, this.strings != null && i < this.strings.length && this.strings[i] != null && this.mads[i] >= 0);
}
return;
}if ("pymolLabels" === propertyName) {
this.setPymolLabels(value, bs);
return;
}if (propertyName === "deleteModelAtoms") {
this.labelBoxes = null;
var firstAtomDeleted = ((value)[2])[1];
var nAtomsDeleted = ((value)[2])[2];
this.fids = JU.AU.deleteElements(this.fids, firstAtomDeleted, nAtomsDeleted);
this.bgcolixes = JU.AU.deleteElements(this.bgcolixes, firstAtomDeleted, nAtomsDeleted);
this.offsets = JU.AU.deleteElements(this.offsets, firstAtomDeleted, nAtomsDeleted);
this.formats = JU.AU.deleteElements(this.formats, firstAtomDeleted, nAtomsDeleted);
this.strings = JU.AU.deleteElements(this.strings, firstAtomDeleted, nAtomsDeleted);
JU.BSUtil.deleteBits(this.bsFontSet, bs);
JU.BSUtil.deleteBits(this.bsBgColixSet, bs);
}this.setPropAS(propertyName, value, bs);
}, "~S,~O,JU.BS");
Clazz.defineMethod(c$, "isPickingMode", 
function(){
return (this.vwr.getPickingMode() == 2 && this.labelBoxes != null);
});
Clazz.defineMethod(c$, "checkStringLength", 
function(n){
var ac = this.ms.ac;
n = Math.min(ac, n);
if (this.strings == null || n > this.strings.length) {
this.formats = JU.AU.ensureLengthS(this.formats, n);
this.strings = JU.AU.ensureLengthS(this.strings, n);
if (this.bsSizeSet == null) this.bsSizeSet = JU.BS.newN(n);
}return n;
}, "~N");
Clazz.defineMethod(c$, "checkBgColixLength", 
function(colix, n){
n = Math.min(this.ms.ac, n);
if (colix == 0) return (this.bgcolixes == null ? 0 : this.bgcolixes.length);
if (this.bgcolixes == null || n > this.bgcolixes.length) this.bgcolixes = JU.AU.ensureLengthShort(this.bgcolixes, n);
return n;
}, "~N,~N");
Clazz.defineMethod(c$, "setPymolLabels", 
function(labels, bsSelected){
this.setScaling();
var n = this.checkStringLength(this.ms.ac);
this.checkColixLength(-1, n);
for (var i = bsSelected.nextSetBit(0); i >= 0 && i < n; i = bsSelected.nextSetBit(i + 1)) this.setPymolLabel(i, labels.get(Integer.$valueOf(i)), null);

}, "java.util.Map,JU.BS");
Clazz.defineMethod(c$, "setPymolOffset", 
function(i, value){
var text = this.getLabel(i);
if (text == null) {
if (this.strings == null || i >= this.strings.length || this.strings[i] == null) return;
var fid = (this.bsFontSet != null && this.bsFontSet.get(i) ? this.fids[i] : -1);
if (fid < 0) this.setFont(i, fid = this.defaultFontId);
var a = this.ms.at[i];
text = JM.Text.newLabel(this.vwr, JU.Font.getFont3D(fid), this.strings[i], this.getColix2(i, a, false), this.getColix2(i, a, true), 0, this.scalePixelsPerMicron);
this.setPymolLabel(i, text, this.formats[i]);
}text.setPymolOffset(value);
}, "~N,~A");
Clazz.defineMethod(c$, "setScaling", 
function(){
this.isActive = true;
if (this.bsSizeSet == null) this.bsSizeSet = JU.BS.newN(this.ms.ac);
this.isScaled = this.vwr.getBoolean(603979847);
this.scalePixelsPerMicron = (this.isScaled ? this.vwr.getScalePixelsPerAngstrom(false) * 10000 : 0);
});
Clazz.defineMethod(c$, "setPymolLabel", 
function(i, t, format){
if (t == null) return;
var label = t.text;
var atom = this.ms.at[i];
if (atom == null) return;
this.addString(atom, i, label, format == null ? JU.PT.rep(label, "%", "%%") : format);
atom.setShapeVisibility(this.vf, true);
if (t.colix >= 0) this.setLabelColix(i, t.colix, J.c.PAL.UNKNOWN.id);
this.setFont(i, t.font.fid);
this.putLabel(i, t);
}, "~N,JM.Text,~S");
Clazz.defineMethod(c$, "setLabel", 
function(temp, strLabel, i, doAll){
var atom = this.ms.at[i];
var tokens = temp[0];
if (tokens == null) tokens = temp[0] = JM.LabelToken.compile(this.vwr, strLabel, '\0', null);
var label = (tokens == null ? null : JM.LabelToken.formatLabelAtomArray(this.vwr, atom, tokens, '\0', null, this.ptTemp));
var isNew = this.addString(atom, i, label, strLabel);
doAll = new Boolean (doAll |(isNew || label == null)).valueOf();
var text = this.getLabel(i);
if (this.isScaled && doAll) {
text = JM.Text.newLabel(this.vwr, null, label, 0, 0, 0, this.scalePixelsPerMicron);
this.putLabel(i, text);
} else if (text != null) {
if (label == null) {
this.putLabel(i, null);
} else {
text.setText(label);
text.textUnformatted = strLabel;
}}if (!doAll) return;
if (this.defaultOffset != 8396800) this.setOffsets(i, this.defaultOffset);
if (this.defaultAlignment != 4) this.setHorizAlignment(i, this.defaultAlignment);
if ((this.defaultZPos & 32) != 0) this.setZPos(i, 32, true);
 else if ((this.defaultZPos & 16) != 0) this.setZPos(i, 16, true);
if (this.defaultPointer != 0) this.setPointer(i, this.defaultPointer);
if (this.defaultColix != 0 || this.defaultPaletteID != 0) this.setLabelColix(i, this.defaultColix, this.defaultPaletteID);
if (this.defaultBgcolix != 0) this.setBgcolix(i, this.defaultBgcolix);
if (this.defaultFontId != this.zeroFontId) this.setFont(i, this.defaultFontId);
}, "~A,~S,~N,~B");
Clazz.defineMethod(c$, "addString", 
function(atom, i, label, strLabel){
atom.setShapeVisibility(this.vf, label != null);
var notNull = (strLabel != null);
var isNew = (this.strings[i] == null);
this.strings[i] = label;
this.formats[i] = (notNull && strLabel.indexOf("%{") >= 0 ? label : strLabel);
this.bsSizeSet.setBitTo(i, notNull);
return isNew;
}, "JM.Atom,~N,~S,~S");
Clazz.overrideMethod(c$, "getProperty", 
function(property, index){
if (property.equals("font")) return JU.Font.getFont3D(this.defaultFontId);
if (property.equals("offsets")) return this.offsets;
if (property.equals("label")) return (this.strings != null && index < this.strings.length && this.strings[index] != null ? this.strings[index] : "");
return null;
}, "~S,~N");
Clazz.defineMethod(c$, "putLabel", 
function(i, text){
if (text == null) this.atomLabels.remove(Integer.$valueOf(i));
 else {
this.atomLabels.put(Integer.$valueOf(i), text);
text.textUnformatted = this.formats[i];
}}, "~N,JM.Text");
Clazz.defineMethod(c$, "getLabel", 
function(i){
return this.atomLabels.get(Integer.$valueOf(i));
}, "~N");
Clazz.defineMethod(c$, "putBox", 
function(i, boxXY){
if (this.labelBoxes == null) this.labelBoxes =  new java.util.Hashtable();
this.labelBoxes.put(Integer.$valueOf(i), boxXY);
}, "~N,~A");
Clazz.defineMethod(c$, "getBox", 
function(i){
if (this.labelBoxes == null) return null;
return this.labelBoxes.get(Integer.$valueOf(i));
}, "~N");
Clazz.defineMethod(c$, "setLabelColix", 
function(i, colix, pid){
this.setColixAndPalette(colix, pid, i);
var text;
if (this.colixes != null && ((text = this.getLabel(i)) != null)) text.colix = this.colixes[i];
}, "~N,~N,~N");
Clazz.defineMethod(c$, "setBgcolix", 
function(i, bgcolix){
this.bgcolixes[i] = bgcolix;
this.bsBgColixSet.setBitTo(i, bgcolix != 0);
var text = this.getLabel(i);
if (text != null) text.bgcolix = bgcolix;
}, "~N,~N");
Clazz.defineMethod(c$, "setOffsets", 
function(i, offset){
if (this.offsets == null || i >= this.offsets.length) {
if (offset == 8396800) return;
this.offsets = JU.AU.ensureLengthI(this.offsets, this.ms.ac);
}this.offsets[i] = (this.offsets[i] & 63) | offset;
var text = this.getLabel(i);
if (text != null) text.setOffset(offset);
}, "~N,~N");
Clazz.defineMethod(c$, "setHorizAlignment", 
function(i, hAlign){
if (this.offsets == null || i >= this.offsets.length) {
switch (hAlign) {
case 0:
case 4:
return;
}
this.offsets = JU.AU.ensureLengthI(this.offsets, this.ms.ac);
}if (hAlign == 0) hAlign = 4;
this.offsets[i] = JV.JC.setHorizAlignment(this.offsets[i], hAlign);
var text = this.getLabel(i);
if (text != null) text.setAlignment(hAlign);
}, "~N,~N");
Clazz.defineMethod(c$, "setPointer", 
function(i, pointer){
if (this.offsets == null || i >= this.offsets.length) {
if (pointer == 0) return;
this.offsets = JU.AU.ensureLengthI(this.offsets, this.ms.ac);
}this.offsets[i] = JV.JC.setPointer(this.offsets[i], pointer);
var text = this.getLabel(i);
if (text != null) text.pointer = pointer;
}, "~N,~N");
Clazz.defineMethod(c$, "setZPos", 
function(i, flag, TF){
if (this.offsets == null || i >= this.offsets.length) {
if (!TF) return;
this.offsets = JU.AU.ensureLengthI(this.offsets, this.ms.ac);
}this.offsets[i] = JV.JC.setZPosition(this.offsets[i], TF ? flag : 0);
}, "~N,~N,~B");
Clazz.defineMethod(c$, "setFont", 
function(i, fid){
if (this.fids == null || i >= this.fids.length) {
if (fid == this.zeroFontId) return;
this.fids = JU.AU.ensureLengthI(this.fids, this.ms.ac);
}this.fids[i] = fid;
this.bsFontSet.set(i);
var text = this.getLabel(i);
if (text != null) {
text.setFontFromFid(fid);
}}, "~N,~N");
Clazz.overrideMethod(c$, "setAtomClickability", 
function(){
if (this.strings == null) return;
for (var i = this.strings.length; --i >= 0; ) {
var label = this.strings[i];
if (label != null && this.ms.at.length > i && this.ms.at[i] != null && !this.ms.isAtomHidden(i)) this.ms.at[i].setClickable(this.vf);
}
});
Clazz.overrideMethod(c$, "checkObjectClicked", 
function(x, y, modifiers, bsVisible, drawPicking){
if (!this.isPickingMode()) return null;
var iAtom = this.findNearestLabel(x, y);
if (iAtom < 0) return null;
var map =  new java.util.Hashtable();
map.put("type", "label");
map.put("atomIndex", Integer.$valueOf(iAtom));
this.lastPicked = iAtom;
return map;
}, "~N,~N,~N,JU.BS,~B");
Clazz.overrideMethod(c$, "checkObjectDragged", 
function(prevX, prevY, x, y, dragAction, bsVisible){
if (!this.isPickingMode()) return false;
if (prevX == -2147483648) {
var iAtom = this.findNearestLabel(x, y);
if (iAtom >= 0) {
this.pickedAtom = iAtom;
this.lastPicked = this.pickedAtom;
this.vwr.acm.setDragAtomIndex(iAtom);
this.pickedX = x;
this.pickedY = y;
this.pickedOffset = (this.offsets == null || this.pickedAtom >= this.offsets.length ? 8396800 : this.offsets[this.pickedAtom]);
return true;
}return false;
}if (prevX == 2147483647) this.pickedAtom = -1;
if (this.pickedAtom < 0) return false;
this.move2D(this.pickedAtom, x, y);
return true;
}, "~N,~N,~N,~N,~N,JU.BS");
Clazz.defineMethod(c$, "findNearestLabel", 
function(x, y){
if (this.labelBoxes == null) return -1;
var dmin = 3.4028235E38;
var imin = -1;
var zmin = 3.4028235E38;
var afactor = (this.vwr.antialiased ? 2 : 1);
var atoms = this.ms.at;
for (var entry, $entry = this.labelBoxes.entrySet().iterator (); $entry.hasNext()&& ((entry = $entry.next ()) || true);) {
if (!atoms[entry.getKey().intValue()].isVisible(this.vf | 9)) continue;
var boxXY = entry.getValue();
var dx = (x - boxXY[0]) * afactor;
var dy = (y - boxXY[1]) * afactor;
if (dx <= 0 || dy <= 0 || dx >= boxXY[2] || dy >= boxXY[3] || boxXY[4] > zmin) continue;
zmin = boxXY[4];
var d = Math.min(Math.abs(dx - boxXY[2] / 2), Math.abs(dy - boxXY[3] / 2));
if (d <= dmin) {
dmin = d;
imin = entry.getKey().intValue();
}}
return imin;
}, "~N,~N");
Clazz.defineMethod(c$, "move2D", 
function(pickedAtom, x, y){
var xOffset = JV.JC.getXOffset(this.pickedOffset);
var yOffset = JV.JC.getYOffset(this.pickedOffset);
xOffset += x - this.pickedX;
yOffset -= y - this.pickedY;
var offset = JV.JC.getOffset(xOffset, yOffset, true);
this.setOffsets(pickedAtom, offset);
}, "~N,~N,~N");
Clazz.defineMethod(c$, "getColix2", 
function(i, atom, isBg){
var colix;
if (isBg) {
colix = (this.bgcolixes == null || i >= this.bgcolixes.length) ? 0 : this.bgcolixes[i];
} else {
colix = (this.colixes == null || i >= this.colixes.length) ? 0 : this.colixes[i];
colix = JU.C.getColixInherited(colix, atom.colixAtom);
if (JU.C.isColixTranslucent(colix)) colix = JU.C.getColixTranslucent3(colix, false, 0);
}return colix;
}, "~N,JM.Atom,~B");
c$.nullToken =  Clazz.newArray(-1, [null]);
});
;//5.0.1-v7 Mon Aug 17 10:07:10 MDT 2026
