text: /**
  	* \file PnlWdbeLibDetail_blks.cpp
  	* job handler for job PnlWdbeLibDetail (implementation of blocks)
  	* \copyright (C) 2016-2020 MPSI Technologies GmbH
  	* \author Alexander Wirthmueller (auto-generation)
  	* \date created: 28 Nov 2020
  	*/
  // IP header --- ABOVE
  
  using namespace std;
  using namespace Sbecore;
  using namespace Xmlio;
  
  /******************************************************************************
   class PnlWdbeLibDetail::VecVDo
   ******************************************************************************/
  
  uint PnlWdbeLibDetail::VecVDo::getIx(
  			const string& sref
  		) {
  	string s = StrMod::lc(sref);
  
  	if (s == "butsaveclick") return BUTSAVECLICK;
  	if (s == "butdepviewclick") return BUTDEPVIEWCLICK;
  
  	return(0);
  };
  
  string PnlWdbeLibDetail::VecVDo::getSref(
  			const uint ix
  		) {
  	if (ix == BUTSAVECLICK) return("ButSaveClick");
  	if (ix == BUTDEPVIEWCLICK) return("ButDepViewClick");
  
  	return("");
  };
  
  /******************************************************************************
   class PnlWdbeLibDetail::ContIac
   ******************************************************************************/
  
  PnlWdbeLibDetail::ContIac::ContIac(
  			const string& TxfTit
  			, const string& TxfVer
  			, const uint numFLstDep
  			, const string& TxfDep
  			, const string& TxfCmt
  		) :
  			Block()
  		{
  	this->TxfTit = TxfTit;
  	this->TxfVer = TxfVer;
  	this->numFLstDep = numFLstDep;
  	this->TxfDep = TxfDep;
  	this->TxfCmt = TxfCmt;
  
  	mask = {TXFTIT, TXFVER, NUMFLSTDEP, TXFDEP, TXFCMT};
  };
  
  bool PnlWdbeLibDetail::ContIac::readJSON(
  			Json::Value& sup
  			, bool addbasetag
  		) {
  	clear();
  
  	bool basefound;
  
  	Json::Value& me = sup;
  	if (addbasetag) me = sup["ContIacWdbeLibDetail"];
  
  	basefound = (me != Json::nullValue);
  
  	if (basefound) {
  		if (me.isMember("TxfTit")) {TxfTit = me["TxfTit"].asString(); add(TXFTIT);};
  		if (me.isMember("TxfVer")) {TxfVer = me["TxfVer"].asString(); add(TXFVER);};
  		if (me.isMember("numFLstDep")) {numFLstDep = me["numFLstDep"].asUInt(); add(NUMFLSTDEP);};
  		if (me.isMember("TxfDep")) {TxfDep = me["TxfDep"].asString(); add(TXFDEP);};
  		if (me.isMember("TxfCmt")) {TxfCmt = me["TxfCmt"].asString(); add(TXFCMT);};
  	};
  
  	return basefound;
  };
  
  bool PnlWdbeLibDetail::ContIac::readXML(
  			xmlXPathContext* docctx
  			, string basexpath
  			, bool addbasetag
  		) {
  	clear();
  
  	bool basefound;
  
  	if (addbasetag)
  		basefound = checkUclcXPaths(docctx, basexpath, basexpath, "ContIacWdbeLibDetail");
  	else
  		basefound = checkXPath(docctx, basexpath);
  
  	string itemtag = "ContitemIacWdbeLibDetail";
  
  	if (basefound) {
  		if (extractStringAttrUclc(docctx, basexpath, itemtag, "Ci", "sref", "TxfTit", TxfTit)) add(TXFTIT);
  		if (extractStringAttrUclc(docctx, basexpath, itemtag, "Ci", "sref", "TxfVer", TxfVer)) add(TXFVER);
  		if (extractUintAttrUclc(docctx, basexpath, itemtag, "Ci", "sref", "numFLstDep", numFLstDep)) add(NUMFLSTDEP);
  		if (extractStringAttrUclc(docctx, basexpath, itemtag, "Ci", "sref", "TxfDep", TxfDep)) add(TXFDEP);
  		if (extractStringAttrUclc(docctx, basexpath, itemtag, "Ci", "sref", "TxfCmt", TxfCmt)) add(TXFCMT);
  	};
  
  	return basefound;
  };
  
  void PnlWdbeLibDetail::ContIac::writeJSON(
  			Json::Value& sup
  			, string difftag
  		) {
  	if (difftag.length() == 0) difftag = "ContIacWdbeLibDetail";
  
  	Json::Value& me = sup[difftag] = Json::Value(Json::objectValue);
  
  	me["TxfTit"] = TxfTit;
  	me["TxfVer"] = TxfVer;
  	me["numFLstDep"] = numFLstDep;
  	me["TxfDep"] = TxfDep;
  	me["TxfCmt"] = TxfCmt;
  };
  
  void PnlWdbeLibDetail::ContIac::writeXML(
  			xmlTextWriter* wr
  			, string difftag
  			, bool shorttags
  		) {
  	if (difftag.length() == 0) difftag = "ContIacWdbeLibDetail";
  
  	string itemtag;
  	if (shorttags) itemtag = "Ci";
  	else itemtag = "ContitemIacWdbeLibDetail";
  
  	xmlTextWriterStartElement(wr, BAD_CAST difftag.c_str());
  		writeStringAttr(wr, itemtag, "sref", "TxfTit", TxfTit);
  		writeStringAttr(wr, itemtag, "sref", "TxfVer", TxfVer);
  		writeUintAttr(wr, itemtag, "sref", "numFLstDep", numFLstDep);
  		writeStringAttr(wr, itemtag, "sref", "TxfDep", TxfDep);
  		writeStringAttr(wr, itemtag, "sref", "TxfCmt", TxfCmt);
  	xmlTextWriterEndElement(wr);
  };
  
  set<uint> PnlWdbeLibDetail::ContIac::comm(
  			const ContIac* comp
  		) {
  	set<uint> items;
  
  	if (TxfTit == comp->TxfTit) insert(items, TXFTIT);
  	if (TxfVer == comp->TxfVer) insert(items, TXFVER);
  	if (numFLstDep == comp->numFLstDep) insert(items, NUMFLSTDEP);
  	if (TxfDep == comp->TxfDep) insert(items, TXFDEP);
  	if (TxfCmt == comp->TxfCmt) insert(items, TXFCMT);
  
  	return(items);
  };
  
  set<uint> PnlWdbeLibDetail::ContIac::diff(
  			const ContIac* comp
  		) {
  	set<uint> commitems;
  	set<uint> diffitems;
  
  	commitems = comm(comp);
  
  	diffitems = {TXFTIT, TXFVER, NUMFLSTDEP, TXFDEP, TXFCMT};
  	for (auto it = commitems.begin(); it != commitems.end(); it++) diffitems.erase(*it);
  
  	return(diffitems);
  };
  
  /******************************************************************************
   class PnlWdbeLibDetail::ContInf
   ******************************************************************************/
  
  PnlWdbeLibDetail::ContInf::ContInf(
  			const string& TxtSrf
  		) :
  			Block()
  		{
  	this->TxtSrf = TxtSrf;
  
  	mask = {TXTSRF};
  };
  
  void PnlWdbeLibDetail::ContInf::writeJSON(
  			Json::Value& sup
  			, string difftag
  		) {
  	if (difftag.length() == 0) difftag = "ContInfWdbeLibDetail";
  
  	Json::Value& me = sup[difftag] = Json::Value(Json::objectValue);
  
  	me["TxtSrf"] = TxtSrf;
  };
  
  void PnlWdbeLibDetail::ContInf::writeXML(
  			xmlTextWriter* wr
  			, string difftag
  			, bool shorttags
  		) {
  	if (difftag.length() == 0) difftag = "ContInfWdbeLibDetail";
  
  	string itemtag;
  	if (shorttags) itemtag = "Ci";
  	else itemtag = "ContitemInfWdbeLibDetail";
  
  	xmlTextWriterStartElement(wr, BAD_CAST difftag.c_str());
  		writeStringAttr(wr, itemtag, "sref", "TxtSrf", TxtSrf);
  	xmlTextWriterEndElement(wr);
  };
  
  set<uint> PnlWdbeLibDetail::ContInf::comm(
  			const ContInf* comp
  		) {
  	set<uint> items;
  
  	if (TxtSrf == comp->TxtSrf) insert(items, TXTSRF);
  
  	return(items);
  };
  
  set<uint> PnlWdbeLibDetail::ContInf::diff(
  			const ContInf* comp
  		) {
  	set<uint> commitems;
  	set<uint> diffitems;
  
  	commitems = comm(comp);
  
  	diffitems = {TXTSRF};
  	for (auto it = commitems.begin(); it != commitems.end(); it++) diffitems.erase(*it);
  
  	return(diffitems);
  };
  
  /******************************************************************************
   class PnlWdbeLibDetail::StatApp
   ******************************************************************************/
  
  void PnlWdbeLibDetail::StatApp::writeJSON(
  			Json::Value& sup
  			, string difftag
  			, const uint ixWdbeVExpstate
  			, const bool LstDepAlt
  			, const uint LstDepNumFirstdisp
  		) {
  	if (difftag.length() == 0) difftag = "StatAppWdbeLibDetail";
  
  	Json::Value& me = sup[difftag] = Json::Value(Json::objectValue);
  
  	me["srefIxWdbeVExpstate"] = VecWdbeVExpstate::getSref(ixWdbeVExpstate);
  	me["LstDepAlt"] = LstDepAlt;
  	me["LstDepNumFirstdisp"] = LstDepNumFirstdisp;
  };
  
  void PnlWdbeLibDetail::StatApp::writeXML(
  			xmlTextWriter* wr
  			, string difftag
  			, bool shorttags
  			, const uint ixWdbeVExpstate
  			, const bool LstDepAlt
  			, const uint LstDepNumFirstdisp
  		) {
  	if (difftag.length() == 0) difftag = "StatAppWdbeLibDetail";
  
  	string itemtag;
  	if (shorttags) itemtag = "Si";
  	else itemtag = "StatitemAppWdbeLibDetail";
  
  	xmlTextWriterStartElement(wr, BAD_CAST difftag.c_str());
  		writeStringAttr(wr, itemtag, "sref", "srefIxWdbeVExpstate", VecWdbeVExpstate::getSref(ixWdbeVExpstate));
  		writeBoolAttr(wr, itemtag, "sref", "LstDepAlt", LstDepAlt);
  		writeUintAttr(wr, itemtag, "sref", "LstDepNumFirstdisp", LstDepNumFirstdisp);
  	xmlTextWriterEndElement(wr);
  };
  
  /******************************************************************************
   class PnlWdbeLibDetail::StatShr
   ******************************************************************************/
  
  PnlWdbeLibDetail::StatShr::StatShr(
  			const bool TxfDepValid
  			, const bool ButSaveAvail
  			, const bool ButSaveActive
  			, const bool TxtSrfActive
  			, const bool TxfTitActive
  			, const bool TxfVerActive
  			, const bool LstDepActive
  			, const bool ButDepViewAvail
  			, const bool ButDepViewActive
  			, const bool TxfCmtActive
  		) :
  			Block()
  		{
  	this->TxfDepValid = TxfDepValid;
  	this->ButSaveAvail = ButSaveAvail;
  	this->ButSaveActive = ButSaveActive;
  	this->TxtSrfActive = TxtSrfActive;
  	this->TxfTitActive = TxfTitActive;
  	this->TxfVerActive = TxfVerActive;
  	this->LstDepActive = LstDepActive;
  	this->ButDepViewAvail = ButDepViewAvail;
  	this->ButDepViewActive = ButDepViewActive;
  	this->TxfCmtActive = TxfCmtActive;
  
  	mask = {TXFDEPVALID, BUTSAVEAVAIL, BUTSAVEACTIVE, TXTSRFACTIVE, TXFTITACTIVE, TXFVERACTIVE, LSTDEPACTIVE, BUTDEPVIEWAVAIL, BUTDEPVIEWACTIVE, TXFCMTACTIVE};
  };
  
  void PnlWdbeLibDetail::StatShr::writeJSON(
  			Json::Value& sup
  			, string difftag
  		) {
  	if (difftag.length() == 0) difftag = "StatShrWdbeLibDetail";
  
  	Json::Value& me = sup[difftag] = Json::Value(Json::objectValue);
  
  	me["TxfDepValid"] = TxfDepValid;
  	me["ButSaveAvail"] = ButSaveAvail;
  	me["ButSaveActive"] = ButSaveActive;
  	me["TxtSrfActive"] = TxtSrfActive;
  	me["TxfTitActive"] = TxfTitActive;
  	me["TxfVerActive"] = TxfVerActive;
  	me["LstDepActive"] = LstDepActive;
  	me["ButDepViewAvail"] = ButDepViewAvail;
  	me["ButDepViewActive"] = ButDepViewActive;
  	me["TxfCmtActive"] = TxfCmtActive;
  };
  
  void PnlWdbeLibDetail::StatShr::writeXML(
  			xmlTextWriter* wr
  			, string difftag
  			, bool shorttags
  		) {
  	if (difftag.length() == 0) difftag = "StatShrWdbeLibDetail";
  
  	string itemtag;
  	if (shorttags) itemtag = "Si";
  	else itemtag = "StatitemShrWdbeLibDetail";
  
  	xmlTextWriterStartElement(wr, BAD_CAST difftag.c_str());
  		writeBoolAttr(wr, itemtag, "sref", "TxfDepValid", TxfDepValid);
  		writeBoolAttr(wr, itemtag, "sref", "ButSaveAvail", ButSaveAvail);
  		writeBoolAttr(wr, itemtag, "sref", "ButSaveActive", ButSaveActive);
  		writeBoolAttr(wr, itemtag, "sref", "TxtSrfActive", TxtSrfActive);
  		writeBoolAttr(wr, itemtag, "sref", "TxfTitActive", TxfTitActive);
  		writeBoolAttr(wr, itemtag, "sref", "TxfVerActive", TxfVerActive);
  		writeBoolAttr(wr, itemtag, "sref", "LstDepActive", LstDepActive);
  		writeBoolAttr(wr, itemtag, "sref", "ButDepViewAvail", ButDepViewAvail);
  		writeBoolAttr(wr, itemtag, "sref", "ButDepViewActive", ButDepViewActive);
  		writeBoolAttr(wr, itemtag, "sref", "TxfCmtActive", TxfCmtActive);
  	xmlTextWriterEndElement(wr);
  };
  
  set<uint> PnlWdbeLibDetail::StatShr::comm(
  			const StatShr* comp
  		) {
  	set<uint> items;
  
  	if (TxfDepValid == comp->TxfDepValid) insert(items, TXFDEPVALID);
  	if (ButSaveAvail == comp->ButSaveAvail) insert(items, BUTSAVEAVAIL);
  	if (ButSaveActive == comp->ButSaveActive) insert(items, BUTSAVEACTIVE);
  	if (TxtSrfActive == comp->TxtSrfActive) insert(items, TXTSRFACTIVE);
  	if (TxfTitActive == comp->TxfTitActive) insert(items, TXFTITACTIVE);
  	if (TxfVerActive == comp->TxfVerActive) insert(items, TXFVERACTIVE);
  	if (LstDepActive == comp->LstDepActive) insert(items, LSTDEPACTIVE);
  	if (ButDepViewAvail == comp->ButDepViewAvail) insert(items, BUTDEPVIEWAVAIL);
  	if (ButDepViewActive == comp->ButDepViewActive) insert(items, BUTDEPVIEWACTIVE);
  	if (TxfCmtActive == comp->TxfCmtActive) insert(items, TXFCMTACTIVE);
  
  	return(items);
  };
  
  set<uint> PnlWdbeLibDetail::StatShr::diff(
  			const StatShr* comp
  		) {
  	set<uint> commitems;
  	set<uint> diffitems;
  
  	commitems = comm(comp);
  
  	diffitems = {TXFDEPVALID, BUTSAVEAVAIL, BUTSAVEACTIVE, TXTSRFACTIVE, TXFTITACTIVE, TXFVERACTIVE, LSTDEPACTIVE, BUTDEPVIEWAVAIL, BUTDEPVIEWACTIVE, TXFCMTACTIVE};
  	for (auto it = commitems.begin(); it != commitems.end(); it++) diffitems.erase(*it);
  
  	return(diffitems);
  };
  
  /******************************************************************************
   class PnlWdbeLibDetail::Tag
   ******************************************************************************/
  
  void PnlWdbeLibDetail::Tag::writeJSON(
  			const uint ixWdbeVLocale
  			, Json::Value& sup
  			, string difftag
  		) {
  	if (difftag.length() == 0) difftag = "TagWdbeLibDetail";
  
  	Json::Value& me = sup[difftag] = Json::Value(Json::objectValue);
  
  	if (ixWdbeVLocale == VecWdbeVLocale::ENUS) {
  		me["CptSrf"] = "identifier";
  		me["CptTit"] = "name";
  		me["CptVer"] = "version";
  		me["CptDep"] = "libraries dependent on";
  		me["CptCmt"] = "comment";
  	};
  	me["Cpt"] = StrMod::cap(VecWdbeVTag::getTitle(VecWdbeVTag::DETAIL, ixWdbeVLocale));
  };
  
  void PnlWdbeLibDetail::Tag::writeXML(
  			const uint ixWdbeVLocale
  			, xmlTextWriter* wr
  			, string difftag
  			, bool shorttags
  		) {
  	if (difftag.length() == 0) difftag = "TagWdbeLibDetail";
  
  	string itemtag;
  	if (shorttags) itemtag = "Ti";
  	else itemtag = "TagitemWdbeLibDetail";
  
  	xmlTextWriterStartElement(wr, BAD_CAST difftag.c_str());
  		if (ixWdbeVLocale == VecWdbeVLocale::ENUS) {
  			writeStringAttr(wr, itemtag, "sref", "CptSrf", "identifier");
  			writeStringAttr(wr, itemtag, "sref", "CptTit", "name");
  			writeStringAttr(wr, itemtag, "sref", "CptVer", "version");
  			writeStringAttr(wr, itemtag, "sref", "CptDep", "libraries dependent on");
  			writeStringAttr(wr, itemtag, "sref", "CptCmt", "comment");
  		};
  		writeStringAttr(wr, itemtag, "sref", "Cpt", StrMod::cap(VecWdbeVTag::getTitle(VecWdbeVTag::DETAIL, ixWdbeVLocale)));
  	xmlTextWriterEndElement(wr);
  };
  
  /******************************************************************************
   class PnlWdbeLibDetail::DpchAppData
   ******************************************************************************/
  
  PnlWdbeLibDetail::DpchAppData::DpchAppData() :
  			DpchAppWdbe(VecWdbeVDpch::DPCHAPPWDBELIBDETAILDATA)
  		{
  };
  
  string PnlWdbeLibDetail::DpchAppData::getSrefsMask() {
  	vector<string> ss;
  	string srefs;
  
  	if (has(JREF)) ss.push_back("jref");
  	if (has(CONTIAC)) ss.push_back("contiac");
  
  	StrMod::vectorToString(ss, srefs);
  
  	return(srefs);
  };
  
  void PnlWdbeLibDetail::DpchAppData::readJSON(
  			Json::Value& sup
  			, bool addbasetag
  		) {
  	clear();
  
  	bool basefound;
  
  	Json::Value& me = sup;
  	if (addbasetag) me = sup["DpchAppWdbeLibDetailData"];
  
  	basefound = (me != Json::nullValue);
  
  	if (basefound) {
  		if (me.isMember("scrJref")) {jref = Scr::descramble(me["scrJref"].asString()); add(JREF);};
  		if (contiac.readJSON(me, true)) add(CONTIAC);
  	} else {
  		contiac = ContIac();
  	};
  };
  
  void PnlWdbeLibDetail::DpchAppData::readXML(
  			xmlXPathContext* docctx
  			, string basexpath
  			, bool addbasetag
  		) {
  	clear();
  
  	string scrJref;
  
  	bool basefound;
  
  	if (addbasetag)
  		basefound = checkUclcXPaths(docctx, basexpath, basexpath, "DpchAppWdbeLibDetailData");
  	else
  		basefound = checkXPath(docctx, basexpath);
  
  	if (basefound) {
  		if (extractStringUclc(docctx, basexpath, "scrJref", "", scrJref)) {
  			jref = Scr::descramble(scrJref);
  			add(JREF);
  		};
  		if (contiac.readXML(docctx, basexpath, true)) add(CONTIAC);
  	} else {
  		contiac = ContIac();
  	};
  };
  
  /******************************************************************************
   class PnlWdbeLibDetail::DpchAppDo
   ******************************************************************************/
  
  PnlWdbeLibDetail::DpchAppDo::DpchAppDo() :
  			DpchAppWdbe(VecWdbeVDpch::DPCHAPPWDBELIBDETAILDO)
  		{
  	ixVDo = 0;
  };
  
  string PnlWdbeLibDetail::DpchAppDo::getSrefsMask() {
  	vector<string> ss;
  	string srefs;
  
  	if (has(JREF)) ss.push_back("jref");
  	if (has(IXVDO)) ss.push_back("ixVDo");
  
  	StrMod::vectorToString(ss, srefs);
  
  	return(srefs);
  };
  
  void PnlWdbeLibDetail::DpchAppDo::readJSON(
  			Json::Value& sup
  			, bool addbasetag
  		) {
  	clear();
  
  	bool basefound;
  
  	Json::Value& me = sup;
  	if (addbasetag) me = sup["DpchAppWdbeLibDetailDo"];
  
  	basefound = (me != Json::nullValue);
  
  	if (basefound) {
  		if (me.isMember("scrJref")) {jref = Scr::descramble(me["scrJref"].asString()); add(JREF);};
  		if (me.isMember("srefIxVDo")) {ixVDo = VecVDo::getIx(me["srefIxVDo"].asString()); add(IXVDO);};
  	} else {
  	};
  };
  
  void PnlWdbeLibDetail::DpchAppDo::readXML(
  			xmlXPathContext* docctx
  			, string basexpath
  			, bool addbasetag
  		) {
  	clear();
  
  	string scrJref;
  	string srefIxVDo;
  
  	bool basefound;
  
  	if (addbasetag)
  		basefound = checkUclcXPaths(docctx, basexpath, basexpath, "DpchAppWdbeLibDetailDo");
  	else
  		basefound = checkXPath(docctx, basexpath);
  
  	if (basefound) {
  		if (extractStringUclc(docctx, basexpath, "scrJref", "", scrJref)) {
  			jref = Scr::descramble(scrJref);
  			add(JREF);
  		};
  		if (extractStringUclc(docctx, basexpath, "srefIxVDo", "", srefIxVDo)) {
  			ixVDo = VecVDo::getIx(srefIxVDo);
  			add(IXVDO);
  		};
  	} else {
  	};
  };
  
  /******************************************************************************
   class PnlWdbeLibDetail::DpchEngData
   ******************************************************************************/
  
  PnlWdbeLibDetail::DpchEngData::DpchEngData(
  			const ubigint jref
  			, ContIac* contiac
  			, ContInf* continf
  			, Feed* feedFLstDep
  			, StatShr* statshr
  			, const set<uint>& mask
  		) :
  			DpchEngWdbe(VecWdbeVDpch::DPCHENGWDBELIBDETAILDATA, jref)
  		{
  	if (find(mask, ALL)) this->mask = {JREF, CONTIAC, CONTINF, FEEDFLSTDEP, STATAPP, STATSHR, TAG};
  	else this->mask = mask;
  
  	if (find(this->mask, CONTIAC) && contiac) this->contiac = *contiac;
  	if (find(this->mask, CONTINF) && continf) this->continf = *continf;
  	if (find(this->mask, FEEDFLSTDEP) && feedFLstDep) this->feedFLstDep = *feedFLstDep;
  	if (find(this->mask, STATSHR) && statshr) this->statshr = *statshr;
  };
  
  string PnlWdbeLibDetail::DpchEngData::getSrefsMask() {
  	vector<string> ss;
  	string srefs;
  
  	if (has(JREF)) ss.push_back("jref");
  	if (has(CONTIAC)) ss.push_back("contiac");
  	if (has(CONTINF)) ss.push_back("continf");
  	if (has(FEEDFLSTDEP)) ss.push_back("feedFLstDep");
  	if (has(STATAPP)) ss.push_back("statapp");
  	if (has(STATSHR)) ss.push_back("statshr");
  	if (has(TAG)) ss.push_back("tag");
  
  	StrMod::vectorToString(ss, srefs);
  
  	return(srefs);
  };
  
  void PnlWdbeLibDetail::DpchEngData::merge(
  			DpchEngWdbe* dpcheng
  		) {
  	DpchEngData* src = (DpchEngData*) dpcheng;
  
  	if (src->has(JREF)) {jref = src->jref; add(JREF);};
  	if (src->has(CONTIAC)) {contiac = src->contiac; add(CONTIAC);};
  	if (src->has(CONTINF)) {continf = src->continf; add(CONTINF);};
  	if (src->has(FEEDFLSTDEP)) {feedFLstDep = src->feedFLstDep; add(FEEDFLSTDEP);};
  	if (src->has(STATAPP)) add(STATAPP);
  	if (src->has(STATSHR)) {statshr = src->statshr; add(STATSHR);};
  	if (src->has(TAG)) add(TAG);
  };
  
  void PnlWdbeLibDetail::DpchEngData::writeJSON(
  			const uint ixWdbeVLocale
  			, Json::Value& sup
  		) {
  	Json::Value& me = sup["DpchEngWdbeLibDetailData"] = Json::Value(Json::objectValue);
  
  	if (has(JREF)) me["scrJref"] = Scr::scramble(jref);
  	if (has(CONTIAC)) contiac.writeJSON(me);
  	if (has(CONTINF)) continf.writeJSON(me);
  	if (has(FEEDFLSTDEP)) feedFLstDep.writeJSON(me);
  	if (has(STATAPP)) StatApp::writeJSON(me);
  	if (has(STATSHR)) statshr.writeJSON(me);
  	if (has(TAG)) Tag::writeJSON(ixWdbeVLocale, me);
  };
  
  void PnlWdbeLibDetail::DpchEngData::writeXML(
  			const uint ixWdbeVLocale
  			, xmlTextWriter* wr
  		) {
  	xmlTextWriterStartElement(wr, BAD_CAST "DpchEngWdbeLibDetailData");
  	xmlTextWriterWriteAttribute(wr, BAD_CAST "xmlns", BAD_CAST "http://www.mpsitech.com/wdbe");
  		if (has(JREF)) writeString(wr, "scrJref", Scr::scramble(jref));
  		if (has(CONTIAC)) contiac.writeXML(wr);
  		if (has(CONTINF)) continf.writeXML(wr);
  		if (has(FEEDFLSTDEP)) feedFLstDep.writeXML(wr);
  		if (has(STATAPP)) StatApp::writeXML(wr);
  		if (has(STATSHR)) statshr.writeXML(wr);
  		if (has(TAG)) Tag::writeXML(ixWdbeVLocale, wr);
  	xmlTextWriterEndElement(wr);
  };
  