From 787b1cec2f06fee21cd476e7af30f2371f82a16a Mon Sep 17 00:00:00 2001 From: msojocs Date: Wed, 7 Jun 2023 20:24:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=90=AD=E5=BB=BA=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 4 +- src/include/define.h | 9 + src/include/usage.h | 2 +- src/include/wxml.h | 72 + src/utils/file.cpp | 1 + src/wcc.cpp | 128 +- src/wcc/usage.cpp | 4 +- src/wxml/compiler.cpp | 21 + src/wxml/dom_lib.cpp | 0 src/wxml/expr_lib/tokenizer.cpp | 0 src/wxml/name_allocator.cpp | 4 + test/vector | Bin 0 -> 36416 bytes test/vector.cpp | 12 + test/{main.cpp => wcc.cpp} | 70 +- test/wcc.disassembly.cpp | 191709 +++++++++++++++++++++++++++++ 15 files changed, 192001 insertions(+), 35 deletions(-) create mode 100644 src/include/define.h create mode 100644 src/include/wxml.h create mode 100644 src/wxml/compiler.cpp create mode 100644 src/wxml/dom_lib.cpp create mode 100644 src/wxml/expr_lib/tokenizer.cpp create mode 100644 src/wxml/name_allocator.cpp create mode 100755 test/vector create mode 100644 test/vector.cpp rename test/{main.cpp => wcc.cpp} (95%) create mode 100644 test/wcc.disassembly.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 1dae3d4..d75b922 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,9 @@ add_executable(wcc src/wcc/usage.cpp src/utils/file.cpp ) -add_executable(wcsc src/wcsc.cpp) +add_executable(wcsc + src/wcsc.cpp + ) set(CPACK_PROJECT_NAME ${PROJECT_NAME}) set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) diff --git a/src/include/define.h b/src/include/define.h new file mode 100644 index 0000000..50c86c8 --- /dev/null +++ b/src/include/define.h @@ -0,0 +1,9 @@ +#ifndef __DEFINE_H__ +#define __DEFINE_H__ + +const char aIfThisThisGUnd[] = "if(this&&this.__g===undefined)Object.defineProperty(this,\"__g\",{configurable:false,enumerable:false,writable:false,value:function(){function D(e,t){if(typeof t!=\"undefined\")e.children.push(t)}function S(e){if(typeof e!=\"undefined\")return{tag:\"virtual\",wxKey:e,children:[]};return{tag:\"virtual\",children:[]}}function v(e){$gwxc++;if($gwxc>=16e3){throw\"Dom limit exceeded, please check if there's any mistake you've made.\"}return{tag:\"wx-\"+e,attr:{},children:[],n:[],raw:{},generics:{}}}function e(e,t){t&&e.properities.push(t)}function t(e,t,r){return typeof e[r]!=\"undefined\"?e[r]:t[r]}function u(e){console.warn(\"WXMLRT_\"+g+\":\"+e)}function r(e,t){u(t+\":-1:-1:-1: Template `\"+e+\"` is being called recursively, will be stop.\")}var s=console.warn;var n=console.log;function o(){function e(){}e.prototype={hn:function(e,t){if(typeof e==\"object\"){var r=0;var n=false,o=false;for(var a in e){n=n|a===\"__value__\";o=o|a===\"__wxspec__\";r++;if(r>2)break}return r==2&&n&&o&&(t||e.__wxspec__!==\"m\"||this.hn(e.__value__)===\"h\")?\"h\":\"n\"}return\"n\"},nh:function(e,t){return{__value__:e,__wxspec__:t?t:true}},rv:function(e){return this.hn(e,true)===\"n\"?e:this.rv(e.__value__)},hm:function(e){if(typeof e==\"object\"){var t=0;var r=false,n=false;for(var o in e){r=r|o===\"__value__\";n=n|o===\"__wxspec__\";t++;if(t>2)break}return t==2&&r&&n&&(e.__wxspec__===\"m\"||this.hm(e.__value__))}return false}};return new e}var A=o();function T(e){var t=e.split(\"\\n \"+\" \"+\" \"+\" \");for(var r=0;r=\":case\"<=\":case\">\":case\"<\":case\"<<\":case\">>\":p=x(e[1],t,r,n,o,a);u=x(e[2],t,r,n,o,a);l=M&&(A.hn(p)===\"h\"||A.hn(u)===\"h\");switch(i){case\"+\":f=A.rv(p)+A.rv(u);break;case\"*\":f=A.rv(p)*A.rv(u);break;case\"/\":f=A.rv(p)/A.rv(u);break;case\"%\":f=A.rv(p)%A.rv(u);break;case\"|\":f=A.rv(p)|A.rv(u);break;case\"^\":f=A.rv(p)^A.rv(u);break;case\"&\":f=A.rv(p)&A.rv(u);break;case\"===\":f=A.rv(p)===A.rv(u);break;case\"==\":f=A.rv(p)==A.rv(u);break;case\"!=\":f=A.rv(p)!=A.rv(u);break;case\"!==\":f=A.rv(p)!==A.rv(u);break;case\">=\":f=A.rv(p)>=A.rv(u);break;case\"<=\":f=A.rv(p)<=A.rv(u);break;case\">\":f=A.rv(p)>A.rv(u);break;case\"<\":f=A.rv(p)>\":f=A.rv(p)>>A.rv(u);break;default:break}return l?A.nh(f,\"c\"):f;break;case\"-\":p=e.length===3?x(e[1],t,r,n,o,a):0;u=e.length===3?x(e[2],t,r,n,o,a):x(e[1],t,r,n,o,a);l=M&&(A.hn(p)===\"h\"||A.hn(u)===\"h\");f=l?A.rv(p)-A.rv(u):p-u;return l?A.nh(f,\"c\"):f;break;case\"!\":p=x(e[1],t,r,n,o,a);l=M&&A.hn(p)==\"h\";f=!A.rv(p);return l?A.nh(f,\"c\"):f;case\"~\":p=x(e[1],t,r,n,o,a);l=M&&A.hn(p)==\"h\";f=~A.rv(p);return l?A.nh(f,\"c\"):f;default:s(\"unrecognized op\"+i)}}function x(e,t,r,n,o,a){var i=e[0];var p=false;if(typeof a!==\"undefined\")o.ap=a;if(typeof i===\"object\"){var u=i[0];var l,f,v,c,s,y,b,d,h,_,g;switch(u){case 2:return m(e,t,r,n,o);break;case 4:return x(e[1],t,r,n,o,p);break;case 5:switch(e.length){case 2:l=x(e[1],t,r,n,o,p);return M?[l]:[A.rv(l)];return[l];break;case 1:return[];break;default:l=x(e[1],t,r,n,o,p);v=x(e[2],t,r,n,o,p);l.push(M?v:A.rv(v));return l;break}break;case 6:l=x(e[1],t,r,n,o);var w=o.ap;h=A.hn(l)===\"h\";f=h?A.rv(l):l;o.is_affected|=h;if(M){if(f===null||typeof f===\"undefined\"){return h?A.nh(undefined,\"e\"):undefined}v=x(e[2],t,r,n,o,p);_=A.hn(v)===\"h\";c=_?A.rv(v):v;o.ap=w;o.is_affected|=_;if(c===null||typeof c===\"undefined\"||c===\"__proto__\"||c===\"prototype\"||c===\"caller\"){return h||_?A.nh(undefined,\"e\"):undefined}y=f[c];if(typeof y===\"function\"&&!w)y=undefined;g=A.hn(y)===\"h\";o.is_affected|=g;return h||_?g?y:A.nh(y,\"e\"):y}else{if(f===null||typeof f===\"undefined\"){return undefined}v=x(e[2],t,r,n,o,p);_=A.hn(v)===\"h\";c=_?A.rv(v):v;o.ap=w;o.is_affected|=_;if(c===null||typeof c===\"undefined\"||c===\"__proto__\"||c===\"prototype\"||c===\"caller\"){return undefined}y=f[c];if(typeof y===\"function\"&&!w)y=undefined;g=A.hn(y)===\"h\";o.is_affected|=g;return g?A.rv(y):y}case 7:switch(e[1][0]){case 11:o.is_affected|=A.hn(n)===\"h\";return n;case 3:b=A.rv(r);d=A.rv(t);v=e[1][1];if(n&&n.f&&n.f.hasOwnProperty(v)){l=n.f;o.ap=true}else{l=b&&b.hasOwnProperty(v)?r:d&&d.hasOwnProperty(v)?t:undefined}if(M){if(l){h=A.hn(l)===\"h\";f=h?A.rv(l):l;y=f[v];g=A.hn(y)===\"h\";o.is_affected|=h||g;y=h&&!g?A.nh(y,\"e\"):y;return y}}else{if(l){h=A.hn(l)===\"h\";f=h?A.rv(l):l;y=f[v];g=A.hn(y)===\"h\";o.is_affected|=h||g;return A.rv(y)}}return undefined}break;case 8:l={};l[e[1]]=x(e[2],t,r,n,o,p);return l;break;case 9:l=x(e[1],t,r,n,o,p);v=x(e[2],t,r,n,o,p);function O(e,t,r){var n,o;h=A.hn(e)===\"h\";_=A.hn(t)===\"h\";f=A.rv(e);c=A.rv(t);for(var a in c){if(r||!f.hasOwnProperty(a)){f[a]=M?_?A.nh(c[a],\"e\"):c[a]:A.rv(c[a])}}return e}var s=l;var j=true;if(typeof e[1][0]===\"object\"&&e[1][0][0]===10){l=v;v=s;j=false}if(typeof e[1][0]===\"object\"&&e[1][0][0]===10){var P={};return O(O(P,l,j),v,j)}else return O(l,v,j);break;case 10:l=x(e[1],t,r,n,o,p);l=M?l:A.rv(l);return l;break;case 12:var P;l=x(e[1],t,r,n,o);if(!o.ap){return M&&A.hn(l)===\"h\"?A.nh(P,\"f\"):P}var w=o.ap;v=x(e[2],t,r,n,o,p);o.ap=w;h=A.hn(l)===\"h\";_=N(v);f=A.rv(l);c=A.rv(v);snap_bb=K(c,\"nv_\");try{P=typeof f===\"function\"?K(f.apply(null,snap_bb)):undefined}catch(t){t.message=t.message.replace(/nv_/g,\"\");t.stack=t.stack.substring(0,t.stack.indexOf(\"\\n\",t.stack.lastIndexOf(\"at nv_\")));t.stack=t.stack.replace(/\\snv_/g,\" \");t.stack=T(t.stack);if(n.debugInfo){t.stack+=\"\\n \"+\" \"+\" \"+\" at \"+n.debugInfo[0]+\":\"+n.debugInfo[1]+\":\"+n.debugInfo[2];console.error(t)}P=undefined}return M&&(_||h)?A.nh(P,\"f\"):P}}else{if(i===3||i===1)return e[1];else if(i===11){var l=\"\";for(var D=1;D=0;o--){if(r[e].i[o]&&n[r[e].i[o]][t])return n[r[e].i[o]][t]}for(var o=r[e].ti.length-1;o>=0;o--){var a=ne(r[e].ti[o],r,e);if(a&&n[a][t])return n[a][t]}var i=ae(r,e);for(var o=0;o=0;p--)if(r[e].j[p]){for(var a=r[r[e].j[p]].ti.length-1;a>=0;a--){var u=ne(r[r[e].j[p]].ti[a],r,e);if(u&&n[u][t]){return n[u][t]}}}}function ae(e,t){if(!t)return[];if($gaic[t]){return $gaic[t]}var r=[],n=[],o=0,a=0,i={},p={};n.push(t);p[t]=true;a++;while(o2)break;\n}\nreturn cnt == 2 && any1 && any2 && (obj.__wxspec__ === 'm' || this.hm(obj.__value__) );\n}\nreturn false;\n}\n}\nreturn new x;\n}\nwh=$gwh();\nfunction $gstack(s){\nvar tmp=s.split('\\n '+' '+' '+' ');\nfor(var i=0;i=':\ncase '<=':\ncase '>':\ncase '<':\ncase '<<':\ncase '>>':\n_a = rev( ops[1], e, s, g, o, _f );\n_b = rev( ops[2], e, s, g, o, _f );\n_c = should_pass_type_info && (wh.hn( _a ) === 'h' || wh.hn( _b ) === 'h');\nswitch( rop )\n{\ncase '+':\n_d = wh.rv( _a ) + wh.rv( _b );\nbreak;\ncase '*':\n_d = wh.rv( _a ) * wh.rv( _b );\nbreak;\ncase '/':\n_d = wh.rv( _a ) / wh.rv( _b );\nbreak;\ncase '%':\n_d = wh.rv( _a ) % wh.rv( _b );\nbreak;\ncase '|':\n_d = wh.rv( _a ) | wh.rv( _b );\nbreak;\ncase '^':\n_d = wh.rv( _a ) ^ wh.rv( _b );\nbreak;\ncase '&':\n_d = wh.rv( _a ) & wh.rv( _b );\nbreak;\ncase '===':\n_d = wh.rv( _a ) === wh.rv( _b );\nbreak;\ncase '==':\n_d = wh.rv( _a ) == wh.rv( _b );\nbreak;\ncase '!=':\n_d = wh.rv( _a ) != wh.rv( _b );\nbreak;\ncase '!==':\n_d = wh.rv( _a ) !== wh.rv( _b );\nbreak;\ncase '>=':\n_d = wh.rv( _a ) >= wh.rv( _b );\nbreak;\ncase '<=':\n_d = wh.rv( _a ) <= wh.rv( _b );\nbreak;\ncase '>':\n_d = wh.rv( _a ) > wh.rv( _b );\nbreak;\ncase '<':\n_d = wh.rv( _a ) < wh.rv( _b );\nbreak;\ncase '<<':\n_d = wh.rv( _a ) << wh.rv( _b );\nbreak;\ncase '>>':\n_d = wh.rv( _a ) >> wh.rv( _b );\nbreak;\ndefault:\nbreak;\n}\nreturn _c ? wh.nh( _d, \"c\" ) : _d;\nbreak;\ncase '-':\n_a = ops.length === 3 ? rev( ops[1], e, s, g, o, _f ) : 0;\n_b = ops.length === 3 ? rev( ops[2], e, s, g, o, _f ) : rev( ops[1], e, s, g, o, _f );\n_c = should_pass_type_info && (wh.hn( _a ) === 'h' || wh.hn( _b ) === 'h');\n_d = _c ? wh.rv( _a ) - wh.rv( _b ) : _a - _b;\nreturn _c ? wh.nh( _d, \"c\" ) : _d;\nbreak;\ncase '!':\n_a = rev( ops[1], e, s, g, o, _f );\n_c = should_pass_type_info && (wh.hn( _a ) == 'h');\n_d = !wh.rv(_a);\nreturn _c ? wh.nh( _d, \"c\" ) : _d;\ncase '~':\n_a = rev( ops[1], e, s, g, o, _f );\n_c = should_pass_type_info && (wh.hn( _a ) == 'h');\n_d = ~wh.rv(_a);\nreturn _c ? wh.nh( _d, \"c\" ) : _d;\ndefault:\n$gwn('unrecognized op' + rop );\n}\n}\nfunction rev( ops, e, s, g, o, newap )\n{\nvar op = ops[0];\nvar _f = false;\nif ( typeof newap !== \"undefined\" ) o.ap = newap;\nif( typeof(op)==='object' )\n{\nvar vop=op[0];\nvar _a, _aa, _b, _bb, _c, _d, _s, _e, _ta, _tb, _td;\nswitch(vop)\n{\ncase 2:\nreturn ArithmeticEv(ops,e,s,g,o);\nbreak;\ncase 4: \nreturn rev( ops[1], e, s, g, o, _f );\nbreak;\ncase 5: \nswitch( ops.length )\n{\ncase 2: \n_a = rev( ops[1],e,s,g,o,_f );\nreturn should_pass_type_info?[_a]:[wh.rv(_a)];\nreturn [_a];\nbreak;\ncase 1: \nreturn [];\nbreak;\ndefault:\n_a = rev( ops[1],e,s,g,o,_f );\n_b = rev( ops[2],e,s,g,o,_f );\n_a.push( \nshould_pass_type_info ?\n_b :\nwh.rv( _b )\n);\nreturn _a;\nbreak;\n}\nbreak;\ncase 6:\n_a = rev(ops[1],e,s,g,o);\nvar ap = o.ap;\n_ta = wh.hn(_a)==='h';\n_aa = _ta ? wh.rv(_a) : _a;\no.is_affected |= _ta;\nif( should_pass_type_info )\n{\nif( _aa===null || typeof(_aa) === 'undefined' )\n{\nreturn _ta ? wh.nh(undefined, 'e') : undefined;\n}\n_b = rev(ops[2],e,s,g,o,_f);\n_tb = wh.hn(_b) === 'h';\n_bb = _tb ? wh.rv(_b) : _b;\no.ap = ap;\no.is_affected |= _tb;\nif( _bb===null || typeof(_bb) === 'undefined' || \n_bb === \"__proto__\" || _bb === \"prototype\" || _bb === \"caller\" ) \n{\nreturn (_ta || _tb) ? wh.nh(undefined, 'e') : undefined;\n}\n_d = _aa[_bb];\nif ( typeof _d === 'function' && !ap ) _d = undefined;\n_td = wh.hn(_d)==='h';\no.is_affected |= _td;\nreturn (_ta || _tb) ? (_td ? _d : wh.nh(_d, 'e')) : _d;\n}\nelse\n{\nif( _aa===null || typeof(_aa) === 'undefined' )\n{\nreturn undefined;\n}\n_b = rev(ops[2],e,s,g,o,_f);\n_tb = wh.hn(_b) === 'h';\n_bb = _tb ? wh.rv(_b) : _b;\no.ap = ap;\no.is_affected |= _tb;\nif( _bb===null || typeof(_bb) === 'undefined' || \n_bb === \"__proto__\" || _bb === \"prototype\" || _bb === \"caller\" ) \n{\nreturn undefined;\n}\n_d = _aa[_bb];\nif ( typeof _d === 'function' && !ap ) _d = undefined;\n_td = wh.hn(_d)==='h';\no.is_affected |= _td;\nreturn _td ? wh.rv(_d) : _d;\n}\ncase 7: \nswitch(ops[1][0])\n{\ncase 11:\no.is_affected |= wh.hn(g)==='h';\nreturn g;\ncase 3:\n_s = wh.rv( s );\n_e = wh.rv( e );\n_b = ops[1][1];\nif (g && g.f && g.f.hasOwnProperty(_b) )\n{\n_a = g.f;\no.ap = true;\n}\nelse\n{\n_a = _s && _s.hasOwnProperty(_b) ? \ns : (_e && _e.hasOwnProperty(_b) ? e : undefined );\n}\nif( should_pass_type_info )\n{\nif( _a )\n{\n_ta = wh.hn(_a) === 'h';\n_aa = _ta ? wh.rv( _a ) : _a;\n_d = _aa[_b];\n_td = wh.hn(_d) === 'h';\no.is_affected |= _ta || _td;\n_d = _ta && !_td ? wh.nh(_d,'e') : _d;\nreturn _d;\n}\n}\nelse\n{\nif( _a )\n{\n_ta = wh.hn(_a) === 'h';\n_aa = _ta ? wh.rv( _a ) : _a;\n_d = _aa[_b];\n_td = wh.hn(_d) === 'h';\no.is_affected |= _ta || _td;\nreturn wh.rv(_d);\n}\n}\nreturn undefined;\n}\nbreak;\ncase 8: \n_a = {};\n_a[ops[1]] = rev(ops[2],e,s,g,o,_f);\nreturn _a;\nbreak;\ncase 9: \n_a = rev(ops[1],e,s,g,o,_f);\n_b = rev(ops[2],e,s,g,o,_f);\nfunction merge( _a, _b, _ow )\n{\nvar ka, _bbk;\n_ta = wh.hn(_a)==='h';\n_tb = wh.hn(_b)==='h';\n_aa = wh.rv(_a);\n_bb = wh.rv(_b);\nfor(var k in _bb)\n{\nif ( _ow || !_aa.hasOwnProperty(k) )\n{\n_aa[k] = should_pass_type_info ? (_tb ? wh.nh(_bb[k],'e') : _bb[k]) : wh.rv(_bb[k]);\n}\n}\nreturn _a;\n}\nvar _c = _a\nvar _ow = true\nif ( typeof(ops[1][0]) === \"object\" && ops[1][0][0] === 10 ) {\n_a = _b\n_b = _c\n_ow = false\n}\nif ( typeof(ops[1][0]) === \"object\" && ops[1][0][0] === 10 ) {\nvar _r = {}\nreturn merge( merge( _r, _a, _ow ), _b, _ow );\n}\nelse\nreturn merge( _a, _b, _ow );\nbreak;\ncase 10:\n_a = rev(ops[1],e,s,g,o,_f);\n_a = should_pass_type_info ? _a : wh.rv( _a );\nreturn _a ;\nbreak;\ncase 12:\nvar _r;\n_a = rev(ops[1],e,s,g,o);\nif ( !o.ap )\n{\nreturn should_pass_type_info && wh.hn(_a)==='h' ? wh.nh( _r, 'f' ) : _r;\n}\nvar ap = o.ap;\n_b = rev(ops[2],e,s,g,o,_f);\no.ap = ap;\n_ta = wh.hn(_a)==='h';\n_tb = _ca(_b);\n_aa = wh.rv(_a);\t\n_bb = wh.rv(_b); snap_bb=$gdc(_bb,\"nv_\");\ntry{\n_r = typeof _aa === \"function\" ? $gdc(_aa.apply(null, snap_bb)) : undefined;\n} catch (e){\ne.message = e.message.replace(/nv_/g,\"\");\ne.stack = e.stack.substring(0,e.stack.indexOf(\"\\n\", e.stack.lastIndexOf(\"at nv_\")));\ne.stack = e.stack.replace(/\\snv_/g,\" \"); \ne.stack = $gstack(e.stack);\t\nif(g.debugInfo)\n{\ne.stack += \"\\n \"+\" \"+\" \"+\" at \"+g.debugInfo[0]+\":\"+g.debugInfo[1]+\":\"+g.debugInfo[2];\nconsole.error(e);\n}\n_r = undefined;\n}\nreturn should_pass_type_info && (_tb || _ta) ? wh.nh( _r, 'f' ) : _r;\n}\n}\nelse\n{\nif( op === 3 || op === 1) return ops[1];\nelse if( op === 11 ) \n{\nvar _a='';\nfor( var i = 1 ; i < ops.length ; i++ )\n{\nvar xp = wh.rv(rev(ops[i],e,s,g,o,_f));\n_a += typeof(xp) === 'undefined' ? '' : xp;\n}\nreturn _a;\n}\n}\n}\nfunction wrapper( ops, e, s, g, o, newap )\n{\nif( ops[0] == '11182016' )\n{\ng.debugInfo = ops[2];\nreturn rev( ops[1], e, s, g, o, newap );\n}\nelse\n{\ng.debugInfo = null;\nreturn rev( ops, e, s, g, o, newap );\n}\n}\nreturn wrapper;\n}\ngra=$gwrt(true); \ngrb=$gwrt(false); \nfunction TestTest( expr, ops, e,s,g, expect_a, expect_b, expect_affected )\n{\n{\nvar o = {is_affected:false};\nvar a = gra( ops, e,s,g, o );\nif( JSON.stringify(a) != JSON.stringify( expect_a )\n|| o.is_affected != expect_affected )\n{\nconsole.warn( \"A. \" + expr + \" get result \" + JSON.stringify(a) + \", \" + o.is_affected + \", but \" + JSON.stringify( expect_a ) + \", \" + expect_affected + \" is expected\" );\n}\n}\n{\nvar o = {is_affected:false};\nvar a = grb( ops, e,s,g, o );\nif( JSON.stringify(a) != JSON.stringify( expect_b )\n|| o.is_affected != expect_affected )\n{\nconsole.warn( \"B. \" + expr + \" get result \" + JSON.stringify(a) + \", \" + o.is_affected + \", but \" + JSON.stringify( expect_b ) + \", \" + expect_affected + \" is expected\" );\n}\n}\n}\n"; // idb +const char aVarNfInitFunct[] = "var nf_init=function(){\nif(typeof __WXML_GLOBAL__===\"undefined\"||undefined===__WXML_GLOBAL__.wxs_nf_init){\nnf_init_Object();nf_init_Function();nf_init_Array();nf_init_String();nf_init_Boolean();nf_init_Number();nf_init_Math();nf_init_Date();nf_init_RegExp();\n}\nif(typeof __WXML_GLOBAL__!==\"undefined\") __WXML_GLOBAL__.wxs_nf_init=true;\n};\nvar nf_init_Object=function(){\nObject.defineProperty(Object.prototype,\"nv_constructor\",{writable:true,value:\"Object\"})\nObject.defineProperty(Object.prototype,\"nv_toString\",{writable:true,value:function(){return \"[object Object]\"}})\n}\nvar nf_init_Function=function(){\nObject.defineProperty(Function.prototype,\"nv_constructor\",{writable:true,value:\"Function\"})\nObject.defineProperty(Function.prototype,\"nv_length\",{get:function(){return this.length;},set:function(){}});\nObject.defineProperty(Function.prototype,\"nv_toString\",{writable:true,value:function(){return \"[function Function]\"}})\n}\nvar nf_init_Array=function(){\nObject.defineProperty(Array.prototype,\"nv_toString\",{writable:true,value:function(){return this.nv_join();}})\nObject.defineProperty(Array.prototype,\"nv_join\",{writable:true,value:function(s){\ns=undefined==s?',':s;\nvar r=\"\";\nfor(var i=0;i + +namespace WXML{ + class Compiler + { + private: + /* data */ + public: + Compiler(/* args */); + ~Compiler(); + static void CompileLazy(); + static void DealWxsTag(); + static void GetFuncId(); + static void GetVersionInfo(int a1, int *a2); + static void ParseSource(); + static void RenderDefine(); + static void WXMLHelperCode(std::string &result); + }; + + Compiler::Compiler(/* args */) + { + } + + Compiler::~Compiler() + { + } + + class DOMLib + { + private: + /* data */ + const char *szWXIFControlAttrs[4] = { "wx-if", "wx:if", "wx:elif", "wx:else" }; // weak + public: + DOMLib(/* args */); + ~DOMLib(); + }; + + DOMLib::DOMLib(/* args */) + { + } + + DOMLib::~DOMLib() + { + } + + namespace EXPRLib + { + class Tokenizer + { + private: + /* data */ + public: + Tokenizer(/* args */); + ~Tokenizer(); + }; + + Tokenizer::Tokenizer(/* args */) + { + } + + Tokenizer::~Tokenizer() + { + } + + } // namespace EXPRLib + + +} +#endif \ No newline at end of file diff --git a/src/utils/file.cpp b/src/utils/file.cpp index eef758b..1f0f557 100644 --- a/src/utils/file.cpp +++ b/src/utils/file.cpp @@ -1,5 +1,6 @@ #include #include +#include "../include/file.h" /** * 读取文件内容 diff --git a/src/wcc.cpp b/src/wcc.cpp index dbbf2ce..f9739f6 100644 --- a/src/wcc.cpp +++ b/src/wcc.cpp @@ -10,8 +10,8 @@ int main(int argc, char **argv) { string gwxMark = "$gwx"; string blankStr = " "; bool hasConfigParam = false; - string configPathData; - vector fileList; + string configPathLocation; + vector paramList; string configData; for (int i = 1; i < argc; i++) @@ -23,22 +23,138 @@ int main(int argc, char **argv) { if (hasConfigParam) { // 有--config-path参数,下一个参数是路径,跳过 i++; - configPathData = argv[i]; + configPathLocation = argv[i]; }else { - fileList.emplace_back(argv[i]); + paramList.emplace_back(argv[i]); } } // 有配置文件,从配置文件解析 if (hasConfigParam) { - int ret = readFile(configPathData, configData); + int ret = readFile(configPathLocation, configData); string line; if (0 == ret) { getNextArg(line, configData, '\n'); - fileList.emplace_back(line); + paramList.emplace_back(line); } } + int mark = 0; + bool end = false; + bool version = false; + bool hasXCParam = false; + string xcParam; + bool hasCallbackParam = false; + string callbackParam; + string outputFileName; + vector temp; + for (int i = 0; i < paramList.size(); i++) + { + string param = paramList[i]; + if (param[0] != '-') { + // 不是参数名,跳过 + temp.push_back(param[0]); + continue; + } + + // 是参数名-xxx + switch (param[1]) + { + case 'd': + // output code for debug + /* code */ + if(!param[2]){ + mark |= 2u; + continue; + } + if(param[2] == 's') { + mark |= 4u; + continue; + } + break; + case 's': + // read from stdin + /* code */ + if(param[2] == 't') { + mark |= 8u; + continue; + } + if (i + 1 < paramList.size()) { + temp.push_back(param[2]); + end = true; + } + break; + case 'v': + // 版本信息 + /* code */ + if (param[2] == 'b') + mark |= 0x10u; + else + version = true; + break; + case 'x': + // -xc output simplified code for custom component + /* code */ + if(param[2] == 'c' && i < paramList.size()) { + hasXCParam = true; + if(paramList[i + 1][0] != '-') { + xcParam.assign(paramList[i + 1]); + i++; + } + continue; + } + break; + case 'c': + // -cc: output compelete code for custom component + // -cb [callback.js...] + /* code */ + if(param[2] == 'c' && i + 1 < paramList.size()) { + hasCallbackParam = true; + if(paramList[i + 1][0] != '-') { + callbackParam.assign(paramList[i + 1]); + i++; + } + continue; + } + break; + case 'o': + // -o: output destination (default stdout) + // -om XComponentDefine + /* code */ + if (i + 1 < paramList.size()) { + outputFileName = paramList[i + 1]; + i++; + } + break; + case 'g': + // -gn gwxMark + /* code */ + if (param[2] == 'n' && i + 1 < paramList.size()) { + gwxMark.assign(paramList[i + 1]); + i++; + } + break; + + case 'p': + /* code */ + mark |= 0x20u; + break; + + case 't': + /* code */ + mark |= 1u; + break; + + case 'i': + /* code */ + mark |= 0x40u; + break; + + default: + break; + } + } + return 0; diff --git a/src/wcc/usage.cpp b/src/wcc/usage.cpp index 1af8d53..204db81 100644 --- a/src/wcc/usage.cpp +++ b/src/wcc/usage.cpp @@ -1,13 +1,13 @@ #include //----- (00401726) -------------------------------------------------------- -int usage() +int usage(int argc, const char **argv) { printf("Wechat WXML Compiler, version %s\n", "v0.5vv_20200413_syb_scopedata"); printf( "Usage: %s [-d] [-o OUTPUT] [-xc XComponentDefine] [-om XComponentDefine] [-cb [callback.js...]] [-llcommon] [-llw/-l" "la XCPath] \n", - *a2); + *argv); printf(" Options:\n"); printf(" -d: output code for debug\n"); printf(" -o: output destination (default stdout)\n"); diff --git a/src/wxml/compiler.cpp b/src/wxml/compiler.cpp new file mode 100644 index 0000000..c652fc9 --- /dev/null +++ b/src/wxml/compiler.cpp @@ -0,0 +1,21 @@ +#include "../include/wxml.h" +#include "../include/define.h" + +namespace WXML{ + void Compiler::GetVersionInfo(int a1, int *a2) { + std::ostream& result = std::cout; + result << "/*"; + result << "v0.5vv_20200413_syb_scopedata"; + result << "*/"; + + result << a2; + result << ".__wcc_version__='"; + result << "v0.5vv_20200413_syb_scopedata"; + result << "';"; + result << a2; + result << ".__wcc_version_info__={\"customComponents\":true,\"fixZeroRpx\":true,\"propValueDeepCopy\":false};"; + } + void Compiler::WXMLHelperCode(std::string &result) { + result.assign(aIfThisThisGUnd); + } +} \ No newline at end of file diff --git a/src/wxml/dom_lib.cpp b/src/wxml/dom_lib.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/wxml/expr_lib/tokenizer.cpp b/src/wxml/expr_lib/tokenizer.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/wxml/name_allocator.cpp b/src/wxml/name_allocator.cpp new file mode 100644 index 0000000..9d98202 --- /dev/null +++ b/src/wxml/name_allocator.cpp @@ -0,0 +1,4 @@ +#include "../include/wxml.h" +namespace WXML { + +} \ No newline at end of file diff --git a/test/vector b/test/vector new file mode 100755 index 0000000000000000000000000000000000000000..ed641e62b66d74c429711af002f30e556da1f1e2 GIT binary patch literal 36416 zcmeHwe|#Lpm1pahtpr<^iD3nJ@qq1MV=OeXWJ?AolC3c#Te5|IfB`$L(P(T9mNa5C z@~_22IRnc?Xk%FR;#(Y|Y;qTFAsZ(f_G5AcWb7a(M~K*P!6A?+tYJs7!wT`s{G9u~ zs#iVLtr>F>!~Sz>kYCq(_1>#`_3G8@p6==|durBZW@H%Z$TGfQP-);?iK$>h#hrWt zP+^oAGx4v>m}g8wIa}Z)y+Q&|<#8g@4s#iw1xS1abdm(lm1sjj)k1>Am+BavDJcpX z`LaxWIdsZpC;UHuA?qoq=$5`BNjDtuIo7A3&PTQxtC4(To9%EB_q$DXhTBEvBEH;O zSwDA+9plG4xl)a-Gm6#TW`Y`8F}16IL;wf~13vhF2o3lhIele7CY4o$z+< zpMpx?wcsPW{J$P-PNSanr5cBP?ze(8-gI2q9&A}&a%Fq#()M6y&#tAr%9bx(UQ*Z{ zDl8UsY8UAspSos4lYwRr5{|`*v6#bUqWAvnxnG?QA6?P%*o<$zcjNQ<)8Cl(j*>w- zsSX{)&n6IMI=={iR7dvz9&t`MI)($!bewl!#u{0g`0rC-`8fJB4t=Sp~2et*fBY|*Z?V9#bXQ0v7(jJhs zm)q?wmbFkR*txB`p~P$` zH5=Wg#{(T3gs>{NXNOQ&66kDgPp0!M>XxJbkdsPZ$_}h?dp4pmlV*mI>en|cV*zEs zP`8PW21=?sgAwk~hK5jkx2JAxeM6|hr0&9IFpD&Ji?7x6wYP`-=sGOrGg~lxou=Ox z@wcIBYkM6Lw(Z(wb_K%Sp-x|WFtXd+Q6w5nLx2vD)jD@}2vo%01W6Tw!vUdD)=Duf zDa~Y!O>v28d8j91hPIkvU+1=fxwRt#OYDL0hDeDYB<>AHlKTSR-RAe3-Q>D%!))r@ z83e69(B0D!FhKMxpN2d8x10X9?dDcru$|@jB7t2&C3I_$%&-SuZ4x6-fDT`<)3|2M z8gp4;k#S8;_3AZdabbydR$N#r&o^yCjgrD*uB3`?W6h>bm8+{wci}R!w zmxKSZ@ki(M-!zpJswa8EZXx&AGpoMY5+`B&fHjwLtC zFu5FAd@oX&Oyg#jr}8Y7-}HVC!f~A8{7d0)IZxsZm0xkOg6rotON6Sg%EwKKr?ptE z!Gsys@Z1zp@q~t_d_Wx|8lF>6L5gYk0#zAsOv7KG;m>IJ3pIRxvn-Hpxl003!FbAB zRBla#B9=29=PEQ4zD&boV63A;!%P2=B(H`S`8IRZX?Q)4+oa)1w>p|Nycz?dwP|=b zl67=x_|IBc!`P+a;i%TptKnx@Si`tW!*gmcsQWd1o>u>WhM%S32Q)nSy*eJ$@Us;X z@Q{Yr*XP3;Ub!r>4QlxFH91qKQx^DhEbzvxi{JC^JDuz8%lXYl!|>iQ7|Dzed-om7 zJu1Y+OW)gI7~}DU?*q)5XHfk%qKuFJAs&zK7i9_<1{WHIY71i6n>IlpoKkrUzC zLhRiS$P;r9diy;C-sn*5 zN=z)Af0NFC1@H3qH+>Uj&`VcgF(>q9iDs5x6Dlsb2I>4KXp53CTU3?O?yyUH8>tOd z&zmUi2b#2yChe#^A9x(C7QByB#pqKo@QL-Xf}iNoCt=GQP$WY1`Pgkh{x8A6Jv;|Y z(G%Xj+E}Z1*$iQV$nH~NGLAQTRP+_idgp_9{M7UWQW#`4WSw#+kb~5LUnHwpKs7b? z0jhZqf|wVoaoPrYEDQf247T00<)|7Oj7)xX?+4MIGyC>_kkM28mAz-;ag6(7^f8A< zdKU5YpLb{-MD>@BQ$PE1?xhl>)}tx=e`X1LoLHZr$Qe6`;n%c8_nz@ad&azdo-qvz z-Cm;fc|aYCb%7DmMEoVUp|)@%n8H;35nN3)GHA4@`YoZ$hB^sUVwlyKq#nr=PHk$GhtMz{grN$N0}I7N6(XP9 zuSo<4in=ejtX@W&V%~jw$Bf8dNNb_kS3Ab0+MYtUCVSs$yR1H2XX!SX=F}9t3ZOa$ z2Ofbw=&Ga90j$XPmOmM}8if(EdMy~G)j<;@2p-`F9->H=TyKA!OPojRa!(a0-r0ip zs3Z)RB=Dy)D}5!!_n3ef<~u-5dR z=z>ceHQ9YM?HSX=Su8Q|VM zEYT+O>NR2}z5e?!=NrS`+#eV)TE#aU$M9HKhHEz!81 zVdmV#oToyH?cMin3ik^(r^36FDSX1td0kS4^~@Q218d~Iu?+O}Ql#;ZQxyQJy3_sDxWsHUo%lc)mg=X34DUPKF=4@%3^Ai(kjVEMZI{WziQ zLMB+VZvQ*@$7mn^k*UK_EchlA@7sIW=$VhIJbrd5!r`BXL!G)*iXDnQ`X1R2)oRHJ z&>Yc;M+hrBF$j`E*8?3p0zFda(by}bQ)VB3#A)mf(FS|=!4sQ9>KPi;#cD;><_1EA z%ZhRo{b^3ZS;pV6~qpF_pd1-x0Zx+JLCMNRP^i_&Mh7qd`Oq^7ZwMw0WTo!`?H9 z*?xH9YzJv5_75WCq;)|QkJ21meAF9#0hmFoKC|wn7>~Rh^Ay$Z85d(C>V93!SBv#7 zQAC&eG1L30YhuK=kph@K0|*Q;>$!<4mwQIS=PJwvR1cUPc?vTfm{Zv(flJSAb7J>X zEA}1p>J~{Ab1|5Sc>5TsO%iX{L0}@@PF#`E^MA&$c>4-Ob5Q(_D8idyE4VxIv$L$5 zBA3856-J3xI%$}_2(qVgL?lb7#;6t9d?Z>stdE>nMrg{D`*6B|)|imx?b}PM!PROt z*zvmFC*j>_Kw^oT=#S8)x>rR4aq&P)7UY+T;tiN^_U}XP_lW-{iAGGtQ=4?Vq$i{;50kN$OFrt?4CyF!lyJt*k`p| z*nf=Sg#ko7y526_87iWPP!y&5C~WjVlZ*!2l5tH;32g3pKXoUGdp`6ZwxLYg0@7|v zO4^+bke1c5_>-?WqZ|3&38%juM$SV=7A7!7MhyQ@Yz;Lv3d8opq5H{8#B5(DdVo&Y z^O-+FlVf~rzK9`kiE*daMX4*&h?kQ%$~3=DQ79)i{wJQlB0m_4wb1jFr?MdV~`EfQ0!GP!j_BEkKI6nI*iPt1~*RN-p>(o-!a!sm7Dd|!scHz zp(*rgi7J`VYQj^Vc!r#>1mjTb*Rlc7 zeTa0Qx=Q6JKRrdxBb*EU6Ylyf*49|Z=|oO(56(HK_^)(oZ+H?n#o%KyAk@k{hU}|G z_z;AnC~AC0w3QMfP=)GWAf3@;p>lwUQS(l82-%Ti zns(&FtjIj~Z~1;?O?12_`dU@=-z(#De(&9PG{al|QqLcuHut72m76QKRDP+_Ji2vj z;jDSLqft`dQHCUwYEpUXn6ki>1*R-8Wq~OROj%&c0;w!O&ufXpUA(NMbh)vjth|WI zI|BYlD7}RR={?^+X0^gJOubA;4t7E+>5;Q z)p)!N@MgfxfCGTH0=@`%5b!m?#{l#G9qj?E0Q>;34sb4R#(ov>YQTeln*o0gcq?EV zQn~@a#{mZcUj`fjd>xP;;GRDkkGlYC0V@Daz-GXMfW3gH0S5ptMXEXoSPVD<_<39{ z=HfYs4SNLK zq`MOBfPYVSCjgHD9s>L|;4t9ZfMbAjaaoX$=PcF(76I-CtONW$U>D%~fcpW9kbxfp zYycbvd<<|5@EO2-JeM&C7ZOE)w*oc-{yks>@Rxx10saZ_M}Tv21N1q-62LbB*8R0DIno-2jIHdjUTH8~}8^4Z8uB0*(Og1vKC%KL&IGJ_mR^U=?mkJ`Jdz$;;SN zZ)EJs&$wvD^xXZp0wX+K1@yu%uLLxzri-857T~l5f3X)aeyC^U<*&^vSU2mOow>cn z7cX3S`LYF<0xS48)5-79Z-RV~+z9^8yaYQCKOdy)Zv4IXhj?5(&*jO>zcX{q%xSe~ z5b#8Q7=L4+&jU0R{kjDG>5rkG{unxm&Dc{{BP=of{Now}0DI7_o$Sjn zsHzQ~eOX!k8KNQ7&PLE5L_5KssMC^YC;eXhqZIvcfracq^lJgLPonoqPo`H0p*n}~ z_cH2usm?L2&X*H{c6xJ z2R+qzY-W0~EHLudKRw($2mEz9J@Xo?e=g9gKwqxYI}-dA zpx+33vi^}x=zXenpwn8GJs*Kw`4P>TS2Ha=cR|kiSaUAZ^?WIz=RwdfJ`4Rg=nFwl z<;yY9SA$-o%SRh-g9;kQT&z)@pkJcXH%a|2;1+@21^SpyCtrCv(Z(9oxf<)BO-JS$ zQGs-{gWd*ul|#l3Zo}Q6-wpZ-o!*&{|1jv^2K@$|o>^zfe;V``K~LrjF7TWN{Ta|V z>HO4(bqO8$7@|z9)v5fg2=p1CC(}WFtONZc=tvb4x|sfXy$xFu`uBsL4f$ftQNFS@ zK|cig=Ri+3r%C@X=$C+=%3sGoUjcfmG0I1-;0HZb%q#+Z7wGf#_TQLjUmfUw1$t1Y zXEuup)V?mzkAa@be)~cH7tq)0{ClN*7jTC_e-ZR;I{livv-V|YUQe}1$8)ITLLPOo zUZ*M1#y3H~81z(qoP*_L*;)8YKzDM3*S|5LKLUCg=*ev00?&P*Uk>^X zouB-)P0CmRJlWw^)Oi%=*>7MWQ@%p=9!lsMfvlOxA#c)UW!8%dWGe&9xEJ&*bh+u}3mA*K(2e(zc2 z4}#u&A|A(sm5KIcR*4R{fEoe4A9V4~gtCzg8N^{wEXqcHNj3-&Vr^dj*D|Z~3jQX` zljrKs_T(+PJEtnI=+0^0ys~}MugRWp%DAO3uSp0gX@zpHUMkVnFuK4{6GcLU9 zMx11R@ulpHQ(22J);X6vn`8W24r*ec1^z#^fZ7j2?f;`w;*e;2Ht-{+>1dC+^!MFTOY+kbVB#P z=}`9+dU5}b4hF_?rsLLwICgLuKYfWq+=IfIxIe=<0$j}~FeQ?^WgO>@((hDs;5L&u z)E*VN+;N2;X2q)AWz3J;F5*!7#l1LSR6RUHDEf!$0)>a!MVWpZqyx|Bin3}aeufm~ zw^=Y=!V=|dSv~Fls(sg-f{SOo6f9sEoy4%>5TNa%CWah(NcGhD7kMdE-EZ4DReKE zcspORQWj=Uff`7y0_{LkmK2{QemBvoiqkCoSaWOA`Z?A-(Rs2kOVs?ZTstkxINyqYIwi|MG~u{s z#}^pM=3SO?ffc9h^$|szb&NdE()JnCsafKVw2qN+J==IaZpX^_o{7O47B}e=)I6LL z-nOX@aF;M%ttX0ue#^>0d+K}=!{O1O-#0Rn*r5Y>lHaRu+5_BfQGcR64*;L6{ofY# z&oy#+e3jnE1^y!AT1R_+0X*qlzzc=ApAOuIj92TWTGvQkGQIR}ZU+2ha}s|@R-g6{ zBx5@L?R!`_GHI1{%!^_nf1;mUCFJ1A35Q?No8tIob%Gz#TSgg4{Hh1|OQE!bJ6cTa zI9_7>{`s=JO#-6=3n$fo{VyfrYR1#MXoSB4O`=2m9tij{;|JN!3cmtzjp~1u7h0wF zn~cAi@v8psfzLNCGzywYdg6GM>!Zu!5YJ%XtQrd?$)C$|R67qae%*XoU;OTd(|Yi` zAm3<~c=hkQTz?NQ=$9~|6A8*}+F6kOO|8p&fhWBKj{ed!QI4r4BuztNL-ikaNx`bl zUjeVqS)~B~P1M&h@_Yuy>s-i*@;stvR_J&ng`5vrZ`ndw?@a#|VxD$6Nl{7)EvklQ)N_=^x4NUw8#-Ng7X+n<|j{DAQljJIqxQ_9(S zsT8dA_A$Bhy^X+AJ2!D0P<5^YKh2i`MyPRll=X8bO8Se_onT*OVP z{{Z`;vcmz!ALRNdier@V2iVSP9O(!8WcI1UxYIh~jPuuI5dI=#laB>6*n;|^J?w94 zzCXnH5pIZzd+!3DOz-DlFOu^!9$!^w598nB_Ah6>ap0*v&T%{kb|g8@^>ID$N~Yd} z+fv}aE%5n99S7zBGyOBm|0lLTJ;z1ITC|(=ewF*n<}fxe{+H}0L0R2+i1ClRBw`ce z7eFq_Im835+T6|fZ?b(Z=lYKWuj(*LfEQBW-)A{@^MEM7t;G!q(p$#sh?4m)j4uEm z9d!~I({O`=>OaZt+`;(mj9<=nV{;f!Fn&GPSL>7u>mSKE!R@JHIX`0jV?2+PpPvIp z7uV6jWx$i111ulIB#t|QSAEgzKac`{nB_SAb{g78@o*$6=L1iAo$+=%;~(a6 zXR{i^jDMHssfwSAT~dxSzV$NxA7BqURG#p!E?NJ4o)^j=R-#PpS;>CF<}mI8KA9c9 z%k^L9Jm)5%1n_b zy{gU6Fy8483!zWdu{Fvcj&w(Q@MfgnNbDDFMmkJC?HJvSeRW$y=C<}wi?7{m#j6e7 zrmtt0;SY6mwFe@B*21!)<=DbEStS#D^9D^{IPBYP20A0*-Nx3iuOnc#_H=aY28&k0 zn+?H;t*U&FqR`*fCH4`nahG=m1OC9yV0XauhdQx!bdMi<0Aq{cnljT2hDZR4C2o_p z0FGb}YQh9*Z(x+LGqw*q47Ua(AC-%OLBqVJX5;G08nE=VnAN7(HP|%Q)>qbgOwWcY z+DF^O2J@!J%Sdlky{efBlo1NtSrErY^PT!HUa1M1u?PAR$s(t>6v8b*NDysNR%~7>9PR^ zTx+h?(#Y~1!pNV?k00IV2o=<03 ztbN*(?J!?aA+|-AJDyWR*8itjql7lar-|v@J$g+-LXLSd>59v!W{V&Hj9XiUpdb-_S3T|K?mEFAIZvqUz_i8)n5X;O9lWMYzMBeipR zI3O}DtOxjvRi{6Ik4bq-BD=c+h<#-oRMUA4t*=d`Sexi-*Rw-hOk3-d__mU>v-WQ~ zO{AhP>ATWTT*Xk!L{0_o@_Q)aPEeiZ)mvUse!ABzVmi<*9PPVL+%NG7C(~@KU88Q! zq`N6@#G}MjqKwUnOWjXC{jEqs7x`>WBn()7I(*v$ro6J)iYw8;E`OjalDNv4%rr`} zcnP1zD#RH-YFI7$Ha%CHttxL? zhCC`sYWnA1e&BY7`qZ6mSj82RxOXK#!{rJsXi+CSSuS4U~&m`iz4#s)6pmTaIO4_s{NTW=nUsHd>R+_xTPWQt7jP642o- z^23EmzEWtbhn!G++0WnIBW}2-(Qqp$|FrF`RIS$ikGnZYsnrT(2z22}$q2r=NMC29 z6)7zdgAzIGss}d@`BG&W>}$VNnXqVl8u$3cN@3y$l|WeDK%Z2|#t$IkCaCS6)#N0} z$j_Gx)`unS(>TeOGVK-8HCUzMJDqaDprD<`MYS9rx-Aef8@p6u5(=ktWm*Q?33+HX zTuX%z(`ULT_p=QgRbB1K%U#<~MQK~otb52J1x#mtJz>&mk)R_uNuyXXfz2cCdwDiA zm~?C2`NMM42>a_Huna+c$&lKM<-)R*I+U!?un^AzhPKrs0VthJLh`aXgLlSmiHi9<~+g7gkCu#C=q>yde^}WpZxn zX@QGP$T@M@Eq|d%x6^UbumL*Lv1FE5HwZ=QmA*^vgq7)*fVv})zO_EMOWgQ!e7>07 zUAz0`hWA(jI@EGAerm-%%1K=sB6;B(zjQ0S4w1Uv`Y}HpW8p3i;0o904~U!9R#L^u zlH*h5@K|@5J*g4Dz)f_;$>j=^r^&TQ+pIV1kB;;v)t=>uQe}h4dS*QHayRZ6QAC z4)~2id`}!j5%>$kA@RUOVW5qlPikw0G*yBce7BtM&Y+L@1y)Fvk1k0W>Kw{_9YKhf z0&$&X6ymX|4m=8FdjM;41w3wu_b}*P4|%Bf#1zD1gtmj~>IXe%HywY9U%gMJpi8fe z^IS)no-ft;H)Y8R3aaPn6kE1BVOR~Q^Q-sM6m&W2JNd5%9b1xyRQm^5zk-XHe;Pw) z`+dOU5qYcs>U}o_53^uuBiT;ztLG)@`BYM=^sD#c6jbk%qKY`2_P+&KdRJ5NtM}&= zT*-W@{i>dVw}DRYeyXy1&rZPs=BM^kJ5~D`ZS>=WY^wOx`*;ef_feI8#jpDRb>?5q z0@Zta3aa;EiJu;^bn<@-II@Y7k4Grw!I1o0Kb+%#5Ja8d#e51@I1KI(Z+zFm-;C$x z=}=JBmsom+S{@1>LQ&VR-YZm4-=mf|6`z8SI`{|p;Y|{|hMWBj1E)80zIf>}^b&suZXNxVN- zOVTFVOYtc<3;g8!ieJ6Inalk7+%cNJbSOU6u7`l5{wsdR`imTR#lOUXSK@T2#$K=L zW&OSR5{t*wg=?wytA642F01W2|M6y7TDL&QN?Yj|3Ky#HI{w@{Wa$dkP$oKx#{UIC C?DiS} literal 0 HcmV?d00001 diff --git a/test/vector.cpp b/test/vector.cpp new file mode 100644 index 0000000..71f248b --- /dev/null +++ b/test/vector.cpp @@ -0,0 +1,12 @@ +#include +#include + +using namespace std; + +int main(void) { + vector t; + t.push_back("123456"); + t.push_back("7890"); + cout << t.at(0) << endl; + return 0; +} \ No newline at end of file diff --git a/test/main.cpp b/test/wcc.cpp similarity index 95% rename from test/main.cpp rename to test/wcc.cpp index 2b451ec..c1c7840 100644 --- a/test/main.cpp +++ b/test/wcc.cpp @@ -61,7 +61,7 @@ int main(int argc, const char **argv, const char **envp) std::ostream::sentry *v57; // [esp+18h] [ebp-374h] _DWORD *Block; // [esp+1Ch] [ebp-370h] bool hasConfigParam; // [esp+20h] [ebp-36Ch] - int v60; // [esp+20h] [ebp-36Ch] + int mark; // [esp+20h] [ebp-36Ch] std::ostream::sentry *v61; // [esp+20h] [ebp-36Ch] std::ostream::sentry *v62; // [esp+20h] [ebp-36Ch] int *k; // [esp+20h] [ebp-36Ch] @@ -206,6 +206,8 @@ int main(int argc, const char **argv, const char **envp) std::string::_M_dispose((void **)&configPathParamName); } } + + // 读 --config-path 文件的配置内容 if ( v99 ) { v138 = 0; @@ -222,10 +224,12 @@ int main(int argc, const char **argv, const char **envp) } std::string::_M_dispose((void **)&v137); } + + // 20230606 Streama = 0; v43 = 0; v44 = 0; - v60 = 0; + mark = 0; v53 = 0; v55 = -1431655765 * ((v90 - (int)fileList) >> 3); v45 = 0; @@ -235,31 +239,37 @@ int main(int argc, const char **argv, const char **envp) v67 = 6 * (_DWORD)Streama; v4 = &fileList[6 * (_DWORD)Streama]; v5 = (_BYTE *)*v4; - if ( *(_BYTE *)*v4 != 45 ) + // ASCII 45 => '-' + if ( *(_BYTE *)*v4 != '-' /*45*/ ) { std::vector::push_back((int)&v86, (int)v4); goto LABEL_84; } + + // v4 是 '-' + // v6 = '-'的下一个字符 v6 = v5[1]; switch ( v6 ) { case 'd': + // output code for debug v7 = v5[2]; if ( !v7 ) { - v60 |= 2u; + mark |= 2u; goto LABEL_84; } - if ( v7 == 115 ) + if ( v7 == 's' /*115*/ ) { - v60 |= 4u; + mark |= 4u; goto LABEL_84; } break; case 's': - if ( v5[2] == 116 ) + // read from stdin + if ( v5[2] == 't' /*116*/ ) { - v60 |= 8u; + mark |= 8u; goto LABEL_84; } if ( (int)&Streama->_ptr + 1 < v55 ) @@ -270,16 +280,20 @@ int main(int argc, const char **argv, const char **envp) } break; case 'v': - if ( v5[2] == 98 ) - v60 |= 0x10u; + // 版本信息 + // 输出: + // /*v0.5vv_20200413_syb_scopedata*/global.__wcc_version__='v0.5vv_20200413_syb_scopedata';global.__wcc_version_info__={"customComponents":true,"fixZeroRpx":true,"propValueDeepCopy":false}; + if ( v5[2] == 'b'/*98*/ ) + mark |= 0x10u; else v44 = 1; goto LABEL_84; case 'x': - if ( v5[2] == 99 && (int)&Streama->_ptr + 1 < v55 ) + // -xc output simplified code for custom component + if ( v5[2] == 'c'/*99*/ && (int)&Streama->_ptr + 1 < v55 ) { v53 = 1; - if ( *(_BYTE *)v89[v67 + 6] != 45 ) + if ( *(_BYTE *)v89[v67 + 6] != '-'/*45*/ ) { std::string::_M_assign((int)&v95, (int)&fileList[v67 + 6]); v53 = 1; @@ -289,10 +303,12 @@ int main(int argc, const char **argv, const char **envp) } break; case 'c': - if ( v5[2] == 99 && (int)&Streama->_ptr + 1 < v55 ) + // -cc: output compelete code for custom component + // -cb [callback.js...] + if ( v5[2] == 'c'/*99*/ && (int)&Streama->_ptr + 1 < v55 ) { v53 = 0; - if ( *(_BYTE *)v89[v67 + 6] != 45 ) + if ( *(_BYTE *)v89[v67 + 6] != '-'/*45*/ ) { std::string::_M_assign((int)&v95, (int)&fileList[v67 + 6]); v53 = 0; @@ -302,6 +318,8 @@ int main(int argc, const char **argv, const char **envp) } break; case 'o': + // -o: output destination (default stdout) + // -om XComponentDefine v8 = (FILE *)((char *)&Streama->_ptr + 1); if ( (int)&Streama->_ptr + 1 < v55 ) { @@ -312,7 +330,8 @@ LABEL_72: } break; case 'g': - if ( v5[2] == 110 && (int)&Streama->_ptr + 1 < v55 ) + // gwxMark + if ( v5[2] == 'n'/*110*/ && (int)&Streama->_ptr + 1 < v55 ) { std::string::_M_assign((int)gwxMark, (int)&fileList[v67 + 6]); v8 = (FILE *)((char *)&Streama->_ptr + 1); @@ -320,17 +339,18 @@ LABEL_72: } break; case 'p': - v60 |= 0x20u; + mark |= 0x20u; goto LABEL_84; case 't': - v60 |= 1u; + mark |= 1u; goto LABEL_84; case 'i': - v60 |= 0x40u; + mark |= 0x40u; goto LABEL_84; } std::string::basic_string((void **)&configPathParamName, "--split"); v51 = std::operator==((int)&fileList[v67], (int)&configPathParamName); + // 相等 if ( v51 ) v51 = (int)&Streama->_ptr + 1 < v55; std::string::_M_dispose((void **)&configPathParamName); @@ -341,13 +361,13 @@ LABEL_72: goto LABEL_84; } v9 = fileList[6 * (_DWORD)Streama]; - if ( *(_BYTE *)(v9 + 1) == 99 && *(_BYTE *)(v9 + 2) == 98 ) + if ( *(_BYTE *)(v9 + 1) == 'c'/*99*/ && *(_BYTE *)(v9 + 2) == 'b'/*98*/ ) { LOBYTE(v142[0]) = 0; v140 = (char *)v142; v10 = (char *)fileList[v67 + 6]; Streama = (FILE *)((char *)Streama + 1); - v60 |= 0x80u; + mark |= 0x80u; v141 = 0; ReadFile(v10, (unsigned int *)&v140); if ( v141 ) @@ -376,12 +396,12 @@ LABEL_72: } } v49 = fileList[6 * (_DWORD)Streama]; - if ( *(_BYTE *)(v49 + 1) == 108 && *(_BYTE *)(v49 + 2) == 108 ) + if ( *(_BYTE *)(v49 + 1) == 'l'/*108*/ && *(_BYTE *)(v49 + 2) == 'l'/*108*/ ) { v13 = *(_BYTE *)(v49 + 3); - if ( v13 != 119 ) + if ( v13 != 'w'/*119*/ ) { - if ( v13 != 97 ) + if ( v13 != 'a'/*97*/ ) { v14 = ___acrt_iob_func(2u); fprintf(v14, "Error: expected -llw or -lla, but got %s", (const char *)v49); @@ -601,7 +621,7 @@ LABEL_84: &v105, v53, (int)gwxMark, - v60, + mark, 10, (int *)v127, (int *)v128, @@ -776,7 +796,7 @@ LABEL_84: &v105, v53, (int *)gwxMark, - v60, + mark, 10, (int *)v127, (int *)v128, diff --git a/test/wcc.disassembly.cpp b/test/wcc.disassembly.cpp new file mode 100644 index 0000000..c309cfb --- /dev/null +++ b/test/wcc.disassembly.cpp @@ -0,0 +1,191709 @@ +/* This file was generated by the Hex-Rays decompiler version 7.7.0.220118. + Copyright (c) 2007-2021 Hex-Rays + + Detected compiler: GNU C++ +*/ + +#include +#include + +#include + + +//------------------------------------------------------------------------- +// Function declarations + +#define __thiscall __cdecl // Test compile in C mode + +void __cdecl __mingw_invalidParameterHandler(const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t pReserved); +int pre_c_init(); // idb +void pre_cpp_init(); // idb +// int __usercall __tmainCRTStartup@(int a1@, int a2@, int a3@, int a4@, char a5); +// int __usercall WinMainCRTStartup@(int a1@, int a2@, int a3@, int a4@, char a5); +// int __usercall mainCRTStartup@(int a1@, int a2@, int a3@, int a4@, char a5); +int __cdecl atexit(_PVFV func); +int __gcc_register_frame(); +void __gcc_deregister_frame(void); // idb +int printf(char *a1, ...); +int fprintf(_iobuf *a1, char *a2, ...); +void __tcf_1(void); // idb +// void *__usercall std::_Vector_base::_M_allocate@(unsigned int a1@); +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str); +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2); +size_t __thiscall std::string::basic_string(void **this, char *Str); +// void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(int a1@); +int __cdecl Usage(int a1, const char **a2); +int __cdecl ReadFile(char *FileName, unsigned int *a2); +int __cdecl Trim(int a1, int a2); +int __cdecl GetNextArg(int a1, int *a2, int a3); +int __cdecl EscapeToJsonString(int a1, int a2); +int __cdecl DictToJsonString(int a1, int a2); +int __cdecl Split(int a1, int *a2, int a3); +// void __usercall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(int a1@); +void __thiscall std::vector::operator=(int this, int *a2); +int std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_clone_node>,std::_Select1st>>,std::less,std::allocator>>>::_Alloc_node>(void); // weak +// int __usercall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_copy>,std::_Select1st>>,std::less,std::allocator>>>::_Alloc_node>@(int a1@, int a2@); +_DWORD __stdcall std::string::operator+=(_DWORD); // weak +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str); +int __cdecl WXML::RPX::accept(WXML::RPX *this, int (*a2)[266], bool *a3, int *a4); +int __cdecl WXML::RPX::acceptID(WXML::RPX *this, bool *a2); +int __cdecl WXML::RPX::acceptStr(WXML::RPX *this, bool *a2); +int __cdecl WXML::RPX::acceptNum(WXML::RPX *this, bool *a2); +int __cdecl WXML::RPX::acceptSymbol(WXML::RPX *this, char *a2, int *a3); +std::ostream::sentry *__cdecl WXML::Rewrite::ToStringCode(int a1, int a2, int a3); +std::ostream::sentry *__cdecl WXML::Rewrite::ToStringCode(int *a1, int a2); +int __cdecl WXML::Rewrite::ToStringCode3[abi:cxx11](int a1, int a2, int a3); +int __cdecl WXML::Rewrite::ToStringCode3(int a1, int *a2); +int __cdecl WXML::Rewrite::ToStringCode2[abi:cxx11](int a1, int a2, int a3); +int __cdecl WXML::Rewrite::ToStringCode2(int a1, int *a2); +void __cdecl WXML::Rewrite::ToStringCode(int *a1, int a2); +int __cdecl WXML::Rewrite::ToStringCode(int a1, int *a2); +unsigned int __thiscall std::string::basic_string(void **this, char *Str); +void __cdecl WXML::Rewrite::GetToken(int a1, int a2); +BOOL __cdecl WXML::Rewrite::RewriteRPX(int a1, unsigned int *a2, char *a3, char *Str); +int __cdecl WXML::Rewrite::RewriteImg(int a1, unsigned int *a2, int *a3, int a4, int a5); +void __tcf_3(void); // idb +void __tcf_4(void); // idb +void __tcf_5(void); // idb +void __tcf_6(void); // idb +void __tcf_7(void); // idb +void __tcf_8(void); // idb +void __tcf_9(void); // idb +void __tcf_10(void); // idb +void __tcf_11(void); // idb +void __tcf_12(void); // idb +void __tcf_13(void); // idb +void __tcf_14(void); // idb +void __tcf_15(void); // idb +void __tcf_16(void); // idb +void __tcf_17(void); // idb +void __tcf_18(void); // idb +void __tcf_19(void); // idb +void __tcf_20(void); // idb +void __tcf_21(void); // idb +void __tcf_22(void); // idb +void __tcf_23(void); // idb +void __tcf_24(void); // idb +void __tcf_25(void); // idb +void __tcf_26(void); // idb +void __tcf_27(void); // idb +void __tcf_28(void); // idb +void __tcf_29(void); // idb +void __tcf_30(void); // idb +void __tcf_31(void); // idb +void __tcf_32(void); // idb +void __tcf_33(void); // idb +void __tcf_34(void); // idb +void __tcf_35(void); // idb +void __tcf_36(void); // idb +void __tcf_37(void); // idb +void __tcf_38(void); // idb +void __tcf_39(void); // idb +void __tcf_40(void); // idb +void __tcf_41(void); // idb +int printf(char *a1, ...); +void __tcf_2(void); // idb +int sprintf(FILE *a1, int a2, ...); +// int __usercall __gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>@(int a1@, int a2@); +// void *__usercall std::_Vector_base::_M_allocate@(unsigned int a1@); +// void __usercall std::_Rb_tree,std::less,std::allocator>::_M_erase(int a1@); +// void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(int a1@); +int __thiscall std::ostream::operator<<(void *this, int (__cdecl *a2)(void *)); +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2); +// void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(int a1@); +// void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(int a1@); +int __cdecl WXML::Compiler::GetVersionInfo(int a1, int *a2); +// void __usercall std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_erase(int a1@); +// void __usercall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(int a1@); +// void __usercall std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_erase(int a1@); +int __thiscall std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(volatile signed __int32 **this, volatile signed __int32 *a2); +unsigned int __thiscall std::string::basic_string(void **this, char *Str); +void **__cdecl WXML::Compiler::WXMLHelperCode[abi:cxx11](void **a1); +void **__cdecl WXML::Compiler::GetFuncId(void **a1, _DWORD *a2, int a3); +void __thiscall std::vector::operator=(void *this, int *a2); +// void __usercall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(int a1@); +void __fastcall std::deque::~deque(int a1); +int __cdecl WXML::Compiler::DealWxsTag(int a1, int **a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7); +struct _Unwind_Exception *__cdecl WXML::Compiler::RenderDefine(unsigned int **a1, WXML::NameAllocator *a2, _DWORD *a3, int a4, int a5, int a6, unsigned __int8 a7, int a8, char a9, int *a10, int *a11, int *a12, int a13, int *a14, int *a15, int *a16, int a17, int a18, int a19, int *a20); +// struct _Unwind_Exception *__usercall WXML::Compiler::ParseSource@(WXML::DOMLib::Parser *a1@, int *a2, char **a3, char a4, int a5, int *a6, _DWORD *a7, int *a8, _DWORD *a9, _DWORD *a10, _DWORD *a11, int a12, char a13); +// std::ostream::sentry *__usercall WXML::Compiler::Compile@(int *a1@, _DWORD *a2, int *a3, unsigned __int8 **a4, _DWORD *a5, _DWORD *a6, char a7, int *a8, int a9, char a10, int *a11, int *a12, int *a13, int *a14, int *a15, int *a16, int a17, int a18, int a19, int *a20); +struct _Unwind_Exception *__cdecl WXML::Compiler::CompileLazy(_DWORD *a1, int *a2, _DWORD *a3, _DWORD *a4, _DWORD *a5, _DWORD *a6, int *a7, _DWORD *a8, char a9, int a10, int a11, char a12, int *a13, int *a14, int *a15, int *a16, int *a17, int *a18, int a19, int a20, int a21, int *a22); +void __thiscall WXML::NameAllocator::NameAllocator(_DWORD *this, int a2, int a3); +void __thiscall WXML::NameAllocator::GetNextName(int *this, int a2); +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str); +void __cdecl MMBizWxaAppComm::SplitBySlash(_DWORD *a1, void **a2); +int __cdecl MMBizWxaAppComm::PathCombine(_DWORD *a1, _DWORD *a2, unsigned int *a3); +void __tcf_1_0(void); // idb +void __tcf_2_0(void); // idb +void __tcf_3_0(void); // idb +void __tcf_4_0(void); // idb +void __tcf_5_0(void); // idb +void __tcf_6_0(void); // idb +void __tcf_7_0(void); // idb +void __tcf_8_0(void); // idb +void __tcf_9_0(void); // idb +void __tcf_10_0(void); // idb +void __tcf_11_0(void); // idb +void __tcf_12_0(void); // idb +void __tcf_13_0(void); // idb +void __tcf_14_0(void); // idb +void __tcf_15_0(void); // idb +void __tcf_16_0(void); // idb +void __tcf_17_0(void); // idb +void __tcf_18_0(void); // idb +void __tcf_19_0(void); // idb +void __tcf_20_0(void); // idb +void __tcf_21_0(void); // idb +void __tcf_22_0(void); // idb +void __tcf_23_0(void); // idb +void __tcf_24_0(void); // idb +void __tcf_25_0(void); // idb +void __tcf_26_0(void); // idb +void __tcf_27_0(void); // idb +void __tcf_28_0(void); // idb +void __tcf_29_0(void); // idb +void __tcf_30_0(void); // idb +void __tcf_31_0(void); // idb +void __tcf_32_0(void); // idb +void __tcf_33_0(void); // idb +void __tcf_34_0(void); // idb +void __tcf_35_0(void); // idb +void __tcf_36_0(void); // idb +void __tcf_37_0(void); // idb +void __tcf_38_0(void); // idb +void __tcf_39_0(void); // idb +void __tcf_40_0(void); // idb +void __tcf_41_0(void); // idb +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2); +_DWORD __stdcall std::string::operator+=(_DWORD); // weak +_DWORD __stdcall std::string::operator+=(_DWORD); // weak +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str); +// int __usercall night::NSToken::tk_is_var_start@(int a1@); +// void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(int a1@); +// void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(int a1@); +int std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_clone_node,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>(void); // weak +// int __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_copy,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>@(int a1@, int a2@); +int std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_clone_node,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>(void); // weak +// int __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_copy,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>@(int a1@, int a2@); +size_t __thiscall std::string::basic_string(void **this, char *Str); +void __thiscall night::NSStream::NSStream(_DWORD *this, int a2, int a3, int a4); +_DWORD *__thiscall night::NSStream::next(_DWORD *ecx0, night::NSStream *this); +_DWORD *__thiscall night::NSStream::peek(_DWORD *ecx0, night::NSStream *this); +_DWORD *__thiscall night::NSStream::peek_2(_DWORD *ecx0, night::NSStream *this); +bool __fastcall night::NSStream::eof(night::NSStream *a1); +bool __fastcall night::NSStream::eof_2(night::NSStream *a1); +void __thiscall __noreturn night::NSStream::err(_DWORD *this, int a2, unsigned int a3, unsigned int a4, char a5); +// void __userpurge __noreturn night::NSToken::err(int a1@, int a2, unsigned int a3, unsigned int a4, char a5); +int __thiscall night::NSToken::read_while[abi:cxx11](int this, int a2, unsigned __int8 (__cdecl *a3)(_DWORD, int), int a4); +void __fastcall night::NSToken::read_comment_method_1(int a1); +_DWORD *__fastcall night::NSToken::read_comment_method_2(int a1); +unsigned __int8 __thiscall night::NSToken::skip_comment(night::NSStream **this, unsigned __int8 **a2); +bool __stdcall night::NSASTParse::is_save_for_division(int a1); +bool __stdcall night::NSASTParse::is_exp(int a1); +unsigned int __fastcall night::NSGod::hamlet(_DWORD *a1); +_DWORD *__thiscall night::NSGod::gen_son(void *this, int a2); +struct _Unwind_Exception *__thiscall night::NSToken::read_string(night::NSStream **this, char a2, int a3); +struct _Unwind_Exception *__thiscall night::NSToken::read_number(night::NSStream **this, int a2); +int __thiscall night::NSGod::gen_girl(void *this, int a2); +void __thiscall night::NSToken::push(int this, int a2); +struct _Unwind_Exception *__thiscall night::NSToken::read_var(int this, int a2); +unsigned __int8 **__fastcall night::NSToken::read_next(int a1); +unsigned __int8 **__fastcall night::NSToken::peek(int a1); +bool __fastcall night::NSToken::eof(int a1); +unsigned __int8 **__thiscall night::NSASTParse::is_punctuation(int *this, int a2); +unsigned __int8 **__thiscall night::NSASTParse::is_buildin_keywords(int *this, int a2); +unsigned __int8 **__thiscall night::NSASTParse::is_op(int *this, int a2); +unsigned __int8 **__thiscall night::NSASTParse::is_op_or_comma(int *this, int a2); +int __fastcall night::NSASTParse::end_line(int a1); +// int __userpurge night::NSASTParse::is_op_self@(int a1@, night::NSASTParse *this, bool a3); +// bool __userpurge night::NSASTParse::is_obj_op_self@(int *a1@, night::NSASTParse *this, bool a3); +unsigned __int8 **__fastcall night::NSToken::next(int a1); +void __thiscall night::NSASTParse::ignore_punc_pass_sem(int *this, int a2); +void __thiscall night::NSASTParse::ignore_punc(int *this, int a2); +void __thiscall night::NSASTParse::ignore_buildin_kw(int *this, int a2); +void __thiscall night::NSASTParse::ignore_op(int *this, int a2); +struct _Unwind_Exception *__fastcall night::NSASTParse::ast_trans_kw(int *a1); +// _DWORD *__userpurge night::NSASTParse::ast_dispatch@(_DWORD *a1@, night::NSASTParse *this, bool a3); +struct _Unwind_Exception *__fastcall night::NSASTParse::ast_op_self(int a1); +int __thiscall night::NSASTParse::make_binary_or_just_value(_DWORD *this, int a2, unsigned __int8 a3); +_DWORD *__fastcall night::NSASTParse::ast_expression_no_comma(int *a1); +struct _Unwind_Exception *__fastcall night::NSASTParse::ast_varname(int a1); +_DWORD *__thiscall night::NSASTParse::ast_obj_op_self(_DWORD *this, int a2); +_DWORD *__thiscall night::NSASTParse::ast_obj_dot(int *this, int a2); +unsigned int *__fastcall night::NSASTParse::ast_if(int *a1); +struct _Unwind_Exception *__fastcall night::NSASTParse::ast_ternary_expression(int *a1); +void **__thiscall night::NSASTParse::make_list_by_parser(int *this, int a2, int a3, int a4, int a5, char a6, int a7, int a8); +_DWORD *__thiscall night::NSASTParse::ast_call(int *this, int a2); +_DWORD *__thiscall night::NSASTParse::make_call_or_just_expression(int *this, _DWORD *a2); +_DWORD *__fastcall night::NSASTParse::ast_expression(int *a1); +_DWORD *__thiscall night::NSASTParse::ast_obj_op(int *this, int a2); +_DWORD *__fastcall night::NSASTParse::ast_while(int *a1); +_DWORD *__fastcall night::NSASTParse::ast_do_while(int *a1); +_DWORD *__fastcall night::NSASTParse::ast_switch(int *a1); +struct _Unwind_Exception *__fastcall night::NSASTParse::top_down(int *a1); +unsigned __int8 **__fastcall night::NSASTParse::ast_require(int *a1); +_DWORD *__fastcall night::NSASTParse::ast_code_block(int *a1); +struct _Unwind_Exception *__fastcall night::NSASTParse::ast_function(int *a1); +_DWORD *__fastcall night::NSASTParse::ast_new_array(int *a1); +_DWORD *__fastcall night::NSASTParse::ast_for(int *a1); +_DWORD *__fastcall night::NSASTParse::ast_obj_block(int *a1); +struct _Unwind_Exception *__fastcall night::NSASTParse::ast_var(_DWORD *a1); +_DWORD *__fastcall night::NSASTParse::ast_expression_no_binary(int *a1); +char *__thiscall night::NSCompileJs::compile_var[abi:cxx11](char *this, int a2, int a3); +_DWORD *__thiscall night::NSCompileJs::compile_function[abi:cxx11](_DWORD *this, int a2, _DWORD *a3); +void **__thiscall night::NSCompileJs::compile[abi:cxx11](void **this, int a2, _DWORD *a3); +int __thiscall night::NSCompileJs::compile_k_v[abi:cxx11](int this, int a2, int a3); +_DWORD *__thiscall night::NSCompileJs::compile_if[abi:cxx11](_DWORD *this, int a2, _DWORD *a3); +_DWORD *__thiscall night::NSCompileJs::compile_for[abi:cxx11](_DWORD *this, int a2, int a3); +_DWORD *__thiscall night::NSCompileJs::compile_while[abi:cxx11](_DWORD *this, int a2, int a3); +_DWORD *__thiscall night::NSCompileJs::compile_do_while[abi:cxx11](_DWORD *this, int a2, int a3); +_DWORD *__thiscall night::NSCompileJs::compile_switch[abi:cxx11](_DWORD *this, int a2, int a3); +_BYTE *__thiscall night::NSCompileJs::compile_obj_self_op[abi:cxx11](_BYTE *this, int a2, int a3); +_BYTE *__thiscall night::NSCompileJs::compile_obj_property[abi:cxx11](_BYTE *this, int a2, int a3); +_BYTE *__thiscall night::NSCompileJs::compile_obj_dot[abi:cxx11](_BYTE *this, int a2, int a3); +_DWORD *__thiscall night::NSCompileJs::compile_op_self[abi:cxx11](_DWORD *this, int a2, int a3); +_BYTE *__thiscall night::NSCompileJs::compile_ternary[abi:cxx11](_BYTE *this, int a2, int a3); +_DWORD *__thiscall night::NSCompileJs::compile_binary[abi:cxx11](_DWORD *this, int a2, int a3); +_DWORD *__thiscall night::NSCompileJs::compile_assign[abi:cxx11](_DWORD *this, int a2, int a3); +int __thiscall night::NSCompileJs::compile_call[abi:cxx11](int this, int a2, int a3); +_DWORD *__thiscall night::NSCompileJs::compile_prog[abi:cxx11](_DWORD *this, int a2, int a3); +_DWORD *__thiscall night::NSCompileJs::compile_prog_no_sem[abi:cxx11](_DWORD *this, int a2, int a3); +char *__thiscall night::NSCompileJs::compile_once(char *this, int a2, unsigned int *a3, int a4, char a5); +int __cdecl night::compile_ns(int a1, int a2, int a3, int a4, unsigned int *a5, char a6); +int __cdecl night::compile_ns_with_sourcemap(night::NSASTParse *a1, int a2, int a3, int a4, int a5, unsigned int *a6, int a7); +void __tcf_0(void); // idb +void __tcf_1_1(void); // idb +void __tcf_2_1(void); // idb +void __tcf_3_1(void); // idb +void __tcf_4_1(void); // idb +void __tcf_5_1(void); // idb +void __tcf_6_1(void); // idb +void __tcf_7_1(void); // idb +void __tcf_8_1(void); // idb +void __tcf_9_1(void); // idb +void __tcf_10_1(void); // idb +void __tcf_11_1(void); // idb +void __tcf_12_1(void); // idb +void __tcf_13_1(void); // idb +void __tcf_14_1(void); // idb +void __tcf_15_1(void); // idb +void __tcf_16_1(void); // idb +void __tcf_17_1(void); // idb +void __tcf_18_1(void); // idb +void __tcf_19_1(void); // idb +void __tcf_20_1(void); // idb +void __tcf_21_1(void); // idb +void __tcf_22_1(void); // idb +void __tcf_23_1(void); // idb +void __tcf_24_1(void); // idb +void __tcf_25_1(void); // idb +void __tcf_26_1(void); // idb +void __tcf_27_1(void); // idb +void __tcf_28_1(void); // idb +void __tcf_29_1(void); // idb +void __tcf_30_1(void); // idb +void __tcf_31_1(void); // idb +void __tcf_32_1(void); // idb +void __tcf_33_1(void); // idb +void __tcf_34_1(void); // idb +void __tcf_35_1(void); // idb +void __tcf_36_1(void); // idb +void __tcf_37_1(void); // idb +void __tcf_38_1(void); // idb +_DWORD *__thiscall std::string::operator+=(_DWORD *this, int a2); +int __cdecl night::sourcemap::int2vlq[abi:cxx11](int a1, int a2); +int __cdecl night::sourcemap::gen_sourcemap_content(int *a1, _DWORD *a2, _DWORD *a3, int *a4, int a5, int a6); +void __tcf_1_2(void); // idb +void __tcf_2_2(void); // idb +void __tcf_3_2(void); // idb +void __tcf_4_2(void); // idb +void __tcf_5_2(void); // idb +void __tcf_6_2(void); // idb +void __tcf_7_2(void); // idb +void __tcf_8_2(void); // idb +void __tcf_9_2(void); // idb +void __tcf_10_2(void); // idb +void __tcf_11_2(void); // idb +void __tcf_12_2(void); // idb +void __tcf_13_2(void); // idb +void __tcf_14_2(void); // idb +void __tcf_15_2(void); // idb +void __tcf_16_2(void); // idb +void __tcf_17_2(void); // idb +void __tcf_18_2(void); // idb +void __tcf_19_2(void); // idb +void __tcf_20_2(void); // idb +void __tcf_21_2(void); // idb +void __tcf_22_2(void); // idb +void __tcf_23_2(void); // idb +void __tcf_24_2(void); // idb +void __tcf_25_2(void); // idb +void __tcf_26_2(void); // idb +void __tcf_27_2(void); // idb +void __tcf_28_2(void); // idb +void __tcf_29_2(void); // idb +void __tcf_30_2(void); // idb +void __tcf_31_2(void); // idb +void __tcf_32_2(void); // idb +void __tcf_33_2(void); // idb +void __tcf_34_2(void); // idb +void __tcf_35_2(void); // idb +void __tcf_36_2(void); // idb +void __tcf_37_2(void); // idb +void __tcf_38_2(void); // idb +void __tcf_39_1(void); // idb +int __cdecl night::str::path_combine(_DWORD *a1, _DWORD *a2, int a3); +int __cdecl night::str::get_token(int a1, _DWORD *a2, unsigned int a3); +int __cdecl night::readfile(char *FileName, unsigned int *a2); +int __cdecl night::writefile(char *FileName, int); // idb +bool __cdecl WXML::DOMLib::AttrsCompartor(int a1, int a2); +void __tcf_1_3(void); // idb +// int __usercall __gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>::operator()<__gnu_cxx::__normal_iterator*,std::vector>>,__gnu_cxx::__normal_iterator*,std::vector>>>@(int (__cdecl *a1)(int, int)@, int a2@, int a3@); +// void __usercall std::_Rb_tree,std::less,std::allocator>::_M_erase(int a1@); +// void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(int a1@); +// std::ostream::sentry *__usercall std::operator<<>@(std::ostream::sentry *a1@, char a2@
); +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str); +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2); +// int __userpurge WXML::DOMLib::WXMLDom::GenRawId@(_DWORD *a1@, WXML::DOMLib::WXMLDom *this, unsigned __int64 *a3); +void __fastcall WXML::DOMLib::Parser::Match(int a1); +bool __stdcall WXML::DOMLib::Parser::IsValidTag(const char **a1); +_DWORD *__fastcall WXML::DOMLib::Parser::Peek(_DWORD *a1); +int __cdecl WXML::DOMLib::WXMLDom::Error(int a1, int *a2, int a3, int *a4, int *a5); +int __cdecl WXML::DOMLib::joinString(int a1, _DWORD *a2, char a3); +_DWORD *__thiscall WXML::DOMLib::Parser::GetParsed(_DWORD *ecx0, WXML::DOMLib::Parser *this); +// void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_drop_node(void **a1@); +// void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(int a1@); +void __fastcall WXML::DOMLib::WXMLDom::~WXMLDom(int a1); +void __thiscall std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(volatile signed __int32 **this, int a2); +void __thiscall WXML::DOMLib::Token::operator=(int this, int a2); +_DWORD *__thiscall WXML::DOMLib::Parser::Error(_DWORD *ecx0, WXML::DOMLib::Parser *this, char *a3, WXML::DOMLib::Token *a4); +unsigned __int8 *__thiscall WXML::DOMLib::Token::operator=(int this, int a2); +unsigned __int8 *__thiscall std::pair::operator=(unsigned __int8 **this, int a2); +unsigned int __thiscall std::string::basic_string(void **this, char *Str); +void **__cdecl WXML::DOMLib::removern(void **a1, _DWORD *a2); +// int __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_lower_bound@(int a1@, int a2@, int a3@); +int __thiscall WXML::DOMLib::WXMLDom::AddTestAttr(_DWORD *this, int *a2, int a3, char a4); +int __cdecl WXML::DOMLib::splitString(int a1, int *a2, char a3); +int __cdecl WXML::DOMLib::resolvePath(int a1, int *a2, int *a3); +void __fastcall WXML::DOMLib::Parser::ATTR(WXML::DOMLib::Parser *a1); +void __fastcall WXML::DOMLib::Parser::ATTR_LIST(WXML::DOMLib::Parser *a1); +void __thiscall std::map::erase(_DWORD *this, int a2); +int __fastcall WXML::DOMLib::WXMLDom::RewriteTree(int a1); +void __cdecl WXML::DOMLib::recurseDependencies(int *a1, int *a2, _DWORD *a3); +// void __usercall WXML::DOMLib::Parser::DOM(_DWORD *a1@, WXML::DOMLib::Parser *a2@); +// void __usercall WXML::DOMLib::Parser::DOMS(WXML::DOMLib::Parser *a1@, WXML::DOMLib::Parser *a2@); +// int __userpurge WXML::DOMLib::Parser::Parse@(int a1@, WXML::DOMLib::Parser *a2@, char *Str, int a4, int a5, _DWORD *a6); +int __fastcall WXML::DOMLib::WXMLDom::RecordAllPath(_DWORD *a1); +void __fastcall std::deque>::~deque(int a1); +int __cdecl WXML::DOMLib::WXMLDom::DealSingleTokenToOps(int *a1, unsigned int *a2, WXML::EXPRLib::Parser *a3, _DWORD *a4, _DWORD *a5, char a6, int a7, char a8, int *a9, char a10, int a11); +int __thiscall WXML::DOMLib::WXMLDom::RenderAllOpsAndRecord(_DWORD *this, int *a2, unsigned int *a3, WXML::EXPRLib::Parser *a4, _DWORD *a5, int *a6, unsigned __int8 a7, int a8); +int __thiscall WXML::DOMLib::WXMLDom::RenderNonDefine(int this, int *a2, int *a3, int a4, int *a5, int a6, int *a7, int *a8, int *a9, int *a10, int *a11, char a12, unsigned __int8 a13, int a14, int a15); +int __thiscall WXML::DOMLib::WXMLDom::RenderChildren(_DWORD *this, int *a2, int *a3, int a4, int *a5, int a6, int *a7, int *a8, int *a9, int *a10, int *a11, char a12, unsigned __int8 a13, int a14, int a15); +int __thiscall WXML::DOMLib::WXMLDom::RenderMeAsFunction(_DWORD *this, int *a2, int *a3, int a4, int *a5, int a6, int *a7, int *a8, int *a9, int *a10, int *a11, int *a12, char a13, int *a14, char a15, unsigned __int8 a16, int a17, int *a18); +void __tcf_0_0(void); // idb +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2); +int __fastcall WXML::DOMLib::Machine::Reset(_DWORD *a1); +void WXML::DOMLib::Machine::InitTransitTable(); +void __thiscall WXML::DOMLib::Machine::Machine(int this, int a2); +// int __usercall std::__relocate_a_1>@(int a1@, int a2@, int a3@); +int __thiscall WXML::DOMLib::Machine::Feed(struct _Unwind_Exception *this, char a2, int a3, unsigned __int8 **a4, int a5, int a6); +void __thiscall std::__shared_ptr::operator=(_DWORD *this, _DWORD *a2); +int __thiscall WXML::DOMLib::Tokenizer::GetTokens(_DWORD *this, _DWORD *a2, int a3, _DWORD *a4); +void __thiscall WXML::DOMLib::Tokenizer::Tokenizer(_DWORD *this, char *Str, int a3); +void __tcf_1_4(void); // idb +_DWORD *__thiscall std::string::operator+=(_DWORD *this, int a2); +_DWORD *__thiscall std::string::operator+=(_DWORD *this, char *Str); +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str); +// std::ostream::sentry *__usercall std::operator<<>@(std::ostream::sentry *a1@, char a2@
); +size_t __thiscall std::string::basic_string(void **this, char *Str); +std::ostream::sentry *__cdecl WXML::EXPRLib::OutputAsStringOrKeyWord(int a1, int *a2, int a3, _BYTE *a4); +int __thiscall WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(int *this, int a2, int a3, _BYTE *a4); +// bool __usercall __gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>@(char **a1@, int a2@); +void __thiscall std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count(int *this, int a2); +void __fastcall WXML::EXPRLib::ExprSyntaxTree::~ExprSyntaxTree(int a1); +void __thiscall std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(volatile signed __int32 **this, int a2); +int __thiscall WXML::EXPRLib::ExprSyntaxTree::RenderCode(int *this, WXML::EXPRLib::Token *a2, int *a3, int *a4, int *a5, int *a6, int *a7, char a8, int a9); +// void __usercall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(int a1@); +int __thiscall WXML::EXPRLib::Parser::Parse(int this, char **a2, int a3, int a4, int a5, unsigned int *a6, char a7); +// void __usercall std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_erase(_DWORD *a1@); +void __tcf_0_1(void); // idb +void __tcf_0_2(void); // idb +unsigned int __thiscall std::string::_M_construct(void **this, unsigned __int8 *Src, size_t Size); +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2); +const char *__fastcall WXML::EXPRLib::Token::GetTokenName(const char **a1); +const char *__fastcall WXML::EXPRLib::Token::GetLiteral(_DWORD *a1); +void WXML::EXPRLib::Tokenizer::InitTransitTable(); +unsigned int __thiscall WXML::EXPRLib::Tokenizer::Tokenizer(void **this, char *Str, int a3, int a4, int a5); +// _DWORD *__usercall std::__relocate_a_1>@(_DWORD *a1@, _DWORD *a2@, _DWORD *a3@); +int __thiscall WXML::EXPRLib::Tokenizer::GetTokens(int *this, _DWORD *a2, unsigned int *a3); +void __tcf_1_5(void); // idb +size_t __thiscall std::string::basic_string(void **this, char *Str); +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str); +int WXML::EXPRLib::TransitTable::GetExprNTType(); +int WXML::EXPRLib::TransitTable::GetAttrListNTType(); +void __thiscall std::vector::_M_move_assign(void *this, int *a2); +// void __usercall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(int a1@); +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::operator=(_DWORD *this, _DWORD *a2); +_DWORD WXML::EXPRLib::TransitTable::Init(WXML::EXPRLib::TransitTable *__hidden this); // idb +void __tcf_0_3(void); // idb +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2); +unsigned int __thiscall std::string::basic_string(void **this, unsigned __int8 *Src, unsigned int a3); +int __cdecl WXML::StringTemplating::Deal(char *Str, int a2, char **a3, _BYTE *a4); +// _DWORD *__usercall d_make_comp@(_DWORD *a1@, int a2@, int a3@, int a4); +// _DWORD *__usercall d_make_name@(_DWORD *a1@, int a2@, int a3@); +// int __usercall d_number@(int a1@); +// int __usercall d_call_offset@(int a1@, int a2@); +// _DWORD *__usercall d_ref_qualifier@(_DWORD *a1@, _DWORD *a2@); +// int __usercall d_discriminator@(int a1@); +// int __usercall d_count_templates_scopes@(int result@, int *a2@, int a3@); +// _DWORD *__usercall d_index_template_argument_part_0@(_DWORD *result@, int a2@); +void __cdecl d_growable_string_callback_adapter(void *Src, size_t Size, int a3); +int sprintf_constprop_0(FILE *a1, int a2, ...); +// BOOL __usercall next_is_type_qual_isra_0@(char *a1@); +// int __usercall d_append_char@(int a1@, char a2@
); +// _DWORD *__usercall d_lookup_template_argument@(int a1@, int a2@); +// size_t __usercall d_append_string@(int a1@, const char *Str@); +// _DWORD *__usercall d_find_pack@(int a1@, _DWORD *a2@, int a3@); +// _DWORD *__usercall d_template_param@(_DWORD *a1@); +// size_t __usercall d_append_num@(int a1@, int a2@); +// _DWORD *__usercall d_source_name@(int a1@); +// _DWORD *__usercall d_substitution@(int a1@, char a2@
); +// int __usercall d_print_java_identifier@(int result@, unsigned int a2@, int a3@); +// int *__usercall d_type@(_DWORD *a1@, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12); +// _DWORD *__usercall d_operator_name@(_DWORD *a1@); +// int __usercall d_parmlist@(_DWORD *a1@); +// _DWORD *__usercall d_bare_function_type@(_DWORD *a1@, int a2@); +// _DWORD *__usercall d_function_type@(int a1@); +// _DWORD *__usercall d_unqualified_name@(_DWORD *a1@); +// int *__usercall d_name@(_DWORD *a1@); +// unsigned int *__usercall d_encoding_part_0@(int a1@, int a2@); +// _DWORD *__usercall d_special_name@(_DWORD *a1@); +// unsigned int *__usercall d_expr_primary@(_DWORD *a1@); +// unsigned int *__usercall d_expression_1@(_DWORD *a1@); +// _DWORD *__usercall d_exprlist@(_DWORD *a1@, char a2@
); +// int **__usercall d_cv_qualifiers@(_DWORD *a1@, int **a2@, int a3@); +// unsigned int *__usercall d_template_arg@(_DWORD *a1@); +// _DWORD *__usercall d_template_args_1@(_DWORD *a1@); +// unsigned int __usercall d_print_comp_inner@(unsigned int result@, int a2@); +// int __usercall d_print_comp@(int result@, int a2@); +// int __usercall d_print_mod@(int a1@, _DWORD *a2@); +// unsigned int __usercall d_print_function_type@(unsigned int a1@, int a2@, _DWORD *a3); +// unsigned int __usercall d_print_mod_list@(unsigned int result@, _DWORD *a2@, int a3); +// int __usercall d_print_array_type@(int a1@, int a2@, int **a3); +// int __usercall d_print_conversion@(int a1@, int a2@); +// int __usercall d_print_expr_op@(int a1@, _DWORD *a2@); +// BOOL __usercall d_demangle_callback_constprop_0@(char *a1@, void (__cdecl *a2)(char *, int, int)@, int a3@); +// int __usercall d_print_subexpr@(int a1@, _DWORD *a2@); +// int __usercall d_maybe_print_fold_expression@(int a1@, int a2@); +char *__cdecl __cxa_demangle(const char *lpmangled, char *lpout, size_t *lpoutlen, int *lpstatus); +unsigned int __cdecl __gcclibcxx_demangle_callback(char *a1, void (__cdecl *a2)(char *, int, int), int a3); +void __do_global_dtors(void); // idb +int __do_global_ctors(); +int __main(); +int _setargv(); +int __stdcall __dyn_tls_dtor(int a1, unsigned int a2, int a3); +int __stdcall __dyn_tls_init(int a1, int a2, int a3); +int __tlregdtor(); +int __cdecl _matherr(struct _exception *Except); +void __cdecl fpreset(); +void __noreturn __report_error(char *Format, ...); +// _DWORD *__usercall mark_section_writable@(const void *a1@); +void _pei386_runtime_relocator(); +int (__cdecl *__cdecl __mingw_raise_matherr(int a1, int a2, double a3, double a4, double a5))(_DWORD); +void __cdecl __mingw_setusermatherr(_UserMathErrorFunctionPointer UserMathErrorFunction); +LONG __stdcall _gnu_exception_handler(_EXCEPTION_POINTERS *a1); +void __mingwthr_run_key_dtors_part_0(); +int __cdecl ___w64_mingwthr_add_key_dtor(int a1, int a2); +int __cdecl ___w64_mingwthr_remove_key_dtor(int a1); +int __cdecl __mingw_TLScallback(int a1, unsigned int a2); +BOOL __cdecl _ValidateImageBase(int a1); +int __cdecl _FindPESection(int a1, unsigned int a2); +const char *__cdecl _FindPESectionByName(char *Str); +int __cdecl __mingw_GetSectionForAddress(int a1); +int __mingw_GetSectionCount(); +int __cdecl _FindPESectionExec(int a1); +int _GetPEImageBase(); +BOOL __cdecl _IsNonwritableInCurrentImage(int a1); +int __cdecl __mingw_enum_import_library_names(int a1); +int __cdecl __gthr_win32_once(int a1, void (*a2)(void)); +int __cdecl __gthr_win32_key_create(int *a1, int a2); +DWORD __cdecl __gthr_win32_key_delete(DWORD dwTlsIndex); +LPVOID __cdecl __gthr_win32_getspecific(DWORD dwTlsIndex); +DWORD __cdecl __gthr_win32_setspecific(DWORD dwTlsIndex, LPVOID lpTlsValue); +HANDLE __cdecl __gthr_win32_mutex_init_function(_DWORD *a1); +int __cdecl __gthr_win32_mutex_destroy(int a1); +int __cdecl __gthr_win32_mutex_lock(int a1); +BOOL __cdecl __gthr_win32_mutex_trylock(volatile signed __int32 *a1); +BOOL __cdecl __gthr_win32_mutex_unlock(int a1); +HANDLE __cdecl __gthr_win32_recursive_mutex_init_function(_DWORD *a1); +DWORD __cdecl __gthr_win32_recursive_mutex_lock(int a1); +int __cdecl __gthr_win32_recursive_mutex_trylock(int a1); +BOOL __cdecl __gthr_win32_recursive_mutex_unlock(int a1); +int __cdecl __gthr_win32_recursive_mutex_destroy(int a1); +// int __usercall _Unwind_RaiseException_Phase2@(_DWORD *a1@, _DWORD *a2@, int *a3@); +BOOL fc_key_init(); +void fc_key_init_once(); +LPVOID _Unwind_SjLj_GetContext(); +// int __usercall uw_install_context_constprop_0@(int a1@); +// int __usercall _Unwind_ForcedUnwind_Phase2@(_DWORD *a1@, void ***a2@, int *a3@); +void __cdecl _Unwind_SjLj_Register(struct SjLj_Function_Context *lpfctx); +void __cdecl _Unwind_SjLj_Unregister(struct SjLj_Function_Context *lpfctx); +_Unwind_Word __cdecl _Unwind_GetGR(struct _Unwind_Context *lpuctx, int r); +int __cdecl _Unwind_GetCFA(int a1); +void __cdecl _Unwind_SetGR(struct _Unwind_Context *lpuctx, int r, _Unwind_Word v); +int __cdecl _Unwind_GetIP(int a1); +int __cdecl _Unwind_GetIPInfo(int a1, _DWORD *a2); +int __cdecl _Unwind_SetIP(int a1, int a2); +int __cdecl _Unwind_GetLanguageSpecificData(int a1); +int _Unwind_GetRegionStart(); +int _Unwind_FindEnclosingFunction(); +int _Unwind_GetDataRelBase(); +int _Unwind_GetTextRelBase(); +_Unwind_Reason_Code __cdecl _Unwind_SjLj_RaiseException(struct _Unwind_Exception *lpuexcpt); +_Unwind_Reason_Code __cdecl _Unwind_SjLj_ForcedUnwind(struct _Unwind_Exception *lpuexcpt, _Unwind_Stop_Fn pfnstop, void *pdata); +void __cdecl _Unwind_SjLj_Resume(struct _Unwind_Exception *lpuexcpt); +_Unwind_Reason_Code __cdecl _Unwind_SjLj_Resume_or_Rethrow(struct _Unwind_Exception *lpuexcpt); +void __cdecl _Unwind_DeleteException(struct _Unwind_Exception *lpuexcpt); +_Unwind_Reason_Code __cdecl _Unwind_Backtrace(_Unwind_Trace_Fn pfntrace, void *lpdata); +void __cdecl emutls_destroy(int *a1); +// _DWORD *__usercall emutls_alloc@(size_t *a1@); +DWORD emutls_init(); +_DWORD *__cdecl __emutls_get_address(size_t *a1); +unsigned int *__cdecl __emutls_register_common(unsigned int *a1, unsigned int a2, unsigned int a3, unsigned int a4); +long double __cdecl __mingw_strtod(unsigned __int8 *a1, unsigned __int8 **a2); +long double __cdecl __mingw_strtof(unsigned __int8 *a1, unsigned __int8 **a2); +wint_t __cdecl btowc(int Ch); +int __cdecl __asctoe64(char *Str, long double *a2); +long double __cdecl strtold(const char *String, char **EndPtr); +unsigned __int64 __cdecl strtoull(const char *String, char **EndPtr, int Radix); +int __cdecl wctob(wint_t WCh); +wctype_t __cdecl wctype(const char *name); +FILE *__cdecl fopen64(const char *FileName, const char *Mode); +int __cdecl fseeko64(FILE *Stream, fpos_t a2, int a3); +fpos_t __cdecl ftello64(FILE *Stream); +__int64 __cdecl lseek64(int FileHandle, __int64 Offset, int Origin); +int __cdecl __mingw_vfprintf(FILE *Stream, char *a2, int *a3); +int __cdecl __mingw_vsnprintf(FILE *a1, int a2, char *a3, int *a4); +int __cdecl __mingw_vsprintf(FILE *a1, char *a2, int *a3); +int *__cdecl __increment_D2A(int *a1); +// int __usercall rvOK_constprop_0_isra_0@(int *a1@, int *a2@, char *a3@, double a4, int a5, int a6, _DWORD *a7); +_DWORD *__cdecl __decrement_D2A(int a1); +int *__cdecl __set_ones_D2A(int *a1, int a2); +int __cdecl __strtodg(unsigned __int8 *a1, unsigned __int8 **a2, int *a3, int *a4, void *a5); +int *__cdecl __sum_D2A(int *a1, int *a2); +// unsigned int __usercall __m16m@(unsigned __int16 a1@, int a2@, int a3@); +// BOOL __usercall __eshift_part_0@(__int16 *a1@, int a2@); +__int16 *__cdecl __emovi(int a1, int a2); +unsigned int __cdecl __eaddm(int a1, int a2); +unsigned int __cdecl __esubm(int a1, int a2); +BOOL __cdecl __edivm(int a1, int *a2); +int __cdecl __emulm(int a1, int a2); +__int16 *__cdecl __toe64(_WORD *a1, int a2); +int __cdecl __ecmp(int a1, int a2); +BOOL __cdecl __eshift(__int16 *a1, int a2); +int __cdecl __enormlz(_WORD *a1); +__int16 __cdecl __emdnorm(int a1, int a2, int a3, int a4, int a5, int a6); +int __cdecl __emovo(_WORD *a1, int a2); +__int16 __cdecl __emul(int a1, int a2, int a3); +// int *__usercall __pformat_cvt@(int a1@, __int64 a2, int a3, int a4, int a5, int *a6, int *a7); +// int __usercall __pformat_putc@(int a1@, int a2@); +// int __usercall __pformat_wputchars@(int a1@, int a2@, int a3@); +// int __usercall __pformat_putchars@(_BYTE *a1@, int a2@, int a3@); +// int __usercall __pformat_puts@(char *a1@, int a2@); +// int __usercall __pformat_emit_inf_or_nan@(int a1@, int a2@, int a3@); +// int __usercall __pformat_xint@(int a1@, __int64 a2, int a3, int a4, int a5); +int __cdecl __pformat_int(__int64 a1, int a2, int a3, int a4); +// int __usercall __pformat_emit_radix_point@(int a1@); +// int __usercall __pformat_emit_float@(int a1@, char *a2@, int a3@, int a4); +// int __usercall __pformat_emit_efloat@(int a1@, char *a2@, int a3@, _DWORD *a4); +// void __usercall __pformat_efloat(_DWORD *a1@, long double a2); +// void __usercall __pformat_float(int a1@, long double a2); +// void __usercall __pformat_gfloat(_DWORD *a1@, long double a2); +// int __usercall __pformat_xldouble@(int a1@, long double a2); +int __cdecl __mingw_pformat(__int16 a1, FILE *a2, int a3, char *a4, int *a5); +int *__cdecl __rv_alloc_D2A(int a1); +int *__cdecl __nrv_alloc_D2A(char *a1, _DWORD *a2, int a3); +void __cdecl __freedtoa(_DWORD *a1); +unsigned int __cdecl __quorem_D2A(int a1, int a2); +int *__cdecl __gdtoa(int *a1, int a2, int *a3, int *a4, int a5, int a6, int *a7, int **a8); +int __cdecl __gethex_D2A(unsigned __int8 **a1, int *a2, int *a3, int **a4, int a5); +int __cdecl __rshift_D2A(int a1, int a2); +int __cdecl __trailz_D2A(int a1); +int __mingw_hexdig_init_D2A(); +int __cdecl __hexnan_D2A(unsigned __int8 **a1, int *a2, int *a3); +// void __usercall dtoa_lock(int a1@); +void dtoa_lock_cleanup(void); // idb +int *__cdecl __Balloc_D2A(int a1); +void __cdecl __Bfree_D2A(void *Block); +int *__cdecl __multadd_D2A(int *a1, int a2, int a3); +_DWORD *__cdecl __i2b_D2A(int a1); +int *__cdecl __mult_D2A(int a1, int a2); +int *__cdecl __pow5mult_D2A(int *a1, int a2); +int *__cdecl __lshift_D2A(int *a1, int a2); +int __cdecl __cmp_D2A(int a1, int a2); +int *__cdecl __diff_D2A(int a1, int a2); +long double __cdecl __b2d_D2A(int a1, _DWORD *a2); +int *__cdecl __d2b_D2A(double a1, _DWORD *a2, _DWORD *a3); +int __cdecl __strcp_D2A(__int64 a1); +int *__cdecl __s2b_D2A(int a1, int a2, int a3, int a4, int a5); +long double __cdecl __ratio_D2A(int a1, int a2); +int __cdecl __match_D2A(char **a1, char *a2); +size_t __cdecl __copybits_D2A(char *a1, int Val, size_t Size); +int __cdecl __any_on_D2A(int a1, int a2); +size_t __cdecl strnlen(const char *String, size_t MaxCount); +size_t __cdecl wcsnlen(const wchar_t *Source, size_t MaxCount); +// size_t __cdecl wcsxfrm(wchar_t *Destination, const wchar_t *Source, size_t MaxCount); +// size_t __cdecl wcslen(const wchar_t *String); +// size_t __cdecl wcsftime(wchar_t *Buffer, size_t SizeInWords, const wchar_t *Format, const struct tm *Tm); +// int __cdecl wcscoll(const wchar_t *String1, const wchar_t *String2); +// int __cdecl vfprintf(FILE *const Stream, const char *const Format, va_list ArgList); +// wint_t __cdecl ungetwc(wint_t Character, FILE *Stream); +// int __cdecl ungetc(int Character, FILE *Stream); +// wint_t __cdecl towupper(wint_t C); +// wint_t __cdecl towlower(wint_t C); +// size_t __cdecl strxfrm(char *Destination, const char *Source, size_t MaxCount); +// int __cdecl strncmp(const char *Str1, const char *Str2, size_t MaxCount); +// size_t __cdecl strlen(const char *Str); +// size_t __cdecl strftime(char *Buffer, size_t SizeInBytes, const char *Format, const struct tm *Tm); +// char *__cdecl strerror(int ErrorMessage); +// int __cdecl strcoll(const char *String1, const char *String2); +// int __cdecl strcmp(const char *Str1, const char *Str2); +// _crt_signal_t __cdecl signal(int Signal, _crt_signal_t Function); +// int __cdecl setvbuf(FILE *Stream, char *Buffer, int Mode, size_t Size); +// char *__cdecl setlocale(int Category, const char *Locale); +// void *__cdecl realloc(void *Block, size_t Size); +// wint_t __cdecl putwc(wchar_t Character, FILE *Stream); +// int __cdecl putc(int Character, FILE *Stream); +// void *__cdecl memset(void *, int Val, size_t Size); +// void *__cdecl memmove(void *, const void *Src, size_t Size); +// void *__cdecl memcpy(void *, const void *Src, size_t Size); +// int __cdecl memcmp(const void *Buf1, const void *Buf2, size_t Size); +// void *__cdecl memchr(const void *Buf, int Val, size_t MaxCount); +// void *__cdecl malloc(size_t Size); +// struct lconv *__cdecl localeconv(); +// int __cdecl iswctype(wint_t C, wctype_t Type); +// int __cdecl isupper(int C); +// int __cdecl isspace(int C); +// int __cdecl islower(int C); +// wint_t __cdecl getwc(FILE *Stream); +// int __cdecl getc(FILE *Stream); +// size_t __cdecl fwrite(const void *Buffer, size_t ElementSize, size_t ElementCount, FILE *Stream); +// int __cdecl fsetpos(FILE *Stream, const fpos_t *Position); +// void __cdecl free(void *Block); +// size_t __cdecl fread(void *Buffer, size_t ElementSize, size_t ElementCount, FILE *Stream); +// int __cdecl fputs(const char *Buffer, FILE *Stream); +// int __cdecl fputc(int Character, FILE *Stream); +// int fprintf(FILE *const Stream, const char *const Format, ...); +// FILE *__cdecl fopen(const char *FileName, const char *Mode); +// char *__cdecl fgets(char *Buffer, int MaxCount, FILE *Stream); +// int __cdecl fgetpos(FILE *Stream, fpos_t *Position); +// int __cdecl fflush(FILE *Stream); +// int __cdecl fclose(FILE *Stream); +// void __cdecl __noreturn exit(int Code); +// void *__cdecl calloc(size_t Count, size_t Size); +// void __cdecl __noreturn abort(); +// int __cdecl write(int FileHandle, const void *Buf, unsigned int MaxCharCount); +// int __cdecl _strnicmp(const char *String1, const char *String2, size_t MaxCount); +// int __cdecl read(int FileHandle, void *DstBuf, unsigned int MaxCharCount); +// _onexit_t __cdecl _onexit(_onexit_t Func); +// void __cdecl _initterm(_PVFV *First, _PVFV *Last); +// int __cdecl _fileno(FILE *Stream); +// int __cdecl fileno(FILE *Stream); +// __int64 __cdecl _filelengthi64(int FileHandle); +// FILE *__cdecl fdopen(int FileHandle, const char *Format); +// int *__cdecl _errno(); +// int __cdecl close(int FileHandle); +// void __cdecl _cexit(); +// int __cdecl _amsg_exit(_DWORD); weak +// void __cdecl __setusermatherr(_UserMathErrorFunctionPointer UserMathErrorFunction); +// void __cdecl __set_app_type(_crt_app_type Type); +// int *__cdecl __p__fmode(); +// int *__cdecl __p__commode(); +// char **__cdecl __p__acmdln(); +// int __cdecl __getmainargs(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak +int __cdecl __mbrtowc_cp(LPWSTR lpWideCharStr, BYTE *lpMultiByteStr, int a3, int *a4, UINT CodePage, unsigned int a6); +size_t __cdecl mbrtowc(wchar_t *DstCh, const char *SrcCh, size_t SizeInBytes, mbstate_t *State); +size_t __cdecl mbsrtowcs(wchar_t *Dest, const char **PSrc, size_t Count, mbstate_t *State); +size_t __cdecl mbrlen(const char *Ch, size_t SizeInBytes, mbstate_t *State); +int __cdecl __wcrtomb_cp(LPSTR lpMultiByteStr, WCHAR a2, UINT CodePage, int cbMultiByte); +size_t __cdecl wcrtomb(char *Dest, wchar_t Source, mbstate_t *State); +size_t __cdecl wcsrtombs(char *Dest, const wchar_t **PSource, size_t Count, mbstate_t *State); +FILE *__cdecl __acrt_iob_func(unsigned int Ix); +_invalid_parameter_handler __cdecl _get_invalid_parameter_handler(); +_invalid_parameter_handler __cdecl _set_invalid_parameter_handler(_invalid_parameter_handler Handler); +int __cdecl mingw_rand_s(int a1); +int __cdecl init_rand_s(int a1); +void __cdecl _lock_file(FILE *Stream); +void __cdecl _unlock_file(FILE *Stream); +int __cdecl ___mb_cur_max_func(); +int msvcrt___lc_codepage_func(); +int setlocale_codepage_hack(); +int init_codepage_func(); +unsigned int __cdecl ___lc_codepage_func(); +// char *__cdecl strchr(const char *Str, int Val); +// int __cdecl atoi(const char *String); +// void __cdecl _unlock(FILE *Stream); weak +// int __cdecl _lock(_DWORD); weak +int __cdecl __mingwthr_key_dtor(int a1, int a2); +int __cdecl _txnal_cow_string_D1(); +void __cdecl __noreturn _txnal_cow_string_c_str(); +void __cdecl __noreturn _txnal_sso_string_c_str(); +char *__cdecl _txnal_logic_error_get_msg(char *a1); +void __cdecl _txnal_cow_string_D1_commit(volatile signed __int32 *Block); +char *__cdecl _txnal_runtime_error_get_msg(char *a1); +void __cdecl _txnal_cow_string_C1_for_exceptions(struct _Unwind_Exception **a1); +int printf(char *a1, ...); +int sprintf(char *a1, char *a2, ...); +void __cdecl __noreturn _ZGTtNKSt11logic_error4whatEv(int a1); +void __cdecl __noreturn _ZGTtNKSt13runtime_error4whatEv(int a1); +void __cdecl _ZGTtNSt11logic_errorC2EPKc(struct _Unwind_Exception **a1); +void __cdecl _ZGTtNSt11logic_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(struct _Unwind_Exception **a1); +void __cdecl __noreturn _ZGTtNSt11logic_errorD0Ev(int a1); +int _ZGTtNSt11logic_errorD2Ev(); +void __cdecl _ZGTtNSt11range_errorC2EPKc(struct _Unwind_Exception **a1); +void __cdecl _ZGTtNSt11range_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(struct _Unwind_Exception **a1); +void __cdecl __noreturn _ZGTtNSt11range_errorD0Ev(int a1); +int _ZGTtNSt11range_errorD2Ev(); +void __cdecl _ZGTtNSt12domain_errorC2EPKc(struct _Unwind_Exception **a1); +void __cdecl _ZGTtNSt12domain_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(struct _Unwind_Exception **a1); +void __cdecl __noreturn _ZGTtNSt12domain_errorD0Ev(int a1); +int _ZGTtNSt12domain_errorD2Ev(); +void __cdecl _ZGTtNSt12length_errorC2EPKc(struct _Unwind_Exception **a1); +void __cdecl _ZGTtNSt12length_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(struct _Unwind_Exception **a1); +void __cdecl __noreturn _ZGTtNSt12length_errorD0Ev(int a1); +int _ZGTtNSt12length_errorD2Ev(); +void __cdecl _ZGTtNSt12out_of_rangeC2EPKc(struct _Unwind_Exception **a1); +void __cdecl _ZGTtNSt12out_of_rangeC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(struct _Unwind_Exception **a1); +void __cdecl __noreturn _ZGTtNSt12out_of_rangeD0Ev(int a1); +int _ZGTtNSt12out_of_rangeD2Ev(); +void __cdecl _ZGTtNSt13runtime_errorC2EPKc(struct _Unwind_Exception **a1); +void __cdecl _ZGTtNSt13runtime_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(struct _Unwind_Exception **a1); +void __cdecl __noreturn _ZGTtNSt13runtime_errorD0Ev(int a1); +int _ZGTtNSt13runtime_errorD2Ev(); +void __cdecl _ZGTtNSt14overflow_errorC2EPKc(struct _Unwind_Exception **a1); +void __cdecl _ZGTtNSt14overflow_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(struct _Unwind_Exception **a1); +void __cdecl __noreturn _ZGTtNSt14overflow_errorD0Ev(int a1); +int _ZGTtNSt14overflow_errorD2Ev(); +void __cdecl _ZGTtNSt15underflow_errorC2EPKc(struct _Unwind_Exception **a1); +void __cdecl _ZGTtNSt15underflow_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(struct _Unwind_Exception **a1); +void __cdecl __noreturn _ZGTtNSt15underflow_errorD0Ev(int a1); +int _ZGTtNSt15underflow_errorD2Ev(); +void __cdecl _ZGTtNSt16invalid_argumentC2EPKc(struct _Unwind_Exception **a1); +void __cdecl _ZGTtNSt16invalid_argumentC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(struct _Unwind_Exception **a1); +void __cdecl __noreturn _ZGTtNSt16invalid_argumentD0Ev(int a1); +int _ZGTtNSt16invalid_argumentD2Ev(); +// int __usercall get_adjusted_ptr@(int a1@, int a2@, int **a3@); +// char *__usercall parse_lsda_header@(int a1@, char *a2@, int a3@); +// int __usercall check_exception_spec@(int a1@, int a2@, int *a3@, int a4); +// int __usercall base_of_encoded_value@(char a1@); +void __cdecl __gxx_exception_cleanup(_Unwind_Reason_Code a1, void (**a2)(void)); +// char *__usercall read_encoded_value_with_base@(char a1@, int *a2@, int *a3@, int *a4); +void __cdecl __noreturn __cxxabiv1::__terminate(void (*)(void)); // idb +void __cdecl __noreturn __cxxabiv1::__unexpected(void (*)(void)); // idb +void __fastcall __cxxabiv1::__forced_unwind::~__forced_unwind(void *Block); +void __fastcall __cxxabiv1::__class_type_info::~__class_type_info(_DWORD *a1); +void __cdecl __cxxabiv1::__class_type_info::~__class_type_info(__cxxabiv1::__class_type_info *__hidden this); // idb +void __fastcall __cxxabiv1::__foreign_exception::~__foreign_exception(void *Block); +void __fastcall __cxxabiv1::__si_class_type_info::~__si_class_type_info(_DWORD *a1); +void __cdecl __cxxabiv1::__si_class_type_info::~__si_class_type_info(__cxxabiv1::__si_class_type_info *__hidden this); // idb +void __fastcall __cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info(_DWORD *a1); +void __cdecl __cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info(__cxxabiv1::__vmi_class_type_info *__hidden this); // idb +_DWORD *__cdecl `anonymous namespace'::get_locale_mutex(); +void __fastcall `anonymous namespace'::io_error_category::~io_error_category(_DWORD *a1); +void __cdecl `anonymous namespace'::io_error_category::~io_error_category(_anonymous_namespace_::io_error_category *__hidden this); // idb +void __fastcall `anonymous namespace'::system_error_category::~system_error_category(void *Block); +void __fastcall `anonymous namespace'::generic_error_category::~generic_error_category(void *Block); +// void __usercall `anonymous namespace'::pool::free(int a1@); +void __spoils `anonymous namespace'::pool::allocate(); +HANDLE `anonymous namespace'::init(); +int __stdcall zcc::shared_ptr::shared_ptr(void *Block); // idb +int __stdcall zcc::shared_ptr::shared_ptr(void *Block); // idb +int __stdcall zcc::shared_ptr::shared_ptr(void *Block); // idb +void __thiscall zcc::shared_ptr::shared_ptr(_DWORD *this, int a2); +void __thiscall zcc::shared_ptr::shared_ptr(_DWORD *this, int a2); +void __thiscall zcc::shared_ptr,std::allocator>>::shared_ptr(_DWORD *this, int a2); +void __fastcall WXML::NameAllocator::~NameAllocator(int a1); +void __cdecl WXML::DOMLib::ParseException::~ParseException(void *); // idb +void __cdecl WXML::DOMLib::RenderException::~RenderException(void *); // idb +int __fastcall WXML::DOMLib::Token::ToAttrContent[abi:cxx11](int a1); +int __cdecl WXML::DOMLib::Token::GetTemplateContent(int *a1, unsigned __int8 **a2); +char __cdecl WXML::DOMLib::Token::IsValidVariableName(char **a1); +// bool __userpurge WXML::DOMLib::Token::IsMatch@(int a1@, WXML::DOMLib::Token *this, const char *a3); +unsigned __int8 **__fastcall WXML::DOMLib::Token::ToString[abi:cxx11](int a1); +_DWORD *__thiscall WXML::DOMLib::Token::Token(_DWORD *this, int a2); +// void __userpurge WXML::DOMLib::Token::Token(int a1@, WXML::DOMLib::Token *this, const WXML::DOMLib::Token *a3); +// void __userpurge WXML::DOMLib::Token::Token(int a1@, WXML::DOMLib::Token *this, const WXML::DOMLib::Token *a3); +void __fastcall WXML::DOMLib::Token::~Token(int a1); +_DWORD WXML::DOMLib::Parser::Parser(WXML::DOMLib::Parser *__hidden this); // idb +void __fastcall WXML::DOMLib::Parser::~Parser(int a1); +char __thiscall WXML::DOMLib::WXMLDom::IfHasItsElse(_DWORD *this, signed int a2, int *a3); +int __cdecl WXML::DOMLib::WXMLDom::ToCamelStyle(int a1, int a2); +char __fastcall WXML::DOMLib::WXMLDom::HasSpAttrPrefix(int a1); +int __thiscall WXML::DOMLib::WXMLDom::MarkIfHasDescendant(int this, int *a2); +void __thiscall WXML::DOMLib::WXMLDom::CutDomsForCustomComponent(_DWORD *this, int *a2); +unsigned int __thiscall WXML::DOMLib::WXMLDom::Print(_DWORD *this, int a2, char *a3, char *a4); +void __thiscall WXML::DOMLib::WXMLDom::PrintMe(int this, int a2, char *a3, char *a4); +int __fastcall WXML::DOMLib::WXMLDom::WXMLDom(int a1); +std::ostream::sentry *__thiscall WXML::DOMLib::StrCache::RenderPathDefine(_DWORD *this, int a2); +void __thiscall WXML::DOMLib::StrCache::Insert(_DWORD *this, int a2); +int __thiscall WXML::DOMLib::StrCache::GetStrID(_DWORD *this, int a2); +void __fastcall WXML::EXPRLib::NonTerminal::~NonTerminal(void *a1); +void __fastcall WXML::EXPRLib::EPS::~EPS(void *a1); +// int __userpurge WXML::EXPRLib::Token::Token@(int *a1@, WXML::EXPRLib::Token *this, const WXML::EXPRLib::Token *a3); +int __fastcall WXML::EXPRLib::Token::Token(_DWORD *a1); +int __fastcall WXML::EXPRLib::Action::Action(int a1); +void __fastcall WXML::EXPRLib::Action::~Action(void **a1); +void __fastcall WXML::EXPRLib::Action::~Action(void **a1); +void __thiscall WXML::EXPRLib::Action::~Action(void **ecx0, WXML::EXPRLib::Action *this); +void __fastcall WXML::EXPRLib::Parser::~Parser(int a1); +int __fastcall WXML::EXPRLib::Terminal::Terminal(int a1); +void __fastcall WXML::EXPRLib::Terminal::~Terminal(void **a1); +void __fastcall WXML::EXPRLib::Terminal::~Terminal(void **a1); +void __thiscall WXML::EXPRLib::Terminal::~Terminal(void **ecx0, WXML::EXPRLib::Terminal *this); +void __thiscall WXML::EXPRLib::Terminal::~Terminal(void **ecx0, WXML::EXPRLib::Terminal *this); +void __thiscall night::NSASTParse::NSASTParse(int this, int a2, int a3, int a4); +void __fastcall night::NSASTParse::~NSASTParse(void **a1); +void __fastcall night::NSCompileJs::~NSCompileJs(int a1, int a2); +// void __userpurge night::ns_sourcemap::ns_sourcemap(int a1@, night::ns_sourcemap *this, const night::ns_sourcemap *a3); +void __fastcall night::ns_sourcemap::~ns_sourcemap(void **a1); +bool __cdecl night::NSToken::rw_cb_number(night::NSToken *this, _BYTE *a2); +char __cdecl night::NSToken::tk_is_comment2(night::NSToken *this, night::NSStream *a2); +bool __cdecl night::NSToken::tk_is_whitespace(night::NSToken *this); +char __cdecl night::NSToken::tk_is_valid_op_str(night::NSToken *this, int a2); +bool __cdecl night::NSToken::tk_is_not_line_break(night::NSToken *this); +_DWORD *__thiscall night::NSToken::get_tokens_for_sourcemap(_DWORD *this, void **a2, _DWORD *a3); +int __cdecl night::NSToken::tk_is_var(night::NSToken *this); +void __fastcall night::NSToken::~NSToken(int a1); +void **__thiscall night::ns_node::debug_no_space[abi:cxx11](void **this, const char **a2); +void __fastcall night::NSStream::~NSStream(void **a1); +void __fastcall __gnu_cxx::__scoped_lock::~__scoped_lock(int *a1); +int __fastcall __gnu_cxx::stdio_filebuf::fd(int a1); +int __fastcall __gnu_cxx::stdio_filebuf::file(int a1); +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, FILE *a2, int a3, int a4); +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, int FileHandle, int a3, int a4); +void __fastcall __gnu_cxx::stdio_filebuf::stdio_filebuf(_DWORD *a1); +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, FILE *a2, int a3, int a4); +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, int FileHandle, int a3, int a4); +void __fastcall __gnu_cxx::stdio_filebuf::stdio_filebuf(_DWORD *a1); +void __fastcall __gnu_cxx::stdio_filebuf::~stdio_filebuf(struct _Unwind_Exception *a1); +void __fastcall __gnu_cxx::stdio_filebuf::~stdio_filebuf(struct _Unwind_Exception *a1); +void __fastcall __gnu_cxx::stdio_filebuf::~stdio_filebuf(struct _Unwind_Exception *a1); +int __fastcall __gnu_cxx::stdio_filebuf::fd(int a1); +int __fastcall __gnu_cxx::stdio_filebuf::file(int a1); +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, FILE *a2, int a3, int a4); +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, int FileHandle, int a3, int a4); +void __fastcall __gnu_cxx::stdio_filebuf::stdio_filebuf(_DWORD *a1); +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, FILE *a2, int a3, int a4); +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, int FileHandle, int a3, int a4); +void __fastcall __gnu_cxx::stdio_filebuf::stdio_filebuf(_DWORD *a1); +void __fastcall __gnu_cxx::stdio_filebuf::~stdio_filebuf(struct _Unwind_Exception *a1); +void __fastcall __gnu_cxx::stdio_filebuf::~stdio_filebuf(struct _Unwind_Exception *a1); +void __fastcall __gnu_cxx::stdio_filebuf::~stdio_filebuf(struct _Unwind_Exception *a1); +int __cdecl __gnu_cxx::__concat_size_t(char *a1, unsigned int a2, unsigned int a3); +int __cdecl __gnu_cxx::__snprintf_lite(char *a1, unsigned int a2, const char *a3, char *a4); +int __fastcall __gnu_cxx::stdio_sync_filebuf::file(int a1); +int __thiscall __gnu_cxx::stdio_sync_filebuf::swap(int this, int a2); +int __fastcall __gnu_cxx::stdio_sync_filebuf::sync(int a1); +int __fastcall __gnu_cxx::stdio_sync_filebuf::uflow(int a1); +int __thiscall __gnu_cxx::stdio_sync_filebuf::xsgetn(int this, char *Buffer, size_t ElementCount); +size_t __thiscall __gnu_cxx::stdio_sync_filebuf::xsputn(FILE **this, void *Buffer, size_t ElementCount); +_DWORD *__thiscall __gnu_cxx::stdio_sync_filebuf::seekoff(_DWORD *this, int a2, fpos_t a3, int a4, int a5); +_DWORD *__thiscall __gnu_cxx::stdio_sync_filebuf::seekpos(_DWORD *this, FILE **a2, fpos_t a3, int a4, int a5, int a6); +int __thiscall __gnu_cxx::stdio_sync_filebuf::overflow(FILE **this, int Character); +int __thiscall __gnu_cxx::stdio_sync_filebuf::pbackfail(int this, int a2); +int __fastcall __gnu_cxx::stdio_sync_filebuf::underflow(int a1); +void __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(_DWORD *this, std::locale *a2); +int __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(_DWORD *this, int a2); +void __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(_DWORD *this, std::locale *a2); +int __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(_DWORD *this, int a2); +void __fastcall __gnu_cxx::stdio_sync_filebuf::~stdio_sync_filebuf(char *Block); +void __fastcall __gnu_cxx::stdio_sync_filebuf::~stdio_sync_filebuf(int a1); +int __thiscall __gnu_cxx::stdio_sync_filebuf::operator=(int this, int a2); +int __fastcall __gnu_cxx::stdio_sync_filebuf::file(int a1); +int __thiscall __gnu_cxx::stdio_sync_filebuf::swap(int this, int a2); +int __fastcall __gnu_cxx::stdio_sync_filebuf::sync(int a1); +wint_t __fastcall __gnu_cxx::stdio_sync_filebuf::uflow(int a1); +int __thiscall __gnu_cxx::stdio_sync_filebuf::xsgetn(int this, int a2, int a3); +int __thiscall __gnu_cxx::stdio_sync_filebuf::xsputn(FILE **this, int a2, int a3); +_DWORD *__thiscall __gnu_cxx::stdio_sync_filebuf::seekoff(_DWORD *this, int a2, fpos_t a3, int a4, int a5); +_DWORD *__thiscall __gnu_cxx::stdio_sync_filebuf::seekpos(_DWORD *this, FILE **a2, fpos_t a3, int a4, int a5, int a6); +__int16 __thiscall __gnu_cxx::stdio_sync_filebuf::overflow(FILE **this, wchar_t Character); +int __thiscall __gnu_cxx::stdio_sync_filebuf::pbackfail(int this, wint_t Character); +wint_t __fastcall __gnu_cxx::stdio_sync_filebuf::underflow(int a1); +void __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(int this, std::locale *a2); +int __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(_DWORD *this, int a2); +void __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(int this, std::locale *a2); +int __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(_DWORD *this, int a2); +void __fastcall __gnu_cxx::stdio_sync_filebuf::~stdio_sync_filebuf(char *Block); +void __fastcall __gnu_cxx::stdio_sync_filebuf::~stdio_sync_filebuf(int a1); +int __thiscall __gnu_cxx::stdio_sync_filebuf::operator=(int this, int a2); +void __fastcall __gnu_cxx::recursive_init_error::recursive_init_error(_DWORD *a1); +void __fastcall __gnu_cxx::recursive_init_error::~recursive_init_error(_DWORD *a1); +void __cdecl __gnu_cxx::recursive_init_error::~recursive_init_error(std::exception *a1); +void __fastcall __gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error(_DWORD *a1); +void __cdecl __gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error(std::exception *a1); +void __fastcall __gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error(_DWORD *a1); +void __cdecl __gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error(std::exception *a1); +void __cdecl __noreturn __gnu_cxx::__throw_insufficient_space(const char *Src, const char *); // idb +void __noreturn __gnu_cxx::__verbose_terminate_handler(void); // idb +void __noreturn __gnu_cxx::__throw_concurrence_lock_error(void); // idb +void __noreturn __gnu_cxx::__throw_concurrence_unlock_error(void); // idb +void __gnu_cxx::__freeres(void); +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2); +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2); +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2); +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2); +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2); +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2); +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2); +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2); +// char __userpurge __cxxabiv1::__class_type_info::__do_catch@(_DWORD *a1@, __cxxabiv1::__class_type_info *this, const std::type_info *a3, void **a4, unsigned int a5); +bool __thiscall __cxxabiv1::__class_type_info::__do_upcast(_DWORD *this, int a2, int a3, _DWORD *a4); +// int __userpurge __cxxabiv1::__class_type_info::__do_upcast@(int *a1@, __cxxabiv1::__class_type_info *this, const __class_type_info *a3, void **a4); +int __thiscall __cxxabiv1::__class_type_info::__do_dyncast(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, _DWORD *a8); +int __stdcall __cxxabiv1::__class_type_info::__do_find_public_src(__cxxabiv1::__class_type_info *this, const __cxxabiv1::__class_type_info *a2, const void *a3, const __cxxabiv1::__class_type_info *a4, const void *a5); +char __thiscall __cxxabiv1::__si_class_type_info::__do_upcast(int this, int a2, int a3, _DWORD *a4); +int __thiscall __cxxabiv1::__si_class_type_info::__do_dyncast(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7, _DWORD *a8); +// int __userpurge __cxxabiv1::__si_class_type_info::__do_find_public_src@(int a1@, __cxxabiv1::__si_class_type_info *this, const __cxxabiv1::__class_type_info *a3, const void *a4, const __cxxabiv1::__class_type_info *a5, const void *a6); +int __thiscall __cxxabiv1::__vmi_class_type_info::__do_upcast(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4); +int __thiscall __cxxabiv1::__vmi_class_type_info::__do_dyncast(_DWORD *this, int a2, int a3, int a4, _DWORD *a5, int a6, _DWORD *a7, int *a8); +// int __userpurge __cxxabiv1::__vmi_class_type_info::__do_find_public_src@(_DWORD *a1@, __cxxabiv1::__vmi_class_type_info *this, const __cxxabiv1::__class_type_info *a3, const void *a4, const __cxxabiv1::__class_type_info *a5, const void *a6); +const char *`anonymous namespace'::io_error_category::name(); +int __thiscall `anonymous namespace'::io_error_category::message[abi:cxx11](int this, int a2, int a3); +_anonymous_namespace_::system_error_category *__stdcall `anonymous namespace'::system_error_category::default_error_condition(_anonymous_namespace_::system_error_category *this, int a2); +const char *`anonymous namespace'::system_error_category::name(); +const char *`anonymous namespace'::generic_error_category::name(); +_DWORD *__thiscall `anonymous namespace'::system_error_category::message[abi:cxx11](_DWORD *this, int a2, int ErrorMessage); +int WXML::EXPRLib::NonTerminal::GetClass(); +int WXML::EXPRLib::EPS::GetClass(); +int WXML::EXPRLib::Action::GetClass(); +int WXML::EXPRLib::Terminal::GetClass(); +const char *__gnu_cxx::__concurrence_lock_error::what(); +const char *__gnu_cxx::__concurrence_unlock_error::what(); +int __thiscall std::wstring::_M_disjunct(unsigned int *this, unsigned int a2); +int __thiscall std::wstring::find_last_of(_DWORD *this, wchar_t *String, int a3); +int __thiscall std::wstring::find_last_of(_DWORD *this, _WORD *a2, unsigned int a3, int a4); +int __thiscall std::wstring::find_last_of(_DWORD *this, _WORD **a2, unsigned int a3); +int __thiscall std::wstring::find_last_of(_DWORD *this, __int16 a2, unsigned int a3); +int __thiscall std::wstring::find_first_of(_DWORD *this, wchar_t *String, int a3); +int __thiscall std::wstring::find_first_of(_DWORD *this, _WORD *a2, unsigned int a3, int a4); +int __thiscall std::wstring::find_first_of(_DWORD *this, _WORD **a2, unsigned int a3); +int __thiscall std::wstring::find_first_of(int *this, __int16 a2, unsigned int a3); +void *__thiscall std::wstring::get_allocator(void *this, int a2); +unsigned int __thiscall std::wstring::_M_check_length(_DWORD *this, int a2, unsigned int a3, std::length_error *a4); +int __thiscall std::wstring::find_last_not_of(_DWORD *this, wchar_t *String, int a3); +int __thiscall std::wstring::find_last_not_of(_DWORD *this, _WORD *a2, unsigned int a3, int a4); +int __thiscall std::wstring::find_last_not_of(_DWORD *this, _WORD **a2, unsigned int a3); +int __thiscall std::wstring::find_last_not_of(_DWORD *this, __int16 a2, unsigned int a3); +int __thiscall std::wstring::find_first_not_of(int *this, wchar_t *String, unsigned int a3); +int __thiscall std::wstring::find_first_not_of(int *this, _WORD *a2, unsigned int a3, int a4); +int __thiscall std::wstring::find_first_not_of(_DWORD *this, _DWORD *a2, unsigned int a3); +int __thiscall std::wstring::find_first_not_of(int *this, __int16 a2, unsigned int a3); +int __thiscall std::wstring::at(int *this, unsigned int a2); +int __fastcall std::wstring::end(_DWORD *a1); +int __fastcall std::wstring::_Rep::_M_is_leaked(int a1); +bool __fastcall std::wstring::_Rep::_M_is_shared(int a1); +int __fastcall std::wstring::back(_DWORD *a1); +int __fastcall std::wstring::cend(_DWORD *a1); +int __thiscall std::wstring::copy(int *this, _WORD *a2, unsigned int a3, unsigned int a4); +int __fastcall std::wstring::data(int a1); +int __thiscall std::wstring::find(int *this, wchar_t *String, int a3); +int __thiscall std::wstring::find(int *this, _WORD *a2, unsigned int a3, unsigned int a4); +int __thiscall std::wstring::find(int *this, _WORD **a2, unsigned int a3); +int __thiscall std::wstring::find(int *this, __int16 a2, unsigned int a3); +_DWORD *__thiscall std::wstring::rend(_DWORD *this, _DWORD *a2); +int __fastcall std::wstring::size(_DWORD *a1); +int __fastcall std::wstring::begin(int a1); +int __fastcall std::wstring::c_str(int a1); +_DWORD *__thiscall std::wstring::crend(_DWORD *this, _DWORD *a2); +bool __fastcall std::wstring::empty(_DWORD *a1); +int __fastcall std::wstring::front(int a1); +int __thiscall std::wstring::rfind(_DWORD *this, wchar_t *String, int a3); +int __thiscall std::wstring::rfind(_DWORD *this, _WORD *a2, unsigned int a3, unsigned int a4); +int __thiscall std::wstring::rfind(_DWORD *this, _WORD **a2, unsigned int a3); +int __thiscall std::wstring::rfind(_DWORD *this, __int16 a2, unsigned int a3); +int __fastcall std::wstring::_M_rep(_DWORD *a1); +int __fastcall std::wstring::cbegin(int a1); +int __fastcall std::wstring::length(_DWORD *a1); +_DWORD *__thiscall std::wstring::rbegin(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::wstring::substr(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4); +int __fastcall std::wstring::_M_data(int a1); +int __fastcall std::wstring::_M_iend(_DWORD *a1); +int __thiscall std::wstring::compare(wchar_t **this, wchar_t *String); +int __thiscall std::wstring::compare(_DWORD *this, _WORD **a2); +int __thiscall std::wstring::compare(_DWORD *this, unsigned int a2, unsigned int a3, wchar_t *String); +int __thiscall std::wstring::compare(int *this, unsigned int a2, unsigned int a3, _WORD *a4, unsigned int a5); +int __thiscall std::wstring::compare(int *this, unsigned int a2, unsigned int a3, _WORD **a4); +int __thiscall std::wstring::compare(int *this, unsigned int a2, unsigned int a3, _DWORD *a4, unsigned int a5, unsigned int a6); +_DWORD *__thiscall std::wstring::crbegin(_DWORD *this, _DWORD *a2); +unsigned int __thiscall std::wstring::_M_check(_DWORD *this, unsigned int a2, const char *a3); +unsigned int __thiscall std::wstring::_M_limit(_DWORD *this, int a2, unsigned int a3); +int __fastcall std::wstring::capacity(_DWORD *a1); +int std::wstring::max_size(); +int __fastcall std::wstring::_M_ibegin(int a1); +int __thiscall std::wstring::operator[](_DWORD *this, int a2); +int __fastcall std::istream::gcount(int a1); +int __fastcall std::istream::sentry::operator bool(unsigned __int8 *a1); +int __fastcall std::ostream::sentry::operator bool(unsigned __int8 *a1); +// int __userpurge std::string::_M_disjunct@(_DWORD *a1@, std::string *this, const char *a3); +// int __userpurge std::string::find_last_of@(int *a1@, std::string *this, char *a3, unsigned int a4); +// int __userpurge std::string::find_last_of@(int *a1@, std::string *this, const char *a3, size_t MaxCount, unsigned int a5); +// int __userpurge std::string::find_last_of@(int *a1@, std::string **this, const std::string *a3, unsigned int a4); +// int __userpurge std::string::find_last_of@(_DWORD *a1@, std::string *this, unsigned int a3, unsigned int a4); +// int __userpurge std::string::find_first_of@(int *a1@, std::string *this, const char *a3, unsigned int a4); +// int __userpurge std::string::find_first_of@(int *a1@, std::string *this, const char *a3, size_t MaxCount, unsigned int a5); +// int __userpurge std::string::find_first_of@(int *a1@, std::string *this, const std::string *a3, unsigned int a4); +// char *__userpurge std::string::find_first_of@(int *a1@, std::string *this, unsigned int a3, unsigned int a4); +void *__thiscall std::string::get_allocator(void *ecx0, std::string *this); +// char *__userpurge std::string::_M_check_length@(_DWORD *a1@, std::string *this, unsigned int a3, std::length_error *a4, const char *a5); +// int __userpurge std::string::find_last_not_of@(int *a1@, std::string *this, const char *a3, unsigned int a4); +// int __userpurge std::string::find_last_not_of@(int *a1@, std::string *this, const char *a3, size_t MaxCount, unsigned int a5); +// int __userpurge std::string::find_last_not_of@(int *a1@, std::string *this, const std::string *a3, unsigned int a4); +// int __userpurge std::string::find_last_not_of@(_DWORD *a1@, std::string *this, unsigned int a3, unsigned int a4); +// int __userpurge std::string::find_first_not_of@(int *a1@, std::string *this, const char *a3, unsigned int a4); +// int __userpurge std::string::find_first_not_of@(int *a1@, std::string *this, const char *a3, size_t MaxCount, unsigned int a5); +// int __userpurge std::string::find_first_not_of@(int *a1@, std::string *this, const std::string *a3, unsigned int a4); +// int __userpurge std::string::find_first_not_of@(int *a1@, std::string *this, unsigned int a3, unsigned int a4); +// char *__userpurge std::string::at@(int *a1@, std::string *this, unsigned int a3); +int __fastcall std::string::end(_DWORD *a1); +int __fastcall std::string::_Rep::_M_is_leaked(int a1); +bool __fastcall std::string::_Rep::_M_is_shared(int a1); +int __fastcall std::string::back(_DWORD *a1); +int __fastcall std::string::cend(_DWORD *a1); +// int __userpurge std::string::copy@(_DWORD *a1@, std::string *this, size_t a3, unsigned int a4, unsigned int a5); +int __fastcall std::string::data(int a1); +// int __userpurge std::string::find@(int *a1@, std::string *this, char *a3, unsigned int a4); +// int __userpurge std::string::find@(int *a1@, std::string *this, const char *a3, size_t Size, unsigned int a5); +// int __userpurge std::string::find@(int *a1@, std::string **this, const std::string *a3, unsigned int a4); +// char *__userpurge std::string::find@(int *a1@, std::string *this, unsigned int a3, unsigned int a4); +_DWORD *__thiscall std::string::rend(_DWORD *ecx0, std::string *this); +int __fastcall std::string::size(_DWORD *a1); +int __fastcall std::string::begin(int a1); +int __fastcall std::string::c_str(int a1); +_DWORD *__thiscall std::string::crend(_DWORD *ecx0, std::string *this); +bool __fastcall std::string::empty(_DWORD *a1); +int __fastcall std::string::front(int a1); +// int __userpurge std::string::rfind@(int *a1@, std::string *this, char *a3, unsigned int a4); +// int __userpurge std::string::rfind@(int *a1@, std::string *this, const char *a3, size_t Size, unsigned int a5); +// int __userpurge std::string::rfind@(int *a1@, std::string *this, const std::string *a3, unsigned int a4); +// int __userpurge std::string::rfind@(_DWORD *a1@, std::string *this, unsigned int a3, unsigned int a4); +int __fastcall std::string::_M_rep(_DWORD *a1); +int __fastcall std::string::cbegin(int a1); +int __fastcall std::string::length(_DWORD *a1); +_DWORD *__thiscall std::string::rbegin(_DWORD *ecx0, std::string *this); +int *__thiscall std::string::substr(int *ecx0, std::string *this, unsigned int a3, unsigned int a4); +int __fastcall std::string::_M_data(int a1); +int __fastcall std::string::_M_iend(_DWORD *a1); +// int __userpurge std::string::compare@(const void **a1@, std::string *this, const char *a3); +// int __userpurge std::string::compare@(const void **a1@, const void **this, const std::string *a3); +// int __userpurge std::string::compare@(int *a1@, std::string *this, unsigned int a3, char *Str, const char *a5); +// int __userpurge std::string::compare@(int *a1@, std::string *this, size_t a3, void *Buf2, const char *a5, unsigned int a6); +// int __userpurge std::string::compare@(int *a1@, std::string *this, unsigned int a3, const void **a4, const std::string *a5); +// int __userpurge std::string::compare@(_DWORD *a1@, std::string *this, unsigned int a3, _DWORD *a4, const std::string *a5, unsigned int a6, unsigned int a7); +_DWORD *__thiscall std::string::crbegin(_DWORD *ecx0, std::string *this); +// std::string *__userpurge std::string::_M_check@(_DWORD *a1@, std::string *this, const char *a3, const char *a4); +// unsigned int __userpurge std::string::_M_limit@(_DWORD *a1@, std::string *this, unsigned int a3, unsigned int a4); +int __fastcall std::string::capacity(_DWORD *a1); +int std::string::max_size(); +int __fastcall std::string::_M_ibegin(int a1); +int __thiscall std::string::operator[](_DWORD *this, int a2); +const char *std::bad_typeid::what(); +int __fastcall std::error_code::default_error_condition(int a1); +int __fastcall std::moneypunct::neg_format(_DWORD *a1); +int __fastcall std::moneypunct::pos_format(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2); +int __fastcall std::moneypunct::frac_digits(_DWORD *a1); +int __fastcall std::moneypunct::decimal_point(_DWORD *a1); +int __fastcall std::moneypunct::do_neg_format(int a1); +int __fastcall std::moneypunct::do_pos_format(int a1); +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_frac_digits(int a1); +int __fastcall std::moneypunct::do_decimal_point(int a1); +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2); +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_thousands_sep(int a1); +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::neg_format(_DWORD *a1); +int __fastcall std::moneypunct::pos_format(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2); +int __fastcall std::moneypunct::frac_digits(_DWORD *a1); +int __fastcall std::moneypunct::decimal_point(_DWORD *a1); +int __fastcall std::moneypunct::do_neg_format(int a1); +int __fastcall std::moneypunct::do_pos_format(int a1); +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_frac_digits(int a1); +int __fastcall std::moneypunct::do_decimal_point(int a1); +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2); +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_thousands_sep(int a1); +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::neg_format(_DWORD *a1); +int __fastcall std::moneypunct::pos_format(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2); +int __fastcall std::moneypunct::frac_digits(_DWORD *a1); +int __fastcall std::moneypunct::decimal_point(_DWORD *a1); +int __fastcall std::moneypunct::do_neg_format(int a1); +int __fastcall std::moneypunct::do_pos_format(int a1); +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_frac_digits(int a1); +int __fastcall std::moneypunct::do_decimal_point(int a1); +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2); +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_thousands_sep(int a1); +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::neg_format(_DWORD *a1); +int __fastcall std::moneypunct::pos_format(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2); +int __fastcall std::moneypunct::frac_digits(_DWORD *a1); +int __fastcall std::moneypunct::decimal_point(_DWORD *a1); +int __fastcall std::moneypunct::do_neg_format(int a1); +int __fastcall std::moneypunct::do_pos_format(int a1); +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_frac_digits(int a1); +int __fastcall std::moneypunct::do_decimal_point(int a1); +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2); +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_thousands_sep(int a1); +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_date_formats(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_time_formats(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_days_abbreviated(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_date_time_formats(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_months_abbreviated(_DWORD *this, _DWORD *a2); +void __thiscall std::__timepunct::_M_put(const char **this, char *Buffer, size_t SizeInBytes, char *Format, struct tm *Tm); +_DWORD *__thiscall std::__timepunct::_M_days(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_am_pm(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_months(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_date_formats(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_time_formats(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_days_abbreviated(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_date_time_formats(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_months_abbreviated(_DWORD *this, _DWORD *a2); +void __thiscall std::__timepunct::_M_put(const char **this, wchar_t *Buffer, size_t SizeInWords, wchar_t *Format, struct tm *Tm); +_DWORD *__thiscall std::__timepunct::_M_days(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_am_pm(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__timepunct::_M_months(_DWORD *this, _DWORD *a2); +struct _Unwind_Exception *__stdcall std::__use_cache>::operator()(int *a1); +struct _Unwind_Exception *__stdcall std::__use_cache>::operator()(int *a1); +int __fastcall std::runtime_error::what(int a1); +bool __fastcall std::__basic_file::is_open(_DWORD *a1); +int __thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_compare(int *this, int a2, int a3, int a4, int a5); +int __thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_compare(int *this, int a2, int a3, int a4, int a5); +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_transform(_DWORD *this, int a2, int a3, int a4); +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_transform(_DWORD *this, int a2, std::string *a3, int a4); +int __thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_compare(int *this, int a2, int a3, int a4, int a5); +int __thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_compare(int *this, int a2, int a3, int a4, int a5); +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_transform(_DWORD *this, int a2, int a3, int a4); +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_transform(_DWORD *this, int a2, int a3, int a4); +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_get(_DWORD *this, int a2, std::string *a3, int a4, int a5, int a6); +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_get(_DWORD *this, int a2, int a3, int a4, int a5, _BYTE **a6); +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_open(int *this, int a2, int a3); +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_open(int *this, _BYTE **a2, int a3); +int __thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_close(int *this, int a2); +int __thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_close(int *this, int a2); +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_get(_DWORD *this, int a2, int a3, int a4, int a5, int a6); +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_get(_DWORD *this, int a2, int a3, int a4, int a5, _WORD **a6); +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_open(int *this, int a2, int a3); +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_open(int *this, _BYTE **a2, int a3); +int __thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_close(int *this, int a2); +int __thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_close(int *this, int a2); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_date(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_date(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_time(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_time(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_year(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_year(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::do_date_order(int a1); +int __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::do_date_order(int a1); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_weekday(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_weekday(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_monthname(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_monthname(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_date(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_date(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_time(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_time(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_year(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_year(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::do_date_order(int a1); +int __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::do_date_order(int a1); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_weekday(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_weekday(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_monthname(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_monthname(int *this, int a2, int a3, int a4, int a5, int a6, int a7, int a8); +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get(int *this, __int64 a2, int a3, int a4, unsigned __int8 a5, int a6, int *a7, void **a8); +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get(_DWORD *this, __int64 a2, int a3, int a4, unsigned __int8 a5, int a6, _DWORD *a7, int *a8); +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get(_DWORD *this, __int64 a2, int a3, int a4, unsigned __int8 a5, int a6, _DWORD *a7, long double *a8); +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get(_DWORD *this, __int64 a2, int a3, int a4, unsigned __int8 a5, int a6, int *a7, long double *a8); +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get(_DWORD *this, int a2, int a3, int a4, int a5, unsigned __int8 a6, int a7, _DWORD *a8, int a9); +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get(_DWORD *this, int a2, int a3, int a4, int a5, unsigned __int8 a6, int a7, _DWORD *a8, int *a9); +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get(_DWORD *this, int a2, int a3, int a4, int a5, unsigned __int8 a6, int a7, _DWORD *a8, long double *a9); +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get(_DWORD *this, int a2, int a3, int a4, int a5, unsigned __int8 a6, int a7, _DWORD *a8, long double *a9); +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put(int *this, int a2, int a3, unsigned __int8 a4, int a5, char a6, int a7); +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put(int *this, int a2, int a3, unsigned __int8 a4, int a5, char a6, std::string *a7); +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put(int *this, int a2, int a3, unsigned __int8 a4, int a5, char a6, long double a7); +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put(int *this, int a2, int a3, unsigned __int8 a4, int a5, char a6, long double a7); +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put(int *this, int a2, int a3, unsigned __int8 a4, int a5, unsigned __int16 a6, int a7); +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put(int *this, int a2, int a3, unsigned __int8 a4, int a5, unsigned __int16 a6, _DWORD *a7); +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put(int *this, int a2, int a3, unsigned __int8 a4, int a5, __int16 a6, long double a7); +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put(int *this, int a2, int a3, unsigned __int8 a4, int a5, __int16 a6, long double a7); +const char *_ZGTtNKSt13bad_exception4whatEv(); +bool __fastcall std::filebuf::is_open(int a1); +bool __fastcall std::wfilebuf::is_open(int a1); +int __fastcall std::fstream::rdbuf(int a1); +bool __fastcall std::fstream::is_open(int a1); +int __fastcall std::wfstream::rdbuf(int a1); +bool __fastcall std::wfstream::is_open(int a1); +int __fastcall std::wistream::gcount(int a1); +int __fastcall std::wistream::sentry::operator bool(unsigned __int8 *a1); +int __fastcall std::wostream::sentry::operator bool(unsigned __int8 *a1); +long double std::random_device::_M_getentropy(); +int __fastcall std::ifstream::rdbuf(int a1); +bool __fastcall std::ifstream::is_open(int a1); +int __fastcall std::wifstream::rdbuf(int a1); +bool __fastcall std::wifstream::is_open(int a1); +int __fastcall std::ofstream::rdbuf(int a1); +bool __fastcall std::ofstream::is_open(int a1); +int __fastcall std::wofstream::rdbuf(int a1); +bool __fastcall std::wofstream::is_open(int a1); +int __fastcall std::streambuf::gptr(int a1); +int __fastcall std::streambuf::pptr(int a1); +int __fastcall std::streambuf::eback(int a1); +int __fastcall std::streambuf::egptr(int a1); +int __fastcall std::streambuf::epptr(int a1); +int __fastcall std::streambuf::pbase(int a1); +volatile signed __int32 **__thiscall std::streambuf::getloc(volatile signed __int32 **this, int a2); +int __fastcall std::wstreambuf::gptr(int a1); +int __fastcall std::wstreambuf::pptr(int a1); +int __fastcall std::wstreambuf::eback(int a1); +int __fastcall std::wstreambuf::egptr(int a1); +int __fastcall std::wstreambuf::epptr(int a1); +int __fastcall std::wstreambuf::pbase(int a1); +volatile signed __int32 **__thiscall std::wstreambuf::getloc(volatile signed __int32 **this, int a2); +int __stdcall std::__codecvt_utf8_base::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int __fastcall std::__codecvt_utf8_base::do_max_length(int a1); +int __thiscall std::__codecvt_utf8_base::do_in(int this, int a2, unsigned __int8 *a3, int a4, unsigned __int8 **a5, int a6, int a7, _DWORD *a8); +int __thiscall std::__codecvt_utf8_base::do_out(int this, int a2, unsigned int *a3, unsigned int *a4, unsigned int **a5, _BYTE *a6, _BYTE *a7, _DWORD *a8); +unsigned __int8 *__thiscall std::__codecvt_utf8_base::do_length(int this, int a2, unsigned __int8 *a3, unsigned __int8 *a4, int a5); +int __stdcall std::__codecvt_utf8_base::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int __fastcall std::__codecvt_utf8_base::do_max_length(int a1); +int __thiscall std::__codecvt_utf8_base::do_in(_DWORD *this, int a2, unsigned __int8 *a3, unsigned __int8 *a4, unsigned __int8 **a5, char *a6, char *a7, char **a8); +int __thiscall std::__codecvt_utf8_base::do_out(int this, int a2, unsigned __int16 *a3, unsigned __int16 *a4, unsigned __int16 **a5, _BYTE *a6, _BYTE *a7, _DWORD *a8); +unsigned __int8 *__thiscall std::__codecvt_utf8_base::do_length(int this, int a2, unsigned __int8 *a3, unsigned __int8 *a4, int a5); +int __stdcall std::__codecvt_utf8_base::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int __fastcall std::__codecvt_utf8_base::do_max_length(int a1); +int __thiscall std::__codecvt_utf8_base::do_in(_DWORD *this, int a2, unsigned __int8 *a3, unsigned __int8 *a4, unsigned __int8 **a5, char *a6, char *a7, char **a8); +int __thiscall std::__codecvt_utf8_base::do_out(int this, int a2, unsigned __int16 *a3, unsigned __int16 *a4, unsigned __int16 **a5, _BYTE *a6, _BYTE *a7, _DWORD *a8); +unsigned __int8 *__thiscall std::__codecvt_utf8_base::do_length(int this, int a2, unsigned __int8 *a3, unsigned __int8 *a4, int a5); +// char __userpurge std::__iosfail_type_info::__do_upcast@(int *a1@, std::__iosfail_type_info *this, const __cxxabiv1::__class_type_info *a3, void **a4); +bool __thiscall std::istreambuf_iterator::equal(_DWORD *this, int a2); +int __fastcall std::istreambuf_iterator::_M_get(int a1); +bool __thiscall std::istreambuf_iterator::equal(_WORD *this, int a2); +int __fastcall std::istreambuf_iterator::_M_get(int a1); +int __stdcall std::__codecvt_utf16_base::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int __fastcall std::__codecvt_utf16_base::do_max_length(int a1); +int __thiscall std::__codecvt_utf16_base::do_in(_DWORD *this, int a2, int a3, int a4, int *a5, int a6, int a7, _DWORD *a8); +int __thiscall std::__codecvt_utf16_base::do_out(_DWORD *this, int a2, unsigned int *a3, unsigned int *a4, unsigned int **a5, _WORD *a6, int a7, _DWORD *a8); +char *__thiscall std::__codecvt_utf16_base::do_length(_DWORD *this, int a2, int a3, int a4, int a5); +int __stdcall std::__codecvt_utf16_base::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int __fastcall std::__codecvt_utf16_base::do_max_length(int a1); +int __thiscall std::__codecvt_utf16_base::do_in(unsigned int *this, int a2, unsigned __int16 *a3, unsigned __int16 *a4, unsigned __int16 **a5, int a6, int a7, int *a8); +int __thiscall std::__codecvt_utf16_base::do_out(_DWORD *this, int a2, unsigned __int16 *a3, unsigned __int16 *a4, unsigned __int16 **a5, _WORD *a6, int a7, int *a8); +char *__thiscall std::__codecvt_utf16_base::do_length(_DWORD *this, int a2, int a3, int a4, int a5); +int __stdcall std::__codecvt_utf16_base::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int __fastcall std::__codecvt_utf16_base::do_max_length(int a1); +int __thiscall std::__codecvt_utf16_base::do_in(unsigned int *this, int a2, unsigned __int16 *a3, unsigned __int16 *a4, unsigned __int16 **a5, int a6, int a7, int *a8); +int __thiscall std::__codecvt_utf16_base::do_out(_DWORD *this, int a2, unsigned __int16 *a3, unsigned __int16 *a4, unsigned __int16 **a5, _WORD *a6, int a7, int *a8); +char *__thiscall std::__codecvt_utf16_base::do_length(_DWORD *this, int a2, int a3, int a4, int a5); +const char *std::bad_array_new_length::what(); +int __stdcall std::__codecvt_utf8_utf16_base::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int __fastcall std::__codecvt_utf8_utf16_base::do_max_length(int a1); +int __thiscall std::__codecvt_utf8_utf16_base::do_in(int this, int a2, unsigned __int8 *a3, unsigned __int8 *a4, unsigned __int8 **a5, unsigned int *a6, unsigned int *a7, unsigned int **a8); +int __thiscall std::__codecvt_utf8_utf16_base::do_out(int this, int a2, unsigned int *a3, unsigned int *a4, unsigned int **a5, _BYTE *a6, _BYTE *a7, _DWORD *a8); +unsigned __int8 *__thiscall std::__codecvt_utf8_utf16_base::do_length(unsigned int *this, int a2, unsigned __int8 *a3, unsigned __int8 *a4, unsigned int a5); +int __stdcall std::__codecvt_utf8_utf16_base::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int __fastcall std::__codecvt_utf8_utf16_base::do_max_length(int a1); +int __thiscall std::__codecvt_utf8_utf16_base::do_in(_DWORD *this, int a2, unsigned __int8 *a3, unsigned __int8 *a4, unsigned __int8 **a5, char *a6, char *a7, char **a8); +int __thiscall std::__codecvt_utf8_utf16_base::do_out(int this, int a2, unsigned __int16 *a3, unsigned __int16 *a4, unsigned __int16 **a5, _BYTE *a6, _BYTE *a7, _DWORD *a8); +unsigned __int8 *__thiscall std::__codecvt_utf8_utf16_base::do_length(unsigned int *this, int a2, unsigned __int8 *a3, unsigned __int8 *a4, unsigned int a5); +int __stdcall std::__codecvt_utf8_utf16_base::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int __fastcall std::__codecvt_utf8_utf16_base::do_max_length(int a1); +int __thiscall std::__codecvt_utf8_utf16_base::do_in(int this, int a2, unsigned __int8 *a3, unsigned __int8 *a4, unsigned __int8 **a5, char *a6, char *a7, char **a8); +int __thiscall std::__codecvt_utf8_utf16_base::do_out(int this, int a2, unsigned __int16 *a3, unsigned __int16 *a4, unsigned __int16 **a5, _BYTE *a6, _BYTE *a7, _DWORD *a8); +unsigned __int8 *__thiscall std::__codecvt_utf8_utf16_base::do_length(unsigned int *this, int a2, unsigned __int8 *a3, unsigned __int8 *a4, unsigned int a5); +_DWORD *__thiscall std::_V2::error_category::_M_message[abi:cxx11](_DWORD *this, int a2, int a3); +void *__thiscall std::_V2::error_category::_M_message(void *ecx0, std::_V2::error_category *this, int a3); +// bool __userpurge std::_V2::error_category::equivalent@(int a1@, std::_V2::error_category *this, const std::error_code *a3, int a4); +int __thiscall std::_V2::error_category::equivalent(void *this, int a2, _DWORD *a3); +std::_V2::error_category *__stdcall std::_V2::error_category::default_error_condition(std::_V2::error_category *this, int a2); +BOOL __thiscall std::map::count(_DWORD *this, int a2); +BOOL __thiscall std::map::count(_DWORD *this, int a2); +unsigned __int8 *__thiscall std::ctype::do_tolower(_DWORD *this, unsigned __int8 *a2, unsigned __int8 *a3); +int __thiscall std::ctype::do_tolower(_DWORD *this, int a2); +unsigned __int8 *__thiscall std::ctype::do_toupper(_DWORD *this, unsigned __int8 *a2, unsigned __int8 *a3); +int __thiscall std::ctype::do_toupper(_DWORD *this, int a2); +int __fastcall std::ctype::_M_widen_init(int a1); +int __fastcall std::ctype::_M_narrow_init(int a1); +_BYTE *__thiscall std::ctype::widen(_BYTE *this, _BYTE *Src, _BYTE *a3, void *a4); +int __thiscall std::ctype::narrow(_BYTE *this, int a2, int a3); +_BYTE *__stdcall std::ctype::do_widen(_BYTE *Src, _BYTE *a2, void *a3); +int __stdcall std::ctype::do_widen(unsigned __int8 a1); +_BYTE *__stdcall std::ctype::do_narrow(_BYTE *Src, _BYTE *a2, int a3, void *a4); +int __stdcall std::ctype::do_narrow(unsigned __int8 a1, int a2); +wint_t *__thiscall std::ctype::do_scan_is(_WORD *this, unsigned __int16 a2, wint_t *a3, unsigned int a4); +unsigned int __stdcall std::ctype::do_tolower(wint_t *a1, unsigned int a2); +wint_t __stdcall std::ctype::do_tolower(wint_t C); +unsigned int __stdcall std::ctype::do_toupper(wint_t *a1, unsigned int a2); +wint_t __stdcall std::ctype::do_toupper(wint_t C); +wint_t *__thiscall std::ctype::do_scan_not(_WORD *this, unsigned __int16 a2, wint_t *a3, unsigned int a4); +int __stdcall std::ctype::_M_convert_to_wmask(unsigned __int16 a1); +unsigned int __thiscall std::ctype::do_is(char *this, wint_t *a2, unsigned int a3, _WORD *a4); +int __thiscall std::ctype::do_is(_WORD *this, unsigned __int16 a2, wint_t C); +unsigned __int8 *__thiscall std::ctype::do_widen(_WORD *this, unsigned __int8 *a2, unsigned __int8 *a3, int a4); +int __thiscall std::ctype::do_widen(unsigned __int16 *this, unsigned __int8 a2); +unsigned int __thiscall std::ctype::do_narrow(_BYTE *this, wint_t *a2, unsigned int a3, char a4, int a5); +int __thiscall std::ctype::do_narrow(_BYTE *this, wint_t WCh, int a3); +int __fastcall std::locale::id::_M_id(volatile signed __int32 *a1); +int __thiscall std::locale::name[abi:cxx11](int this, int a2); +int *__thiscall std::locale::name(int *ecx0, std::locale *this); +// _DWORD *__userpurge std::locale::facet::_M_cow_shim@(volatile signed __int32 *a1@, std::locale::facet *this, const std::locale::id *a3); +// _DWORD *__userpurge std::locale::facet::_M_sso_shim@(volatile signed __int32 *a1@, std::locale::facet *this, const std::locale::id *a3); +int __fastcall std::locale::facet::_M_remove_reference(volatile signed __int32 *a1); +BOOL __thiscall std::locale::operator==(void *this, int a2); +unsigned int __thiscall std::vector::_M_check_len(_DWORD *this, unsigned int a2, std::length_error *a3); +unsigned int __thiscall std::vector::_M_check_len(_DWORD *this, unsigned int a2, std::length_error *a3); +int __fastcall std::moneypunct::neg_format(_DWORD *a1); +int __fastcall std::moneypunct::pos_format(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2); +int __fastcall std::moneypunct::frac_digits(_DWORD *a1); +int __fastcall std::moneypunct::decimal_point(_DWORD *a1); +int __fastcall std::moneypunct::do_neg_format(int a1); +int __fastcall std::moneypunct::do_pos_format(int a1); +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_frac_digits(int a1); +int __fastcall std::moneypunct::do_decimal_point(int a1); +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2); +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_thousands_sep(int a1); +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::neg_format(_DWORD *a1); +int __fastcall std::moneypunct::pos_format(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2); +int __fastcall std::moneypunct::frac_digits(_DWORD *a1); +int __fastcall std::moneypunct::decimal_point(_DWORD *a1); +int __fastcall std::moneypunct::do_neg_format(int a1); +int __fastcall std::moneypunct::do_pos_format(int a1); +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_frac_digits(int a1); +int __fastcall std::moneypunct::do_decimal_point(int a1); +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2); +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_thousands_sep(int a1); +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::neg_format(_DWORD *a1); +int __fastcall std::moneypunct::pos_format(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2); +int __fastcall std::moneypunct::frac_digits(_DWORD *a1); +int __fastcall std::moneypunct::decimal_point(_DWORD *a1); +int __fastcall std::moneypunct::do_neg_format(int a1); +int __fastcall std::moneypunct::do_pos_format(int a1); +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_frac_digits(int a1); +int __fastcall std::moneypunct::do_decimal_point(int a1); +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2); +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_thousands_sep(int a1); +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::neg_format(_DWORD *a1); +int __fastcall std::moneypunct::pos_format(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2); +int __fastcall std::moneypunct::frac_digits(_DWORD *a1); +int __fastcall std::moneypunct::decimal_point(_DWORD *a1); +int __fastcall std::moneypunct::do_neg_format(int a1); +int __fastcall std::moneypunct::do_pos_format(int a1); +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2); +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1); +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_frac_digits(int a1); +int __fastcall std::moneypunct::do_decimal_point(int a1); +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2); +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2); +int __fastcall std::moneypunct::do_thousands_sep(int a1); +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2); +int __thiscall std::string::_M_disjunct(unsigned int *this, unsigned int a2); +bool __fastcall std::string::_M_is_local(_DWORD *a1); +unsigned int __thiscall std::string::find_last_of(int *this, char *Str, unsigned int a3); +unsigned int __thiscall std::string::find_last_of(int *this, void *Buf, unsigned int a3, size_t MaxCount); +int __thiscall std::string::find_last_of(int *this, int a2, unsigned int a3); +int __thiscall std::string::find_last_of(int *this, char a2, unsigned int a3); +int __fastcall std::string::_M_local_data(int a1); +unsigned int __thiscall std::string::find_first_of(_DWORD *this, char *Str, unsigned int a3); +unsigned int __thiscall std::string::find_first_of(_DWORD *this, void *Buf, unsigned int a3, size_t MaxCount); +int __thiscall std::string::find_first_of(_DWORD *this, int a2, unsigned int a3); +char *__thiscall std::string::find_first_of(int *this, char a2, unsigned int a3); +void *__thiscall std::string::get_allocator(void *this, int a2); +unsigned int __thiscall std::string::_M_check_length(_DWORD *this, int a2, unsigned int a3, std::length_error *a4); +int __fastcall std::string::_M_get_allocator(int a1); +int __thiscall std::string::find_last_not_of(int *this, char *Str, unsigned int a3); +int __thiscall std::string::find_last_not_of(int *this, void *Buf, unsigned int a3, size_t MaxCount); +int __thiscall std::string::find_last_not_of(int *this, int a2, unsigned int a3); +int __thiscall std::string::find_last_not_of(int *this, char a2, unsigned int a3); +unsigned int __thiscall std::string::find_first_not_of(int *this, char *Str, unsigned int a3); +unsigned int __thiscall std::string::find_first_not_of(int *this, void *Buf, unsigned int a3, size_t MaxCount); +int __thiscall std::string::find_first_not_of(int *this, int a2, unsigned int a3); +int __thiscall std::string::find_first_not_of(_DWORD *this, char a2, unsigned int a3); +unsigned int __thiscall std::string::at(_DWORD *this, unsigned int a2); +int __fastcall std::string::end(_DWORD *a1); +int __fastcall std::string::back(_DWORD *a1); +int __fastcall std::string::cend(_DWORD *a1); +size_t __thiscall std::string::copy(_DWORD *this, _BYTE *a2, size_t a3, unsigned int a4); +int __fastcall std::string::data(int a1); +unsigned int __thiscall std::string::find(int *this, char *Str, int a3); +unsigned int __thiscall std::string::find(int *this, char *Buf2, unsigned int a3, size_t Size); +unsigned int __thiscall std::string::find(int *this, int a2, int a3); +char *__thiscall std::string::find(int *this, char a2, unsigned int a3); +_DWORD *__thiscall std::string::rend(_DWORD *this, _DWORD *a2); +int __fastcall std::string::size(int a1); +int __fastcall std::string::begin(int a1); +int __fastcall std::string::c_str(int a1); +_DWORD *__thiscall std::string::crend(_DWORD *this, _DWORD *a2); +bool __fastcall std::string::empty(int a1); +int __fastcall std::string::front(int a1); +int __thiscall std::string::rfind(int *this, char *Str, int a3); +int __thiscall std::string::rfind(int *this, void *Buf2, unsigned int a3, size_t Size); +int __thiscall std::string::rfind(int *this, int a2, unsigned int a3); +int __thiscall std::string::rfind(int *this, char a2, unsigned int a3); +int __fastcall std::string::cbegin(int a1); +int __fastcall std::string::length(int a1); +_DWORD *__thiscall std::string::rbegin(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::string::substr(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4); +int __fastcall std::string::_M_data(int a1); +int __thiscall std::string::compare(int this, char *Str); +int __thiscall std::string::compare(int this, int a2); +int __thiscall std::string::compare(_DWORD *this, unsigned int a2, unsigned int a3, char *Str); +int __thiscall std::string::compare(_DWORD *this, unsigned int a2, size_t a3, void *Buf2, unsigned int a5); +int __thiscall std::string::compare(_DWORD *this, unsigned int a2, size_t a3, int a4); +int __thiscall std::string::compare(_DWORD *this, unsigned int a2, size_t a3, _DWORD *a4, unsigned int a5, size_t a6); +_DWORD *__thiscall std::string::crbegin(_DWORD *this, _DWORD *a2); +unsigned int __thiscall std::string::_M_check(_DWORD *this, unsigned int a2, const char *a3); +unsigned int __thiscall std::string::_M_limit(_DWORD *this, int a2, unsigned int a3); +int __fastcall std::string::capacity(_DWORD *a1); +int std::string::max_size(); +int __thiscall std::string::operator[](_DWORD *this, int a2); +bool __thiscall std::wstring::_M_disjunct(unsigned int *this, unsigned int a2); +bool __fastcall std::wstring::_M_is_local(_DWORD *a1); +int __thiscall std::wstring::find_last_of(_DWORD *this, wchar_t *String, int a3); +int __thiscall std::wstring::find_last_of(_DWORD *this, _WORD *a2, unsigned int a3, int a4); +int __thiscall std::wstring::find_last_of(_DWORD *this, int a2, unsigned int a3); +int __thiscall std::wstring::find_last_of(int *this, __int16 a2, unsigned int a3); +int __fastcall std::wstring::_M_local_data(int a1); +int __thiscall std::wstring::find_first_of(_DWORD *this, wchar_t *String, int a3); +int __thiscall std::wstring::find_first_of(_DWORD *this, _WORD *a2, unsigned int a3, int a4); +int __thiscall std::wstring::find_first_of(_DWORD *this, int a2, unsigned int a3); +int __thiscall std::wstring::find_first_of(_DWORD *this, __int16 a2, unsigned int a3); +void *__thiscall std::wstring::get_allocator(void *this, int a2); +unsigned int __thiscall std::wstring::_M_check_length(_DWORD *this, int a2, unsigned int a3, std::length_error *a4); +int __fastcall std::wstring::_M_get_allocator(int a1); +int __thiscall std::wstring::find_last_not_of(_DWORD *this, wchar_t *String, int a3); +int __thiscall std::wstring::find_last_not_of(_DWORD *this, _WORD *a2, unsigned int a3, int a4); +int __thiscall std::wstring::find_last_not_of(_DWORD *this, int a2, unsigned int a3); +int __thiscall std::wstring::find_last_not_of(int *this, __int16 a2, unsigned int a3); +int __thiscall std::wstring::find_first_not_of(int *this, wchar_t *String, unsigned int a3); +int __thiscall std::wstring::find_first_not_of(int *this, _WORD *a2, unsigned int a3, int a4); +int __thiscall std::wstring::find_first_not_of(int *this, _DWORD *a2, unsigned int a3); +int __thiscall std::wstring::find_first_not_of(_DWORD *this, __int16 a2, unsigned int a3); +int __thiscall std::wstring::at(_DWORD *this, unsigned int a2); +int __fastcall std::wstring::end(_DWORD *a1); +int __fastcall std::wstring::back(_DWORD *a1); +int __fastcall std::wstring::cend(_DWORD *a1); +int __thiscall std::wstring::copy(_DWORD *this, _WORD *a2, unsigned int a3, unsigned int a4); +int __fastcall std::wstring::data(int a1); +int __thiscall std::wstring::find(int *this, wchar_t *String, int a3); +int __thiscall std::wstring::find(int *this, _WORD *a2, unsigned int a3, unsigned int a4); +int __thiscall std::wstring::find(int *this, int a2, unsigned int a3); +int __thiscall std::wstring::find(_DWORD *this, __int16 a2, unsigned int a3); +_DWORD *__thiscall std::wstring::rend(_DWORD *this, _DWORD *a2); +int __fastcall std::wstring::size(int a1); +int __fastcall std::wstring::begin(int a1); +int __fastcall std::wstring::c_str(int a1); +_DWORD *__thiscall std::wstring::crend(_DWORD *this, _DWORD *a2); +bool __fastcall std::wstring::empty(int a1); +int __fastcall std::wstring::front(int a1); +int __thiscall std::wstring::rfind(_DWORD *this, wchar_t *String, int a3); +int __thiscall std::wstring::rfind(_DWORD *this, _WORD *a2, unsigned int a3, unsigned int a4); +int __thiscall std::wstring::rfind(_DWORD *this, int a2, unsigned int a3); +int __thiscall std::wstring::rfind(int *this, __int16 a2, unsigned int a3); +int __fastcall std::wstring::cbegin(int a1); +int __fastcall std::wstring::length(int a1); +_DWORD *__thiscall std::wstring::rbegin(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::wstring::substr(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4); +int __fastcall std::wstring::_M_data(int a1); +int __thiscall std::wstring::compare(wchar_t **this, wchar_t *String); +int __thiscall std::wstring::compare(_DWORD *this, int a2); +int __thiscall std::wstring::compare(_DWORD *this, unsigned int a2, unsigned int a3, wchar_t *String); +int __thiscall std::wstring::compare(_DWORD *this, unsigned int a2, unsigned int a3, _WORD *a4, unsigned int a5); +int __thiscall std::wstring::compare(_DWORD *this, unsigned int a2, unsigned int a3, int a4); +int __thiscall std::wstring::compare(_DWORD *this, unsigned int a2, unsigned int a3, _DWORD *a4, unsigned int a5, unsigned int a6); +_DWORD *__thiscall std::wstring::crbegin(_DWORD *this, _DWORD *a2); +unsigned int __thiscall std::wstring::_M_check(_DWORD *this, unsigned int a2, const char *a3); +unsigned int __thiscall std::wstring::_M_limit(_DWORD *this, int a2, unsigned int a3); +int __fastcall std::wstring::capacity(_DWORD *a1); +int std::wstring::max_size(); +int __thiscall std::wstring::operator[](_DWORD *this, int a2); +int __thiscall std::stringbuf::str(int this, int a2); +int __thiscall std::wstringbuf::str(int this, _DWORD *a2); +int __thiscall std::basic_stringstream,std::allocator>::str(int this, int a2); +int __fastcall std::basic_stringstream,std::allocator>::rdbuf(int a1); +int __thiscall std::basic_stringstream,std::allocator>::str(int this, _DWORD *a2); +int __fastcall std::basic_stringstream,std::allocator>::rdbuf(int a1); +int __thiscall std::istringstream::str(int this, int a2); +int __fastcall std::istringstream::rdbuf(int a1); +int __thiscall std::wistringstream::str(int this, _DWORD *a2); +int __fastcall std::wistringstream::rdbuf(int a1); +int __thiscall std::ostringstream::str(int this, int a2); +int __fastcall std::ostringstream::rdbuf(int a1); +int __thiscall std::wostringstream::str(int this, _DWORD *a2); +int __fastcall std::wostringstream::rdbuf(int a1); +int __stdcall std::collate::_M_compare(char *, char *); // idb +int __stdcall std::collate::do_compare(_BYTE *a1, int a2, _BYTE *a3, int a4); +size_t __stdcall std::collate::_M_transform(char *Destination, char *Source, size_t MaxCount); +int __thiscall std::collate::do_transform(int this, int a2, _BYTE *a3, int a4); +int __thiscall std::collate::hash(void *this, char *a2, char *a3); +int __fastcall std::collate::compare(int a1); +int __stdcall std::collate::do_hash(char *a1, char *a2); +void *__thiscall std::collate::transform(void *this, int a2, int a3, int a4); +int __stdcall std::collate::_M_compare(wchar_t *, wchar_t *); // idb +int __stdcall std::collate::do_compare(_WORD *a1, int a2, _WORD *a3, int a4); +size_t __stdcall std::collate::_M_transform(wchar_t *Destination, wchar_t *Source, size_t MaxCount); +int __thiscall std::collate::do_transform(int this, int a2, _WORD *a3, int a4); +int __thiscall std::collate::hash(void *this, unsigned __int16 *a2, unsigned int a3); +int __fastcall std::collate::compare(int a1); +int __stdcall std::collate::do_hash(unsigned __int16 *a1, unsigned int a2); +void *__thiscall std::collate::transform(void *this, int a2, int a3, int a4); +int __stdcall std::messages::_M_convert_to_char(int a1); +_DWORD *__thiscall std::messages::_M_convert_from_char(_DWORD *this, int a2, int a3); +void *__thiscall std::messages::get(void *this, int a2, int a3, int a4, int a5, int a6); +int __thiscall std::messages::open(void *this, int a2, int a3); +int __thiscall std::messages::open(void *this, int a2, int a3, int a4); +int (__stdcall *__thiscall std::messages::close(void *this, int a2))(int); +_DWORD *__thiscall std::messages::do_get(_DWORD *this, int a2, int a3, int a4, int a5, int a6); +int __stdcall std::messages::do_open(int a1, int a2); +int __stdcall std::messages::do_close(int); // weak +int __stdcall std::messages::_M_convert_to_char(int a1); +_DWORD *__thiscall std::messages::_M_convert_from_char(_DWORD *this, int a2, int a3); +void *__thiscall std::messages::get(void *this, int a2, int a3, int a4, int a5, int a6); +int __thiscall std::messages::open(void *this, int a2, int a3); +int __thiscall std::messages::open(void *this, int a2, int a3, int a4); +int (__stdcall *__thiscall std::messages::close(void *this, int a2))(int); +_DWORD *__thiscall std::messages::do_get(_DWORD *this, int a2, int a3, int a4, int a5, int a6); +int __stdcall std::messages::do_open(int a1, int a2); +int __stdcall std::messages::do_close(int); // weak +_DWORD *__thiscall std::numpunct::do_grouping(_DWORD *this, int a2); +_DWORD *__thiscall std::numpunct::do_truename(_DWORD *this, int a2); +_DWORD *__thiscall std::numpunct::do_falsename(_DWORD *this, int a2); +int __fastcall std::numpunct::decimal_point(_DWORD *a1); +int __fastcall std::numpunct::thousands_sep(_DWORD *a1); +int __fastcall std::numpunct::do_decimal_point(int a1); +int __fastcall std::numpunct::do_thousands_sep(int a1); +_DWORD *__thiscall std::numpunct::grouping(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::numpunct::truename(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::numpunct::falsename(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::numpunct::do_grouping(_DWORD *this, int a2); +_DWORD *__thiscall std::numpunct::do_truename(_DWORD *this, int a2); +_DWORD *__thiscall std::numpunct::do_falsename(_DWORD *this, int a2); +int __fastcall std::numpunct::decimal_point(_DWORD *a1); +int __fastcall std::numpunct::thousands_sep(_DWORD *a1); +int __fastcall std::numpunct::do_decimal_point(int a1); +int __fastcall std::numpunct::do_thousands_sep(int a1); +_DWORD *__thiscall std::numpunct::grouping(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::numpunct::truename(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::numpunct::falsename(_DWORD *this, _DWORD *a2); +int __fastcall std::time_get>::date_order(int a1); +_DWORD *__stdcall std::time_get>::do_get_date(_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7); +_DWORD *__stdcall std::time_get>::do_get_time(_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7); +_DWORD *__stdcall std::time_get>::do_get_year(_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int a7); +int __fastcall std::time_get>::get_weekday(int a1); +int std::time_get>::do_date_order(); +int __fastcall std::time_get>::get_monthname(int a1); +_DWORD *__stdcall std::time_get>::_M_extract_num(_DWORD *a1, int a2, _DWORD *a3, int a4, int *a5, signed int a6, int a7, unsigned int a8, int a9, _DWORD *a10); +_DWORD *__stdcall std::time_get>::do_get_weekday(_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int a7); +unsigned __int64 __stdcall std::time_get>::_M_extract_name(unsigned __int64 a1, _DWORD *a2, int a3, _DWORD *a4, int a5, int a6, int a7, _DWORD *a8); +_DWORD *__stdcall std::time_get>::do_get_monthname(_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int a7); +_DWORD *__stdcall std::time_get>::_M_extract_via_format(_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7, char *a8); +_DWORD *__stdcall std::time_get>::_M_extract_wday_or_month(_DWORD *a1, int a2, _DWORD *a3, int a4, unsigned int *a5, int a6, unsigned int a7, int a8, _DWORD *a9); +_DWORD *__thiscall std::time_get>::get(void *this, _DWORD *a2, int a3, _DWORD *a4, int a5, int a6, _DWORD *a7, _DWORD *a8, unsigned __int8 *a9, unsigned __int8 *a10); +int __thiscall std::time_get>::get(void *this, _DWORD *a2, int a3, _DWORD *a4, int a5, int a6, _DWORD *a7, _DWORD *a8, char a9, char a10); +_DWORD *__stdcall std::time_get>::do_get(_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7, char a8, char a9); +int __fastcall std::time_get>::get_date(int a1); +int __fastcall std::time_get>::get_time(int a1); +int __fastcall std::time_get>::get_year(int a1); +int __fastcall std::time_get>::date_order(int a1); +int *__stdcall std::time_get>::do_get_date(int *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7); +int *__stdcall std::time_get>::do_get_time(int *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7); +_DWORD *__stdcall std::time_get>::do_get_year(_DWORD *a1, unsigned __int16 a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, int a7); +int __fastcall std::time_get>::get_weekday(int a1); +int std::time_get>::do_date_order(); +int __fastcall std::time_get>::get_monthname(int a1); +_DWORD *__stdcall std::time_get>::_M_extract_num(_DWORD *a1, unsigned __int16 a2, _DWORD *a3, __int16 a4, int *a5, signed int a6, int a7, unsigned int a8, int a9, _DWORD *a10); +_DWORD *__stdcall std::time_get>::do_get_weekday(_DWORD *a1, int a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, int a7); +int __stdcall std::time_get>::_M_extract_name(int *a1, int a2, _DWORD *a3, int a4, int **a5, int a6, int a7, int a8, _DWORD *a9); +_DWORD *__stdcall std::time_get>::do_get_monthname(_DWORD *a1, int a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, int a7); +int *__stdcall std::time_get>::_M_extract_via_format(int *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7, wchar_t *String); +_DWORD *__stdcall std::time_get>::_M_extract_wday_or_month(_DWORD *a1, int a2, _DWORD *a3, __int16 a4, unsigned int *a5, int a6, unsigned int a7, int a8, _DWORD *a9); +int *__thiscall std::time_get>::get(void *this, int *a2, int a3, _DWORD *a4, int a5, int a6, _DWORD *a7, _DWORD *a8, unsigned __int16 *a9, unsigned __int16 *a10); +int __thiscall std::time_get>::get(void *this, int *a2, int a3, _DWORD *a4, int a5, int a6, _DWORD *a7, _DWORD *a8, char a9, char a10); +int *__stdcall std::time_get>::do_get(int *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7, char a8, char a9); +int __fastcall std::time_get>::get_date(int a1); +int __fastcall std::time_get>::get_time(int a1); +int __fastcall std::time_get>::get_year(int a1); +_DWORD *__stdcall std::money_get>::_M_extract(_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7); +_DWORD *__stdcall std::money_get>::_M_extract(_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7); +int __thiscall std::money_get>::get(void *this, int a2, int a3, int a4, int a5, unsigned __int8 a6); +int __thiscall std::money_get>::get(void *this, int a2, int a3, int a4, int a5, unsigned __int8 a6); +__int64 __stdcall std::money_get>::do_get(__int64 a1, _DWORD *a2, int a3, char a4, int a5, _DWORD *a6, int *a7); +__int64 __stdcall std::money_get>::do_get(__int64 a1, _DWORD *a2, int a3, char a4, int a5, _DWORD *a6, long double *a7); +_DWORD *__stdcall std::money_get>::_M_extract(_DWORD *a1, __int16 a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, _DWORD *a7); +_DWORD *__stdcall std::money_get>::_M_extract(_DWORD *a1, __int16 a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, _DWORD *a7); +int __thiscall std::money_get>::get(void *this, int a2, int a3, int a4, int a5, unsigned __int8 a6); +int __thiscall std::money_get>::get(void *this, int a2, int a3, int a4, int a5, unsigned __int8 a6); +struct _Unwind_Exception *__stdcall std::money_get>::do_get(_DWORD *a1, __int16 a2, _DWORD *a3, __int16 a4, char a5, int a6, _DWORD *a7, int *a8); +struct _Unwind_Exception *__stdcall std::money_get>::do_get(_DWORD *a1, __int16 a2, _DWORD *a3, __int16 a4, char a5, int a6, _DWORD *a7, long double *a8); +int __thiscall std::money_put>::put(void *this, __int64 a2, unsigned __int8 a3, int a4, char a5, int a6); +int __thiscall std::money_put>::put(void *this, int a2, int a3, unsigned __int8 a4, int a5, char a6); +__int64 __stdcall std::money_put>::do_put(__int64 a1, char a2, int a3, char a4, int a5); +__int64 __thiscall std::money_put>::do_put(void *this, __int64 a2, int a3, int a4, int a5, long double a6); +__int64 __stdcall std::money_put>::_M_insert(__int64 a1, int a2, char a3, int a4); +__int64 __stdcall std::money_put>::_M_insert(__int64 a1, int a2, char a3, int a4); +int __thiscall std::money_put>::put(void *this, __int64 a2, unsigned __int8 a3, int a4, unsigned __int16 a5, int a6); +int __thiscall std::money_put>::put(void *this, int a2, int a3, unsigned __int8 a4, int a5, unsigned __int16 a6); +__int64 __stdcall std::money_put>::do_put(__int64 a1, char a2, int a3, __int16 a4, int a5); +__int64 __thiscall std::money_put>::do_put(void *this, __int64 a2, int a3, int a4, int a5, long double a6); +__int64 __stdcall std::money_put>::_M_insert(__int64 a1, int a2, __int16 a3, int a4); +__int64 __stdcall std::money_put>::_M_insert(__int64 a1, int a2, __int16 a3, int a4); +int __stdcall std::codecvt::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int __stdcall std::codecvt::do_in(int a1, unsigned __int8 *a2, int a3, unsigned __int8 **a4, int a5, int a6, _DWORD *a7); +int __stdcall std::codecvt::do_out(int a1, unsigned int *a2, unsigned int *a3, unsigned int **a4, int a5, int a6, _DWORD *a7); +unsigned __int8 *__stdcall std::codecvt::do_length(int a1, unsigned __int8 *a2, unsigned __int8 *a3, int a4); +int __stdcall std::codecvt::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int __stdcall std::codecvt::do_in(int a1, unsigned __int8 *a2, int a3, unsigned __int8 **a4, int a5, int a6, _DWORD *a7); +int __stdcall std::codecvt::do_out(int a1, unsigned int *a2, unsigned int *a3, unsigned int **a4, _BYTE *a5, _BYTE *a6, _DWORD *a7); +unsigned __int8 *__stdcall std::codecvt::do_length(int a1, unsigned __int8 *a2, unsigned __int8 *a3, int a4); +int __stdcall std::codecvt::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int __stdcall std::codecvt::do_in(int a1, unsigned __int8 *a2, unsigned __int8 *a3, unsigned __int8 **a4, char *a5, char *a6, char **a7); +int __stdcall std::codecvt::do_out(int a1, unsigned __int16 *a2, unsigned __int16 *a3, unsigned __int16 **a4, int a5, int a6, _DWORD *a7); +unsigned __int8 *__stdcall std::codecvt::do_length(int a1, unsigned __int8 *a2, unsigned __int8 *a3, unsigned int a4); +int __stdcall std::codecvt::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int std::codecvt::do_encoding(); +int std::codecvt::do_max_length(); +int std::codecvt::do_always_noconv(); +int __stdcall std::codecvt::do_in(int a1, unsigned __int8 *a2, unsigned __int8 *a3, unsigned __int8 **a4, char *a5, char *a6, char **a7); +int __stdcall std::codecvt::do_out(int a1, unsigned __int16 *a2, unsigned __int16 *a3, unsigned __int16 **a4, _BYTE *a5, _BYTE *a6, _BYTE **a7); +unsigned __int8 *__stdcall std::codecvt::do_length(int a1, unsigned __int8 *a2, unsigned __int8 *a3, unsigned int a4); +int __stdcall std::codecvt::do_unshift(int a1, int a2, int a3, _DWORD *a4); +int std::codecvt::do_max_length(); +int std::codecvt::do_always_noconv(); +int __stdcall std::codecvt::do_in(int a1, int a2, int a3, _DWORD *a4, int a5, int a6, _DWORD *a7); +int __stdcall std::codecvt::do_out(int a1, int a2, int a3, _DWORD *a4, int a5, int a6, _DWORD *a7); +unsigned int __stdcall std::codecvt::do_length(int a1, int a2, int a3, unsigned int a4); +int __stdcall std::codecvt::do_unshift(int a1, int a2, int a3, _DWORD *a4); +BOOL __cdecl std::codecvt::do_encoding(); +int __cdecl std::codecvt::do_max_length(); +int std::codecvt::do_always_noconv(); +int __stdcall std::codecvt::do_in(unsigned int *a1, char *a2, unsigned int a3, char **a4, wchar_t *a5, unsigned int a6, wchar_t **a7); +int __stdcall std::codecvt::do_out(unsigned int *a1, wchar_t *a2, unsigned int a3, wchar_t **a4, char *a5, unsigned int a6, char **a7); +int __stdcall std::codecvt::do_length(unsigned int *a1, char *a2, unsigned int a3, int a4); +int __stdcall std::collate::_M_compare(char *, char *); // idb +int __stdcall std::collate::do_compare(void *a1, _BYTE *a2, void *a3, int a4); +size_t __stdcall std::collate::_M_transform(char *Destination, char *Source, size_t MaxCount); +int *__thiscall std::collate::do_transform(int *this, int a2, _BYTE *a3, int a4); +int __thiscall std::collate::hash(void *this, char *a2, char *a3); +int __fastcall std::collate::compare(int a1); +int __stdcall std::collate::do_hash(char *a1, char *a2); +void *__thiscall std::collate::transform(void *this, int a2, int a3, int a4); +int __stdcall std::collate::_M_compare(wchar_t *, wchar_t *); // idb +int __stdcall std::collate::do_compare(void *a1, _WORD *a2, void *a3, int a4); +size_t __stdcall std::collate::_M_transform(wchar_t *Destination, wchar_t *Source, size_t MaxCount); +int *__thiscall std::collate::do_transform(int *this, int a2, _WORD *a3, int a4); +int __thiscall std::collate::hash(void *this, unsigned __int16 *a2, unsigned int a3); +int __fastcall std::collate::compare(int a1); +int __stdcall std::collate::do_hash(unsigned __int16 *a1, unsigned int a2); +void *__thiscall std::collate::transform(void *this, int a2, int a3, int a4); +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11](_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7); +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11](_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7); +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11](_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7); +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11](_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _WORD *a7); +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11](_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7); +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11](_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7); +unsigned __int64 __stdcall std::num_get>::_M_extract_int(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, int *a6); +unsigned __int64 __stdcall std::num_get>::_M_extract_int(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, int *a6); +unsigned __int64 __stdcall std::num_get>::_M_extract_int(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, int *a6); +unsigned __int64 __stdcall std::num_get>::_M_extract_int(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, _WORD *a6); +unsigned __int64 __stdcall std::num_get>::_M_extract_int(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, int *a6); +unsigned __int64 __stdcall std::num_get>::_M_extract_int(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, _DWORD *a6); +unsigned __int64 __stdcall std::num_get>::_M_extract_float(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, int *a6); +int __thiscall std::num_get>::get(void *this, unsigned __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7); +int __fastcall std::num_get>::get(int a1); +int __fastcall std::num_get>::get(int a1); +int __fastcall std::num_get>::get(int a1); +int __fastcall std::num_get>::get(int a1); +int __thiscall std::num_get>::get(void *this, unsigned __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7); +int __thiscall std::num_get>::get(void *this, unsigned __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7); +int __thiscall std::num_get>::get(void *this, unsigned __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7); +int __thiscall std::num_get>::get(void *this, unsigned __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _WORD *a7); +int __thiscall std::num_get>::get(void *this, unsigned __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7); +int __thiscall std::num_get>::get(void *this, unsigned __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7); +unsigned __int64 __stdcall std::num_get>::do_get(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, _DWORD *a6); +unsigned __int64 __stdcall std::num_get>::do_get(unsigned __int64 a1, _DWORD *a2, int a3, int a4, int *a5, _BYTE *a6); +int __stdcall std::num_get>::do_get(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, double *a6); +int __stdcall std::num_get>::do_get(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, long double *a6); +int __stdcall std::num_get>::do_get(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, float *a6); +int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); // weak +int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); // weak +int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); // weak +int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); // weak +int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); // weak +int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); // weak +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11](_DWORD *a1, unsigned __int16 a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, int *a7); +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11](_DWORD *a1, unsigned __int16 a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, int *a7); +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11](_DWORD *a1, unsigned __int16 a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, int *a7); +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11](_DWORD *a1, unsigned __int16 a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, _WORD *a7); +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11](_DWORD *a1, unsigned __int16 a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, int *a7); +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11](_DWORD *a1, unsigned __int16 a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, _DWORD *a7); +__int64 __stdcall std::num_get>::_M_extract_int(__int64 a1, _DWORD *a2, __int16 a3, int a4, _DWORD *a5, int *a6); +__int64 __stdcall std::num_get>::_M_extract_int(__int64 a1, _DWORD *a2, __int16 a3, int a4, _DWORD *a5, int *a6); +__int64 __stdcall std::num_get>::_M_extract_int(__int64 a1, _DWORD *a2, __int16 a3, int a4, _DWORD *a5, int *a6); +__int64 __stdcall std::num_get>::_M_extract_int(__int64 a1, _DWORD *a2, __int16 a3, int a4, _DWORD *a5, _WORD *a6); +__int64 __stdcall std::num_get>::_M_extract_int(__int64 a1, _DWORD *a2, __int16 a3, int a4, _DWORD *a5, _DWORD *a6); +__int64 __stdcall std::num_get>::_M_extract_int(__int64 a1, _DWORD *a2, __int16 a3, int a4, _DWORD *a5, _DWORD *a6); +__int64 __stdcall std::num_get>::_M_extract_float(__int64 a1, _DWORD *a2, __int16 a3, int a4, _DWORD *a5, int *a6); +int __thiscall std::num_get>::get(void *this, __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7); +int __fastcall std::num_get>::get(int a1); +int __fastcall std::num_get>::get(int a1); +int __fastcall std::num_get>::get(int a1); +int __fastcall std::num_get>::get(int a1); +int __thiscall std::num_get>::get(void *this, __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7); +int __thiscall std::num_get>::get(void *this, __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7); +int __thiscall std::num_get>::get(void *this, __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7); +int __thiscall std::num_get>::get(void *this, __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _WORD *a7); +int __thiscall std::num_get>::get(void *this, __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7); +int __thiscall std::num_get>::get(void *this, __int64 a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7); +int __stdcall std::num_get>::do_get(__int64 a1, _DWORD *a2, __int16 a3, int a4, _DWORD *a5, _DWORD *a6); +__int64 __stdcall std::num_get>::do_get(__int64 a1, _DWORD *a2, __int16 a3, int a4, int *a5, _BYTE *a6); +std::locale::facet *__stdcall std::num_get>::do_get(__int64 a1, _DWORD *a2, __int16 a3, int a4, _DWORD *a5, double *a6); +std::locale::facet *__stdcall std::num_get>::do_get(__int64 a1, _DWORD *a2, __int16 a3, int a4, _DWORD *a5, long double *a6); +std::locale::facet *__stdcall std::num_get>::do_get(__int64 a1, _DWORD *a2, __int16 a3, int a4, _DWORD *a5, float *a6); +int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); // weak +int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); // weak +int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); // weak +int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); // weak +int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); // weak +int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); // weak +_BYTE *__stdcall std::num_put>::_M_group_int(char *a1, int a2, char a3, int a4, _BYTE *a5, _BYTE *a6, _DWORD *a7); +int __stdcall std::num_put>::_M_insert_int(int a1, int a2, int *a3, int a4, int a5); +int __stdcall std::num_put>::_M_insert_int(int a1, int a2, _DWORD *a3, int a4, int a5); +int __stdcall std::num_put>::_M_insert_int(int a1, int a2, int *a3, int a4, __int64 a5); +int __stdcall std::num_put>::_M_insert_int(int a1, int a2, _DWORD *a3, int a4, int a5, int a6); +_BYTE *__stdcall std::num_put>::_M_group_float(char *a1, int a2, char a3, char *Src, int a5, _BYTE *a6, _DWORD *a7); +int __thiscall std::num_put>::_M_insert_float(void *this, int a2, int a3, int *a4, int a5, char a6, double a7); +int __thiscall std::num_put>::_M_insert_float(void *this, int a2, int a3, int *a4, int a5, char a6, long double a7); +int __thiscall std::num_put>::put(void *this, int a2, int a3, _DWORD *a4, char a5, int a6); +int __thiscall std::num_put>::put(void *this, int a2, int a3, int a4, char a5, unsigned __int8 a6); +int __thiscall std::num_put>::put(void *this, int a2, int a3, int *a4, char a5, double a6); +int __thiscall std::num_put>::put(void *this, int a2, int a3, int *a4, char a5, long double a6); +int __thiscall std::num_put>::put(void *this, int a2, int a3, int *a4, char a5, int a6); +int __thiscall std::num_put>::put(void *this, int a2, int a3, _DWORD *a4, char a5, int a6); +int __thiscall std::num_put>::put(void *this, int a2, int a3, int *a4, char a5, __int64 a6); +int __thiscall std::num_put>::put(void *this, int a2, int a3, _DWORD *a4, char a5, int a6, int a7); +int __stdcall std::num_put>::_M_pad(char a1, int a2, _DWORD *a3, char *a4, _BYTE *a5, int *a6); +int __stdcall std::num_put>::do_put(int a1, int a2, _DWORD *a3, char a4, int a5); +int *__stdcall std::num_put>::do_put(int *a1, int a2, int *a3, int a4, int a5); +int __thiscall std::num_put>::do_put(void *this, int a2, int a3, int *a4, char a5, double a6); +int __thiscall std::num_put>::do_put(void *this, int a2, int a3, int *a4, char a5, long double a6); +int __stdcall std::num_put>::do_put(int a1, int a2, int *a3, char a4, int a5); +int __stdcall std::num_put>::do_put(int a1, int a2, _DWORD *a3, char a4, int a5); +int __stdcall std::num_put>::do_put(int a1, int a2, int *a3, char a4, __int64 a5); +int __stdcall std::num_put>::do_put(int a1, int a2, _DWORD *a3, char a4, int a5, int a6); +int __stdcall std::num_put>::_M_group_int(char *a1, int a2, __int16 a3, int a4, _WORD *a5, char *a6, int *a7); +int __stdcall std::num_put>::_M_insert_int(int a1, int a2, _DWORD *a3, int a4, int a5); +int __stdcall std::num_put>::_M_insert_int(int a1, int a2, _DWORD *a3, int a4, int a5); +int __stdcall std::num_put>::_M_insert_int(int a1, int a2, _DWORD *a3, int a4, __int64 a5); +int __stdcall std::num_put>::_M_insert_int(int a1, int a2, _DWORD *a3, int a4, int a5, int a6); +int __stdcall std::num_put>::_M_group_float(char *a1, int a2, __int16 a3, char *Src, _WORD *a5, char *a6, _DWORD *a7); +int *__thiscall std::num_put>::_M_insert_float(void *this, int *a2, int a3, std::__num_base *a4, int a5, void *a6, double a7); +int __thiscall std::num_put>::_M_insert_float(void *this, int a2, int a3, int *a4, int a5, char a6, long double a7); +int __thiscall std::num_put>::put(void *this, int a2, int a3, _DWORD *a4, unsigned __int16 a5, int a6); +int __thiscall std::num_put>::put(void *this, int a2, int a3, int a4, unsigned __int16 a5, unsigned __int8 a6); +int *__thiscall std::num_put>::put(void *this, int *a2, int a3, std::__num_base *a4, unsigned __int16 a5, double a6); +int __thiscall std::num_put>::put(void *this, int a2, int a3, int *a4, unsigned __int16 a5, long double a6); +int __thiscall std::num_put>::put(void *this, int a2, int a3, _DWORD *a4, unsigned __int16 a5, int a6); +int __thiscall std::num_put>::put(void *this, int a2, int a3, _DWORD *a4, unsigned __int16 a5, int a6); +int __thiscall std::num_put>::put(void *this, int a2, int a3, _DWORD *a4, unsigned __int16 a5, __int64 a6); +int __thiscall std::num_put>::put(void *this, int a2, int a3, _DWORD *a4, unsigned __int16 a5, int a6, int a7); +_WORD *__stdcall std::num_put>::_M_pad(unsigned __int16 a1, int a2, _DWORD *a3, _WORD *Size, _WORD *a5, int *a6); +int __stdcall std::num_put>::do_put(int a1, int a2, _DWORD *a3, unsigned __int16 a4, int a5); +int __stdcall std::num_put>::do_put(int a1, int a2, _DWORD *a3, unsigned __int16 a4, int a5); +int *__thiscall std::num_put>::do_put(void *this, int *a2, int a3, std::__num_base *a4, unsigned __int16 a5, double a6); +int __thiscall std::num_put>::do_put(void *this, int a2, int a3, int *a4, unsigned __int16 a5, long double a6); +int __stdcall std::num_put>::do_put(int a1, int a2, _DWORD *a3, unsigned __int16 a4, int a5); +int __stdcall std::num_put>::do_put(int a1, int a2, _DWORD *a3, unsigned __int16 a4, int a5); +int __stdcall std::num_put>::do_put(int a1, int a2, _DWORD *a3, unsigned __int16 a4, __int64 a5); +int __stdcall std::num_put>::do_put(int a1, int a2, _DWORD *a3, unsigned __int16 a4, int a5, int a6); +_DWORD *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find(_DWORD *this, int a2); +const char *std::bad_cast::what(); +int __fastcall std::ios_base::failure::what(int a1); +int __stdcall std::messages::_M_convert_to_char(int a1); +_DWORD *__thiscall std::messages::_M_convert_from_char(_DWORD *this, int a2, int a3); +void *__thiscall std::messages::get(void *this, int a2, int a3, int a4, int a5, int a6); +int __thiscall std::messages::open(void *this, int a2, int a3); +int __thiscall std::messages::open(void *this, int a2, int a3, int a4); +int (__stdcall *__thiscall std::messages::close(void *this, int a2))(int); +_DWORD *__thiscall std::messages::do_get(_DWORD *this, int a2, int a3, int a4, int a5, std::string *a6); +int __stdcall std::messages::do_open(int a1, int a2); +int __stdcall std::messages::do_close(int); // weak +int __stdcall std::messages::_M_convert_to_char(int a1); +_DWORD *__thiscall std::messages::_M_convert_from_char(_DWORD *this, int a2, int a3); +void *__thiscall std::messages::get(void *this, int a2, int a3, int a4, int a5, int a6); +int __thiscall std::messages::open(void *this, int a2, int a3); +int __thiscall std::messages::open(void *this, int a2, int a3, int a4); +int (__stdcall *__thiscall std::messages::close(void *this, int a2))(int); +_DWORD *__thiscall std::messages::do_get(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6); +int __stdcall std::messages::do_open(int a1, int a2); +int __stdcall std::messages::do_close(int); // weak +_DWORD *__thiscall std::numpunct::do_grouping(_DWORD *this, int a2); +_DWORD *__thiscall std::numpunct::do_truename(_DWORD *this, int a2); +_DWORD *__thiscall std::numpunct::do_falsename(_DWORD *this, int a2); +int __fastcall std::numpunct::decimal_point(_DWORD *a1); +int __fastcall std::numpunct::thousands_sep(_DWORD *a1); +int __fastcall std::numpunct::do_decimal_point(int a1); +int __fastcall std::numpunct::do_thousands_sep(int a1); +_DWORD *__thiscall std::numpunct::grouping(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::numpunct::truename(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::numpunct::falsename(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::numpunct::do_grouping(_DWORD *this, int a2); +_DWORD *__thiscall std::numpunct::do_truename(_DWORD *this, int a2); +_DWORD *__thiscall std::numpunct::do_falsename(_DWORD *this, int a2); +int __fastcall std::numpunct::decimal_point(_DWORD *a1); +int __fastcall std::numpunct::thousands_sep(_DWORD *a1); +int __fastcall std::numpunct::do_decimal_point(int a1); +int __fastcall std::numpunct::do_thousands_sep(int a1); +_DWORD *__thiscall std::numpunct::grouping(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::numpunct::truename(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::numpunct::falsename(_DWORD *this, _DWORD *a2); +int __fastcall std::time_get>::date_order(int a1); +int __stdcall std::time_get>::do_get_date(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, _DWORD *a6); +int __stdcall std::time_get>::do_get_time(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, _DWORD *a6); +_DWORD *__stdcall std::time_get>::do_get_year(_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int a7); +int __fastcall std::time_get>::get_weekday(int a1); +int std::time_get>::do_date_order(); +int __fastcall std::time_get>::get_monthname(int a1); +_DWORD *__stdcall std::time_get>::_M_extract_num(_DWORD *a1, int a2, _DWORD *a3, int a4, int *a5, signed int a6, int a7, unsigned int a8, int a9, _DWORD *a10); +_DWORD *__stdcall std::time_get>::do_get_weekday(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, int a6); +unsigned __int64 __stdcall std::time_get>::_M_extract_name(unsigned __int64 a1, _DWORD *a2, int a3, int **a4, int a5, int a6, int a7, _DWORD *a8); +_DWORD *__stdcall std::time_get>::do_get_monthname(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, int a6); +unsigned __int64 __stdcall std::time_get>::_M_extract_via_format(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, _DWORD *a6, char *a7); +int __stdcall std::time_get>::_M_extract_wday_or_month(unsigned __int64 a1, _DWORD *a2, int a3, unsigned int *a4, int a5, unsigned int a6, int a7, _DWORD *a8); +_DWORD *__stdcall std::time_get>::get(_DWORD *a1, int a2, _DWORD *a3, int a4, int a5, _DWORD *a6, _DWORD *a7, unsigned __int8 *a8, unsigned __int8 *a9); +int __stdcall std::time_get>::get(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, _DWORD *a6, char a7, char a8); +int __stdcall std::time_get>::do_get(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, _DWORD *a6, char a7, char a8); +int __fastcall std::time_get>::get_date(int a1); +int __fastcall std::time_get>::get_time(int a1); +int __fastcall std::time_get>::get_year(int a1); +int __fastcall std::time_get>::date_order(int a1); +_DWORD *__stdcall std::time_get>::do_get_date(__int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, _DWORD *a6); +_DWORD *__stdcall std::time_get>::do_get_time(__int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, _DWORD *a6); +_DWORD *__stdcall std::time_get>::do_get_year(_DWORD *a1, unsigned __int16 a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, int a7); +int __fastcall std::time_get>::get_weekday(int a1); +int std::time_get>::do_date_order(); +int __fastcall std::time_get>::get_monthname(int a1); +_DWORD *__stdcall std::time_get>::_M_extract_num(_DWORD *a1, unsigned __int16 a2, _DWORD *a3, __int16 a4, int *a5, signed int a6, int a7, unsigned int a8, int a9, _DWORD *a10); +_DWORD *__stdcall std::time_get>::do_get_weekday(_DWORD *a1, int a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, int a7); +int __stdcall std::time_get>::_M_extract_name(int *a1, int a2, _DWORD *a3, int a4, int **a5, int a6, int a7, int a8, _DWORD *a9); +_DWORD *__stdcall std::time_get>::do_get_monthname(_DWORD *a1, int a2, _DWORD *a3, __int16 a4, int a5, _DWORD *a6, int a7); +__int64 __stdcall std::time_get>::_M_extract_via_format(__int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, _DWORD *a6, wchar_t *a7); +_DWORD *__stdcall std::time_get>::_M_extract_wday_or_month(_DWORD *a1, int a2, _DWORD *a3, __int16 a4, unsigned int *a5, int a6, unsigned int a7, int a8, _DWORD *a9); +_DWORD *__thiscall std::time_get>::get(void *this, _DWORD *a2, int a3, _DWORD *a4, int a5, _DWORD *a6, _DWORD *a7, _DWORD *a8, unsigned __int16 *a9, unsigned __int16 *a10); +_DWORD *__stdcall std::time_get>::get(__int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, _DWORD *a6, char a7, char a8); +_DWORD *__stdcall std::time_get>::do_get(__int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, _DWORD *a6, char a7, char a8); +int __fastcall std::time_get>::get_date(int a1); +int __fastcall std::time_get>::get_time(int a1); +int __fastcall std::time_get>::get_year(int a1); +_DWORD *__thiscall std::time_put>::put(void *this, _DWORD *a2, int a3, int a4, char a5, int a6, unsigned __int8 *a7, unsigned __int8 *a8); +int __thiscall std::time_put>::put(void *this, int a2, int a3, int a4, char a5, int a6, char a7, char a8); +int __stdcall std::time_put>::do_put(int a1, char a2, int a3, int a4, struct tm *a5, char a6, char a7); +_DWORD *__thiscall std::time_put>::put(void *this, _DWORD *a2, int a3, int a4, unsigned __int16 a5, int a6, unsigned __int16 *a7, unsigned __int16 *a8); +int __thiscall std::time_put>::put(void *this, int a2, int a3, int a4, unsigned __int16 a5, int a6, char a7, char a8); +int __stdcall std::time_put>::do_put(int a1, char a2, int a3, int a4, struct tm *a5, char a6, char a7); +const char *std::bad_alloc::what(); +int __fastcall std::ios::exceptions(int a1); +int __fastcall std::ios::bad(int a1); +int __fastcall std::ios::eof(int a1); +int __fastcall std::ios::tie(int a1); +bool __fastcall std::ios::fail(int a1); +int __fastcall std::ios::fill(int a1); +bool __fastcall std::ios::good(int a1); +int __fastcall std::ios::rdbuf(int a1); +int __thiscall std::ios::widen(int *this, int a2); +int __thiscall std::ios::narrow(_DWORD *this, int a2, int a3); +int __fastcall std::ios::rdstate(int a1); +int __fastcall std::ios::operator void *(int a1); +bool __fastcall std::ios::operator bool(int a1); +bool __fastcall std::ios::operator!(int a1); +int __fastcall std::wios::exceptions(int a1); +int __fastcall std::wios::bad(int a1); +int __fastcall std::wios::eof(int a1); +int __fastcall std::wios::tie(int a1); +bool __fastcall std::wios::fail(int a1); +int __fastcall std::wios::fill(int a1); +bool __fastcall std::wios::good(int a1); +int __fastcall std::wios::rdbuf(int a1); +int __thiscall std::wios::widen(_DWORD *this, char a2); +int __thiscall std::wios::narrow(_DWORD *this, unsigned __int16 a2, char a3); +int __fastcall std::wios::rdstate(int a1); +int __fastcall std::wios::operator void *(int a1); +bool __fastcall std::wios::operator bool(int a1); +bool __fastcall std::wios::operator!(int a1); +const char *_ZGTtNKSt9exception4whatEv(); +unsigned __int64 __stdcall std::money_get>::_M_extract(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, int *a6); +unsigned __int64 __stdcall std::money_get>::_M_extract(unsigned __int64 a1, _DWORD *a2, int a3, int a4, _DWORD *a5, int *a6); +int __thiscall std::money_get>::get(void *this, int a2, int a3, int a4, int a5, unsigned __int8 a6); +int __thiscall std::money_get>::get(void *this, int a2, int a3, int a4, int a5, unsigned __int8 a6); +unsigned __int64 __stdcall std::money_get>::do_get(unsigned __int64 a1, _DWORD *a2, int a3, char a4, int a5, _DWORD *a6, int *a7); +unsigned __int64 __stdcall std::money_get>::do_get(unsigned __int64 a1, _DWORD *a2, int a3, char a4, int a5, _DWORD *a6, long double *a7); +__int64 __stdcall std::money_get>::_M_extract(__int64 a1, _DWORD *a2, __int16 a3, int a4, _DWORD *a5, int *a6); +__int64 __stdcall std::money_get>::_M_extract(__int64 a1, _DWORD *a2, __int16 a3, int a4, _DWORD *a5, int *a6); +int __thiscall std::money_get>::get(void *this, int a2, int a3, int a4, int a5, unsigned __int8 a6); +int __thiscall std::money_get>::get(void *this, int a2, int a3, int a4, int a5, unsigned __int8 a6); +struct _Unwind_Exception *__stdcall std::money_get>::do_get(__int64 a1, _DWORD *a2, __int16 a3, char a4, int a5, _DWORD *a6, int *a7); +struct _Unwind_Exception *__stdcall std::money_get>::do_get(__int64 a1, _DWORD *a2, __int16 a3, char a4, int a5, _DWORD *a6, long double *a7); +int __thiscall std::money_put>::put(void *this, __int64 a2, unsigned __int8 a3, int a4, char a5, struct _Unwind_Exception **a6); +int __thiscall std::money_put>::put(void *this, int a2, int a3, unsigned __int8 a4, int a5, char a6); +__int64 __stdcall std::money_put>::do_put(__int64 a1, char a2, int a3, char a4, struct _Unwind_Exception **a5); +__int64 __thiscall std::money_put>::do_put(void *this, __int64 a2, int a3, int a4, int a5, long double a6); +__int64 __stdcall std::money_put>::_M_insert(__int64 a1, int a2, char a3, struct _Unwind_Exception **a4); +__int64 __stdcall std::money_put>::_M_insert(__int64 a1, int a2, char a3, struct _Unwind_Exception **a4); +int __thiscall std::money_put>::put(void *this, __int64 a2, unsigned __int8 a3, int a4, unsigned __int16 a5, char **a6); +int __thiscall std::money_put>::put(void *this, int a2, int a3, unsigned __int8 a4, int a5, unsigned __int16 a6); +__int64 __stdcall std::money_put>::do_put(__int64 a1, char a2, int a3, __int16 a4, char **a5); +__int64 __thiscall std::money_put>::do_put(void *this, __int64 a2, int a3, int a4, int a5, long double a6); +__int64 __stdcall std::money_put>::_M_insert(__int64 a1, int a2, __int16 a3, char **a4); +__int64 __stdcall std::money_put>::_M_insert(__int64 a1, int a2, __int16 a3, char **a4); +// bool __userpurge std::type_info::__do_catch@(std::type_info *a1@, std::type_info *this, const type_info *a3, void **a4, unsigned int a5); +int __stdcall std::type_info::__do_upcast(std::type_info *this, const __cxxabiv1::__class_type_info *a2, void **a3); +int std::type_info::__is_function_p(); +bool __thiscall std::type_info::operator==(_DWORD *this, int a2); +int __cdecl std::wstring::_S_compare(int a1, int a2); +int __thiscall std::wstring::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3); +int __thiscall std::wstring::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3); +int *__fastcall std::wstring::_M_leak_hard(int **a1); +_DWORD *__cdecl std::wstring::_S_construct(unsigned int a1, __int16 a2); +_DWORD *__cdecl std::wstring::_S_construct<__gnu_cxx::__normal_iterator>(_WORD *Src, int a2); +_DWORD *__cdecl std::wstring::_S_construct(_WORD *Src, int a2); +_DWORD *__cdecl std::wstring::_S_construct(_WORD *Src, int a2); +void *std::wstring::_S_empty_rep(); +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size); +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size); +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size); +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size); +void __fastcall std::wstring::shrink_to_fit(int *a1); +int **__thiscall std::wstring::_M_replace_aux(int **this, int a2, int a3, unsigned int a4, __int16 a5); +int **__thiscall std::wstring::_M_replace_safe(int **this, int a2, int a3, _WORD *Src, int a5); +_DWORD *__cdecl std::wstring::_S_construct_aux_2(unsigned int a1, __int16 a2); +char *__thiscall std::wstring::at(int **this, unsigned int a2); +char *__fastcall std::wstring::end(int **a1); +void __thiscall std::wstring::_Rep::_M_destroy(void *Block, int a2); +void __thiscall std::wstring::_Rep::_M_dispose(volatile signed __int32 *Block, int a2); +int __fastcall std::wstring::_Rep::_M_refcopy(int a1); +int __fastcall std::wstring::_Rep::_M_refdata(int a1); +void *std::wstring::_Rep::_S_empty_rep(); +void __fastcall std::wstring::_Rep::_M_set_leaked(int a1); +void __fastcall std::wstring::_Rep::_M_set_sharable(int a1); +int __thiscall std::wstring::_Rep::_M_set_length_and_sharable(_DWORD *this, int a2); +_DWORD *__thiscall std::wstring::_Rep::_M_grab(int this, int a2, int a3); +_DWORD *__thiscall std::wstring::_Rep::_M_clone(int *this, int a2, int a3); +_DWORD *__cdecl std::wstring::_Rep::_S_create(unsigned int a1, unsigned int a2); +char *__fastcall std::wstring::back(int **a1); +int **__thiscall std::wstring::rend(int **this, int **a2); +int __thiscall std::wstring::swap(int *this, int *a2); +int *__fastcall std::wstring::begin(int **a1); +int __fastcall std::wstring::clear(int **a1); +char *__thiscall std::wstring::erase(int **this, int a2); +char *__thiscall std::wstring::erase(int **this, char *a2, int a3); +int **__thiscall std::wstring::erase(int **this, unsigned int a2, unsigned int a3); +int *__fastcall std::wstring::front(int **a1); +int *__thiscall std::wstring::append(int *this, wchar_t *String); +int *__thiscall std::wstring::append(int *this, char *a2, unsigned int a3); +int *__thiscall std::wstring::append(int *this, _DWORD *a2); +int *__thiscall std::wstring::append(int *this, _DWORD *a2, unsigned int a3, unsigned int a4); +int *__thiscall std::wstring::append(int *this, unsigned int a2, __int16 a3); +_DWORD *__thiscall std::wstring::assign(_DWORD *this, int *a2); +int **__thiscall std::wstring::assign(int **this, wchar_t *String); +int **__thiscall std::wstring::assign(int **this, char *Src, unsigned int a3); +int *__thiscall std::wstring::assign(int *this, _DWORD *a2); +int **__thiscall std::wstring::assign(int **this, _DWORD *a2, unsigned int a3, unsigned int a4); +int **__thiscall std::wstring::assign(int **this, unsigned int a2, __int16 a3); +int **__thiscall std::wstring::insert(int **this, int a2, int *a3, unsigned int a4); +int __thiscall std::wstring::insert(int **this, int a2, unsigned int a3, unsigned __int16 a4); +_WORD *__thiscall std::wstring::insert(int **this, int a2, __int16 a3); +int **__thiscall std::wstring::insert(int **this, int a2, wchar_t *String); +int **__thiscall std::wstring::insert(int **this, unsigned int a2, int *Src, unsigned int a4); +int **__thiscall std::wstring::insert(int **this, int a2, int **a3); +int **__thiscall std::wstring::insert(int **this, int a2, _DWORD *a3, unsigned int a4, unsigned int a5); +int **__thiscall std::wstring::insert(int **this, unsigned int a2, unsigned int a3, __int16 a4); +_DWORD *__thiscall std::wstring::rbegin(_DWORD *this, int **a2); +int *__thiscall std::wstring::resize(int *this, unsigned int a2); +int *__thiscall std::wstring::resize(int *this, unsigned int a2, __int16 a3); +int __cdecl std::wstring::_M_copy(_WORD *a1, unsigned __int16 *Src, size_t Size); +int __thiscall std::wstring::_M_data(_DWORD *this, int a2); +int *__fastcall std::wstring::_M_leak(int **a1); +int __cdecl std::wstring::_M_move(_WORD *a1, unsigned __int16 *Src, size_t Size); +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD *a4, int a5); +int **__thiscall std::wstring::replace(int **this, int a2, int a3, wchar_t *String); +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD *a4, int a5); +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD *a4, unsigned int a5); +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD **a4); +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD *a4, int a5); +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD *a4, int a5); +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD *a4, int a5); +int **__thiscall std::wstring::replace(int **this, int a2, int a3, unsigned int a4, __int16 a5); +int **__thiscall std::wstring::replace(int **this, int a2, int a3, wchar_t *String); +int **__thiscall std::wstring::replace(int **this, unsigned int a2, unsigned int a3, _WORD *Src, unsigned int a5); +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD **a4); +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _DWORD *a4, unsigned int a5, unsigned int a6); +int **__thiscall std::wstring::replace(int **this, unsigned int a2, unsigned int a3, unsigned int a4, __int16 a5); +void __thiscall std::wstring::reserve(int *this, unsigned int a2); +int __fastcall std::wstring::pop_back(int **a1); +int __cdecl std::wstring::_M_assign(_WORD *a1, int a2, __int16 a3); +int __thiscall std::wstring::_M_mutate(int **this, int a2, int a3, int a4); +int __thiscall std::wstring::push_back(int *this, __int16 a2); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, int a3); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, wchar_t *String, int a3); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, int a3); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, int *a2, unsigned int a3, unsigned int a4); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, int *a2, unsigned int a3, unsigned int a4, int a5); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, unsigned int a2, __int16 a3, int a4); +_WORD *__fastcall std::wstring::basic_string(_DWORD *a1); +int __thiscall std::wstring::basic_string<__gnu_cxx::__normal_iterator>(_DWORD *this, _WORD *Src, int a3, int a4); +int __thiscall std::wstring::basic_string(_DWORD *this, _WORD *Src, int a3, int a4); +int __thiscall std::wstring::basic_string(_DWORD *this, _WORD *Src, int a3, int a4); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, int a3); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, wchar_t *String, int a3); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, int a3); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, int *a2, unsigned int a3, unsigned int a4); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, int *a2, unsigned int a3, unsigned int a4, int a5); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, unsigned int a2, __int16 a3, int a4); +_WORD *__fastcall std::wstring::basic_string(_DWORD *a1); +int __thiscall std::wstring::basic_string<__gnu_cxx::__normal_iterator>(_DWORD *this, _WORD *Src, int a3, int a4); +int __thiscall std::wstring::basic_string(_DWORD *this, _WORD *Src, int a3, int a4); +int __thiscall std::wstring::basic_string(_DWORD *this, _WORD *Src, int a3, int a4); +void __fastcall std::wstring::~wstring(int *a1); +void __fastcall std::wstring::~wstring(int *a1); +_DWORD *__thiscall std::wstring::operator=(_DWORD *this, int *a2); +int **__thiscall std::wstring::operator=(int **this, wchar_t *String); +int *__thiscall std::wstring::operator=(int *this, _DWORD *a2); +int **__thiscall std::wstring::operator=(int **this, char *a2, int a3); +int **__thiscall std::wstring::operator=(int **this, __int16 a2); +char *__thiscall std::wstring::operator[](int **this, int a2); +int *__thiscall std::wstring::operator+=(int *this, wchar_t *String); +int *__thiscall std::wstring::operator+=(int *this, __int16 a2); +// void __userpurge std::iostream::swap(_DWORD *a1@, std::iostream *this, std::iostream *a3); +void __thiscall std::iostream::iostream(_DWORD *this, int *a2); +void __thiscall std::iostream::iostream(_DWORD *this, int a2); +void __fastcall std::iostream::iostream(int a1); +int __thiscall std::iostream::iostream(int *this, int *a2, _DWORD *a3); +void __thiscall std::iostream::iostream(int *this, int *a2, int a3); +void __thiscall std::iostream::iostream(_DWORD *ecx0, std::iostream *this); +void __fastcall std::iostream::~iostream(_DWORD *a1); +void __fastcall std::iostream::~iostream(int a1); +void __thiscall std::iostream::~iostream(_DWORD *ecx0, std::iostream *this); +_DWORD *__thiscall std::iostream::operator=(_DWORD *this, _DWORD *a2); +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2); +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2); +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2); +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2); +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2); +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2); +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2); +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2); +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2); +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2); +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2); +// std::istream::sentry *__userpurge std::istream::get@(std::istream::sentry *a1@, std::istream *this, char *a3, int a4); +// std::istream::sentry *__userpurge std::istream::get@(std::istream::sentry *a1@, std::istream *this, char *a3, unsigned __int8 a4, char a5); +std::istream::sentry *__thiscall std::istream::get(std::istream::sentry *this, _DWORD *a2); +std::istream::sentry *__thiscall std::istream::get(std::istream::sentry *this, _DWORD *a2, unsigned __int8 a3); +// std::istream::sentry *__userpurge std::istream::get@(std::istream::sentry *a1@, std::istream *this, char *a3); +int __fastcall std::istream::get(std::istream::sentry *a1); +int __fastcall std::istream::peek(std::istream::sentry *a1); +// std::istream::sentry *__userpurge std::istream::read@(std::istream::sentry *a1@, std::istream *this, char *a3, int a4); +// void __userpurge std::istream::swap(_DWORD *a1@, std::istream *this, std::istream *a3); +int __fastcall std::istream::sync(std::istream::sentry *a1); +std::istream::sentry *__thiscall std::istream::seekg(std::istream::sentry *this, int a2, int a3, int a4, int a5); +std::istream::sentry *__thiscall std::istream::seekg(std::istream::sentry *this, int a2, int a3, int a4); +_DWORD *__thiscall std::istream::tellg(_DWORD *ecx0, std::istream *this); +std::istream::sentry *__fastcall std::istream::unget(std::istream::sentry *a1); +// std::istream::sentry *__userpurge std::istream::ignore@(std::istream::sentry *a1@, std::istream *this, int a3); +// std::istream::sentry *__userpurge std::istream::ignore@(std::istream::sentry *a1@, std::istream *this, int a3, int a4); +std::istream::sentry *__fastcall std::istream::ignore(std::istream::sentry *a1); +// void __userpurge std::istream::sentry::sentry(_BYTE *a1@, std::istream::sentry *this, std::istream *a3, bool a4); +// void __userpurge std::istream::sentry::sentry(_BYTE *a1@, std::istream::sentry *this, std::istream *a3, bool a4); +// std::istream::sentry *__userpurge std::istream::getline@(std::istream::sentry *a1@, std::istream *this, char *a3, int a4); +// std::istream::sentry *__userpurge std::istream::getline@(std::istream::sentry *a1@, std::istream *this, char *a3, unsigned __int8 a4, char a5); +// std::istream::sentry *__userpurge std::istream::putback@(std::istream::sentry *a1@, std::istream *this, char a3); +// struct _Unwind_Exception *__userpurge std::istream::readsome@(std::istream::sentry *a1@, std::istream *this, char *a3, int a4); +void __thiscall std::istream::istream(_DWORD *this, int *a2); +void __thiscall std::istream::istream(_DWORD *this, int a2); +void __fastcall std::istream::istream(int a1); +int __thiscall std::istream::istream(int *this, int *a2, _DWORD *a3); +BOOL __thiscall std::istream::istream(int *this, int *a2, int a3); +BOOL __thiscall std::istream::istream(_DWORD *ecx0, std::istream *this); +void __fastcall std::istream::~istream(_DWORD *a1); +void __fastcall std::istream::~istream(_DWORD *a1); +void __thiscall std::istream::~istream(_DWORD *ecx0, std::istream *this); +_DWORD *__thiscall std::istream::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::istream::operator>>(void *this, int (__cdecl *a2)(void *)); +char *__thiscall std::istream::operator>>(char *this, void (__cdecl *a2)(char *)); +char *__thiscall std::istream::operator>>(char *this, void (__cdecl *a2)(char *)); +std::istream::sentry *__thiscall std::istream::operator>>(std::istream::sentry *this, _DWORD *a2); +std::istream::sentry *__thiscall std::istream::operator>>(std::istream::sentry *this, _DWORD *a2); +std::istream::sentry *__thiscall std::istream::operator>>(std::istream::sentry *this, _WORD *a2); +// std::ostream::sentry *__userpurge std::ostream::put@(std::ostream::sentry *a1@, std::ostream *this, char a3); +// void __userpurge std::ostream::swap(_DWORD *a1@, std::ostream *this, std::ostream *a3); +_DWORD *__fastcall std::ostream::flush(_DWORD *a1); +_DWORD *__thiscall std::ostream::seekp(_DWORD *this, int a2, int a3, int a4, int a5); +_DWORD *__thiscall std::ostream::seekp(_DWORD *this, int a2, int a3, int a4); +_DWORD *__thiscall std::ostream::tellp(_DWORD *ecx0, std::ostream *this); +// std::ostream::sentry *__userpurge std::ostream::write@(std::ostream::sentry *a1@, std::ostream *this, const char *a3, int a4); +// int __userpurge std::ostream::sentry::sentry@(int a1@, std::ostream::sentry *this, std::ostream *a3); +// int __userpurge std::ostream::sentry::sentry@(int a1@, std::ostream::sentry *this, std::ostream *a3); +void __fastcall std::ostream::sentry::~sentry(int a1); +void __fastcall std::ostream::sentry::~sentry(int a1); +// const char *__userpurge std::ostream::_M_write@(_DWORD *a1@, std::ostream *this, const char *a3, int a4); +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, int a2); +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, unsigned __int8 a2); +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, double a2); +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, long double a2); +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, int a2); +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, int a2); +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, int a2, int a3); +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, int a2, int a3); +void __thiscall std::ostream::ostream(_DWORD *this, _DWORD *a2); +void __thiscall std::ostream::ostream(_DWORD *this, int a2); +// int __userpurge std::ostream::ostream@(int a1@, std::ostream *this, std::iostream *a3); +void __fastcall std::ostream::ostream(int a1); +int __thiscall std::ostream::ostream(_DWORD *this, _DWORD *a2, _DWORD *a3); +BOOL __thiscall std::ostream::ostream(int *this, int *a2, int a3); +int __thiscall std::ostream::ostream(_DWORD *ecx0, std::ostream *this, std::iostream *a3); +BOOL __thiscall std::ostream::ostream(_DWORD *ecx0, std::ostream *this); +void __fastcall std::ostream::~ostream(_DWORD *a1); +void __fastcall std::ostream::~ostream(_DWORD *a1); +void __thiscall std::ostream::~ostream(_DWORD *ecx0, std::ostream *this); +_DWORD *__thiscall std::ostream::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::ostream::operator<<(void *this, int (__cdecl *a2)(void *)); +char *__thiscall std::ostream::operator<<(char *this, void (__cdecl *a2)(char *)); +char *__thiscall std::ostream::operator<<(char *this, void (__cdecl *a2)(char *)); +std::ostream::sentry *__thiscall std::ostream::operator<<(std::ostream::sentry *this, _DWORD *a2); +std::ostream::sentry *__thiscall std::ostream::operator<<(std::ostream::sentry *this, unsigned __int8 a2); +std::ostream::sentry *__thiscall std::ostream::operator<<(std::ostream::sentry *this, float a2); +_DWORD __stdcall std::ostream::operator<<(_DWORD); // weak +std::ostream::sentry *__thiscall std::ostream::operator<<(std::ostream::sentry *this, unsigned __int16 a2); +std::ostream::sentry *__thiscall std::ostream::operator<<(std::ostream::sentry *this, unsigned __int16 a2); +char *__cdecl std::string::_S_compare(std::string *this, unsigned int a2); +int __thiscall std::string::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3); +int __thiscall std::string::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3); +char *__fastcall std::string::_M_leak_hard(char **a1); +_DWORD *__cdecl std::string::_S_construct(size_t Size, char a2); +int __cdecl std::string::_S_construct<__gnu_cxx::__normal_iterator>(_BYTE *Src, int a2); +int __cdecl std::string::_S_construct(_BYTE *Src, int a2); +int __cdecl std::string::_S_construct(_BYTE *Src, int a2); +void *std::string::_S_empty_rep(); +int __cdecl std::string::_S_copy_chars(_BYTE *a1, unsigned __int8 *Src, size_t Size); +int __cdecl std::string::_S_copy_chars(_BYTE *a1, unsigned __int8 *Src, size_t Size); +size_t __cdecl std::string::_S_copy_chars(std::string *this, char *Src, size_t Size); +size_t __cdecl std::string::_S_copy_chars(std::string *this, char *Src, size_t Size); +void __fastcall std::string::shrink_to_fit(int *a1); +// char **__userpurge std::string::_M_replace_aux@(char **a1@, std::string *this, unsigned int a3, size_t Size, char a5, char a6); +// char **__userpurge std::string::_M_replace_safe@(char **a1@, std::string *this, unsigned int a3, _BYTE *Src, size_t Size, unsigned int a6); +_DWORD *__cdecl std::string::_S_construct_aux_2(size_t Size, char a2); +// char *__userpurge std::string::at@(char **a1@, unsigned int this, unsigned int a3); +char *__fastcall std::string::end(char **a1); +void __thiscall std::string::_Rep::_M_destroy(void *Block, int a2); +void __thiscall std::string::_Rep::_M_dispose(volatile signed __int32 *Block, int a2); +int __fastcall std::string::_Rep::_M_refcopy(int a1); +int __fastcall std::string::_Rep::_M_refdata(int a1); +void *std::string::_Rep::_S_empty_rep(); +void __fastcall std::string::_Rep::_M_set_leaked(int a1); +void __fastcall std::string::_Rep::_M_set_sharable(int a1); +// std::string::_Rep *__userpurge std::string::_Rep::_M_set_length_and_sharable@(_DWORD *a1@, std::string::_Rep *this, unsigned int a3); +volatile signed __int32 *__thiscall std::string::_Rep::_M_grab(volatile signed __int32 *this, int a2, int a3); +_DWORD *__thiscall std::string::_Rep::_M_clone(int this, int a2, int a3); +_DWORD *__cdecl std::string::_Rep::_S_create(unsigned int a1, unsigned int a2); +char *__fastcall std::string::back(char **a1); +char **__thiscall std::string::rend(char **ecx0, char **this); +// int __userpurge std::string::swap@(int *a1@, std::string *this, std::string *a3); +char *__fastcall std::string::begin(char **a1); +void __fastcall std::string::clear(char **a1); +char *__thiscall std::string::erase(char **this, int a2); +char *__thiscall std::string::erase(char **this, char *a2, char *a3); +// char **__userpurge std::string::erase@(char **a1@, std::string *this, unsigned int a3, unsigned int a4); +char *__fastcall std::string::front(char **a1); +// int *__userpurge std::string::append@(int *a1@, std::string *this, const char *a3); +// int *__userpurge std::string::append@(int *a1@, std::string *this, size_t Size, unsigned int a4); +// int *__userpurge std::string::append@(int *a1@, std::string *this, const std::string *a3); +// int *__userpurge std::string::append@(int *a1@, std::string *this, const std::string *a3, size_t a4, unsigned int a5); +// int *__userpurge std::string::append@(int *a1@, size_t this, char a3, char a4); +_DWORD *__thiscall std::string::assign(_DWORD *this, int *a2); +// char **__userpurge std::string::assign@(char **a1@, std::string *this, const char *a3); +// char **__userpurge std::string::assign@(char **a1@, std::string *this, size_t Size, unsigned int a4); +// int *__userpurge std::string::assign@(int *a1@, std::string *this, const std::string *a3); +// char **__userpurge std::string::assign@(char **a1@, std::string *this, const std::string *a3, size_t a4, unsigned int a5); +// char **__userpurge std::string::assign@(char **a1@, size_t this, char a3, char a4); +// char **__userpurge std::string::insert@(char **a1@, std::string *a2, char *a3, size_t a4, unsigned int a5); +char *__thiscall std::string::insert(char **this, int a2, char a3); +void __thiscall std::string::insert(char **this, int a2, size_t Size, char a4); +// char **__userpurge std::string::insert@(char **a1@, std::string *this, char *Str, const char *a4); +// char **__userpurge std::string::insert@(char **a1@, unsigned int this, char *Src, size_t Size, unsigned int a5); +// char **__userpurge std::string::insert@(char **a1@, std::string *this, char **a3, const std::string *a4); +// char **__userpurge std::string::insert@(char **a1@, std::string *this, _DWORD *a3, const std::string *a4, size_t a5, unsigned int a6); +// char **__userpurge std::string::insert@(char **a1@, std::string *this, size_t Size, char a4, char a5); +_DWORD *__thiscall std::string::rbegin(_DWORD *ecx0, char **this); +// void __userpurge std::string::resize(int *a1@, std::string *this, unsigned int a3); +// void __userpurge std::string::resize(int *a1@, size_t this, char a3, char a4); +size_t __cdecl std::string::_M_copy(std::string *this, char *Src, size_t Size); +// std::string *__userpurge std::string::_M_data@(_DWORD *a1@, std::string *this, char *a3); +char *__fastcall std::string::_M_leak(char **a1); +size_t __cdecl std::string::_M_move(std::string *this, char *Src, size_t Size); +// char **__userpurge std::string::replace@(char **a1@, std::string *a2, int a3, char *a4, int a5, unsigned int a6); +char **__thiscall std::string::replace(char **this, int a2, int a3, char *Str); +// char **__userpurge std::string::replace@(char **a1@, std::string *a2, int a3, char *a4, int a5, unsigned int a6); +// char **__userpurge std::string::replace@(char **a1@, std::string *a2, int a3, char *a4, size_t a5, unsigned int a6); +char **__thiscall std::string::replace(char **this, int a2, int a3, char **a4); +// char **__userpurge std::string::replace@(char **a1@, std::string *a2, int a3, char *a4, int a5, unsigned int a6); +// char **__userpurge std::string::replace@(char **a1@, std::string *a2, int a3, char *a4, int a5, unsigned int a6); +// char **__userpurge std::string::replace@(char **a1@, std::string *a2, int a3, char *a4, size_t a5, unsigned int a6); +char **__thiscall std::string::replace(char **this, int a2, int a3, size_t Size, char a5); +// char **__userpurge std::string::replace@(char **a1@, std::string *this, unsigned int a3, char *Str, const char *a5); +// char **__userpurge std::string::replace@(char **a1@, unsigned int this, unsigned int a3, char *Src, size_t Size, unsigned int a6); +// char **__userpurge std::string::replace@(char **a1@, std::string *this, unsigned int a3, char **a4, const std::string *a5); +// char **__userpurge std::string::replace@(char **a1@, std::string *this, unsigned int a3, _DWORD *a4, const std::string *a5, size_t a6, unsigned int a7); +// char **__userpurge std::string::replace@(char **a1@, std::string *this, unsigned int a3, size_t a4, char a5, char a6); +// void __userpurge std::string::reserve(int *a1@, std::string *this, unsigned int a3); +void __fastcall std::string::pop_back(char **a1); +char *__cdecl std::string::_M_assign(std::string *this, char *Val, size_t Size); +// void __userpurge std::string::_M_mutate(char **a1@, size_t this, unsigned int a3, unsigned int a4, unsigned int a5); +// int __userpurge std::string::push_back@(int *a1@, std::string *this, char a3); +_BYTE *__thiscall std::string::string(_DWORD *this, _DWORD *a2); +_BYTE *__thiscall std::string::string(_DWORD *this, _DWORD *a2, int a3); +int __thiscall std::string::string(_DWORD *this, char *Str, int a3); +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, size_t Size, int a4); +_BYTE *__thiscall std::string::string(_DWORD *this, int a2); +// _DWORD *__userpurge std::string::string@(_DWORD *a1@, std::string *this, const std::string *a3); +_DWORD *__thiscall std::string::string(_DWORD *this, _DWORD *a2, int a3); +int __thiscall std::string::string(int *this, _DWORD *a2, unsigned int a3, int a4); +// int __userpurge std::string::string@(int *a1@, std::string *this, const std::string *a3, unsigned int a4, unsigned int a5); +int __thiscall std::string::string(int *this, int *a2, unsigned int a3, unsigned int a4, int a5); +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, size_t Size, int a4); +char *__thiscall std::string::string(_DWORD *this, size_t Size, char *a3, int a4); +_BYTE *__fastcall std::string::string(_DWORD *a1); +int __thiscall std::string::string<__gnu_cxx::__normal_iterator>(_DWORD *this, unsigned __int8 *Src, int a3, int a4); +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, int a3, int a4); +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, int a3, int a4); +_BYTE *__thiscall std::string::string(_DWORD *this, _DWORD *a2); +_BYTE *__thiscall std::string::string(_DWORD *this, _DWORD *a2, int a3); +int __thiscall std::string::string(_DWORD *this, char *Str, int a3); +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, size_t Size, int a4); +_BYTE *__thiscall std::string::string(_DWORD *this, int a2); +// _DWORD *__userpurge std::string::string@(_DWORD *a1@, std::string *this, const std::string *a3); +_DWORD *__thiscall std::string::string(_DWORD *this, _DWORD *a2, int a3); +int __thiscall std::string::string(int *this, _DWORD *a2, unsigned int a3, int a4); +// int __userpurge std::string::string@(int *a1@, std::string *this, const std::string *a3, unsigned int a4, unsigned int a5); +int __thiscall std::string::string(int *this, int *a2, unsigned int a3, unsigned int a4, int a5); +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, size_t Size, int a4); +char *__thiscall std::string::string(_DWORD *this, size_t Size, char *a3, int a4); +_BYTE *__fastcall std::string::string(_DWORD *a1); +int __thiscall std::string::string<__gnu_cxx::__normal_iterator>(_DWORD *this, unsigned __int8 *Src, int a3, int a4); +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, int a3, int a4); +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, int a3, int a4); +void __fastcall std::string::~string(int *a1); +void __fastcall std::string::~string(int *a1); +_DWORD *__thiscall std::string::operator=(_DWORD *this, int *a2); +char **__thiscall std::string::operator=(char **this, std::string *Str); +int *__thiscall std::string::operator=(int *this, _DWORD *a2); +char **__thiscall std::string::operator=(char **this, std::string *a2, size_t a3); +char **__thiscall std::string::operator=(char **this, char a2); +char *__thiscall std::string::operator[](char **this, int a2); +int *__thiscall std::string::operator+=(int *this, std::string *Str); +int *__thiscall std::string::operator+=(int *this, char a2); +int __cdecl std::__num_base::_S_format_float(std::__num_base *this, const std::ios_base *a2, char *a3); +void __fastcall std::bad_typeid::~bad_typeid(_DWORD *a1); +void __cdecl std::bad_typeid::~bad_typeid(std::exception *a1); +int __cdecl std::money_base::_S_construct_pattern(); +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +_DWORD *__thiscall std::__timepunct::_M_initialize_timepunct(_DWORD *this, int a2); +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, int a3); +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, char *Str1, int a4); +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2); +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, int a3); +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, char *Str1, int a4); +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2); +void __fastcall std::__timepunct::~__timepunct(_DWORD *Block); +void __fastcall std::__timepunct::~__timepunct(_DWORD *a1); +void __fastcall std::__timepunct::~__timepunct(_DWORD *a1); +_DWORD *__thiscall std::__timepunct::_M_initialize_timepunct(_DWORD *this, int a2); +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, int a3); +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, char *Str1, int a4); +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2); +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, int a3); +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, char *Str1, int a4); +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2); +void __fastcall std::__timepunct::~__timepunct(_DWORD *Block); +void __fastcall std::__timepunct::~__timepunct(_DWORD *a1); +void __fastcall std::__timepunct::~__timepunct(_DWORD *a1); +// void __userpurge std::logic_error::logic_error(_DWORD *a1@, std::logic_error *this, const char *a3); +void __thiscall std::logic_error::logic_error(_DWORD *this, int a2); +// void __userpurge std::logic_error::logic_error(_DWORD *a1@, std::logic_error *this, const std::logic_error *a3); +// void __userpurge std::logic_error::logic_error(_DWORD *a1@, std::logic_error *this, const std::string *a3); +void __fastcall std::logic_error::~logic_error(void *a1); +void __cdecl std::logic_error::~logic_error(std::exception *a1); +int *__thiscall std::logic_error::operator=(int *this, int a2); +int *__thiscall std::logic_error::operator=(int *this, int a2); +// void __userpurge std::range_error::range_error(_DWORD *a1@, std::range_error *this, const char *a3); +void __thiscall std::range_error::range_error(_DWORD *this, int a2); +// void __userpurge std::range_error::range_error(_DWORD *a1@, std::range_error *this, const std::string *a3); +void __fastcall std::range_error::~range_error(_DWORD *a1); +void __cdecl std::range_error::~range_error(std::exception *a1); +// int __usercall std::_Destroy_aux::__destroy *>@(int a1@, int a2, int a3); +// int __usercall std::_Destroy_aux::__destroy *>@(int a1@, int a2, int a3); +// int __usercall std::_Destroy_aux::__destroy *>@(int a1@, int a2, int a3); +void __cdecl std::_Destroy_aux::__destroy(void **a1, char **a2); +// int __usercall std::_Destroy_aux::__destroy@(int a1@, void **a2, void **a3); +// int __usercall std::_Destroy_aux::__destroy@(int a1@, void **a2, void **a3); +// unsigned __int8 *__usercall std::`anonymous namespace'::utf16_span@(unsigned __int8 *a1@, unsigned __int8 *a2@, unsigned int a3@, unsigned int a4, char a5); +int __cdecl std::`anonymous namespace'::__x86_rdrand(); +int __cdecl std::`anonymous namespace'::__x86_rdseed(std::_anonymous_namespace_ *this); +int __cdecl std::`anonymous namespace'::__winxp_rand_s(); +// int __usercall std::`anonymous namespace'::read_utf16_bom@(int a1@, int *a2@); +int __cdecl std::`anonymous namespace'::__x86_rdseed_rdrand(); +// int __usercall std::`anonymous namespace'::read_utf8_code_point@(unsigned __int8 **a1@, unsigned int a2@); +// int __usercall std::`anonymous namespace'::read_utf8_code_point@(unsigned __int8 **a1@, unsigned int a2@); +// int __usercall std::`anonymous namespace'::write_utf8_code_point@(int a1@, unsigned int a2@); +// int __usercall std::`anonymous namespace'::write_utf8_code_point@(_BYTE **a1@, unsigned int a2@); +// int __usercall std::`anonymous namespace'::ucs2_in@(unsigned __int16 **a1@, int *a2@, unsigned int a3@, char a4); +// int __usercall std::`anonymous namespace'::ucs2_out@(unsigned __int16 **a1@, _DWORD *a2@, unsigned int a3@, char a4); +// int __usercall std::`anonymous namespace'::utf16_in@(unsigned __int8 **a1@, char **a2@, unsigned int a3@, char a4, int a5); +// int __usercall std::`anonymous namespace'::utf16_out@(unsigned __int16 **a1@, _BYTE **a2@, unsigned int a3@, int a4); +void __fastcall std::_Vector_base::~_Vector_base(void **a1); +int __fastcall std::__basic_file::fd(FILE **a1); +int __fastcall std::__basic_file::file(int a1); +_BYTE *__thiscall std::__basic_file::open(_BYTE *this, char *FileName, char a3, int a4); +FILE *__thiscall std::__basic_file::open(_BYTE *this, wchar_t *FileName, char a3); +int __fastcall std::__basic_file::sync(FILE **a1); +int __fastcall std::__basic_file::close(int a1); +int __thiscall std::__basic_file::xsgetn(FILE **this, void *DstBuf, unsigned int MaxCharCount); +unsigned int __thiscall std::__basic_file::xsputn(FILE **this, char *a2, unsigned int a3); +__int64 __thiscall std::__basic_file::seekoff(FILE **this, __int64 a2, int a3); +void __cdecl __noreturn sub_4D7B75(int, int, int, int, int, int, int, int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int); // idb +_BYTE *__thiscall std::__basic_file::sys_open(_BYTE *this, FILE *Stream, int a3); +FILE **__thiscall std::__basic_file::sys_open(FILE **this, int FileHandle, char a3); +int __thiscall std::__basic_file::xsputn_2(FILE **this, char *a2, unsigned int a3, char *a4, unsigned int a5); +int __fastcall std::__basic_file::showmanyc(FILE **a1); +void __thiscall std::__basic_file::__basic_file(_BYTE *this, int a2); +FILE *__fastcall std::__basic_file::~__basic_file(int a1); +void __thiscall std::__cow_string::__cow_string(_DWORD *this, _DWORD *a2); +// int __userpurge std::__cow_string::__cow_string@(_DWORD *a1@, std::__cow_string *this, size_t a3, unsigned int a4); +int __thiscall std::__cow_string::__cow_string(_DWORD *this, int a2); +// void __userpurge std::__cow_string::__cow_string(_DWORD *a1@, std::__cow_string *this, const std::__cow_string *a3); +_DWORD *__fastcall std::__cow_string::__cow_string(_DWORD *a1); +void __fastcall std::__cow_string::~__cow_string(int *a1); +int *__thiscall std::__cow_string::operator=(int *this, std::string *a2); +int *__thiscall std::__cow_string::operator=(int *this, std::string *a2); +void __thiscall std::__shared_ptr::__shared_ptr(_DWORD *this, _DWORD *a2); +void __thiscall std::__shared_ptr::__shared_ptr(int *this, int *a2); +int __thiscall std::__shared_ptr::__shared_ptr(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::__sso_string::__sso_string(_DWORD *this, _DWORD *a2); +// _BYTE *__userpurge std::__sso_string::__sso_string@(int a1@, std::__sso_string *this, size_t Size, unsigned int a4); +_BYTE *__thiscall std::__sso_string::__sso_string(char *this, int a2); +// void __userpurge std::__sso_string::__sso_string(_DWORD *a1@, std::__sso_string *this, const std::__sso_string *a3); +// _BYTE *__userpurge std::__sso_string::__sso_string@(int a1@, std::__sso_string **this, const std::string *a3); +int __fastcall std::__sso_string::__sso_string(int a1); +void __fastcall std::__sso_string::~__sso_string(void **a1); +_DWORD *__thiscall std::__sso_string::operator=(_DWORD *this, int a2); +void *__thiscall std::__sso_string::operator=(void *this, int a2); +void __thiscall std::ctype_byname::ctype_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::ctype_byname::ctype_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::ctype_byname::ctype_byname(_DWORD *this, int ***a2, int a3); +void __fastcall std::ctype_byname::~ctype_byname(_DWORD *Block); +void __fastcall std::ctype_byname::~ctype_byname(int a1); +void __thiscall std::ctype_byname::ctype_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::ctype_byname::ctype_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::ctype_byname::ctype_byname(_DWORD *this, int ***a2, int a3); +void __fastcall std::ctype_byname::~ctype_byname(_DWORD *Block); +void __fastcall std::ctype_byname::~ctype_byname(_DWORD *a1); +// void __userpurge std::domain_error::domain_error(_DWORD *a1@, std::domain_error *this, const char *a3); +void __thiscall std::domain_error::domain_error(_DWORD *this, int a2); +// void __userpurge std::domain_error::domain_error(_DWORD *a1@, std::domain_error *this, const std::string *a3); +void __fastcall std::domain_error::~domain_error(_DWORD *a1); +void __cdecl std::domain_error::~domain_error(std::exception *a1); +// void __userpurge std::length_error::length_error(_DWORD *a1@, std::length_error *this, const char *a3); +void __thiscall std::length_error::length_error(_DWORD *this, int a2); +// void __userpurge std::length_error::length_error(_DWORD *a1@, std::length_error *this, const std::string *a3); +void __fastcall std::length_error::~length_error(_DWORD *a1); +void __cdecl std::length_error::~length_error(std::exception *a1); +// void __userpurge std::out_of_range::out_of_range(_DWORD *a1@, std::out_of_range *this, const char *a3); +void __thiscall std::out_of_range::out_of_range(_DWORD *this, int a2); +// void __userpurge std::out_of_range::out_of_range(_DWORD *a1@, std::out_of_range *this, const std::string *a3); +void __fastcall std::out_of_range::~out_of_range(_DWORD *a1); +void __cdecl std::out_of_range::~out_of_range(std::exception *a1); +void __thiscall std::system_error::system_error(_DWORD *this, int a2, int a3, char *Str); +void __thiscall std::system_error::system_error(_DWORD *this, int a2, int a3, int a4); +void __fastcall std::system_error::~system_error(_DWORD *a1); +void __cdecl std::system_error::~system_error(std::exception *a1); +int __cdecl std::__facet_shims::__time_get(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10); +int __cdecl std::__facet_shims::__time_get(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10); +int __cdecl std::__facet_shims::__time_get(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10); +int __cdecl std::__facet_shims::__time_get(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10); +__int64 __cdecl std::__facet_shims::__money_get(int a1, int a2, __int64 a3, int a4, int a5, unsigned __int8 a6, int a7, _DWORD *a8, int a9, _DWORD *a10); +__int64 __cdecl std::__facet_shims::__money_get(int a1, int *a2, __int64 a3, int a4, int a5, unsigned __int8 a6, int a7, _DWORD *a8, int a9, _DWORD *a10); +struct _Unwind_Exception *__cdecl std::__facet_shims::__money_get(int a1, int a2, int a3, int a4, int a5, int a6, unsigned __int8 a7, int a8, _DWORD *a9, int a10, _DWORD *a11); +struct _Unwind_Exception *__cdecl std::__facet_shims::__money_get(int a1, int *a2, int a3, int a4, int a5, int a6, unsigned __int8 a7, int a8, _DWORD *a9, int a10, _DWORD *a11); +__int64 __cdecl std::__facet_shims::__money_put(int a1, int a2, int a3, int a4, unsigned __int8 a5, int a6, char a7, long double a8, int a9); +__int64 __cdecl std::__facet_shims::__money_put(int a1, int a2, int a3, int a4, unsigned __int8 a5, int a6, char a7, long double a8, int a9); +__int64 __cdecl std::__facet_shims::__money_put(int a1, int a2, int a3, int a4, unsigned __int8 a5, int a6, unsigned __int16 a7, long double a8, int a9); +__int64 __cdecl std::__facet_shims::__money_put(int a1, int a2, int a3, int a4, unsigned __int8 a5, int a6, unsigned __int16 a7, long double a8, int a9); +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(_DWORD *Block); +void __cdecl std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(std::locale::facet *a1); +void __cdecl std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(std::locale::facet *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(_DWORD *Block); +void __cdecl std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(std::locale::facet *a1); +void __cdecl std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(std::locale::facet *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(_DWORD *Block); +void __cdecl std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(std::locale::facet *a1); +void __cdecl std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(std::locale::facet *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(_DWORD *Block); +void __cdecl std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(std::locale::facet *a1); +void __cdecl std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(std::locale::facet *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(_DWORD *Block); +void __cdecl std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(std::locale::facet *a1); +void __cdecl std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(std::locale::facet *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(_DWORD *Block); +void __cdecl std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(std::locale::facet *a1); +void __cdecl std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(std::locale::facet *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *Block); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1); +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1); +void __cdecl std::__facet_shims::`anonymous namespace'::__destroy_string(int *a1); +void __cdecl std::__facet_shims::`anonymous namespace'::__destroy_string(void **Block); +void __cdecl std::__facet_shims::`anonymous namespace'::__destroy_string(int *a1); +void __cdecl std::__facet_shims::`anonymous namespace'::__destroy_string(void **Block); +void __cdecl std::__facet_shims::__messages_get(int a1, int a2, _DWORD *a3, std::string *a4, int a5, int a6, unsigned __int8 *a7, size_t a8); +void __cdecl std::__facet_shims::__messages_get(int a1, int a2, _DWORD *a3, int a4, int a5, int a6, _BYTE *a7, int a8); +void __cdecl std::__facet_shims::__messages_get(int a1, int a2, _DWORD *a3, int a4, int a5, int a6, _WORD *a7, int a8); +void __cdecl std::__facet_shims::__messages_get(int a1, int a2, _DWORD *a3, int a4, int a5, int a6, _WORD *a7, int a8); +struct _Unwind_Exception *__cdecl std::__facet_shims::__messages_open(int a1, int a2, unsigned __int8 *a3, size_t a4, int a5); +struct _Unwind_Exception *__cdecl std::__facet_shims::__messages_open(int a1, int a2, _BYTE *a3, int a4, int a5); +struct _Unwind_Exception *__cdecl std::__facet_shims::__messages_open(int a1, int a2, unsigned __int8 *a3, size_t a4, int a5); +struct _Unwind_Exception *__cdecl std::__facet_shims::__messages_open(int a1, int a2, _BYTE *a3, int a4, int a5); +int __cdecl std::__facet_shims::__messages_close(int a1, int a2, int a3); +int __cdecl std::__facet_shims::__messages_close(int a1, int a2, int a3); +int __cdecl std::__facet_shims::__messages_close(int a1, int a2, int a3); +int __cdecl std::__facet_shims::__messages_close(int a1, int a2, int a3); +int __cdecl std::__facet_shims::__collate_compare(int a1, int a2, int a3, int a4, int a5, int a6); +int __cdecl std::__facet_shims::__collate_compare(int a1, int a2, int a3, int a4, int a5, int a6); +int __cdecl std::__facet_shims::__collate_compare(int a1, int a2, int a3, int a4, int a5, int a6); +int __cdecl std::__facet_shims::__collate_compare(int a1, int a2, int a3, int a4, int a5, int a6); +void __cdecl std::__facet_shims::__collate_transform(int a1, int a2, _DWORD *a3, std::string *a4, int a5); +void __cdecl std::__facet_shims::__collate_transform(int a1, int a2, _DWORD *a3, int a4, int a5); +void __cdecl std::__facet_shims::__collate_transform(int a1, int a2, _DWORD *a3, int a4, int a5); +void __cdecl std::__facet_shims::__collate_transform(int a1, int a2, _DWORD *a3, int a4, int a5); +int __cdecl std::__facet_shims::__time_get_dateorder(int a1, int a2); +int __cdecl std::__facet_shims::__time_get_dateorder(int a1, int a2); +int __cdecl std::__facet_shims::__time_get_dateorder(int a1, int a2); +int __cdecl std::__facet_shims::__time_get_dateorder(int a1, int a2); +void __cdecl std::__facet_shims::__numpunct_fill_cache(int a1, int *a2, int a3); +void __cdecl std::__facet_shims::__numpunct_fill_cache(int a1, int *a2, int a3); +void __cdecl std::__facet_shims::__numpunct_fill_cache(int a1, int *a2, int a3); +void __cdecl std::__facet_shims::__numpunct_fill_cache(int a1, int *a2, int a3); +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3); +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3); +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3); +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3); +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3); +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3); +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3); +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3); +// void __userpurge std::__ios_failure::__ios_failure(_DWORD *a1@, std::__ios_failure *this, int a3, int a4); +void __fastcall std::__ios_failure::~__ios_failure(_DWORD *a1); +void __fastcall std::__ios_failure::~__ios_failure(_DWORD *a1); +void __fastcall std::bad_exception::~bad_exception(void *Block); +void __cdecl std::bad_exception::~bad_exception(void *); // idb +unsigned int __thiscall std::filebuf::_M_set_buffer(_DWORD *this, int a2); +int __thiscall std::filebuf::_M_get_ext_pos(int this, int a2); +int __fastcall std::filebuf::_M_create_pback(int a1); +int __fastcall std::filebuf::_M_destroy_pback(int a1); +int __fastcall std::filebuf::_M_terminate_output(int a1); +bool __thiscall std::filebuf::_M_convert_to_external(int this, char *a2, unsigned int a3); +void __fastcall std::filebuf::_M_destroy_internal_buffer(int a1); +void __fastcall std::filebuf::_M_allocate_internal_buffer(int a1); +_DWORD *__thiscall std::filebuf::open(_DWORD *this, char *a2, int a3); +_DWORD *__thiscall std::filebuf::open(_DWORD *this, wchar_t *a2, int a3); +_DWORD *__thiscall std::filebuf::open(_DWORD *this, char *a2, int a3); +int __thiscall std::filebuf::swap(int this, int a2); +int __fastcall std::filebuf::sync(_DWORD *a1); +struct _Unwind_Exception *__fastcall std::filebuf::close(struct _Unwind_Exception *a1); +char __thiscall std::filebuf::imbue(void *this, int a2); +int __thiscall std::filebuf::setbuf(int this, __int64 a2); +int __thiscall std::filebuf::xsgetn(_DWORD *this, char *a2, signed int a3); +int __thiscall std::filebuf::xsputn(int this, unsigned __int8 *a2, signed int a3); +_DWORD *__thiscall std::filebuf::_M_seek(_DWORD *this, int a2, __int64 a3, int a4, int a5); +_DWORD *__thiscall std::filebuf::seekoff(_DWORD *this, int a2, __int64 a3, int a4, int a5); +_DWORD *__thiscall std::filebuf::seekpos(_DWORD *this, int a2, __int64 a3, int a4, int a5, int a6); +int __thiscall std::filebuf::overflow(int this, int a2); +int __thiscall std::filebuf::pbackfail(char *this, int a2); +int __fastcall std::filebuf::showmanyc(_DWORD *a1); +int __fastcall std::filebuf::underflow(int a1); +int __thiscall std::filebuf::basic_filebuf(int this, std::locale *a2); +void __fastcall std::filebuf::basic_filebuf(int a1); +int __thiscall std::filebuf::basic_filebuf(int this, std::locale *a2); +void __fastcall std::filebuf::basic_filebuf(int a1); +void __fastcall std::filebuf::~filebuf(struct _Unwind_Exception *a1); +void __fastcall std::filebuf::~filebuf(struct _Unwind_Exception *a1); +void __fastcall std::filebuf::~filebuf(struct _Unwind_Exception *a1); +int __thiscall std::filebuf::operator=(int this, int a2); +unsigned int __thiscall std::wfilebuf::_M_set_buffer(_DWORD *this, int a2); +int __thiscall std::wfilebuf::_M_get_ext_pos(int this, int a2); +int __fastcall std::wfilebuf::_M_create_pback(int a1); +int __fastcall std::wfilebuf::_M_destroy_pback(int a1); +int __fastcall std::wfilebuf::_M_terminate_output(int a1); +bool __thiscall std::wfilebuf::_M_convert_to_external(int this, char *a2, unsigned int a3); +void __fastcall std::wfilebuf::_M_destroy_internal_buffer(int a1); +void __fastcall std::wfilebuf::_M_allocate_internal_buffer(int a1); +_DWORD *__thiscall std::wfilebuf::open(_DWORD *this, char *a2, int a3); +_DWORD *__thiscall std::wfilebuf::open(_DWORD *this, wchar_t *a2, int a3); +_DWORD *__thiscall std::wfilebuf::open(_DWORD *this, char *a2, int a3); +int __thiscall std::wfilebuf::swap(int this, int a2); +int __fastcall std::wfilebuf::sync(_DWORD *a1); +struct _Unwind_Exception *__fastcall std::wfilebuf::close(struct _Unwind_Exception *a1); +char __thiscall std::wfilebuf::imbue(void *this, int a2); +int __thiscall std::wfilebuf::setbuf(int this, __int64 a2); +int __thiscall std::wfilebuf::xsgetn(_DWORD *this, char *a2, signed int a3); +int __thiscall std::wfilebuf::xsputn(int this, char *a2, signed int a3); +_DWORD *__thiscall std::wfilebuf::_M_seek(_DWORD *this, int a2, __int64 a3, int a4, int a5); +_DWORD *__thiscall std::wfilebuf::seekoff(_DWORD *this, int a2, __int64 a3, int a4, int a5); +_DWORD *__thiscall std::wfilebuf::seekpos(_DWORD *this, int a2, __int64 a3, int a4, int a5, int a6); +int __thiscall std::wfilebuf::overflow(int this, int a2); +int __thiscall std::wfilebuf::pbackfail(char *this, int a2); +int __fastcall std::wfilebuf::showmanyc(_DWORD *a1); +int __fastcall std::wfilebuf::underflow(int a1); +int __thiscall std::wfilebuf::basic_filebuf(int this, std::locale *a2); +void __fastcall std::wfilebuf::basic_filebuf(int a1); +int __thiscall std::wfilebuf::basic_filebuf(int this, std::locale *a2); +void __fastcall std::wfilebuf::basic_filebuf(int a1); +void __fastcall std::wfilebuf::~wfilebuf(struct _Unwind_Exception *a1); +void __fastcall std::wfilebuf::~wfilebuf(struct _Unwind_Exception *a1); +void __fastcall std::wfilebuf::~wfilebuf(struct _Unwind_Exception *a1); +int __thiscall std::wfilebuf::operator=(int this, int a2); +int __thiscall std::fstream::open(int *this, char *a2, int a3); +int __thiscall std::fstream::open(int *this, wchar_t *a2, int a3); +int __thiscall std::fstream::open(int *this, char **a2, int a3); +void __thiscall std::fstream::swap(_DWORD *this, _DWORD *a2); +struct _Unwind_Exception *__fastcall std::fstream::close(_DWORD *a1); +bool __fastcall std::fstream::is_open(int a1); +void __thiscall std::fstream::basic_fstream(_DWORD *this, int *a2); +void __thiscall std::fstream::basic_fstream(_DWORD *this, char *a2, int a3); +void __thiscall std::fstream::basic_fstream(_DWORD *this, wchar_t *a2, int a3); +void __thiscall std::fstream::basic_fstream(_DWORD *this, char **a2, int a3); +void __fastcall std::fstream::basic_fstream(int a1); +void __thiscall std::fstream::basic_fstream(int *this, int *a2, _DWORD *a3); +void __thiscall std::fstream::basic_fstream(int *this, int *a2, char *a3, int a4); +void __thiscall std::fstream::basic_fstream(int *this, int *a2, wchar_t *a3, int a4); +void __thiscall std::fstream::basic_fstream(int *this, int *a2, char **a3, int a4); +void __thiscall std::fstream::basic_fstream(int *this, int *a2); +void __fastcall std::fstream::~fstream(_DWORD *a1); +void __fastcall std::fstream::~fstream(int a1); +void __thiscall std::fstream::~fstream(int *this, int *a2); +_DWORD *__thiscall std::fstream::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::wfstream::open(int *this, char *a2, int a3); +int __thiscall std::wfstream::open(int *this, wchar_t *a2, int a3); +int __thiscall std::wfstream::open(int *this, char **a2, int a3); +void __thiscall std::wfstream::swap(_DWORD *this, _DWORD *a2); +struct _Unwind_Exception *__fastcall std::wfstream::close(_DWORD *a1); +bool __fastcall std::wfstream::is_open(int a1); +void __thiscall std::wfstream::basic_fstream(_DWORD *this, int *a2); +void __thiscall std::wfstream::basic_fstream(_DWORD *this, char *a2, int a3); +void __thiscall std::wfstream::basic_fstream(_DWORD *this, wchar_t *a2, int a3); +void __thiscall std::wfstream::basic_fstream(_DWORD *this, char **a2, int a3); +void __fastcall std::wfstream::basic_fstream(int a1); +void __thiscall std::wfstream::basic_fstream(int *this, int *a2, _DWORD *a3); +void __thiscall std::wfstream::basic_fstream(int *this, int *a2, char *a3, int a4); +void __thiscall std::wfstream::basic_fstream(int *this, int *a2, wchar_t *a3, int a4); +void __thiscall std::wfstream::basic_fstream(int *this, int *a2, char **a3, int a4); +void __thiscall std::wfstream::basic_fstream(int *this, int *a2); +void __fastcall std::wfstream::~wfstream(_DWORD *a1); +void __fastcall std::wfstream::~wfstream(int a1); +void __thiscall std::wfstream::~wfstream(int *this, int *a2); +_DWORD *__thiscall std::wfstream::operator=(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2); +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2); +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2); +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2); +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2); +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2); +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2); +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2); +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2); +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2); +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2); +_DWORD *__thiscall std::wistream::get(_DWORD *this, _WORD *a2, int a3); +_DWORD *__thiscall std::wistream::get(_DWORD *this, _WORD *a2, int a3, __int16 a4); +_DWORD *__thiscall std::wistream::get(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::wistream::get(_DWORD *this, _DWORD *a2, __int16 a3); +_DWORD *__thiscall std::wistream::get(_DWORD *this, _WORD *a2); +int __fastcall std::wistream::get(_DWORD *a1); +int __fastcall std::wistream::peek(_DWORD *a1); +_DWORD *__thiscall std::wistream::read(_DWORD *this, int a2, int a3); +void __thiscall std::wistream::swap(_DWORD *this, _DWORD *a2); +int __fastcall std::wistream::sync(_DWORD *a1); +_DWORD *__thiscall std::wistream::seekg(_DWORD *this, int a2, int a3, int a4, int a5); +_DWORD *__thiscall std::wistream::seekg(_DWORD *this, int a2, int a3, int a4); +_DWORD *__thiscall std::wistream::tellg(_DWORD *this, _DWORD *a2); +int *__fastcall std::wistream::unget(int *a1); +_DWORD *__thiscall std::wistream::ignore(_DWORD *this, int a2); +_DWORD *__thiscall std::wistream::ignore(_DWORD *this, int a2, __int16 a3); +_DWORD *__fastcall std::wistream::ignore(_DWORD *a1); +void __thiscall std::wistream::sentry::sentry(_BYTE *this, _DWORD *a2, char a3); +void __thiscall std::wistream::sentry::sentry(_BYTE *this, _DWORD *a2, char a3); +_DWORD *__thiscall std::wistream::getline(_DWORD *this, char *a2, int a3); +_DWORD *__thiscall std::wistream::getline(_DWORD *this, char *a2, int a3, __int16 a4); +int *__thiscall std::wistream::putback(int *this, unsigned __int16 a2); +struct _Unwind_Exception *__thiscall std::wistream::readsome(_DWORD *this, int a2, int a3); +void __thiscall std::wistream::basic_istream(_DWORD *this, int *a2); +void __thiscall std::wistream::basic_istream(_DWORD *this, int a2); +void __fastcall std::wistream::basic_istream(int a1); +int __thiscall std::wistream::basic_istream(int *this, int *a2, _DWORD *a3); +BOOL __thiscall std::wistream::basic_istream(int *this, int *a2, int a3); +BOOL __thiscall std::wistream::basic_istream(int *this, int *a2); +void __fastcall std::wistream::~wistream(char *Block); +void __fastcall std::wistream::~wistream(_DWORD *a1); +int __thiscall std::wistream::~wistream(int *this, int *a2); +_DWORD *__thiscall std::wistream::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::wistream::operator>>(void *this, int (__cdecl *a2)(void *)); +char *__thiscall std::wistream::operator>>(char *this, void (__cdecl *a2)(char *)); +char *__thiscall std::wistream::operator>>(char *this, void (__cdecl *a2)(char *)); +_DWORD *__thiscall std::wistream::operator>>(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::wistream::operator>>(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::wistream::operator>>(_DWORD *this, _WORD *a2); +int *__thiscall std::wostream::put(int *this, unsigned __int16 a2); +void __thiscall std::wostream::swap(_DWORD *this, _DWORD *a2); +_DWORD *__fastcall std::wostream::flush(_DWORD *a1); +_DWORD *__thiscall std::wostream::seekp(_DWORD *this, int a2, int a3, int a4, int a5); +_DWORD *__thiscall std::wostream::seekp(_DWORD *this, int a2, int a3, int a4); +_DWORD *__thiscall std::wostream::tellp(_DWORD *this, int *a2); +int *__thiscall std::wostream::write(int *this, int a2, int a3); +int __thiscall std::wostream::sentry::sentry(_DWORD *this, int *a2); +int __thiscall std::wostream::sentry::sentry(_DWORD *this, int *a2); +void __fastcall std::wostream::sentry::~sentry(int a1); +void __fastcall std::wostream::sentry::~sentry(int a1); +int __thiscall std::wostream::_M_write(_DWORD *this, int a2, int a3); +int *__thiscall std::wostream::_M_insert(int *this, int a2); +int *__thiscall std::wostream::_M_insert(int *this, unsigned __int8 a2); +int *__thiscall std::wostream::_M_insert(int *this, double a2); +int *__thiscall std::wostream::_M_insert(int *this, long double a2); +int *__thiscall std::wostream::_M_insert(int *this, int a2); +int *__thiscall std::wostream::_M_insert(int *this, int a2); +int *__thiscall std::wostream::_M_insert(int *this, int a2, int a3); +int *__thiscall std::wostream::_M_insert(int *this, int a2, int a3); +void __thiscall std::wostream::basic_ostream(_DWORD *this, _DWORD *a2); +void __thiscall std::wostream::basic_ostream(_DWORD *this, int a2); +int __thiscall std::wostream::basic_ostream(_DWORD *this, int a2); +void __fastcall std::wostream::basic_ostream(int a1); +int __thiscall std::wostream::basic_ostream(_DWORD *this, _DWORD *a2, _DWORD *a3); +BOOL __thiscall std::wostream::basic_ostream(int *this, int *a2, int a3); +int __thiscall std::wostream::basic_ostream(int *this, int *a2, int a3); +BOOL __thiscall std::wostream::basic_ostream(int *this, int *a2); +void __fastcall std::wostream::~wostream(char *Block); +void __fastcall std::wostream::~wostream(_DWORD *a1); +int __thiscall std::wostream::~wostream(int *this, int *a2); +_DWORD *__thiscall std::wostream::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::wostream::operator<<(void *this, int (__cdecl *a2)(void *)); +char *__thiscall std::wostream::operator<<(char *this, void (__cdecl *a2)(char *)); +char *__thiscall std::wostream::operator<<(char *this, void (__cdecl *a2)(char *)); +int *__thiscall std::wostream::operator<<(int *this, _DWORD *a2); +int *__thiscall std::wostream::operator<<(int *this, unsigned __int8 a2); +int *__thiscall std::wostream::operator<<(int *this, float a2); +int *__thiscall std::wostream::operator<<(int *this, unsigned __int16 a2); +int *__thiscall std::wostream::operator<<(int *this, unsigned __int16 a2); +void __thiscall std::random_device::_M_init_pretr1(_DWORD *this, unsigned __int8 **a2); +// void __userpurge std::random_device::_M_init_pretr1(_DWORD *a1@, std::random_device **this, const std::string *a3); +int __fastcall std::random_device::_M_fini(int *a1); +// void __userpurge std::random_device::_M_init(_DWORD *a1@, std::random_device *this, const char *a3, unsigned int a4); +void *__thiscall std::random_device::_M_init(_DWORD *this, int a2); +// void __userpurge std::random_device::_M_init(_DWORD *a1@, std::random_device **this, const std::string *a3); +int __fastcall std::random_device::_M_getval(int a1); +// void __userpurge std::runtime_error::runtime_error(_DWORD *a1@, std::runtime_error *this, const char *a3); +void __thiscall std::runtime_error::runtime_error(_DWORD *this, int a2); +// void __userpurge std::runtime_error::runtime_error(_DWORD *a1@, std::runtime_error *this, const std::runtime_error *a3); +// void __userpurge std::runtime_error::runtime_error(_DWORD *a1@, std::runtime_error *this, const std::string *a3); +void __fastcall std::runtime_error::~runtime_error(void *a1); +void __cdecl std::runtime_error::~runtime_error(std::exception *a1); +int *__thiscall std::runtime_error::operator=(int *this, int a2); +int *__thiscall std::runtime_error::operator=(int *this, int a2); +int __fastcall std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(volatile signed __int32 **a1); +int __thiscall std::ifstream::open(int *this, char *a2, int a3); +int __thiscall std::ifstream::open(int *this, wchar_t *a2, int a3); +int __thiscall std::ifstream::open(int *this, char **a2, int a3); +void __thiscall std::ifstream::swap(_DWORD *this, _DWORD *a2); +struct _Unwind_Exception *__fastcall std::ifstream::close(_DWORD *a1); +bool __fastcall std::ifstream::is_open(int a1); +void __thiscall std::ifstream::basic_ifstream(_DWORD *this, int *a2); +void __thiscall std::ifstream::basic_ifstream(_DWORD *this, char *a2, int a3); +void __thiscall std::ifstream::basic_ifstream(_DWORD *this, wchar_t *a2, int a3); +void __thiscall std::ifstream::basic_ifstream(_DWORD *this, char **a2, int a3); +void __fastcall std::ifstream::basic_ifstream(int a1); +void __thiscall std::ifstream::basic_ifstream(int *this, int *a2, _DWORD *a3); +void __thiscall std::ifstream::basic_ifstream(int *this, int *a2, char *a3, int a4); +void __thiscall std::ifstream::basic_ifstream(int *this, int *a2, wchar_t *a3, int a4); +void __thiscall std::ifstream::basic_ifstream(int *this, int *a2, char **a3, int a4); +void __thiscall std::ifstream::basic_ifstream(int *this, int *a2); +void __fastcall std::ifstream::~ifstream(_DWORD *a1); +void __fastcall std::ifstream::~ifstream(int a1); +void __thiscall std::ifstream::~ifstream(int *this, int *a2); +_DWORD *__thiscall std::ifstream::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::wifstream::open(int *this, char *a2, int a3); +int __thiscall std::wifstream::open(int *this, wchar_t *a2, int a3); +int __thiscall std::wifstream::open(int *this, char **a2, int a3); +void __thiscall std::wifstream::swap(_DWORD *this, _DWORD *a2); +struct _Unwind_Exception *__fastcall std::wifstream::close(_DWORD *a1); +bool __fastcall std::wifstream::is_open(int a1); +void __thiscall std::wifstream::basic_ifstream(_DWORD *this, int *a2); +void __thiscall std::wifstream::basic_ifstream(_DWORD *this, char *a2, int a3); +void __thiscall std::wifstream::basic_ifstream(_DWORD *this, wchar_t *a2, int a3); +void __thiscall std::wifstream::basic_ifstream(_DWORD *this, char **a2, int a3); +void __fastcall std::wifstream::basic_ifstream(int a1); +void __thiscall std::wifstream::basic_ifstream(int *this, int *a2, _DWORD *a3); +void __thiscall std::wifstream::basic_ifstream(int *this, int *a2, char *a3, int a4); +void __thiscall std::wifstream::basic_ifstream(int *this, int *a2, wchar_t *a3, int a4); +void __thiscall std::wifstream::basic_ifstream(int *this, int *a2, char **a3, int a4); +void __thiscall std::wifstream::basic_ifstream(int *this, int *a2); +void __fastcall std::wifstream::~wifstream(_DWORD *a1); +void __fastcall std::wifstream::~wifstream(int a1); +void __thiscall std::wifstream::~wifstream(int *this, int *a2); +_DWORD *__thiscall std::wifstream::operator=(_DWORD *this, _DWORD *a2); +void __thiscall std::wiostream::swap(_DWORD *this, _DWORD *a2); +void __thiscall std::wiostream::basic_iostream(_DWORD *this, int *a2); +void __thiscall std::wiostream::basic_iostream(_DWORD *this, int a2); +void __fastcall std::wiostream::basic_iostream(int a1); +int __thiscall std::wiostream::basic_iostream(int *this, int *a2, _DWORD *a3); +void __thiscall std::wiostream::basic_iostream(int *this, int *a2, int a3); +void __thiscall std::wiostream::basic_iostream(int *this, int *a2); +void __fastcall std::wiostream::~basic_iostream(char *Block); +void __fastcall std::wiostream::~basic_iostream(int a1); +int __thiscall std::wiostream::~basic_iostream(int *this, int *a2); +_DWORD *__thiscall std::wiostream::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::ofstream::open(int *this, char *a2, int a3); +int __thiscall std::ofstream::open(int *this, wchar_t *a2, int a3); +int __thiscall std::ofstream::open(int *this, char **a2, int a3); +void __thiscall std::ofstream::swap(_DWORD *this, _DWORD *a2); +struct _Unwind_Exception *__fastcall std::ofstream::close(_DWORD *a1); +bool __fastcall std::ofstream::is_open(int a1); +void __thiscall std::ofstream::basic_ofstream(_DWORD *this, _DWORD *a2); +void __thiscall std::ofstream::basic_ofstream(_DWORD *this, char *a2, int a3); +void __thiscall std::ofstream::basic_ofstream(_DWORD *this, wchar_t *a2, int a3); +void __thiscall std::ofstream::basic_ofstream(_DWORD *this, char **a2, int a3); +void __fastcall std::ofstream::basic_ofstream(int a1); +void __thiscall std::ofstream::basic_ofstream(int *this, int *a2, _DWORD *a3); +void __thiscall std::ofstream::basic_ofstream(int *this, int *a2, char *a3, int a4); +void __thiscall std::ofstream::basic_ofstream(int *this, int *a2, wchar_t *a3, int a4); +void __thiscall std::ofstream::basic_ofstream(int *this, int *a2, char **a3, int a4); +void __thiscall std::ofstream::basic_ofstream(int *this, int *a2); +void __fastcall std::ofstream::~ofstream(_DWORD *a1); +void __fastcall std::ofstream::~ofstream(int a1); +void __thiscall std::ofstream::~ofstream(int *this, int *a2); +_DWORD *__thiscall std::ofstream::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::wofstream::open(int *this, char *a2, int a3); +int __thiscall std::wofstream::open(int *this, wchar_t *a2, int a3); +int __thiscall std::wofstream::open(int *this, char **a2, int a3); +void __thiscall std::wofstream::swap(_DWORD *this, _DWORD *a2); +struct _Unwind_Exception *__fastcall std::wofstream::close(_DWORD *a1); +bool __fastcall std::wofstream::is_open(int a1); +void __thiscall std::wofstream::basic_ofstream(_DWORD *this, _DWORD *a2); +void __thiscall std::wofstream::basic_ofstream(_DWORD *this, char *a2, int a3); +void __thiscall std::wofstream::basic_ofstream(_DWORD *this, wchar_t *a2, int a3); +void __thiscall std::wofstream::basic_ofstream(_DWORD *this, char **a2, int a3); +void __fastcall std::wofstream::basic_ofstream(int a1); +void __thiscall std::wofstream::basic_ofstream(int *this, int *a2, _DWORD *a3); +void __thiscall std::wofstream::basic_ofstream(int *this, int *a2, char *a3, int a4); +void __thiscall std::wofstream::basic_ofstream(int *this, int *a2, wchar_t *a3, int a4); +void __thiscall std::wofstream::basic_ofstream(int *this, int *a2, char **a3, int a4); +void __thiscall std::wofstream::basic_ofstream(int *this, int *a2); +void __fastcall std::wofstream::~wofstream(_DWORD *a1); +void __fastcall std::wofstream::~wofstream(int a1); +void __thiscall std::wofstream::~wofstream(int *this, int *a2); +_DWORD *__thiscall std::wofstream::operator=(_DWORD *this, _DWORD *a2); +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3); +void __fastcall std::codecvt_byname::~codecvt_byname(_DWORD *Block); +void __fastcall std::codecvt_byname::~codecvt_byname(_DWORD *a1); +void __fastcall std::codecvt_byname::~codecvt_byname(_DWORD *a1); +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3); +void __fastcall std::codecvt_byname::~codecvt_byname(_DWORD *Block); +void __fastcall std::codecvt_byname::~codecvt_byname(_DWORD *a1); +void __fastcall std::codecvt_byname::~codecvt_byname(_DWORD *a1); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3); +void __fastcall std::collate_byname::~collate_byname(_DWORD *Block); +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1); +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3); +void __fastcall std::collate_byname::~collate_byname(_DWORD *Block); +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1); +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1); +// void __userpurge std::overflow_error::overflow_error(_DWORD *a1@, std::overflow_error *this, const char *a3); +void __thiscall std::overflow_error::overflow_error(_DWORD *this, int a2); +// void __userpurge std::overflow_error::overflow_error(_DWORD *a1@, std::overflow_error *this, const std::string *a3); +void __fastcall std::overflow_error::~overflow_error(_DWORD *a1); +void __cdecl std::overflow_error::~overflow_error(std::exception *a1); +void __fastcall std::_Rb_tree_header::_Rb_tree_header(_DWORD *a1); +void __fastcall std::_Rb_tree_header::_Rb_tree_header(_DWORD *a1); +void __fastcall std::_Sp_counted_ptr::_M_destroy(void *Block); +void __fastcall std::_Sp_counted_ptr::_M_dispose(int a1); +int __stdcall std::_Sp_counted_ptr::_M_get_deleter(int a1); +void __fastcall std::_Sp_counted_ptr::~_Sp_counted_ptr(void *Block); +void __fastcall std::_Sp_counted_ptr::_M_destroy(void *Block); +void __fastcall std::_Sp_counted_ptr::_M_dispose(int a1, int a2); +int __stdcall std::_Sp_counted_ptr::_M_get_deleter(int a1); +void __fastcall std::_Sp_counted_ptr::~_Sp_counted_ptr(void *Block); +void __fastcall std::_Sp_counted_ptr::_M_destroy(void *Block); +void __fastcall std::_Sp_counted_ptr::_M_dispose(int a1); +int __stdcall std::_Sp_counted_ptr::_M_get_deleter(int a1); +void __fastcall std::_Sp_counted_ptr::~_Sp_counted_ptr(void *Block); +void __fastcall std::_Sp_counted_ptr::_M_destroy(void *Block); +int __fastcall std::_Sp_counted_ptr::_M_dispose(int a1); +int __stdcall std::_Sp_counted_ptr::_M_get_deleter(int a1); +void __fastcall std::_Sp_counted_ptr::~_Sp_counted_ptr(void *Block); +void __fastcall std::_Sp_counted_ptr::_M_destroy(void *Block); +void __fastcall std::_Sp_counted_ptr::_M_dispose(int a1); +int __stdcall std::_Sp_counted_ptr::_M_get_deleter(int a1); +void __fastcall std::_Sp_counted_ptr::~_Sp_counted_ptr(void *Block); +void __fastcall std::_Sp_counted_ptr,std::allocator> *,(__gnu_cxx::_Lock_policy)2>::_M_destroy(void *Block); +int __fastcall std::_Sp_counted_ptr,std::allocator> *,(__gnu_cxx::_Lock_policy)2>::_M_dispose(int a1); +int __stdcall std::_Sp_counted_ptr,std::allocator> *,(__gnu_cxx::_Lock_policy)2>::_M_get_deleter(int a1); +void __fastcall std::_Sp_counted_ptr,std::allocator> *,(__gnu_cxx::_Lock_policy)2>::~_Sp_counted_ptr(void *Block); +_DWORD *__thiscall std::streambuf::pubseekoff(_DWORD *this, int a2, int a3, int a4, int a5, int a6); +_DWORD *__thiscall std::streambuf::pubseekpos(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7); +int __thiscall std::streambuf::__safe_gbump(_DWORD *this, int a2); +int __thiscall std::streambuf::__safe_pbump(_DWORD *this, int a2); +int __thiscall std::streambuf::setg(_DWORD *this, int a2, int a3, int a4); +int __thiscall std::streambuf::setp(_DWORD *this, int a2, int a3); +void __thiscall std::streambuf::swap(int this, int a2); +int std::streambuf::sync(); +int __thiscall std::streambuf::gbump(_DWORD *this, int a2); +int __stdcall std::streambuf::imbue(int); // weak +int __thiscall std::streambuf::pbump(_DWORD *this, int a2); +int __fastcall std::streambuf::sgetc(_DWORD *a1); +int __fastcall std::streambuf::sgetn(int a1); +int __thiscall std::streambuf::sputc(_DWORD *this, unsigned __int8 a2); +int __fastcall std::streambuf::sputn(int a1); +int __fastcall std::streambuf::uflow(_DWORD *a1); +int __fastcall std::streambuf::sbumpc(_DWORD *a1); +void *__thiscall std::streambuf::setbuf(void *this, int a2, int a3); +int __fastcall std::streambuf::snextc(_DWORD *a1); +int (*__fastcall std::streambuf::stossc(_DWORD *a1))(void); +int __thiscall std::streambuf::xsgetn(_DWORD *this, char *a2, int a3); +int __thiscall std::streambuf::xsputn(_DWORD *this, unsigned __int8 *a2, int a3); +int __fastcall std::streambuf::pubsync(int a1); +_DWORD *__thiscall std::streambuf::seekoff(_DWORD *this, int a2, int a3, int a4, int a5, int a6); +_DWORD *__thiscall std::streambuf::seekpos(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7); +int __fastcall std::streambuf::sungetc(_DWORD *a1); +int __fastcall std::streambuf::in_avail(_DWORD *a1); +int __stdcall std::streambuf::overflow(int a1); +volatile signed __int32 **__thiscall std::streambuf::pubimbue(volatile signed __int32 **this, volatile signed __int32 **a2, volatile signed __int32 **a3); +int __stdcall std::streambuf::pbackfail(int a1); +int __thiscall std::streambuf::pubsetbuf(void *this, int a2, int a3); +int std::streambuf::showmanyc(); +int __thiscall std::streambuf::sputbackc(_DWORD *this, unsigned __int8 a2); +int std::streambuf::underflow(); +// volatile signed __int32 *__userpurge std::streambuf::basic_streambuf@(_DWORD *a1@, std::locale *a2, const std::locale *a3); +void __fastcall std::streambuf::basic_streambuf(_DWORD *a1); +// volatile signed __int32 *__userpurge std::streambuf::basic_streambuf@(_DWORD *a1@, std::locale *a2, const std::locale *a3); +void __fastcall std::streambuf::basic_streambuf(_DWORD *a1); +void __fastcall std::streambuf::~streambuf(char *Block); +void __fastcall std::streambuf::~streambuf(int a1); +void __fastcall std::streambuf::~streambuf(int a1); +volatile signed __int32 **__thiscall std::streambuf::operator=(volatile signed __int32 **this, int a2); +_DWORD *__thiscall std::wstreambuf::pubseekoff(_DWORD *this, int a2, int a3, int a4, int a5, int a6); +_DWORD *__thiscall std::wstreambuf::pubseekpos(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7); +int __thiscall std::wstreambuf::__safe_gbump(_DWORD *this, int a2); +int __thiscall std::wstreambuf::__safe_pbump(_DWORD *this, int a2); +int __thiscall std::wstreambuf::setg(_DWORD *this, int a2, int a3, int a4); +int __thiscall std::wstreambuf::setp(_DWORD *this, int a2, int a3); +void __thiscall std::wstreambuf::swap(int this, int a2); +int std::wstreambuf::sync(); +int __thiscall std::wstreambuf::gbump(_DWORD *this, int a2); +int __stdcall std::wstreambuf::imbue(int); // weak +int __thiscall std::wstreambuf::pbump(_DWORD *this, int a2); +int __fastcall std::wstreambuf::sgetc(_DWORD *a1); +int __fastcall std::wstreambuf::sgetn(int a1); +int __thiscall std::wstreambuf::sputc(_DWORD *this, int a2); +int __fastcall std::wstreambuf::sputn(int a1); +int __fastcall std::wstreambuf::uflow(_DWORD *a1); +int __fastcall std::wstreambuf::sbumpc(_DWORD *a1); +void *__thiscall std::wstreambuf::setbuf(void *this, int a2, int a3); +int __fastcall std::wstreambuf::snextc(_DWORD *a1); +int (*__fastcall std::wstreambuf::stossc(_DWORD *a1))(void); +int __thiscall std::wstreambuf::xsgetn(_DWORD *this, char *a2, int a3); +int __thiscall std::wstreambuf::xsputn(_DWORD *this, char *a2, int a3); +int __fastcall std::wstreambuf::pubsync(int a1); +_DWORD *__thiscall std::wstreambuf::seekoff(_DWORD *this, int a2, int a3, int a4, int a5, int a6); +_DWORD *__thiscall std::wstreambuf::seekpos(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7); +int __fastcall std::wstreambuf::sungetc(_DWORD *a1); +int __fastcall std::wstreambuf::in_avail(_DWORD *a1); +int __stdcall std::wstreambuf::overflow(int a1); +volatile signed __int32 **__thiscall std::wstreambuf::pubimbue(volatile signed __int32 **this, volatile signed __int32 **a2, volatile signed __int32 **a3); +int __stdcall std::wstreambuf::pbackfail(int a1); +int __thiscall std::wstreambuf::pubsetbuf(void *this, int a2, int a3); +int std::wstreambuf::showmanyc(); +int __thiscall std::wstreambuf::sputbackc(_DWORD *this, int a2); +int std::wstreambuf::underflow(); +// volatile signed __int32 *__userpurge std::wstreambuf::basic_streambuf@(_DWORD *a1@, std::locale *a2, const std::locale *a3); +void __fastcall std::wstreambuf::basic_streambuf(_DWORD *a1); +// volatile signed __int32 *__userpurge std::wstreambuf::basic_streambuf@(_DWORD *a1@, std::locale *a2, const std::locale *a3); +void __fastcall std::wstreambuf::basic_streambuf(_DWORD *a1); +void __fastcall std::wstreambuf::~wstreambuf(char *Block); +void __fastcall std::wstreambuf::~wstreambuf(int a1); +void __fastcall std::wstreambuf::~wstreambuf(int a1); +volatile signed __int32 **__thiscall std::wstreambuf::operator=(volatile signed __int32 **this, int a2); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int ***a2, int a3); +void __fastcall std::messages_byname::~messages_byname(_DWORD *Block); +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1); +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int ***a2, int a3); +void __fastcall std::messages_byname::~messages_byname(_DWORD *Block); +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1); +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *Block); +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1); +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *Block); +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1); +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +void __fastcall std::time_get_byname>::~time_get_byname(_DWORD *Block); +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1); +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +void __fastcall std::time_get_byname>::~time_get_byname(_DWORD *Block); +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1); +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1); +BOOL __thiscall std::time_put_byname>::time_put_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_put_byname>::time_put_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_put_byname>::time_put_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_put_byname>::time_put_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_put_byname>::time_put_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_put_byname>::time_put_byname(_DWORD *this, int a2, int a3); +void __fastcall std::time_put_byname>::~time_put_byname(_DWORD *Block); +void __cdecl std::time_put_byname>::~time_put_byname(std::locale::facet *a1); +void __cdecl std::time_put_byname>::~time_put_byname(std::locale::facet *a1); +BOOL __thiscall std::time_put_byname>::time_put_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_put_byname>::time_put_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_put_byname>::time_put_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_put_byname>::time_put_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_put_byname>::time_put_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_put_byname>::time_put_byname(_DWORD *this, int a2, int a3); +void __fastcall std::time_put_byname>::~time_put_byname(_DWORD *Block); +void __cdecl std::time_put_byname>::~time_put_byname(std::locale::facet *a1); +void __cdecl std::time_put_byname>::~time_put_byname(std::locale::facet *a1); +// void __userpurge std::underflow_error::underflow_error(_DWORD *a1@, std::underflow_error *this, const char *a3); +void __thiscall std::underflow_error::underflow_error(_DWORD *this, int a2); +// void __userpurge std::underflow_error::underflow_error(_DWORD *a1@, std::underflow_error *this, const std::string *a3); +void __fastcall std::underflow_error::~underflow_error(_DWORD *a1); +void __cdecl std::underflow_error::~underflow_error(std::exception *a1); +int __fastcall std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release(volatile signed __int32 *a1); +void __fastcall std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy(int a1); +void __thiscall std::__numpunct_cache::_M_cache(int this, int a2); +int __thiscall std::__numpunct_cache::__numpunct_cache(_DWORD *this, int a2); +int __thiscall std::__numpunct_cache::__numpunct_cache(_DWORD *this, int a2); +void __fastcall std::__numpunct_cache::~__numpunct_cache(void *a1); +void __cdecl std::__numpunct_cache::~__numpunct_cache(std::locale::facet *a1); +void __cdecl std::__numpunct_cache::~__numpunct_cache(std::locale::facet *a1); +void __thiscall std::__numpunct_cache::_M_cache(int this, int a2); +BOOL __thiscall std::__numpunct_cache::__numpunct_cache(_DWORD *this, int a2); +BOOL __thiscall std::__numpunct_cache::__numpunct_cache(_DWORD *this, int a2); +void __fastcall std::__numpunct_cache::~__numpunct_cache(void *a1); +void __cdecl std::__numpunct_cache::~__numpunct_cache(std::locale::facet *a1); +void __cdecl std::__numpunct_cache::~__numpunct_cache(std::locale::facet *a1); +// void __userpurge std::invalid_argument::invalid_argument(_DWORD *a1@, std::invalid_argument *this, const char *a3); +void __thiscall std::invalid_argument::invalid_argument(_DWORD *this, int a2); +// void __userpurge std::invalid_argument::invalid_argument(_DWORD *a1@, std::invalid_argument *this, const std::string *a3); +void __fastcall std::invalid_argument::~invalid_argument(_DWORD *a1); +void __cdecl std::invalid_argument::~invalid_argument(std::exception *a1); +int *__fastcall std::_Rb_tree_iterator>>::operator++(int *a1); +BOOL __thiscall std::__timepunct_cache::__timepunct_cache(_DWORD *this, int a2); +BOOL __thiscall std::__timepunct_cache::__timepunct_cache(_DWORD *this, int a2); +void __fastcall std::__timepunct_cache::~__timepunct_cache(_DWORD *Block); +void __cdecl std::__timepunct_cache::~__timepunct_cache(std::locale::facet *a1); +void __cdecl std::__timepunct_cache::~__timepunct_cache(std::locale::facet *a1); +BOOL __thiscall std::__timepunct_cache::__timepunct_cache(_DWORD *this, int a2); +BOOL __thiscall std::__timepunct_cache::__timepunct_cache(_DWORD *this, int a2); +void __fastcall std::__timepunct_cache::~__timepunct_cache(_DWORD *Block); +void __cdecl std::__timepunct_cache::~__timepunct_cache(std::locale::facet *a1); +void __cdecl std::__timepunct_cache::~__timepunct_cache(std::locale::facet *a1); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __thiscall std::__moneypunct_cache::_M_cache(int this, int a2); +int __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2); +int __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2); +void __fastcall std::__moneypunct_cache::~__moneypunct_cache(void *a1); +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1); +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1); +void __thiscall std::__moneypunct_cache::_M_cache(int this, int a2); +int __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2); +int __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2); +void __fastcall std::__moneypunct_cache::~__moneypunct_cache(void *a1); +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1); +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1); +void __thiscall std::__moneypunct_cache::_M_cache(int this, int a2); +BOOL __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2); +BOOL __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2); +void __fastcall std::__moneypunct_cache::~__moneypunct_cache(void *a1); +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1); +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1); +void __thiscall std::__moneypunct_cache::_M_cache(int this, int a2); +BOOL __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2); +BOOL __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2); +void __fastcall std::__moneypunct_cache::~__moneypunct_cache(void *a1); +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1); +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1); +void __fastcall std::__codecvt_utf8_base::~__codecvt_utf8_base(_DWORD *Block); +void __cdecl std::__codecvt_utf8_base::~__codecvt_utf8_base(std::locale::facet *a1); +void __fastcall std::__codecvt_utf8_base::~__codecvt_utf8_base(_DWORD *Block); +void __cdecl std::__codecvt_utf8_base::~__codecvt_utf8_base(std::locale::facet *a1); +void __fastcall std::__codecvt_utf8_base::~__codecvt_utf8_base(_DWORD *Block); +void __fastcall std::__codecvt_utf8_base::~__codecvt_utf8_base(_DWORD *a1); +void __fastcall std::__iosfail_type_info::~__iosfail_type_info(_DWORD *a1); +void __cdecl std::__iosfail_type_info::~__iosfail_type_info(std::__iosfail_type_info *__hidden this); // idb +void __fastcall std::__codecvt_utf16_base::~__codecvt_utf16_base(_DWORD *Block); +void __cdecl std::__codecvt_utf16_base::~__codecvt_utf16_base(std::locale::facet *a1); +void __fastcall std::__codecvt_utf16_base::~__codecvt_utf16_base(_DWORD *Block); +void __cdecl std::__codecvt_utf16_base::~__codecvt_utf16_base(std::locale::facet *a1); +void __fastcall std::__codecvt_utf16_base::~__codecvt_utf16_base(_DWORD *Block); +void __fastcall std::__codecvt_utf16_base::~__codecvt_utf16_base(_DWORD *a1); +char *__cdecl std::__uninitialized_copy::__uninit_copy<__gnu_cxx::__normal_iterator>,std::string*>(int a1, int a2, char *a3); +int __cdecl std::__uninitialized_copy::__uninit_copy(night::ns_sourcemap *a1, night::ns_sourcemap *a2, int a3); +void __fastcall std::bad_array_new_length::~bad_array_new_length(_DWORD *a1); +void __cdecl std::bad_array_new_length::~bad_array_new_length(std::exception *a1); +void __fastcall std::__codecvt_utf8_utf16_base::~__codecvt_utf8_utf16_base(_DWORD *Block); +void __cdecl std::__codecvt_utf8_utf16_base::~__codecvt_utf8_utf16_base(std::locale::facet *a1); +void __fastcall std::__codecvt_utf8_utf16_base::~__codecvt_utf8_utf16_base(_DWORD *Block); +void __cdecl std::__codecvt_utf8_utf16_base::~__codecvt_utf8_utf16_base(std::locale::facet *a1); +void __fastcall std::__codecvt_utf8_utf16_base::~__codecvt_utf8_utf16_base(_DWORD *Block); +void __fastcall std::__codecvt_utf8_utf16_base::~__codecvt_utf8_utf16_base(_DWORD *a1); +void __fastcall std::_V2::error_category::~error_category(void *Block); +void __cdecl std::_V2::error_category::~error_category(std::_V2::error_category *__hidden this); // idb +void (__cdecl ***std::_V2::system_category())(_anonymous_namespace_::system_error_category *__hidden this); +void (__cdecl ***std::_V2::generic_category())(_anonymous_namespace_::generic_error_category *__hidden this); +char *__thiscall std::map>::operator[](_DWORD *this, int a2); +_DWORD *__thiscall std::map,std::allocator>>>::operator[](_DWORD *this, _DWORD *a2); +char *__thiscall std::map::operator[](_DWORD *this, _DWORD *a2); +char *__thiscall std::map::operator[](_DWORD *this, int a2); +_DWORD *__thiscall std::map::operator[](_DWORD *this, _DWORD *a2); +char *__thiscall std::map::operator[](_DWORD *this, int a2); +char *__thiscall std::map>::operator[](_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::map>::operator[](_DWORD *this, _DWORD *a2); +char *__thiscall std::map>::operator[](_DWORD *this, int a2); +char *__thiscall std::map::operator[](_DWORD *this, int a2); +void **__thiscall std::map::operator[](void **this, int a2); +_DWORD *__thiscall std::map>>::operator[](_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::map>>::operator[](_DWORD *this, int *a2); +char *__thiscall std::map::operator[](_DWORD *this, unsigned int *a2); +char *__thiscall std::set::insert(_DWORD *this, int a2); +void __thiscall std::pair::swap(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::pair::pair(_DWORD *this, _DWORD *a2); +void __fastcall std::pair::~pair(void **a1); +int __cdecl std::__pad>::_S_pad(_DWORD *a1, void *Src, char *a3, _BYTE *a4, int a5, int a6); +_WORD *__cdecl std::__pad>::_S_pad(_DWORD *a1, void *Src, _WORD *Size, _WORD *a4, int a5, int a6); +void *std::ctype::classic_table(); +int __thiscall std::ctype::ctype(_DWORD *this, void *a2, char a3, int a4); +int __thiscall std::ctype::ctype(_DWORD *this, int a2, void *a3, char a4, int a5); +void __fastcall std::ctype::~ctype(void **Block); +void __fastcall std::ctype::~ctype(int a1); +int __fastcall std::ctype::_M_initialize_ctype(int a1); +int __thiscall std::ctype::ctype(_DWORD *this, char a2, int a3); +void __thiscall std::ctype::ctype(_DWORD *this, int a2); +void __fastcall std::ctype::~ctype(_DWORD *Block); +void __fastcall std::ctype::~ctype(_DWORD *a1); +int __fastcall std::deque>::back(_DWORD *a1); +int __fastcall std::deque>::pop_back(_DWORD *a1); +void __thiscall std::deque>::push_back(int this, _DWORD *a2); +int __fastcall std::deque>::back(_DWORD *a1); +int __fastcall std::deque>::pop_back(_DWORD *a1); +void __thiscall std::deque>::push_back(int this, int *a2); +int __fastcall std::deque>::pop_back(_DWORD *a1); +void __thiscall std::deque>::push_back(int this, int *a2); +void __thiscall std::deque::_M_push_back_aux(int this, int a2); +void __fastcall std::deque::pop_back(_DWORD *a1); +std::locale *std::locale::_S_initialize(); +std::locale *std::locale::_S_initialize_once(); +std::locale *__cdecl std::locale::_S_normalize_category(std::locale *this); +// void __userpurge std::locale::_Impl::_M_init_extra(int a1@, std::locale::_Impl *this, std::locale::facet **a3); +// void __userpurge std::locale::_Impl::_M_init_extra(int a1@, std::locale::_Impl *this, int *a3, int **a4, const char *a5, const char *a6); +// void __userpurge std::locale::_Impl::_M_install_cache(int a1@, std::locale::_Impl *this, const std::locale::facet *a3, unsigned int a4); +// void __userpurge std::locale::_Impl::_M_install_facet(_DWORD *a1@, std::locale::_Impl *this, const std::locale::id *a3, const std::locale::facet *a4); +// void __userpurge std::locale::_Impl::_M_replace_facet(_DWORD *a1@, std::locale::_Impl *this, const std::locale::_Impl *a3, const std::locale::id *a4); +// int __userpurge std::locale::_Impl::_M_replace_category@(int result@, _DWORD *a2@, std::locale::_Impl *this, volatile signed __int32 **a4, const std::locale::id *const *a5); +// void __userpurge std::locale::_Impl::_Impl(_DWORD *a1@, std::locale::_Impl *this, const std::locale::_Impl *a3, unsigned int a4); +// void __userpurge std::locale::_Impl::_Impl(_DWORD *a1@, std::locale::_Impl *this, unsigned int a3); +void __fastcall std::locale::_Impl::~_Impl(_DWORD *a1); +int *const *std::locale::facet::_S_get_c_name(); +int std::locale::facet::_S_get_c_locale(); +int __cdecl std::locale::facet::_S_clone_c_locale(); +int **__cdecl std::locale::facet::_S_create_c_locale(std::locale::facet *this, int **a2); +int **std::locale::facet::_S_initialize_once(); +std::locale::facet *__cdecl std::locale::facet::_S_destroy_c_locale(std::locale::facet *this); +int __cdecl std::locale::facet::_S_lc_ctype_c_locale(); +void __fastcall std::locale::facet::~facet(void *Block); +void __cdecl std::locale::facet::~facet(std::locale::facet *__hidden this); // idb +std::locale *__cdecl std::locale::global(std::locale *this, volatile signed __int32 **a2); +_DWORD *std::locale::classic(); +// std::locale *__userpurge std::locale::locale@(_DWORD *a1@, std::locale *this, std::locale::_Impl *a3); +// volatile signed __int32 *__userpurge std::locale::locale@(volatile signed __int32 **a1@, volatile signed __int32 **this, const std::locale *a3); +void __fastcall std::locale::locale(_DWORD *a1); +void __fastcall std::locale::~locale(_DWORD **a1); +volatile signed __int32 **__thiscall std::locale::operator=(volatile signed __int32 **this, volatile signed __int32 **a2); +char *__thiscall std::vector>::_M_realloc_insert const&>(_DWORD *this, char *a2, _DWORD *a3); +int __thiscall std::vector>::_M_erase(_DWORD *this, int a2); +void __thiscall std::vector>::push_back(_DWORD *this, _DWORD *a2); +char *__thiscall std::vector>::_M_realloc_insert const&>(int **this, int *a2, int *a3); +void __thiscall std::vector>::push_back(int **this, int *a2); +char *__thiscall std::vector>::_M_realloc_insert const&>(_DWORD *this, char *a2, _DWORD *a3); +char *__thiscall std::vector>::push_back(_DWORD *this, _DWORD *a2); +void __thiscall std::vector>::vector(_DWORD *this, _DWORD *a2); +void __fastcall std::vector>::~vector(void **a1); +void __thiscall std::vector::_M_realloc_insert(char **this, char *a2, _DWORD *a3); +void __thiscall std::vector::push_back(char **this, _DWORD *a2); +void __fastcall std::vector::~vector(void **a1); +void __thiscall std::vector::_M_realloc_insert(void **this, int a2, WXML::DOMLib::Token *a3); +void __thiscall std::vector::push_back(int this, WXML::DOMLib::Token *a2); +void __fastcall std::vector::~vector(void **a1); +void __thiscall std::vector::_M_realloc_insert(struct _Unwind_Exception **this, void **a2, _DWORD *a3); +void __thiscall std::vector::push_back(int this, _DWORD *a2); +void __fastcall std::vector::~vector(void ***a1); +_DWORD *__thiscall std::vector::_M_realloc_insert(_DWORD *this, char *a2, WXML::EXPRLib::Token *a3); +void __fastcall std::vector::~vector(void **a1); +void __thiscall std::vector::_M_realloc_insert(night::ns_sourcemap **this, night::ns_sourcemap *a2, night::ns_sourcemap *a3); +int __thiscall std::vector::at(int *this, unsigned int a2); +void __thiscall std::vector::push_back(night::ns_sourcemap **this, night::ns_sourcemap *a2); +void __fastcall std::vector::~vector(void ***a1, int a2); +_DWORD *__thiscall std::vector::emplace_back(void **this, _DWORD *a2); +void __thiscall std::vector::_M_realloc_insert(void **this, char *a2, int a3); +int __thiscall std::vector::_M_realloc_insert(void **this, char *a2, _DWORD *a3); +void __thiscall std::vector::push_back(int this, int a2); +void __fastcall std::vector::~vector(void ***a1, int a2); +char *__thiscall std::vector::_M_realloc_insert(void **this, _BYTE *a2, _DWORD *a3); +char *__thiscall std::vector::push_back(int this, _DWORD *a2); +char *__thiscall std::vector::emplace_back(void **this, char **a2); +int __thiscall std::vector::at(_DWORD *this, unsigned int a2); +char *__thiscall std::vector::push_back(void **this, char **a2); +char *__thiscall std::vector>>::_M_realloc_insert> const&>(void **this, _BYTE *a2, _DWORD *a3); +int __thiscall std::vector>>::at(_DWORD *this, unsigned int a2); +char *__thiscall std::vector>>::push_back(int this, _DWORD *a2); +char **__thiscall std::vector>::_M_realloc_insert>(char **this, char *a2, _DWORD *a3); +void __fastcall std::vector>::~vector(void ***a1); +_DWORD *__thiscall std::vector>::emplace_back>(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::vector>::_M_realloc_insert>(_DWORD *this, char *a2, _DWORD *a3); +void __fastcall std::vector>::~vector(void ***a1); +char **__thiscall std::vector>::emplace_back>(int this, _DWORD *a2); +char **__thiscall std::vector>::_M_realloc_insert>(char **this, char *a2, _DWORD *a3); +void __fastcall std::vector>::~vector(void ***a1); +char *__thiscall std::vector>::_M_realloc_insert>(_DWORD *this, char *a2, _DWORD *a3); +void __fastcall std::vector>::~vector(void **a1); +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1); +void __thiscall std::string::_M_destroy(void **this, int a2); +void __fastcall std::string::_M_dispose(void **a1); +unsigned int *__thiscall std::string::_M_replace(unsigned int *this, size_t a2, size_t a3, char *Src, size_t a5); +int __cdecl std::string::_S_compare(int a1, int a2); +int __thiscall std::string::_M_capacity(_DWORD *this, int a2); +int __thiscall std::string::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3); +int __thiscall std::string::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3); +int __thiscall std::string::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3); +int __thiscall std::string::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3); +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, size_t Size, char a3); +_BYTE *__thiscall std::string::_M_construct<__gnu_cxx::__normal_iterator>(_DWORD *this, _BYTE *Src, int a3, int a4); +_BYTE *__thiscall std::string::_M_construct<__gnu_cxx::__normal_iterator>(_DWORD *this, _BYTE *Src, int a3, int a4); +unsigned int __thiscall std::string::_M_construct(void **this, unsigned __int8 *Src, size_t Size); +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, _BYTE *Src, int a3, int a4); +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, _BYTE *Src, int a3); +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, _BYTE *Src, int a3); +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, _BYTE *Src, int a3); +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, _BYTE *Src, int a3); +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, _BYTE *Src, int a3, int a4); +int __fastcall std::string::_M_local_data(int a1); +int __thiscall std::string::_M_set_length(int *this, int a2); +int __cdecl std::string::_S_copy_chars(_BYTE *a1, unsigned __int8 *Src, size_t Size); +int __cdecl std::string::_S_copy_chars(_BYTE *a1, unsigned __int8 *Src, size_t Size); +int __cdecl std::string::_S_copy_chars(_BYTE *a1, unsigned __int8 *Src, size_t Size); +int __cdecl std::string::_S_copy_chars(_BYTE *a1, unsigned __int8 *Src, size_t Size); +void __fastcall std::string::shrink_to_fit(_DWORD *a1); +_DWORD *__thiscall std::string::_M_replace_aux(_DWORD *this, size_t a2, int a3, size_t a4, char a5); +int __fastcall std::string::_M_get_allocator(int a1); +_BYTE *__thiscall std::string::_M_construct_aux_2(_DWORD *this, size_t Size, char a3); +unsigned int __thiscall std::string::at(_DWORD *this, unsigned int a2); +int __fastcall std::string::end(_DWORD *a1); +int __fastcall std::string::back(_DWORD *a1); +_DWORD *__thiscall std::string::rend(_DWORD *this, _DWORD *a2); +_BYTE *__thiscall std::string::swap(_DWORD *this, _DWORD *a2); +int __fastcall std::string::begin(int a1); +_BYTE *__fastcall std::string::clear(int a1); +char *__thiscall std::string::erase(int *this, char *a2); +int __thiscall std::string::erase(int *this, _BYTE *a2, int a3); +int __thiscall std::string::erase(int *this, int a2); +int __thiscall std::string::erase(int *this, _BYTE *a2, int a3); +int *__thiscall std::string::erase(int *this, unsigned int a2, unsigned int a3); +int __fastcall std::string::front(int a1); +_DWORD *__thiscall std::string::append(_DWORD *this, char *Str); +_DWORD *__thiscall std::string::append(_DWORD *this, _BYTE *Src, size_t Size); +_DWORD *__thiscall std::string::append(_DWORD *this, int a2); +_DWORD *__thiscall std::string::append(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4); +_DWORD *__thiscall std::string::append(_DWORD *this, _BYTE *Src, size_t Size); +_DWORD *__thiscall std::string::append(_DWORD *this, size_t a2, char a3); +_DWORD *__thiscall std::string::assign(_DWORD *this, int a2); +unsigned int *__thiscall std::string::assign(unsigned int *this, char *Str); +unsigned int *__thiscall std::string::assign(unsigned int *this, char *a2, size_t a3); +void *__thiscall std::string::assign(void *this, int a2); +unsigned int *__thiscall std::string::assign(unsigned int *this, _DWORD *a2, unsigned int a3, size_t a4); +unsigned int *__thiscall std::string::assign(unsigned int *this, char *a2, size_t a3); +_DWORD *__thiscall std::string::assign(_DWORD *this, size_t a2, char a3); +size_t __thiscall std::string::insert(unsigned int *this, int a2, char *a3, size_t a4); +size_t __thiscall std::string::insert(_DWORD *this, int a2, char a3); +size_t __thiscall std::string::insert(_DWORD *this, int a2, size_t a3, char a4); +unsigned int *__thiscall std::string::insert(unsigned int *this, int a2, char *a3, size_t a4); +size_t __thiscall std::string::insert(_DWORD *this, int a2, char a3); +_DWORD *__thiscall std::string::insert(_DWORD *this, int a2, size_t a3, char a4); +unsigned int *__thiscall std::string::insert(unsigned int *this, unsigned int a2, char *Str); +unsigned int *__thiscall std::string::insert(unsigned int *this, unsigned int a2, char *a3, size_t a4); +unsigned int *__thiscall std::string::insert(unsigned int *this, unsigned int a2, int a3); +unsigned int *__thiscall std::string::insert(unsigned int *this, unsigned int a2, _DWORD *a3, char *a4, size_t a5); +_DWORD *__thiscall std::string::insert(_DWORD *this, unsigned int a2, size_t a3, char a4); +unsigned int *__thiscall std::string::insert<__gnu_cxx::__normal_iterator>(unsigned int *this, int a2, char *a3, int a4); +_DWORD *__thiscall std::string::rbegin(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::string::resize(int *this, _DWORD *a2); +_DWORD *__thiscall std::string::resize(int *this, _DWORD *a2, char a3); +int __thiscall std::string::_M_data(_DWORD *this, int a2); +int __cdecl std::string::_S_copy(_BYTE *a1, unsigned __int8 *Src, int Size); +int __cdecl std::string::_S_move(_BYTE *a1, unsigned __int8 *Src, int Size); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, int a4); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *Str); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5); +_DWORD *__thiscall std::string::replace(_DWORD *this, int a2, int a3, size_t a4, char a5); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *Str); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, int a4); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5); +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5); +_DWORD *__thiscall std::string::replace(_DWORD *this, int a2, int a3, size_t a4, char a5); +unsigned int *__thiscall std::string::replace(unsigned int *this, unsigned int a2, unsigned int a3, char *Str); +unsigned int *__thiscall std::string::replace(unsigned int *this, unsigned int a2, unsigned int a3, char *a4, size_t a5); +unsigned int *__thiscall std::string::replace(unsigned int *this, unsigned int a2, unsigned int a3, int a4); +unsigned int *__thiscall std::string::replace(unsigned int *this, unsigned int a2, unsigned int a3, _DWORD *a4, unsigned int a5, unsigned int a6); +_DWORD *__thiscall std::string::replace(_DWORD *this, unsigned int a2, unsigned int a3, size_t a4, char a5); +void __thiscall std::string::reserve(_DWORD *this, unsigned int a2); +int __thiscall std::string::_M_erase(int *this, int a2, int a3); +int __fastcall std::string::pop_back(_DWORD *a1); +_DWORD *__thiscall std::string::_M_append(_DWORD *this, _BYTE *Src, size_t Size); +void __thiscall std::string::_M_assign(int this, int a2); +void *__stdcall std::string::_M_create(unsigned int *a1, unsigned int a2); +int __thiscall std::string::_M_length(_DWORD *this, int a2); +size_t __thiscall std::string::_M_mutate(int this, size_t Size, int a3, _BYTE *a4, size_t a5); +void *__cdecl std::string::_S_assign(_BYTE *a1, void *Val, size_t Size); +_DWORD *__thiscall std::string::push_back(_DWORD *this, char a2); +_DWORD *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, int a2, int a3); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, char *Str, int a3); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _BYTE *a2, int a3, int a4); +char *__thiscall std::string::basic_string(_DWORD *this, int a2); +_BYTE *__thiscall std::string::basic_string(char *this, int a2); +_BYTE *__thiscall std::string::basic_string(char *this, int a2, int a3); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4, int a5); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _BYTE *a2, int a3, int a4); +_BYTE *__thiscall std::string::basic_string(char *this, size_t Size, char a3, int a4); +int __fastcall std::string::basic_string(int a1); +_BYTE *__thiscall std::string::basic_string<__gnu_cxx::__normal_iterator,void>(char *this, char *Src, int a3, int a4); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _BYTE *a2, int a3, int a4); +_BYTE *__thiscall std::string::basic_string(char *this, char *Src, int a3, int a4); +_DWORD *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, int a2, int a3); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, char *Str, int a3); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _BYTE *a2, int a3, int a4); +char *__thiscall std::string::basic_string(_DWORD *this, int a2); +_BYTE *__thiscall std::string::basic_string(char *this, int a2); +_BYTE *__thiscall std::string::basic_string(char *this, int a2, int a3); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4, int a5); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _BYTE *a2, int a3, int a4); +_BYTE *__thiscall std::string::basic_string(char *this, size_t Size, char a3, int a4); +int __fastcall std::string::basic_string(int a1); +_BYTE *__thiscall std::string::basic_string<__gnu_cxx::__normal_iterator,void>(char *this, char *Src, int a3, int a4); +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _BYTE *a2, int a3, int a4); +_BYTE *__thiscall std::string::basic_string(char *this, char *Src, int a3, int a4); +void __fastcall std::string::~string(void **a1); +void __fastcall std::string::~string(void **a1); +_DWORD *__thiscall std::string::operator=(_DWORD *this, _DWORD *a2); +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str); +void *__thiscall std::string::operator=(void *this, int a2); +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *a2, size_t a3); +_DWORD *__thiscall std::string::operator=(_DWORD *this, char a2); +int __thiscall std::string::operator[](_DWORD *this, int a2); +_DWORD *__thiscall std::string::operator+=(_DWORD *this, char *Str); +_DWORD *__thiscall std::string::operator+=(_DWORD *this, int a2); +_DWORD *__thiscall std::string::operator+=(_DWORD *this, _BYTE *Src, size_t Size); +_DWORD *__thiscall std::string::operator+=(_DWORD *this, char a2); +void __thiscall std::wstring::_M_destroy(void **this, int a2); +void __fastcall std::wstring::_M_dispose(void **a1); +unsigned int *__thiscall std::wstring::_M_replace(unsigned int *this, int a2, unsigned int a3, _WORD *Src, unsigned int a5); +int __cdecl std::wstring::_S_compare(int a1, int a2); +int __thiscall std::wstring::_M_capacity(_DWORD *this, int a2); +int __thiscall std::wstring::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3); +int __thiscall std::wstring::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3); +int __thiscall std::wstring::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3); +int __thiscall std::wstring::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3); +int __thiscall std::wstring::_M_construct(_DWORD *this, unsigned int a2, __int16 a3); +_WORD *__thiscall std::wstring::_M_construct<__gnu_cxx::__normal_iterator>(_DWORD *this, _WORD *Src, int a3, int a4); +_WORD *__thiscall std::wstring::_M_construct<__gnu_cxx::__normal_iterator>(_DWORD *this, _WORD *Src, int a3, int a4); +_WORD *__thiscall std::wstring::_M_construct(_DWORD *this, _WORD *Src, int a3, int a4); +_WORD *__thiscall std::wstring::_M_construct(_DWORD *this, _WORD *Src, int a3); +_WORD *__thiscall std::wstring::_M_construct(_DWORD *this, _WORD *Src, int a3); +_WORD *__thiscall std::wstring::_M_construct(_DWORD *this, _WORD *Src, int a3, int a4); +_WORD *__thiscall std::wstring::_M_construct(_DWORD *this, _WORD *Src, int a3); +int __fastcall std::wstring::_M_local_data(int a1); +int __thiscall std::wstring::_M_set_length(int *this, int a2); +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size); +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size); +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size); +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size); +void __fastcall std::wstring::shrink_to_fit(_DWORD *a1); +_DWORD *__thiscall std::wstring::_M_replace_aux(_DWORD *this, int a2, int a3, unsigned int a4, __int16 a5); +int __fastcall std::wstring::_M_get_allocator(int a1); +int __thiscall std::wstring::_M_construct_aux_2(_DWORD *this, unsigned int a2, __int16 a3); +int __thiscall std::wstring::at(_DWORD *this, unsigned int a2); +int __fastcall std::wstring::end(_DWORD *a1); +int __fastcall std::wstring::back(_DWORD *a1); +_DWORD *__thiscall std::wstring::rend(_DWORD *this, _DWORD *a2); +_WORD *__thiscall std::wstring::swap(_DWORD *this, _DWORD *a2); +int __fastcall std::wstring::begin(int a1); +_WORD *__fastcall std::wstring::clear(int a1); +char *__thiscall std::wstring::erase(int *this, char *a2); +_WORD *__thiscall std::wstring::erase(int *this, _WORD *a2, int a3); +int __thiscall std::wstring::erase(int *this, int a2); +_WORD *__thiscall std::wstring::erase(int *this, _WORD *a2, int a3); +int *__thiscall std::wstring::erase(int *this, unsigned int a2, unsigned int a3); +int __fastcall std::wstring::front(int a1); +_DWORD *__thiscall std::wstring::append(_DWORD *this, wchar_t *String); +_DWORD *__thiscall std::wstring::append(_DWORD *this, _WORD *Src, unsigned int a3); +_DWORD *__thiscall std::wstring::append(_DWORD *this, int a2); +_DWORD *__thiscall std::wstring::append(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4); +_DWORD *__thiscall std::wstring::append(_DWORD *this, _WORD *Src, unsigned int a3); +_DWORD *__thiscall std::wstring::append(_DWORD *this, unsigned int a2, __int16 a3); +_DWORD *__thiscall std::wstring::assign(_DWORD *this, _DWORD *a2); +unsigned int *__thiscall std::wstring::assign(unsigned int *this, wchar_t *String); +unsigned int *__thiscall std::wstring::assign(unsigned int *this, _WORD *a2, int a3); +void *__thiscall std::wstring::assign(void *this, int a2); +unsigned int *__thiscall std::wstring::assign(unsigned int *this, _DWORD *a2, unsigned int a3, unsigned int a4); +unsigned int *__thiscall std::wstring::assign(unsigned int *this, _WORD *a2, int a3); +_DWORD *__thiscall std::wstring::assign(_DWORD *this, unsigned int a2, __int16 a3); +unsigned int __thiscall std::wstring::insert(unsigned int *this, int a2, _WORD *a3, int a4); +int __thiscall std::wstring::insert(_DWORD *this, int a2, unsigned int a3, __int16 a4); +int __thiscall std::wstring::insert(_DWORD *this, int a2, __int16 a3); +unsigned int *__thiscall std::wstring::insert(unsigned int *this, int a2, _WORD *a3, int a4); +_DWORD *__thiscall std::wstring::insert(_DWORD *this, int a2, unsigned int a3, __int16 a4); +int __thiscall std::wstring::insert(_DWORD *this, int a2, __int16 a3); +unsigned int *__thiscall std::wstring::insert(unsigned int *this, unsigned int a2, wchar_t *String); +unsigned int *__thiscall std::wstring::insert(unsigned int *this, unsigned int a2, _WORD *a3, int a4); +unsigned int *__thiscall std::wstring::insert(unsigned int *this, unsigned int a2, int a3); +unsigned int *__thiscall std::wstring::insert(unsigned int *this, unsigned int a2, _DWORD *a3, unsigned int a4, unsigned int a5); +_DWORD *__thiscall std::wstring::insert(_DWORD *this, unsigned int a2, unsigned int a3, __int16 a4); +unsigned int *__thiscall std::wstring::insert<__gnu_cxx::__normal_iterator>(unsigned int *this, int a2, _WORD *a3, int a4); +_DWORD *__thiscall std::wstring::rbegin(_DWORD *this, _DWORD *a2); +_DWORD *__thiscall std::wstring::resize(int *this, unsigned int a2); +_DWORD *__thiscall std::wstring::resize(int *this, unsigned int a2, __int16 a3); +int __thiscall std::wstring::_M_data(_DWORD *this, int a2); +int __cdecl std::wstring::_S_copy(_WORD *a1, unsigned __int16 *Src, size_t Size); +int __cdecl std::wstring::_S_move(_WORD *a1, unsigned __int16 *Src, size_t Size); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, int a4); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, wchar_t *String); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5); +_DWORD *__thiscall std::wstring::replace(_DWORD *this, int a2, int a3, unsigned int a4, __int16 a5); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, wchar_t *String); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, int a4); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5); +_DWORD *__thiscall std::wstring::replace(_DWORD *this, int a2, int a3, unsigned int a4, __int16 a5); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, unsigned int a2, unsigned int a3, wchar_t *String); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, unsigned int a2, unsigned int a3, _WORD *a4, int a5); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, unsigned int a2, unsigned int a3, int a4); +unsigned int *__thiscall std::wstring::replace(unsigned int *this, unsigned int a2, unsigned int a3, _DWORD *a4, unsigned int a5, unsigned int a6); +_DWORD *__thiscall std::wstring::replace(_DWORD *this, unsigned int a2, unsigned int a3, unsigned int a4, __int16 a5); +void __thiscall std::wstring::reserve(int this, unsigned int a2); +int __thiscall std::wstring::_M_erase(int *this, int a2, int a3); +int __fastcall std::wstring::pop_back(int *a1); +_DWORD *__thiscall std::wstring::_M_append(_DWORD *this, _WORD *Src, int a3); +void __thiscall std::wstring::_M_assign(int this, int a2); +void *__stdcall std::wstring::_M_create(unsigned int *a1, unsigned int a2); +int __thiscall std::wstring::_M_length(_DWORD *this, int a2); +unsigned int __thiscall std::wstring::_M_mutate(int this, int a2, int a3, _WORD *a4, int a5); +int __cdecl std::wstring::_S_assign(_WORD *a1, int a2, __int16 a3); +_DWORD *__thiscall std::wstring::push_back(_DWORD *this, __int16 a2); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2, int a3); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, wchar_t *String, int a3); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4); +int __thiscall std::wstring::basic_string(_DWORD *this, int a2); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2, int a3); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4, int a5); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4); +int __thiscall std::wstring::basic_string(_DWORD *this, unsigned int a2, __int16 a3, int a4); +int __fastcall std::wstring::basic_string(int a1); +_WORD *__thiscall std::wstring::basic_string<__gnu_cxx::__normal_iterator,void>(_DWORD *this, _WORD *Src, int a3, int a4); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4); +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2, int a3); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, wchar_t *String, int a3); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4); +int __thiscall std::wstring::basic_string(_DWORD *this, int a2); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2, int a3); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4, int a5); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4); +int __thiscall std::wstring::basic_string(_DWORD *this, unsigned int a2, __int16 a3, int a4); +int __fastcall std::wstring::basic_string(int a1); +_WORD *__thiscall std::wstring::basic_string<__gnu_cxx::__normal_iterator,void>(_DWORD *this, _WORD *Src, int a3, int a4); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4); +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4); +void __fastcall std::wstring::~wstring(void **a1); +void __fastcall std::wstring::~wstring(void **a1); +_DWORD *__thiscall std::wstring::operator=(_DWORD *this, int a2); +unsigned int *__thiscall std::wstring::operator=(unsigned int *this, wchar_t *String); +void *__thiscall std::wstring::operator=(void *this, int a2); +unsigned int *__thiscall std::wstring::operator=(unsigned int *this, _WORD *a2, int a3); +_DWORD *__thiscall std::wstring::operator=(_DWORD *this, __int16 a2); +int __thiscall std::wstring::operator[](_DWORD *this, int a2); +_DWORD *__thiscall std::wstring::operator+=(_DWORD *this, wchar_t *String); +_DWORD *__thiscall std::wstring::operator+=(_DWORD *this, int a2); +_DWORD *__thiscall std::wstring::operator+=(_DWORD *this, _WORD *Src, unsigned int a3); +int __thiscall std::wstring::operator+=(char *this, __int16 a2); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3); +void __fastcall std::collate_byname::~collate_byname(_DWORD *Block); +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1); +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3); +void __fastcall std::collate_byname::~collate_byname(_DWORD *Block); +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1); +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1); +unsigned int __thiscall std::stringbuf::__xfer_bufptrs::__xfer_bufptrs(_DWORD *this, _DWORD *a2, int a3); +unsigned int __thiscall std::stringbuf::__xfer_bufptrs::__xfer_bufptrs(_DWORD *this, _DWORD *a2, int a3); +int __fastcall std::stringbuf::__xfer_bufptrs::~__xfer_bufptrs(int a1); +int __fastcall std::stringbuf::__xfer_bufptrs::~__xfer_bufptrs(int a1); +unsigned int __fastcall std::stringbuf::_M_update_egptr(int a1); +_DWORD *__thiscall std::stringbuf::_M_stringbuf_init(_DWORD *this, int a2); +int __thiscall std::stringbuf::str(int this, int a2); +void __thiscall std::stringbuf::swap(_DWORD *this, int a2); +_DWORD *__thiscall std::stringbuf::setbuf(int this, _DWORD *a2, int a3); +int __thiscall std::stringbuf::_M_sync(_DWORD *this, _DWORD *a2, int a3, unsigned int a4); +_DWORD *__thiscall std::stringbuf::seekoff(_DWORD *this, _DWORD *a2, __int64 a3, int a4, unsigned int a5); +_DWORD *__thiscall std::stringbuf::seekpos(_DWORD *this, _DWORD *a2, __int64 a3, int a4, int a5, int a6); +int __thiscall std::stringbuf::_M_pbump(_DWORD *this, int a2, int a3, __int64 a4); +int __thiscall std::stringbuf::overflow(_DWORD *this, int a2); +int __thiscall std::stringbuf::pbackfail(int this, int a2); +int __fastcall std::stringbuf::showmanyc(int a1); +int __fastcall std::stringbuf::underflow(int a1); +void __thiscall std::stringbuf::basic_stringbuf(_DWORD *this, std::locale *a2); +std::locale *__thiscall std::stringbuf::basic_stringbuf(_DWORD *this, std::locale **a2, int a3); +void __thiscall std::stringbuf::basic_stringbuf(_DWORD *this, int a2, int a3); +char *__thiscall std::stringbuf::basic_stringbuf(_DWORD *this, int a2); +int __fastcall std::stringbuf::basic_stringbuf(int a1); +void __thiscall std::stringbuf::basic_stringbuf(_DWORD *this, std::locale *a2); +std::locale *__thiscall std::stringbuf::basic_stringbuf(_DWORD *this, std::locale **a2, int a3); +void __thiscall std::stringbuf::basic_stringbuf(_DWORD *this, int a2, int a3); +char *__thiscall std::stringbuf::basic_stringbuf(_DWORD *this, int a2); +int __fastcall std::stringbuf::basic_stringbuf(int a1); +void __fastcall std::stringbuf::~stringbuf(_DWORD *Block); +void __fastcall std::stringbuf::~stringbuf(int a1); +int __thiscall std::stringbuf::operator=(int this, int a2); +unsigned int __thiscall std::wstringbuf::__xfer_bufptrs::__xfer_bufptrs(_DWORD *this, _DWORD *a2, int a3); +unsigned int __thiscall std::wstringbuf::__xfer_bufptrs::__xfer_bufptrs(_DWORD *this, _DWORD *a2, int a3); +int __fastcall std::wstringbuf::__xfer_bufptrs::~__xfer_bufptrs(int a1); +int __fastcall std::wstringbuf::__xfer_bufptrs::~__xfer_bufptrs(int a1); +unsigned int __fastcall std::wstringbuf::_M_update_egptr(int a1); +_DWORD *__thiscall std::wstringbuf::_M_stringbuf_init(_DWORD *this, int a2); +int __thiscall std::wstringbuf::str(int this, int a2); +void __thiscall std::wstringbuf::swap(_DWORD *this, int a2); +_DWORD *__thiscall std::wstringbuf::setbuf(_DWORD *this, _DWORD *a2, int a3); +int __thiscall std::wstringbuf::_M_sync(_DWORD *this, _DWORD *a2, int a3, unsigned int a4); +_DWORD *__thiscall std::wstringbuf::seekoff(_DWORD *this, int a2, __int64 a3, int a4, unsigned int a5); +_DWORD *__thiscall std::wstringbuf::seekpos(_DWORD *this, _DWORD *a2, __int64 a3, int a4, int a5, int a6); +int __thiscall std::wstringbuf::_M_pbump(_DWORD *this, int a2, int a3, __int64 a4); +int __thiscall std::wstringbuf::overflow(_DWORD *this, unsigned __int16 a2); +int __thiscall std::wstringbuf::pbackfail(int this, int a2); +int __fastcall std::wstringbuf::showmanyc(int a1); +int __fastcall std::wstringbuf::underflow(int a1); +void __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, std::locale *a2); +int __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, std::locale **a2, int a3); +void __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, int a2, int a3); +int __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, int a2); +int __fastcall std::wstringbuf::basic_stringbuf(int a1); +void __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, std::locale *a2); +int __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, std::locale **a2, int a3); +void __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, int a2, int a3); +int __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, int a2); +int __fastcall std::wstringbuf::basic_stringbuf(int a1); +void __fastcall std::wstringbuf::~wstringbuf(_DWORD *Block); +void __fastcall std::wstringbuf::~wstringbuf(int a1); +int __thiscall std::wstringbuf::operator=(int this, int a2); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3); +void __fastcall std::messages_byname::~messages_byname(_DWORD *Block); +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1); +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3); +void __fastcall std::messages_byname::~messages_byname(_DWORD *Block); +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1); +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *Block); +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1); +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *Block); +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1); +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +void __fastcall std::time_get_byname>::~time_get_byname(_DWORD *Block); +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1); +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +BOOL __thiscall std::time_get_byname>::time_get_byname(_DWORD *this, int a2, int a3); +void __fastcall std::time_get_byname>::~time_get_byname(_DWORD *Block); +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1); +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3); +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1); +int __thiscall std::basic_stringstream,std::allocator>::str(int this, int a2); +void __thiscall std::basic_stringstream,std::allocator>::swap(_DWORD *this, _DWORD *a2); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(_DWORD *this, int *a2); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(_DWORD *this, int a2, int a3); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(_DWORD *this, int a2); +void __fastcall std::basic_stringstream,std::allocator>::basic_stringstream(int a1); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(int *this, int *a2, _DWORD *a3); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(int *this, int *a2, int a3, int a4); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(int *this, int *a2, int a3); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(int *this, int *a2); +void __fastcall std::basic_stringstream,std::allocator>::~basic_stringstream(_DWORD *Block); +void __fastcall std::basic_stringstream,std::allocator>::~basic_stringstream(int a1); +int __thiscall std::basic_stringstream,std::allocator>::~basic_stringstream(char *this, int *a2); +_DWORD *__thiscall std::basic_stringstream,std::allocator>::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::basic_stringstream,std::allocator>::str(int this, int a2); +void __thiscall std::basic_stringstream,std::allocator>::swap(_DWORD *this, _DWORD *a2); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(_DWORD *this, _DWORD *a2); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(_DWORD *this, int a2, int a3); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(_DWORD *this, int a2); +void __fastcall std::basic_stringstream,std::allocator>::basic_stringstream(int a1); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(int *this, int *a2, _DWORD *a3); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(int *this, int *a2, int a3, int a4); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(int *this, int *a2, int a3); +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream(int *this, int *a2); +void __fastcall std::basic_stringstream,std::allocator>::~basic_stringstream(_DWORD *Block); +void __fastcall std::basic_stringstream,std::allocator>::~basic_stringstream(int a1); +int __thiscall std::basic_stringstream,std::allocator>::~basic_stringstream(char *this, int *a2); +_DWORD *__thiscall std::basic_stringstream,std::allocator>::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::istringstream::str(int this, int a2); +void __thiscall std::istringstream::swap(_DWORD *this, _DWORD *a2); +void __thiscall std::istringstream::basic_istringstream(_DWORD *this, _DWORD *a2); +void __thiscall std::istringstream::basic_istringstream(_DWORD *this, int a2, int a3); +void __thiscall std::istringstream::basic_istringstream(_DWORD *this, int a2); +void __fastcall std::istringstream::basic_istringstream(int a1); +void __thiscall std::istringstream::basic_istringstream(int *this, int *a2, _DWORD *a3); +void __thiscall std::istringstream::basic_istringstream(int *this, int *a2, int a3, int a4); +void __thiscall std::istringstream::basic_istringstream(int *this, int *a2, int a3); +void __thiscall std::istringstream::basic_istringstream(int *this, int *a2); +void __fastcall std::istringstream::~istringstream(_DWORD *Block); +void __fastcall std::istringstream::~istringstream(int a1); +int __thiscall std::istringstream::~istringstream(int *this, int *a2); +_DWORD *__thiscall std::istringstream::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::wistringstream::str(int this, int a2); +void __thiscall std::wistringstream::swap(_DWORD *this, _DWORD *a2); +void __thiscall std::wistringstream::basic_istringstream(_DWORD *this, _DWORD *a2); +void __thiscall std::wistringstream::basic_istringstream(_DWORD *this, int a2, int a3); +void __thiscall std::wistringstream::basic_istringstream(_DWORD *this, int a2); +void __fastcall std::wistringstream::basic_istringstream(int a1); +void __thiscall std::wistringstream::basic_istringstream(int *this, int *a2, _DWORD *a3); +void __thiscall std::wistringstream::basic_istringstream(int *this, int *a2, int a3, int a4); +void __thiscall std::wistringstream::basic_istringstream(int *this, int *a2, int a3); +void __thiscall std::wistringstream::basic_istringstream(int *this, int *a2); +void __fastcall std::wistringstream::~wistringstream(_DWORD *Block); +void __fastcall std::wistringstream::~wistringstream(int a1); +int __thiscall std::wistringstream::~wistringstream(int *this, int *a2); +_DWORD *__thiscall std::wistringstream::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::ostringstream::str(int this, int a2); +void __thiscall std::ostringstream::swap(_DWORD *this, _DWORD *a2); +void __thiscall std::ostringstream::basic_ostringstream(_DWORD *this, _DWORD *a2); +void __thiscall std::ostringstream::basic_ostringstream(_DWORD *this, int a2, int a3); +void __thiscall std::ostringstream::basic_ostringstream(_DWORD *this, int a2); +void __fastcall std::ostringstream::basic_ostringstream(int a1); +void __thiscall std::ostringstream::basic_ostringstream(int *this, int *a2, _DWORD *a3); +void __thiscall std::ostringstream::basic_ostringstream(int *this, int *a2, int a3, int a4); +void __thiscall std::ostringstream::basic_ostringstream(int *this, int *a2, int a3); +void __thiscall std::ostringstream::basic_ostringstream(int *this, int *a2); +void __fastcall std::ostringstream::~ostringstream(_DWORD *Block); +void __fastcall std::ostringstream::~ostringstream(int a1); +int __thiscall std::ostringstream::~ostringstream(int *this, int *a2); +_DWORD *__thiscall std::ostringstream::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::wostringstream::str(int this, int a2); +void __thiscall std::wostringstream::swap(_DWORD *this, _DWORD *a2); +void __thiscall std::wostringstream::basic_ostringstream(_DWORD *this, _DWORD *a2); +void __thiscall std::wostringstream::basic_ostringstream(_DWORD *this, int a2, int a3); +void __thiscall std::wostringstream::basic_ostringstream(_DWORD *this, int a2); +void __fastcall std::wostringstream::basic_ostringstream(int a1); +void __thiscall std::wostringstream::basic_ostringstream(int *this, int *a2, _DWORD *a3); +void __thiscall std::wostringstream::basic_ostringstream(int *this, int *a2, int a3, int a4); +void __thiscall std::wostringstream::basic_ostringstream(int *this, int *a2, int a3); +void __thiscall std::wostringstream::basic_ostringstream(int *this, int *a2); +void __fastcall std::wostringstream::~wostringstream(_DWORD *Block); +void __fastcall std::wostringstream::~wostringstream(int a1); +int __thiscall std::wostringstream::~wostringstream(int *this, int *a2); +_DWORD *__thiscall std::wostringstream::operator=(_DWORD *this, _DWORD *a2); +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3); +void __thiscall std::collate::collate(_DWORD *this, int a2); +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3); +void __thiscall std::collate::collate(_DWORD *this, int a2); +void __fastcall std::collate::~collate(_DWORD *Block); +void __fastcall std::collate::~collate(_DWORD *a1); +void __fastcall std::collate::~collate(_DWORD *a1); +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3); +void __thiscall std::collate::collate(_DWORD *this, int a2); +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3); +void __thiscall std::collate::collate(_DWORD *this, int a2); +void __fastcall std::collate::~collate(_DWORD *Block); +void __fastcall std::collate::~collate(_DWORD *a1); +void __fastcall std::collate::~collate(_DWORD *a1); +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::messages::messages(_DWORD *this, int a2); +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::messages::messages(_DWORD *this, int a2); +void __fastcall std::messages::~messages(_DWORD *Block); +void __fastcall std::messages::~messages(_DWORD *a1); +void __fastcall std::messages::~messages(_DWORD *a1); +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::messages::messages(_DWORD *this, int a2); +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::messages::messages(_DWORD *this, int a2); +void __fastcall std::messages::~messages(_DWORD *Block); +void __fastcall std::messages::~messages(_DWORD *a1); +void __fastcall std::messages::~messages(_DWORD *a1); +_DWORD *__thiscall std::numpunct::_M_initialize_numpunct(_DWORD *this, int a2); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2); +void __fastcall std::numpunct::~numpunct(_DWORD *a1); +void __fastcall std::numpunct::~numpunct(_DWORD *a1); +int __thiscall std::numpunct::_M_initialize_numpunct(_DWORD *this, int a2); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2); +void __fastcall std::numpunct::~numpunct(_DWORD *a1); +void __fastcall std::numpunct::~numpunct(_DWORD *a1); +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2); +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2); +void __fastcall std::time_get>::~time_get(_DWORD *Block); +void __cdecl std::time_get>::~time_get(std::locale::facet *a1); +void __cdecl std::time_get>::~time_get(std::locale::facet *a1); +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2); +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2); +void __fastcall std::time_get>::~time_get(_DWORD *Block); +void __cdecl std::time_get>::~time_get(std::locale::facet *a1); +void __cdecl std::time_get>::~time_get(std::locale::facet *a1); +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2); +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2); +void __fastcall std::money_get>::~money_get(_DWORD *Block); +void __cdecl std::money_get>::~money_get(std::locale::facet *a1); +void __cdecl std::money_get>::~money_get(std::locale::facet *a1); +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2); +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2); +void __fastcall std::money_get>::~money_get(_DWORD *Block); +void __cdecl std::money_get>::~money_get(std::locale::facet *a1); +void __cdecl std::money_get>::~money_get(std::locale::facet *a1); +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2); +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2); +void __fastcall std::money_put>::~money_put(_DWORD *Block); +void __cdecl std::money_put>::~money_put(std::locale::facet *a1); +void __cdecl std::money_put>::~money_put(std::locale::facet *a1); +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2); +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2); +void __fastcall std::money_put>::~money_put(_DWORD *Block); +void __cdecl std::money_put>::~money_put(std::locale::facet *a1); +void __cdecl std::money_put>::~money_put(std::locale::facet *a1); +std::__cxx11 *__cdecl std::to_string(std::__cxx11 *this, unsigned int a2); +std::__cxx11 *__cdecl std::to_string(std::__cxx11 *this, unsigned int a2); +void __fastcall std::codecvt::~codecvt(_DWORD *Block); +void __cdecl std::codecvt::~codecvt(std::locale::facet *a1); +void __fastcall std::codecvt::~codecvt(_DWORD *Block); +void __cdecl std::codecvt::~codecvt(std::locale::facet *a1); +void __fastcall std::codecvt::~codecvt(_DWORD *Block); +void __cdecl std::codecvt::~codecvt(std::locale::facet *a1); +void __fastcall std::codecvt::~codecvt(_DWORD *Block); +void __cdecl std::codecvt::~codecvt(std::locale::facet *a1); +int __thiscall std::codecvt::codecvt(_DWORD *this, char a2, int a3); +void __thiscall std::codecvt::codecvt(_DWORD *this, int a2); +void __fastcall std::codecvt::~codecvt(_DWORD *a1); +void __fastcall std::codecvt::~codecvt(_DWORD *a1); +int __thiscall std::codecvt::codecvt(_DWORD *this, char a2, int a3); +void __thiscall std::codecvt::codecvt(_DWORD *this, int a2); +void __fastcall std::codecvt::~codecvt(_DWORD *a1); +void __fastcall std::codecvt::~codecvt(_DWORD *a1); +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3); +void __thiscall std::collate::collate(_DWORD *this, int a2); +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3); +void __thiscall std::collate::collate(_DWORD *this, int a2); +void __fastcall std::collate::~collate(_DWORD *Block); +void __fastcall std::collate::~collate(_DWORD *a1); +void __fastcall std::collate::~collate(_DWORD *a1); +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3); +void __thiscall std::collate::collate(_DWORD *this, int a2); +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3); +void __thiscall std::collate::collate(_DWORD *this, int a2); +void __fastcall std::collate::~collate(_DWORD *Block); +void __fastcall std::collate::~collate(_DWORD *a1); +void __fastcall std::collate::~collate(_DWORD *a1); +BOOL __thiscall std::num_get>::num_get(_DWORD *this, int a2); +BOOL __thiscall std::num_get>::num_get(_DWORD *this, int a2); +void __fastcall std::num_get>::~num_get(_DWORD *Block); +void __cdecl std::num_get>::~num_get(std::locale::facet *a1); +void __cdecl std::num_get>::~num_get(std::locale::facet *a1); +BOOL __thiscall std::num_get>::num_get(_DWORD *this, int a2); +BOOL __thiscall std::num_get>::num_get(_DWORD *this, int a2); +void __fastcall std::num_get>::~num_get(_DWORD *Block); +void __cdecl std::num_get>::~num_get(std::locale::facet *a1); +void __cdecl std::num_get>::~num_get(std::locale::facet *a1); +BOOL __thiscall std::num_put>::num_put(_DWORD *this, int a2); +BOOL __thiscall std::num_put>::num_put(_DWORD *this, int a2); +void __fastcall std::num_put>::~num_put(_DWORD *Block); +void __cdecl std::num_put>::~num_put(std::locale::facet *a1); +void __cdecl std::num_put>::~num_put(std::locale::facet *a1); +BOOL __thiscall std::num_put>::num_put(_DWORD *this, int a2); +BOOL __thiscall std::num_put>::num_put(_DWORD *this, int a2); +void __fastcall std::num_put>::~num_put(_DWORD *Block); +void __cdecl std::num_put>::~num_put(std::locale::facet *a1); +void __cdecl std::num_put>::~num_put(std::locale::facet *a1); +int __thiscall std::_Rb_tree,std::less,std::allocator>::_M_insert_unique(_DWORD *this, _DWORD *a2); +int __thiscall std::_Rb_tree,std::less,std::allocator>::_M_get_insert_unique_pos(_DWORD *this, int a2); +int __thiscall std::_Rb_tree,std::less,std::allocator>::_M_get_insert_hint_unique_pos(_DWORD *this, _DWORD *a2, int a3); +void __fastcall std::_Rb_tree,std::less,std::allocator>::~_Rb_tree(int a1); +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos(_DWORD *this, int a2); +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_hint_unique_pos(_DWORD *this, _DWORD *a2, int a3); +void __fastcall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::~_Rb_tree(int a1); +_DWORD *__thiscall std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::lower_bound(_DWORD *this, int a2); +_DWORD *__thiscall std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_insert_node(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4); +int __thiscall std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_get_insert_unique_pos(_DWORD *this, int a2); +int __thiscall std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_get_insert_hint_unique_pos(_DWORD *this, _DWORD *a2, int a3); +char *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_emplace_unique>(_DWORD *this, int a2); +void __fastcall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree(int a1); +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::equal_range(_DWORD *this, int a2); +_DWORD *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_insert_node(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4); +struct _Unwind_Exception *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_emplace_unique>(_DWORD *this, char **a2); +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos(_DWORD *this, int a2); +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos(_DWORD *this, _DWORD *a2, int a3); +_DWORD *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find(_DWORD *this, int a2); +_DWORD *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::lower_bound(_DWORD *this, int a2); +_DWORD *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_insert_node(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4); +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos(_DWORD *this, int a2); +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos(_DWORD *this, _DWORD *a2, int a3); +void __fastcall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree(int a1); +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos(_DWORD *this, int a2); +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_hint_unique_pos(_DWORD *this, _DWORD *a2, int a3); +void __fastcall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::~_Rb_tree(int a1); +_DWORD *__thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::lower_bound(_DWORD *this, int a2); +_DWORD *__thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_insert_node(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4); +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos(_DWORD *this, int a2); +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_hint_unique_pos(_DWORD *this, _DWORD *a2, int a3); +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_Rb_tree(_DWORD *this, int a2); +void __fastcall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::~_Rb_tree(int a1); +_DWORD *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_insert_node(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4); +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos(_DWORD *this, int a2); +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos(_DWORD *this, _DWORD *a2, int a3); +void __fastcall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree(int a1); +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos(_DWORD *this, int a2); +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos(_DWORD *this, _DWORD *a2, int a3); +void __fastcall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree(int a1); +int __thiscall std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_get_insert_unique_pos(_DWORD *this, _DWORD *a2); +int __thiscall std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_get_insert_hint_unique_pos(_DWORD *this, _DWORD *a2, int *a3); +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos(_DWORD *this, unsigned int *a2); +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos(_DWORD *this, _DWORD *a2, unsigned int *a3); +void __fastcall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree(int a1); +void __fastcall std::bad_cast::~bad_cast(_DWORD *a1); +void __cdecl std::bad_cast::~bad_cast(std::exception *a1); +// int *__userpurge std::ios_base::_M_grow_words@(_DWORD *a1@, int this, char a3, bool a4); +int __cdecl std::ios_base::sync_with_stdio(std::ios_base *this); +void __thiscall std::ios_base::_M_call_callbacks(_DWORD *this, int a2); +_DWORD *__thiscall std::ios_base::register_callback(_DWORD *this, int a2, int a3); +void __fastcall std::ios_base::_M_dispose_callbacks(int a1); +void std::ios_base::Init::Init(); +void std::ios_base::Init::Init(); +void __cdecl std::ios_base::Init::~Init(); +volatile signed __int32 **__thiscall std::ios_base::imbue(volatile signed __int32 **ecx0, volatile signed __int32 **this, volatile signed __int32 **a3); +int std::ios_base::xalloc(); +void __fastcall std::ios_base::_M_init(int a1); +// volatile signed __int32 **__userpurge std::ios_base::_M_move@(int a1@, std::ios_base *this, std::ios_base *a3); +// void __userpurge std::ios_base::_M_swap(std::ios_base *a1@, std::ios_base *this, std::ios_base *a3); +void __thiscall std::ios_base::failure[abi:cxx11]::failure(_DWORD *this, char *a2, int *a3); +void __thiscall std::ios_base::failure[abi:cxx11]::failure(_DWORD *this, int a2); +void __thiscall std::ios_base::failure[abi:cxx11]::failure(_DWORD *this, int a2, int *a3); +void __fastcall std::ios_base::failure[abi:cxx11]::~failure(_DWORD *Block); +void __cdecl std::ios_base::failure[abi:cxx11]::~failure(std::exception *a1); +// void __userpurge std::ios_base::failure::failure(_DWORD *a1@, std::ios_base::failure *this, const std::string *a3); +void __fastcall std::ios_base::failure::~failure(_DWORD *a1); +void __cdecl std::ios_base::failure::~failure(std::ios_base::failure *__hidden this); // idb +void __fastcall std::ios_base::ios_base(_DWORD *a1); +void __fastcall std::ios_base::~ios_base(int a1); +void __fastcall std::ios_base::~ios_base(int a1); +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::messages::messages(_DWORD *this, int a2); +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::messages::messages(_DWORD *this, int a2); +void __fastcall std::messages::~messages(_DWORD *Block); +void __fastcall std::messages::~messages(_DWORD *a1); +void __fastcall std::messages::~messages(_DWORD *a1); +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::messages::messages(_DWORD *this, int a2); +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4); +void __thiscall std::messages::messages(_DWORD *this, int a2); +void __fastcall std::messages::~messages(_DWORD *Block); +void __fastcall std::messages::~messages(_DWORD *a1); +void __fastcall std::messages::~messages(_DWORD *a1); +_DWORD *__thiscall std::numpunct::_M_initialize_numpunct(_DWORD *this, int a2); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2); +void __fastcall std::numpunct::~numpunct(_DWORD *a1); +void __fastcall std::numpunct::~numpunct(_DWORD *a1); +int __thiscall std::numpunct::_M_initialize_numpunct(_DWORD *this, int a2); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3); +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2); +void __fastcall std::numpunct::~numpunct(_DWORD *a1); +void __fastcall std::numpunct::~numpunct(_DWORD *a1); +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2); +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2); +void __fastcall std::time_get>::~time_get(_DWORD *Block); +void __cdecl std::time_get>::~time_get(std::locale::facet *a1); +void __cdecl std::time_get>::~time_get(std::locale::facet *a1); +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2); +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2); +void __fastcall std::time_get>::~time_get(_DWORD *Block); +void __cdecl std::time_get>::~time_get(std::locale::facet *a1); +void __cdecl std::time_get>::~time_get(std::locale::facet *a1); +BOOL __thiscall std::time_put>::time_put(_DWORD *this, int a2); +BOOL __thiscall std::time_put>::time_put(_DWORD *this, int a2); +void __fastcall std::time_put>::~time_put(_DWORD *Block); +void __cdecl std::time_put>::~time_put(std::locale::facet *a1); +void __cdecl std::time_put>::~time_put(std::locale::facet *a1); +BOOL __thiscall std::time_put>::time_put(_DWORD *this, int a2); +BOOL __thiscall std::time_put>::time_put(_DWORD *this, int a2); +void __fastcall std::time_put>::~time_put(_DWORD *Block); +void __cdecl std::time_put>::~time_put(std::locale::facet *a1); +void __cdecl std::time_put>::~time_put(std::locale::facet *a1); +void __fastcall std::bad_alloc::~bad_alloc(_DWORD *a1); +void __cdecl std::bad_alloc::~bad_alloc(std::exception *a1); +int __thiscall std::ios::exceptions(_DWORD *this, int a2); +int __thiscall std::ios::_M_setstate(_DWORD *this, int a2); +void *__thiscall std::ios::_M_cache_locale(_DWORD *this, int a2); +int __thiscall std::ios::tie(_DWORD *this, int a2); +int __thiscall std::ios::fill(int this, char a2); +BOOL __thiscall std::ios::init(int this, int a2); +int __thiscall std::ios::move(int this, std::ios_base *a2); +int __thiscall std::ios::move(int this, std::ios_base *a2); +void __thiscall std::ios::swap(int this, std::ios_base *a2); +int __thiscall std::ios::clear(_DWORD *this, int a2); +volatile signed __int32 **__thiscall std::ios::imbue(volatile signed __int32 **this, volatile signed __int32 **a2, volatile signed __int32 **a3); +int __thiscall std::ios::rdbuf(_DWORD *this, int a2); +int __thiscall std::ios::copyfmt(int this, _DWORD *a2); +int __thiscall std::ios::setstate(_DWORD *this, int a2); +int __thiscall std::ios::set_rdbuf(_DWORD *this, int a2); +void __thiscall std::ios::basic_ios(int this, int a2); +int __fastcall std::ios::basic_ios(int a1); +void __thiscall std::ios::basic_ios(int this, int a2); +int __fastcall std::ios::basic_ios(int a1); +void __fastcall std::ios::~ios(_DWORD *Block); +void __fastcall std::ios::~ios(int a1); +void __fastcall std::ios::~ios(int a1); +int __thiscall std::wios::exceptions(_DWORD *this, int a2); +int __thiscall std::wios::_M_setstate(_DWORD *this, int a2); +void *__thiscall std::wios::_M_cache_locale(_DWORD *this, int a2); +int __thiscall std::wios::tie(_DWORD *this, int a2); +int __thiscall std::wios::fill(int this, __int16 a2); +BOOL __thiscall std::wios::init(int this, int a2); +int __thiscall std::wios::move(int this, std::ios_base *a2); +int __thiscall std::wios::move(int this, std::ios_base *a2); +void __thiscall std::wios::swap(int this, std::ios_base *a2); +int __thiscall std::wios::clear(_DWORD *this, int a2); +volatile signed __int32 **__thiscall std::wios::imbue(volatile signed __int32 **this, volatile signed __int32 **a2, volatile signed __int32 **a3); +int __thiscall std::wios::rdbuf(_DWORD *this, int a2); +int __thiscall std::wios::copyfmt(int this, _DWORD *a2); +int __thiscall std::wios::setstate(_DWORD *this, int a2); +int __thiscall std::wios::set_rdbuf(_DWORD *this, int a2); +void __thiscall std::wios::basic_ios(int this, int a2); +int __fastcall std::wios::basic_ios(int a1); +void __thiscall std::wios::basic_ios(int this, int a2); +int __fastcall std::wios::basic_ios(int a1); +void __fastcall std::wios::~wios(_DWORD *Block); +void __fastcall std::wios::~wios(int a1); +void __fastcall std::wios::~wios(int a1); +void __fastcall std::exception::~exception(void *Block); +void __cdecl std::exception::~exception(std::exception *__hidden this); // idb +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2); +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2); +void __fastcall std::money_get>::~money_get(_DWORD *Block); +void __cdecl std::money_get>::~money_get(std::locale::facet *a1); +void __cdecl std::money_get>::~money_get(std::locale::facet *a1); +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2); +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2); +void __fastcall std::money_get>::~money_get(_DWORD *Block); +void __cdecl std::money_get>::~money_get(std::locale::facet *a1); +void __cdecl std::money_get>::~money_get(std::locale::facet *a1); +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2); +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2); +void __fastcall std::money_put>::~money_put(_DWORD *Block); +void __cdecl std::money_put>::~money_put(std::locale::facet *a1); +void __cdecl std::money_put>::~money_put(std::locale::facet *a1); +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2); +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2); +void __fastcall std::money_put>::~money_put(_DWORD *Block); +void __cdecl std::money_put>::~money_put(std::locale::facet *a1); +void __cdecl std::money_put>::~money_put(std::locale::facet *a1); +void __fastcall std::type_info::~type_info(void *Block); +void __cdecl std::type_info::~type_info(std::type_info *__hidden this); // idb +void __cdecl std::__pop_heap<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>(int a1, int a2, unsigned __int8 **a3, int (__cdecl **a4)(int, int)); +void __noreturn std::unexpected(void); // idb +void __cdecl std::__make_heap<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>(int a1, int a2, int (__cdecl **a3)(int, int)); +void __cdecl std::__adjust_heap<__gnu_cxx::__normal_iterator *,std::vector>>,int,std::pair,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>(int a1, int a2, int a3, _DWORD *a4, int (__cdecl *a5)(int, int)); +int __cdecl std::__int_to_char(_BYTE *a1, unsigned int a2, int a3, __int16 a4, char a5); +int __cdecl std::__int_to_char(_BYTE *a1, unsigned int a2, unsigned int a3, int a4, __int16 a5, char a6); +int __cdecl std::__int_to_char(_WORD *a1, unsigned int a2, int a3, __int16 a4, char a5); +int __cdecl std::__int_to_char(_WORD *a1, unsigned int a2, unsigned int a3, int a4, __int16 a5, char a6); +void (*std::get_terminate(void))(void); +__int32 __cdecl std::set_terminate(void (__noreturn *a1)(void)); +_BYTE *__cdecl std::__add_grouping(_BYTE *a1, char a2, char *a3, int a4, _BYTE *a5, _BYTE *a6); +_WORD *__cdecl std::__add_grouping(_WORD *a1, __int16 a2, char *a3, int a4, char *a5, char *a6); +void __cdecl std::__convert_to_v(unsigned __int8 *a1, double *a2, _DWORD *a3); +void __cdecl std::__convert_to_v(char *String, long double *a2, _DWORD *a3); +void __cdecl std::__convert_to_v(unsigned __int8 *a1, float *a2, _DWORD *a3); +void (*std::get_unexpected(void))(void); +__int32 __cdecl std::set_unexpected(void (__noreturn *a1)(void)); +int std::get_new_handler(void); +__int32 __cdecl std::set_new_handler(void (*a1)(void)); +int std::__convert_from_v(int *const *a1, char *a2, int a3, char *a4, ...); +void __cdecl std::__insertion_sort<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>(unsigned __int8 **a1, char *a2, int (__cdecl *a3)(void **, struct _Unwind_Exception *)); +int __cdecl std::__introsort_loop<__gnu_cxx::__normal_iterator *,std::vector>>,int,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>(_DWORD *a1, int a2, int a3, int (__cdecl *a4)(int, int)); +std::ostream::sentry *__cdecl std::__ostream_insert>(std::ostream::sentry *a1, int a2, int a3); +int *__cdecl std::__ostream_insert>(int *a1, int a2, int a3); +int __cdecl std::__copy_streambufs>(_DWORD *a1, _DWORD *a2); +int __cdecl std::__copy_streambufs>(_DWORD *a1, _DWORD *a2); +int __cdecl std::__verify_grouping(char *a1, unsigned int a2, int a3); +int __cdecl std::__verify_grouping(char *a1, unsigned int a2, const char **a3); +void (__cdecl ***std::iostream_category(void))(_anonymous_namespace_::io_error_category *__hidden this); +int __cdecl std::_Rb_tree_decrement(_DWORD *a1); +int __cdecl std::_Rb_tree_decrement(_DWORD *a1); +int __cdecl std::_Rb_tree_increment(int a1); +int __cdecl std::_Rb_tree_increment(int a1); +bool std::uncaught_exception(void); +int std::uncaught_exceptions(void); +int __cdecl std::_Rb_tree_black_count(_DWORD *a1, _DWORD *a2); +int __cdecl std::_Rb_tree_rotate_left(int a1, _DWORD *a2); +int __cdecl std::_Rb_tree_rotate_right(int a1, _DWORD *a2); +int __cdecl std::__copy_streambufs_eof>(_DWORD *a1, _DWORD *a2, _BYTE *a3); +int __cdecl std::__copy_streambufs_eof>(_DWORD *a1, _DWORD *a2, _BYTE *a3); +void __cdecl std::__destroy_ios_failure(std::exception *a1); +int __cdecl std::__verify_grouping_impl(const char *a1, unsigned int a2, const char *a3, unsigned int a4); +void __cdecl std::__construct_ios_failure(_DWORD *a1, char *a2); +bool __cdecl std::__is_ios_failure_handler(const __cxxabiv1::__class_type_info *a1); +void __noreturn std::__throw_out_of_range_fmt(char *Str, ...); +void __cdecl std::__unguarded_linear_insert<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Val_comp_iter const&,std::pair const&)>>(_DWORD *a1, int (__cdecl *a2)(void **, struct _Unwind_Exception *)); +int *__cdecl std::_Rb_tree_rebalance_for_erase(int *a1, _DWORD *a2); +_DWORD *__cdecl std::_Rb_tree_insert_and_rebalance(char a1, _DWORD *a2, _DWORD *a3, _DWORD *a4); +_DWORD *__cdecl std::ws>(_DWORD *a1); +_DWORD *__cdecl std::ws>(_DWORD *a1); +std::ios_base *__cdecl std::hex(std::ios_base *a1); +_DWORD *__cdecl std::endl>(std::ostream::sentry *a1); +_DWORD *__cdecl std::endl>(int *a1); +std::ostream::sentry *__cdecl std::ends>(std::ostream::sentry *a1); +int *__cdecl std::ends>(int *a1); +int __cdecl std::find<__gnu_cxx::__normal_iterator>,std::string>(int a1, int a2, int a3); +int __cdecl std::find<__gnu_cxx::__normal_iterator>,char const*>(int a1, int a2, char **a3); +int __cdecl std::find<__gnu_cxx::__normal_iterator>,std::string>(int a1, int a2, int a3); +void __cdecl std::sort<__gnu_cxx::__normal_iterator *,std::vector>>,bool (*)(std::pair const&,std::pair const&)>(char *a1, char *a2, int (__cdecl *a3)(int, int)); +_DWORD *__cdecl std::flush>(_DWORD *a1); +_DWORD *__cdecl std::flush>(_DWORD *a1); +std::istream::sentry *__cdecl std::getline,std::allocator>(std::istream::sentry *a1, _DWORD *a2); +std::istream::sentry *__cdecl std::getline,std::allocator>(std::istream::sentry *a1, _DWORD *a2, unsigned __int8 a3); +_DWORD *__cdecl std::getline,std::allocator>(_DWORD *a1, _DWORD *a2, __int16 a3); +int __cdecl std::setfill(unsigned __int8 a1); +int __cdecl std::setfill(unsigned __int16 a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +int __cdecl std::has_facet>>(int a1); +void __noreturn std::terminate(void); // idb +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +void *__cdecl std::use_facet>>(int a1); +bool __cdecl std::operator==(int a1, int a2); +bool __cdecl std::operator==(char *a1, int a2); +bool __cdecl std::operator==(int a1, char *a2); +std::ostream::sentry *__cdecl std::operator<<>(std::ostream::sentry *a1, char *Str); +std::ostream::sentry *__cdecl std::operator<<>(std::ostream::sentry *a1, char *Str); +std::ostream::sentry *__cdecl std::operator<<>(std::ostream::sentry *a1, char *Str); +std::ostream::sentry *__cdecl std::operator<<>(std::ostream::sentry *a1, char a2); +std::ostream::sentry *__cdecl std::operator<<>(std::ostream::sentry *a1, char a2); +std::ostream::sentry *__cdecl std::operator<<>(std::ostream::sentry *a1, char a2); +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator<<>(_DWORD *a1, char a2); +std::ostream::sentry *__cdecl std::operator<<(std::ostream::sentry *a1, int *a2); +int *__cdecl std::operator<<>(int *a1, wchar_t *String); +int *__cdecl std::operator<<>(int *a1, char *Str); +int *__cdecl std::operator<<>(int *a1, __int16 a2); +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator<<>(_DWORD *a1, __int16 a2); +int *__cdecl std::operator<<>(int *a1, char a2); +unsigned int __cdecl std::operator<(int a1, int a2); +int __cdecl std::operator!=(char *, int); // idb +int __cdecl std::operator!=(int, char *); // idb +int __cdecl std::operator!=(int a1, int a2); +_DWORD *__cdecl std::operator+(_DWORD *a1, _DWORD *a2, unsigned int *a3); +_DWORD *__cdecl std::operator+(_DWORD *a1, char *a2, unsigned int *a3); +int __cdecl std::operator+(int, char *Str, int); // idb +char *__cdecl std::operator+(char *a1, int a2, char *a3); +char *__cdecl std::operator+(char *a1, int a2, int a3); +int __cdecl std::operator+(int a1, char a2, int a3); +int *__cdecl std::operator+(int *a1, char *Str, std::string *a3); +int *__cdecl std::operator+(int *a1, _DWORD *a2, std::string *a3); +int *__cdecl std::operator+(int *a1, char a2, std::string *a3); +int __cdecl std::operator+(int, wchar_t *String, int); // idb +_DWORD *__cdecl std::operator+(_DWORD *a1, int a2, int a3); +int __cdecl std::operator+(int a1, __int16 a2, int a3); +int *__cdecl std::operator+(int *a1, wchar_t *String, _DWORD *a3); +int *__cdecl std::operator+(int *a1, _DWORD *a2, _DWORD *a3); +int *__cdecl std::operator+(int *a1, __int16 a2, _DWORD *a3); +std::istream::sentry *__cdecl std::operator>>>(std::istream::sentry *a1, char *a2); +std::istream::sentry *__cdecl std::operator>>>(std::istream::sentry *a1, _BYTE *a2); +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator>>>(_DWORD *a1, char a2); +std::istream::sentry *__cdecl std::operator>>(std::istream::sentry *a1, _DWORD *a2); +int *__cdecl std::operator>>>(int *a1, _WORD *a2); +_DWORD *__cdecl std::operator>>>(_DWORD *a1, _WORD *a2); +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2); +_DWORD *__cdecl std::operator>>>(_DWORD *a1, __int16 a2); +void __fastcall `non-virtual thunk to'std::iostream::~iostream(int a1); +void __fastcall `non-virtual thunk to'std::iostream::~iostream(_DWORD *a1); +void __fastcall `non-virtual thunk to'std::fstream::~fstream(int a1); +void __fastcall `non-virtual thunk to'std::fstream::~fstream(int a1); +void __fastcall `non-virtual thunk to'std::wfstream::~wfstream(int a1); +void __fastcall `non-virtual thunk to'std::wfstream::~wfstream(int a1); +void __fastcall `non-virtual thunk to'std::wiostream::~basic_iostream(int a1); +void __fastcall `non-virtual thunk to'std::wiostream::~basic_iostream(_DWORD *a1); +void __fastcall `non-virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream(int a1); +void __fastcall `non-virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream(int a1); +void __fastcall `non-virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream(int a1); +void __fastcall `non-virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream(int a1); +void __fastcall `virtual thunk to'std::iostream::~iostream(_DWORD *a1); +void __fastcall `virtual thunk to'std::iostream::~iostream(_DWORD *a1); +void __fastcall `virtual thunk to'std::istream::~istream(_DWORD *a1); +void __fastcall `virtual thunk to'std::istream::~istream(_DWORD *a1); +void __fastcall `virtual thunk to'std::ostream::~ostream(_DWORD *a1); +void __fastcall `virtual thunk to'std::ostream::~ostream(_DWORD *a1); +void __fastcall `virtual thunk to'std::fstream::~fstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::fstream::~fstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wfstream::~wfstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wfstream::~wfstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wistream::~wistream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wistream::~wistream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wostream::~wostream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wostream::~wostream(_DWORD *a1); +void __fastcall `virtual thunk to'std::ifstream::~ifstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::ifstream::~ifstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wifstream::~wifstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wifstream::~wifstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wiostream::~basic_iostream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wiostream::~basic_iostream(_DWORD *a1); +void __fastcall `virtual thunk to'std::ofstream::~ofstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::ofstream::~ofstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wofstream::~wofstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wofstream::~wofstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::istringstream::~istringstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::istringstream::~istringstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wistringstream::~wistringstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wistringstream::~wistringstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::ostringstream::~ostringstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::ostringstream::~ostringstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wostringstream::~wostringstream(_DWORD *a1); +void __fastcall `virtual thunk to'std::wostringstream::~wostringstream(_DWORD *a1); +int __fastcall std::filebuf::close(void)::__close_sentry::~__close_sentry(int *a1); +int __fastcall std::wfilebuf::close(void)::__close_sentry::~__close_sentry(int *a1); +void __cdecl operator delete[](void *Block); +void __cdecl operator delete(void *Block); +void __cdecl operator delete(void *Block); +_DWORD __cdecl operator new[](unsigned int); // idb +int __cdecl operator new[](unsigned int a1); +void *__cdecl operator new(size_t a1); +int __cxa_allocate_dependent_exception(); +void *__cdecl __cxa_allocate_exception(size_t thrown_size); +void *__cdecl __cxa_begin_catch(void *); +void __cdecl __noreturn __cxa_call_terminate(_Unwind_Exception *); +void __cdecl __noreturn __cxa_call_unexpected(void *); +struct type_info *__cxa_current_exception_type(void); +void __noreturn __cxa_deleted_virtual(void); +void __cxa_end_catch(void); +void __cdecl __cxa_free_dependent_exception(char *Block); +void __cdecl __cxa_free_exception(void *); +void *__cdecl __cxa_get_exception_ptr(void *); +_DWORD *__cxa_get_globals(); +_DWORD *__cxa_get_globals_fast(); +void __cdecl __cxa_guard_abort(__guard *); +int __cdecl __cxa_guard_acquire(__guard *); +void __cdecl __cxa_guard_release(__guard *); +int __cdecl __cxa_init_primary_exception(int a1, int a2, int a3); +void __noreturn __cxa_pure_virtual(void); +void __noreturn __cxa_rethrow(void); +void __cdecl __noreturn __cxa_throw(void *, struct type_info *lptinfo, void (__cdecl *)(void *)); +void *__cdecl __dynamic_cast(const void *lpsrc, const struct __class_type_info *lpstype, const struct __class_type_info *lpdtype, ptrdiff_t s2d); +int __cdecl __gxx_personality_sj0(int a1, int a2, __int64 a3, _Unwind_Exception *v, struct _Unwind_Context *lpuctx); +void __tcf_0_4(void); // idb +void __tcf_0_5(void); // idb +void __tcf_0_6(void); // idb +void __cdecl __tcf_0_7(std::_V2::error_category *a1); +void __tcf_0_8(void); // idb +void __tcf_1_6(void); // idb +int __cdecl main(int argc, const char **argv, const char **envp); +int _GLOBAL__sub_I__Z5UsageiPPKc(); +int _GLOBAL__sub_I__ZN4WXML8Compiler9GetFuncIdERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEERSB_(); +int _GLOBAL__sub_I__ZN5night8NSStreamC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_j(); +size_t __thiscall std::string::basic_string(void **this, char *Str); +int _GLOBAL__sub_I__ZN5night9sourcemap21gen_sourcemap_contentERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt3mapIS6_jSt4lessIS6_ESaISt4pairIS7_jEEES9_IjS6_SA_IjESaISC_IKjS6_EEERSt6vectorINS_12ns_sourcemapESaISM_EEiRS6_PS6_(); +size_t __thiscall std::string::basic_string(void **this, char *Str); +int _GLOBAL__sub_I__ZN5night3str12path_combineERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_RS6_(); +int _GLOBAL__sub_I__ZN4WXML6DOMLib7WXMLDom12componentCntE(); +int _GLOBAL__sub_I__ZN4WXML6DOMLib7Machine5ResetEv(); +int _GLOBAL__sub_I__ZN4WXML7EXPRLib7OPShort5CONSTE(); +int _GLOBAL__sub_I__ZNK4WXML7EXPRLib5Token12GetTokenNameEv(); +int _GLOBAL__sub_I__ZN4WXML7EXPRLib12TransitTable13GetExprNTTypeEv(); +int _GLOBAL__sub_I__ZN4WXML16StringTemplating4DealEPKcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERSt6vectorINS0_5TokenESaISB_EERb(); +int _GLOBAL__sub_I__ZN9__gnu_cxx9__freeresEv(); +void __noreturn __cxxabiv1::throw_recursive_init_exception(void); // idb +void _GLOBAL__sub_I__ZNSt12ctype_bynameIcEC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(); +void _GLOBAL__sub_I__ZNSt12ctype_bynameIwEC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(); +void __noreturn std::__throw_bad_exception(void); // idb +void __noreturn std::__throw_bad_alloc(void); // idb +void __noreturn std::__throw_bad_cast(void); // idb +void __noreturn std::__throw_bad_typeid(void); // idb +void __cdecl __noreturn std::__throw_logic_error(std::logic_error *); // idb +void __cdecl __noreturn std::__throw_domain_error(std::domain_error *); // idb +void __cdecl __noreturn std::__throw_invalid_argument(std::invalid_argument *); // idb +void __cdecl __noreturn std::__throw_length_error(std::length_error *); // idb +void __cdecl __noreturn std::__throw_out_of_range(std::out_of_range *); // idb +void __cdecl __noreturn std::__throw_runtime_error(std::runtime_error *); // idb +void __cdecl __noreturn std::__throw_range_error(std::range_error *); // idb +void __cdecl __noreturn std::__throw_overflow_error(std::overflow_error *); // idb +void __cdecl __noreturn std::__throw_underflow_error(std::underflow_error *); // idb +void _GLOBAL__sub_I__ZNSt12ctype_bynameIcEC2ERKSsj(); +void _GLOBAL__sub_I__ZNSt12ctype_bynameIwEC2ERKSsj(); +void __cdecl __noreturn d_type_cold(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11); +void __noreturn __cxa_bad_cast(void); +void __noreturn __cxa_bad_typeid(void); +void __noreturn __cxa_throw_bad_array_new_length(void); +void __cdecl __noreturn std::__throw_ios_failure(char *a1); +void __cdecl __noreturn std::__throw_ios_failure(std::__ios_failure *, std::runtime_error *); // idb +void __cdecl __noreturn std::__throw_system_error(int); // idb +int _GLOBAL__sub_I__ZSt20__throw_system_errori(); +int __cdecl ____mb_cur_max_func(); +unsigned int __cdecl ____lc_codepage_func(); +// int __stdcall _IAT_start__(_DWORD); weak + +//------------------------------------------------------------------------- +// Data declarations + +_UNKNOWN loc_460001; // weak +_UNKNOWN loc_4A0000; // weak +_UNKNOWN loc_50001E; // weak +int __CTOR_LIST__[] = { -1 }; // weak +DWORD _data_start__ = 10u; // idb +int WXML::RPX::acceptNum(char const*,int &)::canAccept[266] = +{ + 65536, + 1, + 0, + 16777472, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 5578424, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 5584002, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 5588324, + 5588327, + 5588330, + 5588333, + 5588335, + 5588337, + 5588339, + 5588341, + 5588343, + 5588345, + 5588347, + 5588349, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 5474724, + -1, + -1, + 255, + 2, + 0, + -1, + -1, + 0, + -1, + 53, + -1074, + 971, + 1, + 0, + 14, + 24, + -149, + 104, + 1, + 0, + 14, + -1, + 64, + -16445, + 16320, + 1, + 0, + 14, + 7772032, + 4641200, + 4641216, + 4641232, + 4641328, + 4641568, + 4641456, + 4641680, + 4641776, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4679456, + 5430400, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +}; // idb +int WXML::RPX::acceptStr(char const*,int &)::canAccept[266] = +{ + 0, + 16777472, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 5578424, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 5584002, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 5588324, + 5588327, + 5588330, + 5588333, + 5588335, + 5588337, + 5588339, + 5588341, + 5588343, + 5588345, + 5588347, + 5588349, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 1634027556, + 1280464228, + 1227104292, + 807412836, + 1768316767, + 1600087404, + 0, + 5474724, + -1, + -1, + 255, + 2, + 0, + -1, + -1, + 0, + -1, + 53, + -1074, + 971, + 1, + 0, + 14, + 24, + -149, + 104, + 1, + 0, + 14, + -1, + 64, + -16445, + 16320, + 1, + 0, + 14, + 7772032, + 4641200, + 4641216, + 4641232, + 4641328, + 4641568, + 4641456, + 4641680, + 4641776, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4679456, + 5430400, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +}; // idb +int WXML::RPX::acceptID(char const*,int &)::canAccept[266] = +{ + 1210319104, + 1432641893, + 539249746, + 610552100, + 1600073760, + 1701603686, + 24415, + 1210318848, + 1432641893, + 539249746, + 610552100, + 1600073760, + 1701603686, + 24415, + 515375104, + 1210318933, + 1432641893, + 539249746, + 610552100, + 1600073760, + 1701603686, + 24415, + 1210318848, + 1432641893, + 539249746, + 610552100, + 1600073760, + 1701603686, + 24415, + 1210318848, + 1432641893, + 539249746, + 610552100, + 1600073760, + 1701603686, + 24415, + 880934912, + 1210318933, + 1432641893, + 539249746, + 610552100, + 1600073760, + 1701603686, + 24415, + 1210318848, + 1432641893, + 539249746, + 610552100, + 1600073760, + 1701603686, + 24415, + 1210318848, + 1432641893, + 539249746, + 610552100, + 1600073760, + 1701603686, + 24415, + 1210318848, + 1432641893, + 539249746, + 610552100, + 1600073760, + 1701603686, + 24415, + 1164181504, + 1164378197, + 1164574805, + 1164771413, + 1164902485, + 1165033557, + 1165164629, + 1165295701, + 1165426773, + 1165557845, + 1165688917, + 1165819989, + 1210318933, + 1432641893, + 539249746, + 610552100, + 1600073760, + 1701603686, + 24415, + 1210318848, + 1432641893, + 539249746, + 610552100, + 1600073760, + 1701603686, + 24415, + 1210318848, + 1432641893, + 539249746, + 610552100, + 1600073760, + 1701603686, + 24415, + -1985740800, + -65453, + -1, + 16777215, + 131072, + 0, + -65536, + -1, + 65535, + -65536, + 3538943, + -70385664, + 63700991, + 65536, + 0, + 917504, + 1572864, + -9764864, + 6881279, + 65536, + 0, + 917504, + -65536, + 4259839, + -1077739520, + 1069613055, + 65536, + 0, + 917504, + -1753219072, + -776994698, + -775946170, + -774897594, + -768606138, + -752877498, + -760217530, + -745537466, + -739246010, + 70, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1730150400, + -595591097, + 82, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +}; // idb +char *WXML::NameAllocator::ALPAHBET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; // idb +char *night::sourcemap::g_sVLQ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; // weak +char *WXML::EXPRLib::OPShort::DO_FUNC = &unk_554564; // idb +void *WXML::EXPRLib::OPShort::CS_GLOBAL = &unk_554567; // weak +char *WXML::EXPRLib::OPShort::EX_DICT = &unk_55456A; // idb +char *WXML::EXPRLib::OPShort::UNION_KV = &unk_55456D; // idb +char *WXML::EXPRLib::OPShort::MAKE_KV = &unk_55456F; // idb +char *WXML::EXPRLib::OPShort::GET_FROM_ENV = &unk_554571; // idb +char *WXML::EXPRLib::OPShort::GET_NAME = &unk_554573; // idb +char *WXML::EXPRLib::OPShort::CON_LIST = &unk_554575; // idb +char *WXML::EXPRLib::OPShort::MAKE_LIST = &unk_554577; // idb +char *WXML::EXPRLib::OPShort::NAME = &unk_554579; // idb +char *WXML::EXPRLib::OPShort::AOP = &unk_55457B; // idb +char *WXML::EXPRLib::OPShort::CONST = &unk_55457D; // idb +int *data_1 = &dword_5389A4; // weak +int _CRT_MT = 2; // weak +int once_0 = 0; // weak +int dword_53E1EC = -1; // weak +int use_fc_key = -1; // weak +int once_0_0 = 0; // weak +int dword_53E1F8 = -1; // weak +int fpi_0[6] = { 53, -1074, 971, 1, 0, 14 }; // weak +int fpi0_0[6] = { 24, -149, 104, 1, 0, 14 }; // weak +int _MINGW_INSTALL_DEBUG_MATHERR = -1; // weak +int fpi_0_0[6] = { 64, -16445, 16320, 1, 0, 14 }; // weak +void *pmem_next = &private_mem; // weak +FILE *(__cdecl *___acrt_iob_func)(unsigned int Ix) = &__acrt_iob_func; +int (__cdecl *_rand_s)(int) = &init_rand_s; // weak +char `guard variable for'std::moneypunct::id = '\0'; // weak +char `guard variable for'std::moneypunct::id = '\0'; // weak +char `guard variable for'std::moneypunct::id = '\0'; // weak +char `guard variable for'std::moneypunct::id = '\0'; // weak +char `guard variable for'std::__timepunct::id = '\0'; // weak +char `guard variable for'std::__timepunct::id = '\0'; // weak +char `guard variable for'std::moneypunct::id = '\0'; // weak +char `guard variable for'std::moneypunct::id = '\0'; // weak +char `guard variable for'std::moneypunct::id = '\0'; // weak +char `guard variable for'std::moneypunct::id = '\0'; // weak +char `guard variable for'std::collate::id = '\0'; // weak +char `guard variable for'std::collate::id = '\0'; // weak +char `guard variable for'std::messages::id = '\0'; // weak +char `guard variable for'std::messages::id = '\0'; // weak +char `guard variable for'std::numpunct::id = '\0'; // weak +char `guard variable for'std::numpunct::id = '\0'; // weak +char `guard variable for'std::time_get>::id = '\0'; // weak +char `guard variable for'std::time_get>::id = '\0'; // weak +char `guard variable for'std::money_get>::id = '\0'; // weak +char `guard variable for'std::money_get>::id = '\0'; // weak +char `guard variable for'std::money_put>::id = '\0'; // weak +char `guard variable for'std::money_put>::id = '\0'; // weak +char `guard variable for'std::collate::id = '\0'; // weak +char `guard variable for'std::collate::id = '\0'; // weak +char `guard variable for'std::num_get>::id = '\0'; // weak +char `guard variable for'std::num_get>::id = '\0'; // weak +char `guard variable for'std::num_put>::id = '\0'; // weak +char `guard variable for'std::num_put>::id = '\0'; // weak +char `guard variable for'std::messages::id = '\0'; // weak +char `guard variable for'std::messages::id = '\0'; // weak +char `guard variable for'std::numpunct::id = '\0'; // weak +char `guard variable for'std::numpunct::id = '\0'; // weak +char `guard variable for'std::time_get>::id = '\0'; // weak +char `guard variable for'std::time_get>::id = '\0'; // weak +char `guard variable for'std::time_put>::id = '\0'; // weak +char `guard variable for'std::time_put>::id = '\0'; // weak +char `guard variable for'std::money_get>::id = '\0'; // weak +char `guard variable for'std::money_get>::id = '\0'; // weak +char `guard variable for'std::money_put>::id = '\0'; // weak +char `guard variable for'std::money_put>::id = '\0'; // weak +__guard `guard variable for'`anonymous namespace'::get_locale_mutex(void)::locale_mutex = 0; // idb +__guard `guard variable for'`anonymous namespace'::__io_category_instance(void)::__ec = 0; // idb +__guard `guard variable for'`anonymous namespace'::get_locale_cache_mutex(void)::locale_cache_mutex = 0; // idb +__guard `guard variable for'WXML::EXPRLib::TransitTable::GetInstance(void)::ret = 0; // idb +void (*__cxxabiv1::__terminate_handler)(void) = &__gnu_cxx::__verbose_terminate_handler; // idb +void (*__cxxabiv1::__unexpected_handler)(void) = &std::terminate; // idb +_DWORD `anonymous namespace'::fake_mutex[4] = { 0, 0, 0, 0 }; // weak +_DWORD `anonymous namespace'::messages_c[4] = { 0, 0, 0, 0 }; // weak +_DWORD `anonymous namespace'::messages_w[4] = { 0, 0, 0, 0 }; // weak +_UNKNOWN `anonymous namespace'::numpunct_c; // weak +int dword_53E40C = 0; // weak +int dword_53E410 = 0; // weak +_UNKNOWN `anonymous namespace'::numpunct_w; // weak +int dword_53E418 = 0; // weak +int dword_53E41C = 0; // weak +_UNKNOWN `anonymous namespace'::time_get_c; // weak +int dword_53E424 = 0; // weak +_UNKNOWN `anonymous namespace'::time_get_w; // weak +int dword_53E42C = 0; // weak +_UNKNOWN `anonymous namespace'::time_put_c; // weak +int dword_53E434 = 0; // weak +_UNKNOWN `anonymous namespace'::time_put_w; // weak +int dword_53E43C = 0; // weak +_UNKNOWN `anonymous namespace'::codecvt_c16; // weak +int dword_53E444 = 0; // weak +_UNKNOWN `anonymous namespace'::codecvt_c32; // weak +int dword_53E44C = 0; // weak +_UNKNOWN `anonymous namespace'::money_get_c; // weak +int dword_53E454 = 0; // weak +_UNKNOWN `anonymous namespace'::money_get_w; // weak +int dword_53E45C = 0; // weak +_UNKNOWN `anonymous namespace'::money_put_c; // weak +int dword_53E464 = 0; // weak +_UNKNOWN `anonymous namespace'::money_put_w; // weak +int dword_53E46C = 0; // weak +_DWORD `anonymous namespace'::timepunct_c[5] = { 0, 0, 0, 0, 0 }; // weak +_DWORD `anonymous namespace'::timepunct_w[5] = { 0, 0, 0, 0, 0 }; // weak +int `anonymous namespace'::__new_handler = 0; // weak +_DWORD `anonymous namespace'::c_locale_impl[5] = { 0, 0, 0, 0, 0 }; // weak +_UNKNOWN `anonymous namespace'::moneypunct_cf; // weak +int dword_53E4B4 = 0; // weak +int dword_53E4B8 = 0; // weak +_UNKNOWN `anonymous namespace'::moneypunct_ct; // weak +int dword_53E4C0 = 0; // weak +int dword_53E4C4 = 0; // weak +_UNKNOWN `anonymous namespace'::moneypunct_wf; // weak +int dword_53E4CC = 0; // weak +int dword_53E4D0 = 0; // weak +_UNKNOWN `anonymous namespace'::moneypunct_wt; // weak +int dword_53E4D8 = 0; // weak +int dword_53E4DC = 0; // weak +_UNKNOWN `anonymous namespace'::codecvt_c16_c8; // weak +int dword_53E4E4 = 0; // weak +_UNKNOWN `anonymous namespace'::codecvt_c32_c8; // weak +int dword_53E4EC = 0; // weak +_DWORD `anonymous namespace'::emergency_pool[2] = { 0, 0 }; // weak +int dword_53E4F8 = 0; // weak +void *Block = NULL; // idb +int dword_53E500 = 0; // weak +int `anonymous namespace'::numpunct_cache_c = 0; // weak +int dword_53E524 = 0; // weak +int dword_53E528 = 0; // weak +int dword_53E52C = 0; // weak +char byte_53E530 = '\0'; // weak +int dword_53E534 = 0; // weak +int dword_53E538 = 0; // weak +int dword_53E53C = 0; // weak +int dword_53E540 = 0; // weak +__int16 word_53E544 = 0; // weak +char byte_53E584 = '\0'; // weak +int `anonymous namespace'::numpunct_cache_w = 0; // weak +int dword_53E5A4 = 0; // weak +int dword_53E5A8 = 0; // weak +int dword_53E5AC = 0; // weak +char byte_53E5B0 = '\0'; // weak +int dword_53E5B4 = 0; // weak +int dword_53E5B8 = 0; // weak +int dword_53E5BC = 0; // weak +int dword_53E5C0 = 0; // weak +int dword_53E5C4 = 0; // weak +char byte_53E644 = '\0'; // weak +int `anonymous namespace'::timepunct_cache_c = 0; // weak +int dword_53E664 = 0; // weak +int dword_53E668 = 0; // weak +int dword_53E66C = 0; // weak +int dword_53E670 = 0; // weak +int dword_53E674 = 0; // weak +int dword_53E678 = 0; // weak +int dword_53E67C = 0; // weak +int dword_53E680 = 0; // weak +int dword_53E684 = 0; // weak +int dword_53E688 = 0; // weak +int dword_53E68C = 0; // weak +int dword_53E690 = 0; // weak +int dword_53E694 = 0; // weak +int dword_53E698 = 0; // weak +int dword_53E69C = 0; // weak +int dword_53E6A0 = 0; // weak +int dword_53E6A4 = 0; // weak +int dword_53E6A8 = 0; // weak +int dword_53E6AC = 0; // weak +int dword_53E6B0 = 0; // weak +int dword_53E6B4 = 0; // weak +int dword_53E6B8 = 0; // weak +int dword_53E6BC = 0; // weak +int dword_53E6C0 = 0; // weak +int dword_53E6C4 = 0; // weak +int dword_53E6C8 = 0; // weak +int dword_53E6CC = 0; // weak +int dword_53E6D0 = 0; // weak +int dword_53E6D4 = 0; // weak +int dword_53E6D8 = 0; // weak +int dword_53E6DC = 0; // weak +int dword_53E6E0 = 0; // weak +int dword_53E6E4 = 0; // weak +int dword_53E6E8 = 0; // weak +int dword_53E6EC = 0; // weak +int dword_53E6F0 = 0; // weak +int dword_53E6F4 = 0; // weak +int dword_53E6F8 = 0; // weak +int dword_53E6FC = 0; // weak +int dword_53E700 = 0; // weak +int dword_53E704 = 0; // weak +int dword_53E708 = 0; // weak +int dword_53E70C = 0; // weak +int dword_53E710 = 0; // weak +int dword_53E714 = 0; // weak +int dword_53E718 = 0; // weak +int dword_53E71C = 0; // weak +int dword_53E720 = 0; // weak +char byte_53E724 = '\0'; // weak +int `anonymous namespace'::timepunct_cache_w = 0; // weak +int dword_53E744 = 0; // weak +int dword_53E748 = 0; // weak +int dword_53E74C = 0; // weak +int dword_53E750 = 0; // weak +int dword_53E754 = 0; // weak +int dword_53E758 = 0; // weak +int dword_53E75C = 0; // weak +int dword_53E760 = 0; // weak +int dword_53E764 = 0; // weak +int dword_53E768 = 0; // weak +int dword_53E76C = 0; // weak +int dword_53E770 = 0; // weak +int dword_53E774 = 0; // weak +int dword_53E778 = 0; // weak +int dword_53E77C = 0; // weak +int dword_53E780 = 0; // weak +int dword_53E784 = 0; // weak +int dword_53E788 = 0; // weak +int dword_53E78C = 0; // weak +int dword_53E790 = 0; // weak +int dword_53E794 = 0; // weak +int dword_53E798 = 0; // weak +int dword_53E79C = 0; // weak +int dword_53E7A0 = 0; // weak +int dword_53E7A4 = 0; // weak +int dword_53E7A8 = 0; // weak +int dword_53E7AC = 0; // weak +int dword_53E7B0 = 0; // weak +int dword_53E7B4 = 0; // weak +int dword_53E7B8 = 0; // weak +int dword_53E7BC = 0; // weak +int dword_53E7C0 = 0; // weak +int dword_53E7C4 = 0; // weak +int dword_53E7C8 = 0; // weak +int dword_53E7CC = 0; // weak +int dword_53E7D0 = 0; // weak +int dword_53E7D4 = 0; // weak +int dword_53E7D8 = 0; // weak +int dword_53E7DC = 0; // weak +int dword_53E7E0 = 0; // weak +int dword_53E7E4 = 0; // weak +int dword_53E7E8 = 0; // weak +int dword_53E7EC = 0; // weak +int dword_53E7F0 = 0; // weak +int dword_53E7F4 = 0; // weak +int dword_53E7F8 = 0; // weak +int dword_53E7FC = 0; // weak +int dword_53E800 = 0; // weak +char byte_53E804 = '\0'; // weak +int `anonymous namespace'::moneypunct_cache_cf = 0; // weak +int dword_53E824 = 0; // weak +int dword_53E828 = 0; // weak +int dword_53E82C = 0; // weak +__int16 word_53E830 = 0; // weak +char byte_53E832 = '\0'; // weak +int dword_53E834 = 0; // weak +int dword_53E838 = 0; // weak +int dword_53E83C = 0; // weak +int dword_53E840 = 0; // weak +int dword_53E844 = 0; // weak +int dword_53E848 = 0; // weak +int dword_53E84C = 0; // weak +int dword_53E850 = 0; // weak +int dword_53E854 = 0; // weak +char byte_53E863 = '\0'; // weak +int `anonymous namespace'::moneypunct_cache_ct = 0; // weak +int dword_53E884 = 0; // weak +int dword_53E888 = 0; // weak +int dword_53E88C = 0; // weak +__int16 word_53E890 = 0; // weak +char byte_53E892 = '\0'; // weak +int dword_53E894 = 0; // weak +int dword_53E898 = 0; // weak +int dword_53E89C = 0; // weak +int dword_53E8A0 = 0; // weak +int dword_53E8A4 = 0; // weak +int dword_53E8A8 = 0; // weak +int dword_53E8AC = 0; // weak +int dword_53E8B0 = 0; // weak +int dword_53E8B4 = 0; // weak +char byte_53E8C3 = '\0'; // weak +int `anonymous namespace'::moneypunct_cache_wf = 0; // weak +int dword_53E8E4 = 0; // weak +int dword_53E8E8 = 0; // weak +int dword_53E8EC = 0; // weak +char byte_53E8F0 = '\0'; // weak +int dword_53E8F2 = 0; // weak +int dword_53E8F8 = 0; // weak +int dword_53E8FC = 0; // weak +int dword_53E900 = 0; // weak +int dword_53E904 = 0; // weak +int dword_53E908 = 0; // weak +int dword_53E90C = 0; // weak +int dword_53E910 = 0; // weak +int dword_53E914 = 0; // weak +int dword_53E918 = 0; // weak +char byte_53E932 = '\0'; // weak +int `anonymous namespace'::moneypunct_cache_wt = 0; // weak +int dword_53E944 = 0; // weak +int dword_53E948 = 0; // weak +int dword_53E94C = 0; // weak +char byte_53E950 = '\0'; // weak +int dword_53E952 = 0; // weak +int dword_53E958 = 0; // weak +int dword_53E95C = 0; // weak +int dword_53E960 = 0; // weak +int dword_53E964 = 0; // weak +int dword_53E968 = 0; // weak +int dword_53E96C = 0; // weak +int dword_53E970 = 0; // weak +int dword_53E974 = 0; // weak +int dword_53E978 = 0; // weak +char byte_53E992 = '\0'; // weak +__int16 `anonymous namespace'::name_c = 0; // weak +_DWORD `anonymous namespace'::ctype_c[136] = +{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +}; // weak +_DWORD `anonymous namespace'::ctype_w[184] = +{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +}; // weak +_DWORD `anonymous namespace'::c_locale = 0; // weak +int `anonymous namespace'::name_vec = 0; // weak +int dword_53EEC8 = 0; // weak +int dword_53EECC = 0; // weak +int dword_53EED0 = 0; // weak +int dword_53EED4 = 0; // weak +int dword_53EED8 = 0; // weak +_UNKNOWN `anonymous namespace'::cache_vec; // weak +_DWORD `anonymous namespace'::codecvt_c[3] = { 0, 0, 0 }; // weak +_DWORD `anonymous namespace'::codecvt_w[3] = { 0, 0, 0 }; // weak +_UNKNOWN `anonymous namespace'::collate_c; // weak +int dword_53EFBC = 0; // weak +int dword_53EFC0 = 0; // weak +_UNKNOWN `anonymous namespace'::collate_w; // weak +int dword_53EFC8 = 0; // weak +int dword_53EFCC = 0; // weak +_UNKNOWN `anonymous namespace'::facet_vec; // weak +_UNKNOWN `anonymous namespace'::num_get_c; // weak +int dword_53F0A4 = 0; // weak +_UNKNOWN `anonymous namespace'::num_get_w; // weak +int dword_53F0AC = 0; // weak +_UNKNOWN `anonymous namespace'::num_put_c; // weak +int dword_53F0B4 = 0; // weak +_UNKNOWN `anonymous namespace'::num_put_w; // weak +int dword_53F0BC = 0; // weak +int `anonymous namespace'::static_mutex = 0; // weak +void (__cdecl **`anonymous namespace'::system_category_instance[2])(_anonymous_namespace_::system_error_category *__hidden this) = { &off_55F194, &off_55F1BC }; // weak +void (__cdecl **`anonymous namespace'::generic_category_instance)(_anonymous_namespace_::generic_error_category *__hidden this) = &off_55F1BC; // weak +_UNKNOWN __gnu_internal::buf_cin_sync; // weak +int dword_53F0E4 = 0; // weak +int dword_53F0E8 = 0; // weak +int dword_53F0EC = 0; // weak +int dword_53F0F0 = 0; // weak +int dword_53F0F4 = 0; // weak +int dword_53F0F8 = 0; // weak +_DWORD dword_53F0FC = 0; // weak +int dword_53F100 = 0; // weak +int dword_53F104 = 0; // weak +_UNKNOWN __gnu_internal::buf_cerr_sync; // weak +int dword_53F124 = 0; // weak +int dword_53F128 = 0; // weak +int dword_53F12C = 0; // weak +int dword_53F130 = 0; // weak +int dword_53F134 = 0; // weak +int dword_53F138 = 0; // weak +_DWORD dword_53F13C = 0; // weak +int dword_53F140 = 0; // weak +int dword_53F144 = 0; // weak +_UNKNOWN __gnu_internal::buf_cout_sync; // weak +int dword_53F164 = 0; // weak +int dword_53F168 = 0; // weak +int dword_53F16C = 0; // weak +int dword_53F170 = 0; // weak +int dword_53F174 = 0; // weak +int dword_53F178 = 0; // weak +_DWORD dword_53F17C = 0; // weak +int dword_53F180 = 0; // weak +int dword_53F184 = 0; // weak +_UNKNOWN __gnu_internal::buf_wcin_sync; // weak +int dword_53F1A4 = 0; // weak +int dword_53F1A8 = 0; // weak +int dword_53F1AC = 0; // weak +int dword_53F1B0 = 0; // weak +int dword_53F1B4 = 0; // weak +int dword_53F1B8 = 0; // weak +_DWORD dword_53F1BC = 0; // weak +int dword_53F1C0 = 0; // weak +__int16 word_53F1C4 = 0; // weak +_UNKNOWN __gnu_internal::buf_wcerr_sync; // weak +int dword_53F1E4 = 0; // weak +int dword_53F1E8 = 0; // weak +int dword_53F1EC = 0; // weak +int dword_53F1F0 = 0; // weak +int dword_53F1F4 = 0; // weak +int dword_53F1F8 = 0; // weak +_DWORD dword_53F1FC = 0; // weak +int dword_53F200 = 0; // weak +__int16 word_53F204 = 0; // weak +_UNKNOWN __gnu_internal::buf_wcout_sync; // weak +int dword_53F224 = 0; // weak +int dword_53F228 = 0; // weak +int dword_53F22C = 0; // weak +int dword_53F230 = 0; // weak +int dword_53F234 = 0; // weak +int dword_53F238 = 0; // weak +_DWORD dword_53F23C = 0; // weak +int dword_53F240 = 0; // weak +__int16 word_53F244 = 0; // weak +char __gnu_internal::buf_cin[128] = +{ + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0' +}; // weak +char __gnu_internal::buf_cerr[128] = +{ + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0' +}; // weak +char __gnu_internal::buf_cout[128] = +{ + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0' +}; // weak +char __gnu_internal::buf_wcin[128] = +{ + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0' +}; // weak +char __gnu_internal::buf_wcerr[128] = +{ + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0' +}; // weak +char __gnu_internal::buf_wcout[128] = +{ + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0', + '\0' +}; // weak +_UNKNOWN std::wstring::_Rep::_S_empty_rep_storage; // weak +_UNKNOWN std::string::_Rep::_S_empty_rep_storage; // weak +char *std::__num_base::_S_atoms_in[3] = +{ + "-+xX0123456789abcdefABCDEF", + "-+xX0123456789abcdef0123456789ABCDEF", + "-0123456789" +}; // weak +char *std::__num_base::_S_atoms_out[2] = { "-+xX0123456789abcdef0123456789ABCDEF", "-0123456789" }; // weak +char *std::money_base::_S_atoms = "-0123456789"; // weak +signed __int32 std::moneypunct::id = 0; // weak +signed __int32 std::moneypunct::id = 0; // weak +signed __int32 std::moneypunct::id = 0; // weak +signed __int32 std::moneypunct::id = 0; // weak +signed __int32 std::__timepunct::id = 0; // weak +signed __int32 std::__timepunct::id = 0; // weak +_DWORD std::`anonymous namespace'::messages_c = 0; // weak +signed __int32 dword_53F5A8[3] = { 0, 0, 0 }; // weak +_DWORD std::`anonymous namespace'::messages_w = 0; // weak +signed __int32 dword_53F5B8[3] = { 0, 0, 0 }; // weak +int std::`anonymous namespace'::numpunct_c = 0; // weak +int dword_53F5C8 = 0; // weak +int dword_53F5CC = 0; // weak +int std::`anonymous namespace'::numpunct_w = 0; // weak +int dword_53F5D4 = 0; // weak +int dword_53F5D8 = 0; // weak +int std::`anonymous namespace'::time_get_c = 0; // weak +int dword_53F5E0 = 0; // weak +int std::`anonymous namespace'::time_get_w = 0; // weak +int dword_53F5E8 = 0; // weak +int std::`anonymous namespace'::money_get_c = 0; // weak +int dword_53F5F0 = 0; // weak +int std::`anonymous namespace'::money_get_w = 0; // weak +int dword_53F5F8 = 0; // weak +int std::`anonymous namespace'::money_put_c = 0; // weak +int dword_53F600 = 0; // weak +int std::`anonymous namespace'::money_put_w = 0; // weak +int dword_53F608 = 0; // weak +int std::`anonymous namespace'::moneypunct_cf = 0; // weak +int dword_53F610 = 0; // weak +int dword_53F614 = 0; // weak +int std::`anonymous namespace'::moneypunct_ct = 0; // weak +int dword_53F61C = 0; // weak +int dword_53F620 = 0; // weak +int std::`anonymous namespace'::moneypunct_wf = 0; // weak +int dword_53F628 = 0; // weak +int dword_53F62C = 0; // weak +int std::`anonymous namespace'::moneypunct_wt = 0; // weak +int dword_53F634 = 0; // weak +int dword_53F638 = 0; // weak +int std::`anonymous namespace'::collate_c = 0; // weak +int dword_53F640 = 0; // weak +int dword_53F644 = 0; // weak +int std::`anonymous namespace'::collate_w = 0; // weak +int dword_53F64C = 0; // weak +int dword_53F650 = 0; // weak +void *std::__timepunct_cache::_S_timezones[2] = { &off_559F1E, &off_559F22 }; // weak +wchar_t *std::__timepunct_cache::_S_timezones[3] = { L"GMT", L"HST", L"AKST" }; // weak +signed __int32 std::ctype::id = 0; // weak +signed __int32 std::ctype::id = 0; // weak +int std::locale::_S_classic = 0; // weak +int std::locale::id::_S_refcount = 0; // weak +int std::locale::facet::_S_c_locale = 0; // weak +_UNKNOWN std::locale::facet::_S_once; // weak +_UNKNOWN std::locale::_S_once; // weak +int std::locale::_S_global = 0; // weak +signed __int32 std::moneypunct::id = 0; // weak +signed __int32 std::moneypunct::id = 0; // weak +signed __int32 std::moneypunct::id = 0; // weak +signed __int32 std::moneypunct::id = 0; // weak +signed __int32 std::collate::id = 0; // weak +signed __int32 std::collate::id = 0; // weak +signed __int32 std::messages::id = 0; // weak +signed __int32 std::messages::id = 0; // weak +signed __int32 std::numpunct::id = 0; // weak +signed __int32 std::numpunct::id = 0; // weak +signed __int32 std::time_get>::id = 0; // weak +signed __int32 std::time_get>::id = 0; // weak +signed __int32 std::money_get>::id = 0; // weak +signed __int32 std::money_get>::id = 0; // weak +signed __int32 std::money_put>::id = 0; // weak +signed __int32 std::money_put>::id = 0; // weak +_UNKNOWN std::codecvt::id; // weak +_UNKNOWN std::codecvt::id; // weak +_UNKNOWN std::codecvt::id; // weak +_UNKNOWN std::codecvt::id; // weak +signed __int32 std::codecvt::id = 0; // weak +signed __int32 std::codecvt::id = 0; // weak +signed __int32 std::collate::id = 0; // weak +signed __int32 std::collate::id = 0; // weak +signed __int32 std::num_get>::id = 0; // weak +signed __int32 std::num_get>::id = 0; // weak +signed __int32 std::num_put>::id = 0; // weak +signed __int32 std::num_put>::id = 0; // weak +int std::ios_base::Init::_S_refcount = 0; // weak +char std::ios_base::Init::_S_synced_with_stdio = '\x01'; // weak +signed __int32 std::messages::id = 0; // weak +signed __int32 std::messages::id = 0; // weak +signed __int32 std::numpunct::id = 0; // weak +signed __int32 std::numpunct::id = 0; // weak +signed __int32 std::time_get>::id = 0; // weak +signed __int32 std::time_get>::id = 0; // weak +signed __int32 std::time_put>::id = 0; // weak +signed __int32 std::time_put>::id = 0; // weak +signed __int32 std::money_get>::id = 0; // weak +signed __int32 std::money_get>::id = 0; // weak +signed __int32 std::money_put>::id = 0; // weak +signed __int32 std::money_put>::id[5] = { 0, 0, 0, 0, 0 }; // weak +int std::cin = 0; // weak +int dword_53F7C4 = 0; // weak +int dword_53F7C8[28] = +{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +}; // weak +int dword_53F838 = 0; // weak +__int16 word_53F83C = 0; // weak +int dword_53F840 = 0; // weak +int dword_53F844 = 0; // weak +int dword_53F848 = 0; // weak +int dword_53F84C = 0; // weak +int std::cerr = 0; // weak +int dword_53F864 = 0; // weak +int dword_53F870 = 0; // weak +int dword_53F8D4 = 0; // weak +__int16 word_53F8D8 = 0; // weak +int dword_53F8DC = 0; // weak +int dword_53F8E0 = 0; // weak +int dword_53F8E4 = 0; // weak +int dword_53F8E8 = 0; // weak +int std::clog = 0; // weak +int dword_53F904[28] = +{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +}; // weak +int dword_53F974 = 0; // weak +__int16 word_53F978 = 0; // weak +int dword_53F97C = 0; // weak +int dword_53F980 = 0; // weak +int dword_53F984 = 0; // weak +int dword_53F988 = 0; // weak +int std::cout = 0; // weak +int dword_53F9A4[28] = +{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +}; // weak +int dword_53FA14 = 0; // weak +__int16 word_53FA18 = 0; // weak +int dword_53FA1C = 0; // weak +int dword_53FA20 = 0; // weak +int dword_53FA24 = 0; // weak +int dword_53FA28 = 0; // weak +int std::wcin = 0; // weak +int dword_53FA44 = 0; // weak +int dword_53FA48[28] = +{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +}; // weak +int dword_53FAB8 = 0; // weak +__int16 word_53FABC = 0; // weak +char byte_53FABE = '\0'; // weak +int dword_53FAC0 = 0; // weak +int dword_53FAC4 = 0; // weak +int dword_53FAC8 = 0; // weak +int dword_53FACC = 0; // weak +int std::wcerr = 0; // weak +int dword_53FAE4 = 0; // weak +int dword_53FAF0 = 0; // weak +int dword_53FB54 = 0; // weak +__int16 word_53FB58 = 0; // weak +char byte_53FB5A = '\0'; // weak +int dword_53FB5C = 0; // weak +int dword_53FB60 = 0; // weak +int dword_53FB64 = 0; // weak +int dword_53FB68 = 0; // weak +int std::wclog = 0; // weak +int dword_53FB84[28] = +{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +}; // weak +int dword_53FBF4 = 0; // weak +__int16 word_53FBF8 = 0; // weak +char byte_53FBFA = '\0'; // weak +int dword_53FBFC = 0; // weak +int dword_53FC00 = 0; // weak +int dword_53FC04 = 0; // weak +int dword_53FC08 = 0; // weak +int std::wcout = 0; // weak +int dword_53FC24[28] = +{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +}; // weak +int dword_53FC94 = 0; // weak +__int16 word_53FC98 = 0; // weak +char byte_53FC9A = '\0'; // weak +int dword_53FC9C = 0; // weak +int dword_53FCA0 = 0; // weak +int dword_53FCA4 = 0; // weak +int dword_53FCA8 = 0; // weak +_DWORD `anonymous namespace'::get_locale_mutex(void)::locale_mutex[2] = { 0, 0 }; // weak +_UNKNOWN `anonymous namespace'::get_static_mutex(void)::once; // weak +void (__cdecl **`anonymous namespace'::__io_category_instance(void)::__ec)(_anonymous_namespace_::io_error_category *__hidden this) = &off_55F16C; // weak +_DWORD `anonymous namespace'::get_locale_cache_mutex(void)::locale_cache_mutex[2] = { 0, 0 }; // weak +_DWORD WXML::EXPRLib::TransitTable::GetInstance(void)::ret = 0; // weak +int dword_53FCE0 = 0; // weak +int dword_53FCE4 = 0; // weak +int dword_53FCE8 = 0; // weak +int dword_53FCEC = 0; // weak +int dword_53FCF0 = 0; // weak +char byte_53FCF4 = '\0'; // weak +char __gnu_cxx::__verbose_terminate_handler(void)::terminating = '\0'; // weak +int std::ios_base::xalloc(void)::_S_top = 0; // weak +size_t __emutls_v__ZZN12_GLOBAL__N_110get_globalEvE6global[4] = { 8u, 4u, 0u, 0u }; // weak +const char byte_5402D0 = '\0'; // idb +const char off_5403C3[] = { 's', '\0', 'e', '\0' }; // idb +const char byte_540876 = '\0'; // idb +const char off_540894[] = { 'u', 'r', 'l', '\0' }; // idb +const char aIfThisThisGUnd[] = "if(this&&this.__g===undefined)Object.defineProperty(this,\"__g\",{configurable:false,enumerable:false,writable:false,value:function(){function D(e,t){if(typeof t!=\"undefined\")e.children.push(t)}function S(e){if(typeof e!=\"undefined\")return{tag:\"virtual\",wxKey:e,children:[]};return{tag:\"virtual\",children:[]}}function v(e){$gwxc++;if($gwxc>=16e3){throw\"Dom limit exceeded, please check if there's any mistake you've made.\"}return{tag:\"wx-\"+e,attr:{},children:[],n:[],raw:{},generics:{}}}function e(e,t){t&&e.properities.push(t)}function t(e,t,r){return typeof e[r]!=\"undefined\"?e[r]:t[r]}function u(e){console.warn(\"WXMLRT_\"+g+\":\"+e)}function r(e,t){u(t+\":-1:-1:-1: Template `\"+e+\"` is being called recursively, will be stop.\")}var s=console.warn;var n=console.log;function o(){function e(){}e.prototype={hn:function(e,t){if(typeof e==\"object\"){var r=0;var n=false,o=false;for(var a in e){n=n|a===\"__value__\";o=o|a===\"__wxspec__\";r++;if(r>2)break}return r==2&&n&&o&&(t||e.__wxspec__!==\"m\"||this.hn(e.__value__)===\"h\")?\"h\":\"n\"}return\"n\"},nh:function(e,t){return{__value__:e,__wxspec__:t?t:true}},rv:function(e){return this.hn(e,true)===\"n\"?e:this.rv(e.__value__)},hm:function(e){if(typeof e==\"object\"){var t=0;var r=false,n=false;for(var o in e){r=r|o===\"__value__\";n=n|o===\"__wxspec__\";t++;if(t>2)break}return t==2&&r&&n&&(e.__wxspec__===\"m\"||this.hm(e.__value__))}return false}};return new e}var A=o();function T(e){var t=e.split(\"\\n \"+\" \"+\" \"+\" \");for(var r=0;r=\":case\"<=\":case\">\":case\"<\":case\"<<\":case\">>\":p=x(e[1],t,r,n,o,a);u=x(e[2],t,r,n,o,a);l=M&&(A.hn(p)===\"h\"||A.hn(u)===\"h\");switch(i){case\"+\":f=A.rv(p)+A.rv(u);break;case\"*\":f=A.rv(p)*A.rv(u);break;case\"/\":f=A.rv(p)/A.rv(u);break;case\"%\":f=A.rv(p)%A.rv(u);break;case\"|\":f=A.rv(p)|A.rv(u);break;case\"^\":f=A.rv(p)^A.rv(u);break;case\"&\":f=A.rv(p)&A.rv(u);break;case\"===\":f=A.rv(p)===A.rv(u);break;case\"==\":f=A.rv(p)==A.rv(u);break;case\"!=\":f=A.rv(p)!=A.rv(u);break;case\"!==\":f=A.rv(p)!==A.rv(u);break;case\">=\":f=A.rv(p)>=A.rv(u);break;case\"<=\":f=A.rv(p)<=A.rv(u);break;case\">\":f=A.rv(p)>A.rv(u);break;case\"<\":f=A.rv(p)>\":f=A.rv(p)>>A.rv(u);break;default:break}return l?A.nh(f,\"c\"):f;break;case\"-\":p=e.length===3?x(e[1],t,r,n,o,a):0;u=e.length===3?x(e[2],t,r,n,o,a):x(e[1],t,r,n,o,a);l=M&&(A.hn(p)===\"h\"||A.hn(u)===\"h\");f=l?A.rv(p)-A.rv(u):p-u;return l?A.nh(f,\"c\"):f;break;case\"!\":p=x(e[1],t,r,n,o,a);l=M&&A.hn(p)==\"h\";f=!A.rv(p);return l?A.nh(f,\"c\"):f;case\"~\":p=x(e[1],t,r,n,o,a);l=M&&A.hn(p)==\"h\";f=~A.rv(p);return l?A.nh(f,\"c\"):f;default:s(\"unrecognized op\"+i)}}function x(e,t,r,n,o,a){var i=e[0];var p=false;if(typeof a!==\"undefined\")o.ap=a;if(typeof i===\"object\"){var u=i[0];var l,f,v,c,s,y,b,d,h,_,g;switch(u){case 2:return m(e,t,r,n,o);break;case 4:return x(e[1],t,r,n,o,p);break;case 5:switch(e.length){case 2:l=x(e[1],t,r,n,o,p);return M?[l]:[A.rv(l)];return[l];break;case 1:return[];break;default:l=x(e[1],t,r,n,o,p);v=x(e[2],t,r,n,o,p);l.push(M?v:A.rv(v));return l;break}break;case 6:l=x(e[1],t,r,n,o);var w=o.ap;h=A.hn(l)===\"h\";f=h?A.rv(l):l;o.is_affected|=h;if(M){if(f===null||typeof f===\"undefined\"){return h?A.nh(undefined,\"e\"):undefined}v=x(e[2],t,r,n,o,p);_=A.hn(v)===\"h\";c=_?A.rv(v):v;o.ap=w;o.is_affected|=_;if(c===null||typeof c===\"undefined\"||c===\"__proto__\"||c===\"prototype\"||c===\"caller\"){return h||_?A.nh(undefined,\"e\"):undefined}y=f[c];if(typeof y===\"function\"&&!w)y=undefined;g=A.hn(y)===\"h\";o.is_affected|=g;return h||_?g?y:A.nh(y,\"e\"):y}else{if(f===null||typeof f===\"undefined\"){return undefined}v=x(e[2],t,r,n,o,p);_=A.hn(v)===\"h\";c=_?A.rv(v):v;o.ap=w;o.is_affected|=_;if(c===null||typeof c===\"undefined\"||c===\"__proto__\"||c===\"prototype\"||c===\"caller\"){return undefined}y=f[c];if(typeof y===\"function\"&&!w)y=undefined;g=A.hn(y)===\"h\";o.is_affected|=g;return g?A.rv(y):y}case 7:switch(e[1][0]){case 11:o.is_affected|=A.hn(n)===\"h\";return n;case 3:b=A.rv(r);d=A.rv(t);v=e[1][1];if(n&&n.f&&n.f.hasOwnProperty(v)){l=n.f;o.ap=true}else{l=b&&b.hasOwnProperty(v)?r:d&&d.hasOwnProperty(v)?t:undefined}if(M){if(l){h=A.hn(l)===\"h\";f=h?A.rv(l):l;y=f[v];g=A.hn(y)===\"h\";o.is_affected|=h||g;y=h&&!g?A.nh(y,\"e\"):y;return y}}else{if(l){h=A.hn(l)===\"h\";f=h?A.rv(l):l;y=f[v];g=A.hn(y)===\"h\";o.is_affected|=h||g;return A.rv(y)}}return undefined}break;case 8:l={};l[e[1]]=x(e[2],t,r,n,o,p);return l;break;case 9:l=x(e[1],t,r,n,o,p);v=x(e[2],t,r,n,o,p);function O(e,t,r){var n,o;h=A.hn(e)===\"h\";_=A.hn(t)===\"h\";f=A.rv(e);c=A.rv(t);for(var a in c){if(r||!f.hasOwnProperty(a)){f[a]=M?_?A.nh(c[a],\"e\"):c[a]:A.rv(c[a])}}return e}var s=l;var j=true;if(typeof e[1][0]===\"object\"&&e[1][0][0]===10){l=v;v=s;j=false}if(typeof e[1][0]===\"object\"&&e[1][0][0]===10){var P={};return O(O(P,l,j),v,j)}else return O(l,v,j);break;case 10:l=x(e[1],t,r,n,o,p);l=M?l:A.rv(l);return l;break;case 12:var P;l=x(e[1],t,r,n,o);if(!o.ap){return M&&A.hn(l)===\"h\"?A.nh(P,\"f\"):P}var w=o.ap;v=x(e[2],t,r,n,o,p);o.ap=w;h=A.hn(l)===\"h\";_=N(v);f=A.rv(l);c=A.rv(v);snap_bb=K(c,\"nv_\");try{P=typeof f===\"function\"?K(f.apply(null,snap_bb)):undefined}catch(t){t.message=t.message.replace(/nv_/g,\"\");t.stack=t.stack.substring(0,t.stack.indexOf(\"\\n\",t.stack.lastIndexOf(\"at nv_\")));t.stack=t.stack.replace(/\\snv_/g,\" \");t.stack=T(t.stack);if(n.debugInfo){t.stack+=\"\\n \"+\" \"+\" \"+\" at \"+n.debugInfo[0]+\":\"+n.debugInfo[1]+\":\"+n.debugInfo[2];console.error(t)}P=undefined}return M&&(_||h)?A.nh(P,\"f\"):P}}else{if(i===3||i===1)return e[1];else if(i===11){var l=\"\";for(var D=1;D=0;o--){if(r[e].i[o]&&n[r[e].i[o]][t])return n[r[e].i[o]][t]}for(var o=r[e].ti.length-1;o>=0;o--){var a=ne(r[e].ti[o],r,e);if(a&&n[a][t])return n[a][t]}var i=ae(r,e);for(var o=0;o=0;p--)if(r[e].j[p]){for(var a=r[r[e].j[p]].ti.length-1;a>=0;a--){var u=ne(r[r[e].j[p]].ti[a],r,e);if(u&&n[u][t]){return n[u][t]}}}}function ae(e,t){if(!t)return[];if($gaic[t]){return $gaic[t]}var r=[],n=[],o=0,a=0,i={},p={};n.push(t);p[t]=true;a++;while(o2)break;\n}\nreturn cnt == 2 && any1 && any2 && (obj.__wxspec__ === 'm' || this.hm(obj.__value__) );\n}\nreturn false;\n}\n}\nreturn new x;\n}\nwh=$gwh();\nfunction $gstack(s){\nvar tmp=s.split('\\n '+' '+' '+' ');\nfor(var i=0;i=':\ncase '<=':\ncase '>':\ncase '<':\ncase '<<':\ncase '>>':\n_a = rev( ops[1], e, s, g, o, _f );\n_b = rev( ops[2], e, s, g, o, _f );\n_c = should_pass_type_info && (wh.hn( _a ) === 'h' || wh.hn( _b ) === 'h');\nswitch( rop )\n{\ncase '+':\n_d = wh.rv( _a ) + wh.rv( _b );\nbreak;\ncase '*':\n_d = wh.rv( _a ) * wh.rv( _b );\nbreak;\ncase '/':\n_d = wh.rv( _a ) / wh.rv( _b );\nbreak;\ncase '%':\n_d = wh.rv( _a ) % wh.rv( _b );\nbreak;\ncase '|':\n_d = wh.rv( _a ) | wh.rv( _b );\nbreak;\ncase '^':\n_d = wh.rv( _a ) ^ wh.rv( _b );\nbreak;\ncase '&':\n_d = wh.rv( _a ) & wh.rv( _b );\nbreak;\ncase '===':\n_d = wh.rv( _a ) === wh.rv( _b );\nbreak;\ncase '==':\n_d = wh.rv( _a ) == wh.rv( _b );\nbreak;\ncase '!=':\n_d = wh.rv( _a ) != wh.rv( _b );\nbreak;\ncase '!==':\n_d = wh.rv( _a ) !== wh.rv( _b );\nbreak;\ncase '>=':\n_d = wh.rv( _a ) >= wh.rv( _b );\nbreak;\ncase '<=':\n_d = wh.rv( _a ) <= wh.rv( _b );\nbreak;\ncase '>':\n_d = wh.rv( _a ) > wh.rv( _b );\nbreak;\ncase '<':\n_d = wh.rv( _a ) < wh.rv( _b );\nbreak;\ncase '<<':\n_d = wh.rv( _a ) << wh.rv( _b );\nbreak;\ncase '>>':\n_d = wh.rv( _a ) >> wh.rv( _b );\nbreak;\ndefault:\nbreak;\n}\nreturn _c ? wh.nh( _d, \"c\" ) : _d;\nbreak;\ncase '-':\n_a = ops.length === 3 ? rev( ops[1], e, s, g, o, _f ) : 0;\n_b = ops.length === 3 ? rev( ops[2], e, s, g, o, _f ) : rev( ops[1], e, s, g, o, _f );\n_c = should_pass_type_info && (wh.hn( _a ) === 'h' || wh.hn( _b ) === 'h');\n_d = _c ? wh.rv( _a ) - wh.rv( _b ) : _a - _b;\nreturn _c ? wh.nh( _d, \"c\" ) : _d;\nbreak;\ncase '!':\n_a = rev( ops[1], e, s, g, o, _f );\n_c = should_pass_type_info && (wh.hn( _a ) == 'h');\n_d = !wh.rv(_a);\nreturn _c ? wh.nh( _d, \"c\" ) : _d;\ncase '~':\n_a = rev( ops[1], e, s, g, o, _f );\n_c = should_pass_type_info && (wh.hn( _a ) == 'h');\n_d = ~wh.rv(_a);\nreturn _c ? wh.nh( _d, \"c\" ) : _d;\ndefault:\n$gwn('unrecognized op' + rop );\n}\n}\nfunction rev( ops, e, s, g, o, newap )\n{\nvar op = ops[0];\nvar _f = false;\nif ( typeof newap !== \"undefined\" ) o.ap = newap;\nif( typeof(op)==='object' )\n{\nvar vop=op[0];\nvar _a, _aa, _b, _bb, _c, _d, _s, _e, _ta, _tb, _td;\nswitch(vop)\n{\ncase 2:\nreturn ArithmeticEv(ops,e,s,g,o);\nbreak;\ncase 4: \nreturn rev( ops[1], e, s, g, o, _f );\nbreak;\ncase 5: \nswitch( ops.length )\n{\ncase 2: \n_a = rev( ops[1],e,s,g,o,_f );\nreturn should_pass_type_info?[_a]:[wh.rv(_a)];\nreturn [_a];\nbreak;\ncase 1: \nreturn [];\nbreak;\ndefault:\n_a = rev( ops[1],e,s,g,o,_f );\n_b = rev( ops[2],e,s,g,o,_f );\n_a.push( \nshould_pass_type_info ?\n_b :\nwh.rv( _b )\n);\nreturn _a;\nbreak;\n}\nbreak;\ncase 6:\n_a = rev(ops[1],e,s,g,o);\nvar ap = o.ap;\n_ta = wh.hn(_a)==='h';\n_aa = _ta ? wh.rv(_a) : _a;\no.is_affected |= _ta;\nif( should_pass_type_info )\n{\nif( _aa===null || typeof(_aa) === 'undefined' )\n{\nreturn _ta ? wh.nh(undefined, 'e') : undefined;\n}\n_b = rev(ops[2],e,s,g,o,_f);\n_tb = wh.hn(_b) === 'h';\n_bb = _tb ? wh.rv(_b) : _b;\no.ap = ap;\no.is_affected |= _tb;\nif( _bb===null || typeof(_bb) === 'undefined' || \n_bb === \"__proto__\" || _bb === \"prototype\" || _bb === \"caller\" ) \n{\nreturn (_ta || _tb) ? wh.nh(undefined, 'e') : undefined;\n}\n_d = _aa[_bb];\nif ( typeof _d === 'function' && !ap ) _d = undefined;\n_td = wh.hn(_d)==='h';\no.is_affected |= _td;\nreturn (_ta || _tb) ? (_td ? _d : wh.nh(_d, 'e')) : _d;\n}\nelse\n{\nif( _aa===null || typeof(_aa) === 'undefined' )\n{\nreturn undefined;\n}\n_b = rev(ops[2],e,s,g,o,_f);\n_tb = wh.hn(_b) === 'h';\n_bb = _tb ? wh.rv(_b) : _b;\no.ap = ap;\no.is_affected |= _tb;\nif( _bb===null || typeof(_bb) === 'undefined' || \n_bb === \"__proto__\" || _bb === \"prototype\" || _bb === \"caller\" ) \n{\nreturn undefined;\n}\n_d = _aa[_bb];\nif ( typeof _d === 'function' && !ap ) _d = undefined;\n_td = wh.hn(_d)==='h';\no.is_affected |= _td;\nreturn _td ? wh.rv(_d) : _d;\n}\ncase 7: \nswitch(ops[1][0])\n{\ncase 11:\no.is_affected |= wh.hn(g)==='h';\nreturn g;\ncase 3:\n_s = wh.rv( s );\n_e = wh.rv( e );\n_b = ops[1][1];\nif (g && g.f && g.f.hasOwnProperty(_b) )\n{\n_a = g.f;\no.ap = true;\n}\nelse\n{\n_a = _s && _s.hasOwnProperty(_b) ? \ns : (_e && _e.hasOwnProperty(_b) ? e : undefined );\n}\nif( should_pass_type_info )\n{\nif( _a )\n{\n_ta = wh.hn(_a) === 'h';\n_aa = _ta ? wh.rv( _a ) : _a;\n_d = _aa[_b];\n_td = wh.hn(_d) === 'h';\no.is_affected |= _ta || _td;\n_d = _ta && !_td ? wh.nh(_d,'e') : _d;\nreturn _d;\n}\n}\nelse\n{\nif( _a )\n{\n_ta = wh.hn(_a) === 'h';\n_aa = _ta ? wh.rv( _a ) : _a;\n_d = _aa[_b];\n_td = wh.hn(_d) === 'h';\no.is_affected |= _ta || _td;\nreturn wh.rv(_d);\n}\n}\nreturn undefined;\n}\nbreak;\ncase 8: \n_a = {};\n_a[ops[1]] = rev(ops[2],e,s,g,o,_f);\nreturn _a;\nbreak;\ncase 9: \n_a = rev(ops[1],e,s,g,o,_f);\n_b = rev(ops[2],e,s,g,o,_f);\nfunction merge( _a, _b, _ow )\n{\nvar ka, _bbk;\n_ta = wh.hn(_a)==='h';\n_tb = wh.hn(_b)==='h';\n_aa = wh.rv(_a);\n_bb = wh.rv(_b);\nfor(var k in _bb)\n{\nif ( _ow || !_aa.hasOwnProperty(k) )\n{\n_aa[k] = should_pass_type_info ? (_tb ? wh.nh(_bb[k],'e') : _bb[k]) : wh.rv(_bb[k]);\n}\n}\nreturn _a;\n}\nvar _c = _a\nvar _ow = true\nif ( typeof(ops[1][0]) === \"object\" && ops[1][0][0] === 10 ) {\n_a = _b\n_b = _c\n_ow = false\n}\nif ( typeof(ops[1][0]) === \"object\" && ops[1][0][0] === 10 ) {\nvar _r = {}\nreturn merge( merge( _r, _a, _ow ), _b, _ow );\n}\nelse\nreturn merge( _a, _b, _ow );\nbreak;\ncase 10:\n_a = rev(ops[1],e,s,g,o,_f);\n_a = should_pass_type_info ? _a : wh.rv( _a );\nreturn _a ;\nbreak;\ncase 12:\nvar _r;\n_a = rev(ops[1],e,s,g,o);\nif ( !o.ap )\n{\nreturn should_pass_type_info && wh.hn(_a)==='h' ? wh.nh( _r, 'f' ) : _r;\n}\nvar ap = o.ap;\n_b = rev(ops[2],e,s,g,o,_f);\no.ap = ap;\n_ta = wh.hn(_a)==='h';\n_tb = _ca(_b);\n_aa = wh.rv(_a);\t\n_bb = wh.rv(_b); snap_bb=$gdc(_bb,\"nv_\");\ntry{\n_r = typeof _aa === \"function\" ? $gdc(_aa.apply(null, snap_bb)) : undefined;\n} catch (e){\ne.message = e.message.replace(/nv_/g,\"\");\ne.stack = e.stack.substring(0,e.stack.indexOf(\"\\n\", e.stack.lastIndexOf(\"at nv_\")));\ne.stack = e.stack.replace(/\\snv_/g,\" \"); \ne.stack = $gstack(e.stack);\t\nif(g.debugInfo)\n{\ne.stack += \"\\n \"+\" \"+\" \"+\" at \"+g.debugInfo[0]+\":\"+g.debugInfo[1]+\":\"+g.debugInfo[2];\nconsole.error(e);\n}\n_r = undefined;\n}\nreturn should_pass_type_info && (_tb || _ta) ? wh.nh( _r, 'f' ) : _r;\n}\n}\nelse\n{\nif( op === 3 || op === 1) return ops[1];\nelse if( op === 11 ) \n{\nvar _a='';\nfor( var i = 1 ; i < ops.length ; i++ )\n{\nvar xp = wh.rv(rev(ops[i],e,s,g,o,_f));\n_a += typeof(xp) === 'undefined' ? '' : xp;\n}\nreturn _a;\n}\n}\n}\nfunction wrapper( ops, e, s, g, o, newap )\n{\nif( ops[0] == '11182016' )\n{\ng.debugInfo = ops[2];\nreturn rev( ops[1], e, s, g, o, newap );\n}\nelse\n{\ng.debugInfo = null;\nreturn rev( ops, e, s, g, o, newap );\n}\n}\nreturn wrapper;\n}\ngra=$gwrt(true); \ngrb=$gwrt(false); \nfunction TestTest( expr, ops, e,s,g, expect_a, expect_b, expect_affected )\n{\n{\nvar o = {is_affected:false};\nvar a = gra( ops, e,s,g, o );\nif( JSON.stringify(a) != JSON.stringify( expect_a )\n|| o.is_affected != expect_affected )\n{\nconsole.warn( \"A. \" + expr + \" get result \" + JSON.stringify(a) + \", \" + o.is_affected + \", but \" + JSON.stringify( expect_a ) + \", \" + expect_affected + \" is expected\" );\n}\n}\n{\nvar o = {is_affected:false};\nvar a = grb( ops, e,s,g, o );\nif( JSON.stringify(a) != JSON.stringify( expect_b )\n|| o.is_affected != expect_affected )\n{\nconsole.warn( \"B. \" + expr + \" get result \" + JSON.stringify(a) + \", \" + o.is_affected + \", but \" + JSON.stringify( expect_b ) + \", \" + expect_affected + \" is expected\" );\n}\n}\n}\n"; // idb +const char aVarNfInitFunct[] = "var nf_init=function(){\nif(typeof __WXML_GLOBAL__===\"undefined\"||undefined===__WXML_GLOBAL__.wxs_nf_init){\nnf_init_Object();nf_init_Function();nf_init_Array();nf_init_String();nf_init_Boolean();nf_init_Number();nf_init_Math();nf_init_Date();nf_init_RegExp();\n}\nif(typeof __WXML_GLOBAL__!==\"undefined\") __WXML_GLOBAL__.wxs_nf_init=true;\n};\nvar nf_init_Object=function(){\nObject.defineProperty(Object.prototype,\"nv_constructor\",{writable:true,value:\"Object\"})\nObject.defineProperty(Object.prototype,\"nv_toString\",{writable:true,value:function(){return \"[object Object]\"}})\n}\nvar nf_init_Function=function(){\nObject.defineProperty(Function.prototype,\"nv_constructor\",{writable:true,value:\"Function\"})\nObject.defineProperty(Function.prototype,\"nv_length\",{get:function(){return this.length;},set:function(){}});\nObject.defineProperty(Function.prototype,\"nv_toString\",{writable:true,value:function(){return \"[function Function]\"}})\n}\nvar nf_init_Array=function(){\nObject.defineProperty(Array.prototype,\"nv_toString\",{writable:true,value:function(){return this.nv_join();}})\nObject.defineProperty(Array.prototype,\"nv_join\",{writable:true,value:function(s){\ns=undefined==s?',':s;\nvar r=\"\";\nfor(var i=0;i &,std::string &)::KEYWORDS[4] = { "true", "false", "undefined", "null" }; // weak +_UNKNOWN unk_556C08; // weak +_UNKNOWN unk_556C0A; // weak +_UNKNOWN unk_556C0C; // weak +_UNKNOWN unk_556C0E; // weak +_UNKNOWN unk_556C10; // weak +void *off_556C1C = &unk_720074; // weak +void *off_556C26 = &unk_610066; // weak +_UNKNOWN unk_556C34; // weak +void *off_556C40 = &unk_720074; // weak +void *off_556C4A = &unk_610066; // weak +_UNKNOWN unk_55739E; // weak +_UNKNOWN unk_5576EE; // weak +_BYTE byte_557ACA[2] = { 0, 0 }; // weak +_UNKNOWN unk_557D34; // weak +char byte_557D9D[] = { '0' }; // weak +_UNKNOWN unk_558106; // weak +void *off_558A2B = &unk_647473; // weak +void *off_558CF7 = &unk_6C6C75; // weak +_UNKNOWN unk_5590D4; // weak +_UNKNOWN unk_5590D6; // weak +_UNKNOWN unk_559324; // weak +void *cplus_demangle_operators = &unk_559324; // weak +void **off_559B20 = &off_5599B5; // weak +char *off_559C88 = "decimal32"; // weak +char *off_559C9C = "decimal64"; // weak +char *off_559CB0 = "decimal128"; // weak +char *off_559CC4 = "half"; // weak +char *off_559CD8 = "char8_t"; // weak +char *off_559CEC = "char16_t"; // weak +char *off_559D00 = "char32_t"; // weak +char *off_559D14 = "decltype(nullptr)"; // weak +void *off_559FE2 = &loc_4D4100; // weak +_UNKNOWN unk_559FE6; // weak +void *off_55A022 = &unk_6E7553; // weak +void *off_55A026 = &unk_6E6F4D; // weak +void *off_55A02A = &unk_657554; // weak +void *off_55A02E = &unk_646557; // weak +void *off_55A032 = &unk_756854; // weak +void *off_55A036 = &unk_697246; // weak +void *off_55A03A = &unk_746153; // weak +void *off_55A094 = &unk_6E614A; // weak +void *off_55A098 = &unk_626546; // weak +void *off_55A09C = &unk_72614D; // weak +void *off_55A0A0 = &unk_727041; // weak +void *off_55A0A4 = &unk_6E754A; // weak +void *off_55A0A8 = &unk_6C754A; // weak +void *off_55A0AC = &unk_677541; // weak +void *off_55A0B0 = &unk_706553; // weak +void *off_55A0B4 = &unk_74634F; // weak +void *off_55A0B8 = &unk_766F4E; // weak +void *off_55A0BC = &unk_636544; // weak +void *off_55A0C0 = &unk_6D0025; // weak +void *off_55A0D2 = &loc_480025; // weak +_UNKNOWN unk_55A0E4; // weak +void *off_55A0E6 = &loc_4D0041; // weak +void *off_55A0F2 = &unk_750053; // weak +void *off_55A100 = &unk_6F004D; // weak +void *off_55A10E = &unk_750054; // weak +void *off_55A11E = &unk_650057; // weak +void *off_55A132 = &unk_680054; // weak +void *off_55A144 = &unk_720046; // weak +void *off_55A152 = &unk_610053; // weak +void *off_55A164 = &unk_750053; // weak +void *off_55A16C = &unk_6F004D; // weak +void *off_55A174 = &unk_750054; // weak +void *off_55A17C = &unk_650057; // weak +void *off_55A184 = &unk_680054; // weak +void *off_55A18C = &unk_720046; // weak +void *off_55A194 = &unk_610053; // weak +void *off_55A19C = &unk_61004A; // weak +void *off_55A1AC = &unk_650046; // weak +void *off_55A1BE = &unk_61004D; // weak +void *off_55A1CA = &unk_700041; // weak +void *off_55A1D6 = &unk_61004D; // weak +void *off_55A1DE = &unk_75004A; // weak +void *off_55A1E8 = &unk_75004A; // weak +void *off_55A1F2 = &unk_750041; // weak +void *off_55A200 = &unk_650053; // weak +void *off_55A214 = &unk_63004F; // weak +void *off_55A224 = &unk_6F004E; // weak +void *off_55A236 = &unk_650044; // weak +void *off_55A248 = &unk_61004A; // weak +void *off_55A250 = &unk_650046; // weak +void *off_55A258 = &unk_61004D; // weak +void *off_55A260 = &unk_700041; // weak +void *off_55A268 = &unk_75004A; // weak +void *off_55A270 = &unk_75004A; // weak +void *off_55A278 = &unk_750041; // weak +void *off_55A280 = &unk_650053; // weak +void *off_55A288 = &unk_63004F; // weak +void *off_55A290 = &unk_6F004E; // weak +void *off_55A298 = &unk_650044; // weak +const char byte_55A2A0[4] = { '\0', '\0', '\0', '\0' }; // idb +int (__stdcall *__dyn_tls_init_callback)(_DWORD, _DWORD, _DWORD) = &__dyn_tls_init; // weak +char *CSWTCH_1[6] = +{ + "Argument domain error (DOMAIN)", + "Argument singularity (SIGN)", + "Overflow range error (OVERFLOW)", + "The result is too small to be represented (UNDERFLOW)", + "Total loss of significance (TLOSS)", + "Partial loss of significance (PLOSS)" +}; // weak +const char String1[] = { 'I', 'N', 'F', '\0' }; // idb +const char off_55A6CA[] = { 'N', 'A', 'N', '\0' }; // idb +_UNKNOWN unk_55A6D4; // weak +_UNKNOWN __etens; // weak +_UNKNOWN unk_55A770; // weak +int __eone = 0; // weak +char *cmap = "alnum"; // weak +__int16 word_55A804[] = { 263 }; // weak +int fivesbits[23] = +{ + 0, + 3, + 5, + 7, + 10, + 12, + 14, + 17, + 19, + 21, + 24, + 26, + 28, + 31, + 33, + 35, + 38, + 40, + 42, + 45, + 47, + 49, + 52 +}; // weak +void *off_55A9C7 = (void *)0x4E614E; // weak +void *off_55A9CB = &unk_666E49; // weak +const wchar_t String = 40u; // idb +void *off_55AB59 = (void *)0x4E614E; // weak +_UNKNOWN unk_55ABB4; // weak +double dbl_55ABB8[4] = { 3.369835408745143e30, 0.0, 0.0, 0.0 }; // weak +int dword_55ABDC[] = { 0 }; // weak +double dbl_55ABF8[] = { 0.0 }; // weak +double __tens_D2A[24] = +{ + 1.0, + 10.0, + 100.0, + 1000.0, + 10000.0, + 100000.0, + 1000000.0, + 1.0e7, + 1.0e8, + 1.0e9, + 1.0e10, + 1.0e11, + 1.0e12, + 1.0e13, + 1.0e14, + 1.0e15, + 1.0e16, + 1.0e17, + 1.0e18, + 1.0e19, + 1.0e20, + 1.0e21, + 1.0e22, + 0.0 +}; // weak +double __tinytens_D2A[4] = { 1.0e-16, 1.0e-32, 1.0e-64, 1.0e-128 }; // weak +double __bigtens_D2A[4] = { 1.0e16, 1.0e32, 1.0e64, 1.0e128 }; // weak +const WCHAR ModuleName = 109u; // idb +const WCHAR LibFileName = 97u; // idb +const WCHAR off_55AD8C = 109u; // idb +int CSWTCH_112[7] = { 4, 1, 16, 2, 8, 0, 0 }; // weak +char *const CSWTCH_18 = &unk_559D40; // idb +int std::money_base::_S_default_pattern = 67109634; // weak +__int16 std::`anonymous namespace'::utf8_bom = -17425; // weak +char **std::locale::_S_categories = &__gnu_cxx::category_names; // weak +int *std::locale::_S_twinned_facets = &std::numpunct::id; // weak +int *const std::locale::facet::_S_c_name = (int *const)0x43; // idb +_UNKNOWN unk_55B244; // weak +_UNKNOWN unk_55B258; // weak +_UNKNOWN unk_55B26C; // weak +_UNKNOWN unk_55B280; // weak +_UNKNOWN unk_55B294; // weak +_UNKNOWN unk_55B2A8; // weak +_UNKNOWN unk_55B2F8; // weak +_UNKNOWN unk_55B30C; // weak +_UNKNOWN unk_55B320; // weak +_UNKNOWN unk_55B334; // weak +_UNKNOWN unk_55B348; // weak +_UNKNOWN unk_55B35C; // weak +_UNKNOWN unk_55B370; // weak +_UNKNOWN unk_55B384; // weak +_UNKNOWN unk_55B398; // weak +_UNKNOWN unk_55B3AC; // weak +_UNKNOWN unk_55B3C0; // weak +_UNKNOWN unk_55B3D4; // weak +_UNKNOWN unk_55B3E8; // weak +_UNKNOWN unk_55B3FC; // weak +_UNKNOWN unk_55B44C; // weak +_UNKNOWN unk_55B460; // weak +_UNKNOWN unk_55B474; // weak +_UNKNOWN unk_55B488; // weak +_UNKNOWN unk_55B49C; // weak +_UNKNOWN unk_55B4B0; // weak +_UNKNOWN unk_55B500; // weak +_UNKNOWN unk_55B514; // weak +_UNKNOWN unk_55B528; // weak +_UNKNOWN unk_55B53C; // weak +_UNKNOWN unk_55B550; // weak +_UNKNOWN unk_55B564; // weak +_UNKNOWN unk_55B578; // weak +_UNKNOWN unk_55B58C; // weak +_UNKNOWN unk_55B5A0; // weak +_UNKNOWN unk_55B5B4; // weak +_UNKNOWN unk_55B5C8; // weak +_UNKNOWN unk_55B5DC; // weak +_UNKNOWN unk_55B5F0; // weak +_UNKNOWN unk_55B604; // weak +int *`typeinfo for'__cxxabiv1::__forced_unwind = &off_55F0D4; // weak +int *`typeinfo for'__cxxabiv1::__foreign_exception = &off_55F0D4; // weak +int *`typeinfo for'WXML::DOMLib::ParseException = &off_55F0D4; // weak +int *`typeinfo for'WXML::DOMLib::RenderException = &off_55F0D4; // weak +int *`typeinfo for'__gnu_cxx::recursive_init_error = &off_55F114; // weak +int *`typeinfo for'__gnu_cxx::__concurrence_lock_error = &off_55F114; // weak +int *`typeinfo for'__gnu_cxx::__concurrence_unlock_error = &off_55F114; // weak +int *`typeinfo for'std::locale::facet::__shim = &off_55F0D4; // weak +int *`typeinfo for'std::locale::facet = &off_55F0D4; // weak +int *`typeinfo for'std::moneypunct = &off_55F140; // weak +int *`typeinfo for'std::moneypunct = &off_55F140; // weak +int *`typeinfo for'std::moneypunct = &off_55F140; // weak +int *`typeinfo for'std::moneypunct = &off_55F140; // weak +int *`typeinfo for'std::string = &off_55F0D4; // weak +int *`typeinfo for'std::collate = &off_55F114; // weak +int *`typeinfo for'std::collate = &off_55F114; // weak +int *`typeinfo for'std::messages = &off_55F140; // weak +int *`typeinfo for'std::messages = &off_55F140; // weak +int *`typeinfo for'std::numpunct = &off_55F114; // weak +int *`typeinfo for'std::numpunct = &off_55F114; // weak +int *`typeinfo for'std::time_get> = &off_55F140; // weak +int *`typeinfo for'std::time_get> = &off_55F140; // weak +int *`typeinfo for'std::money_get> = &off_55F114; // weak +int *`typeinfo for'std::money_get> = &off_55F114; // weak +int *`typeinfo for'std::money_put> = &off_55F114; // weak +int *`typeinfo for'std::money_put> = &off_55F114; // weak +int *`typeinfo for'std::ios_base::failure = &off_55F114; // weak +int `typeinfo for'std::bad_typeid = 5632276; // weak +int *`typeinfo for'std::moneypunct = &off_55F140; // weak +int *`typeinfo for'std::moneypunct = &off_55F140; // weak +int *`typeinfo for'std::moneypunct = &off_55F140; // weak +int *`typeinfo for'std::moneypunct = &off_55F140; // weak +int *`typeinfo for'std::__timepunct = &off_55F114; // weak +int *`typeinfo for'std::__timepunct = &off_55F114; // weak +int *`typeinfo for'std::logic_error = &off_55F114; // weak +int *`typeinfo for'std::range_error = &off_55F114; // weak +int *`typeinfo for'std::domain_error = &off_55F114; // weak +int *`typeinfo for'std::length_error = &off_55F114; // weak +int *`typeinfo for'std::out_of_range = &off_55F114; // weak +int *`typeinfo for'std::system_error = &off_55F114; // weak +int *`typeinfo for'std::__ios_failure = &off_560798; // weak +int *`typeinfo for'std::bad_exception = &off_55F114; // weak +int *`typeinfo for'std::runtime_error = &off_55F114; // weak +int *`typeinfo for'std::overflow_error = &off_55F114; // weak +int *`typeinfo for'std::underflow_error = &off_55F114; // weak +int *`typeinfo for'std::invalid_argument = &off_55F114; // weak +int *`typeinfo for'std::bad_array_new_length = &off_55F114; // weak +int *`typeinfo for'std::ctype = &off_55F140; // weak +int *`typeinfo for'std::ctype = &off_55F114; // weak +int *`typeinfo for'std::codecvt = &off_55F114; // weak +int *`typeinfo for'std::codecvt = &off_55F114; // weak +int *`typeinfo for'std::collate = &off_55F114; // weak +int *`typeinfo for'std::collate = &off_55F114; // weak +int *`typeinfo for'std::num_get> = &off_55F114; // weak +int *`typeinfo for'std::num_get> = &off_55F114; // weak +int *`typeinfo for'std::num_put> = &off_55F114; // weak +int *`typeinfo for'std::num_put> = &off_55F114; // weak +int *`typeinfo for'std::bad_cast = &off_55F114; // weak +int *`typeinfo for'std::messages = &off_55F140; // weak +int *`typeinfo for'std::messages = &off_55F140; // weak +int *`typeinfo for'std::numpunct = &off_55F114; // weak +int *`typeinfo for'std::numpunct = &off_55F114; // weak +int *`typeinfo for'std::time_get> = &off_55F140; // weak +int *`typeinfo for'std::time_get> = &off_55F140; // weak +int *`typeinfo for'std::time_put> = &off_55F114; // weak +int *`typeinfo for'std::time_put> = &off_55F114; // weak +int *`typeinfo for'std::bad_alloc = &off_55F114; // weak +int *`typeinfo for'std::money_get> = &off_55F114; // weak +int *`typeinfo for'std::money_get> = &off_55F114; // weak +int *`typeinfo for'std::money_put> = &off_55F114; // weak +int *`typeinfo for'std::money_put> = &off_55F114; // weak +void (__cdecl *off_55F0D4)(__cxxabiv1::__class_type_info *__hidden this) = &__cxxabiv1::__class_type_info::~__class_type_info; // weak +void (__cdecl *off_55F114)(__cxxabiv1::__si_class_type_info *__hidden this) = &__cxxabiv1::__si_class_type_info::~__si_class_type_info; // weak +void (__cdecl *off_55F140)(__cxxabiv1::__vmi_class_type_info *__hidden this) = &__cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info; // weak +void (__cdecl *off_55F16C)(_anonymous_namespace_::io_error_category *__hidden this) = &`anonymous namespace'::io_error_category::~io_error_category; // weak +void (__cdecl *off_55F1E4)(WXML::EXPRLib::NonTerminal *__hidden this) = &WXML::EXPRLib::NonTerminal::~NonTerminal; // weak +void (__cdecl *off_55F20C)(WXML::EXPRLib::Action *__hidden this) = &WXML::EXPRLib::Action::~Action; // weak +void (__cdecl *off_55F220)(WXML::EXPRLib::Terminal *__hidden this) = &WXML::EXPRLib::Terminal::~Terminal; // weak +int (*off_55F234[2])() = +{ + &__gnu_cxx::stdio_filebuf::~stdio_filebuf, + &__gnu_cxx::stdio_filebuf::~stdio_filebuf +}; // weak +int (*off_55F274[2])() = +{ + &__gnu_cxx::stdio_filebuf::~stdio_filebuf, + &__gnu_cxx::stdio_filebuf::~stdio_filebuf +}; // weak +int (*off_55F2B4)() = &__gnu_cxx::stdio_sync_filebuf::~stdio_sync_filebuf; // weak +int (*off_55F2F4)() = &__gnu_cxx::stdio_sync_filebuf::~stdio_sync_filebuf; // weak +void (__cdecl *off_55F334)(__gnu_cxx::recursive_init_error *__hidden this) = &__gnu_cxx::recursive_init_error::~recursive_init_error; // weak +void (__cdecl *off_55F348)(__gnu_cxx::__concurrence_lock_error *__hidden this) = &__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error; // weak +void (__cdecl *off_55F35C)(__gnu_cxx::__concurrence_unlock_error *__hidden this) = &__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error; // weak +int (*off_55F370)() = &std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim; // weak +int (*off_55F38C)() = &std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim; // weak +int (*off_55F3A8)() = &std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim; // weak +int (*off_55F3C4)() = &std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim; // weak +int (*off_55F3E0)() = &std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim; // weak +int (*off_55F3FC)() = &std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim; // weak +int (*off_55F418)() = &std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim; // weak +int (*off_55F434)() = &std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim; // weak +int (*off_55F450)() = &std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim; // weak +int (*off_55F474)() = &std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim; // weak +int (*off_55F498)() = &std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim; // weak +int (*off_55F4BC)() = &std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim; // weak +int (*off_55F4E0)() = &std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim; // weak +int (*off_55F508)() = &std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim; // weak +int (*off_55F534)() = &std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim; // weak +int (*off_55F55C)() = &std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim; // weak +int (*off_55F588)() = &std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim; // weak +int (*off_55F5A0)() = &std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim; // weak +int (*off_55F5B8)() = &std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim; // weak +int (*off_55F5D0)() = &std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim; // weak +int (*off_55F5E8)() = &std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim; // weak +int (*off_55F600)() = &std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim; // weak +int (*off_55F618)() = &std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim; // weak +int (*off_55F630)() = &std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim; // weak +int (*off_55F648)() = &std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim; // weak +int (*off_55F67C)() = &std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim; // weak +int (*off_55F6B0)() = &std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim; // weak +int (*off_55F6E4)() = &std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim; // weak +int (*off_55F718)() = &std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim; // weak +int (*off_55F74C)() = &std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim; // weak +int (*off_55F780)() = &std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim; // weak +int (*off_55F7B4)() = &std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim; // weak +int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int) = &std::moneypunct::~moneypunct; // weak +int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int) = &std::moneypunct::~moneypunct; // weak +int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int) = &std::moneypunct::~moneypunct; // weak +int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int) = &std::moneypunct::~moneypunct; // weak +int (*off_55F8F0)() = &std::collate_byname::~collate_byname; // weak +int (*off_55F90C)() = &std::collate_byname::~collate_byname; // weak +int (*off_55F928)() = &std::stringbuf::~stringbuf; // weak +int (*off_55F968)() = &std::wstringbuf::~wstringbuf; // weak +int (*off_55F9A8)() = &std::messages_byname::~messages_byname; // weak +int (*off_55F9C4)() = &std::messages_byname::~messages_byname; // weak +int (*off_55F9E0)() = &std::numpunct_byname::~numpunct_byname; // weak +int (*off_55FA04)() = &std::numpunct_byname::~numpunct_byname; // weak +int (*off_55FA28)() = &std::time_get_byname>::~time_get_byname; // weak +int (*off_55FA54)() = &std::time_get_byname>::~time_get_byname; // weak +int (*off_55FA80)() = &std::moneypunct_byname::~moneypunct_byname; // weak +int (*off_55FAB4)() = &std::moneypunct_byname::~moneypunct_byname; // weak +int (*off_55FAE8)() = &std::moneypunct_byname::~moneypunct_byname; // weak +int (*off_55FB1C)() = &std::moneypunct_byname::~moneypunct_byname; // weak +int (*off_55FB54)() = &std::basic_stringstream,std::allocator>::~basic_stringstream; // weak +int (*off_55FB68[2])() = +{ + &`non-virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream, + &`non-virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream +}; // weak +int (*off_55FB7C[2])() = +{ + &`virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream, + &`virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream +}; // weak +int (*off_55FB90)() = &std::basic_stringstream,std::allocator>::~basic_stringstream; // weak +int (*off_55FBA4[2])() = +{ + &`non-virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream, + &`non-virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream +}; // weak +int (*off_55FBB8[2])() = +{ + &`virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream, + &`virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream +}; // weak +int (*off_55FBCC)() = &std::istringstream::~istringstream; // weak +int (*off_55FBE0[2])() = +{ + &`virtual thunk to'std::istringstream::~istringstream, + &`virtual thunk to'std::istringstream::~istringstream +}; // weak +int (*off_55FBF4)() = &std::wistringstream::~wistringstream; // weak +int (*off_55FC08[2])() = +{ + &`virtual thunk to'std::wistringstream::~wistringstream, + &`virtual thunk to'std::wistringstream::~wistringstream +}; // weak +int (*off_55FC1C)() = &std::ostringstream::~ostringstream; // weak +int (*off_55FC30[2])() = +{ + &`virtual thunk to'std::ostringstream::~ostringstream, + &`virtual thunk to'std::ostringstream::~ostringstream +}; // weak +int (*off_55FC44)() = &std::wostringstream::~wostringstream; // weak +int (*off_55FC58[2])() = +{ + &`virtual thunk to'std::wostringstream::~wostringstream, + &`virtual thunk to'std::wostringstream::~wostringstream +}; // weak +int (*off_55FC68)() = &std::collate::~collate; // weak +int (*off_55FC84)() = &std::collate::~collate; // weak +int (*off_55FCA0)() = &std::messages::~messages; // weak +int (*off_55FCBC)() = &std::messages::~messages; // weak +int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int) = &std::numpunct::~numpunct; // weak +int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int) = &std::numpunct::~numpunct; // weak +int (*off_55FD20)() = &std::time_get>::~time_get; // weak +int (*off_55FD4C)() = &std::time_get>::~time_get; // weak +int (*off_55FD78)() = &std::money_get>::~money_get; // weak +int (*off_55FD90)() = &std::money_get>::~money_get; // weak +int (*off_55FDA8)() = &std::money_put>::~money_put; // weak +int (*off_55FDC0)() = &std::money_put>::~money_put; // weak +int (*off_55FDD8)() = &std::ios_base::failure[abi:cxx11]::~failure; // weak +void (__cdecl *off_55FDEC)(std::ios_base::failure *__hidden this) = &std::ios_base::failure::~failure; // weak +void (__cdecl *off_55FE04)(std::iostream *__hidden this) = &std::iostream::~iostream; // weak +void (__cdecl *off_55FE18[2])(std::iostream *__hidden this) = +{ + &`non-virtual thunk to'std::iostream::~iostream, + &`non-virtual thunk to'std::iostream::~iostream +}; // weak +void (__cdecl *off_55FE2C[2])(std::iostream *__hidden this) = +{ + &`virtual thunk to'std::iostream::~iostream, + &`virtual thunk to'std::iostream::~iostream +}; // weak +void (__cdecl *off_55FE40)(std::istream *__hidden this) = &std::istream::~istream; // weak +void (__cdecl *off_55FE54[2])(std::istream *__hidden this) = +{ + &`virtual thunk to'std::istream::~istream, + &`virtual thunk to'std::istream::~istream +}; // weak +void (__cdecl *off_55FE68)(std::ostream *__hidden this) = &std::ostream::~ostream; // weak +void (__cdecl *off_55FE7C[2])(std::ostream *__hidden this) = +{ + &`virtual thunk to'std::ostream::~ostream, + &`virtual thunk to'std::ostream::~ostream +}; // weak +void (__cdecl *off_55FE8C)(std::bad_typeid *__hidden this) = &std::bad_typeid::~bad_typeid; // weak +int (*off_55FEA0)() = &std::moneypunct::~moneypunct; // weak +int (*off_55FED4)() = &std::moneypunct::~moneypunct; // weak +int (*off_55FF08)() = &std::moneypunct::~moneypunct; // weak +int (*off_55FF3C)() = &std::moneypunct::~moneypunct; // weak +int (*off_55FF70)() = &std::__timepunct::~__timepunct; // weak +int (*off_55FF80)() = &std::__timepunct::~__timepunct; // weak +void (__cdecl *off_55FF90)(std::logic_error *__hidden this) = &std::logic_error::~logic_error; // weak +void (__cdecl *off_55FFA4)(std::range_error *__hidden this) = &std::range_error::~range_error; // weak +int (*off_55FFB8)() = &std::ctype_byname::~ctype_byname; // weak +int (*off_55FFE8)() = &std::ctype_byname::~ctype_byname; // weak +void (__cdecl *off_560028)(std::domain_error *__hidden this) = &std::domain_error::~domain_error; // weak +void (__cdecl *off_56003C)(std::length_error *__hidden this) = &std::length_error::~length_error; // weak +void (__cdecl *off_560050)(std::out_of_range *__hidden this) = &std::out_of_range::~out_of_range; // weak +void (__cdecl *off_560064)(std::system_error *__hidden this) = &std::system_error::~system_error; // weak +void (__cdecl *off_560078)(std::__ios_failure *__hidden this) = &std::__ios_failure::~__ios_failure; // weak +void (__cdecl *off_56008C)(std::bad_exception *__hidden this) = &std::bad_exception::~bad_exception; // weak +int (*off_5600A0[2])() = { &std::filebuf::~filebuf, &std::filebuf::~filebuf }; // weak +int (*off_5600E0[2])() = { &std::wfilebuf::~wfilebuf, &std::wfilebuf::~wfilebuf }; // weak +int (*off_560124[2])() = { &std::fstream::~fstream, &std::fstream::~fstream }; // weak +int (*off_560138[2])() = +{ + &`non-virtual thunk to'std::fstream::~fstream, + &`non-virtual thunk to'std::fstream::~fstream +}; // weak +int (*off_56014C[2])() = +{ + &`virtual thunk to'std::fstream::~fstream, + &`virtual thunk to'std::fstream::~fstream +}; // weak +int (*off_560160[2])() = { &std::wfstream::~wfstream, &std::wfstream::~wfstream }; // weak +int (*off_560174[2])() = +{ + &`non-virtual thunk to'std::wfstream::~wfstream, + &`non-virtual thunk to'std::wfstream::~wfstream +}; // weak +int (*off_560188[2])() = +{ + &`virtual thunk to'std::wfstream::~wfstream, + &`virtual thunk to'std::wfstream::~wfstream +}; // weak +int (*off_56019C)() = &std::wistream::~wistream; // weak +int (*off_5601B0[2])() = +{ + &`virtual thunk to'std::wistream::~wistream, + &`virtual thunk to'std::wistream::~wistream +}; // weak +int (*off_5601C4)() = &std::wostream::~wostream; // weak +int (*off_5601D8[2])() = +{ + &`virtual thunk to'std::wostream::~wostream, + &`virtual thunk to'std::wostream::~wostream +}; // weak +void (__cdecl *off_5601E8)(std::runtime_error *__hidden this) = &std::runtime_error::~runtime_error; // weak +int (*off_560200[2])() = { &std::ifstream::~ifstream, &std::ifstream::~ifstream }; // weak +int (*off_560214[2])() = +{ + &`virtual thunk to'std::ifstream::~ifstream, + &`virtual thunk to'std::ifstream::~ifstream +}; // weak +int (*off_560228[2])() = { &std::wifstream::~wifstream, &std::wifstream::~wifstream }; // weak +int (*off_56023C[2])() = +{ + &`virtual thunk to'std::wifstream::~wifstream, + &`virtual thunk to'std::wifstream::~wifstream +}; // weak +int (*off_560250)() = &std::wiostream::~basic_iostream; // weak +int (*off_560264[2])() = +{ + &`non-virtual thunk to'std::wiostream::~basic_iostream, + &`non-virtual thunk to'std::wiostream::~basic_iostream +}; // weak +int (*off_560278[2])() = +{ + &`virtual thunk to'std::wiostream::~basic_iostream, + &`virtual thunk to'std::wiostream::~basic_iostream +}; // weak +int (*off_56028C[2])() = { &std::ofstream::~ofstream, &std::ofstream::~ofstream }; // weak +int (*off_5602A0[2])() = +{ + &`virtual thunk to'std::ofstream::~ofstream, + &`virtual thunk to'std::ofstream::~ofstream +}; // weak +int (*off_5602B4[2])() = { &std::wofstream::~wofstream, &std::wofstream::~wofstream }; // weak +int (*off_5602C8[2])() = +{ + &`virtual thunk to'std::wofstream::~wofstream, + &`virtual thunk to'std::wofstream::~wofstream +}; // weak +int (*off_5602D8)() = &std::codecvt_byname::~codecvt_byname; // weak +int (*off_560304)() = &std::codecvt_byname::~codecvt_byname; // weak +int (*off_560330)() = &std::collate_byname::~collate_byname; // weak +int (*off_56034C)() = &std::collate_byname::~collate_byname; // weak +void (__cdecl *off_560368)(std::overflow_error *__hidden this) = &std::overflow_error::~overflow_error; // weak +int (*off_5603D0)() = &std::_Sp_counted_ptr::~_Sp_counted_ptr; // weak +int (*off_5603EC)() = &std::_Sp_counted_ptr::~_Sp_counted_ptr; // weak +int (*off_560408)() = &std::_Sp_counted_ptr,std::allocator> *,(__gnu_cxx::_Lock_policy)2>::~_Sp_counted_ptr; // weak +int (*off_560424)() = &std::streambuf::~streambuf; // weak +int (*off_560464)() = &std::wstreambuf::~wstreambuf; // weak +int (*off_5604A4)() = &std::messages_byname::~messages_byname; // weak +int (*off_5604C0)() = &std::messages_byname::~messages_byname; // weak +int (*off_5604DC)() = &std::numpunct_byname::~numpunct_byname; // weak +int (*off_560500)() = &std::numpunct_byname::~numpunct_byname; // weak +int (*off_560524)() = &std::time_get_byname>::~time_get_byname; // weak +int (*off_56054C)() = &std::time_get_byname>::~time_get_byname; // weak +int (*off_560574)() = &std::time_put_byname>::~time_put_byname; // weak +int (*off_560588)() = &std::time_put_byname>::~time_put_byname; // weak +void (__cdecl *off_56059C)(std::underflow_error *__hidden this) = &std::underflow_error::~underflow_error; // weak +int (*off_5605B0)() = &std::__numpunct_cache::~__numpunct_cache; // weak +int (*off_5605C0)() = &std::__numpunct_cache::~__numpunct_cache; // weak +void (__cdecl *off_5605D0)(std::invalid_argument *__hidden this) = &std::invalid_argument::~invalid_argument; // weak +int (*off_5605E4)() = &std::__timepunct_cache::~__timepunct_cache; // weak +int (*off_5605F4)() = &std::__timepunct_cache::~__timepunct_cache; // weak +int (*off_560604)() = &std::moneypunct_byname::~moneypunct_byname; // weak +int (*off_560638)() = &std::moneypunct_byname::~moneypunct_byname; // weak +int (*off_56066C)() = &std::moneypunct_byname::~moneypunct_byname; // weak +int (*off_5606A0)() = &std::moneypunct_byname::~moneypunct_byname; // weak +int (*off_5606D4)() = &std::__moneypunct_cache::~__moneypunct_cache; // weak +int (*off_5606E4)() = &std::__moneypunct_cache::~__moneypunct_cache; // weak +int (*off_5606F4)() = &std::__moneypunct_cache::~__moneypunct_cache; // weak +int (*off_560704)() = &std::__moneypunct_cache::~__moneypunct_cache; // weak +int (*off_56076C)() = &std::__codecvt_utf8_base::~__codecvt_utf8_base; // weak +void (__cdecl *off_560798)(std::__iosfail_type_info *__hidden this) = &std::__iosfail_type_info::~__iosfail_type_info; // weak +int (*off_56081C)() = &std::__codecvt_utf16_base::~__codecvt_utf16_base; // weak +void (__cdecl *off_560848)(std::bad_array_new_length *__hidden this) = &std::bad_array_new_length::~bad_array_new_length; // weak +_UNKNOWN unk_56089C; // weak +_UNKNOWN unk_5608DC; // weak +_UNKNOWN unk_560908; // weak +_UNKNOWN unk_560934; // weak +_UNKNOWN unk_560960; // weak +_UNKNOWN unk_56098C; // weak +_UNKNOWN unk_5609B8; // weak +int (*off_560A3C)() = &std::__codecvt_utf8_utf16_base::~__codecvt_utf8_utf16_base; // weak +int (*off_560A68)() = &std::ctype::~ctype; // weak +int (*off_560A98)() = &std::ctype::~ctype; // weak +int (*off_560AD8)() = &std::codecvt::~codecvt; // weak +int (*off_560B04)() = &std::codecvt::~codecvt; // weak +int (*off_560B30)() = &std::codecvt::~codecvt; // weak +int (*off_560B5C)() = &std::codecvt::~codecvt; // weak +int (__cdecl *off_560B88)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int) = &std::codecvt::~codecvt; // weak +int (__cdecl *off_560BB4)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int) = &std::codecvt::~codecvt; // weak +int (*off_560BE0)() = &std::collate::~collate; // weak +int (*off_560BFC)() = &std::collate::~collate; // weak +int (*off_560C18)() = &std::num_get>::~num_get; // weak +int (*off_560C54)() = &std::num_get>::~num_get; // weak +int (*off_560C90)() = &std::num_put>::~num_put; // weak +int (*off_560CC0)() = &std::num_put>::~num_put; // weak +void (__cdecl *off_560CF0)(std::bad_cast *__hidden this) = &std::bad_cast::~bad_cast; // weak +void (__cdecl *off_560D04)(std::ios_base *__hidden this) = &std::ios_base::~ios_base; // weak +int (*off_560D14)() = &std::messages::~messages; // weak +int (*off_560D30)() = &std::messages::~messages; // weak +int (*off_560D4C)() = &std::numpunct::~numpunct; // weak +int (*off_560D70)() = &std::numpunct::~numpunct; // weak +int (*off_560D94)() = &std::time_get>::~time_get; // weak +int (*off_560DBC)() = &std::time_get>::~time_get; // weak +int (*off_560DE4)() = &std::time_put>::~time_put; // weak +int (*off_560DF8)() = &std::time_put>::~time_put; // weak +void (__cdecl *off_560E0C)(std::bad_alloc *__hidden this) = &std::bad_alloc::~bad_alloc; // weak +int (*off_560E20)() = &std::ios::~ios; // weak +int (*off_560E30)() = &std::wios::~wios; // weak +int (*off_560E54)() = &std::money_get>::~money_get; // weak +int (*off_560E6C)() = &std::money_get>::~money_get; // weak +int (*off_560E84)() = &std::money_put>::~money_put; // weak +int (*off_560E9C)() = &std::money_put>::~money_put; // weak +_UNKNOWN std::ctype::classic_table(void)::_S_classic_table; // weak +char std::__detail::__to_chars_10_impl(char *,unsigned int,unsigned int)::__digits[] = { '0' }; // weak +char byte_5610E1[] = { '0' }; // weak +_TCHAR *__mingw_winmain_lpCmdLine; // idb +HINSTANCE __mingw_winmain_hInstance; // idb +_startupinfo startinfo; // idb +int has_cctor; // idb +int managedapp; // idb +int mainret; // idb +char **envp; // idb +char **argv; // idb +int argc; // idb +_UNKNOWN WXML::RPX::acceptNum(char const*,int &)::nextPos; // weak +int dword_5620EC; // weak +int dword_5620F4; // weak +int dword_5620F8; // weak +int dword_562100[264]; // weak +int dword_562520; // weak +int dword_562528[264]; // weak +int dword_562948; // weak +int dword_562950[266]; // weak +int dword_562D78[266]; // weak +int dword_5631A0[218]; // weak +char WXML::RPX::acceptNum(char const*,int &)::inited; // weak +_UNKNOWN WXML::RPX::acceptStr(char const*,int &)::nextPos; // weak +int dword_5635A8; // weak +int dword_5635BC; // weak +int dword_563948[34]; // weak +int dword_5639D0; // weak +int dword_563AB8; // weak +int dword_563D70[39]; // weak +int dword_563E0C; // weak +int dword_563EE0; // weak +int dword_564198[266]; // weak +int dword_5645C0[532]; // weak +char WXML::RPX::acceptStr(char const*,int &)::inited; // weak +_UNKNOWN WXML::RPX::acceptID(char const*,int &)::nextPos; // weak +int dword_564F24[30]; // weak +int dword_564F9C; // weak +int dword_564FA4[217]; // weak +int dword_565308; // weak +int dword_56530C; // weak +int dword_565310; // weak +int dword_565314; // weak +int dword_565318; // weak +int dword_56531C; // weak +int dword_565320; // weak +int dword_565324; // weak +int dword_565328; // weak +int dword_56532C; // weak +int dword_56534C[30]; // weak +int dword_5653C4; // weak +int dword_5653CC[169]; // weak +char WXML::RPX::acceptID(char const*,int &)::inited; // weak +_UNKNOWN night::NS_BUILTIN_TYPE; // weak +_UNKNOWN night::NS_BUILTIN_KW; // weak +_UNKNOWN night::NS_BUILTIN_SPACE; // weak +_UNKNOWN night::NS_BUILTIN_PUNC; // weak +_UNKNOWN night::NS_BUILTIN_ALL_OP; // weak +_UNKNOWN night::NS_BUILTIN_OP_SELF; // weak +_UNKNOWN night::NS_BUILTIN_OP; // weak +_UNKNOWN night::NS_TYPE_CALL; // weak +_UNKNOWN night::NS_TYPE_FUNC; // weak +_UNKNOWN night::NS_TYPE_PROG_NO_SEM_REQUIRE; // weak +_UNKNOWN night::NS_TYPE_PROG_NO_SEM; // weak +_UNKNOWN night::NS_TYPE_PROG; // weak +_UNKNOWN night::NS_TYPE_SWITCH; // weak +_UNKNOWN night::NS_TYPE_DO_WHILE; // weak +_UNKNOWN night::NS_TYPE_WHILE; // weak +_UNKNOWN night::NS_TYPE_FOR; // weak +_UNKNOWN night::NS_TYPE_IF; // weak +_UNKNOWN night::NS_TYPE_BRACKET; // weak +_UNKNOWN night::NS_TYPE_ARRAY; // weak +_UNKNOWN night::NS_TYPE_OBJ_BLOCK; // weak +_UNKNOWN night::NS_TYPE_OBJ_SELF_OP; // weak +_UNKNOWN night::NS_TYPE_OBJ_PROPERTY; // weak +_UNKNOWN night::NS_TYPE_OBJ_DOT; // weak +_UNKNOWN night::NS_TYPE_K_V; // weak +_UNKNOWN night::NS_TYPE_TERNARY; // weak +_UNKNOWN night::NS_TYPE_ASSIGN; // weak +_UNKNOWN night::NS_TYPE_BINARY; // weak +_UNKNOWN night::NS_TYPE_OP_SELF; // weak +_UNKNOWN night::NS_TYPE_OP; // weak +_UNKNOWN night::NS_TYPE_PUNC; // weak +_UNKNOWN night::NS_TYPE_KW; // weak +_UNKNOWN night::NS_TYPE_B_TYPE; // weak +_UNKNOWN night::NS_TYPE_NUM; // weak +_UNKNOWN night::NS_TYPE_STR; // weak +_UNKNOWN night::NS_TYPE_VAR; // weak +_UNKNOWN night::NS_TYPE_BOOL; // weak +_UNKNOWN night::NS_TYPE_SKIP; // weak +_UNKNOWN night::nst_; // weak +_UNKNOWN night::nsv_; // weak +int WXML::NameAllocator::ALPAHBETLEN; // weak +_UNKNOWN night::std_v_v_n; // weak +_UNKNOWN night::std_v_n; // weak +int night::NS_BUILTIN_TYPE[6]; // weak +int night::NS_BUILTIN_KW[6]; // weak +int night::NS_BUILTIN_SPACE[6]; // weak +int night::NS_BUILTIN_PUNC[6]; // weak +int night::NS_BUILTIN_ALL_OP[6]; // weak +_UNKNOWN night::NS_BUILTIN_OP_SELF; // weak +int night::NS_BUILTIN_OP[6]; // weak +_UNKNOWN night::NS_TYPE_CALL; // weak +_UNKNOWN night::NS_TYPE_FUNC; // weak +_UNKNOWN night::NS_TYPE_PROG_NO_SEM_REQUIRE; // weak +_UNKNOWN night::NS_TYPE_PROG_NO_SEM; // weak +_UNKNOWN night::NS_TYPE_PROG; // weak +_UNKNOWN night::NS_TYPE_SWITCH; // weak +_UNKNOWN night::NS_TYPE_DO_WHILE; // weak +_UNKNOWN night::NS_TYPE_WHILE; // weak +_UNKNOWN night::NS_TYPE_FOR; // weak +_UNKNOWN night::NS_TYPE_IF; // weak +_UNKNOWN night::NS_TYPE_BRACKET; // weak +_UNKNOWN night::NS_TYPE_ARRAY; // weak +_UNKNOWN night::NS_TYPE_OBJ_BLOCK; // weak +_UNKNOWN night::NS_TYPE_OBJ_SELF_OP; // weak +_UNKNOWN night::NS_TYPE_OBJ_PROPERTY; // weak +_UNKNOWN night::NS_TYPE_OBJ_DOT; // weak +_UNKNOWN night::NS_TYPE_K_V; // weak +_UNKNOWN night::NS_TYPE_TERNARY; // weak +_UNKNOWN night::NS_TYPE_ASSIGN; // weak +_UNKNOWN night::NS_TYPE_BINARY; // weak +_UNKNOWN night::NS_TYPE_OP_SELF; // weak +_UNKNOWN night::NS_TYPE_OP; // weak +_UNKNOWN night::NS_TYPE_PUNC; // weak +_UNKNOWN night::NS_TYPE_KW; // weak +_UNKNOWN night::NS_TYPE_B_TYPE; // weak +_UNKNOWN night::NS_TYPE_NUM; // weak +_UNKNOWN night::NS_TYPE_STR; // weak +_UNKNOWN night::NS_TYPE_VAR; // weak +_UNKNOWN night::NS_TYPE_BOOL; // weak +_UNKNOWN night::NS_TYPE_SKIP; // weak +_UNKNOWN night::nst_; // weak +void *night::nsv_; // weak +int dword_565DF4; // weak +_UNKNOWN night::NS_BUILTIN_TYPE; // weak +_UNKNOWN night::NS_BUILTIN_KW; // weak +_UNKNOWN night::NS_BUILTIN_SPACE; // weak +_UNKNOWN night::NS_BUILTIN_PUNC; // weak +_UNKNOWN night::NS_BUILTIN_ALL_OP; // weak +_UNKNOWN night::NS_BUILTIN_OP_SELF; // weak +_UNKNOWN night::NS_BUILTIN_OP; // weak +_UNKNOWN night::NS_TYPE_CALL; // weak +_UNKNOWN night::NS_TYPE_FUNC; // weak +_UNKNOWN night::NS_TYPE_PROG_NO_SEM_REQUIRE; // weak +_UNKNOWN night::NS_TYPE_PROG_NO_SEM; // weak +_UNKNOWN night::NS_TYPE_PROG; // weak +_UNKNOWN night::NS_TYPE_SWITCH; // weak +_UNKNOWN night::NS_TYPE_DO_WHILE; // weak +_UNKNOWN night::NS_TYPE_WHILE; // weak +_UNKNOWN night::NS_TYPE_FOR; // weak +_UNKNOWN night::NS_TYPE_IF; // weak +_UNKNOWN night::NS_TYPE_BRACKET; // weak +_UNKNOWN night::NS_TYPE_ARRAY; // weak +_UNKNOWN night::NS_TYPE_OBJ_BLOCK; // weak +_UNKNOWN night::NS_TYPE_OBJ_SELF_OP; // weak +_UNKNOWN night::NS_TYPE_OBJ_PROPERTY; // weak +_UNKNOWN night::NS_TYPE_OBJ_DOT; // weak +_UNKNOWN night::NS_TYPE_K_V; // weak +_UNKNOWN night::NS_TYPE_TERNARY; // weak +_UNKNOWN night::NS_TYPE_ASSIGN; // weak +_UNKNOWN night::NS_TYPE_BINARY; // weak +_UNKNOWN night::NS_TYPE_OP_SELF; // weak +_UNKNOWN night::NS_TYPE_OP; // weak +_UNKNOWN night::NS_TYPE_PUNC; // weak +_UNKNOWN night::NS_TYPE_KW; // weak +_UNKNOWN night::NS_TYPE_B_TYPE; // weak +_UNKNOWN night::NS_TYPE_NUM; // weak +_UNKNOWN night::NS_TYPE_STR; // weak +_UNKNOWN night::NS_TYPE_VAR; // weak +_UNKNOWN night::NS_TYPE_BOOL; // weak +_UNKNOWN night::NS_TYPE_SKIP; // weak +_UNKNOWN night::nst_; // weak +_UNKNOWN night::nsv_; // weak +_UNKNOWN night::NS_BUILTIN_TYPE; // weak +_UNKNOWN night::NS_BUILTIN_KW; // weak +_UNKNOWN night::NS_BUILTIN_SPACE; // weak +_UNKNOWN night::NS_BUILTIN_PUNC; // weak +_UNKNOWN night::NS_BUILTIN_ALL_OP; // weak +_UNKNOWN night::NS_BUILTIN_OP_SELF; // weak +_UNKNOWN night::NS_BUILTIN_OP; // weak +_UNKNOWN night::NS_TYPE_CALL; // weak +_UNKNOWN night::NS_TYPE_FUNC; // weak +_UNKNOWN night::NS_TYPE_PROG_NO_SEM_REQUIRE; // weak +_UNKNOWN night::NS_TYPE_PROG_NO_SEM; // weak +_UNKNOWN night::NS_TYPE_PROG; // weak +_UNKNOWN night::NS_TYPE_SWITCH; // weak +_UNKNOWN night::NS_TYPE_DO_WHILE; // weak +_UNKNOWN night::NS_TYPE_WHILE; // weak +_UNKNOWN night::NS_TYPE_FOR; // weak +_UNKNOWN night::NS_TYPE_IF; // weak +_UNKNOWN night::NS_TYPE_BRACKET; // weak +_UNKNOWN night::NS_TYPE_ARRAY; // weak +_UNKNOWN night::NS_TYPE_OBJ_BLOCK; // weak +_UNKNOWN night::NS_TYPE_OBJ_SELF_OP; // weak +_UNKNOWN night::NS_TYPE_OBJ_PROPERTY; // weak +_UNKNOWN night::NS_TYPE_OBJ_DOT; // weak +_UNKNOWN night::NS_TYPE_K_V; // weak +_UNKNOWN night::NS_TYPE_TERNARY; // weak +_UNKNOWN night::NS_TYPE_ASSIGN; // weak +_UNKNOWN night::NS_TYPE_BINARY; // weak +_UNKNOWN night::NS_TYPE_OP_SELF; // weak +_UNKNOWN night::NS_TYPE_OP; // weak +_UNKNOWN night::NS_TYPE_PUNC; // weak +_UNKNOWN night::NS_TYPE_KW; // weak +_UNKNOWN night::NS_TYPE_B_TYPE; // weak +_UNKNOWN night::NS_TYPE_NUM; // weak +_UNKNOWN night::NS_TYPE_STR; // weak +_UNKNOWN night::NS_TYPE_VAR; // weak +_UNKNOWN night::NS_TYPE_BOOL; // weak +_UNKNOWN night::NS_TYPE_SKIP; // weak +_UNKNOWN night::nst_; // weak +_UNKNOWN night::nsv_; // weak +int WXML::DOMLib::WXMLDom::componentCnt; // weak +int WXML::DOMLib::Machine::STT[]; // weak +int dword_566564; // weak +int dword_566574; // weak +int dword_566584; // weak +int dword_5665DC; // weak +int dword_5665E0; // weak +int WXML::DOMLib::Machine::TT[]; // weak +int dword_567960[]; // weak +int dword_567964; // weak +int dword_567A54; // weak +int dword_567B50; // weak +int dword_567D64; // weak +int dword_567D68[33]; // weak +int dword_567DEC; // weak +int dword_567E24; // weak +int dword_567F44; // weak +int dword_568168; // weak +int dword_56816C[34]; // weak +int dword_5681F4; // weak +int dword_568208; // weak +int dword_568228; // weak +int dword_56825C; // weak +int dword_568260; // weak +int dword_568264; // weak +int dword_56856C; // weak +int dword_568570[34]; // weak +int dword_5685F8; // weak +int dword_56862C; // weak +int dword_568664; // weak +int dword_568668; // weak +int dword_568970; // weak +int dword_568974; // weak +int dword_56899C; // weak +int dword_5689FC; // weak +int dword_568AE4; // weak +int dword_568D74; // weak +int dword_568D78[]; // weak +int dword_568E00; // weak +int dword_568E14; // weak +int dword_569178; // weak +int dword_5691A4; // weak +int dword_56957C; // weak +int dword_569984; // weak +int dword_5699AC; // weak +int dword_569A20; // weak +int dword_569AF4; // weak +int dword_569D84; // weak +int dword_569DB0; // weak +int dword_56A188; // weak +int dword_56A18C; // weak +int dword_56A214; // weak +int dword_56A2FC; // weak +int dword_56A58C; // weak +int dword_56A990; // weak +int dword_56A994; // weak +int dword_56AA30; // weak +int dword_56AB04; // weak +int dword_56AD94; // weak +int dword_56B198; // weak +int dword_56B388; // weak +int dword_56B59C; // weak +int dword_56B5A0; // weak +int dword_56B628; // weak +int dword_56B63C; // weak +int dword_56B794; // weak +int dword_56B9A0; // weak +int dword_56BB98; // weak +int dword_56BDA4; // weak +int dword_56BDA8[62]; // weak +int dword_56BEA0; // weak +int dword_56C1A8; // weak +int dword_56C260; // weak +int dword_56C5AC; // weak +int dword_56C664; // weak +int dword_56C9B0; // weak +int dword_56CA68; // weak +int dword_56CAAC; // weak +int dword_56CDB4; // weak +int dword_56CF98; // weak +int dword_56D1B8; // weak +int dword_56D388; // weak +int dword_56D5BC; // weak +int dword_56D5C0[62]; // weak +int dword_56D6B8; // weak +int dword_56D9C0; // weak +int dword_56DA80; // weak +int dword_56DABC; // weak +int dword_56DDC4; // weak +int dword_56DE84; // weak +int dword_56E1C8; // weak +int dword_56E3A8; // weak +int dword_56E5CC; // weak +int dword_56E7B0; // weak +int dword_56E9D0; // weak +int dword_56EBA0; // weak +int dword_56EDD4; // weak +int dword_56EDD8[62]; // weak +int dword_56EED0; // weak +int dword_56F1D8; // weak +int dword_56F2CC; // weak +int dword_56F5DC; // weak +int dword_56F6D8; // weak +int dword_56F9E0; // weak +int dword_56FA98; // weak +int dword_56FDE4; // weak +int dword_56FE9C; // weak +int dword_5701E8; // weak +int dword_5806EC; // weak +_UNKNOWN unk_620001; // weak +char WXML::DOMLib::Machine::InitTransitTable(void)::bInited; // weak +int WXML::EXPRLib::Tokenizer::TT[]; // weak +int dword_6689A0[]; // weak +int dword_6689A4[33]; // weak +int dword_668A28; // weak +int dword_668A2C; // weak +int dword_668A3C; // weak +int dword_668A40; // weak +int dword_668A5C; // weak +int dword_668A60; // weak +int dword_668A94; // weak +int dword_668A98; // weak +int dword_668A9C; // weak +int dword_668B94; // weak +int dword_668DA4; // weak +int dword_668E9C; // weak +int dword_6691A8; // weak +int dword_6691AC[46]; // weak +int dword_669264; // weak +int dword_6695AC; // weak +int dword_669668; // weak +int dword_6699B0; // weak +int dword_669DE0; // weak +int dword_669E40; // weak +int dword_669F28; // weak +int dword_66A1B8; // weak +int dword_66A1E4; // weak +int dword_66A5BC; // weak +int dword_66A5E8; // weak +int dword_66A65C; // weak +int dword_66A730; // weak +int dword_66A9C0; // weak +int dword_66A9EC; // weak +int dword_66ADC4; // weak +int dword_66ADC8[46]; // weak +int dword_66AE80; // weak +int dword_66B1C8; // weak +int dword_66B1CC[256]; // weak +int dword_66B5CC; // weak +int dword_66B6C4; // weak +int dword_66B9D0; // weak +int dword_66B9D4[256]; // weak +int dword_66BDD4; // weak +int dword_66BE70; // weak +int dword_66C1D8; // weak +int dword_66C3CC; // weak +int dword_66C5DC; // weak +int dword_66C6D0; // weak +int dword_66C6D4; // weak +int dword_66C9E0; // weak +int dword_66CAD8; // weak +int dword_66CADC; // weak +int dword_66CDE4; // weak +int dword_66CEDC; // weak +int dword_66D1E8; // weak +int dword_66D2E0; // weak +int dword_66D5EC; // weak +int dword_66D6E4; // weak +int dword_66D9F0; // weak +int dword_66DA9C; // weak +int dword_66DDF4; // weak +int dword_66DEA0; // weak +int dword_66E1F8; // weak +int dword_66E2A4; // weak +int dword_66E2B8; // weak +int dword_66E5FC; // weak +char WXML::EXPRLib::Tokenizer::InitTransitTable(void)::bInited; // weak +int bss_0; // weak +int __native_startup_lock; // weak +int __native_startup_state; // weak +int _dowildcard; // weak +int mingw_initcharmax; // weak +int _newmode; // weak +int mingw_initltssuo_force; // weak +int mingw_initltsdyn_force; // weak +int mingw_initltsdrot_force; // weak +int _commode; +int mingw_app_type; // weak +int was_init_0; // weak +int maxSections; // weak +int the_secs; // weak +int (__cdecl *stUserMathErr)(_DWORD); // weak +int _fmode; +int (__stdcall *__mingw_oldexcpt_handler)(_DWORD); // weak +void *key_dtor_list; // idb +int __mingwthr_cs_init; // weak +struct _RTL_CRITICAL_SECTION __mingwthr_cs; // idb +DWORD fc_key; // idb +int fc_static; // weak +int emutls_size; // weak +DWORD emutls_key; // idb +int emutls_mutex; // weak +HANDLE hHandle; // idb +char __hexdig_D2A[48]; // weak +char byte_769690; // weak +int p5s; // weak +_UNKNOWN private_mem; // weak +int freelist[]; // weak +int dword_76A084; // weak +int dtoa_CS_init; // weak +struct _RTL_CRITICAL_SECTION dtoa_CritSec; // idb +struct _RTL_CRITICAL_SECTION CriticalSection; // idb +_UNKNOWN bss_1; // weak +_UNKNOWN internal_mbstate_1; // weak +_UNKNOWN internal_mbstate_2; // weak +int handler; // weak +int (__stdcall *pRtlGenRandom)(_DWORD, _DWORD); // weak +int msvcrt__lc_codepage; // weak +// extern HANDLE (__stdcall *CreateSemaphoreW)(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCWSTR lpName); +// extern void (__stdcall *DeleteCriticalSection)(LPCRITICAL_SECTION lpCriticalSection); +// extern void (__stdcall *EnterCriticalSection)(LPCRITICAL_SECTION lpCriticalSection); +// extern DWORD (__stdcall *GetCurrentThreadId)(); +// extern DWORD (__stdcall *GetLastError)(); +// extern HMODULE (__stdcall *GetModuleHandleW)(LPCWSTR lpModuleName); +// extern FARPROC (__stdcall *GetProcAddress)(HMODULE hModule, LPCSTR lpProcName); +// extern void (__stdcall *GetStartupInfoA)(LPSTARTUPINFOA lpStartupInfo); +// extern void (__stdcall *InitializeCriticalSection)(LPCRITICAL_SECTION lpCriticalSection); +// extern BOOL (__stdcall *IsDBCSLeadByteEx)(UINT CodePage, BYTE TestChar); +// extern void (__stdcall *LeaveCriticalSection)(LPCRITICAL_SECTION lpCriticalSection); +// extern HMODULE (__stdcall *LoadLibraryW)(LPCWSTR lpLibFileName); +// extern int (__stdcall *MultiByteToWideChar)(UINT CodePage, DWORD dwFlags, LPCCH lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar); +// extern BOOL (__stdcall *ReleaseSemaphore)(HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount); +// extern void (__stdcall *SetLastError)(DWORD dwErrCode); +// extern LPTOP_LEVEL_EXCEPTION_FILTER (__stdcall *SetUnhandledExceptionFilter)(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter); +// extern void (__stdcall *Sleep)(DWORD dwMilliseconds); +// extern DWORD (__stdcall *TlsAlloc)(); +// extern BOOL (__stdcall *TlsFree)(DWORD dwTlsIndex); +// extern LPVOID (__stdcall *TlsGetValue)(DWORD dwTlsIndex); +// extern BOOL (__stdcall *TlsSetValue)(DWORD dwTlsIndex, LPVOID lpTlsValue); +// extern BOOL (__stdcall *VirtualProtect)(LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect); +// extern SIZE_T (__stdcall *VirtualQuery)(LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength); +// extern DWORD (__stdcall *WaitForSingleObject)(HANDLE hHandle, DWORD dwMilliseconds); +// extern int (__stdcall *WideCharToMultiByte)(UINT CodePage, DWORD dwFlags, LPCWCH lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cbMultiByte, LPCCH lpDefaultChar, LPBOOL lpUsedDefaultChar); +// extern _UNKNOWN ___initenv; weak +// extern int ___mb_cur_max; +// extern int *(__cdecl *__errno)(); +// extern int (__cdecl *__fstat64)(int FileHandle, struct _stat64 *Stat); +// extern FILE __iob[]; +// extern int (__cdecl *__stricmp)(const char *String1, const char *String2); +// extern FILE *(__cdecl *__wfopen)(const wchar_t *FileName, const wchar_t *Mode); +_PVFV __xc_a = NULL; // idb +_PVFV __xc_z = NULL; // idb +_PVFV __crt_xc_end__ = NULL; // idb +_PVFV __xi_z = NULL; // idb + + +//----- (00401010) -------------------------------------------------------- +int pre_c_init() +{ + BOOL v0; // eax + __int16 v2; // dx + + v0 = 0; + mingw_initltsdrot_force = 1; + mingw_initltsdyn_force = 1; + mingw_initltssuo_force = 1; + mingw_initcharmax = 1; + if ( MEMORY[0x400000] == 23117 && *(_DWORD *)(MEMORY[0x40003C] + 0x400000) == 17744 ) + { + v2 = *(_WORD *)(MEMORY[0x40003C] + 4194328); + if ( v2 == 267 ) + { + if ( *(_DWORD *)(MEMORY[0x40003C] + 4194420) > 0xEu ) + v0 = *(_DWORD *)(MEMORY[0x40003C] + 4194536) != 0; + } + else if ( v2 == 523 && *(_DWORD *)(MEMORY[0x40003C] + 4194436) > 0xEu ) + { + v0 = *(_DWORD *)(MEMORY[0x40003C] + 4194552) != 0; + } + } + managedapp = v0; + if ( mingw_app_type ) + __set_app_type(_crt_gui_app); + else + __set_app_type(_crt_console_app); + *__p__fmode() = _fmode; + *__p__commode() = _commode; + _setargv(); + if ( _MINGW_INSTALL_DEBUG_MATHERR == 1 ) + __mingw_setusermatherr(_matherr); + return 0; +} +// 53E22C: using guessed type int _MINGW_INSTALL_DEBUG_MATHERR; +// 7695D8: using guessed type int mingw_initcharmax; +// 7695E0: using guessed type int mingw_initltssuo_force; +// 7695E4: using guessed type int mingw_initltsdyn_force; +// 7695E8: using guessed type int mingw_initltsdrot_force; +// 7695F4: using guessed type int mingw_app_type; + +//----- (00401130) -------------------------------------------------------- +void pre_cpp_init() +{ + startinfo.newmode = _newmode; + __getmainargs(&argc, &argv, &envp, _dowildcard, &startinfo); +} +// 46CBF8: using guessed type int __cdecl __getmainargs(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +// 7695D4: using guessed type int _dowildcard; +// 7695DC: using guessed type int _newmode; + +//----- (00401170) -------------------------------------------------------- +// write access to const memory has been detected, the output may be wrong! +int __usercall __tmainCRTStartup@(int a1@, int a2@, int a3@, int a4@, char a5) +{ + signed __int32 v5; // edi + signed __int32 v6; // eax + __int32 v7; // ebx + char **v8; // eax + char v9; // cl + _TCHAR *v10; // eax + char v11; // dl + char v12; // dl + DWORD wShowWindow; // eax + int v14; // ebx + size_t v15; // esi + char **v16; // eax + char **v17; // ebx + const char **v18; // edi + const char *v19; // eax + size_t Size; // esi + char *v21; // eax + int result; // eax + size_t v23; // [esp+14h] [ebp-7Ch] + char **v24; // [esp+18h] [ebp-78h] + const char **v25; // [esp+1Ch] [ebp-74h] + struct _STARTUPINFOA v26; // [esp+2Ch] [ebp-64h] BYREF + char *v27; // [esp+78h] [ebp-18h] + int v28; // [esp+7Ch] [ebp-14h] + int v29; // [esp+80h] [ebp-10h] + int v30; // [esp+84h] [ebp-Ch] + int v31; // [esp+88h] [ebp-8h] + int v32; // [esp+8Ch] [ebp-4h] + int retaddr; // [esp+90h] [ebp+0h] + + v32 = retaddr; + v31 = a2; + v30 = a3; + v29 = a4; + v28 = a1; + v27 = &a5; + memset(&v26, 0, sizeof(v26)); + if ( mingw_app_type ) + GetStartupInfoA(&v26); + v5 = *((_DWORD *)NtCurrentTeb() + 1); + while ( 1 ) + { + v6 = _InterlockedCompareExchange(&__native_startup_lock, v5, 0); + if ( !v6 ) + { + v7 = 0; + if ( __native_startup_state == 1 ) + goto LABEL_40; + goto LABEL_8; + } + if ( v5 == v6 ) + break; + Sleep(0x3E8u); + } + v7 = 1; + if ( __native_startup_state == 1 ) + { +LABEL_40: + _amsg_exit(31); + if ( __native_startup_state == 1 ) + goto LABEL_41; +LABEL_11: + if ( v7 ) + goto LABEL_12; + goto LABEL_42; + } +LABEL_8: + if ( __native_startup_state ) + { + has_cctor = 1; + } + else + { + __native_startup_state = 1; + _initterm(&__crt_xc_end__, &__xi_z); + } + if ( __native_startup_state != 1 ) + goto LABEL_11; +LABEL_41: + _initterm(&__xc_a, &__xc_z); + __native_startup_state = 2; + if ( v7 ) + goto LABEL_12; +LABEL_42: + _InterlockedExchange(&__native_startup_lock, v7); +LABEL_12: + if ( __dyn_tls_init_callback ) + __dyn_tls_init_callback(0, 2, 0); + _pei386_runtime_relocator(); + __mingw_oldexcpt_handler = (int (__stdcall *)(_DWORD))SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)_gnu_exception_handler); + _set_invalid_parameter_handler(__mingw_invalidParameterHandler); + fpreset(); + __mingw_winmain_hInstance = (HINSTANCE)0x400000; + v8 = __p__acmdln(); + v9 = 0; + v10 = *v8; + if ( !v10 ) + goto LABEL_27; + while ( 1 ) + { + v11 = *v10; + if ( *v10 <= 32 ) + break; + if ( v11 == 34 ) + v9 ^= 1u; +LABEL_19: + ++v10; + } + if ( !v11 ) + goto LABEL_26; + if ( (v9 & 1) != 0 ) + { + v9 = 1; + goto LABEL_19; + } + do + v12 = *++v10; + while ( v12 && v12 <= 32 ); +LABEL_26: + __mingw_winmain_lpCmdLine = v10; +LABEL_27: + if ( mingw_app_type ) + { + wShowWindow = 10; + if ( (v26.dwFlags & 1) != 0 ) + wShowWindow = v26.wShowWindow; + _data_start__ = wShowWindow; + } + v14 = argc; + v15 = 4 * argc + 4; + v16 = (char **)malloc(v15); + v24 = v16; + if ( v14 > 0 ) + { + v17 = v16; + v18 = (const char **)argv; + v23 = v15 - 4; + v25 = (const char **)((char *)argv + v15 - 4); + do + { + v19 = *v18; + ++v17; + ++v18; + Size = strlen(v19) + 1; + v21 = (char *)malloc(Size); + *(v17 - 1) = v21; + memcpy(v21, *(v18 - 1), Size); + } + while ( v25 != v18 ); + v16 = (char **)((char *)v24 + v23); + } + *v16 = 0; + argv = v24; + __main(); + ___initenv = envp; + result = main(argc, (const char **)argv, ___initenv); + mainret = result; + if ( !managedapp ) + exit(result); + if ( !has_cctor ) + { + _cexit(); + return mainret; + } + return result; +} +// 40137A: write access to const memory at 76B260 has been detected +// 401170: could not find valid save-restore pair for ebx +// 401170: could not find valid save-restore pair for ebp +// 401170: could not find valid save-restore pair for edi +// 401170: could not find valid save-restore pair for esi +// 4012B2: conditional instruction was optimized away because dl.1!=0 +// 46CBC8: using guessed type int __cdecl _amsg_exit(_DWORD); +// 55A440: using guessed type int (__stdcall *__dyn_tls_init_callback)(_DWORD, _DWORD, _DWORD); +// 7695CC: using guessed type int __native_startup_lock; +// 7695D0: using guessed type int __native_startup_state; +// 7695F4: using guessed type int mingw_app_type; +// 76960C: using guessed type int (__stdcall *__mingw_oldexcpt_handler)(_DWORD); + +//----- (004014B0) -------------------------------------------------------- +int __usercall WinMainCRTStartup@(int a1@, int a2@, int a3@, int a4@, char a5) +{ + mingw_app_type = 1; + return __tmainCRTStartup(a1, a2, a3, a4, a5); +} +// 7695F4: using guessed type int mingw_app_type; + +//----- (004014C0) -------------------------------------------------------- +int __usercall mainCRTStartup@(int a1@, int a2@, int a3@, int a4@, char a5) +{ + mingw_app_type = 0; + return __tmainCRTStartup(a1, a2, a3, a4, a5); +} +// 7695F4: using guessed type int mingw_app_type; + +//----- (004014D0) -------------------------------------------------------- +int __cdecl atexit(_PVFV func) +{ + return -(_onexit((_onexit_t)func) == 0); +} + +//----- (004014F0) -------------------------------------------------------- +int __gcc_register_frame() +{ + return atexit(__gcc_deregister_frame); +} + +//----- (00401520) -------------------------------------------------------- +int printf(char *a1, ...) +{ + FILE *v1; // eax + va_list va; // [esp+24h] [ebp+Ch] BYREF + + va_start(va, a1); + v1 = ___acrt_iob_func(1u); + return __mingw_vfprintf(v1, a1, (int *)va); +} + +//----- (00401550) -------------------------------------------------------- +int fprintf(_iobuf *a1, char *a2, ...) +{ + va_list va; // [esp+28h] [ebp+10h] BYREF + + va_start(va, a2); + return __mingw_vfprintf(a1, a2, (int *)va); +} + +//----- (00401571) -------------------------------------------------------- +void __tcf_1(void) +{ + std::ios_base::Init::~Init(); +} + +//----- (0040157C) -------------------------------------------------------- +void *__usercall std::_Vector_base::_M_allocate@(unsigned int a1@) +{ + if ( !a1 ) + return 0; + if ( a1 > 0x5555555 ) + std::__throw_bad_alloc(); + return operator new(24 * a1); +} +// 40157C: could not find valid save-restore pair for ebp + +//----- (004015A2) -------------------------------------------------------- +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str) +{ + size_t v2; // eax + + v2 = strlen(Str); + return std::string::_M_replace(this, 0, this[1], Str, v2); +} + +//----- (004015E0) -------------------------------------------------------- +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2) +{ + unsigned __int8 *v3; // eax + unsigned __int8 *v4; // ecx + unsigned __int8 *v5; // edx + unsigned __int8 *v6; // eax + unsigned __int8 *v7; // edx + unsigned __int8 *result; // eax + unsigned __int8 *v9; // [esp+18h] [ebp-20h] + + v3 = *this; + v4 = *(unsigned __int8 **)a2; + v5 = *(unsigned __int8 **)(a2 + 4); + if ( *(_DWORD *)a2 == a2 + 8 ) + { + if ( v5 ) + std::string::_S_copy(v3, v4, *(_DWORD *)(a2 + 4)); + v6 = *(unsigned __int8 **)(a2 + 4); + v7 = *this; + this[1] = v6; + v6[(_DWORD)v7] = 0; + } + else + { + if ( v3 == (unsigned __int8 *)(this + 2) ) + v3 = 0; + else + v9 = this[2]; + *this = v4; + this[1] = v5; + this[2] = *(unsigned __int8 **)(a2 + 8); + if ( v3 ) + { + *(_DWORD *)a2 = v3; + *(_DWORD *)(a2 + 8) = v9; + } + else + { + *(_DWORD *)a2 = a2 + 8; + } + } + result = *(unsigned __int8 **)a2; + *(_DWORD *)(a2 + 4) = 0; + *result = 0; + return result; +} +// 401647: variable 'v9' is possibly undefined + +//----- (00401668) -------------------------------------------------------- +size_t __thiscall std::string::basic_string(void **this, char *Str) +{ + char *v3; // edi + size_t result; // eax + _BYTE *v5; // edx + size_t v6[7]; // [esp+1Ch] [ebp-1Ch] BYREF + + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v6[0] = strlen(Str); + v3 = &Str[v6[0]]; + if ( v6[0] > 0xF ) + { + *this = std::string::_M_create(v6, 0); + this[2] = (void *)v6[0]; + } + std::string::_S_copy_chars(*this, (unsigned __int8 *)Str, (size_t)v3); + result = v6[0]; + v5 = *this; + this[1] = (void *)v6[0]; + v5[result] = 0; + return result; +} +// 401668: using guessed type size_t var_1C[7]; + +//----- (004016E6) -------------------------------------------------------- +void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-28h] + + while ( a1 ) + { + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::string::_M_dispose((void **)(a1 + 40)); + std::string::_M_dispose((void **)(a1 + 16)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (00401726) -------------------------------------------------------- +int __cdecl Usage(int a1, const char **a2) +{ + printf("Wechat WXML Compiler, version %s\n", "v0.5vv_20200413_syb_scopedata"); + printf( + "Usage: %s [-d] [-o OUTPUT] [-xc XComponentDefine] [-om XComponentDefine] [-cb [callback.js...]] [-llcommon] [-llw/-l" + "la XCPath] \n", + *a2); + printf(" Options:\n"); + printf(" -d: output code for debug\n"); + printf(" -o: output destination (default stdout)\n"); + printf(" -xc: output simplified code for custom component\n"); + printf(" -cc: output compelete code for custom component\n"); + printf(" -s: read from stdin\n"); + printf(" -ds: insert debug wxs info\n"); + printf(" -cb: add life cycle callback\n"); + printf(" -llw: compile in lazy load mode (webiew)\n"); + printf(" -lla: compile in lazy load mode (app service)\n"); + printf(" args XCPath: custom component paths connected by comma or --split (./page/index,./comp/comp)\n"); + return 1; +} + +//----- (004017E0) -------------------------------------------------------- +int __cdecl ReadFile(char *FileName, unsigned int *a2) +{ + FILE *v2; // eax + FILE *v3; // ebx + unsigned int v4; // eax + int v5; // esi + char Buffer[4]; // [esp+10h] [ebp-418h] BYREF + char v8[1020]; // [esp+14h] [ebp-414h] BYREF + + std::string::operator=(a2, (char *)&byte_5402D0); + v2 = ___acrt_iob_func(0); + if ( FileName ) + v2 = fopen(FileName, "r"); + v3 = v2; + if ( !v2 ) + return -1; + *(_DWORD *)Buffer = 0; + memset(v8, 0, sizeof(v8)); + while ( fgets(Buffer, 1024, v3) ) + { + v4 = strlen(Buffer); + if ( v4 > 0x3FFFFFFF - a2[1] ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(a2, Buffer, v4); + } + v5 = 0; + if ( FileName ) + fclose(v3); + return v5; +} + +//----- (004018B2) -------------------------------------------------------- +int __cdecl Trim(int a1, int a2) +{ + unsigned int v2; // eax + void *v4[6]; // [esp+50h] [ebp-38h] BYREF + void *v5[8]; // [esp+68h] [ebp-20h] BYREF + + std::string::basic_string((char *)a1, a2); + while ( *(_DWORD *)(a1 + 4) > 1u && **(_BYTE **)a1 == 32 ) + { + std::string::substr(v4, (_DWORD *)a1, 1u, 0xFFFFFFFF); + std::string::operator=((unsigned __int8 **)a1, (int)v4); + std::string::_M_dispose(v4); + } + while ( 1 ) + { + v2 = *(_DWORD *)(a1 + 4); + if ( v2 <= 1 || *(_BYTE *)(*(_DWORD *)a1 + v2 - 1) != 32 ) + break; + std::string::substr(v5, (_DWORD *)a1, 0, v2 - 1); + std::string::operator=((unsigned __int8 **)a1, (int)v5); + std::string::_M_dispose(v5); + } + return a1; +} + +//----- (004019D7) -------------------------------------------------------- +/** + * @param a1 存储结果的容器 + * @param a2 配置内容 + * @param a3 换行标记 \n +*/ +int GetNextArg(int a1, int *a2, int a3) +{ + unsigned int v3; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-90h] + void *v6[2]; // [esp+58h] [ebp-50h] BYREF + char v7; // [esp+60h] [ebp-48h] BYREF + void *v8[6]; // [esp+70h] [ebp-38h] BYREF + void *v9[8]; // [esp+88h] [ebp-20h] BYREF + + v3 = std::string::find(a2, *(char **)a3, 0); + v6[1] = 0; + lpuexcpt = (struct _Unwind_Exception *)v3; + v6[0] = &v7; + v7 = 0; + if ( v3 == -1 ) + { + std::string::_M_assign((int)v6, (int)a2); + std::string::operator=((unsigned int *)a2, (char *)&byte_5402D0); + } + else + { + std::string::substr(v8, a2, 0, v3); + std::string::operator=((unsigned __int8 **)v6, (int)v8); + std::string::_M_dispose(v8); + std::string::substr(v9, a2, (unsigned int)lpuexcpt + *(_DWORD *)(a3 + 4), 0xFFFFFFFF); + std::string::operator=((unsigned __int8 **)a2, (int)v9); + std::string::_M_dispose(v9); + } + Trim(a1, (int)v6); + std::string::_M_dispose(v6); + return a1; +} + +//----- (00401B4E) -------------------------------------------------------- +int __cdecl EscapeToJsonString(int a1, int a2) +{ + unsigned __int8 v2; // al + char *v3; // eax + char *v4; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-110h] + unsigned __int8 v7; // [esp+57h] [ebp-D1h] BYREF + int v8; // [esp+58h] [ebp-D0h] BYREF + char v9[204]; // [esp+5Ch] [ebp-CCh] BYREF + + std::ostringstream::basic_ostringstream((int)&v8); + for ( lpuexcpt = *(struct _Unwind_Exception **)a2; + lpuexcpt != (struct _Unwind_Exception *)(*(_DWORD *)a2 + *(_DWORD *)(a2 + 4)); + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1) ) + { + v2 = *(_BYTE *)lpuexcpt; + if ( *(_BYTE *)lpuexcpt == 92 || v2 == 34 || v2 <= 0x1Fu ) + { + v3 = (char *)std::operator<<>((std::ostream::sentry *)&v8, "\\u"); + v4 = std::ostream::operator<<(v3, (void (__cdecl *)(char *))std::hex); + *(_DWORD *)&v4[*(_DWORD *)(*(_DWORD *)v4 - 12) + 8] = 4; + std::operator<<>(v4, 48); + std::ostream::operator<<(*(char *)lpuexcpt); + } + else + { + v7 = *(_BYTE *)lpuexcpt; + std::__ostream_insert>((std::ostream::sentry *)&v8, (int)&v7, 1); + } + } + std::stringbuf::str(a1, (int)v9); + std::ostringstream::~ostringstream((int)&v8); + return a1; +} +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); +// 401B4E: using guessed type char var_CC[204]; + +//----- (00401CE9) -------------------------------------------------------- +int __cdecl DictToJsonString(int a1, int a2) +{ + char v2; // al + std::ostream::sentry *v3; // eax + std::ostream::sentry *v4; // eax + std::ostream::sentry *v6; // [esp+14h] [ebp-124h] + std::ostream::sentry *v7; // [esp+14h] [ebp-124h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-120h] + char *v9[6]; // [esp+50h] [ebp-E8h] BYREF + char v10[4]; // [esp+68h] [ebp-D0h] BYREF + char v11[204]; // [esp+6Ch] [ebp-CCh] BYREF + + std::ostringstream::basic_ostringstream((int)v10); + std::operator<<>((std::ostream::sentry *)v10, "{"); + lpuexcpt = *(struct _Unwind_Exception **)(a2 + 12); + v2 = 1; + while ( (struct _Unwind_Exception *)(a2 + 4) != lpuexcpt ) + { + if ( !v2 ) + std::operator<<>((std::ostream::sentry *)v10, ","); + v6 = std::operator<<>((std::ostream::sentry *)v10, "\""); + EscapeToJsonString((int)v9, (int)lpuexcpt + 16); + v3 = std::operator<<>(v6, v9[0]); + std::operator<<>(v3, "\":"); + std::string::_M_dispose((void **)v9); + v7 = std::operator<<>((std::ostream::sentry *)v10, "\""); + EscapeToJsonString((int)v9, (int)lpuexcpt + 40); + v4 = std::operator<<>(v7, v9[0]); + std::operator<<>(v4, "\""); + std::string::_M_dispose((void **)v9); + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree_increment((int)lpuexcpt); + v2 = 0; + } + std::operator<<>((std::ostream::sentry *)v10, "}"); + std::stringbuf::str(a1, (int)v11); + std::ostringstream::~ostringstream((int)v10); + return a1; +} +// 401CE9: using guessed type char var_D0[4]; +// 401CE9: using guessed type char var_CC[204]; + +//----- (00401F72) -------------------------------------------------------- +int __cdecl Split(int a1, int *a2, int a3) +{ + unsigned int i; // eax + unsigned int v5; // [esp+14h] [ebp-74h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-70h] + void *v7[6]; // [esp+50h] [ebp-38h] BYREF + void *v8[8]; // [esp+68h] [ebp-20h] BYREF + + lpuexcpt = 0; + *(_DWORD *)a1 = 0; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 8) = 0; + for ( i = std::string::find(a2, a3, 0); ; i = std::string::find(a2, a3, (int)lpuexcpt) ) + { + v5 = i; + std::string::substr(v7, a2, (unsigned int)lpuexcpt, i - (_DWORD)lpuexcpt); + Trim((int)v8, (int)v7); + std::vector::emplace_back((void **)a1, v8); + std::string::_M_dispose(v8); + std::string::_M_dispose(v7); + if ( v5 == -1 ) + break; + lpuexcpt = (struct _Unwind_Exception *)(*(_DWORD *)(a3 + 4) + v5); + } + return a1; +} + +//----- (004020A8) -------------------------------------------------------- +void __usercall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase( + int a1@) +{ + int v2; // esi + int v3; // edx + void *v4; // [esp+0h] [ebp-28h] + + while ( a1 ) + { + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::vector::~vector((void ***)(a1 + 40), v3); + std::string::_M_dispose((void **)(a1 + 16)); + v4 = (void *)a1; + a1 = v2; + operator delete(v4); + } +} +// 4020C8: variable 'v3' is possibly undefined + +//----- (004020E8) -------------------------------------------------------- +void __thiscall std::vector::operator=(int this, int *a2) +{ + int v2; // edx + int v3; // eax + int v4; // [esp+18h] [ebp-60h] + int v5; // [esp+1Ch] [ebp-5Ch] + char *v6; // [esp+1Ch] [ebp-5Ch] + void **v7; // [esp+20h] [ebp-58h] + signed int v8; // [esp+24h] [ebp-54h] + int i; // [esp+24h] [ebp-54h] + char *Block; // [esp+28h] [ebp-50h] + int Blocka; // [esp+28h] [ebp-50h] + int v12; // [esp+2Ch] [ebp-4Ch] + void **v13; // [esp+30h] [ebp-48h] + int v14; // [esp+30h] [ebp-48h] + int v15; // [esp+34h] [ebp-44h] + void **j; // [esp+34h] [ebp-44h] + int v17; // [esp+34h] [ebp-44h] + + if ( a2 != (int *)this ) + { + v4 = a2[1]; + v15 = *a2; + v12 = v4 - *a2; + v8 = -1431655765 * (v12 >> 3); + v13 = *(void ***)this; + if ( *(_DWORD *)(this + 8) - *(_DWORD *)this >= (unsigned int)v12 ) + { + v7 = *(void ***)(this + 4); + if ( v12 > (unsigned int)((char *)v7 - (char *)v13) ) + { + for ( i = -1431655765 * (((char *)v7 - (char *)v13) >> 3); i > 0; --i ) + { + std::string::_M_assign((int)v13, v15); + v15 += 24; + v13 += 6; + } + v14 = a2[1]; + v17 = *a2 + *(_DWORD *)(this + 4) - *(_DWORD *)this; + v6 = *(char **)(this + 4); + while ( v14 != v17 ) + { + std::string::basic_string(v6, v17); + v17 += 24; + v6 += 24; + } + } + else + { + Blocka = -1431655765 * ((v4 - *a2) >> 3); + v5 = *(_DWORD *)this; + while ( Blocka > 0 ) + { + std::string::_M_assign(v5, v15); + v15 += 24; + v5 += 24; + --Blocka; + } + v3 = 0; + if ( v8 >= 0 ) + v3 = -1431655765 * (v12 >> 3); + for ( j = &v13[6 * v3]; v7 != j; j += 6 ) + std::string::_M_dispose(j); + } + } + else + { + Block = (char *)std::_Vector_base::_M_allocate(v8); + std::__uninitialized_copy::__uninit_copy<__gnu_cxx::__normal_iterator>,std::string*>( + v15, + v4, + Block); + std::_Destroy_aux::__destroy(v2, *(void ***)this, *(void ***)(this + 4)); + if ( *(_DWORD *)this ) + operator delete(*(void **)this); + *(_DWORD *)this = Block; + *(_DWORD *)(this + 8) = &Block[v12]; + } + *(_DWORD *)(this + 4) = *(_DWORD *)this + v12; + } +} +// 4021A7: variable 'v2' is possibly undefined + +//----- (00402388) -------------------------------------------------------- +#error "4024F8: call analysis failed (funcsize=102)" + +//----- (004024FE) -------------------------------------------------------- +int __usercall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_copy>,std::_Select1st>>,std::less,std::allocator>>>::_Alloc_node>@( + int a1@, + int a2@) +{ + int i; // eax + int v4; // [esp+1Ch] [ebp-4Ch] + int v6; // [esp+20h] [ebp-48h] + struct _Unwind_Exception *lpuexcpta; // [esp+24h] [ebp-44h] + int v9; // [esp+28h] [ebp-40h] + + v9 = std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_clone_node>,std::_Select1st>>,std::less,std::allocator>>>::_Alloc_node>(); + *(_DWORD *)(v9 + 4) = a2; + if ( *(_DWORD *)(a1 + 12) ) + *(_DWORD *)(v9 + 12) = ((int (*)(void))std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_copy>,std::_Select1st>>,std::less,std::allocator>>>::_Alloc_node>)(); + lpuexcpta = *(struct _Unwind_Exception **)(a1 + 8); + for ( i = v9; ; i = v6 ) + { + v4 = i; + if ( !lpuexcpta ) + break; + v6 = std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_clone_node>,std::_Select1st>>,std::less,std::allocator>>>::_Alloc_node>(); + *(_DWORD *)(v4 + 8) = v6; + *(_DWORD *)(v6 + 4) = v4; + if ( *((_DWORD *)lpuexcpta + 3) ) + *(_DWORD *)(v6 + 12) = std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_copy>,std::_Select1st>>,std::less,std::allocator>>>::_Alloc_node>( + v6, + v6); + lpuexcpta = (struct _Unwind_Exception *)*((_DWORD *)lpuexcpta + 2); + } + return v9; +} +// 402388: using guessed type int std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_clone_node>,std::_Select1st>>,std::less,std::allocator>>>::_Alloc_node>(void); + +//----- (00402626) -------------------------------------------------------- +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str) +{ + size_t v2; // eax + + v2 = strlen(Str); + return std::string::_M_replace(this, 0, this[1], Str, v2); +} + +//----- (00402663) -------------------------------------------------------- +int __cdecl WXML::RPX::accept(WXML::RPX *this, int (*a2)[266], bool *a3, int *a4) +{ + int v4; // eax + int i; // edx + int v7; // esi + int result; // eax + + v4 = 0; + for ( i = *(_DWORD *)a3; ; --i ) + { + v7 = v4; + if ( i <= 0 ) + break; + v4 = *((_DWORD *)this + 266 * v4 + *(unsigned __int8 *)a4); + if ( v4 == -1 ) + break; + a4 = (int *)((char *)a4 + 1); + } + result = -1; + if ( *((_BYTE *)*a2 + v7) ) + { + *(_DWORD *)a3 = i; + return 0; + } + return result; +} + +//----- (004026A6) -------------------------------------------------------- +int __cdecl WXML::RPX::acceptID(WXML::RPX *this, bool *a2) +{ + int v2; // eax + + if ( !WXML::RPX::acceptID(char const*,int &)::inited ) + { + memset(&WXML::RPX::acceptID(char const*,int &)::nextPos, 255, 0x850u); + v2 = 0; + dword_564F9C = 1; + dword_5653C4 = 1; + do + { + dword_564FA4[v2] = 1; + dword_564F24[v2] = 1; + dword_5653CC[v2] = 1; + dword_56534C[v2++] = 1; + } + while ( v2 != 26 ); + dword_565308 = 1; + dword_56530C = 1; + dword_565310 = 1; + dword_565314 = 1; + dword_565318 = 1; + dword_56531C = 1; + dword_565320 = 1; + dword_565324 = 1; + dword_565328 = 1; + dword_56532C = 1; + WXML::RPX::acceptID(char const*,int &)::inited = 1; + } + return WXML::RPX::accept( + (WXML::RPX *)&WXML::RPX::acceptID(char const*,int &)::nextPos, + (int (*)[266])WXML::RPX::acceptID(char const*,int &)::canAccept, + a2, + (int *)this); +} +// 564F24: using guessed type int dword_564F24[30]; +// 564F9C: using guessed type int dword_564F9C; +// 564FA4: using guessed type int dword_564FA4[217]; +// 565308: using guessed type int dword_565308; +// 56530C: using guessed type int dword_56530C; +// 565310: using guessed type int dword_565310; +// 565314: using guessed type int dword_565314; +// 565318: using guessed type int dword_565318; +// 56531C: using guessed type int dword_56531C; +// 565320: using guessed type int dword_565320; +// 565324: using guessed type int dword_565324; +// 565328: using guessed type int dword_565328; +// 56532C: using guessed type int dword_56532C; +// 56534C: using guessed type int dword_56534C[30]; +// 5653C4: using guessed type int dword_5653C4; +// 5653CC: using guessed type int dword_5653CC[169]; +// 565670: using guessed type char WXML::RPX::acceptID(char const*,int &)::inited; + +//----- (004027A5) -------------------------------------------------------- +int __cdecl WXML::RPX::acceptStr(WXML::RPX *this, bool *a2) +{ + int i; // eax + + if ( !WXML::RPX::acceptStr(char const*,int &)::inited ) + { + memset(&WXML::RPX::acceptStr(char const*,int &)::nextPos, 255, 0x18F0u); + for ( i = 0; i != 256; ++i ) + { + dword_563948[i] = 1; + dword_563D70[i] = 2; + dword_564198[i] = 1; + dword_5645C0[i] = 2; + } + dword_5635A8 = 1; + dword_5635BC = 2; + dword_563AB8 = 3; + dword_563EE0 = 4; + dword_5639D0 = 5; + dword_563E0C = 5; + WXML::RPX::acceptStr(char const*,int &)::inited = 1; + } + return WXML::RPX::accept( + (WXML::RPX *)&WXML::RPX::acceptStr(char const*,int &)::nextPos, + (int (*)[266])WXML::RPX::acceptStr(char const*,int &)::canAccept, + a2, + (int *)this); +} +// 5635A8: using guessed type int dword_5635A8; +// 5635BC: using guessed type int dword_5635BC; +// 563948: using guessed type int dword_563948[34]; +// 5639D0: using guessed type int dword_5639D0; +// 563AB8: using guessed type int dword_563AB8; +// 563D70: using guessed type int dword_563D70[39]; +// 563E0C: using guessed type int dword_563E0C; +// 563EE0: using guessed type int dword_563EE0; +// 564198: using guessed type int dword_564198[266]; +// 5645C0: using guessed type int dword_5645C0[532]; +// 564E10: using guessed type char WXML::RPX::acceptStr(char const*,int &)::inited; + +//----- (0040286A) -------------------------------------------------------- +int __cdecl WXML::RPX::acceptNum(WXML::RPX *this, bool *a2) +{ + int v2; // eax + + if ( !WXML::RPX::acceptNum(char const*,int &)::inited ) + { + memset(&WXML::RPX::acceptNum(char const*,int &)::nextPos, 255, 0x14C8u); + v2 = 0; + dword_5620EC = 1; + dword_5620F4 = 1; + dword_5620F8 = 3; + dword_562520 = 3; + dword_562948 = 4; + do + { + dword_562100[v2] = 2; + dword_562528[v2] = 2; + dword_562950[v2] = 2; + dword_562D78[v2] = 4; + dword_5631A0[v2++] = 4; + } + while ( v2 != 10 ); + WXML::RPX::acceptNum(char const*,int &)::inited = 1; + } + return WXML::RPX::accept( + (WXML::RPX *)&WXML::RPX::acceptNum(char const*,int &)::nextPos, + (int (*)[266])WXML::RPX::acceptNum(char const*,int &)::canAccept, + a2, + (int *)this); +} +// 5620EC: using guessed type int dword_5620EC; +// 5620F4: using guessed type int dword_5620F4; +// 5620F8: using guessed type int dword_5620F8; +// 562100: using guessed type int dword_562100[264]; +// 562520: using guessed type int dword_562520; +// 562528: using guessed type int dword_562528[264]; +// 562948: using guessed type int dword_562948; +// 562950: using guessed type int dword_562950[266]; +// 562D78: using guessed type int dword_562D78[266]; +// 5631A0: using guessed type int dword_5631A0[218]; +// 563508: using guessed type char WXML::RPX::acceptNum(char const*,int &)::inited; + +//----- (0040292E) -------------------------------------------------------- +int __cdecl WXML::RPX::acceptSymbol(WXML::RPX *this, char *a2, int *a3) +{ + WXML::RPX *v3; // ebx + int v4; // edi + int v5; // esi + + v3 = this; + v4 = *(_DWORD *)a2; + v5 = *(_DWORD *)a2 - 1; + *(_DWORD *)a2 = v5; + switch ( *((_BYTE *)this + 1) ) + { + case '(': + *a3 = 3; + break; + case ')': + *a3 = 4; + break; + case '+': + *a3 = 1; + break; + case ',': + *a3 = 6; + break; + case '-': + *a3 = 2; + break; + case '.': + *a3 = 5; + break; + default: + *(_DWORD *)a2 = v4; + if ( *(_BYTE *)this == 32 || *(_BYTE *)this == 9 ) + { + while ( *(int *)a2 > 0 && (*(_BYTE *)v3 == 32 || *(_BYTE *)v3 == 9) ) + { + v3 = (WXML::RPX *)((char *)v3 + 1); + --*(_DWORD *)a2; + } + *a3 = 7; + } + else + { + *(_DWORD *)a2 = v5; + *a3 = 0; + } + break; + } + return 0; +} + +//----- (004029C6) -------------------------------------------------------- +std::ostream::sentry *__cdecl WXML::Rewrite::ToStringCode(int a1, int a2, int a3) +{ + int i; // ebx + char v4; // dl + std::ostream::sentry *result; // eax + char v6; // dl + int v7; // [esp+1Fh] [ebp-9h] BYREF + + for ( i = 0; i < a2; ++i ) + { + v4 = *(_BYTE *)(a1 + i); + if ( v4 == 39 ) + { + result = std::operator<<>((std::ostream::sentry *)(a3 + 8), "\\x27"); + continue; + } + if ( v4 <= 39 ) + { + if ( v4 == 34 ) + { + result = std::operator<<>((std::ostream::sentry *)(a3 + 8), "\\x22"); + continue; + } + if ( v4 > 34 ) + { + if ( v4 == 38 ) + { + result = std::operator<<>((std::ostream::sentry *)(a3 + 8), "\\x26"); + continue; + } + } + else + { + if ( v4 == 10 ) + { + result = std::operator<<>((std::ostream::sentry *)(a3 + 8), "\\n"); + continue; + } + if ( v4 == 13 ) + { + result = std::operator<<>((std::ostream::sentry *)(a3 + 8), "\\r"); + continue; + } + } + goto LABEL_31; + } + if ( v4 == 62 ) + { + result = std::operator<<>((std::ostream::sentry *)(a3 + 8), "\\x3e"); + continue; + } + if ( v4 <= 62 ) + { + if ( v4 == 60 ) + { + result = std::operator<<>((std::ostream::sentry *)(a3 + 8), "\\x3c"); + continue; + } + if ( v4 == 61 ) + { + result = std::operator<<>((std::ostream::sentry *)(a3 + 8), "\\x3d"); + continue; + } +LABEL_31: + LOBYTE(v7) = *(_BYTE *)(a1 + i); + result = std::__ostream_insert>((std::ostream::sentry *)(a3 + 8), (int)&v7, 1); + continue; + } + if ( v4 != 92 ) + goto LABEL_31; + v6 = *(_BYTE *)(a1 + i + 1); + if ( (unsigned __int8)(v6 - 92) > 0x18u ) + { + if ( v6 == 39 || v6 == 34 ) + { +LABEL_29: + result = std::operator<<>((std::ostream::sentry *)(a3 + 8), "\\"); + continue; + } + } + else if ( ((0x1440001u >> (v6 - 92)) & 1) != 0 ) + { + goto LABEL_29; + } + result = std::operator<<>((std::ostream::sentry *)(a3 + 8), "\\x5c"); + } + return result; +} + +//----- (00402ADD) -------------------------------------------------------- +std::ostream::sentry *__cdecl WXML::Rewrite::ToStringCode(int *a1, int a2) +{ + return WXML::Rewrite::ToStringCode(*a1, a1[1], a2); +} + +//----- (00402B00) -------------------------------------------------------- +int __cdecl WXML::Rewrite::ToStringCode3[abi:cxx11](int a1, int a2, int a3) +{ + char v3; // al + char *v5; // [esp+4h] [ebp-134h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-120h] + char v7; // [esp+5Fh] [ebp-D9h] BYREF + _BYTE v8[8]; // [esp+60h] [ebp-D8h] BYREF + char v9[4]; // [esp+68h] [ebp-D0h] BYREF + char v10[204]; // [esp+6Ch] [ebp-CCh] BYREF + + std::basic_stringstream,std::allocator>::basic_stringstream((int)v8); + for ( lpuexcpt = 0; (int)lpuexcpt < a3; lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1) ) + { + v3 = *((_BYTE *)lpuexcpt + a2); + if ( v3 == 61 ) + { + v5 = "\\x3d"; + goto LABEL_12; + } + if ( v3 > 61 ) + { + if ( v3 == 62 ) + { + v5 = "\\x3e"; + goto LABEL_12; + } + } + else + { + if ( v3 == 38 ) + { + v5 = "\\x26"; + goto LABEL_12; + } + if ( v3 == 60 ) + { + v5 = "\\x3c"; +LABEL_12: + std::operator<<>((std::ostream::sentry *)v9, v5); + continue; + } + } + v7 = *((_BYTE *)lpuexcpt + a2); + std::__ostream_insert>((std::ostream::sentry *)v9, (int)&v7, 1); + } + std::stringbuf::str(a1, (int)v10); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v8); + return a1; +} +// 402B00: using guessed type char var_D0[4]; +// 402B00: using guessed type char var_CC[204]; + +//----- (00402C7C) -------------------------------------------------------- +int __cdecl WXML::Rewrite::ToStringCode3(int a1, int *a2) +{ + WXML::Rewrite::ToStringCode3[abi:cxx11](a1, *a2, a2[1]); + return a1; +} + +//----- (00402CA2) -------------------------------------------------------- +int __cdecl WXML::Rewrite::ToStringCode2[abi:cxx11](int a1, int a2, int a3) +{ + char v3; // al + char *v5; // [esp+4h] [ebp-134h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-120h] + char v7; // [esp+5Fh] [ebp-D9h] BYREF + _BYTE v8[8]; // [esp+60h] [ebp-D8h] BYREF + char v9[4]; // [esp+68h] [ebp-D0h] BYREF + char v10[204]; // [esp+6Ch] [ebp-CCh] BYREF + + std::basic_stringstream,std::allocator>::basic_stringstream((int)v8); + for ( lpuexcpt = 0; (int)lpuexcpt < a3; lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1) ) + { + v3 = *((_BYTE *)lpuexcpt + a2); + if ( v3 == 39 ) + { + v5 = "\\x27"; + goto LABEL_22; + } + if ( v3 > 39 ) + { + if ( v3 == 62 ) + { + v5 = "\\x3e"; + goto LABEL_22; + } + if ( v3 > 62 ) + { + if ( v3 == 92 ) + { + v5 = "\\\\"; + goto LABEL_22; + } + } + else + { + if ( v3 == 60 ) + { + v5 = "\\x3c"; + goto LABEL_22; + } + if ( v3 == 61 ) + { + v5 = "\\x3d"; + goto LABEL_22; + } + } + } + else + { + if ( v3 == 34 ) + { + v5 = "\\x22"; + goto LABEL_22; + } + if ( v3 > 34 ) + { + if ( v3 == 38 ) + { + v5 = "\\x26"; + goto LABEL_22; + } + } + else + { + if ( v3 == 10 ) + { + v5 = "\\n"; + goto LABEL_22; + } + if ( v3 == 13 ) + { + v5 = "\\r"; +LABEL_22: + std::operator<<>((std::ostream::sentry *)v9, v5); + continue; + } + } + } + v7 = *((_BYTE *)lpuexcpt + a2); + std::__ostream_insert>((std::ostream::sentry *)v9, (int)&v7, 1); + } + std::stringbuf::str(a1, (int)v10); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v8); + return a1; +} +// 402CA2: using guessed type char var_D0[4]; +// 402CA2: using guessed type char var_CC[204]; + +//----- (00402E6E) -------------------------------------------------------- +int __cdecl WXML::Rewrite::ToStringCode2(int a1, int *a2) +{ + WXML::Rewrite::ToStringCode2[abi:cxx11](a1, *a2, a2[1]); + return a1; +} + +//----- (00402E94) -------------------------------------------------------- +void __cdecl WXML::Rewrite::ToStringCode(int *a1, int a2) +{ + void *v2; // ecx + _BYTE *v3; // eax + size_t v4; // eax + _BYTE *v5; // edx + int v6; // edx + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-130h] + void *Src; // [esp+58h] [ebp-F0h] BYREF + size_t Size; // [esp+5Ch] [ebp-ECh] + int v10[4]; // [esp+60h] [ebp-E8h] BYREF + char v11[12]; // [esp+70h] [ebp-D8h] BYREF + char v12[200]; // [esp+7Ch] [ebp-CCh] BYREF + + std::basic_stringstream,std::allocator>::basic_stringstream((int)v11); + WXML::Rewrite::ToStringCode(*a1, a1[1], (int)v11); + std::stringbuf::str((int)&Src, (int)v12); + v2 = Src; + v3 = *(_BYTE **)a2; + if ( Src == v10 ) + { + if ( Size ) + std::string::_S_copy(v3, (unsigned __int8 *)Src, Size); + v4 = Size; + v5 = *(_BYTE **)a2; + *(_DWORD *)(a2 + 4) = Size; + v5[v4] = 0; + } + else + { + if ( v3 == (_BYTE *)(a2 + 8) ) + v3 = 0; + else + lpuexcpt = *(struct _Unwind_Exception **)(a2 + 8); + *(_DWORD *)(a2 + 4) = Size; + v6 = v10[0]; + *(_DWORD *)a2 = v2; + *(_DWORD *)(a2 + 8) = v6; + if ( v3 ) + { + Src = v3; + v10[0] = (int)lpuexcpt; + } + else + { + Src = v10; + } + } + Size = 0; + *(_BYTE *)Src = 0; + std::string::_M_dispose(&Src); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v11); +} +// 402FAC: variable 'lpuexcpt' is possibly undefined +// 402E94: using guessed type char var_CC[200]; + +//----- (0040302D) -------------------------------------------------------- +int __cdecl WXML::Rewrite::ToStringCode(int a1, int *a2) +{ + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)a1 = a1 + 8; + *(_BYTE *)(a1 + 8) = 0; + WXML::Rewrite::ToStringCode(a2, a1); + return a1; +} + +//----- (004030B6) -------------------------------------------------------- +unsigned int __thiscall std::string::basic_string(void **this, char *Str) +{ + size_t v2; // eax + size_t v3; // eax + void **v5; // [esp+1Ch] [ebp-Ch] + + *this = this + 2; + v2 = -1; + if ( Str ) + { + v5 = this; + v3 = strlen(Str); + this = v5; + v2 = (size_t)&Str[v3]; + } + return std::string::_M_construct(this, (unsigned __int8 *)Str, v2); +} + +//----- (004030F1) -------------------------------------------------------- +void __cdecl WXML::Rewrite::GetToken(int a1, int a2) +{ + int v2; // eax + int v3; // ecx + _DWORD *v4; // ecx + int v5; // [esp+10h] [ebp-88h] + WXML::RPX *v6; // [esp+14h] [ebp-84h] + int lpuexcpt; // [esp+18h] [ebp-80h] + int v8; // [esp+54h] [ebp-44h] BYREF + bool v9[4]; // [esp+58h] [ebp-40h] BYREF + void *v10[2]; // [esp+5Ch] [ebp-3Ch] BYREF + char v11; // [esp+64h] [ebp-34h] BYREF + int v12; // [esp+74h] [ebp-24h] BYREF + void *v13[8]; // [esp+78h] [ebp-20h] BYREF + + v6 = *(WXML::RPX **)a1; + v2 = *(_DWORD *)(a1 + 4); + while ( 1 ) + { + v5 = v2; + if ( v2 <= 0 ) + break; + v8 = -1; + *(_DWORD *)v9 = v2; + lpuexcpt = WXML::RPX::acceptID(v6, v9); + if ( lpuexcpt ) + { + lpuexcpt = 1; + if ( WXML::RPX::acceptNum(v6, v9) ) + { + lpuexcpt = 2; + if ( WXML::RPX::acceptStr(v6, v9) ) + { + lpuexcpt = 3; + if ( !WXML::RPX::acceptSymbol(v6, (char *)v9, &v8) ) + lpuexcpt = (v8 == 7) + 3; + } + } + } + v10[0] = &v11; + std::string::_M_construct(v10, (unsigned __int8 *)v6, (size_t)v6 + v5 - *(_DWORD *)v9); + v12 = lpuexcpt; + std::string::basic_string(v13, v10); + v3 = *(_DWORD *)(a2 + 4); + if ( v3 == *(_DWORD *)(a2 + 8) ) + { + std::vector>::_M_realloc_insert>( + (_DWORD *)a2, + *(char **)(a2 + 4), + &v12); + } + else + { + v4 = (_DWORD *)(v3 + 4); + *(v4 - 1) = v12; + std::string::basic_string(v4, v13); + *(_DWORD *)(a2 + 4) += 28; + } + std::string::_M_dispose(v13); + std::string::_M_dispose(v10); + v2 = *(_DWORD *)v9; + v6 = (WXML::RPX *)((char *)v6 + v5 - *(_DWORD *)v9); + } +} + +//----- (004032CE) -------------------------------------------------------- +BOOL __cdecl WXML::Rewrite::RewriteRPX(int a1, unsigned int *a2, char *a3, char *Str) +{ + int v4; // eax + int v5; // eax + _DWORD *v6; // eax + _DWORD *v7; // eax + char *v8; // eax + unsigned int v9; // edx + unsigned int v10; // edx + _DWORD *v11; // eax + char v12; // dl + size_t v13; // eax + int v15; // [esp+1Ch] [ebp-DCh] + char *v16; // [esp+1Ch] [ebp-DCh] + char v17; // [esp+23h] [ebp-D5h] + int v18; // [esp+24h] [ebp-D4h] + char *v19; // [esp+24h] [ebp-D4h] + unsigned int lpuexcpt; // [esp+28h] [ebp-D0h] + BOOL lpuexcpta; // [esp+28h] [ebp-D0h] + char *v22; // [esp+6Ch] [ebp-8Ch] BYREF + char *v23; // [esp+70h] [ebp-88h] + int v24; // [esp+74h] [ebp-84h] + void *v25[6]; // [esp+78h] [ebp-80h] BYREF + void *v26[6]; // [esp+90h] [ebp-68h] BYREF + void *v27[2]; // [esp+A8h] [ebp-50h] BYREF + unsigned int v28; // [esp+B0h] [ebp-48h] BYREF + void *v29[2]; // [esp+C0h] [ebp-38h] BYREF + unsigned int v30; // [esp+C8h] [ebp-30h] BYREF + void *v31[7]; // [esp+D8h] [ebp-20h] BYREF + + v22 = 0; + v23 = 0; + v24 = 0; + WXML::Rewrite::GetToken(a1, (int)&v22); + std::string::operator=(a2, (char *)&byte_540876); + v17 = 1; + for ( lpuexcpt = 1; lpuexcpt < -1227133513 * ((v23 - v22) >> 2); ++lpuexcpt ) + { + v4 = 28 * (lpuexcpt - 1); + v18 = v4; + if ( *(_DWORD *)&v22[v4] == 1 + && (v5 = v4 + 28, v15 = v5, !*(_DWORD *)&v22[v5]) + && !std::string::compare((int)&v22[v5 + 4], "rpx") ) + { + std::string::basic_string(v29, Str); + v16 = &v22[v15 + 4]; + v19 = &v22[v18 + 4]; + std::string::basic_string(v25, a3); + v6 = std::string::append(v25, (int)v19); + std::string::basic_string(v26, v6); + v7 = std::string::append(v26, (int)v16); + std::string::basic_string(v27, v7); + v8 = (char *)v27[1] + (unsigned int)v29[1]; + v9 = 15; + if ( v27[0] != &v28 ) + v9 = v28; + if ( (unsigned int)v8 <= v9 ) + goto LABEL_15; + v10 = 15; + if ( v29[0] != &v30 ) + v10 = v30; + if ( (unsigned int)v8 > v10 ) +LABEL_15: + v11 = std::string::append(v27, (int)v29); + else + v11 = std::string::insert((unsigned int *)v29, 0, (int)v27); + std::string::basic_string(v31, v11); + std::string::operator+=(v31); + std::string::_M_dispose(v31); + std::string::_M_dispose(v27); + std::string::_M_dispose(v26); + std::string::_M_dispose(v25); + std::string::_M_dispose(v29); + v12 = v17; + if ( ++lpuexcpt == -1227133513 * ((v23 - v22) >> 2) ) + v12 = 0; + v17 = v12; + } + else + { + std::string::operator+=(&v22[v18 + 4]); + } + } + if ( v22 != v23 && v17 ) + std::string::operator+=(v23 - 24); + v13 = a2[1]; + if ( v13 == *(_DWORD *)(a1 + 4) ) + { + lpuexcpta = 0; + if ( v13 ) + lpuexcpta = memcmp((const void *)*a2, *(const void **)a1, v13) != 0; + } + else + { + lpuexcpta = 1; + } + std::vector>::~vector((void **)&v22); + return lpuexcpta; +} +// 402620: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); + +//----- (004036AC) -------------------------------------------------------- +int __cdecl WXML::Rewrite::RewriteImg(int a1, unsigned int *a2, int *a3, int a4, int a5) +{ + char *v5; // eax + std::ostream::sentry *v6; // eax + std::ostream::sentry *v7; // eax + std::ostream::sentry *v8; // eax + std::ostream::sentry *v9; // eax + std::ostream::sentry *v10; // eax + _DWORD *v11; // eax + char v12; // dl + int v14; // [esp+18h] [ebp-160h] + unsigned __int8 v15; // [esp+1Ch] [ebp-15Ch] + std::ostream::sentry *v16; // [esp+1Ch] [ebp-15Ch] + char v17; // [esp+23h] [ebp-155h] + char *Str1; // [esp+24h] [ebp-154h] + char *Str1a; // [esp+24h] [ebp-154h] + unsigned int lpuexcpt; // [esp+28h] [ebp-150h] + char *v21; // [esp+64h] [ebp-114h] BYREF + _BYTE *v22; // [esp+68h] [ebp-110h] + int v23; // [esp+6Ch] [ebp-10Ch] + char *v24; // [esp+70h] [ebp-108h] BYREF + int v25; // [esp+74h] [ebp-104h] + int v26; // [esp+88h] [ebp-F0h] BYREF + int v27; // [esp+8Ch] [ebp-ECh] + char v28; // [esp+90h] [ebp-E8h] BYREF + void *v29[2]; // [esp+A0h] [ebp-D8h] BYREF + char v30[4]; // [esp+A8h] [ebp-D0h] BYREF + char v31[200]; // [esp+ACh] [ebp-CCh] BYREF + + v21 = 0; + v22 = 0; + v23 = 0; + WXML::Rewrite::GetToken(a1, (int)&v21); + std::string::operator=(a2, (char *)&byte_540876); + v17 = 1; + lpuexcpt = 1; + v15 = 0; + while ( lpuexcpt < -1227133513 * ((v22 - v21) >> 2) ) + { + Str1 = (char *)(28 * (lpuexcpt - 1)); + if ( !std::string::compare((int)&Str1[(_DWORD)v21 + 4], (char *)off_540894) + && !std::string::compare((int)&Str1[(_DWORD)v21 + 32], "(") ) + { + std::string::basic_string((void **)&v24, (char *)&byte_540876); + while ( -1227133513 * ((v22 - v21) >> 2) > ++lpuexcpt ) + { + if ( !std::string::compare((int)&v21[28 * lpuexcpt + 4], ")") ) + { + v14 = v25; + for ( Str1a = v24; &v24[v25] - Str1a > 0 && (*Str1a == 32 || *Str1a == 9); ++Str1a ) + ; + if ( !strncmp(Str1a, "http://", 7u) + || !strncmp(Str1a, "https://", 8u) + || !strncmp(Str1a, "//", 2u) + || !strncmp(Str1a, "data:", 5u) ) + { + v27 = 0; + v26 = (int)&v28; + v28 = 0; + std::string::reserve(&v26, v14 + 4); + if ( (unsigned int)(0x3FFFFFFF - v27) <= 3 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(&v26, "url(", 4u); + std::string::append(&v26, (int)&v24); + v11 = std::string::append(&v26, ")"); + std::string::basic_string(v29, v11); + std::string::operator+=(v29); + std::string::_M_dispose(v29); + std::string::_M_dispose((void **)&v26); + } + else + { + std::basic_stringstream,std::allocator>::basic_stringstream((int)v29); + v16 = std::operator<<>((std::ostream::sentry *)v30, "url("); + std::string::basic_string((void **)&v26, Str1a); + v6 = std::operator<<(v16, &v26); + v7 = std::operator<<>(v6, "-do-not-use-local-path-"); + v8 = std::operator<<(v7, a3); + std::operator<<>(v8, "&"); + v9 = (std::ostream::sentry *)std::ostream::operator<<(a4); + std::operator<<>(v9, "&"); + v10 = (std::ostream::sentry *)std::ostream::operator<<(a5); + std::operator<<>(v10, ")"); + std::string::_M_dispose((void **)&v26); + std::stringbuf::str((int)&v26, (int)v31); + std::string::operator+=(&v26); + std::string::_M_dispose((void **)&v26); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v29); + v15 = 1; + } + v12 = v17; + if ( ++lpuexcpt == -1227133513 * ((v22 - v21) >> 2) ) + v12 = 0; + v17 = v12; + break; + } + v5 = &v21[28 * lpuexcpt]; + if ( *(_DWORD *)v5 != 4 ) + { + if ( *(_DWORD *)v5 == 2 ) + { + std::string::substr(v29, (_DWORD *)v5 + 1, 1u, *((_DWORD *)v5 + 2) - 2); + std::string::operator+=(v29); + std::string::_M_dispose(v29); + } + else + { + std::string::operator+=(v5 + 4); + } + } + } + std::string::_M_dispose((void **)&v24); + } + else + { + std::string::operator+=(&Str1[(_DWORD)v21 + 4]); + } + ++lpuexcpt; + } + if ( v22 != v21 && v17 ) + std::string::operator+=(v22 - 24); + std::vector>::~vector((void **)&v21); + return v15; +} +// 402620: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); +// 4036AC: using guessed type char var_D0[4]; +// 4036AC: using guessed type char var_CC[200]; + +//----- (00403D38) -------------------------------------------------------- +void __tcf_3(void) +{ + std::string::_M_dispose((void **)&night::nsv_); +} + +//----- (00403D42) -------------------------------------------------------- +void __tcf_4(void) +{ + std::string::_M_dispose((void **)&night::nst_); +} + +//----- (00403D4C) -------------------------------------------------------- +void __tcf_5(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_SKIP); +} + +//----- (00403D56) -------------------------------------------------------- +void __tcf_6(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_BOOL); +} + +//----- (00403D60) -------------------------------------------------------- +void __tcf_7(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_VAR); +} + +//----- (00403D6A) -------------------------------------------------------- +void __tcf_8(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_STR); +} + +//----- (00403D74) -------------------------------------------------------- +void __tcf_9(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_NUM); +} + +//----- (00403D7E) -------------------------------------------------------- +void __tcf_10(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_B_TYPE); +} + +//----- (00403D88) -------------------------------------------------------- +void __tcf_11(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_KW); +} + +//----- (00403D92) -------------------------------------------------------- +void __tcf_12(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PUNC); +} + +//----- (00403D9C) -------------------------------------------------------- +void __tcf_13(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OP); +} + +//----- (00403DA6) -------------------------------------------------------- +void __tcf_14(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OP_SELF); +} + +//----- (00403DB0) -------------------------------------------------------- +void __tcf_15(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_BINARY); +} + +//----- (00403DBA) -------------------------------------------------------- +void __tcf_16(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_ASSIGN); +} + +//----- (00403DC4) -------------------------------------------------------- +void __tcf_17(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_TERNARY); +} + +//----- (00403DCE) -------------------------------------------------------- +void __tcf_18(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_K_V); +} + +//----- (00403DD8) -------------------------------------------------------- +void __tcf_19(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_DOT); +} + +//----- (00403DE2) -------------------------------------------------------- +void __tcf_20(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_PROPERTY); +} + +//----- (00403DEC) -------------------------------------------------------- +void __tcf_21(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_SELF_OP); +} + +//----- (00403DF6) -------------------------------------------------------- +void __tcf_22(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_BLOCK); +} + +//----- (00403E00) -------------------------------------------------------- +void __tcf_23(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_ARRAY); +} + +//----- (00403E0A) -------------------------------------------------------- +void __tcf_24(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_BRACKET); +} + +//----- (00403E14) -------------------------------------------------------- +void __tcf_25(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_IF); +} + +//----- (00403E1E) -------------------------------------------------------- +void __tcf_26(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_FOR); +} + +//----- (00403E28) -------------------------------------------------------- +void __tcf_27(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_WHILE); +} + +//----- (00403E32) -------------------------------------------------------- +void __tcf_28(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_DO_WHILE); +} + +//----- (00403E3C) -------------------------------------------------------- +void __tcf_29(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_SWITCH); +} + +//----- (00403E46) -------------------------------------------------------- +void __tcf_30(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PROG); +} + +//----- (00403E50) -------------------------------------------------------- +void __tcf_31(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PROG_NO_SEM); +} + +//----- (00403E5A) -------------------------------------------------------- +void __tcf_32(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PROG_NO_SEM_REQUIRE); +} + +//----- (00403E64) -------------------------------------------------------- +void __tcf_33(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_FUNC); +} + +//----- (00403E6E) -------------------------------------------------------- +void __tcf_34(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_CALL); +} + +//----- (00403E78) -------------------------------------------------------- +void __tcf_35(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_OP); +} + +//----- (00403E82) -------------------------------------------------------- +void __tcf_36(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_OP_SELF); +} + +//----- (00403E8C) -------------------------------------------------------- +void __tcf_37(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_ALL_OP); +} + +//----- (00403E96) -------------------------------------------------------- +void __tcf_38(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_PUNC); +} + +//----- (00403EA0) -------------------------------------------------------- +void __tcf_39(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_SPACE); +} + +//----- (00403EAA) -------------------------------------------------------- +void __tcf_40(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_KW); +} + +//----- (00403EB4) -------------------------------------------------------- +void __tcf_41(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_TYPE); +} + +//----- (00403EBE) -------------------------------------------------------- +int printf(char *a1, ...) +{ + FILE *v1; // eax + va_list va; // [esp+24h] [ebp+Ch] BYREF + + va_start(va, a1); + v1 = ___acrt_iob_func(1u); + return __mingw_vfprintf(v1, a1, (int *)va); +} + +//----- (00403EEE) -------------------------------------------------------- +void __tcf_2(void) +{ + std::ios_base::Init::~Init(); +} + +//----- (00403EF8) -------------------------------------------------------- +int sprintf(FILE *a1, int a2, ...) +{ + va_list va; // [esp+28h] [ebp+10h] BYREF + + va_start(va, a2); + return __mingw_vsprintf(a1, "np_%d", (int *)va); +} + +//----- (00403F1A) -------------------------------------------------------- +int __usercall __gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>@( + int a1@, + int a2@) +{ + int v2; // ecx + int v3; // ebx + + v2 = 0; + v3 = *(_DWORD *)(a2 + 4); + if ( v3 == *(_DWORD *)(a1 + 4) ) + { + LOBYTE(v2) = 1; + if ( v3 ) + LOBYTE(v2) = memcmp(*(const void **)a2, *(const void **)a1, *(_DWORD *)(a2 + 4)) == 0; + } + return v2; +} +// 403F4D: variable 'v2' is possibly undefined + +//----- (00403F52) -------------------------------------------------------- +void *__usercall std::_Vector_base::_M_allocate@(unsigned int a1@) +{ + if ( !a1 ) + return 0; + if ( a1 > 0x5555555 ) + std::__throw_bad_alloc(); + return operator new(24 * a1); +} +// 403F52: could not find valid save-restore pair for ebp + +//----- (00403F78) -------------------------------------------------------- +void __usercall std::_Rb_tree,std::less,std::allocator>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-18h] + + while ( a1 ) + { + std::_Rb_tree,std::less,std::allocator>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::string::_M_dispose((void **)(a1 + 16)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (00403FAC) -------------------------------------------------------- +void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-18h] + + while ( a1 ) + { + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::string::_M_dispose((void **)(a1 + 16)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (00403FE0) -------------------------------------------------------- +int __thiscall std::ostream::operator<<(void *this, int (__cdecl *a2)(void *)) +{ + return a2(this); +} + +//----- (00403FF0) -------------------------------------------------------- +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2) +{ + unsigned __int8 *v3; // eax + unsigned __int8 *v4; // ecx + unsigned __int8 *v5; // edx + unsigned __int8 *v6; // eax + unsigned __int8 *v7; // edx + unsigned __int8 *result; // eax + unsigned __int8 *v9; // [esp+18h] [ebp-20h] + + v3 = *this; + v4 = *(unsigned __int8 **)a2; + v5 = *(unsigned __int8 **)(a2 + 4); + if ( *(_DWORD *)a2 == a2 + 8 ) + { + if ( v5 ) + std::string::_S_copy(v3, v4, *(_DWORD *)(a2 + 4)); + v6 = *(unsigned __int8 **)(a2 + 4); + v7 = *this; + this[1] = v6; + v6[(_DWORD)v7] = 0; + } + else + { + if ( v3 == (unsigned __int8 *)(this + 2) ) + v3 = 0; + else + v9 = this[2]; + *this = v4; + this[1] = v5; + this[2] = *(unsigned __int8 **)(a2 + 8); + if ( v3 ) + { + *(_DWORD *)a2 = v3; + *(_DWORD *)(a2 + 8) = v9; + } + else + { + *(_DWORD *)a2 = a2 + 8; + } + } + result = *(unsigned __int8 **)a2; + *(_DWORD *)(a2 + 4) = 0; + *result = 0; + return result; +} +// 404057: variable 'v9' is possibly undefined + +//----- (00404078) -------------------------------------------------------- +void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-18h] + + while ( a1 ) + { + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::string::_M_dispose((void **)(a1 + 16)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (004040AC) -------------------------------------------------------- +void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-28h] + + while ( a1 ) + { + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::string::_M_dispose((void **)(a1 + 40)); + std::string::_M_dispose((void **)(a1 + 16)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (004040EC) -------------------------------------------------------- +int __cdecl WXML::Compiler::GetVersionInfo(int a1, int *a2) +{ + std::ostream::sentry *v2; // eax + std::ostream::sentry *v3; // eax + std::ostream::sentry *v4; // eax + std::ostream::sentry *v5; // eax + std::ostream::sentry *v6; // eax + std::ostream::sentry *v7; // eax + char v9[8]; // [esp+50h] [ebp-D8h] BYREF + char v10[4]; // [esp+58h] [ebp-D0h] BYREF + char v11[204]; // [esp+5Ch] [ebp-CCh] BYREF + + std::basic_stringstream,std::allocator>::basic_stringstream((int)v9); + v2 = std::operator<<>((std::ostream::sentry *)v10, "/*"); + v3 = std::operator<<>(v2, "v0.5vv_20200413_syb_scopedata"); + std::operator<<>(v3, "*/"); + v4 = std::operator<<((std::ostream::sentry *)v10, a2); + v5 = std::operator<<>(v4, ".__wcc_version__='"); + v6 = std::operator<<>(v5, "v0.5vv_20200413_syb_scopedata"); + std::operator<<>(v6, "';"); + v7 = std::operator<<((std::ostream::sentry *)v10, a2); + std::operator<<>( + v7, + ".__wcc_version_info__={\"customComponents\":true,\"fixZeroRpx\":true,\"propValueDeepCopy\":false};"); + std::stringbuf::str(a1, (int)v11); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v9); + return a1; +} +// 4040EC: using guessed type char var_D0[4]; +// 4040EC: using guessed type char var_CC[204]; + +//----- (0040424C) -------------------------------------------------------- +void __usercall std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-18h] + + while ( a1 ) + { + std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)(a1 + 44)); + std::string::_M_dispose((void **)(a1 + 16)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (00404288) -------------------------------------------------------- +void __usercall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-18h] + + while ( a1 ) + { + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)(a1 + 44)); + std::string::_M_dispose((void **)(a1 + 16)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (004042C4) -------------------------------------------------------- +void __usercall std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-18h] + + while ( a1 ) + { + std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)(a1 + 44)); + std::string::_M_dispose((void **)(a1 + 16)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (00404300) -------------------------------------------------------- +int __thiscall std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=( + volatile signed __int32 **this, + volatile signed __int32 *a2) +{ + volatile signed __int32 *v3; // ecx + int result; // eax + + if ( *this != a2 ) + { + if ( a2 ) + { + if ( _CRT_MT ) + _InterlockedIncrement(a2 + 1); + else + ++*((_DWORD *)a2 + 1); + } + v3 = *this; + if ( *this ) + result = std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release(v3); + *this = a2; + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (00404338) -------------------------------------------------------- +// unsigned int __thiscall std::string::basic_string(void **this, char *Str) +// { +// size_t v2; // eax +// size_t v3; // eax +// void **v5; // [esp+1Ch] [ebp-Ch] + +// *this = this + 2; +// v2 = -1; +// if ( Str ) +// { +// v5 = this; +// v3 = strlen(Str); +// this = v5; +// v2 = (size_t)&Str[v3]; +// } +// return std::string::_M_construct(this, (unsigned __int8 *)Str, v2); +// } + +//----- (00404373) -------------------------------------------------------- +void **__cdecl WXML::Compiler::WXMLHelperCode[abi:cxx11](void **a1) +{ + std::string::basic_string(a1, aIfThisThisGUnd); + return a1; +} + +//----- (00404390) -------------------------------------------------------- +void **__cdecl WXML::Compiler::GetFuncId(void **a1, _DWORD *a2, int a3) +{ + int insert_unique_pos; // eax + _DWORD *v4; // edx + char *v5; // eax + void *Blocka; // [esp+18h] [ebp-C0h] + void **Block; // [esp+18h] [ebp-C0h] + FILE Str[4]; // [esp+50h] [ebp-88h] BYREF + + if ( !std::map::count(a2, a3) ) + { + Blocka = (void *)a2[5]; + std::string::basic_string((char *)Str, a3); + Str[0]._bufsiz = (int)Blocka; + Block = (void **)operator new(0x2Cu); + std::string::basic_string(Block + 4, Str); + Block[10] = (void *)Str[0]._bufsiz; + insert_unique_pos = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + a2, + (int)(Block + 4)); + if ( v4 ) + { + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_insert_node( + a2, + insert_unique_pos, + v4, + Block); + } + else + { + std::string::_M_dispose(Block + 4); + operator delete(Block); + } + std::string::_M_dispose((void **)&Str[0]._ptr); + } + memset(Str, 0, sizeof(Str)); + v5 = std::map::operator[](a2, a3); + sprintf(Str, (int)"np_%d", *(_DWORD *)v5); + std::string::basic_string(a1, (char *)Str); + return a1; +} +// 404474: variable 'v4' is possibly undefined + +//----- (0040455A) -------------------------------------------------------- +void __thiscall std::vector::operator=(void *this, int *a2) +{ + void **v2; // ebx + void **v3; // edx + int v4; // edi + int v5; // edi + void **v6[9]; // [esp+4h] [ebp-24h] BYREF + + v2 = (void **)*((_DWORD *)this + 1); + v3 = (void **)*((_DWORD *)this + 2); + v4 = *a2; + v6[0] = *(void ***)this; + v6[1] = v2; + *(_DWORD *)this = v4; + v5 = a2[1]; + v6[2] = v3; + *((_DWORD *)this + 1) = v5; + *((_DWORD *)this + 2) = a2[2]; + *a2 = 0; + a2[1] = 0; + a2[2] = 0; + std::vector::~vector(v6, (int)v3); +} + +//----- (004045AE) -------------------------------------------------------- +void __usercall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase( + int a1@) +{ + int v2; // esi + int v3; // edx + void *v4; // [esp+0h] [ebp-28h] + + while ( a1 ) + { + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::vector::~vector((void ***)(a1 + 40), v3); + std::string::_M_dispose((void **)(a1 + 16)); + v4 = (void *)a1; + a1 = v2; + operator delete(v4); + } +} +// 4045CE: variable 'v3' is possibly undefined + +//----- (004045EE) -------------------------------------------------------- +void __fastcall std::deque::~deque(int a1) +{ + void **v2; // edi + int v3; // edx + void ***v4; // esi + void **v5; // eax + void **v6; // edx + int v7; // edx + void **v8; // esi + unsigned int v9; // edi + void *v10; // eax + void **v11; // [esp+1Ch] [ebp-2Ch] + void **v12; // [esp+20h] [ebp-28h] + void **v13; // [esp+24h] [ebp-24h] + unsigned int v14; // [esp+28h] [ebp-20h] + int v15; // [esp+2Ch] [ebp-1Ch] + + v2 = *(void ***)(a1 + 24); + v13 = *(void ***)(a1 + 16); + v3 = *(_DWORD *)(a1 + 20); + v12 = *(void ***)(a1 + 28); + v15 = v3; + v4 = (void ***)(v3 + 4); + v14 = *(_DWORD *)(a1 + 36); + v5 = *(void ***)(a1 + 8); + while ( v14 > (unsigned int)v4 ) + { + v6 = *v4; + v11 = v5; + ++v4; + std::_Destroy_aux::__destroy((int)v6, v6, v6 + 126); + v5 = v11; + } + if ( v15 == v14 ) + { + std::_Destroy_aux::__destroy(v3, v5, v2); + } + else + { + std::_Destroy_aux::__destroy((int)v13, v5, v13); + std::_Destroy_aux::__destroy(v7, v12, v2); + } + if ( *(_DWORD *)a1 ) + { + v8 = *(void ***)(a1 + 20); + v9 = *(_DWORD *)(a1 + 36) + 4; + while ( v9 > (unsigned int)v8 ) + { + v10 = *v8++; + operator delete(v10); + } + operator delete(*(void **)a1); + } +} +// 40465C: variable 'v7' is possibly undefined +// 404665: variable 'v3' is possibly undefined + +//----- (0040469D) -------------------------------------------------------- +int __cdecl WXML::Compiler::DealWxsTag(int a1, int **a2, _DWORD *a3, int a4, int a5, _DWORD *a6, int *a7) +{ + bool v7; // zf + int *v8; // eax + int *v9; // edx + void **v10; // ecx + _DWORD *v11; // eax + unsigned __int8 *v12; // ecx + int i; // eax + unsigned __int8 v14; // cl + char v15; // cl + char *v16; // eax + int v17; // eax + std::ostream::sentry *v18; // eax + std::ostream::sentry *v19; // eax + std::ostream::sentry *v20; // eax + std::ostream::sentry *v21; // eax + char *v22; // ecx + char *v23; // eax + int v24; // eax + _BYTE *v25; // eax + char v26; // si + bool v27; // dl + std::ostream::sentry *v28; // eax + std::ostream::sentry *v29; // eax + std::ostream::sentry *v30; // eax + std::ostream::sentry *v31; // eax + std::ostream::sentry *v32; // eax + std::ostream::sentry *v33; // eax + std::ostream::sentry *v34; // eax + std::ostream::sentry *v35; // eax + unsigned __int8 *v37; // [esp+0h] [ebp-3D8h] + _DWORD *v38; // [esp+10h] [ebp-3C8h] + BOOL v39; // [esp+10h] [ebp-3C8h] + unsigned int v40; // [esp+14h] [ebp-3C4h] + char v41; // [esp+14h] [ebp-3C4h] + _DWORD *v42; // [esp+14h] [ebp-3C4h] + BOOL v43; // [esp+14h] [ebp-3C4h] + char *lpuexcptc; // [esp+18h] [ebp-3C0h] + int lpuexcpt; // [esp+18h] [ebp-3C0h] + int lpuexcpta; // [esp+18h] [ebp-3C0h] + int lpuexcptb; // [esp+18h] [ebp-3C0h] + int v48; // [esp+5Ch] [ebp-37Ch] BYREF + volatile signed __int32 *v49; // [esp+60h] [ebp-378h] BYREF + void *v50[3]; // [esp+64h] [ebp-374h] BYREF + void *v51[6]; // [esp+70h] [ebp-368h] BYREF + void *v52[6]; // [esp+88h] [ebp-350h] BYREF + void *v53[2]; // [esp+A0h] [ebp-338h] BYREF + char v54; // [esp+A8h] [ebp-330h] BYREF + _DWORD v55[6]; // [esp+B8h] [ebp-320h] BYREF + WXML::DOMLib::Parser *v56[6]; // [esp+D0h] [ebp-308h] BYREF + int v57[6]; // [esp+E8h] [ebp-2F0h] BYREF + int v58[6]; // [esp+100h] [ebp-2D8h] BYREF + void *v59[6]; // [esp+118h] [ebp-2C0h] BYREF + void *v60[6]; // [esp+130h] [ebp-2A8h] BYREF + char v61[24]; // [esp+148h] [ebp-290h] BYREF + char v62[24]; // [esp+160h] [ebp-278h] BYREF + int v63[6]; // [esp+178h] [ebp-260h] BYREF + void *v64[2]; // [esp+190h] [ebp-248h] BYREF + char v65[4]; // [esp+198h] [ebp-240h] BYREF + char v66[196]; // [esp+19Ch] [ebp-23Ch] BYREF + void *v67[94]; // [esp+260h] [ebp-178h] BYREF + + lpuexcptc = std::string::find(*a2, 62, (unsigned int)a2[4]); + v40 = (unsigned int)(lpuexcptc + 1); + std::string::basic_string(v51, ""); + v53[0] = &v54; + v54 = 0; + v53[1] = 0; + v7 = *(_BYTE *)std::string::at(*a2, (unsigned int)(lpuexcptc - 1)) == 47; + v8 = a2[4]; + v9 = *a2; + if ( v7 ) + { + std::string::substr(v55, v9, (unsigned int)(v8 + 1), v40 - (_DWORD)v8 - 6); + std::string::operator=((unsigned __int8 **)v53, (int)v55); + v10 = (void **)v55; + } + else + { + std::string::substr(v56, v9, (unsigned int)(v8 + 1), v40 - (_DWORD)v8 - 5); + std::string::operator=((unsigned __int8 **)v53, (int)v56); + v10 = (void **)v56; + } + std::string::_M_dispose(v10); + std::string::basic_string((char *)v67, (int)v51); + std::string::append(v67, (int)v53); + v11 = std::string::append(v67, (int)v52); + std::string::basic_string(v56, v11); + v37 = v12; + std::string::_M_dispose(v67); + for ( lpuexcpt = 1; (int)a2[2] > lpuexcpt; ++lpuexcpt ) + { + std::operator+((int)v57, "\n", (int)v56); + v37 = std::string::operator=((unsigned __int8 **)v56, (int)v57); + std::string::_M_dispose((void **)v57); + } + for ( lpuexcpta = 1; (int)a2[3] > lpuexcpta; ++lpuexcpta ) + { + std::operator+((int)v58, " ", (int)v56); + v37 = std::string::operator=((unsigned __int8 **)v56, (int)v58); + std::string::_M_dispose((void **)v58); + } + WXML::DOMLib::Parser::Parser((WXML::DOMLib::Parser *)v37); + memset(v50, 0, sizeof(v50)); + lpuexcptb = WXML::DOMLib::Parser::Parse((int)v67, (WXML::DOMLib::Parser *)lpuexcpta, (char *)v56[0], (int)a7, a1, v50); + if ( !lpuexcptb ) + { + WXML::DOMLib::Parser::GetParsed(&v48, (WXML::DOMLib::Parser *)v67); + *a6 = a2[2]; + if ( (int)((int)a2[5] + (_DWORD)a2[4] - v40) <= 0 ) + std::string::basic_string(v59, (char *)&byte_547B7C); + else + std::string::substr(v59, *a2, v40, (unsigned int)a2[5] + (_DWORD)a2[4] - v40); + std::string::operator=((unsigned __int8 **)a5, (int)v59); + std::string::_M_dispose(v59); + v41 = 1; + for ( i = 0; i != *(_DWORD *)(a5 + 4); ++i ) + { + v14 = *(_BYTE *)(*(_DWORD *)a5 + i) - 9; + if ( v14 > 0x17u ) + { + v41 = 0; + } + else + { + v7 = ((0x800013u >> v14) & 1) == 0; + v15 = v41; + if ( v7 ) + v15 = 0; + v41 = v15; + } + } + v38 = (_DWORD *)(**(_DWORD **)(v48 + 72) + 48); + std::string::basic_string(v60, (char *)off_547B7D); + v39 = std::map::count(v38, (int)v60); + std::string::_M_dispose(v60); + if ( !v39 + || (std::string::basic_string(v64, (char *)off_547B7D), + v16 = std::map::operator[]((_DWORD *)(**(_DWORD **)(v48 + 72) + 48), v64), + v17 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v16), + std::string::_M_assign(a4, v17), + std::string::_M_dispose(v64), + v41) ) + { + v42 = (_DWORD *)(**(_DWORD **)(v48 + 72) + 48); + std::string::basic_string(v64, "module"); + v43 = std::map::count(v42, (int)v64); + std::string::_M_dispose(v64); + if ( v43 ) + { + std::string::basic_string(v64, "module"); + v23 = std::map::operator[]((_DWORD *)(**(_DWORD **)(v48 + 72) + 48), v64); + v24 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v23); + std::string::_M_assign((int)a3, v24); + std::string::_M_dispose(v64); + v25 = (_BYTE *)*a3; + v26 = (unsigned __int8)(*(_BYTE *)*a3 - 48) > 9u; + while ( (_BYTE *)(*a3 + a3[1]) != v25 ) + { + v27 = (unsigned __int8)(*v25 - 97) <= 0x19u || (unsigned __int8)(*v25 - 48) <= 9u; + if ( !v27 ) + v27 = *v25 == 95 || (unsigned __int8)(*v25 - 65) <= 0x19u; + v26 &= v27; + ++v25; + } + if ( v26 ) + goto LABEL_35; + std::basic_stringstream,std::allocator>::basic_stringstream((int)v64); + std::operator+((char *)v63, a1, ":"); + std::operator<<((std::ostream::sentry *)v65, v63); + v28 = (std::ostream::sentry *)std::ostream::operator<<(a2[2]); + std::operator<<>(v28, ":"); + v29 = (std::ostream::sentry *)std::ostream::operator<<(a2[3]); + v30 = std::operator<<>(v29, ": "); + v31 = std::operator<<(v30, a7); + std::operator<<>(v31, "invalid module name, [0-9a-zA-Z_] allowed only"); + std::string::_M_dispose((void **)v63); + std::stringbuf::str((int)v62, (int)v66); + std::string::operator=((unsigned __int8 **)a7, (int)v62); + v22 = v62; + } + else + { + std::basic_stringstream,std::allocator>::basic_stringstream((int)v64); + std::operator+((char *)v63, a1, ":"); + std::operator<<((std::ostream::sentry *)v65, v63); + v32 = (std::ostream::sentry *)std::ostream::operator<<(a2[2]); + std::operator<<>(v32, ":"); + v33 = (std::ostream::sentry *)std::ostream::operator<<(a2[3]); + v34 = std::operator<<>(v33, ": "); + v35 = std::operator<<(v34, a7); + std::operator<<>(v35, "module expected in wxs tag"); + std::string::_M_dispose((void **)v63); + std::stringbuf::str((int)v63, (int)v66); + std::string::operator=((unsigned __int8 **)a7, (int)v63); + v22 = (char *)v63; + } + } + else + { + std::basic_stringstream,std::allocator>::basic_stringstream((int)v64); + std::operator+((char *)v63, a1, ":"); + std::operator<<((std::ostream::sentry *)v65, v63); + v18 = (std::ostream::sentry *)std::ostream::operator<<(a2[2]); + std::operator<<>(v18, ":"); + v19 = (std::ostream::sentry *)std::ostream::operator<<(a2[3]); + v20 = std::operator<<>(v19, ": "); + v21 = std::operator<<(v20, a7); + std::operator<<>(v21, "wxs tag with src don't need any content"); + std::string::_M_dispose((void **)v63); + std::stringbuf::str((int)v61, (int)v66); + std::string::operator=((unsigned __int8 **)a7, (int)v61); + v22 = v61; + } + std::string::_M_dispose((void **)v22); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v64); + lpuexcptb = 1; +LABEL_35: + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v49); + } + std::vector::~vector(v50); + WXML::DOMLib::Parser::~Parser((int)v67); + std::string::_M_dispose((void **)v56); + std::string::_M_dispose(v53); + std::string::_M_dispose(v52); + std::string::_M_dispose(v51); + return lpuexcptb; +} +// 40488A: variable 'v12' is possibly undefined +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); +// 40469D: using guessed type _DWORD var_320[6]; +// 40469D: using guessed type char var_240[4]; + +//----- (004050F6) -------------------------------------------------------- +struct _Unwind_Exception *__cdecl WXML::Compiler::RenderDefine( + unsigned int **a1, + WXML::NameAllocator *a2, + _DWORD *a3, + int a4, + int a5, + int a6, + unsigned __int8 a7, + int a8, + char a9, + int *a10, + int *a11, + int *a12, + int a13, + int *a14, + int *a15, + int *a16, + int a17, + int a18, + int a19, + int *a20) +{ + char *v20; // eax + int v21; // eax + char *v22; // eax + unsigned int v23; // edx + int v24; // eax + unsigned int *v26; // [esp+5Ch] [ebp-BCh] + unsigned int *v27; // [esp+5Ch] [ebp-BCh] + unsigned int i; // [esp+64h] [ebp-B4h] + unsigned int *lpuexcpta; // [esp+68h] [ebp-B0h] + struct _Unwind_Exception *lpuexcpt; // [esp+68h] [ebp-B0h] + void *v31[6]; // [esp+ACh] [ebp-6Ch] BYREF + void *v32[6]; // [esp+C4h] [ebp-54h] BYREF + void *v33[15]; // [esp+DCh] [ebp-3Ch] BYREF + + if ( std::operator==((int)*a1, "template") ) + { + lpuexcpta = *a1; + std::string::basic_string(v33, "name"); + v26 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + lpuexcpta + 12, + (int)v33); + std::string::_M_dispose(v33); + if ( v26 != lpuexcpta + 13 ) + std::string::_M_replace(*a1, 0, (*a1)[1], "wx-define", 9u); + } + lpuexcpt = 0; + if ( std::operator==((int)*a1, "wx-define") ) + { + WXML::NameAllocator::NameAllocator(v33, a17, a18); + std::string::basic_string(v32, "name"); + v20 = std::map::operator[](*a1 + 12, v32); + v21 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v20); + std::string::basic_string((char *)v31, v21); + std::string::_M_dispose(v32); + v22 = std::map::operator[](a3, (int)v31); + std::string::_M_assign((int)v22, (int)a2); + v27 = *a1; + std::string::basic_string(v32, "r"); + lpuexcpt = (struct _Unwind_Exception *)WXML::DOMLib::WXMLDom::RenderMeAsFunction( + v27, + (int *)a2, + a14, + a4, + (int *)v31, + a5, + (int *)v33, + a10, + a11, + a12, + (int *)v32, + a15, + a9, + a16, + 1, + a7, + a8, + a20); + std::string::_M_dispose(v32); + std::string::_M_dispose(v31); + WXML::NameAllocator::~NameAllocator((int)v33); + } + for ( i = 0; ; ++i ) + { + v23 = (*a1)[18]; + if ( (int)((*a1)[19] - v23) >> 3 <= i || lpuexcpt ) + break; + v24 = WXML::Compiler::RenderDefine( + v23 + 8 * i, + a2, + (int)a3, + a4, + a5, + a6, + a7, + a8, + a9, + (int)a10, + (int)a11, + (int)a12, + a13, + (int)a14, + (int)a15, + (int)a16, + a17, + a18, + a19, + (int)a20); + lpuexcpt = (struct _Unwind_Exception *)v24; + } + return lpuexcpt; +} + +//----- (00405522) -------------------------------------------------------- +struct _Unwind_Exception *__usercall WXML::Compiler::ParseSource@( + WXML::DOMLib::Parser *a1@, + int *a2, + char **a3, + char a4, + int a5, + int *a6, + _DWORD *a7, + int *a8, + _DWORD *a9, + _DWORD *a10, + _DWORD *a11, + int a12, + char a13) +{ + char *v13; // eax + std::ostream::sentry *v14; // eax + std::ostream::sentry *v15; // eax + std::ostream::sentry *v16; // eax + std::ostream::sentry *v17; // eax + std::ostream::sentry *v18; // eax + std::ostream::sentry *v19; // eax + std::ostream::sentry *v20; // eax + std::ostream::sentry *v21; // eax + std::ostream::sentry *v22; // eax + std::ostream::sentry *v23; // eax + std::ostream::sentry *v24; // eax + std::ostream::sentry *v25; // eax + std::ostream::sentry *v26; // eax + std::ostream::sentry *v27; // eax + std::ostream::sentry *v28; // eax + std::ostream::sentry *v29; // eax + std::ostream::sentry *v30; // eax + std::ostream::sentry *v31; // eax + void **v32; // ecx + _DWORD *v33; // eax + _DWORD *v34; // eax + _DWORD *v35; // eax + _DWORD *v36; // eax + std::ostream::sentry *v37; // eax + std::ostream::sentry *v38; // eax + std::ostream::sentry *v39; // eax + char *v40; // eax + std::ostream::sentry *v41; // eax + std::ostream::sentry *v42; // eax + std::ostream::sentry *v43; // eax + std::ostream::sentry *v44; // eax + std::ostream::sentry *v45; // eax + std::ostream::sentry *v46; // eax + char *v47; // eax + WXML::DOMLib::Parser *v49; // [esp+0h] [ebp-478h] + unsigned int i; // [esp+2Ch] [ebp-44Ch] + std::ostream::sentry *v51; // [esp+30h] [ebp-448h] + bool v52; // [esp+30h] [ebp-448h] + std::ostream::sentry *v53; // [esp+30h] [ebp-448h] + std::ostream::sentry *v54; // [esp+30h] [ebp-448h] + int v55; // [esp+34h] [ebp-444h] + std::ostream::sentry *v56; // [esp+34h] [ebp-444h] + std::ostream::sentry *v57; // [esp+34h] [ebp-444h] + std::ostream::sentry *v58; // [esp+34h] [ebp-444h] + std::ostream::sentry *v59; // [esp+34h] [ebp-444h] + std::ostream::sentry *v60; // [esp+34h] [ebp-444h] + std::ostream::sentry *v61; // [esp+34h] [ebp-444h] + std::ostream::sentry *v62; // [esp+34h] [ebp-444h] + bool lpuexcpta; // [esp+38h] [ebp-440h] + struct _Unwind_Exception *lpuexcpt; // [esp+38h] [ebp-440h] + int v65; // [esp+70h] [ebp-408h] BYREF + int **v66; // [esp+74h] [ebp-404h] BYREF + int **v67; // [esp+78h] [ebp-400h] + int v68; // [esp+7Ch] [ebp-3FCh] + char *v69; // [esp+80h] [ebp-3F8h] BYREF + int v70; // [esp+84h] [ebp-3F4h] + char v71; // [esp+88h] [ebp-3F0h] BYREF + int v72[2]; // [esp+98h] [ebp-3E0h] BYREF + char v73; // [esp+A0h] [ebp-3D8h] BYREF + void *v74[2]; // [esp+B0h] [ebp-3C8h] BYREF + char v75; // [esp+B8h] [ebp-3C0h] BYREF + int v76; // [esp+C8h] [ebp-3B0h] BYREF + int v77; // [esp+CCh] [ebp-3ACh] + char v78; // [esp+D0h] [ebp-3A8h] BYREF + void *v79[2]; // [esp+E0h] [ebp-398h] BYREF + char v80; // [esp+E8h] [ebp-390h] BYREF + int v81[2]; // [esp+F8h] [ebp-380h] BYREF + char v82; // [esp+100h] [ebp-378h] BYREF + void *v83[6]; // [esp+110h] [ebp-368h] BYREF + int v84[2]; // [esp+128h] [ebp-350h] BYREF + char v85; // [esp+130h] [ebp-348h] BYREF + int v86[6]; // [esp+140h] [ebp-338h] BYREF + int v87[6]; // [esp+158h] [ebp-320h] BYREF + int v88[2]; // [esp+170h] [ebp-308h] BYREF + char v89[4]; // [esp+178h] [ebp-300h] BYREF + char v90[196]; // [esp+17Ch] [ebp-2FCh] BYREF + int v91; // [esp+240h] [ebp-238h] BYREF + volatile signed __int32 *v92; // [esp+244h] [ebp-234h] BYREF + char v93[4]; // [esp+248h] [ebp-230h] BYREF + char v94[196]; // [esp+24Ch] [ebp-22Ch] BYREF + int v95[2]; // [esp+310h] [ebp-168h] BYREF + char v96[4]; // [esp+318h] [ebp-160h] BYREF + char v97[348]; // [esp+31Ch] [ebp-15Ch] BYREF + + std::string::substr(v95, a2, a2[1] - 5, 0xFFFFFFFF); + lpuexcpta = std::operator==((int)v95, ".wxml"); + std::string::_M_dispose((void **)v95); + if ( lpuexcpta ) + { + v66 = 0; + v67 = 0; + v68 = 0; + WXML::DOMLib::Parser::Parser(v49); + lpuexcpt = (struct _Unwind_Exception *)WXML::DOMLib::Parser::Parse((int)v95, a1, *a3, (int)a8, (int)a2, &v66); + if ( !lpuexcpt ) + { + WXML::DOMLib::Parser::GetParsed(&v91, (WXML::DOMLib::Parser *)v95); + v13 = std::map>::operator[](a9, (int)a2); + *(_DWORD *)v13 = v91; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)v13 + 1, v92); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v92); + v70 = 0; + v69 = &v71; + v71 = 0; + v72[0] = (int)&v73; + v72[1] = 0; + v73 = 0; + std::basic_stringstream,std::allocator>::basic_stringstream((int)v88); + if ( v66 != v67 ) + { + v51 = std::operator<<>((std::ostream::sentry *)v89, "f_['"); + WXML::Rewrite::ToStringCode((int)&v91, a2); + v14 = std::operator<<(v51, &v91); + v15 = std::operator<<>(v14, "']={};"); + std::operator<<>(v15, a4); + std::string::_M_dispose((void **)&v91); + } + for ( i = 0; -1227133513 * (((char *)v67 - (char *)v66) >> 4) > i; ++i ) + { + v74[1] = 0; + v79[0] = &v80; + v81[0] = (int)&v82; + v74[0] = &v75; + v76 = (int)&v78; + v75 = 0; + v77 = 0; + v78 = 0; + v79[1] = 0; + v80 = 0; + v81[1] = 0; + v82 = 0; + v55 = WXML::Compiler::DealWxsTag((int)a2, &v66[28 * i], v74, (int)&v76, (int)v79, &v65, a8); + if ( v55 ) + goto LABEL_20; + v16 = std::operator<<((std::ostream::sentry *)v89, a6); + v56 = std::operator<<>(v16, "['"); + WXML::Rewrite::ToStringCode((int)v87, a2); + v17 = std::operator<<(v56, v87); + v57 = std::operator<<>(v17, "']['"); + WXML::Rewrite::ToStringCode((int)&v91, (int *)v74); + v18 = std::operator<<(v57, &v91); + std::operator<<>(v18, "'] ="); + std::string::_M_dispose((void **)&v91); + std::string::_M_dispose((void **)v87); + if ( v77 ) + { + MMBizWxaAppComm::PathCombine(a2, &v76, (unsigned int *)v81); + if ( *(_BYTE *)v81[0] == 47 ) + { + std::operator+((int)v86, 46, (int)v81); + std::string::operator=((unsigned __int8 **)v81, (int)v86); + std::string::_M_dispose((void **)v86); + } + if ( a7 + 1 == std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + a7, + (int)v81) + && (std::operator==(a5, "$gwx") || a13) ) + { + std::basic_stringstream,std::allocator>::basic_stringstream((int)&v91); + v19 = std::operator<<((std::ostream::sentry *)v93, a2); + std::operator<<>(v19, ":"); + v20 = (std::ostream::sentry *)std::ostream::operator<<(v65); + std::operator<<>(v20, ":"); + v21 = (std::ostream::sentry *)std::ostream::operator<<(v66[28 * i + 3]); + v22 = std::operator<<>(v21, ":"); + v23 = std::operator<<(v22, &v76); + v24 = std::operator<<>(v23, " not found from "); + std::operator<<(v24, a2); + std::stringbuf::str((int)v87, (int)v94); + std::string::operator=((unsigned __int8 **)a8, (int)v87); + std::string::_M_dispose((void **)v87); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)&v91); + v55 = 1; +LABEL_20: + std::string::_M_dispose((void **)v81); + std::string::_M_dispose(v79); + std::string::_M_dispose((void **)&v76); + std::string::_M_dispose(v74); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v88); + std::string::_M_dispose((void **)v72); + std::string::_M_dispose((void **)&v69); + lpuexcpt = (struct _Unwind_Exception *)v55; + goto LABEL_24; + } + v58 = std::operator<<>((std::ostream::sentry *)v89, "f_['"); + WXML::Rewrite::ToStringCode((int)&v91, v81); + v25 = std::operator<<(v58, &v91); + std::operator<<>(v25, "'] || "); + std::string::_M_dispose((void **)&v91); + v59 = std::operator<<>((std::ostream::sentry *)v89, "nv_require(\""); + std::operator+((int)v87, "p_", (int)v81); + WXML::Rewrite::ToStringCode((int)&v91, v87); + v26 = std::operator<<(v59, &v91); + v27 = std::operator<<>(v26, "\");"); + std::operator<<>(v27, a4); + std::string::_M_dispose((void **)&v91); + std::string::_M_dispose((void **)v87); + v28 = std::operator<<((std::ostream::sentry *)v89, a6); + v60 = std::operator<<>(v28, "['"); + WXML::Rewrite::ToStringCode((int)v87, a2); + v29 = std::operator<<(v60, v87); + v61 = std::operator<<>(v29, "']['"); + WXML::Rewrite::ToStringCode((int)&v91, (int *)v74); + v30 = std::operator<<(v61, &v91); + v31 = std::operator<<>(v30, "']();"); + std::operator<<>(v31, a4); + std::string::_M_dispose((void **)&v91); + v32 = (void **)v87; + } + else + { + std::operator+((int)v86, "m_", (int)a2); + v33 = std::string::append(v86, ":"); + std::string::basic_string(v87, v33); + v34 = std::string::append(v87, (int)v74); + std::string::basic_string(&v91, v34); + WXML::Compiler::GetFuncId(v83, a11, (int)&v91); + std::string::_M_dispose((void **)&v91); + std::string::_M_dispose((void **)v87); + std::string::_M_dispose((void **)v86); + v55 = night::compile_ns((int)a2, (int)v83, (int)v79, v65, (unsigned int *)v72, 0); + if ( v55 ) + { + std::string::_M_assign((int)a8, (int)v72); + std::string::_M_dispose(v83); + goto LABEL_20; + } + v62 = std::operator<<>((std::ostream::sentry *)v89, "nv_require(\""); + std::operator+((int)v84, "m_", (int)a2); + v35 = std::string::append(v84, ":"); + std::string::basic_string(v86, v35); + v36 = std::string::append(v86, (int)v74); + std::string::basic_string(v87, v36); + WXML::Rewrite::ToStringCode((int)&v91, v87); + v37 = std::operator<<(v62, &v91); + v38 = std::operator<<>(v37, "\");"); + std::operator<<>(v38, a4); + std::string::_M_dispose((void **)&v91); + std::string::_M_dispose((void **)v87); + std::string::_M_dispose((void **)v86); + std::string::_M_dispose((void **)v84); + v39 = std::operator<<((std::ostream::sentry *)v89, v72); + std::operator<<>(v39, a4); + v32 = v83; + } + std::string::_M_dispose(v32); + std::string::_M_dispose((void **)v81); + std::string::_M_dispose(v79); + std::string::_M_dispose((void **)&v76); + std::string::_M_dispose(v74); + } + std::stringbuf::str((int)&v91, (int)v90); + std::string::operator=((unsigned __int8 **)&v69, (int)&v91); + std::string::_M_dispose((void **)&v91); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v88); + std::string::_M_dispose((void **)v72); + if ( v70 ) + { + v40 = std::map::operator[](a10, (int)a2); + std::string::_M_assign((int)v40, (int)&v69); + } + std::string::_M_dispose((void **)&v69); + } +LABEL_24: + WXML::DOMLib::Parser::~Parser((int)v95); + std::vector::~vector((void **)&v66); + } + else + { + std::string::substr(v95, a2, a2[1] - 4, 0xFFFFFFFF); + v52 = std::operator==((int)v95, ".wxs"); + std::string::_M_dispose((void **)v95); + lpuexcpt = 0; + if ( v52 ) + { + v84[0] = (int)&v85; + v84[1] = 0; + v85 = 0; + std::operator+((int)v95, "p_", (int)a2); + WXML::Compiler::GetFuncId((void **)v86, a11, (int)v95); + std::string::_M_dispose((void **)v95); + lpuexcpt = (struct _Unwind_Exception *)night::compile_ns((int)a2, (int)v86, (int)a3, 1, (unsigned int *)v84, 0); + if ( lpuexcpt ) + { + std::string::_M_assign((int)a8, (int)v84); + } + else + { + std::basic_stringstream,std::allocator>::basic_stringstream((int)v95); + v53 = std::operator<<>((std::ostream::sentry *)v96, "f_['"); + WXML::Rewrite::ToStringCode((int)v87, a2); + v41 = std::operator<<(v53, v87); + v42 = std::operator<<>(v41, "'] = nv_require("); + v54 = std::operator<<>(v42, 34); + std::operator+((int)v88, "p_", (int)a2); + WXML::Rewrite::ToStringCode((int)&v91, v88); + v43 = std::operator<<(v54, &v91); + v44 = std::operator<<>(v43, 34); + v45 = std::operator<<>(v44, ");"); + std::operator<<>(v45, a4); + std::string::_M_dispose((void **)&v91); + std::string::_M_dispose((void **)v88); + std::string::_M_dispose((void **)v87); + v46 = std::operator<<((std::ostream::sentry *)v96, v84); + std::operator<<>(v46, a4); + std::stringbuf::str((int)&v91, (int)v97); + v47 = std::map::operator[](a10, (int)a2); + std::string::operator=((unsigned __int8 **)v47, (int)&v91); + std::string::_M_dispose((void **)&v91); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v95); + } + std::string::_M_dispose((void **)v86); + std::string::_M_dispose((void **)v84); + } + } + return lpuexcpt; +} +// 40561E: variable 'v49' is possibly undefined +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); +// 405522: using guessed type char var_300[4]; +// 405522: using guessed type char var_230[4]; +// 405522: using guessed type char var_22C[196]; +// 405522: using guessed type char var_2FC[196]; +// 405522: using guessed type char var_160[4]; +// 405522: using guessed type char var_15C[348]; + +//----- (00406648) -------------------------------------------------------- +std::ostream::sentry *__usercall WXML::Compiler::Compile@( + int *a1@, + _DWORD *a2, + int *a3, + unsigned __int8 **a4, + _DWORD *a5, + _DWORD *a6, + char a7, + int *a8, + int a9, + char a10, + int *a11, + int *a12, + int *a13, + int *a14, + int *a15, + int *a16, + int a17, + int a18, + int a19, + int *a20) +{ + char *v20; // eax + std::ostream::sentry *v21; // eax + std::ostream::sentry *v22; // eax + std::ostream::sentry *v23; // eax + std::ostream::sentry *v24; // eax + std::ostream::sentry *v25; // eax + bool v26; // al + std::ostream::sentry *v27; // eax + std::ostream::sentry *v28; // eax + std::ostream::sentry *v29; // eax + std::ostream::sentry *v30; // eax + std::ostream::sentry *v31; // eax + std::ostream::sentry *v32; // eax + std::ostream::sentry *v33; // eax + std::ostream::sentry *v34; // eax + std::ostream::sentry *v35; // eax + std::ostream::sentry *v36; // eax + std::ostream::sentry *v37; // eax + std::ostream::sentry *v38; // eax + std::ostream::sentry *v39; // eax + int *v40; // ecx + _DWORD *v41; // eax + _DWORD *v42; // eax + _DWORD *v43; // eax + _DWORD *v44; // eax + std::ostream::sentry *v45; // eax + std::ostream::sentry *v46; // eax + std::ostream::sentry *v47; // eax + char *v48; // eax + std::ostream::sentry *v49; // eax + std::ostream::sentry *v50; // eax + std::ostream::sentry *v51; // eax + std::ostream::sentry *v52; // eax + std::ostream::sentry *v53; // eax + std::ostream::sentry *v54; // eax + char *v55; // eax + std::ostream::sentry *v56; // eax + std::ostream::sentry *v57; // eax + std::ostream::sentry *v58; // eax + std::ostream::sentry *v59; // eax + std::ostream::sentry *v60; // eax + std::ostream::sentry *v61; // eax + _DWORD *v62; // eax + std::ostream::sentry *v63; // eax + std::ostream::sentry *v64; // eax + std::ostream::sentry *v65; // eax + std::ostream::sentry *v66; // eax + std::ostream::sentry *v67; // eax + std::ostream::sentry *v68; // eax + std::ostream::sentry *v69; // eax + std::ostream::sentry *v70; // eax + std::ostream::sentry *v71; // eax + std::ostream::sentry *v72; // eax + std::ostream::sentry *v73; // eax + std::ostream::sentry *v74; // eax + std::ostream::sentry *v75; // eax + std::ostream::sentry *v76; // eax + std::ostream::sentry *v77; // eax + std::ostream::sentry *v78; // eax + std::ostream::sentry *v79; // eax + std::ostream::sentry *v80; // eax + std::ostream::sentry *v81; // eax + std::ostream::sentry *v82; // eax + std::ostream::sentry *v83; // eax + std::ostream::sentry *v84; // eax + std::ostream::sentry *v85; // eax + std::ostream::sentry *v86; // eax + std::ostream::sentry *v87; // eax + std::ostream::sentry *v88; // eax + std::ostream::sentry *v89; // eax + std::ostream::sentry *v90; // eax + std::ostream::sentry *v91; // eax + std::ostream::sentry *v92; // eax + std::ostream::sentry *v93; // eax + std::ostream::sentry *v94; // eax + std::ostream::sentry *v95; // eax + std::ostream::sentry *v96; // eax + std::ostream::sentry *v97; // eax + std::ostream::sentry *v98; // eax + std::ostream::sentry *v99; // eax + std::ostream::sentry *v100; // eax + std::ostream::sentry *v101; // eax + std::ostream::sentry *v102; // eax + std::ostream::sentry *v103; // eax + std::ostream::sentry *v104; // eax + std::ostream::sentry *v105; // eax + std::ostream::sentry *v106; // eax + std::ostream::sentry *v107; // eax + std::ostream::sentry *v108; // eax + std::ostream::sentry *v109; // eax + std::ostream::sentry *v110; // eax + std::ostream::sentry *v111; // eax + std::ostream::sentry *j; // eax + int *v113; // eax + int *v114; // eax + std::ostream::sentry *v115; // eax + std::ostream::sentry *v116; // eax + std::ostream::sentry *v117; // eax + std::ostream::sentry *v118; // eax + std::ostream::sentry *v119; // eax + std::ostream::sentry *v120; // eax + std::ostream::sentry *v121; // eax + std::ostream::sentry *v122; // eax + std::ostream::sentry *v123; // eax + std::ostream::sentry *v124; // eax + std::ostream::sentry *v125; // eax + std::ostream::sentry *v126; // eax + std::ostream::sentry *v127; // eax + std::ostream::sentry *v128; // eax + std::ostream::sentry *v129; // eax + std::ostream::sentry *v130; // eax + std::ostream::sentry *v131; // eax + std::ostream::sentry *v132; // eax + std::ostream::sentry *v133; // eax + std::ostream::sentry *v134; // eax + std::ostream::sentry *v135; // eax + std::ostream::sentry *v136; // eax + std::ostream::sentry *v137; // eax + std::ostream::sentry *v138; // eax + std::ostream::sentry *v139; // eax + std::ostream::sentry *v140; // eax + std::ostream::sentry *v141; // eax + _DWORD *v142; // eax + std::ostream::sentry *v143; // eax + std::ostream::sentry *v144; // eax + std::ostream::sentry *v145; // eax + std::ostream::sentry *v146; // eax + std::ostream::sentry *v147; // eax + std::ostream::sentry *v148; // eax + std::ostream::sentry *v149; // eax + std::ostream::sentry *v150; // eax + std::ostream::sentry *v151; // eax + std::ostream::sentry *m; // eax + std::ostream::sentry *v153; // eax + std::ostream::sentry *v154; // eax + std::ostream::sentry *v155; // eax + std::ostream::sentry *v156; // eax + std::ostream::sentry *v157; // eax + int *n; // eax + std::ostream::sentry *v159; // eax + std::ostream::sentry *ii; // eax + int v161; // ecx + std::ostream::sentry *v162; // eax + int StrID; // eax + std::ostream::sentry *v164; // eax + int *v165; // eax + std::ostream::sentry *v166; // eax + int v167; // eax + std::ostream::sentry *v168; // eax + std::ostream::sentry *v169; // eax + int v170; // eax + int v171; // edx + _DWORD *v172; // eax + int v173; // eax + int v174; // eax + int v175; // eax + int v176; // edx + _DWORD *v177; // eax + int v178; // eax + int v179; // eax + std::ostream::sentry *v180; // eax + std::ostream::sentry *v181; // eax + std::ostream::sentry *v182; // eax + std::ostream::sentry *v183; // eax + std::ostream::sentry *v184; // eax + std::ostream::sentry *v185; // eax + std::ostream::sentry *v186; // eax + std::ostream::sentry *v187; // eax + std::ostream::sentry *v188; // eax + std::ostream::sentry *v189; // eax + std::ostream::sentry *v190; // eax + std::ostream::sentry *v191; // eax + std::ostream::sentry *v192; // eax + std::ostream::sentry *v193; // eax + std::ostream::sentry *v194; // eax + std::ostream::sentry *v195; // eax + std::ostream::sentry *v196; // eax + std::ostream::sentry *v197; // eax + std::ostream::sentry *v198; // eax + std::ostream::sentry *v199; // eax + std::ostream::sentry *v200; // eax + std::ostream::sentry *v201; // eax + std::ostream::sentry *v202; // eax + std::ostream::sentry *v203; // eax + std::ostream::sentry *v204; // eax + std::ostream::sentry *v205; // eax + std::ostream::sentry *v206; // eax + std::ostream::sentry *v207; // eax + std::ostream::sentry *v208; // eax + std::ostream::sentry *v209; // eax + std::ostream::sentry *v210; // eax + std::ostream::sentry *v211; // eax + std::ostream::sentry *v212; // eax + std::ostream::sentry *v213; // eax + std::ostream::sentry *v214; // eax + std::ostream::sentry *v215; // eax + std::ostream::sentry *v216; // eax + std::ostream::sentry *v217; // eax + std::ostream::sentry *v218; // eax + std::ostream::sentry *v219; // eax + std::ostream::sentry *v220; // eax + std::ostream::sentry *v221; // eax + std::ostream::sentry *v222; // eax + struct _Unwind_Exception *kk; // eax + std::ostream::sentry *v224; // eax + std::ostream::sentry *v225; // eax + std::ostream::sentry *v226; // eax + WXML::DOMLib::Parser *v228; // [esp+0h] [ebp-618h] + _DWORD *v229; // [esp+58h] [ebp-5C0h] + std::ostream::sentry *v230; // [esp+58h] [ebp-5C0h] + int v231; // [esp+5Ch] [ebp-5BCh] + _DWORD *v232; // [esp+60h] [ebp-5B8h] + std::ostream::sentry *v233; // [esp+60h] [ebp-5B8h] + bool v234; // [esp+64h] [ebp-5B4h] + int v235; // [esp+68h] [ebp-5B0h] + _DWORD *v236; // [esp+68h] [ebp-5B0h] + int v237; // [esp+68h] [ebp-5B0h] + int v238; // [esp+70h] [ebp-5A8h] + _DWORD *v239; // [esp+70h] [ebp-5A8h] + std::ostream::sentry *v240; // [esp+70h] [ebp-5A8h] + int v241; // [esp+70h] [ebp-5A8h] + int v242; // [esp+70h] [ebp-5A8h] + _DWORD *v243; // [esp+70h] [ebp-5A8h] + int v244; // [esp+70h] [ebp-5A8h] + std::ostream::sentry *v245; // [esp+74h] [ebp-5A4h] + int v246; // [esp+74h] [ebp-5A4h] + std::ostream::sentry *v247; // [esp+74h] [ebp-5A4h] + std::ostream::sentry *v248; // [esp+74h] [ebp-5A4h] + std::ostream::sentry *v249; // [esp+74h] [ebp-5A4h] + std::ostream::sentry *v250; // [esp+74h] [ebp-5A4h] + std::ostream::sentry *v251; // [esp+74h] [ebp-5A4h] + std::ostream::sentry *v252; // [esp+74h] [ebp-5A4h] + std::ostream::sentry *v253; // [esp+74h] [ebp-5A4h] + WXML::NameAllocator *v254; // [esp+7Ch] [ebp-59Ch] + int *v255; // [esp+7Ch] [ebp-59Ch] + WXML::NameAllocator *v256; // [esp+7Ch] [ebp-59Ch] + WXML::NameAllocator *jj; // [esp+7Ch] [ebp-59Ch] + std::ostream::sentry *i; // [esp+80h] [ebp-598h] + std::ostream::sentry *v259; // [esp+80h] [ebp-598h] + std::ostream::sentry *v260; // [esp+80h] [ebp-598h] + std::ostream::sentry *v261; // [esp+80h] [ebp-598h] + std::ostream::sentry *v262; // [esp+80h] [ebp-598h] + std::ostream::sentry *v263; // [esp+80h] [ebp-598h] + std::ostream::sentry *v264; // [esp+80h] [ebp-598h] + bool v265; // [esp+84h] [ebp-594h] + std::ostream::sentry *v266; // [esp+84h] [ebp-594h] + bool v267; // [esp+84h] [ebp-594h] + std::ostream::sentry *v268; // [esp+84h] [ebp-594h] + std::ostream::sentry *v269; // [esp+84h] [ebp-594h] + std::ostream::sentry *v270; // [esp+84h] [ebp-594h] + std::ostream::sentry *k; // [esp+84h] [ebp-594h] + std::ostream::sentry *v272; // [esp+84h] [ebp-594h] + std::ostream::sentry *v273; // [esp+84h] [ebp-594h] + std::ostream::sentry *v274; // [esp+84h] [ebp-594h] + std::ostream::sentry *v275; // [esp+84h] [ebp-594h] + int *v276; // [esp+84h] [ebp-594h] + struct _Unwind_Exception *lpuexcptb; // [esp+88h] [ebp-590h] + int *lpuexcpt; // [esp+88h] [ebp-590h] + struct _Unwind_Exception *lpuexcpta; // [esp+88h] [ebp-590h] + int v280; // [esp+C8h] [ebp-550h] BYREF + std::ostream::sentry *v281; // [esp+CCh] [ebp-54Ch] + volatile signed __int32 *v282; // [esp+D0h] [ebp-548h] BYREF + int **v283; // [esp+D4h] [ebp-544h] BYREF + int **v284; // [esp+D8h] [ebp-540h] + int v285; // [esp+DCh] [ebp-53Ch] + int v286; // [esp+E0h] [ebp-538h] BYREF + _DWORD v287[2]; // [esp+E4h] [ebp-534h] BYREF + std::ostream::sentry *v288; // [esp+ECh] [ebp-52Ch] + _DWORD v289[5]; // [esp+FCh] [ebp-51Ch] BYREF + int v290; // [esp+110h] [ebp-508h] BYREF + _DWORD v291[5]; // [esp+114h] [ebp-504h] BYREF + int v292; // [esp+128h] [ebp-4F0h] BYREF + _DWORD v293[5]; // [esp+12Ch] [ebp-4ECh] BYREF + char *v294; // [esp+140h] [ebp-4D8h] BYREF + int v295; // [esp+144h] [ebp-4D4h] + char v296; // [esp+148h] [ebp-4D0h] BYREF + int v297[2]; // [esp+158h] [ebp-4C0h] BYREF + char v298; // [esp+160h] [ebp-4B8h] BYREF + void *v299[2]; // [esp+170h] [ebp-4A8h] BYREF + char v300; // [esp+178h] [ebp-4A0h] BYREF + int v301; // [esp+188h] [ebp-490h] BYREF + int v302; // [esp+18Ch] [ebp-48Ch] + char v303; // [esp+190h] [ebp-488h] BYREF + void *v304[2]; // [esp+1A0h] [ebp-478h] BYREF + char v305; // [esp+1A8h] [ebp-470h] BYREF + int v306; // [esp+1B8h] [ebp-460h] BYREF + int v307; // [esp+1BCh] [ebp-45Ch] + char v308; // [esp+1C0h] [ebp-458h] BYREF + int v309; // [esp+1D0h] [ebp-448h] BYREF + int v310[5]; // [esp+1D4h] [ebp-444h] BYREF + int v311; // [esp+1E8h] [ebp-430h] BYREF + int v312; // [esp+1ECh] [ebp-42Ch] BYREF + char v313; // [esp+1F0h] [ebp-428h] BYREF + int v314[2]; // [esp+200h] [ebp-418h] BYREF + char v315; // [esp+208h] [ebp-410h] BYREF + int v316[6]; // [esp+218h] [ebp-400h] BYREF + char v317[8]; // [esp+230h] [ebp-3E8h] BYREF + char v318[4]; // [esp+238h] [ebp-3E0h] BYREF + char v319[196]; // [esp+23Ch] [ebp-3DCh] BYREF + int v320[2]; // [esp+300h] [ebp-318h] BYREF + char v321[4]; // [esp+308h] [ebp-310h] BYREF + char v322[196]; // [esp+30Ch] [ebp-30Ch] BYREF + int v323; // [esp+3D0h] [ebp-248h] BYREF + volatile signed __int32 *v324; // [esp+3D4h] [ebp-244h] BYREF + char v325[4]; // [esp+3D8h] [ebp-240h] BYREF + char v326[196]; // [esp+3DCh] [ebp-23Ch] BYREF + int v327[2]; // [esp+4A0h] [ebp-178h] BYREF + char v328[4]; // [esp+4A8h] [ebp-170h] BYREF + char v329[364]; // [esp+4ACh] [ebp-16Ch] BYREF + + std::basic_stringstream,std::allocator>::basic_stringstream((int)v317); + std::_Rb_tree_header::_Rb_tree_header(v287); + std::_Rb_tree_header::_Rb_tree_header(v289); + lpuexcptb = (struct _Unwind_Exception *)operator new(0x24u); + std::_Rb_tree_header::_Rb_tree_header((_DWORD *)lpuexcptb + 1); + *((_DWORD *)lpuexcptb + 6) = 0; + *((_DWORD *)lpuexcptb + 7) = 0; + *((_DWORD *)lpuexcptb + 8) = 0; + zcc::shared_ptr::shared_ptr(lpuexcptb); + std::_Rb_tree_header::_Rb_tree_header(v291); + std::_Rb_tree_header::_Rb_tree_header(v293); + for ( i = (std::ostream::sentry *)a2[3]; + i != (std::ostream::sentry *)(a2 + 1); + i = (std::ostream::sentry *)std::_Rb_tree_increment((int)i) ) + { + lpuexcpt = (int *)((char *)i + 16); + std::string::substr(&v306, (_DWORD *)i + 4, *((_DWORD *)i + 5) - 5, 0xFFFFFFFF); + v265 = std::operator==((int)&v306, ".wxml"); + std::string::_M_dispose((void **)&v306); + if ( v265 ) + { + v283 = 0; + v284 = 0; + v285 = 0; + WXML::DOMLib::Parser::Parser(v228); + v266 = (std::ostream::sentry *)WXML::DOMLib::Parser::Parse( + (int)v327, + (WXML::DOMLib::Parser *)a1, + *((char **)i + 10), + (int)a3, + (int)lpuexcpt, + &v283); + if ( v266 ) + { +LABEL_25: + WXML::DOMLib::Parser::~Parser((int)v327); + std::vector::~vector((void **)&v283); + goto LABEL_118; + } + WXML::DOMLib::Parser::GetParsed(&v323, (WXML::DOMLib::Parser *)v327); + v20 = std::map>::operator[](&v286, (int)lpuexcpt); + *(_DWORD *)v20 = v323; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)v20 + 1, v324); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v324); + v295 = 0; + v294 = &v296; + v296 = 0; + v297[0] = (int)&v298; + v297[1] = 0; + v298 = 0; + std::basic_stringstream,std::allocator>::basic_stringstream((int)v320); + if ( v283 != v284 ) + { + v245 = std::operator<<>((std::ostream::sentry *)v321, "f_['"); + WXML::Rewrite::ToStringCode((int)&v323, lpuexcpt); + v21 = std::operator<<(v245, &v323); + v22 = std::operator<<>(v21, "']={};"); + a1 = (int *)a10; + std::operator<<>(v22, a10); + std::string::_M_dispose((void **)&v323); + } + while ( (unsigned int)v266 < -1227133513 * (((char *)v284 - (char *)v283) >> 4) ) + { + v299[1] = 0; + v304[0] = &v305; + a1 = a3; + v299[0] = &v300; + v301 = (int)&v303; + v306 = (int)&v308; + v300 = 0; + v302 = 0; + v303 = 0; + v304[1] = 0; + v305 = 0; + v307 = 0; + v308 = 0; + v246 = WXML::Compiler::DealWxsTag( + (int)lpuexcpt, + &v283[28 * (_DWORD)v266], + v299, + (int)&v301, + (int)v304, + &v280, + a3); + if ( v246 ) + goto LABEL_21; + v23 = std::operator<<((std::ostream::sentry *)v321, a20); + v247 = std::operator<<>(v23, "['"); + WXML::Rewrite::ToStringCode((int)v316, lpuexcpt); + v24 = std::operator<<(v247, v316); + v248 = std::operator<<>(v24, "']['"); + WXML::Rewrite::ToStringCode((int)&v323, (int *)v299); + v25 = std::operator<<(v248, &v323); + std::operator<<>(v25, "'] ="); + std::string::_M_dispose((void **)&v323); + std::string::_M_dispose((void **)v316); + if ( v302 ) + { + MMBizWxaAppComm::PathCombine(lpuexcpt, &v301, (unsigned int *)&v306); + if ( *(_BYTE *)v306 == 47 ) + { + std::operator+((int)&v309, 46, (int)&v306); + std::string::operator=((unsigned __int8 **)&v306, (int)&v309); + std::string::_M_dispose((void **)&v309); + } + if ( a2 + 1 == std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + a2, + (int)&v306) ) + { + v26 = std::operator==((int)a8, "$gwx"); + if ( (a9 & 0x20) != 0 || v26 ) + { + std::basic_stringstream,std::allocator>::basic_stringstream((int)&v323); + v27 = std::operator<<((std::ostream::sentry *)v325, lpuexcpt); + std::operator<<>(v27, ":"); + v28 = (std::ostream::sentry *)std::ostream::operator<<(v280); + std::operator<<>(v28, ":"); + v29 = (std::ostream::sentry *)std::ostream::operator<<(v283[28 * (_DWORD)v266 + 3]); + v30 = std::operator<<>(v29, ":"); + v31 = std::operator<<(v30, &v301); + v32 = std::operator<<>(v31, " not found from "); + std::operator<<(v32, lpuexcpt); + std::stringbuf::str((int)&v311, (int)v326); + std::string::operator=((unsigned __int8 **)a3, (int)&v311); + std::string::_M_dispose((void **)&v311); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)&v323); + v246 = 1; +LABEL_21: + std::string::_M_dispose((void **)&v306); + std::string::_M_dispose(v304); + std::string::_M_dispose((void **)&v301); + std::string::_M_dispose(v299); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v320); + std::string::_M_dispose((void **)v297); + std::string::_M_dispose((void **)&v294); + v266 = (std::ostream::sentry *)v246; + goto LABEL_25; + } + } + v249 = std::operator<<>((std::ostream::sentry *)v321, "f_['"); + WXML::Rewrite::ToStringCode((int)&v323, &v306); + v33 = std::operator<<(v249, &v323); + std::operator<<>(v33, "'] || "); + std::string::_M_dispose((void **)&v323); + v250 = std::operator<<>((std::ostream::sentry *)v321, "nv_require(\""); + std::operator+((int)v316, "p_", (int)&v306); + WXML::Rewrite::ToStringCode((int)&v323, v316); + v34 = std::operator<<(v250, &v323); + v35 = std::operator<<>(v34, "\");"); + std::operator<<>(v35, a10); + std::string::_M_dispose((void **)&v323); + std::string::_M_dispose((void **)v316); + v36 = std::operator<<((std::ostream::sentry *)v321, a20); + v251 = std::operator<<>(v36, "['"); + WXML::Rewrite::ToStringCode((int)v316, lpuexcpt); + v37 = std::operator<<(v251, v316); + v252 = std::operator<<>(v37, "']['"); + WXML::Rewrite::ToStringCode((int)&v323, (int *)v299); + v38 = std::operator<<(v252, &v323); + v39 = std::operator<<>(v38, "']();"); + std::operator<<>(v39, a10); + std::string::_M_dispose((void **)&v323); + v40 = v316; + } + else + { + std::operator+((int)v314, "m_", (int)lpuexcpt); + v41 = std::string::append(v314, ":"); + std::string::basic_string(v316, v41); + v42 = std::string::append(v316, (int)v299); + std::string::basic_string(&v323, v42); + a1 = &v323; + WXML::Compiler::GetFuncId((void **)&v309, &v292, (int)&v323); + std::string::_M_dispose((void **)&v323); + std::string::_M_dispose((void **)v316); + std::string::_M_dispose((void **)v314); + v246 = night::compile_ns((int)lpuexcpt, (int)&v309, (int)v304, v280, (unsigned int *)v297, 0); + if ( v246 ) + { + std::string::_M_assign((int)a3, (int)v297); + std::string::_M_dispose((void **)&v309); + goto LABEL_21; + } + v253 = std::operator<<>((std::ostream::sentry *)v321, "nv_require(\""); + std::operator+((int)&v311, "m_", (int)lpuexcpt); + v43 = std::string::append(&v311, ":"); + std::string::basic_string(v314, v43); + v44 = std::string::append(v314, (int)v299); + std::string::basic_string(v316, v44); + WXML::Rewrite::ToStringCode((int)&v323, v316); + v45 = std::operator<<(v253, &v323); + v46 = std::operator<<>(v45, "\");"); + std::operator<<>(v46, a10); + std::string::_M_dispose((void **)&v323); + std::string::_M_dispose((void **)v316); + std::string::_M_dispose((void **)v314); + std::string::_M_dispose((void **)&v311); + v47 = std::operator<<((std::ostream::sentry *)v321, v297); + std::operator<<>(v47, a10); + v40 = &v309; + } + std::string::_M_dispose((void **)v40); + std::string::_M_dispose((void **)&v306); + std::string::_M_dispose(v304); + std::string::_M_dispose((void **)&v301); + std::string::_M_dispose(v299); + v266 = (std::ostream::sentry *)((char *)v266 + 1); + } + std::stringbuf::str((int)v314, (int)v322); + std::string::operator=((unsigned __int8 **)&v294, (int)v314); + std::string::_M_dispose((void **)v314); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v320); + std::string::_M_dispose((void **)v297); + if ( v295 ) + { + v48 = std::map::operator[](&v290, (int)lpuexcpt); + std::string::_M_assign((int)v48, (int)&v294); + } + std::string::_M_dispose((void **)&v294); + WXML::DOMLib::Parser::~Parser((int)v327); + std::vector::~vector((void **)&v283); + } + else + { + std::string::substr(v316, lpuexcpt, *((_DWORD *)i + 5) - 4, 0xFFFFFFFF); + v267 = std::operator==((int)v316, ".wxs"); + std::string::_M_dispose((void **)v316); + if ( v267 ) + { + v311 = (int)&v313; + v312 = 0; + v313 = 0; + std::operator+((int)v327, "p_", (int)lpuexcpt); + a1 = v327; + WXML::Compiler::GetFuncId((void **)v314, &v292, (int)v327); + std::string::_M_dispose((void **)v327); + v266 = (std::ostream::sentry *)night::compile_ns( + (int)lpuexcpt, + (int)v314, + (int)i + 40, + 1, + (unsigned int *)&v311, + 0); + if ( v266 ) + { + std::string::_M_assign((int)a3, (int)&v311); + std::string::_M_dispose((void **)v314); + std::string::_M_dispose((void **)&v311); + goto LABEL_118; + } + std::basic_stringstream,std::allocator>::basic_stringstream((int)v327); + v268 = std::operator<<>((std::ostream::sentry *)v328, "f_['"); + WXML::Rewrite::ToStringCode((int)v316, lpuexcpt); + v49 = std::operator<<(v268, v316); + v50 = std::operator<<>(v49, "'] = nv_require("); + v269 = std::operator<<>(v50, 34); + std::operator+((int)v320, "p_", (int)lpuexcpt); + WXML::Rewrite::ToStringCode((int)&v323, v320); + v51 = std::operator<<(v269, &v323); + v52 = std::operator<<>(v51, 34); + v53 = std::operator<<>(v52, ");"); + std::operator<<>(v53, a10); + std::string::_M_dispose((void **)&v323); + std::string::_M_dispose((void **)v320); + std::string::_M_dispose((void **)v316); + v54 = std::operator<<((std::ostream::sentry *)v328, &v311); + std::operator<<>(v54, a10); + std::stringbuf::str((int)&v323, (int)v329); + v55 = std::map::operator[](&v290, (int)lpuexcpt); + std::string::operator=((unsigned __int8 **)v55, (int)&v323); + std::string::_M_dispose((void **)&v323); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v327); + std::string::_M_dispose((void **)v314); + std::string::_M_dispose((void **)&v311); + } + } + } + if ( a7 ) + std::string::basic_string((void **)&v323, "global"); + else + std::string::basic_string((void **)&v323, "window"); + WXML::Compiler::GetVersionInfo((int)v327, &v323); + v56 = std::operator<<((std::ostream::sentry *)v318, v327); + std::ostream::operator<<(v56, (int (__cdecl *)(void *))std::endl>); + std::string::_M_dispose((void **)v327); + std::string::_M_dispose((void **)&v323); + WXML::NameAllocator::NameAllocator(&v323, a17, a18); + v57 = std::operator<<>((std::ostream::sentry *)v318, "var $gwxc"); + std::operator<<>(v57, a10); + v58 = std::operator<<>((std::ostream::sentry *)v318, "var $gaic={}"); + std::operator<<>(v58, a10); + v59 = std::operator<<((std::ostream::sentry *)v318, a8); + v60 = std::operator<<>(v59, "=function(path,global){"); + std::operator<<>(v60, a10); + std::operator<<>((std::ostream::sentry *)v318, "if(typeof global === 'undefined') global={};"); + std::operator<<>((std::ostream::sentry *)v318, "if(typeof __WXML_GLOBAL__ === 'undefined') {"); + v61 = std::operator<<>((std::ostream::sentry *)v318, "__WXML_GLOBAL__={};"); + std::operator<<>(v61, a10); + if ( (a9 & 0x80) != 0 ) + { + std::string::basic_string((void **)v327, "life_cycle_callback_content"); + v259 = (std::ostream::sentry *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + a6, + (int)v327); + std::string::_M_dispose((void **)v327); + if ( v259 != (std::ostream::sentry *)(a6 + 1) ) + { + std::string::basic_string((void **)v327, "life_cycle_callback_content"); + v62 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + a6, + (int)v327); + std::operator<<((std::ostream::sentry *)v318, v62 + 10); + std::string::_M_dispose((void **)v327); + } + } + std::operator<<>((std::ostream::sentry *)v318, "}"); + v63 = std::operator<<>( + (std::ostream::sentry *)v318, + "__WXML_GLOBAL__.modules = __WXML_GLOBAL__.modules || {};"); + std::operator<<>(v63, a10); + if ( !std::operator==((int)a8, "$gwx") && (a9 & 0x60) == 0 ) + { + v64 = std::operator<<>((std::ostream::sentry *)v318, "$gwx('init', global);"); + std::operator<<>(v64, a10); + } + v65 = std::operator<<>( + (std::ostream::sentry *)v318, + "function _(a,b){if(typeof(b)!='undefined')a.children.push(b);}"); + std::operator<<>(v65, a10); + v66 = std::operator<<>( + (std::ostream::sentry *)v318, + "function _v(k){if(typeof(k)!='undefined')return {tag:'virtual','wxKey':k,children:[]};return {tag:'virtual',children:[]};}"); + std::operator<<>(v66, a10); + v67 = std::operator<<>( + (std::ostream::sentry *)v318, + "function _n(tag){$gwxc++;if($gwxc>=16000){throw 'Dom limit exceeded, please check if there\\'s any mistake you" + "\\'ve made.'};return {tag:'wx-'+tag,attr:{},children:[],n:[],raw:{},generics:{}}}"); + std::operator<<>(v67, a10); + v68 = std::operator<<>( + (std::ostream::sentry *)v318, + "function _p(a,b){b&&a.properities.push(b);}"); + std::operator<<>(v68, a10); + v69 = std::operator<<>( + (std::ostream::sentry *)v318, + "function _s(scope,env,key){return typeof(scope[key])!='undefined'?scope[key]:env[key]}"); + std::operator<<>(v69, a10); + v70 = std::operator<<>((std::ostream::sentry *)v318, "function _wp(m){console.warn(\"WXMLRT_"); + v71 = std::operator<<(v70, a8); + v72 = std::operator<<>(v71, ":\"+m)}"); + std::operator<<>(v72, a10); + v73 = std::operator<<>( + (std::ostream::sentry *)v318, + "function _wl(tname,prefix){_wp(prefix+':-1:-1:-1: Template `' + tname + '` is being called recursively, will be stop.')}"); + std::operator<<>(v73, a10); + v74 = std::operator<<>((std::ostream::sentry *)v318, aGwnConsoleWarn); + std::operator<<>(v74, a10); + v75 = std::operator<<>( + (std::ostream::sentry *)v318, + "function wfor( to_iter, func, env, _s, global, father, itemname, indexname, keyname )\n" + "{\n" + "var _n = wh.hn( to_iter ) === 'n'; \n" + "var scope = wh.rv( _s ); \n" + "var has_old_item = scope.hasOwnProperty(itemname);\n" + "var has_old_index = scope.hasOwnProperty(indexname);\n" + "var old_item = scope[itemname];\n" + "var old_index = scope[indexname];\n" + "var full = Object.prototype.toString.call(wh.rv(to_iter));\n" + "var type = full[8]; \n" + "if( type === 'N' && full[10] === 'l' ) type = 'X'; \n" + "var _y;\n" + "if( _n )\n" + "{\n" + "if( type === 'A' ) \n" + "{\n" + "var r_iter_item;\n" + "for( var i = 0 ; i < to_iter.length ; i++ )\n" + "{\n" + "scope[itemname] = to_iter[i];\n" + "scope[indexname] = _n ? i : wh.nh(i, 'h');\n" + "r_iter_item = wh.rv(to_iter[i]);\n" + "var key = keyname && r_iter_item ? (keyname===\"*this\" ? r_iter_item : wh.rv(r_iter_item[keyname])) : undefin" + "ed;\n" + "_y = _v(key);\n" + "_(father,_y);\n" + "func( env, scope, _y, global );\n" + "}\n" + "}\n" + "else if( type === 'O' ) \n" + "{\n" + "var i = 0;\n" + "var r_iter_item;\n" + "for( var k in to_iter )\n" + "{\n" + "scope[itemname] = to_iter[k];\n" + "scope[indexname] = _n ? k : wh.nh(k, 'h');\n" + "r_iter_item = wh.rv(to_iter[k]);\n" + "var key = keyname && r_iter_item ? (keyname===\"*this\" ? r_iter_item : wh.rv(r_iter_item[keyname])) : undefin" + "ed;\n" + "_y = _v(key);\n" + "_(father,_y);\n" + "func( env,scope,_y,global );\n" + "i++;\n" + "}\n" + "}\n" + "else if( type === 'S' ) \n" + "{\n" + "for( var i = 0 ; i < to_iter.length ; i++ )\n" + "{\n" + "scope[itemname] = to_iter[i];\n" + "scope[indexname] = _n ? i : wh.nh(i, 'h');\n" + "_y = _v( to_iter[i] + i );\n" + "_(father,_y);\n" + "func( env,scope,_y,global );\n" + "}\n" + "}\n" + "else if( type === 'N' ) \n" + "{\n" + "for( var i = 0 ; i < to_iter ; i++ )\n" + "{\n" + "scope[itemname] = i;\n" + "scope[indexname] = _n ? i : wh.nh(i, 'h');\n" + "_y = _v( i );\n" + "_(father,_y);\n" + "func(env,scope,_y,global);\n" + "}\n" + "}\n" + "else\n" + "{\n" + "}\n" + "}\n" + "else\n" + "{\n" + "var r_to_iter = wh.rv(to_iter);\n" + "var r_iter_item, iter_item;\n" + "if( type === 'A' ) \n" + "{\n" + "for( var i = 0 ; i < r_to_iter.length ; i++ )\n" + "{\n" + "iter_item = r_to_iter[i];\n" + "iter_item = wh.hn(iter_item)==='n' ? wh.nh(iter_item,'h') : iter_item;\n" + "r_iter_item = wh.rv( iter_item );\n" + "scope[itemname] = iter_item\n" + "scope[indexname] = _n ? i : wh.nh(i, 'h');\n" + "var key = keyname && r_iter_item ? (keyname===\"*this\" ? r_iter_item : wh.rv(r_iter_item[keyname])) : undefin" + "ed;\n" + "_y = _v(key);\n" + "_(father,_y);\n" + "func( env, scope, _y, global );\n" + "}\n" + "}\n" + "else if( type === 'O' ) \n" + "{\n" + "var i=0;\n" + "for( var k in r_to_iter )\n" + "{\n" + "iter_item = r_to_iter[k];\n" + "iter_item = wh.hn(iter_item)==='n'? wh.nh(iter_item,'h') : iter_item;\n" + "r_iter_item = wh.rv( iter_item );\n" + "scope[itemname] = iter_item;\n" + "scope[indexname] = _n ? k : wh.nh(k, 'h');\n" + "var key = keyname && r_iter_item ? (keyname===\"*this\" ? r_iter_item : wh.rv(r_iter_item[keyname])) : undefin" + "ed;\n" + "_y=_v(key);\n" + "_(father,_y);\n" + "func( env, scope, _y, global );\n" + "i++\n" + "}\n" + "}\n" + "else if( type === 'S' ) \n" + "{\n" + "for( var i = 0 ; i < r_to_iter.length ; i++ )\n" + "{\n" + "iter_item = wh.nh(r_to_iter[i],'h');\n" + "scope[itemname] = iter_item;\n" + "scope[indexname] = _n ? i : wh.nh(i, 'h');\n" + "_y = _v( to_iter[i] + i );\n" + "_(father,_y);\n" + "func( env, scope, _y, global );\n" + "}\n" + "}\n" + "else if( type === 'N' ) \n" + "{\n" + "for( var i = 0 ; i < r_to_iter ; i++ )\n" + "{\n" + "iter_item = wh.nh(i,'h');\n" + "scope[itemname] = iter_item;\n" + "scope[indexname]= _n ? i : wh.nh(i,'h');\n" + "_y = _v( i );\n" + "_(father,_y);\n" + "func(env,scope,_y,global);\n" + "}\n" + "}\n" + "else\n" + "{\n" + "}\n" + "}\n" + "if(has_old_item)\n" + "{\n" + "scope[itemname]=old_item;\n" + "}\n" + "else\n" + "{\n" + "delete scope[itemname];\n" + "}\n" + "if(has_old_index)\n" + "{\n" + "scope[indexname]=old_index;\n" + "}\n" + "else\n" + "{\n" + "delete scope[indexname];\n" + "}\n" + "}\n"); + std::operator<<>(v75, a10); + v76 = std::operator<<>( + (std::ostream::sentry *)v318, + "function _ca(o)\n" + "{ \n" + "if ( wh.hn(o) == 'h' ) return true;\n" + "if ( typeof o !== \"object\" ) return false;\n" + "for(var i in o){ \n" + "if ( o.hasOwnProperty(i) ){\n" + "if (_ca(o[i])) return true;\n" + "}\n" + "}\n" + "return false;\n" + "}\n" + "function _da( node, attrname, opindex, raw, o )\n" + "{\n" + "var isaffected = false;\n" + "var value = $gdc( raw, \"\", 2 );\n" + "if ( o.ap && value && value.constructor===Function ) \n" + "{\n" + "attrname = \"$wxs:\" + attrname; \n" + "node.attr[\"$gdc\"] = $gdc;\n" + "}\n" + "if ( o.is_affected || _ca(raw) ) \n" + "{\n" + "node.n.push( attrname );\n" + "node.raw[attrname] = raw;\n" + "}\n" + "node.attr[attrname] = value;\n" + "}\n" + "function _r( node, attrname, opindex, env, scope, global ) \n" + "{\n" + "global.opindex=opindex;\n" + "var o = {}, _env;\n" + "var a = grb( z[opindex], env, scope, global, o );\n" + "_da( node, attrname, opindex, a, o );\n" + "}\n" + "function _rz( z, node, attrname, opindex, env, scope, global ) \n" + "{\n" + "global.opindex=opindex;\n" + "var o = {}, _env;\n" + "var a = grb( z[opindex], env, scope, global, o );\n" + "_da( node, attrname, opindex, a, o );\n" + "}\n" + "function _o( opindex, env, scope, global )\n" + "{\n" + "global.opindex=opindex;\n" + "var nothing = {};\n" + "var r = grb( z[opindex], env, scope, global, nothing );\n" + "return (r&&r.constructor===Function) ? undefined : r;\n" + "}\n" + "function _oz( z, opindex, env, scope, global )\n" + "{\n" + "global.opindex=opindex;\n" + "var nothing = {};\n" + "var r = grb( z[opindex], env, scope, global, nothing );\n" + "return (r&&r.constructor===Function) ? undefined : r;\n" + "}\n" + "function _1( opindex, env, scope, global, o )\n" + "{\n" + "var o = o || {};\n" + "global.opindex=opindex;\n" + "return gra( z[opindex], env, scope, global, o );\n" + "}\n" + "function _1z( z, opindex, env, scope, global, o )\n" + "{\n" + "var o = o || {};\n" + "global.opindex=opindex;\n" + "return gra( z[opindex], env, scope, global, o );\n" + "}\n" + "function _2( opindex, func, env, scope, global, father, itemname, indexname, keyname )\n" + "{\n" + "var o = {};\n" + "var to_iter = _1( opindex, env, scope, global );\n" + "wfor( to_iter, func, env, scope, global, father, itemname, indexname, keyname );\n" + "}\n" + "function _2z( z, opindex, func, env, scope, global, father, itemname, indexname, keyname )\n" + "{\n" + "var o = {};\n" + "var to_iter = _1z( z, opindex, env, scope, global );\n" + "wfor( to_iter, func, env, scope, global, father, itemname, indexname, keyname );\n" + "}\n"); + std::operator<<>(v76, a10); + v77 = std::operator<<>( + (std::ostream::sentry *)v318, + "\n" + "function _m(tag,attrs,generics,env,scope,global)\n" + "{\n" + "var tmp=_n(tag);\n" + "var base=0;\n" + "for(var i = 0 ; i < attrs.length ; i+=2 )\n" + "{\n" + "if(base+attrs[i+1]<0)\n" + "{\n" + "tmp.attr[attrs[i]]=true;\n" + "}\n" + "else\n" + "{\n" + "_r(tmp,attrs[i],base+attrs[i+1],env,scope,global);\n" + "if(base===0)base=attrs[i+1];\n" + "}\n" + "}\n" + "for(var i=0;i>(v77, a10); + v78 = std::operator<<>((std::ostream::sentry *)v318, aVarNfInitFunct); + std::operator<<>(v78, a10); + v79 = std::operator<<>( + (std::ostream::sentry *)v318, + "function _af(p, a, r, c){\n" + "p.extraAttr = {\"t_action\": a, \"t_rawid\": r };\n" + "if ( typeof(c) != 'undefined' ) p.extraAttr.t_cid = c;\n" + "}\n"); + std::operator<<>(v79, a10); + if ( !a7 ) + { + v80 = std::operator<<>((std::ostream::sentry *)v318, "function _gv( )"); + std::operator<<>(v80, a10); + v81 = std::operator<<>( + (std::ostream::sentry *)v318, + "{if( typeof( window.__webview_engine_version__) == 'undefined' ) return 0.0;"); + std::operator<<>(v81, a10); + v82 = std::operator<<>( + (std::ostream::sentry *)v318, + "return window.__webview_engine_version__;}"); + std::operator<<>(v82, a10); + } + v83 = std::operator<<>( + (std::ostream::sentry *)v318, + "function _ai(i,p,e,me,r,c){var x=_grp(p,e,me);if(x)i.push(x);else{i.push('');_wp(me+':import:'+r+':'+c+': Path" + " `'+p+'` not found from `'+me+'`.')}}"); + std::operator<<>(v83, a10); + v84 = std::operator<<>( + (std::ostream::sentry *)v318, + "function _grp(p,e,me){if(p[0]!='/'){var mepart=me.split('/');mepart.pop();var ppart=p.split('/');for(var i=0;i" + ">(v84, a10); + std::operator<<>( + (std::ostream::sentry *)v318, + "function _gd(p,c,e,d){if(!c)return;if(d[p][c])return d[p][c];for(var x=e[p].i.length-1;x>=0;x--){if(e[p].i[x]&&d[e[p" + "].i[x]][c])return d[e[p].i[x]][c]};"); + std::operator<<>( + (std::ostream::sentry *)v318, + "for(var x=e[p].ti.length-1;x>=0;x--){var q=_grp(e[p].ti[x],e,p);if(q&&d[q][c])return d[q][c]}"); + std::operator<<>( + (std::ostream::sentry *)v318, + "var ii=_gapi(e,p);for(var x=0;x>( + (std::ostream::sentry *)v318, + "for(var k=e[p].j.length-1;k>=0;k--)if(e[p].j[k]){for(var q=e[e[p].j[k]].ti.length-1;q>=0;q--){var pp=_grp(e[e[p].j[k" + "]].ti[q],e,p);if(pp&&d[pp][c]){return d[pp][c]}}}"); + v85 = std::operator<<>((std::ostream::sentry *)v318, "}"); + std::operator<<>(v85, a10); + std::operator<<>( + (std::ostream::sentry *)v318, + "function _gapi(e,p){if(!p)return [];if($gaic[p]){return $gaic[p]};var ret=[],q=[],h=0,t=0,put={},visited={};q.push(p" + ");visited[p]=true;t++;while(h>( + (std::ostream::sentry *)v318, + "var a=q[h++];for(var i=0;i>( + (std::ostream::sentry *)v318, + "var nd=e[a].ic[i];var np=_grp(nd,e,a);if(np&&!visited[np]){visited[np]=true;q.push(np);t++;}}for(var i=0;a!=p&&i>( + (std::ostream::sentry *)v318, + "var ni=e[a].ti[i];var nm=_grp(ni,e,a);if(nm&&!put[nm]){put[nm]=true;ret.push(nm);}}"); + v86 = std::operator<<>((std::ostream::sentry *)v318, "}$gaic[p]=ret;return ret;}"); + std::operator<<>(v86, a10); + std::operator<<>((std::ostream::sentry *)v318, "var $ixc={};"); + v87 = std::operator<<>( + (std::ostream::sentry *)v318, + "function _ic(p,ent,me,e,s,r,gg){var x=_grp(p,ent,me);ent[me].j.push(x);if(x){if($ixc[x]){_wp('-1:include:-1:-1" + ": `'+p+'` is being included in a loop, will be stop.');return;}$ixc[x]=true;try{ent[x].f(e,s,r,gg)}catch(e){}$" + "ixc[x]=false;}else{_wp(me+':include:-1:-1: Included path `'+p+'` not found from `'+me+'`.')}}"); + std::operator<<>(v87, a10); + std::operator<<>( + (std::ostream::sentry *)v318, + "function _w(tn,f,line,c){_wp(f+':template:'+line+':'+c+': Template `'+tn+'` not found.');}"); + v88 = std::operator<<>( + (std::ostream::sentry *)v318, + "function _ev(dom){var changed=false;delete dom.properities;delete dom.n;if(dom.children){do{changed=false;var " + "newch = [];for(var i=0;i>(v88, a10); + v89 = std::operator<<>( + (std::ostream::sentry *)v318, + "function _tsd( root )\n" + "{\n" + "if( root.tag == \"wx-wx-scope\" ) \n" + "{\n" + "root.tag = \"virtual\";\n" + "root.wxCkey = \"11\";\n" + "root['wxScopeData'] = root.attr['wx:scope-data'];\n" + "delete root.n;\n" + "delete root.raw;\n" + "delete root.generics;\n" + "delete root.attr;\n" + "}\n" + "for( var i = 0 ; root.children && i < root.children.length ; i++ )\n" + "{\n" + "_tsd( root.children[i] );\n" + "}\n" + "return root;\n" + "}\n"); + std::operator<<>(v89, a10); + v90 = std::operator<<>((std::ostream::sentry *)v318, "var "); + v91 = std::operator<<(v90, a14); + v92 = std::operator<<>(v91, "={}"); + std::operator<<>(v92, a10); + v93 = std::operator<<>( + (std::ostream::sentry *)v318, + "if(typeof(global.entrys)==='undefined')global.entrys={};"); + v94 = std::operator<<(v93, a14); + v95 = std::operator<<>(v94, "=global.entrys;"); + std::operator<<>(v95, a10); + v96 = std::operator<<>((std::ostream::sentry *)v318, "var "); + v97 = std::operator<<(v96, a15); + v98 = std::operator<<>(v97, "={}"); + std::operator<<>(v98, a10); + v99 = std::operator<<>( + (std::ostream::sentry *)v318, + "if(typeof(global.defines)==='undefined')global.defines={};"); + v100 = std::operator<<(v99, a15); + v101 = std::operator<<>(v100, "=global.defines;"); + std::operator<<>(v101, a10); + v102 = std::operator<<>((std::ostream::sentry *)v318, "var "); + v103 = std::operator<<(v102, a20); + v104 = std::operator<<>(v103, "={}"); + std::operator<<>(v104, a10); + v105 = std::operator<<>( + (std::ostream::sentry *)v318, + "if(typeof(global.modules)==='undefined')global.modules={};"); + v106 = std::operator<<(v105, a20); + v107 = std::operator<<>(v106, "=global.modules || {};"); + std::operator<<>(v107, a10); + v108 = std::operator<<>((std::ostream::sentry *)v318, "var "); + v109 = std::operator<<(v108, a16); + v110 = std::operator<<>(v109, "={}"); + std::operator<<>(v110, a10); + if ( (a9 & 2) != 0 ) + { + v111 = std::operator<<>((std::ostream::sentry *)v318, "var cs"); + std::operator<<>(v111, a10); + } + std::_Rb_tree_header::_Rb_tree_header(v310); + for ( j = v288; ; j = (std::ostream::sentry *)std::_Rb_tree_increment((int)v270) ) + { + v270 = j; + if ( j == (std::ostream::sentry *)v287 ) + break; + WXML::DOMLib::WXMLDom::RewriteTree(*((_DWORD *)j + 10)); + v260 = (std::ostream::sentry *)*((_DWORD *)v270 + 10); + std::string::basic_string((void **)v327, (char *)off_550B3F); + v113 = std::map>::operator[](a5, v327); + WXML::DOMLib::WXMLDom::MarkIfHasDescendant((int)v260, v113); + std::string::_M_dispose((void **)v327); + if ( a7 ) + { + v261 = (std::ostream::sentry *)*((_DWORD *)v270 + 10); + std::string::basic_string((void **)v327, (char *)off_550B3F); + v114 = std::map>::operator[](a5, v327); + WXML::DOMLib::WXMLDom::CutDomsForCustomComponent(v261, v114); + std::string::_M_dispose((void **)v327); + } + } + v115 = std::operator<<>( + (std::ostream::sentry *)v318, + "__WXML_GLOBAL__.ops_cached = __WXML_GLOBAL__.ops_cached || {}"); + std::operator<<>(v115, a10); + v116 = std::operator<<>( + (std::ostream::sentry *)v318, + "__WXML_GLOBAL__.ops_set = __WXML_GLOBAL__.ops_set || {};"); + std::operator<<>(v116, a10); + v117 = std::operator<<>( + (std::ostream::sentry *)v318, + "__WXML_GLOBAL__.ops_init = __WXML_GLOBAL__.ops_init || {};"); + std::operator<<>(v117, a10); + v118 = std::operator<<>((std::ostream::sentry *)v318, "var z=__WXML_GLOBAL__.ops_set."); + v119 = std::operator<<(v118, a8); + v120 = std::operator<<>(v119, " || [];"); + std::operator<<>(v120, a10); + if ( (a9 & 4) != 0 ) + { + v121 = std::operator<<>( + (std::ostream::sentry *)v318, + "__WXML_GLOBAL__.debuginfo_set = __WXML_GLOBAL__.debuginfo_set || {};"); + std::operator<<>(v121, a10); + v122 = std::operator<<>( + (std::ostream::sentry *)v318, + "var debugInfo=__WXML_GLOBAL__.debuginfo_set."); + v123 = std::operator<<(v122, a8); + v124 = std::operator<<>(v123, " || [];"); + std::operator<<>(v124, a10); + } + v254 = 0; + for ( k = v288; k != (std::ostream::sentry *)v287; k = (std::ostream::sentry *)std::_Rb_tree_increment((int)k) ) + { + std::_Rb_tree_header::_Rb_tree_header(&v312); + v254 = (WXML::NameAllocator *)((char *)v254 + 1); + v307 = 0; + v306 = 0; + std::basic_stringstream,std::allocator>::basic_stringstream((int)v327); + v125 = std::operator<<((std::ostream::sentry *)v328, a8); + std::operator<<>(v125, "_"); + std::ostream::operator<<(v254); + std::stringbuf::str((int)v314, (int)v329); + std::string::basic_string((void **)v316, "gz"); + std::string::append(v316, (int)v314); + v126 = std::operator<<>((std::ostream::sentry *)v318, "function "); + v127 = std::operator<<(v126, v316); + v128 = std::operator<<>(v127, "(){"); + std::operator<<>(v128, a10); + v129 = std::operator<<>((std::ostream::sentry *)v318, "if( __WXML_GLOBAL__.ops_cached."); + v130 = std::operator<<(v129, v314); + std::operator<<>(v130, ")"); + v131 = std::operator<<>((std::ostream::sentry *)v318, "return __WXML_GLOBAL__.ops_cached."); + v132 = std::operator<<(v131, v314); + std::operator<<>(v132, a10); + v133 = std::operator<<>((std::ostream::sentry *)v318, "__WXML_GLOBAL__.ops_cached."); + v134 = std::operator<<(v133, v314); + v135 = std::operator<<>(v134, "=[];"); + std::operator<<>(v135, a10); + std::operator<<>((std::ostream::sentry *)v318, "(function(z){var a=11;"); + if ( (a9 & 4) != 0 ) + v136 = std::operator<<>( + (std::ostream::sentry *)v318, + "function Z(ops,debugLine){z.push(['11182016',ops,debugLine])}"); + else + v136 = std::operator<<>((std::ostream::sentry *)v318, "function Z(ops){z.push(ops)}"); + std::operator<<>(v136, a10); + WXML::DOMLib::WXMLDom::RenderAllOpsAndRecord( + *((_DWORD **)k + 10), + (int *)k + 4, + (unsigned int *)a3, + (WXML::EXPRLib::Parser *)v317, + &v311, + &v306, + (a9 & 4) != 0, + (int)a6); + v137 = std::operator<<>((std::ostream::sentry *)v318, "})(__WXML_GLOBAL__.ops_cached."); + v138 = std::operator<<(v137, v314); + std::operator<<>(v138, ");"); + v139 = std::operator<<>((std::ostream::sentry *)v318, "return __WXML_GLOBAL__.ops_cached."); + v140 = std::operator<<(v139, v314); + std::operator<<>(v140, a10); + v141 = std::operator<<>((std::ostream::sentry *)v318, "}"); + std::operator<<>(v141, a10); + std::string::basic_string((void **)v320, "get_page_z_name"); + v142 = std::map::operator[]((_DWORD *)(*((_DWORD *)k + 10) + 272), v320); + std::string::_M_assign((int)v142, (int)v316); + std::string::_M_dispose((void **)v320); + std::string::_M_dispose((void **)v316); + std::string::_M_dispose((void **)v314); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v327); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v311); + } + v143 = std::operator<<>((std::ostream::sentry *)v318, "__WXML_GLOBAL__.ops_set."); + v144 = std::operator<<(v143, a8); + v145 = std::operator<<>(v144, "=z;"); + std::operator<<>(v145, a10); + v146 = std::operator<<>((std::ostream::sentry *)v318, "__WXML_GLOBAL__.ops_init."); + v147 = std::operator<<(v146, a8); + v148 = std::operator<<>(v147, "=true;"); + std::operator<<>(v148, a10); + if ( (a9 & 4) != 0 ) + { + v149 = std::operator<<>((std::ostream::sentry *)v318, "__WXML_GLOBAL__.debuginfo_set."); + v150 = std::operator<<(v149, a8); + v151 = std::operator<<>(v150, "=debugInfo;"); + std::operator<<>(v151, a10); + } + std::operator<<>((std::ostream::sentry *)v318, "var nv_require=function(){var nnm={"); + for ( m = (std::ostream::sentry *)v293[2]; ; m = (std::ostream::sentry *)std::_Rb_tree_increment((int)v272) ) + { + v272 = m; + if ( m == (std::ostream::sentry *)v293 ) + break; + v262 = std::operator<<>((std::ostream::sentry *)v318, 34); + WXML::Rewrite::ToStringCode((int)v327, (int *)v272 + 4); + v153 = std::operator<<(v262, v327); + v154 = std::operator<<>(v153, 34); + std::operator<<>(v154, ":np_"); + v155 = (std::ostream::sentry *)std::ostream::operator<<(*((_DWORD *)v272 + 10)); + std::operator<<>(v155, ","); + std::string::_M_dispose((void **)v327); + } + std::operator<<>((std::ostream::sentry *)v318, "};var nom={};return function(n){"); + std::operator<<>( + (std::ostream::sentry *)v318, + "if(n[0]==='p'&&n[1]==='_'&&f_[n.slice(2)])return f_[n.slice(2)];"); + std::operator<<>( + (std::ostream::sentry *)v318, + "return function(){if(!nnm[n]) return undefined;"); + std::operator<<>( + (std::ostream::sentry *)v318, + "try{if(!nom[n])nom[n]=nnm[n]();return nom[n];}"); + std::operator<<>((std::ostream::sentry *)v318, "catch(e){"); + std::operator<<>((std::ostream::sentry *)v318, "e.message=e.message.replace(/nv_/g,'');"); + std::operator<<>( + (std::ostream::sentry *)v318, + "var tmp = e.stack.substring(0,e.stack.lastIndexOf(n));"); + std::operator<<>( + (std::ostream::sentry *)v318, + "e.stack = tmp.substring(0,tmp.lastIndexOf('\\n'));"); + std::operator<<>((std::ostream::sentry *)v318, "e.stack = e.stack.replace(/\\snv_/g,' ');"); + std::operator<<>((std::ostream::sentry *)v318, "e.stack = $gstack(e.stack);"); + v156 = std::operator<<>( + (std::ostream::sentry *)v318, + "e.stack += '\\n at ' + n.substring(2);console.error(e);}"); + std::operator<<>(v156, a10); + v157 = std::operator<<>((std::ostream::sentry *)v318, "}}}()"); + std::operator<<>(v157, a10); + for ( n = (int *)v291[2]; ; n = (int *)std::_Rb_tree_increment((int)v273) ) + { + v273 = (std::ostream::sentry *)n; + if ( n == v291 ) + break; + v159 = std::operator<<((std::ostream::sentry *)v318, n + 10); + std::operator<<>(v159, a10); + } + for ( ii = v288; ; ii = (std::ostream::sentry *)std::_Rb_tree_increment((int)v274) ) + { + v274 = ii; + v263 = v281; + if ( ii == (std::ostream::sentry *)v287 ) + break; + std::string::basic_string((char *)v327, (int)ii + 16); + WXML::DOMLib::StrCache::Insert(v263, (int)v327); + std::string::_M_dispose((void **)v327); + v161 = *((_DWORD *)v274 + 10); + *(_DWORD *)(v161 + 248) = v281; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)(v161 + 252), v282); + WXML::DOMLib::WXMLDom::RecordAllPath(*((_DWORD **)v274 + 10)); + } + WXML::DOMLib::StrCache::RenderPathDefine(v281, (int)v317); + v238 = 0; + v264 = v288; + v234 = (a9 & 2) != 0; + while ( v264 != (std::ostream::sentry *)v287 ) + { + v162 = std::operator<<((std::ostream::sentry *)v318, a15); + std::operator<<>(v162, (char *)off_55101C); + v275 = v281; + v255 = (int *)((char *)v264 + 16); + std::string::basic_string((char *)v327, (int)v264 + 16); + StrID = WXML::DOMLib::StrCache::GetStrID(v275, (int)v327); + std::ostream::operator<<(StrID); + std::string::_M_dispose((void **)v327); + v164 = std::operator<<>((std::ostream::sentry *)v318, "]]={}"); + std::operator<<>(v164, a10); + std::string::basic_string((void **)v327, "get_page_z_name"); + v165 = std::map::operator[]((_DWORD *)(*((_DWORD *)v264 + 10) + 272), v327); + v266 = WXML::Compiler::RenderDefine( + (unsigned int **)v264 + 10, + (std::ostream::sentry *)((char *)v264 + 16), + &v309, + (int)a3, + (int)v317, + (int)a6, + v234, + a9, + a10, + a11, + a12, + a13, + (int)a8, + a14, + a15, + a16, + a17, + a18, + a19, + v165); + std::string::_M_dispose((void **)v327); + if ( v266 ) + goto LABEL_117; + std::basic_stringstream,std::allocator>::basic_stringstream((int)v327); + v314[0] = (int)&v315; + v314[1] = 0; + v315 = 0; + std::operator<<>((std::ostream::sentry *)v328, "m"); + v231 = v238 + 1; + std::ostream::operator<<(v238); + std::stringbuf::str((int)v320, (int)v329); + std::string::operator=((unsigned __int8 **)v314, (int)v320); + std::string::_M_dispose((void **)v320); + v239 = (_DWORD *)*((_DWORD *)v264 + 10); + std::string::basic_string((void **)v316, "get_page_z_name"); + v276 = std::map::operator[]((_DWORD *)(*((_DWORD *)v264 + 10) + 272), v316); + std::string::basic_string((void **)v320, "r"); + v266 = (std::ostream::sentry *)WXML::DOMLib::WXMLDom::RenderMeAsFunction( + v239, + v255, + a14, + (int)a3, + v314, + (int)v317, + &v323, + a11, + a12, + a13, + v320, + a15, + a10, + a16, + 0, + v234, + a9, + v276); + std::string::_M_dispose((void **)v320); + std::string::_M_dispose((void **)v316); + if ( v266 ) + { + std::string::_M_dispose((void **)v314); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v327); + goto LABEL_117; + } + v166 = std::operator<<((std::ostream::sentry *)v318, a14); + std::operator<<>(v166, (char *)off_55101C); + v240 = v281; + std::string::basic_string((char *)v320, (int)v255); + v167 = WXML::DOMLib::StrCache::GetStrID(v240, (int)v320); + std::ostream::operator<<(v167); + std::string::_M_dispose((void **)v320); + v168 = std::operator<<>((std::ostream::sentry *)v318, "]]={f:"); + v169 = std::operator<<(v168, v314); + std::operator<<>(v169, ",j:[],i:[],ti:["); + v256 = 0; + v241 = 0; + while ( 1 ) + { + v170 = *((_DWORD *)v264 + 10); + v171 = *(_DWORD *)(v170 + 72); + if ( (unsigned int)v256 >= (*(_DWORD *)(v170 + 76) - v171) >> 3 ) + break; + if ( std::operator==(*(_DWORD *)(v171 + 8 * (_DWORD)v256), "import") ) + { + v235 = *(_DWORD *)(*(_DWORD *)(*((_DWORD *)v264 + 10) + 72) + 8 * (_DWORD)v256); + v229 = (_DWORD *)(v235 + 52); + std::string::basic_string((void **)v320, (char *)off_547B7D); + v236 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)(v235 + 48), + (int)v320); + std::string::_M_dispose((void **)v320); + if ( v236 != v229 ) + { + if ( v241 ) + std::operator<<>((std::ostream::sentry *)v318, ","); + std::operator<<>((std::ostream::sentry *)v318, "x["); + v230 = v281; + v237 = *(_DWORD *)(*(_DWORD *)(*((_DWORD *)v264 + 10) + 72) + 8 * (_DWORD)v256); + std::string::basic_string((void **)v316, (char *)off_547B7D); + v172 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)(v237 + 48), + (int)v316); + v173 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)(v172 + 10)); + std::string::basic_string((char *)v320, v173); + v174 = WXML::DOMLib::StrCache::GetStrID(v230, (int)v320); + std::ostream::operator<<(v174); + std::string::_M_dispose((void **)v320); + std::string::_M_dispose((void **)v316); + std::operator<<>((std::ostream::sentry *)v318, "]"); + ++v241; + } + } + v256 = (WXML::NameAllocator *)((char *)v256 + 1); + } + std::operator<<>((std::ostream::sentry *)v318, "],ic:["); + for ( jj = 0; ; jj = (WXML::NameAllocator *)((char *)jj + 1) ) + { + v175 = *((_DWORD *)v264 + 10); + v176 = *(_DWORD *)(v175 + 72); + if ( (unsigned int)jj >= (*(_DWORD *)(v175 + 76) - v176) >> 3 ) + break; + if ( std::operator==(*(_DWORD *)(v176 + 8 * (_DWORD)jj), "include") ) + { + v242 = *(_DWORD *)(*(_DWORD *)(*((_DWORD *)v264 + 10) + 72) + 8 * (_DWORD)jj); + v232 = (_DWORD *)(v242 + 52); + std::string::basic_string((void **)v320, (char *)off_547B7D); + v243 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)(v242 + 48), + (int)v320); + std::string::_M_dispose((void **)v320); + if ( v243 != v232 ) + { + if ( v266 ) + std::operator<<>((std::ostream::sentry *)v318, ","); + std::operator<<>((std::ostream::sentry *)v318, "x["); + v233 = v281; + v244 = *(_DWORD *)(*(_DWORD *)(*((_DWORD *)v264 + 10) + 72) + 8 * (_DWORD)jj); + std::string::basic_string((void **)v316, (char *)off_547B7D); + v177 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)(v244 + 48), + (int)v316); + v178 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)(v177 + 10)); + std::string::basic_string((char *)v320, v178); + v179 = WXML::DOMLib::StrCache::GetStrID(v233, (int)v320); + std::ostream::operator<<(v179); + std::string::_M_dispose((void **)v320); + std::string::_M_dispose((void **)v316); + std::operator<<>((std::ostream::sentry *)v318, "]"); + v266 = (std::ostream::sentry *)((char *)v266 + 1); + } + } + } + v180 = std::operator<<>((std::ostream::sentry *)v318, "]}"); + std::operator<<>(v180, a10); + std::string::_M_dispose((void **)v314); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v327); + v264 = (std::ostream::sentry *)std::_Rb_tree_increment((int)v264); + v238 = v231; + } + v181 = std::operator<<>((std::ostream::sentry *)v318, "if(path&&"); + v182 = std::operator<<(v181, a14); + v183 = std::operator<<>(v182, "[path]){"); + std::operator<<>(v183, a10); + if ( !a7 ) + { + v184 = std::operator<<>((std::ostream::sentry *)v318, "window.__wxml_comp_version__=0.02"); + std::operator<<>(v184, a10); + } + v185 = std::operator<<>( + (std::ostream::sentry *)v318, + "return function(env,dd,global){$gwxc=0;var root={\"tag\":\"wx-page\"};root.children=[]"); + std::operator<<>(v185, a10); + v186 = std::operator<<>((std::ostream::sentry *)v318, "var main="); + v187 = std::operator<<(v186, a14); + v188 = std::operator<<>(v187, "[path].f"); + std::operator<<>(v188, a10); + if ( (a9 & 2) != 0 ) + { + v189 = std::operator<<>((std::ostream::sentry *)v318, "cs=[]"); + std::operator<<>(v189, a10); + } + if ( (a9 & 0x10) != 0 ) + { + v190 = std::operator<<>( + (std::ostream::sentry *)v318, + "console.log(path+': benv:\\n'+JSON.stringify(env))"); + std::operator<<>(v190, a10); + } + std::operator<<>((std::ostream::sentry *)v318, "if (typeof global===\"undefined\")global={};"); + v191 = std::operator<<>((std::ostream::sentry *)v318, "global.f=$gdc("); + v192 = std::operator<<(v191, a20); + v193 = std::operator<<>(v192, "[path],\"\",1);"); + std::operator<<>(v193, a10); + if ( !a7 ) + { + v194 = std::operator<<>( + (std::ostream::sentry *)v318, + "if(typeof(window.__webview_engine_version__)!='undefined'&&window.__webview_engine_version__+1e-6>=0.02+1e-" + "6&&window.__mergeData__)"); + std::operator<<>(v194, a10); + v195 = std::operator<<>((std::ostream::sentry *)v318, "{"); + std::operator<<>(v195, a10); + v196 = std::operator<<>((std::ostream::sentry *)v318, "env=window.__mergeData__(env,dd);"); + std::operator<<>(v196, a10); + v197 = std::operator<<>((std::ostream::sentry *)v318, "}"); + std::operator<<>(v197, a10); + } + v198 = std::operator<<>((std::ostream::sentry *)v318, "try{"); + std::operator<<>(v198, a10); + if ( (a9 & 0x10) != 0 ) + { + v199 = std::operator<<>( + (std::ostream::sentry *)v318, + "console.log(path+': aenv:\\n'+JSON.stringify(env)+', '+JSON.stringify(dd))"); + std::operator<<>(v199, a10); + } + if ( (a9 & 0x80) != 0 ) + { + v200 = std::operator<<>((std::ostream::sentry *)v318, "if(__WXML_GLOBAL__."); + v201 = std::operator<<>(v200, "before_calculate"); + std::operator<<>(v201, ")"); + v202 = std::operator<<>((std::ostream::sentry *)v318, "__WXML_GLOBAL__."); + v203 = std::operator<<>(v202, "before_calculate"); + v204 = std::operator<<>(v203, "(path, env)"); + std::operator<<>(v204, a10); + } + v205 = std::operator<<>((std::ostream::sentry *)v318, "main(env,{},root,global);"); + std::operator<<>(v205, a10); + if ( (a9 & 0x80) != 0 ) + { + v206 = std::operator<<>((std::ostream::sentry *)v318, "if(__WXML_GLOBAL__."); + v207 = std::operator<<>(v206, "after_calculate"); + std::operator<<>(v207, ")"); + v208 = std::operator<<>((std::ostream::sentry *)v318, "__WXML_GLOBAL__."); + v209 = std::operator<<>(v208, "after_calculate"); + v210 = std::operator<<>(v209, "(path, root)"); + std::operator<<>(v210, a10); + } + v211 = std::operator<<>((std::ostream::sentry *)v318, "_tsd(root)"); + std::operator<<>(v211, a10); + if ( !a7 ) + { + v212 = std::operator<<>( + (std::ostream::sentry *)v318, + "if(typeof(window.__webview_engine_version__)=='undefined'|| window.__webview_engine_version__+1e-6<0.01+1e-" + "6){return _ev(root);}"); + std::operator<<>(v212, a10); + } + v213 = std::operator<<>((std::ostream::sentry *)v318, "}catch(err){"); + std::operator<<>(v213, a10); + if ( (a9 & 2) != 0 ) + { + v214 = std::operator<<>((std::ostream::sentry *)v318, "console.log(cs, env);"); + std::operator<<>(v214, a10); + } + v215 = std::operator<<>((std::ostream::sentry *)v318, "console.log(err)"); + std::operator<<>(v215, a10); + if ( (a9 & 2) != 0 ) + { + v216 = std::operator<<>((std::ostream::sentry *)v318, "throw err"); + std::operator<<>(v216, a10); + } + v217 = std::operator<<>((std::ostream::sentry *)v318, "}"); + std::operator<<>(v217, a10); + if ( (a9 & 0x10) != 0 ) + { + v218 = std::operator<<>( + (std::ostream::sentry *)v318, + "console.log(path+': resp:\\n'+JSON.stringify(root))"); + std::operator<<>(v218, a10); + } + v219 = std::operator<<>((std::ostream::sentry *)v318, "return root;"); + std::operator<<>(v219, a10); + v220 = std::operator<<>((std::ostream::sentry *)v318, "}"); + std::operator<<>(v220, a10); + v221 = std::operator<<>((std::ostream::sentry *)v318, "}"); + std::operator<<>(v221, a10); + v222 = std::operator<<>((std::ostream::sentry *)v318, "}"); + std::operator<<>(v222, a10); + if ( (a9 & 8) != 0 ) + { + for ( kk = v288; ; kk = (struct _Unwind_Exception *)std::_Rb_tree_increment((int)lpuexcpta) ) + { + lpuexcpta = kk; + if ( kk == (struct _Unwind_Exception *)v287 ) + break; + v224 = std::operator<<>((std::ostream::sentry *)v318, "//"); + v225 = std::operator<<(v224, (int *)lpuexcpta + 4); + v226 = std::operator<<>(v225, ":"); + std::ostream::operator<<(v226, (int (__cdecl *)(void *))std::endl>); + WXML::DOMLib::WXMLDom::Print(*((_DWORD **)lpuexcpta + 10), 0, "//", v317); + } + } + std::stringbuf::str((int)v327, (int)v319); + std::string::operator=(a4, (int)v327); + std::string::_M_dispose((void **)v327); + v266 = 0; +LABEL_117: + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v309); + WXML::NameAllocator::~NameAllocator((int)&v323); +LABEL_118: + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v292); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v290); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v282); + std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_erase(v289[1]); + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::~_Rb_tree((int)&v286); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v317); + return v266; +} +// 406832: variable 'v228' is possibly undefined +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); +// 406648: using guessed type char var_3E8[8]; +// 406648: using guessed type _DWORD var_534[2]; +// 406648: using guessed type char var_310[4]; +// 406648: using guessed type char var_240[4]; +// 406648: using guessed type char var_23C[196]; +// 406648: using guessed type char var_30C[196]; +// 406648: using guessed type char var_170[4]; +// 406648: using guessed type char var_3E0[4]; +// 406648: using guessed type int var_444[5]; +// 406648: using guessed type char var_3DC[196]; + +//----- (0040A124) -------------------------------------------------------- +struct _Unwind_Exception *__cdecl WXML::Compiler::CompileLazy( + _DWORD *a1, + int *a2, + _DWORD *a3, + _DWORD *a4, + _DWORD *a5, + _DWORD *a6, + int *a7, + _DWORD *a8, + char a9, + int a10, + int a11, + char a12, + int *a13, + int *a14, + int *a15, + int *a16, + int *a17, + int *a18, + int a19, + int a20, + int a21, + int *a22) +{ + volatile signed __int32 **v22; // eax + _DWORD *v23; // eax + int v24; // edx + _DWORD *v25; // edx + _DWORD *v26; // eax + char *v27; // eax + int v28; // edx + int insert_hint_unique_pos; // eax + _DWORD *v30; // edx + bool v31; // zf + struct _Unwind_Exception *v32; // eax + struct _Unwind_Exception *v33; // edx + _DWORD *v34; // eax + int k; // eax + std::ostream::sentry *v36; // eax + int *m; // eax + std::ostream::sentry *v38; // eax + std::ostream::sentry *v39; // eax + std::ostream::sentry *v40; // eax + bool v41; // zf + struct _Unwind_Exception *v42; // eax + struct _Unwind_Exception *v43; // edx + struct _Unwind_Exception *v44; // eax + _DWORD *v45; // eax + volatile signed __int32 *v46; // edx + char *v47; // ecx + volatile signed __int32 **n; // eax + unsigned int v49; // edx + int v50; // edx + int *v51; // eax + int *v52; // eax + std::ostream::sentry *v53; // eax + std::ostream::sentry *v54; // eax + std::ostream::sentry *v55; // eax + char *v56; // eax + std::ostream::sentry *v57; // eax + std::ostream::sentry *v58; // eax + std::ostream::sentry *v59; // eax + std::ostream::sentry *v60; // eax + std::ostream::sentry *v61; // eax + _DWORD *v62; // eax + std::ostream::sentry *v63; // eax + std::ostream::sentry *v64; // eax + std::ostream::sentry *v65; // eax + std::ostream::sentry *v66; // eax + std::ostream::sentry *v67; // eax + std::ostream::sentry *v68; // eax + std::ostream::sentry *v69; // eax + std::ostream::sentry *v70; // eax + std::ostream::sentry *v71; // eax + std::ostream::sentry *v72; // eax + std::ostream::sentry *v73; // eax + std::ostream::sentry *v74; // eax + std::ostream::sentry *v75; // eax + std::ostream::sentry *v76; // eax + std::ostream::sentry *v77; // eax + std::ostream::sentry *v78; // eax + std::ostream::sentry *v79; // eax + std::ostream::sentry *v80; // eax + std::ostream::sentry *v81; // eax + std::ostream::sentry *v82; // eax + std::ostream::sentry *v83; // eax + std::ostream::sentry *v84; // eax + std::ostream::sentry *v85; // eax + std::ostream::sentry *v86; // eax + std::ostream::sentry *v87; // eax + std::ostream::sentry *v88; // eax + std::ostream::sentry *v89; // eax + std::ostream::sentry *v90; // eax + std::ostream::sentry *v91; // eax + std::ostream::sentry *v92; // eax + std::ostream::sentry *v93; // eax + std::ostream::sentry *v94; // eax + std::ostream::sentry *v95; // eax + std::ostream::sentry *v96; // eax + char *v97; // eax + std::__cxx11 *v98; // eax + std::ostream::sentry *v99; // eax + std::ostream::sentry *v100; // eax + std::ostream::sentry *v101; // eax + std::ostream::sentry *v102; // eax + std::ostream::sentry *v103; // eax + std::ostream::sentry *v104; // eax + std::ostream::sentry *v105; // eax + std::ostream::sentry *v106; // eax + std::ostream::sentry *v107; // eax + std::ostream::sentry *v108; // eax + std::ostream::sentry *v109; // eax + std::ostream::sentry *v110; // eax + std::ostream::sentry *v111; // eax + std::ostream::sentry *v112; // eax + std::ostream::sentry *v113; // eax + std::ostream::sentry *v114; // eax + _DWORD *v115; // eax + std::ostream::sentry *v116; // eax + std::ostream::sentry *v117; // eax + std::ostream::sentry *v118; // eax + std::ostream::sentry *v119; // eax + std::ostream::sentry *v120; // eax + std::ostream::sentry *v121; // eax + std::ostream::sentry *v122; // eax + std::ostream::sentry *v123; // eax + std::ostream::sentry *v124; // eax + int *mm; // eax + std::ostream::sentry *v126; // eax + std::ostream::sentry *v127; // eax + std::ostream::sentry *v128; // eax + std::ostream::sentry *v129; // eax + std::ostream::sentry *v130; // eax + int *nn; // eax + std::ostream::sentry *v132; // eax + char *v133; // eax + volatile signed __int32 **v134; // ecx + char *v135; // eax + char *v136; // eax + std::ostream::sentry *v137; // eax + int StrID; // eax + std::ostream::sentry *v139; // eax + int *v140; // eax + unsigned int *v141; // eax + std::ostream::sentry *v142; // eax + int v143; // eax + std::ostream::sentry *v144; // eax + std::ostream::sentry *v145; // eax + int v146; // edx + _DWORD *v147; // eax + int v148; // eax + int v149; // eax + int v150; // edx + _DWORD *v151; // eax + int v152; // eax + int v153; // eax + std::ostream::sentry *v154; // eax + std::ostream::sentry *v155; // eax + std::ostream::sentry *v156; // eax + std::ostream::sentry *v157; // eax + std::ostream::sentry *v158; // eax + std::ostream::sentry *v159; // eax + std::ostream::sentry *v160; // eax + std::ostream::sentry *v161; // eax + std::ostream::sentry *v162; // eax + std::ostream::sentry *v163; // eax + std::ostream::sentry *v164; // eax + std::ostream::sentry *v165; // eax + std::ostream::sentry *v166; // eax + std::ostream::sentry *v167; // eax + std::ostream::sentry *v168; // eax + std::ostream::sentry *v169; // eax + std::ostream::sentry *v170; // eax + std::ostream::sentry *v171; // eax + std::ostream::sentry *v172; // eax + std::ostream::sentry *v173; // eax + std::ostream::sentry *v174; // eax + std::ostream::sentry *v175; // eax + std::ostream::sentry *v176; // eax + std::ostream::sentry *v177; // eax + std::ostream::sentry *v178; // eax + std::ostream::sentry *v179; // eax + std::ostream::sentry *v180; // eax + std::ostream::sentry *v181; // eax + std::ostream::sentry *v182; // eax + std::ostream::sentry *v183; // eax + std::ostream::sentry *v184; // eax + std::ostream::sentry *v185; // eax + std::ostream::sentry *v186; // eax + std::ostream::sentry *v187; // eax + std::ostream::sentry *v188; // eax + std::ostream::sentry *v189; // eax + std::ostream::sentry *v190; // eax + std::ostream::sentry *v191; // eax + char *v192; // eax + std::ostream::sentry *v193; // eax + std::ostream::sentry *v194; // eax + std::ostream::sentry *v195; // eax + char *v196; // eax + char *v197; // eax + char *v198; // eax + std::ostream::sentry *v199; // eax + std::ostream::sentry *v200; // eax + std::ostream::sentry *v201; // eax + struct _Unwind_Exception *i5; // eax + char *v203; // eax + _DWORD *v205; // [esp+60h] [ebp-2C8h] + _DWORD *v206; // [esp+60h] [ebp-2C8h] + int v207; // [esp+64h] [ebp-2C4h] + WXML::NameAllocator *v208; // [esp+68h] [ebp-2C0h] + bool v209; // [esp+70h] [ebp-2B8h] + int v210; // [esp+74h] [ebp-2B4h] + _DWORD *v211; // [esp+74h] [ebp-2B4h] + int v212; // [esp+74h] [ebp-2B4h] + _DWORD *v213; // [esp+74h] [ebp-2B4h] + _DWORD *v214; // [esp+74h] [ebp-2B4h] + int v215; // [esp+78h] [ebp-2B0h] + int v216; // [esp+78h] [ebp-2B0h] + _DWORD *v217; // [esp+78h] [ebp-2B0h] + int v218; // [esp+78h] [ebp-2B0h] + char *v219; // [esp+7Ch] [ebp-2ACh] + char *v220; // [esp+80h] [ebp-2A8h] + char *v221; // [esp+88h] [ebp-2A0h] + void *v222; // [esp+8Ch] [ebp-29Ch] + void *v223; // [esp+90h] [ebp-298h] + int v224; // [esp+94h] [ebp-294h] + bool v225; // [esp+ABh] [ebp-27Dh] + int v226; // [esp+ACh] [ebp-27Ch] + int v227; // [esp+ACh] [ebp-27Ch] + int v228; // [esp+ACh] [ebp-27Ch] + unsigned int *v229; // [esp+ACh] [ebp-27Ch] + _DWORD *v230; // [esp+ACh] [ebp-27Ch] + unsigned int v231; // [esp+ACh] [ebp-27Ch] + unsigned int i3; // [esp+ACh] [ebp-27Ch] + _DWORD *v233; // [esp+B0h] [ebp-278h] + int v234; // [esp+B4h] [ebp-274h] + int v235; // [esp+B4h] [ebp-274h] + char *v236; // [esp+B8h] [ebp-270h] + WXML::EXPRLib::Parser *v237; // [esp+BCh] [ebp-26Ch] + WXML::EXPRLib::Parser *v238; // [esp+BCh] [ebp-26Ch] + WXML::EXPRLib::Parser *v239; // [esp+BCh] [ebp-26Ch] + WXML::EXPRLib::Parser *v240; // [esp+BCh] [ebp-26Ch] + WXML::EXPRLib::Parser *v241; // [esp+BCh] [ebp-26Ch] + int ii; // [esp+BCh] [ebp-26Ch] + WXML::EXPRLib::Parser *v243; // [esp+BCh] [ebp-26Ch] + char *v244; // [esp+C0h] [ebp-268h] + WXML::NameAllocator *v245; // [esp+C0h] [ebp-268h] + WXML::NameAllocator *i2; // [esp+C0h] [ebp-268h] + _DWORD *Block; // [esp+C4h] [ebp-264h] + int v248; // [esp+C8h] [ebp-260h] + WXML::DOMLib::Parser *v249; // [esp+CCh] [ebp-25Ch] + int *v250; // [esp+CCh] [ebp-25Ch] + std::ostream::sentry *v251; // [esp+CCh] [ebp-25Ch] + std::ostream::sentry *v252; // [esp+CCh] [ebp-25Ch] + std::ostream::sentry *v253; // [esp+CCh] [ebp-25Ch] + std::ostream::sentry *v254; // [esp+CCh] [ebp-25Ch] + std::ostream::sentry *v255; // [esp+CCh] [ebp-25Ch] + char *v256; // [esp+CCh] [ebp-25Ch] + std::ostream::sentry *v257; // [esp+CCh] [ebp-25Ch] + struct _Unwind_Exception *v258; // [esp+D0h] [ebp-258h] + char v259; // [esp+D0h] [ebp-258h] + char *v260; // [esp+D0h] [ebp-258h] + struct _Unwind_Exception *v261; // [esp+D0h] [ebp-258h] + void *v262; // [esp+D0h] [ebp-258h] + char *v263; // [esp+D0h] [ebp-258h] + volatile signed __int32 *v264; // [esp+D0h] [ebp-258h] + int *kk; // [esp+D0h] [ebp-258h] + int *v266; // [esp+D0h] [ebp-258h] + int *v267; // [esp+D0h] [ebp-258h] + _DWORD *v268; // [esp+D0h] [ebp-258h] + WXML::NameAllocator *i1; // [esp+D0h] [ebp-258h] + _DWORD *v270; // [esp+D0h] [ebp-258h] + int *v271; // [esp+D0h] [ebp-258h] + int *i4; // [esp+D0h] [ebp-258h] + bool v273; // [esp+D0h] [ebp-258h] + int i; // [esp+D4h] [ebp-254h] + _DWORD *v275; // [esp+D4h] [ebp-254h] + struct _Unwind_Exception *v276; // [esp+D4h] [ebp-254h] + int *v277; // [esp+D4h] [ebp-254h] + int v278; // [esp+D4h] [ebp-254h] + void **v279; // [esp+D4h] [ebp-254h] + int v280; // [esp+D4h] [ebp-254h] + int v281; // [esp+D4h] [ebp-254h] + int v282; // [esp+D4h] [ebp-254h] + struct _Unwind_Exception *lpuexcpt; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcpta; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcpto; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcptb; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcptc; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcptd; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcpte; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcptf; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcptg; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcpth; // [esp+D8h] [ebp-250h] + char *lpuexcpti; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcptj; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcptp; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcptk; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcptl; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcptm; // [esp+D8h] [ebp-250h] + struct _Unwind_Exception *lpuexcptn; // [esp+D8h] [ebp-250h] + int v300[2]; // [esp+118h] [ebp-210h] BYREF + int v301; // [esp+120h] [ebp-208h] BYREF + _DWORD v302[2]; // [esp+124h] [ebp-204h] BYREF + _DWORD *v303; // [esp+12Ch] [ebp-1FCh] + int v304; // [esp+138h] [ebp-1F0h] BYREF + _DWORD v305[2]; // [esp+13Ch] [ebp-1ECh] BYREF + void *v306; // [esp+144h] [ebp-1E4h] + int v307; // [esp+150h] [ebp-1D8h] BYREF + _DWORD v308[5]; // [esp+154h] [ebp-1D4h] BYREF + int v309; // [esp+168h] [ebp-1C0h] BYREF + _DWORD v310[5]; // [esp+16Ch] [ebp-1BCh] BYREF + int v311; // [esp+180h] [ebp-1A8h] BYREF + _DWORD v312[5]; // [esp+184h] [ebp-1A4h] BYREF + int v313; // [esp+198h] [ebp-190h] BYREF + _DWORD v314[4]; // [esp+19Ch] [ebp-18Ch] BYREF + int v315; // [esp+1ACh] [ebp-17Ch] + int v316; // [esp+1B0h] [ebp-178h] BYREF + int v317[5]; // [esp+1B4h] [ebp-174h] BYREF + int v318[6]; // [esp+1C8h] [ebp-160h] BYREF + int v319; // [esp+1E0h] [ebp-148h] BYREF + volatile signed __int32 *v320[5]; // [esp+1E4h] [ebp-144h] BYREF + int v321[6]; // [esp+1F8h] [ebp-130h] BYREF + void *j; // [esp+210h] [ebp-118h] BYREF + struct _Unwind_Exception *v323; // [esp+214h] [ebp-114h] + int v324; // [esp+218h] [ebp-110h] + int jj; // [esp+228h] [ebp-100h] BYREF + volatile signed __int32 *v326; // [esp+22Ch] [ebp-FCh] BYREF + volatile signed __int32 *v327; // [esp+230h] [ebp-F8h] + int v328; // [esp+240h] [ebp-E8h] BYREF + volatile signed __int32 *v329; // [esp+244h] [ebp-E4h] BYREF + char v330[4]; // [esp+248h] [ebp-E0h] BYREF + volatile signed __int32 **v331; // [esp+24Ch] [ebp-DCh] + unsigned int v332; // [esp+254h] [ebp-D4h] + + std::_Rb_tree_header::_Rb_tree_header(v302); + std::_Rb_tree_header::_Rb_tree_header(v305); + std::_Rb_tree_header::_Rb_tree_header(v308); + std::_Rb_tree_header::_Rb_tree_header(v310); + std::_Rb_tree_header::_Rb_tree_header(v312); + lpuexcpt = (struct _Unwind_Exception *)a1[3]; + v249 = (WXML::DOMLib::Parser *)(a1 + 1); + while ( lpuexcpt != v249 ) + { + v258 = WXML::Compiler::ParseSource( + v249, + (int *)lpuexcpt + 4, + (char **)lpuexcpt + 10, + a12, + a10, + a22, + a1, + a2, + &v304, + &v309, + &v311, + (a11 & 4) != 0, + (a11 & 0x20) != 0); + if ( v258 ) + goto LABEL_187; + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree_increment((int)lpuexcpt); + } + v223 = operator new(0xD0u); + std::basic_stringstream,std::allocator>::basic_stringstream((int)v223); + zcc::shared_ptr,std::allocator>>::shared_ptr(&jj, (int)v223); + std::string::basic_string((void **)&v328, "__COMMON__"); + v22 = (volatile signed __int32 **)std::map,std::allocator>>>::operator[]( + &v301, + &v328); + *v22 = (volatile signed __int32 *)jj; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(v22 + 1, v326); + std::string::_M_dispose((void **)&v328); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v326); + jj = 0; + v326 = 0; + v327 = 0; + std::string::basic_string((void **)&v328, "__COMMON__"); + v23 = std::map>::operator[](&v307, &v328); + std::vector::operator=(v23, &jj); + std::string::_M_dispose((void **)&v328); + std::vector::~vector((void ***)&jj, v24); + std::string::basic_string((void **)&v328, "__COMMON__"); + v226 = *std::map,std::allocator>>>::operator[]( + &v301, + &v328); + std::string::_M_dispose((void **)&v328); + v237 = (WXML::EXPRLib::Parser *)a7[1]; + for ( i = *a7; (WXML::EXPRLib::Parser *)i != v237; i += 24 ) + { + v222 = operator new(0xD0u); + std::basic_stringstream,std::allocator>::basic_stringstream((int)v222); + zcc::shared_ptr,std::allocator>>::shared_ptr( + &v328, + (int)v222); + lpuexcpta = (struct _Unwind_Exception *)std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::lower_bound( + &v301, + i); + if ( lpuexcpta == (struct _Unwind_Exception *)v302 || (unsigned __int8)std::operator<(i, (int)lpuexcpta + 16) ) + { + Block = operator new(0x30u); + std::string::basic_string((char *)Block + 16, i); + Block[10] = 0; + Block[11] = 0; + lpuexcpta = (struct _Unwind_Exception *)std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_get_insert_hint_unique_pos( + &v301, + lpuexcpta, + (int)(Block + 4)); + if ( v25 ) + { + lpuexcpta = (struct _Unwind_Exception *)std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_insert_node( + &v301, + (int)lpuexcpta, + v25, + Block); + } + else + { + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)Block + 11); + std::string::_M_dispose((void **)Block + 4); + operator delete(Block); + } + } + *((_DWORD *)lpuexcpta + 10) = v328; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)lpuexcpta + 11, v329); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v329); + std::operator+((int)&jj, "./", i); + v26 = std::string::append(&jj, ".wxml"); + std::string::basic_string(&v328, v26); + j = 0; + v323 = 0; + v324 = 0; + j = std::_Vector_base::_M_allocate(1u); + lpuexcpto = (struct _Unwind_Exception *)((char *)j + 24); + v324 = (int)j + 24; + std::string::basic_string((char *)j, (int)&v328); + v323 = lpuexcpto; + v27 = std::map>::operator[](&v307, i); + std::vector::operator=(v27, (int *)&j); + std::vector::~vector((void ***)&j, v28); + std::string::_M_dispose((void **)&v328); + std::string::_M_dispose((void **)&jj); + } + v238 = (WXML::EXPRLib::Parser *)a7[1]; + lpuexcptb = (struct _Unwind_Exception *)*a7; + std::_Rb_tree_header::_Rb_tree_header(v314); + while ( v238 != lpuexcptb ) + { + insert_hint_unique_pos = std::_Rb_tree,std::less,std::allocator>::_M_get_insert_hint_unique_pos( + &v313, + v314, + (int)lpuexcptb); + v275 = v30; + if ( v30 ) + { + v259 = v30 == v314 || insert_hint_unique_pos != 0; + if ( !v259 ) + v259 = std::operator<((int)lpuexcptb, (int)(v30 + 4)); + v221 = (char *)operator new(0x28u); + std::string::basic_string(v221 + 16, (int)lpuexcptb); + std::_Rb_tree_insert_and_rebalance(v259, v221, v275, v314); + ++v315; + } + lpuexcptb = (struct _Unwind_Exception *)((char *)lpuexcptb + 24); + } + for ( j = v306; + j != v305; + std::_Rb_tree_iterator>>::operator++((int *)&j) ) + { + v260 = (char *)j + 16; + std::string::substr(&jj, (_DWORD *)j + 4, 2u, *((_DWORD *)j + 5) - 7); + lpuexcptc = (struct _Unwind_Exception *)v314[1]; + v276 = (struct _Unwind_Exception *)v314; + while ( lpuexcptc ) + { + v31 = (unsigned __int8)std::operator<((int)lpuexcptc + 16, (int)&jj) == 0; + v32 = v276; + v33 = (struct _Unwind_Exception *)*((_DWORD *)lpuexcptc + 3); + if ( v31 ) + { + v33 = (struct _Unwind_Exception *)*((_DWORD *)lpuexcptc + 2); + if ( v31 ) + v32 = lpuexcptc; + } + lpuexcptc = v33; + v276 = v32; + } + if ( v276 == (struct _Unwind_Exception *)v314 || (unsigned __int8)std::operator<((int)&jj, (int)v276 + 16) ) + { + std::string::basic_string((void **)&v328, "__COMMON__"); + v34 = std::map>::operator[](&v307, &v328); + std::vector::push_back((int)v34, (int)v260); + std::string::_M_dispose((void **)&v328); + } + std::string::_M_dispose((void **)&jj); + } + std::basic_stringstream,std::allocator>::basic_stringstream((int)&v328); + std::operator<<>( + (std::ostream::sentry *)v330, + "WXML::Compiler::CompileLazy: file name to paths:\n"); + std::operator<<>((std::ostream::sentry *)v330, " all files: [ "); + for ( k = a1[3]; ; k = std::_Rb_tree_increment((int)lpuexcptd) ) + { + lpuexcptd = (struct _Unwind_Exception *)k; + if ( (WXML::DOMLib::Parser *)k == v249 ) + break; + v36 = std::operator<<((std::ostream::sentry *)v330, (int *)(k + 16)); + std::operator<<>(v36, " "); + } + std::operator<<>((std::ostream::sentry *)v330, "];\n"); + for ( m = (int *)v308[2]; ; m = (int *)std::_Rb_tree_increment((int)v277) ) + { + v277 = m; + if ( m == v308 ) + break; + v38 = std::operator<<>((std::ostream::sentry *)v330, " "); + v39 = std::operator<<(v38, v277 + 4); + std::operator<<>(v39, ": [ "); + v239 = (WXML::EXPRLib::Parser *)v277[11]; + v250 = (int *)v277[10]; + while ( 1 ) + { + v234 = (int)v250; + if ( v239 == (WXML::EXPRLib::Parser *)v250 ) + break; + v40 = std::operator<<((std::ostream::sentry *)v330, v250); + std::operator<<>(v40, " "); + v261 = (struct _Unwind_Exception *)v305[1]; + lpuexcpte = (struct _Unwind_Exception *)v305; + while ( v261 ) + { + v41 = (unsigned __int8)std::operator<((int)v261 + 16, (int)v250) == 0; + v42 = lpuexcpte; + v43 = (struct _Unwind_Exception *)*((_DWORD *)v261 + 3); + if ( v41 ) + { + v43 = (struct _Unwind_Exception *)*((_DWORD *)v261 + 2); + if ( v41 ) + v42 = v261; + } + v261 = v43; + lpuexcpte = v42; + } + if ( lpuexcpte != (struct _Unwind_Exception *)v305 ) + { + v31 = (unsigned __int8)std::operator<((int)v250, (int)lpuexcpte + 16) == 0; + v44 = (struct _Unwind_Exception *)v305; + if ( v31 ) + v44 = lpuexcpte; + lpuexcpte = v44; + } + v250 += 6; + if ( lpuexcpte == (struct _Unwind_Exception *)v305 ) + { + std::operator+((int)&jj, "WXML file not found: ", v234); + std::string::operator=((unsigned __int8 **)a2, (int)&jj); + std::string::_M_dispose((void **)&jj); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)&v328); + v258 = (struct _Unwind_Exception *)-1152; + goto LABEL_186; + } + } + std::operator<<>((std::ostream::sentry *)v330, "];\n"); + } + std::basic_stringstream,std::allocator>::~basic_stringstream((int)&v328); + for ( j = v306; + ; + std::_Rb_tree_iterator>>::operator++((int *)&j) ) + { + lpuexcptf = (struct _Unwind_Exception *)j; + if ( j == v305 ) + break; + std::_Rb_tree_header::_Rb_tree_header(&v329); + v262 = (char *)lpuexcptf + 16; + WXML::DOMLib::recurseDependencies((int *)lpuexcptf + 10, (int *)lpuexcptf + 4, &v328); + lpuexcptg = (struct _Unwind_Exception *)v332; + if ( v332 > 0x5555555 ) + std::__throw_length_error((std::length_error *)"cannot create std::vector larger than max_size()"); + jj = 0; + v326 = 0; + v327 = 0; + v45 = std::_Vector_base::_M_allocate(v332); + v278 = (int)v45; + jj = (int)v45; + v46 = &v45[6 * (_DWORD)lpuexcptg]; + v327 = v46; + while ( lpuexcptg ) + { + v47 = (char *)(v45 + 2); + v45[1] = 0; + v45 += 6; + *(v45 - 6) = v47; + *((_BYTE *)v45 - 16) = 0; + lpuexcptg = (struct _Unwind_Exception *)((char *)lpuexcptg - 1); + } + v326 = v46; + for ( n = v331; ; n = (volatile signed __int32 **)std::_Rb_tree_increment((int)lpuexcpth) ) + { + lpuexcpth = (struct _Unwind_Exception *)n; + if ( n == &v329 ) + break; + std::string::_M_assign(v278, (int)(n + 4)); + v278 += 24; + } + lpuexcpti = std::map>::operator[](a5, (int)v262); + if ( lpuexcpti != (char *)&jj ) + { + v240 = (WXML::EXPRLib::Parser *)v326; + v263 = (char *)jj; + v279 = *(void ***)lpuexcpti; + v251 = (std::ostream::sentry *)((char *)v326 - jj); + v49 = *((_DWORD *)lpuexcpti + 2) - *(_DWORD *)lpuexcpti; + v235 = -1431655765 * (((int)v326 - jj) >> 3); + if ( v49 >= (unsigned int)v326 - jj ) + { + v241 = (WXML::EXPRLib::Parser *)*((_DWORD *)lpuexcpti + 1); + if ( (unsigned int)v251 > v241 - (WXML::EXPRLib::Parser *)v279 ) + { + for ( ii = -1431655765 * ((v241 - (WXML::EXPRLib::Parser *)v279) >> 3); ii > 0; --ii ) + { + std::string::_M_assign((int)v279, (int)v263); + v263 += 24; + v279 += 6; + } + v264 = v326; + v281 = jj + *((_DWORD *)lpuexcpti + 1) - *(_DWORD *)lpuexcpti; + v219 = (char *)*((_DWORD *)lpuexcpti + 1); + while ( v264 != (volatile signed __int32 *)v281 ) + { + std::string::basic_string(v219, v281); + v281 += 24; + v219 += 24; + } + } + else + { + while ( v235 > 0 ) + { + std::string::_M_assign((int)v279, (int)v263); + v263 += 24; + v279 += 6; + --v235; + } + while ( v241 != (WXML::EXPRLib::Parser *)v279 ) + { + std::string::_M_dispose(v279); + v279 += 6; + } + } + } + else + { + v236 = (char *)std::_Vector_base::_M_allocate(-1431655765 * (((int)v326 - jj) >> 3)); + v280 = (int)v263; + v220 = v236; + while ( v240 != (WXML::EXPRLib::Parser *)v280 ) + { + std::string::basic_string(v220, v280); + v220 += 24; + v280 += 24; + } + std::_Destroy_aux::__destroy(v50, *(void ***)lpuexcpti, *((void ***)lpuexcpti + 1)); + if ( *(_DWORD *)lpuexcpti ) + operator delete(*(void **)lpuexcpti); + *(_DWORD *)lpuexcpti = v236; + *((_DWORD *)lpuexcpti + 2) = (char *)v251 + (_DWORD)v236; + } + *((_DWORD *)lpuexcpti + 1) = (char *)v251 + *(_DWORD *)lpuexcpti; + } + std::vector::~vector((void ***)&jj, v49); + std::_Rb_tree,std::less,std::allocator>::~_Rb_tree((int)&v328); + } + std::_Rb_tree_header::_Rb_tree_header(v317); + for ( jj = (int)v306; + ; + std::_Rb_tree_iterator>>::operator++(&jj) ) + { + lpuexcptj = (struct _Unwind_Exception *)jj; + if ( (_DWORD *)jj == v305 ) + break; + WXML::DOMLib::WXMLDom::RewriteTree(*(_DWORD *)(jj + 40)); + v282 = *((_DWORD *)lpuexcptj + 10); + std::string::basic_string((void **)&v328, (char *)off_550B3F); + v51 = std::map>::operator[](a6, &v328); + WXML::DOMLib::WXMLDom::MarkIfHasDescendant(v282, v51); + std::string::_M_dispose((void **)&v328); + if ( a9 ) + { + lpuexcptp = (struct _Unwind_Exception *)*((_DWORD *)lpuexcptj + 10); + std::string::basic_string((void **)&v328, (char *)off_550B3F); + v52 = std::map>::operator[](a6, &v328); + WXML::DOMLib::WXMLDom::CutDomsForCustomComponent(lpuexcptp, v52); + std::string::_M_dispose((void **)&v328); + } + } + lpuexcptk = (struct _Unwind_Exception *)(v226 + 8); + if ( a9 ) + std::string::basic_string((void **)&jj, "global"); + else + std::string::basic_string((void **)&jj, "__globalThis"); + WXML::Compiler::GetVersionInfo((int)&v328, &jj); + v53 = std::operator<<(lpuexcptk, &v328); + std::ostream::operator<<(v53, (int (__cdecl *)(void *))std::endl>); + std::string::_M_dispose((void **)&v328); + std::string::_M_dispose((void **)&jj); + WXML::NameAllocator::NameAllocator(&v328, a19, a20); + v54 = std::operator<<>(lpuexcptk, "var $gwxc"); + std::operator<<>(v54, a12); + v55 = std::operator<<>(lpuexcptk, "var $gaic={}"); + std::operator<<>(v55, a12); + if ( !a9 ) + std::operator<<>( + lpuexcptk, + "var outerGlobal=typeof __globalThis==='undefined'?window:__globalThis;"); + v224 = 0; + v233 = v303; + v209 = (a11 & 2) != 0; + while ( v233 != v302 ) + { + v243 = (WXML::EXPRLib::Parser *)v233[10]; + v248 = (int)(v233 + 4); + v225 = std::operator==((int)(v233 + 4), "__COMMON__"); + if ( v225 ) + { + std::string::basic_string((char *)v318, a10); + } + else + { + std::to_string((std::__cxx11 *)&jj, v224); + std::operator+((char *)&j, a10, "_XC_"); + std::operator+(v318, &j, (unsigned int *)&jj); + std::string::_M_dispose(&j); + std::string::_M_dispose((void **)&jj); + ++v224; + } + v56 = std::map::operator[](a4, v248); + std::string::_M_assign((int)v56, (int)v318); + lpuexcptl = (WXML::EXPRLib::Parser *)((char *)v243 + 8); + if ( (a11 & 2) != 0 ) + { + v57 = std::operator<<>((WXML::EXPRLib::Parser *)((char *)v243 + 8), "var cs = cs || [];"); + std::operator<<>(v57, a12); + } + v58 = std::operator<<(lpuexcptl, v318); + v59 = std::operator<<>( + v58, + "=function(_,_v,_n,_p,_s,_wp,_wl,$gwn,$gwl,$gwh,wh,$gstack,$gwrt,gra,grb,TestTest,wfor,_ca,_da,_r,_rz,_o,_oz," + "_1,_1z,_2,_2z,_m,_mz,nv_getDate,nv_getRegExp,nv_console,nv_parseInt,nv_parseFloat,nv_isNaN,nv_isFinite,nv_de" + "codeURI,nv_decodeURIComponent,nv_encodeURI,nv_encodeURIComponent,$gdc,nv_JSON,_af,_gv,_ai,_grp,_gd,_gapi,$ix" + "c,_ic,_w,_ev,_tsd){"); + v60 = std::operator<<>(v59, "return function(path,global){"); + std::operator<<>(v60, a12); + std::operator<<>( + lpuexcptl, + "if(typeof global==='undefined'){if (typeof __GWX_GLOBAL__==='undefined')global={};else global=__GWX_GLOBAL__;}"); + std::operator<<>(lpuexcptl, "if(typeof __WXML_GLOBAL__ === 'undefined') {"); + v61 = std::operator<<>(lpuexcptl, "__WXML_GLOBAL__={};"); + std::operator<<>(v61, a12); + if ( (a11 & 0x80) != 0 ) + { + std::string::basic_string((void **)&jj, "life_cycle_callback_content"); + v252 = (std::ostream::sentry *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + a8, + (int)&jj); + std::string::_M_dispose((void **)&jj); + if ( a8 + 1 != (_DWORD *)v252 ) + { + std::string::basic_string((void **)&jj, "life_cycle_callback_content"); + v62 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + a8, + (int)&jj); + std::operator<<(lpuexcptl, v62 + 10); + std::string::_M_dispose((void **)&jj); + } + } + std::operator<<>(lpuexcptl, "}"); + v63 = std::operator<<>(lpuexcptl, "__WXML_GLOBAL__.modules = __WXML_GLOBAL__.modules || {};"); + std::operator<<>(v63, a12); + if ( v225 && !std::operator==(a10, "$gwx") && (a11 & 0x60) == 0 ) + { + v64 = std::operator<<>(lpuexcptl, "$gwx('init', global);"); + std::operator<<>(v64, a12); + } + v65 = std::operator<<>(lpuexcptl, "var "); + v66 = std::operator<<(v65, a16); + v67 = std::operator<<>(v66, "={}"); + std::operator<<>(v67, a12); + v68 = std::operator<<>(lpuexcptl, "if(typeof(global.entrys)==='undefined')global.entrys={};"); + v69 = std::operator<<(v68, a16); + v70 = std::operator<<>(v69, "=global.entrys;"); + std::operator<<>(v70, a12); + v71 = std::operator<<>(lpuexcptl, "var "); + v72 = std::operator<<(v71, a17); + v73 = std::operator<<>(v72, "={}"); + std::operator<<>(v73, a12); + v74 = std::operator<<>( + lpuexcptl, + "if(typeof(global.defines)==='undefined')global.defines={};"); + v75 = std::operator<<(v74, a17); + v76 = std::operator<<>(v75, "=global.defines;"); + std::operator<<>(v76, a12); + v77 = std::operator<<>(lpuexcptl, "var "); + v78 = std::operator<<(v77, a22); + v79 = std::operator<<>(v78, "={}"); + std::operator<<>(v79, a12); + v80 = std::operator<<>( + lpuexcptl, + "if(typeof(global.modules)==='undefined')global.modules={};"); + v81 = std::operator<<(v80, a22); + v82 = std::operator<<>(v81, "=global.modules || {};"); + std::operator<<>(v82, a12); + v83 = std::operator<<>(lpuexcptl, "var "); + v84 = std::operator<<(v83, a18); + v85 = std::operator<<>(v84, "={}"); + std::operator<<>(v85, a12); + if ( (a11 & 2) != 0 ) + { + v86 = std::operator<<>(lpuexcptl, "var cs = cs || [];"); + std::operator<<>(v86, a12); + } + v87 = std::operator<<>( + lpuexcptl, + "__WXML_GLOBAL__.ops_cached = __WXML_GLOBAL__.ops_cached || {}"); + std::operator<<>(v87, a12); + v88 = std::operator<<>(lpuexcptl, "__WXML_GLOBAL__.ops_set = __WXML_GLOBAL__.ops_set || {};"); + std::operator<<>(v88, a12); + v89 = std::operator<<>( + lpuexcptl, + "__WXML_GLOBAL__.ops_init = __WXML_GLOBAL__.ops_init || {};"); + std::operator<<>(v89, a12); + v90 = std::operator<<>(lpuexcptl, "var z=__WXML_GLOBAL__.ops_set."); + v91 = std::operator<<(v90, v318); + v92 = std::operator<<>(v91, " || [];"); + std::operator<<>(v92, a12); + if ( (a11 & 4) != 0 ) + { + v93 = std::operator<<>( + lpuexcptl, + "__WXML_GLOBAL__.debuginfo_set = __WXML_GLOBAL__.debuginfo_set || {};"); + std::operator<<>(v93, a12); + v94 = std::operator<<>(lpuexcptl, "var debugInfo=__WXML_GLOBAL__.debuginfo_set."); + v95 = std::operator<<(v94, v318); + v96 = std::operator<<>(v95, " || [];"); + std::operator<<>(v96, a12); + } + v97 = std::map>::operator[](&v307, v248); + v253 = 0; + v227 = *((_DWORD *)v97 + 1); + for ( kk = *(int **)v97; kk != (int *)v227; kk += 6 ) + { + v244 = std::map>::operator[](&v304, (int)kk); + std::_Rb_tree_header::_Rb_tree_header(v320); + v253 = (std::ostream::sentry *)((char *)v253 + 1); + v300[1] = 0; + v300[0] = 0; + std::to_string(v98, (unsigned int)v253); + std::operator+((char *)&j, (int)v318, "_"); + std::operator+(v321, &j, (unsigned int *)&jj); + std::string::_M_dispose(&j); + std::string::_M_dispose((void **)&jj); + std::operator+((int)&j, "gz", (int)v321); + v99 = std::operator<<>(lpuexcptl, "function "); + v100 = std::operator<<(v99, (int *)&j); + v101 = std::operator<<>(v100, "(){"); + std::operator<<>(v101, a12); + v102 = std::operator<<>(lpuexcptl, "if( __WXML_GLOBAL__.ops_cached."); + v103 = std::operator<<(v102, v321); + std::operator<<>(v103, ")"); + v104 = std::operator<<>(lpuexcptl, "return __WXML_GLOBAL__.ops_cached."); + v105 = std::operator<<(v104, v321); + std::operator<<>(v105, a12); + v106 = std::operator<<>(lpuexcptl, "__WXML_GLOBAL__.ops_cached."); + v107 = std::operator<<(v106, v321); + v108 = std::operator<<>(v107, "=[];"); + std::operator<<>(v108, a12); + std::operator<<>(lpuexcptl, "(function(z){var a=11;"); + if ( (a11 & 4) != 0 ) + v109 = std::operator<<>( + lpuexcptl, + "function Z(ops,debugLine){z.push(['11182016',ops,debugLine])}"); + else + v109 = std::operator<<>(lpuexcptl, "function Z(ops){z.push(ops)}"); + std::operator<<>(v109, a12); + WXML::DOMLib::WXMLDom::RenderAllOpsAndRecord( + *(_DWORD **)v244, + kk, + (unsigned int *)a2, + v243, + &v319, + v300, + (a11 & 4) != 0, + (int)a8); + v110 = std::operator<<>(lpuexcptl, "})(__WXML_GLOBAL__.ops_cached."); + v111 = std::operator<<(v110, v321); + std::operator<<>(v111, ");"); + v112 = std::operator<<>(lpuexcptl, "return __WXML_GLOBAL__.ops_cached."); + v113 = std::operator<<(v112, v321); + std::operator<<>(v113, a12); + v114 = std::operator<<>(lpuexcptl, "}"); + std::operator<<>(v114, a12); + std::string::basic_string((void **)&jj, "get_page_z_name"); + v115 = std::map::operator[]((_DWORD *)(*(_DWORD *)v244 + 272), &jj); + std::string::_M_assign((int)v115, (int)&j); + std::string::_M_dispose((void **)&jj); + std::string::_M_dispose(&j); + std::string::_M_dispose((void **)v321); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v319); + } + v116 = std::operator<<>(lpuexcptl, "__WXML_GLOBAL__.ops_set."); + v117 = std::operator<<(v116, v318); + v118 = std::operator<<>(v117, "=z;"); + std::operator<<>(v118, a12); + v119 = std::operator<<>(lpuexcptl, "__WXML_GLOBAL__.ops_init."); + v120 = std::operator<<(v119, v318); + v121 = std::operator<<>(v120, "=true;"); + std::operator<<>(v121, a12); + if ( (a11 & 4) != 0 ) + { + v122 = std::operator<<>(lpuexcptl, "__WXML_GLOBAL__.debuginfo_set."); + v123 = std::operator<<(v122, v318); + v124 = std::operator<<>(v123, "=debugInfo;"); + std::operator<<>(v124, a12); + } + if ( v225 ) + { + std::operator<<>(lpuexcptl, "var nv_require=function(){var nnm={"); + for ( mm = (int *)v312[2]; ; mm = (int *)std::_Rb_tree_increment((int)v266) ) + { + v266 = mm; + if ( mm == v312 ) + break; + v254 = std::operator<<>(lpuexcptl, 34); + WXML::Rewrite::ToStringCode((int)&jj, v266 + 4); + v126 = std::operator<<(v254, &jj); + v127 = std::operator<<>(v126, 34); + std::operator<<>(v127, ":np_"); + v128 = (std::ostream::sentry *)std::ostream::operator<<(v266[10]); + std::operator<<>(v128, ","); + std::string::_M_dispose((void **)&jj); + } + std::operator<<>(lpuexcptl, "};var nom={};return function(n){"); + std::operator<<>( + lpuexcptl, + "if(n[0]==='p'&&n[1]==='_'&&f_[n.slice(2)])return f_[n.slice(2)];"); + std::operator<<>(lpuexcptl, "return function(){if(!nnm[n]) return undefined;"); + std::operator<<>(lpuexcptl, "try{if(!nom[n])nom[n]=nnm[n]();return nom[n];}"); + std::operator<<>(lpuexcptl, "catch(e){"); + std::operator<<>(lpuexcptl, "e.message=e.message.replace(/nv_/g,'');"); + std::operator<<>(lpuexcptl, "var tmp = e.stack.substring(0,e.stack.lastIndexOf(n));"); + std::operator<<>(lpuexcptl, "e.stack = tmp.substring(0,tmp.lastIndexOf('\\n'));"); + std::operator<<>(lpuexcptl, "e.stack = e.stack.replace(/\\snv_/g,' ');"); + std::operator<<>(lpuexcptl, "e.stack = $gstack(e.stack);"); + v129 = std::operator<<>( + lpuexcptl, + "e.stack += '\\n at ' + n.substring(2);console.error(e);}"); + std::operator<<>(v129, a12); + v130 = std::operator<<>(lpuexcptl, "}}}()"); + std::operator<<>(v130, a12); + for ( nn = (int *)v310[2]; ; nn = (int *)std::_Rb_tree_increment((int)v267) ) + { + v267 = nn; + if ( nn == v310 ) + break; + v132 = std::operator<<(lpuexcptl, nn + 10); + std::operator<<>(v132, a12); + } + } + v268 = operator new(0x24u); + std::_Rb_tree_header::_Rb_tree_header(v268 + 1); + v268[6] = 0; + v268[7] = 0; + v268[8] = 0; + zcc::shared_ptr::shared_ptr(v268); + v133 = std::map>::operator[](&v307, v248); + v245 = (WXML::NameAllocator *)*((_DWORD *)v133 + 1); + for ( i1 = *(WXML::NameAllocator **)v133; ; i1 = (WXML::NameAllocator *)((char *)i1 + 24) ) + { + v255 = (std::ostream::sentry *)v319; + if ( i1 == v245 ) + break; + std::string::basic_string((char *)&jj, (int)i1); + WXML::DOMLib::StrCache::Insert(v255, (int)&jj); + std::string::_M_dispose((void **)&jj); + v134 = (volatile signed __int32 **)(*(_DWORD *)std::map>::operator[]( + &v304, + (int)i1) + + 252); + *(v134 - 1) = (volatile signed __int32 *)v319; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(v134, v320[0]); + v135 = std::map>::operator[](&v304, (int)i1); + WXML::DOMLib::WXMLDom::RecordAllPath(*(_DWORD **)v135); + } + WXML::DOMLib::StrCache::RenderPathDefine((_DWORD *)v319, (int)v243); + v136 = std::map>::operator[](&v307, v248); + v228 = 0; + v208 = (WXML::NameAllocator *)*((_DWORD *)v136 + 1); + for ( i2 = *(WXML::NameAllocator **)v136; v208 != i2; i2 = (WXML::NameAllocator *)((char *)i2 + 24) ) + { + v256 = std::map>::operator[](&v304, (int)i2); + v137 = std::operator<<(lpuexcptl, a17); + std::operator<<>(v137, (char *)off_55101C); + v270 = (_DWORD *)v319; + std::string::basic_string((char *)&jj, (int)i2); + StrID = WXML::DOMLib::StrCache::GetStrID(v270, (int)&jj); + std::ostream::operator<<(StrID); + std::string::_M_dispose((void **)&jj); + v139 = std::operator<<>(lpuexcptl, "]]={}"); + std::operator<<>(v139, a12); + std::string::basic_string((void **)&jj, "get_page_z_name"); + v140 = std::map::operator[]((_DWORD *)(*(_DWORD *)v256 + 272), &jj); + v258 = WXML::Compiler::RenderDefine( + (unsigned int **)v256, + i2, + &v316, + (int)a2, + (int)v243, + (int)a8, + v209, + a11, + a12, + a13, + a14, + a15, + a10, + a16, + a17, + a18, + a19, + a20, + a21, + v140); + std::string::_M_dispose((void **)&jj); + if ( v258 ) + goto LABEL_180; + v207 = v228 + 1; + std::to_string((std::__cxx11 *)&jj, v228); + v141 = std::string::insert((unsigned int *)&jj, 0, "m"); + std::string::basic_string(v321, v141); + std::string::_M_dispose((void **)&jj); + v229 = *(unsigned int **)v256; + std::string::basic_string(&j, "get_page_z_name"); + v271 = std::map::operator[]((_DWORD *)(*(_DWORD *)v256 + 272), &j); + std::string::basic_string((void **)&jj, "r"); + v258 = (struct _Unwind_Exception *)WXML::DOMLib::WXMLDom::RenderMeAsFunction( + v229, + (int *)i2, + a16, + (int)a2, + v321, + (int)v243, + &v328, + a13, + a14, + a15, + &jj, + a17, + a12, + a18, + 0, + v209, + a11, + v271); + std::string::_M_dispose((void **)&jj); + std::string::_M_dispose(&j); + if ( v258 ) + { + std::string::_M_dispose((void **)v321); +LABEL_180: + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v320); + std::string::_M_dispose((void **)v318); + goto LABEL_185; + } + v142 = std::operator<<(lpuexcptl, a16); + std::operator<<>(v142, (char *)off_55101C); + v230 = (_DWORD *)v319; + std::string::basic_string((char *)&jj, (int)i2); + v143 = WXML::DOMLib::StrCache::GetStrID(v230, (int)&jj); + std::ostream::operator<<(v143); + std::string::_M_dispose((void **)&jj); + v144 = std::operator<<>(lpuexcptl, "]]={f:"); + v145 = std::operator<<(v144, v321); + std::operator<<>(v145, ",j:[],i:[],ti:["); + v231 = 0; + v215 = 0; + while ( 1 ) + { + v146 = *(_DWORD *)(*(_DWORD *)v256 + 72); + if ( (*(_DWORD *)(*(_DWORD *)v256 + 76) - v146) >> 3 <= v231 ) + break; + if ( std::operator==(*(_DWORD *)(v146 + 8 * v231), "import") ) + { + v210 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v256 + 72) + 8 * v231); + v205 = (_DWORD *)(v210 + 52); + std::string::basic_string((void **)&jj, (char *)off_547B7D); + v211 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)(v210 + 48), + (int)&jj); + std::string::_M_dispose((void **)&jj); + if ( v211 != v205 ) + { + if ( v215 ) + std::operator<<>(lpuexcptl, ","); + std::operator<<>(lpuexcptl, "x["); + v206 = (_DWORD *)v319; + v212 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v256 + 72) + 8 * v231); + std::string::basic_string(&j, (char *)off_547B7D); + v147 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)(v212 + 48), + (int)&j); + v148 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)(v147 + 10)); + std::string::basic_string((char *)&jj, v148); + v149 = WXML::DOMLib::StrCache::GetStrID(v206, (int)&jj); + std::ostream::operator<<(v149); + std::string::_M_dispose((void **)&jj); + std::string::_M_dispose(&j); + std::operator<<>(lpuexcptl, "]"); + ++v215; + } + } + ++v231; + } + std::operator<<>(lpuexcptl, "],ic:["); + for ( i3 = 0; ; ++i3 ) + { + v150 = *(_DWORD *)(*(_DWORD *)v256 + 72); + if ( (*(_DWORD *)(*(_DWORD *)v256 + 76) - v150) >> 3 <= i3 ) + break; + if ( std::operator==(*(_DWORD *)(v150 + 8 * i3), "include") ) + { + v216 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v256 + 72) + 8 * i3); + v213 = (_DWORD *)(v216 + 52); + std::string::basic_string((void **)&jj, (char *)off_547B7D); + v217 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)(v216 + 48), + (int)&jj); + std::string::_M_dispose((void **)&jj); + if ( v217 != v213 ) + { + if ( v258 ) + std::operator<<>(lpuexcptl, ","); + std::operator<<>(lpuexcptl, "x["); + v214 = (_DWORD *)v319; + v218 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)v256 + 72) + 8 * i3); + std::string::basic_string(&j, (char *)off_547B7D); + v151 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)(v218 + 48), + (int)&j); + v152 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)(v151 + 10)); + std::string::basic_string((char *)&jj, v152); + v153 = WXML::DOMLib::StrCache::GetStrID(v214, (int)&jj); + std::ostream::operator<<(v153); + std::string::_M_dispose((void **)&jj); + std::string::_M_dispose(&j); + std::operator<<>(lpuexcptl, "]"); + v258 = (struct _Unwind_Exception *)((char *)v258 + 1); + } + } + } + v154 = std::operator<<>(lpuexcptl, "]}"); + std::operator<<>(v154, a12); + std::string::_M_dispose((void **)v321); + v228 = v207; + } + v155 = std::operator<<>(lpuexcptl, "if(path&&"); + v156 = std::operator<<(v155, a16); + v157 = std::operator<<>(v156, "[path]){"); + std::operator<<>(v157, a12); + if ( !a9 ) + { + v158 = std::operator<<>(lpuexcptl, "outerGlobal.__wxml_comp_version__=0.02"); + std::operator<<>(v158, a12); + } + v159 = std::operator<<>( + lpuexcptl, + "return function(env,dd,global){$gwxc=0;var root={\"tag\":\"wx-page\"};root.children=[]"); + std::operator<<>(v159, a12); + v160 = std::operator<<>(lpuexcptl, ";g=\""); + v161 = std::operator<<(v160, v318); + std::operator<<>(v161, "\";"); + v162 = std::operator<<>(lpuexcptl, "var main="); + v163 = std::operator<<(v162, a16); + v164 = std::operator<<>(v163, "[path].f"); + std::operator<<>(v164, a12); + if ( (a11 & 2) != 0 ) + { + v165 = std::operator<<>(lpuexcptl, "cs=[]"); + std::operator<<>(v165, a12); + } + if ( (a11 & 0x10) != 0 ) + { + v166 = std::operator<<>(lpuexcptl, "console.log(path+': benv:\\n'+JSON.stringify(env))"); + std::operator<<>(v166, a12); + } + std::operator<<>(lpuexcptl, "if (typeof global===\"undefined\")global={};"); + v167 = std::operator<<>(lpuexcptl, "global.f=$gdc("); + v168 = std::operator<<(v167, a22); + v169 = std::operator<<>(v168, "[path],\"\",1);"); + std::operator<<>(v169, a12); + if ( !a9 ) + { + v170 = std::operator<<>( + lpuexcptl, + "if(typeof(outerGlobal.__webview_engine_version__)!='undefined'&&outerGlobal.__webview_engine_version__+1e" + "-6>=0.02+1e-6&&outerGlobal.__mergeData__)"); + std::operator<<>(v170, a12); + v171 = std::operator<<>(lpuexcptl, "{"); + std::operator<<>(v171, a12); + v172 = std::operator<<>(lpuexcptl, "env=outerGlobal.__mergeData__(env,dd);"); + std::operator<<>(v172, a12); + v173 = std::operator<<>(lpuexcptl, "}"); + std::operator<<>(v173, a12); + } + v174 = std::operator<<>(lpuexcptl, "try{"); + std::operator<<>(v174, a12); + if ( (a11 & 0x10) != 0 ) + { + v175 = std::operator<<>( + lpuexcptl, + "console.log(path+': aenv:\\n'+JSON.stringify(env)+', '+JSON.stringify(dd))"); + std::operator<<>(v175, a12); + } + if ( (a11 & 0x80) != 0 ) + { + std::operator<<>(lpuexcptl, "if(__WXML_GLOBAL__.before_calculate)"); + v176 = std::operator<<>(lpuexcptl, "__WXML_GLOBAL__.before_calculate(path, env)"); + std::operator<<>(v176, a12); + } + v177 = std::operator<<>(lpuexcptl, "main(env,{},root,global);"); + std::operator<<>(v177, a12); + if ( (a11 & 0x80) != 0 ) + { + std::operator<<>(lpuexcptl, "if(__WXML_GLOBAL__.after_calculate)"); + v178 = std::operator<<>(lpuexcptl, "__WXML_GLOBAL__.after_calculate(path, root)"); + std::operator<<>(v178, a12); + } + v179 = std::operator<<>(lpuexcptl, "_tsd(root)"); + std::operator<<>(v179, a12); + if ( !a9 ) + { + v180 = std::operator<<>( + lpuexcptl, + "if(typeof(outerGlobal.__webview_engine_version__)=='undefined'|| outerGlobal.__webview_engine_version__+1" + "e-6<0.01+1e-6){return _ev(root);}"); + std::operator<<>(v180, a12); + } + v181 = std::operator<<>(lpuexcptl, "}catch(err){"); + std::operator<<>(v181, a12); + if ( (a11 & 2) != 0 ) + { + v182 = std::operator<<>(lpuexcptl, "console.log(cs, env);"); + std::operator<<>(v182, a12); + } + v183 = std::operator<<>(lpuexcptl, "console.log(err)"); + std::operator<<>(v183, a12); + if ( (a11 & 2) != 0 ) + { + v184 = std::operator<<>(lpuexcptl, "throw err"); + std::operator<<>(v184, a12); + } + v185 = std::operator<<>(lpuexcptl, "}"); + std::operator<<>(v185, a12); + if ( (a11 & 0x10) != 0 ) + { + v186 = std::operator<<>(lpuexcptl, "console.log(path+': resp:\\n'+JSON.stringify(root))"); + std::operator<<>(v186, a12); + } + v187 = std::operator<<>(lpuexcptl, ";g=\"\";"); + std::operator<<>(v187, a12); + v188 = std::operator<<>(lpuexcptl, "return root;"); + std::operator<<>(v188, a12); + v189 = std::operator<<>(lpuexcptl, "}"); + std::operator<<>(v189, a12); + v190 = std::operator<<>(lpuexcptl, "}"); + std::operator<<>(v190, a12); + v191 = std::operator<<>(lpuexcptl, "}"); + std::operator<<>(v191, a12); + std::operator<<>( + lpuexcptl, + "}(__g.a,__g.b,__g.c,__g.d,__g.e,__g.f,__g.g,__g.h,__g.i,__g.j,__g.k,__g.l,__g.m,__g.n,__g.o,__g.p,__g.q,__g.r,__g." + "s,__g.t,__g.u,__g.v,__g.w,__g.x,__g.y,__g.z,__g.A,__g.B,__g.C,__g.D,__g.E,__g.F,__g.G,__g.H,__g.I,__g.J,__g.K,__g." + "L,__g.M,__g.N,__g.O,__g.P,__g.Q,__g.R,__g.S,__g.T,__g.U,__g.V,__g.W,__g.X,__g.Y,__g.Z,__g.aa);"); + if ( (a11 & 8) != 0 ) + { + v192 = std::map>::operator[](&v307, v248); + v257 = (std::ostream::sentry *)*((_DWORD *)v192 + 1); + for ( i4 = *(int **)v192; i4 != (int *)v257; i4 += 6 ) + { + v193 = std::operator<<>(lpuexcptl, "//"); + v194 = std::operator<<(v193, i4); + v195 = std::operator<<>(v194, ":"); + std::operator<<>(v195, a12); + v196 = std::map>::operator[](&v304, (int)i4); + WXML::DOMLib::WXMLDom::Print(*(_DWORD **)v196, 0, "//", (char *)v243); + } + } + v197 = std::map>::operator[](&v307, v248); + v273 = v225 || *((_DWORD *)v197 + 1) == *(_DWORD *)v197; + lpuexcptm = std::operator<<>(lpuexcptl, "if(__vd_version_info__.delayedGwx||"); + v198 = "true"; + if ( !v273 ) + v198 = "false"; + std::string::basic_string((void **)&jj, v198); + v199 = std::operator<<(lpuexcptm, &jj); + v200 = std::operator<<>(v199, ")"); + v201 = std::operator<<(v200, v318); + std::operator<<>(v201, "();"); + std::string::_M_dispose((void **)&jj); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v320); + std::string::_M_dispose((void **)v318); + v233 = (_DWORD *)std::_Rb_tree_increment((int)v233); + } + for ( i5 = (struct _Unwind_Exception *)v303; ; i5 = (struct _Unwind_Exception *)std::_Rb_tree_increment((int)lpuexcptn) ) + { + lpuexcptn = i5; + if ( i5 == (struct _Unwind_Exception *)v302 ) + break; + std::stringbuf::str((int)&jj, *((_DWORD *)i5 + 10) + 12); + v203 = std::map::operator[](a3, (int)lpuexcptn + 16); + std::string::operator=((unsigned __int8 **)v203, (int)&jj); + std::string::_M_dispose((void **)&jj); + } + v258 = 0; +LABEL_185: + WXML::NameAllocator::~NameAllocator((int)&v328); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v316); +LABEL_186: + std::_Rb_tree,std::less,std::allocator>::~_Rb_tree((int)&v313); +LABEL_187: + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v311); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v309); + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(v308[1]); + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::~_Rb_tree((int)&v304); + std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_erase(v302[1]); + return v258; +} +// 40A40B: variable 'v24' is possibly undefined +// 40A5A0: variable 'v25' is possibly undefined +// 40A726: variable 'v28' is possibly undefined +// 40A799: variable 'v30' is possibly undefined +// 40AEEE: variable 'v50' is possibly undefined +// 40B084: variable 'v49' is possibly undefined +// 40BB69: variable 'v98' is possibly undefined +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); +// 40A124: using guessed type char var_E0[4]; +// 40A124: using guessed type int var_174[5]; + +//----- (0040DB80) -------------------------------------------------------- +void __thiscall WXML::NameAllocator::NameAllocator(_DWORD *this, int a2, int a3) +{ + bool v3; // zf + int v4; // [esp+10h] [ebp-48h] + int v5; // [esp+14h] [ebp-44h] + + this[2] = 0; + v5 = (int)(this + 1); + *((_BYTE *)this + 12) = 0; + this[8] = 0; + this[1] = this + 3; + *((_BYTE *)this + 36) = 0; + v4 = (int)(this + 7); + v3 = WXML::NameAllocator::ALPAHBETLEN == 0; + this[7] = this + 9; + if ( v3 ) + WXML::NameAllocator::ALPAHBETLEN = strlen(WXML::NameAllocator::ALPAHBET); + std::string::_M_assign(v5, a2); + std::string::_M_assign(v4, a3); + *this = 0; +} +// 565A2C: using guessed type int WXML::NameAllocator::ALPAHBETLEN; + +//----- (0040DC6A) -------------------------------------------------------- +void __thiscall WXML::NameAllocator::GetNextName(int *this, int a2) +{ + std::ostream::sentry *v2; // eax + int v3; // ecx + _BYTE *v4; // eax + size_t v5; // eax + _BYTE *v6; // edx + int v7; // edx + int v8; // [esp+10h] [ebp-138h] + int v9; // [esp+14h] [ebp-134h] + _WORD Src[3]; // [esp+56h] [ebp-F2h] BYREF + size_t Size; // [esp+5Ch] [ebp-ECh] + int v13[4]; // [esp+60h] [ebp-E8h] BYREF + char v14[8]; // [esp+70h] [ebp-D8h] BYREF + char v15[4]; // [esp+78h] [ebp-D0h] BYREF + char v16[200]; // [esp+7Ch] [ebp-CCh] BYREF + + v9 = *this; + std::basic_stringstream,std::allocator>::basic_stringstream((int)v14); + v2 = std::operator<<((std::ostream::sentry *)v15, this + 1); + LOBYTE(Src[0]) = *(_BYTE *)(this[7] + *this % (unsigned int)this[8]); + std::__ostream_insert>(v2, (int)Src, 1); + while ( v9 ) + { + HIBYTE(Src[0]) = WXML::NameAllocator::ALPAHBET[v9 % WXML::NameAllocator::ALPAHBETLEN]; + std::__ostream_insert>((std::ostream::sentry *)v15, (int)Src + 1, 1); + v9 /= WXML::NameAllocator::ALPAHBETLEN; + } + ++*this; + std::stringbuf::str((int)&Src[1], (int)v16); + v3 = *(_DWORD *)&Src[1]; + v4 = *(_BYTE **)a2; + if ( *(int **)&Src[1] == v13 ) + { + if ( Size ) + std::string::_S_copy(v4, *(unsigned __int8 **)&Src[1], Size); + v5 = Size; + v6 = *(_BYTE **)a2; + *(_DWORD *)(a2 + 4) = Size; + v6[v5] = 0; + } + else + { + if ( v4 == (_BYTE *)(a2 + 8) ) + v4 = 0; + else + v8 = *(_DWORD *)(a2 + 8); + *(_DWORD *)(a2 + 4) = Size; + v7 = v13[0]; + *(_DWORD *)a2 = v3; + *(_DWORD *)(a2 + 8) = v7; + if ( v4 ) + { + *(_DWORD *)&Src[1] = v4; + v13[0] = v8; + } + else + { + *(_DWORD *)&Src[1] = v13; + } + } + Size = 0; + **(_BYTE **)&Src[1] = 0; + std::string::_M_dispose((void **)&Src[1]); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v14); +} +// 40DE40: variable 'v8' is possibly undefined +// 565A2C: using guessed type int WXML::NameAllocator::ALPAHBETLEN; +// 40DC6A: using guessed type char var_D0[4]; +// 40DC6A: using guessed type char var_CC[200]; + +//----- (0040DEC4) -------------------------------------------------------- +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str) +{ + size_t v2; // eax + + v2 = strlen(Str); + return std::string::_M_replace(this, 0, this[1], Str, v2); +} + +//----- (0040DF01) -------------------------------------------------------- +void __cdecl MMBizWxaAppComm::SplitBySlash(_DWORD *a1, void **a2) +{ + int v2; // edx + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + void *v4[8]; // [esp+58h] [ebp-20h] BYREF + + lpuexcpt = 0; + v2 = -1; + while ( a1[1] > (int)lpuexcpt ) + { + if ( *((_BYTE *)lpuexcpt + *a1) == 47 ) + { + if ( (int)lpuexcpt - v2 > 1 ) + { + std::string::substr(v4, a1, v2 + 1, (unsigned int)lpuexcpt - v2 - 1); + std::vector::emplace_back(a2, v4); + std::string::_M_dispose(v4); + } + v2 = (int)lpuexcpt; + } + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + } + if ( (int)lpuexcpt - v2 > 1 ) + { + std::string::substr(v4, a1, v2 + 1, (unsigned int)lpuexcpt - v2 - 1); + std::vector::emplace_back(a2, v4); + std::string::_M_dispose(v4); + } +} + +//----- (0040E020) -------------------------------------------------------- +int __cdecl MMBizWxaAppComm::PathCombine(_DWORD *a1, _DWORD *a2, unsigned int *a3) +{ + bool v3; // zf + int v4; // eax + int v5; // edx + int v6; // edx + char *v8; // [esp+0h] [ebp-88h] + int v9; // [esp+14h] [ebp-74h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-70h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-70h] + void **v12; // [esp+50h] [ebp-38h] BYREF + void **v13; // [esp+54h] [ebp-34h] + char *v14; // [esp+58h] [ebp-30h] + void *v15; // [esp+5Ch] [ebp-2Ch] BYREF + int v16; // [esp+60h] [ebp-28h] + int v17; // [esp+64h] [ebp-24h] + void *v18; // [esp+68h] [ebp-20h] BYREF + size_t v19; // [esp+6Ch] [ebp-1Ch] + char v20[24]; // [esp+70h] [ebp-18h] BYREF + + v12 = 0; + v13 = 0; + v3 = a2[1] == 0; + v14 = 0; + v15 = 0; + v16 = 0; + v17 = 0; + if ( v3 || *(_BYTE *)*a2 != 47 ) + { + MMBizWxaAppComm::SplitBySlash(a1, (void **)&v12); + v4 = a1[1]; + if ( v4 ) + { + if ( *(_BYTE *)(*a1 + v4 - 1) != 47 ) + { + v13 -= 6; + std::string::_M_dispose(v13); + } + } + } + MMBizWxaAppComm::SplitBySlash(a2, &v15); + for ( lpuexcpt = 0; + (unsigned int)lpuexcpt < -1431655765 * ((v16 - (int)v15) >> 3); + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1) ) + { + v9 = 24 * (_DWORD)lpuexcpt; + if ( !std::string::compare((int)v15 + 24 * (_DWORD)lpuexcpt, "..") ) + { + if ( v12 != v13 ) + { + v13 -= 6; + std::string::_M_dispose(v13); + } + } + else if ( std::string::compare((int)v15 + v9, ".") ) + { + if ( v13 == (void **)v14 ) + { + std::vector::_M_realloc_insert((void **)&v12, (char *)v13, (int)v15 + v9); + } + else + { + std::string::basic_string((char *)v13, (int)v15 + v9); + v13 += 6; + } + } + } + if ( a1[1] && *(_BYTE *)*a1 == 47 || a2[1] && *(_BYTE *)*a2 == 47 ) + v8 = "/"; + else + v8 = (char *)&unk_551F01; + std::string::operator=(a3, v8); + for ( lpuexcpta = 0; + (unsigned int)lpuexcpta < -1431655765 * (((char *)v13 - (char *)v12) >> 3); + lpuexcpta = (struct _Unwind_Exception *)((char *)lpuexcpta + 1) ) + { + if ( lpuexcpta ) + { + v18 = v20; + std::string::_S_copy_chars(v20, "/", (size_t)""); + v19 = 1; + *((_BYTE *)v18 + 1) = 0; + std::string::_M_append(a3, v18, v19); + std::string::_M_dispose(&v18); + } + std::string::_M_append(a3, v12[6 * (_DWORD)lpuexcpta], (size_t)v12[6 * (_DWORD)lpuexcpta + 1]); + } + std::vector::~vector((void ***)&v15, v5); + std::vector::~vector(&v12, v6); + return 0; +} +// 40E2B1: variable 'v5' is possibly undefined +// 40E2B9: variable 'v6' is possibly undefined + +//----- (0040E2D0) -------------------------------------------------------- +void __tcf_1_0(void) +{ + std::string::_M_dispose(&night::nsv_); +} +// 565DF0: using guessed type void *night::nsv_; + +//----- (0040E2DA) -------------------------------------------------------- +void __tcf_2_0(void) +{ + std::string::_M_dispose((void **)&night::nst_); +} + +//----- (0040E2E4) -------------------------------------------------------- +void __tcf_3_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_SKIP); +} + +//----- (0040E2EE) -------------------------------------------------------- +void __tcf_4_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_BOOL); +} + +//----- (0040E2F8) -------------------------------------------------------- +void __tcf_5_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_VAR); +} + +//----- (0040E302) -------------------------------------------------------- +void __tcf_6_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_STR); +} + +//----- (0040E30C) -------------------------------------------------------- +void __tcf_7_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_NUM); +} + +//----- (0040E316) -------------------------------------------------------- +void __tcf_8_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_B_TYPE); +} + +//----- (0040E320) -------------------------------------------------------- +void __tcf_9_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_KW); +} + +//----- (0040E32A) -------------------------------------------------------- +void __tcf_10_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PUNC); +} + +//----- (0040E334) -------------------------------------------------------- +void __tcf_11_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OP); +} + +//----- (0040E33E) -------------------------------------------------------- +void __tcf_12_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OP_SELF); +} + +//----- (0040E348) -------------------------------------------------------- +void __tcf_13_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_BINARY); +} + +//----- (0040E352) -------------------------------------------------------- +void __tcf_14_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_ASSIGN); +} + +//----- (0040E35C) -------------------------------------------------------- +void __tcf_15_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_TERNARY); +} + +//----- (0040E366) -------------------------------------------------------- +void __tcf_16_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_K_V); +} + +//----- (0040E370) -------------------------------------------------------- +void __tcf_17_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_DOT); +} + +//----- (0040E37A) -------------------------------------------------------- +void __tcf_18_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_PROPERTY); +} + +//----- (0040E384) -------------------------------------------------------- +void __tcf_19_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_SELF_OP); +} + +//----- (0040E38E) -------------------------------------------------------- +void __tcf_20_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_BLOCK); +} + +//----- (0040E398) -------------------------------------------------------- +void __tcf_21_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_ARRAY); +} + +//----- (0040E3A2) -------------------------------------------------------- +void __tcf_22_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_BRACKET); +} + +//----- (0040E3AC) -------------------------------------------------------- +void __tcf_23_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_IF); +} + +//----- (0040E3B6) -------------------------------------------------------- +void __tcf_24_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_FOR); +} + +//----- (0040E3C0) -------------------------------------------------------- +void __tcf_25_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_WHILE); +} + +//----- (0040E3CA) -------------------------------------------------------- +void __tcf_26_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_DO_WHILE); +} + +//----- (0040E3D4) -------------------------------------------------------- +void __tcf_27_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_SWITCH); +} + +//----- (0040E3DE) -------------------------------------------------------- +void __tcf_28_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PROG); +} + +//----- (0040E3E8) -------------------------------------------------------- +void __tcf_29_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PROG_NO_SEM); +} + +//----- (0040E3F2) -------------------------------------------------------- +void __tcf_30_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PROG_NO_SEM_REQUIRE); +} + +//----- (0040E3FC) -------------------------------------------------------- +void __tcf_31_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_FUNC); +} + +//----- (0040E406) -------------------------------------------------------- +void __tcf_32_0(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_CALL); +} + +//----- (0040E410) -------------------------------------------------------- +void __tcf_33_0(void) +{ + std::string::_M_dispose((void **)night::NS_BUILTIN_OP); +} +// 565AF0: using guessed type int night::NS_BUILTIN_OP[6]; + +//----- (0040E41A) -------------------------------------------------------- +void __tcf_34_0(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_OP_SELF); +} + +//----- (0040E424) -------------------------------------------------------- +void __tcf_35_0(void) +{ + std::string::_M_dispose((void **)night::NS_BUILTIN_ALL_OP); +} +// 565AC0: using guessed type int night::NS_BUILTIN_ALL_OP[6]; + +//----- (0040E42E) -------------------------------------------------------- +void __tcf_36_0(void) +{ + std::string::_M_dispose((void **)night::NS_BUILTIN_PUNC); +} +// 565AA8: using guessed type int night::NS_BUILTIN_PUNC[6]; + +//----- (0040E438) -------------------------------------------------------- +void __tcf_37_0(void) +{ + std::string::_M_dispose((void **)night::NS_BUILTIN_SPACE); +} +// 565A90: using guessed type int night::NS_BUILTIN_SPACE[6]; + +//----- (0040E442) -------------------------------------------------------- +void __tcf_38_0(void) +{ + std::string::_M_dispose((void **)night::NS_BUILTIN_KW); +} +// 565A78: using guessed type int night::NS_BUILTIN_KW[6]; + +//----- (0040E44C) -------------------------------------------------------- +void __tcf_39_0(void) +{ + std::string::_M_dispose((void **)night::NS_BUILTIN_TYPE); +} +// 565A60: using guessed type int night::NS_BUILTIN_TYPE[6]; + +//----- (0040E456) -------------------------------------------------------- +void __tcf_40_0(void) +{ + std::string::_M_dispose((void **)&night::std_v_n); +} + +//----- (0040E460) -------------------------------------------------------- +void __tcf_41_0(void) +{ + std::string::_M_dispose((void **)&night::std_v_v_n); +} + +//----- (0040E46A) -------------------------------------------------------- +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2) +{ + unsigned __int8 *v3; // eax + unsigned __int8 *v4; // ecx + unsigned __int8 *v5; // edx + unsigned __int8 *v6; // eax + unsigned __int8 *v7; // edx + unsigned __int8 *result; // eax + unsigned __int8 *v9; // [esp+18h] [ebp-20h] + + v3 = *this; + v4 = *(unsigned __int8 **)a2; + v5 = *(unsigned __int8 **)(a2 + 4); + if ( *(_DWORD *)a2 == a2 + 8 ) + { + if ( v5 ) + std::string::_S_copy(v3, v4, *(_DWORD *)(a2 + 4)); + v6 = *(unsigned __int8 **)(a2 + 4); + v7 = *this; + this[1] = v6; + v6[(_DWORD)v7] = 0; + } + else + { + if ( v3 == (unsigned __int8 *)(this + 2) ) + v3 = 0; + else + v9 = this[2]; + *this = v4; + this[1] = v5; + this[2] = *(unsigned __int8 **)(a2 + 8); + if ( v3 ) + { + *(_DWORD *)a2 = v3; + *(_DWORD *)(a2 + 8) = v9; + } + else + { + *(_DWORD *)a2 = a2 + 8; + } + } + result = *(unsigned __int8 **)a2; + *(_DWORD *)(a2 + 4) = 0; + *result = 0; + return result; +} +// 40E4D1: variable 'v9' is possibly undefined + +//----- (0040E4FE) -------------------------------------------------------- +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str) +{ + size_t v2; // eax + + v2 = strlen(Str); + return std::string::_M_replace(this, 0, this[1], Str, v2); +} + +//----- (0040E53B) -------------------------------------------------------- +int __usercall night::NSToken::tk_is_var_start@(int a1@) +{ + unsigned int v1; // edx + + v1 = (a1 & 0xFFFFFFDF) - 65; + LOBYTE(v1) = (unsigned __int8)v1 <= 0x19u; + LOBYTE(a1) = (_BYTE)a1 == 95; + return v1 | a1; +} + +//----- (0040E552) -------------------------------------------------------- +void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-18h] + + while ( a1 ) + { + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::string::_M_dispose((void **)(a1 + 20)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (0040E586) -------------------------------------------------------- +void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-18h] + + while ( a1 ) + { + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::string::_M_dispose((void **)(a1 + 16)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (0040E5BA) -------------------------------------------------------- +#error "40E664: call analysis failed (funcsize=61)" + +//----- (0040E69E) -------------------------------------------------------- +int __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_copy,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>@( + int a1@, + int a2@) +{ + int i; // eax + int v4; // [esp+1Ch] [ebp-4Ch] + int v6; // [esp+20h] [ebp-48h] + struct _Unwind_Exception *lpuexcpta; // [esp+24h] [ebp-44h] + int v9; // [esp+28h] [ebp-40h] + + v9 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_clone_node,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>(); + *(_DWORD *)(v9 + 4) = a2; + if ( *(_DWORD *)(a1 + 12) ) + *(_DWORD *)(v9 + 12) = ((int (*)(void))std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_copy,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>)(); + lpuexcpta = *(struct _Unwind_Exception **)(a1 + 8); + for ( i = v9; ; i = v6 ) + { + v4 = i; + if ( !lpuexcpta ) + break; + v6 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_clone_node,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>(); + *(_DWORD *)(v4 + 8) = v6; + *(_DWORD *)(v6 + 4) = v4; + if ( *((_DWORD *)lpuexcpta + 3) ) + *(_DWORD *)(v6 + 12) = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_copy,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>( + v6, + v6); + lpuexcpta = (struct _Unwind_Exception *)*((_DWORD *)lpuexcpta + 2); + } + return v9; +} +// 40E5BA: using guessed type int std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_clone_node,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>(void); + +//----- (0040E7BE) -------------------------------------------------------- +#error "40E865: call analysis failed (funcsize=60)" + +//----- (0040E8A0) -------------------------------------------------------- +int __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_copy,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>@( + int a1@, + int a2@) +{ + int i; // eax + int v4; // [esp+1Ch] [ebp-4Ch] + int v6; // [esp+20h] [ebp-48h] + struct _Unwind_Exception *lpuexcpta; // [esp+24h] [ebp-44h] + int v9; // [esp+28h] [ebp-40h] + + v9 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_clone_node,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>(); + *(_DWORD *)(v9 + 4) = a2; + if ( *(_DWORD *)(a1 + 12) ) + *(_DWORD *)(v9 + 12) = ((int (*)(void))std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_copy,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>)(); + lpuexcpta = *(struct _Unwind_Exception **)(a1 + 8); + for ( i = v9; ; i = v6 ) + { + v4 = i; + if ( !lpuexcpta ) + break; + v6 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_clone_node,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>(); + *(_DWORD *)(v4 + 8) = v6; + *(_DWORD *)(v6 + 4) = v4; + if ( *((_DWORD *)lpuexcpta + 3) ) + *(_DWORD *)(v6 + 12) = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_copy,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>( + v6, + v6); + lpuexcpta = (struct _Unwind_Exception *)*((_DWORD *)lpuexcpta + 2); + } + return v9; +} +// 40E7BE: using guessed type int std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_clone_node,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>(void); + +//----- (0040E9C0) -------------------------------------------------------- +size_t __thiscall std::string::basic_string(void **this, char *Str) +{ + char *v3; // edi + size_t result; // eax + _BYTE *v5; // edx + size_t v6[7]; // [esp+1Ch] [ebp-1Ch] BYREF + + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v6[0] = strlen(Str); + v3 = &Str[v6[0]]; + if ( v6[0] > 0xF ) + { + *this = std::string::_M_create(v6, 0); + this[2] = (void *)v6[0]; + } + std::string::_S_copy_chars(*this, (unsigned __int8 *)Str, (size_t)v3); + result = v6[0]; + v5 = *this; + this[1] = (void *)v6[0]; + v5[result] = 0; + return result; +} +// 40E9C0: using guessed type size_t var_1C[7]; + +//----- (0040EA3E) -------------------------------------------------------- +void __thiscall night::NSStream::NSStream(_DWORD *this, int a2, int a3, int a4) +{ + int v4; // [esp+14h] [ebp-44h] + + this[1] = 0; + *this = this + 2; + *((_BYTE *)this + 8) = 0; + v4 = (int)(this + 6); + this[7] = 0; + this[6] = this + 8; + *((_BYTE *)this + 32) = 0; + std::string::_M_assign((int)this, a2); + std::string::_M_assign(v4, a3); + this[12] = 0; + this[14] = 1; + this[13] = a4; +} + +//----- (0040EB14) -------------------------------------------------------- +_DWORD *__thiscall night::NSStream::next(_DWORD *ecx0, night::NSStream *this) +{ + unsigned int v3; // eax + int v5; // [esp+10h] [ebp-18h] + int v6; // [esp+14h] [ebp-14h] + char v7; // [esp+1Fh] [ebp-9h] + + v3 = *((_DWORD *)this + 12); + if ( v3 < *((_DWORD *)this + 7) ) + { + *((_DWORD *)this + 12) = v3 + 1; + v7 = *(_BYTE *)std::string::at((_DWORD *)this + 6, v3); + v6 = *((_DWORD *)this + 14); + v5 = *((_DWORD *)this + 13); + if ( v7 == 10 ) + { + *((_DWORD *)this + 14) = 1; + *((_DWORD *)this + 13) = v5 + 1; + } + else + { + ++*((_DWORD *)this + 14); + } + *(_BYTE *)ecx0 = v7; + ecx0[2] = v6; + ecx0[1] = v5; + } + else + { + *ecx0 = 0; + ecx0[1] = 0; + ecx0[2] = 0; + } + return ecx0; +} + +//----- (0040EB9C) -------------------------------------------------------- +_DWORD *__thiscall night::NSStream::peek(_DWORD *ecx0, night::NSStream *this) +{ + char *v3; // eax + int v4; // edx + char v5; // cl + + if ( *((_DWORD *)this + 12) < *((_DWORD *)this + 7) ) + { + v3 = (char *)std::string::at((_DWORD *)this + 6, *((_DWORD *)this + 12)); + v4 = *((_DWORD *)this + 14); + v5 = *v3; + ecx0[1] = *((_DWORD *)this + 13); + *(_BYTE *)ecx0 = v5; + ecx0[2] = v4; + } + else + { + *ecx0 = 0; + ecx0[1] = 0; + ecx0[2] = 0; + } + return ecx0; +} + +//----- (0040EBF0) -------------------------------------------------------- +_DWORD *__thiscall night::NSStream::peek_2(_DWORD *ecx0, night::NSStream *this) +{ + char v3; // dl + int v4; // ecx + int v5; // eax + + if ( (unsigned int)(*((_DWORD *)this + 12) + 1) < *((_DWORD *)this + 7) ) + { + v3 = *(_BYTE *)std::string::at((_DWORD *)this + 6, *((_DWORD *)this + 12) + 1); + v4 = *((_DWORD *)this + 13); + v5 = *((_DWORD *)this + 14) + 1; + if ( v3 == 10 ) + { + ++v4; + v5 = 1; + } + *(_BYTE *)ecx0 = v3; + ecx0[1] = v4; + ecx0[2] = v5; + } + else + { + *ecx0 = 0; + ecx0[1] = 0; + ecx0[2] = 0; + } + return ecx0; +} + +//----- (0040EC50) -------------------------------------------------------- +bool __fastcall night::NSStream::eof(night::NSStream *a1) +{ + int v2[5]; // [esp+14h] [ebp-14h] BYREF + + night::NSStream::peek(v2, a1); + return LOBYTE(v2[0]) == 0; +} +// 40EC50: using guessed type int var_14[5]; + +//----- (0040EC6C) -------------------------------------------------------- +bool __fastcall night::NSStream::eof_2(night::NSStream *a1) +{ + int v2[5]; // [esp+14h] [ebp-14h] BYREF + + night::NSStream::peek_2(v2, a1); + return LOBYTE(v2[0]) == 0; +} +// 40EC6C: using guessed type int var_14[5]; + +//----- (0040EC88) -------------------------------------------------------- +void __thiscall __noreturn night::NSStream::err(_DWORD *this, int a2, unsigned int a3, unsigned int a4, char a5) +{ + _DWORD *v5; // eax + _DWORD *v6; // eax + _DWORD *v7; // eax + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-90h] + int v10[2]; // [esp+58h] [ebp-50h] BYREF + char v11; // [esp+60h] [ebp-48h] BYREF + void *v12[6]; // [esp+70h] [ebp-38h] BYREF + void *v13[8]; // [esp+88h] [ebp-20h] BYREF + + v11 = 0; + v10[0] = (int)&v11; + v10[1] = 0; + std::string::basic_string((char *)v13, (int)this); + std::string::append(v13, ":"); + std::string::operator+=(v13); + std::string::_M_dispose(v13); + if ( a5 ) + { + std::to_string((std::__cxx11 *)v12, a3); + v5 = std::string::append(v12, ":"); + std::string::basic_string(v13, v5); + std::string::operator+=(v13); + std::string::_M_dispose(v13); + std::string::_M_dispose(v12); + std::to_string((std::__cxx11 *)v12, a4); + } + else + { + std::to_string((std::__cxx11 *)v12, this[13] + a3); + v7 = std::string::append(v12, ":"); + std::string::basic_string(v13, v7); + std::string::operator+=(v13); + std::string::_M_dispose(v13); + std::string::_M_dispose(v12); + std::to_string((std::__cxx11 *)v12, this[14] + a4); + } + v6 = std::string::append(v12, ":"); + std::string::basic_string(v13, v6); + std::string::operator+=(v13); + std::string::_M_dispose(v13); + std::string::_M_dispose(v12); + std::string::operator+=(a2); + lpuexcpta = (struct _Unwind_Exception *)__cxa_allocate_exception(0x18u); + std::string::basic_string(lpuexcpta, v10); + __cxa_throw(lpuexcpta, (struct type_info *)&`typeinfo for'std::string, (void (__cdecl *)(void *))std::string::~string); +} +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 55BB98: using guessed type int *`typeinfo for'std::string; + +//----- (0040EFA6) -------------------------------------------------------- +void __userpurge __noreturn night::NSToken::err(int a1@, int a2, unsigned int a3, unsigned int a4, char a5) +{ + night::NSStream::err(*(_DWORD **)(a1 + 4), a2, a3, a4, a5); +} + +//----- (0040EFD0) -------------------------------------------------------- +int __thiscall night::NSToken::read_while[abi:cxx11]( + int this, + int a2, + unsigned __int8 (__cdecl *a3)(_DWORD, int), + int a4) +{ + _DWORD v6[5]; // [esp+54h] [ebp-14h] BYREF + + *(_DWORD *)(this + 4) = 0; + *(_DWORD *)this = this + 8; + *(_BYTE *)(this + 8) = 0; + while ( !night::NSStream::eof(*(night::NSStream **)(a2 + 4)) ) + { + night::NSStream::peek(v6, *(night::NSStream **)(a2 + 4)); + if ( !a3(SLOBYTE(v6[0]), a4) ) + break; + night::NSStream::next(v6, *(night::NSStream **)(a2 + 4)); + std::string::push_back((_DWORD *)this, v6[0]); + } + return this; +} + +//----- (0040F0B0) -------------------------------------------------------- +void __fastcall night::NSToken::read_comment_method_1(int a1) +{ + void *v1[8]; // [esp+18h] [ebp-20h] BYREF + + night::NSToken::read_while[abi:cxx11]( + (int)v1, + a1, + (unsigned __int8 (__cdecl *)(_DWORD, int))night::NSToken::tk_is_not_line_break, + 0); + std::string::_M_dispose(v1); +} + +//----- (0040F0DE) -------------------------------------------------------- +_DWORD *__fastcall night::NSToken::read_comment_method_2(int a1) +{ + void *v3[7]; // [esp+18h] [ebp-20h] BYREF + + night::NSToken::read_while[abi:cxx11]( + (int)v3, + a1, + (unsigned __int8 (__cdecl *)(_DWORD, int))night::NSToken::tk_is_comment2, + *(_DWORD *)(a1 + 4)); + std::string::_M_dispose(v3); + return night::NSStream::next(v3, *(night::NSStream **)(a1 + 4)); +} + +//----- (0040F120) -------------------------------------------------------- +unsigned __int8 __thiscall night::NSToken::skip_comment(night::NSStream **this, unsigned __int8 **a2) +{ + unsigned __int8 result; // al + night::NSStream *v4; // [esp+0h] [ebp-38h] + void *v5[7]; // [esp+18h] [ebp-20h] BYREF + + while ( 1 ) + { + result = night::NSStream::eof(this[1]); + if ( result ) + break; + result = (unsigned __int8)night::NSStream::peek(v5, this[1]); + if ( LOBYTE(v5[0]) != 47 ) + break; + result = night::NSStream::eof_2(this[1]); + if ( result ) + break; + night::NSStream::peek_2(v5, this[1]); + v4 = this[1]; + if ( LOBYTE(v5[0]) == 47 ) + { + night::NSStream::next(v5, v4); + night::NSStream::next(v5, this[1]); + night::NSToken::read_comment_method_1((int)this); + } + else + { + result = (unsigned __int8)night::NSStream::peek_2(v5, v4); + if ( LOBYTE(v5[0]) != 42 ) + return result; + night::NSStream::next(v5, this[1]); + night::NSStream::next(v5, this[1]); + night::NSToken::read_comment_method_2((int)this); + } + night::NSToken::read_while[abi:cxx11]( + (int)v5, + (int)this, + (unsigned __int8 (__cdecl *)(_DWORD, int))night::NSToken::tk_is_whitespace, + 0); + std::string::operator=(a2, (int)v5); + std::string::_M_dispose(v5); + } + return result; +} + +//----- (0040F210) -------------------------------------------------------- +bool __stdcall night::NSASTParse::is_save_for_division(int a1) +{ + bool result; // al + bool v2; // al + int v3; // esi + bool v4; // [esp+1Fh] [ebp-29h] + void *v5[8]; // [esp+28h] [ebp-20h] BYREF + + result = 0; + if ( a1 ) + { + std::string::basic_string((char *)v5, a1); + if ( !std::operator==((int)v5, (int)&night::NS_TYPE_BOOL) + && !std::operator==((int)v5, (int)&night::NS_TYPE_VAR) + && !std::operator==((int)v5, (int)&night::NS_TYPE_NUM) + && !std::operator==((int)v5, (int)&night::NS_TYPE_B_TYPE) + && !std::operator==((int)v5, (int)&night::NS_TYPE_OP_SELF) + && !std::operator==((int)v5, (int)&night::NS_TYPE_BINARY) + && !std::operator==((int)v5, (int)&night::NS_TYPE_ASSIGN) + && !std::operator==((int)v5, (int)&night::NS_TYPE_TERNARY) + && !std::operator==((int)v5, (int)&night::NS_TYPE_OBJ_DOT) + && !std::operator==((int)v5, (int)&night::NS_TYPE_OBJ_PROPERTY) + && !std::operator==((int)v5, (int)&night::NS_TYPE_OBJ_SELF_OP) + && !std::operator==((int)v5, (int)&night::NS_TYPE_OBJ_BLOCK) + && !std::operator==((int)v5, (int)&night::NS_TYPE_BRACKET) + && !std::operator==((int)v5, (int)&night::NS_TYPE_CALL) ) + { + v2 = std::operator==((int)v5, (int)&night::NS_TYPE_KW); + if ( !v2 ) + goto LABEL_22; + v3 = a1 + 60; + if ( !std::operator==("null", a1 + 60) + && !std::operator==("undefined", v3) + && !std::operator==((char *)off_552620, v3) ) + { + v2 = std::operator==("Infinity", v3); + goto LABEL_22; + } + } + v2 = 1; +LABEL_22: + v4 = v2; + std::string::_M_dispose(v5); + return v4; + } + return result; +} + +//----- (0040F3F4) -------------------------------------------------------- +bool __stdcall night::NSASTParse::is_exp(int a1) +{ + bool result; // al + bool v2; // al + int v3; // esi + bool v4; // [esp+1Fh] [ebp-29h] + void *v5[8]; // [esp+28h] [ebp-20h] BYREF + + result = 0; + if ( a1 ) + { + std::string::basic_string((char *)v5, a1); + if ( !std::operator==((int)v5, (int)&night::NS_TYPE_BOOL) + && !std::operator==((int)v5, (int)&night::NS_TYPE_VAR) + && !std::operator==((int)v5, (int)&night::NS_TYPE_STR) + && !std::operator==((int)v5, (int)&night::NS_TYPE_NUM) + && !std::operator==((int)v5, (int)&night::NS_TYPE_B_TYPE) + && !std::operator==((int)v5, (int)&night::NS_TYPE_OP_SELF) + && !std::operator==((int)v5, (int)&night::NS_TYPE_BINARY) + && !std::operator==((int)v5, (int)&night::NS_TYPE_ASSIGN) + && !std::operator==((int)v5, (int)&night::NS_TYPE_TERNARY) + && !std::operator==((int)v5, (int)&night::NS_TYPE_OBJ_DOT) + && !std::operator==((int)v5, (int)&night::NS_TYPE_OBJ_PROPERTY) + && !std::operator==((int)v5, (int)&night::NS_TYPE_OBJ_SELF_OP) + && !std::operator==((int)v5, (int)&night::NS_TYPE_OBJ_BLOCK) + && !std::operator==((int)v5, (int)&night::NS_TYPE_ARRAY) + && !std::operator==((int)v5, (int)&night::NS_TYPE_BRACKET) + && !std::operator==((int)v5, (int)&night::NS_TYPE_PROG_NO_SEM_REQUIRE) + && !std::operator==((int)v5, (int)&night::NS_TYPE_FUNC) + && !std::operator==((int)v5, (int)&night::NS_TYPE_CALL) ) + { + v2 = std::operator==((int)v5, (int)&night::NS_TYPE_KW); + if ( !v2 ) + goto LABEL_26; + v3 = a1 + 60; + if ( !std::operator==("null", a1 + 60) + && !std::operator==("undefined", v3) + && !std::operator==((char *)off_552620, v3) ) + { + v2 = std::operator==("Infinity", v3); + goto LABEL_26; + } + } + v2 = 1; +LABEL_26: + v4 = v2; + std::string::_M_dispose(v5); + return v4; + } + return result; +} + +//----- (0040F638) -------------------------------------------------------- +unsigned int __fastcall night::NSGod::hamlet(_DWORD *a1) +{ + unsigned int result; // eax + int v3; // esi + void **v4; // ebx + bool v5; // al + unsigned int i; // [esp+1Ch] [ebp-3Ch] + void *v7[12]; // [esp+28h] [ebp-30h] BYREF + + for ( i = 0; ; ++i ) + { + result = (a1[1] - *a1) >> 2; + if ( i >= result ) + break; + v3 = *(_DWORD *)(*a1 + 4 * i); + std::string::basic_string((char *)v7, v3); + if ( std::operator==((int)v7, (int)&night::std_v_n) ) + { + v4 = *(void ***)(v3 + 24); +LABEL_6: + if ( !v4 ) + goto LABEL_12; + if ( *v4 ) + operator delete(*v4); + goto LABEL_11; + } + v5 = std::operator==((int)v7, (int)&night::std_v_v_n); + v4 = *(void ***)(v3 + 24); + if ( v5 ) + goto LABEL_6; + if ( !v4 ) + goto LABEL_12; + std::string::_M_dispose(v4 + 39); + std::string::_M_dispose(v4 + 33); + std::string::_M_dispose(v4 + 27); + std::string::_M_dispose(v4 + 21); + std::string::_M_dispose(v4 + 15); + std::string::_M_dispose(v4 + 6); + std::string::_M_dispose(v4); +LABEL_11: + operator delete(v4); +LABEL_12: + std::string::_M_dispose((void **)v3); + operator delete((void *)v3); + std::string::_M_dispose(v7); + } + return result; +} + +//----- (0040F72A) -------------------------------------------------------- +_DWORD *__thiscall night::NSGod::gen_son(void *this, int a2) +{ + _DWORD *v3; // eax + _DWORD *v4; // ebx + int v6[7]; // [esp+1Ch] [ebp-1Ch] BYREF + + v3 = operator new(0x1Cu); + *v3 = v3 + 2; + v3[1] = 0; + *((_BYTE *)v3 + 8) = 0; + v6[0] = (int)v3; + std::string::_M_assign((int)v3, a2); + v4 = operator new(0xF8u); + *v4 = v4 + 2; + v4[6] = v4 + 8; + v4[15] = v4 + 17; + v4[21] = v4 + 23; + v4[27] = v4 + 29; + v4[33] = v4 + 35; + v4[39] = v4 + 41; + v4[1] = 0; + *((_BYTE *)v4 + 8) = 0; + v4[7] = 0; + *((_BYTE *)v4 + 32) = 0; + v4[16] = 0; + *((_BYTE *)v4 + 68) = 0; + v4[22] = 0; + *((_BYTE *)v4 + 92) = 0; + v4[28] = 0; + *((_BYTE *)v4 + 116) = 0; + v4[34] = 0; + *((_BYTE *)v4 + 140) = 0; + v4[40] = 0; + *((_BYTE *)v4 + 164) = 0; + v4[13] = 0; + v4[12] = 0; + *((_BYTE *)v4 + 200) = 0; + *((_BYTE *)v4 + 56) = 0; + v4[55] = 0; + v4[54] = 0; + v4[53] = 0; + v4[52] = 0; + v4[51] = 0; + v4[48] = 0; + v4[47] = 0; + v4[46] = 0; + v4[45] = 0; + v4[61] = 0; + v4[60] = 0; + v4[58] = 0; + v4[57] = 0; + v4[49] = 0; + v4[59] = 0; + v4[56] = 0; + std::string::_M_assign((int)v4, a2); + *(_DWORD *)(v6[0] + 24) = v4; + std::vector::push_back((int)this, v6); + return v4; +} +// 40F72A: using guessed type int var_1C[7]; + +//----- (0040F8E2) -------------------------------------------------------- +struct _Unwind_Exception *__thiscall night::NSToken::read_string(night::NSStream **this, char a2, int a3) +{ + bool v4; // [esp+16h] [ebp-82h] + bool i; // [esp+17h] [ebp-81h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-80h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-80h] + int v9[3]; // [esp+54h] [ebp-44h] BYREF + void *v10[2]; // [esp+60h] [ebp-38h] BYREF + char v11; // [esp+68h] [ebp-30h] BYREF + void *v12[8]; // [esp+78h] [ebp-20h] BYREF + + night::NSStream::next(v12, this[1]); + v11 = 0; + v10[0] = &v11; + v10[1] = 0; + for ( i = 0; ; i = v4 ) + { + v4 = night::NSStream::eof(this[1]); + if ( v4 ) + break; + night::NSStream::next(v9, this[1]); + if ( LOBYTE(v9[0]) == 10 ) + { + if ( !i ) + { + std::string::basic_string(v12, "Unexpected `\\n`"); + night::NSStream::err(this[1], (int)v12, 0, 0, 0); + } + std::string::push_back(v10, 10); + } + else + { + if ( !i ) + { + if ( LOBYTE(v9[0]) == 92 ) + { + v4 = 1; + std::string::push_back(v10, 92); + continue; + } + if ( LOBYTE(v9[0]) == a2 ) + break; + } + std::string::push_back(v10, v9[0]); + } + } + lpuexcpta = *this; + std::string::basic_string((char *)v12, (int)&night::NS_TYPE_STR); + lpuexcptb = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcpta, (int)v12); + std::string::_M_dispose(v12); + WXML::Rewrite::ToStringCode((int)v12, (int *)v10); + std::string::operator=((unsigned __int8 **)lpuexcptb + 15, (int)v12); + std::string::_M_dispose(v12); + std::string::_M_replace_aux((_DWORD *)lpuexcptb + 27, 0, *((_DWORD *)lpuexcptb + 28), 1u, a2); + std::string::_M_assign((int)lpuexcptb + 84, a3); + std::string::_M_dispose(v10); + return lpuexcptb; +} +// 40F8E2: using guessed type int var_44[3]; + +//----- (0040FB50) -------------------------------------------------------- +struct _Unwind_Exception *__thiscall night::NSToken::read_number(night::NSStream **this, int a2) +{ + _DWORD *v2; // eax + char v4; // [esp+14h] [ebp-B4h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-B0h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-B0h] + char v8; // [esp+5Fh] [ebp-69h] BYREF + void *v9[6]; // [esp+60h] [ebp-68h] BYREF + _DWORD v10[6]; // [esp+78h] [ebp-50h] BYREF + int v11[2]; // [esp+90h] [ebp-38h] BYREF + char v12; // [esp+98h] [ebp-30h] BYREF + int v13[8]; // [esp+A8h] [ebp-20h] BYREF + + v8 = 0; + night::NSToken::read_while[abi:cxx11]( + (int)v9, + (int)this, + (unsigned __int8 (__cdecl *)(_DWORD, int))night::NSToken::rw_cb_number, + (int)&v8); + night::NSStream::peek(v13, this[1]); + v4 = v13[0]; + if ( (unsigned __int8)night::NSToken::tk_is_var_start(SLOBYTE(v13[0])) ) + { + v11[0] = (int)&v12; + std::string::_M_construct(v11, 1u, v4); + std::operator+(v13, "Unexpected token `", (unsigned int *)v11); + v2 = std::string::append(v13, "`"); + std::string::basic_string(v10, v2); + std::string::_M_dispose((void **)v13); + std::string::_M_dispose((void **)v11); + night::NSStream::err(this[1], (int)v10, 0, 0, 0); + } + lpuexcpta = *this; + std::string::basic_string((char *)v13, (int)&night::NS_TYPE_NUM); + lpuexcptb = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcpta, (int)v13); + std::string::_M_dispose((void **)v13); + std::string::_M_assign((int)lpuexcptb + 60, (int)v9); + std::string::_M_assign((int)lpuexcptb + 84, a2); + std::string::_M_dispose(v9); + return lpuexcptb; +} +// 40FB50: using guessed type _DWORD var_50[6]; + +//----- (0040FDB8) -------------------------------------------------------- +int __thiscall night::NSGod::gen_girl(void *this, int a2) +{ + _DWORD *v3; // eax + _DWORD *v4; // eax + int v5; // edx + _DWORD *v6; // eax + int v7; // edx + _DWORD *v9; // [esp+1Ch] [ebp-Ch] BYREF + + v3 = operator new(0x1Cu); + *v3 = v3 + 2; + v3[1] = 0; + *((_BYTE *)v3 + 8) = 0; + v9 = v3; + std::string::_M_assign((int)v3, a2); + if ( std::operator==((int)&night::std_v_n, a2) ) + { + v4 = operator new(0xCu); + v5 = (int)v9; + *v4 = 0; + v4[1] = 0; + v4[2] = 0; + *(_DWORD *)(v5 + 24) = v4; + } + if ( std::operator==((int)&night::std_v_v_n, a2) ) + { + v6 = operator new(0xCu); + v7 = (int)v9; + *v6 = 0; + v6[1] = 0; + v6[2] = 0; + *(_DWORD *)(v7 + 24) = v6; + } + std::vector::push_back((int)this, &v9); + return v9[6]; +} + +//----- (0040FE80) -------------------------------------------------------- +void __thiscall night::NSToken::push(int this, int a2) +{ + if ( *(_DWORD *)(this + 8) ) + { + std::vector::push_back((void **)(this + 12), (char **)(this + 8)); + *(_DWORD *)(this + 8) = 0; + } + if ( a2 ) + std::vector::push_back((void **)(this + 12), (char **)&a2); +} + +//----- (0040FEC2) -------------------------------------------------------- +struct _Unwind_Exception *__thiscall night::NSToken::read_var(int this, int a2) +{ + _DWORD *v2; // eax + _DWORD *v3; // eax + void *v4; // eax + unsigned int v6; // [esp+10h] [ebp-B8h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-B0h] + struct _Unwind_Exception *lpuexcptc; // [esp+18h] [ebp-B0h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-B0h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-B0h] + _DWORD v12[3]; // [esp+54h] [ebp-74h] BYREF + void *v13[6]; // [esp+60h] [ebp-68h] BYREF + int v14[6]; // [esp+78h] [ebp-50h] BYREF + int v15[6]; // [esp+90h] [ebp-38h] BYREF + void *v16[8]; // [esp+A8h] [ebp-20h] BYREF + + night::NSStream::peek(v12, *(night::NSStream **)(this + 4)); + night::NSToken::read_while[abi:cxx11]( + (int)v13, + this, + (unsigned __int8 (__cdecl *)(_DWORD, int))night::NSToken::tk_is_var, + 0); + std::string::basic_string((char *)v14, (int)v13); + std::operator+((int)v15, " ", (int)v14); + v2 = std::string::append(v15, " "); + std::string::basic_string(v16, v2); + lpuexcptb = (struct _Unwind_Exception *)std::string::find(night::NS_BUILTIN_TYPE, (int)v16, 0); + std::string::_M_dispose(v16); + std::string::_M_dispose((void **)v15); + std::string::_M_dispose((void **)v14); + if ( lpuexcptb == (struct _Unwind_Exception *)-1 ) + { + std::string::basic_string((char *)v14, (int)v13); + std::operator+((int)v15, " ", (int)v14); + v3 = std::string::append(v15, " "); + std::string::basic_string(v16, v3); + v6 = std::string::find(night::NS_BUILTIN_KW, (int)v16, 0); + std::string::_M_dispose(v16); + std::string::_M_dispose((void **)v15); + std::string::_M_dispose((void **)v14); + lpuexcpta = *(struct _Unwind_Exception **)this; + v4 = &night::NS_TYPE_KW; + if ( v6 == -1 ) + v4 = &night::NS_TYPE_VAR; + std::string::basic_string((char *)v16, (int)v4); + lpuexcpt = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcpta, (int)v16); + std::string::_M_dispose(v16); + if ( v6 == -1 ) + std::operator+((char *)v16, (int)&night::nsv_, (int)v13); + else + std::string::basic_string((char *)v16, (int)v13); + std::string::operator=((unsigned __int8 **)lpuexcpt + 15, (int)v16); + std::string::_M_dispose(v16); + std::string::_M_assign((int)lpuexcpt + 24, (int)v13); + std::string::_M_assign((int)lpuexcpt + 84, a2); + *((_DWORD *)lpuexcpt + 12) = v12[1]; + *((_DWORD *)lpuexcpt + 13) = v12[2]; + if ( !*std::map::operator[]((void **)(this + 24), (int)v13) ) + *std::map::operator[]((void **)(this + 24), (int)v13) = *(void **)(this + 44); + } + else + { + lpuexcptc = *(struct _Unwind_Exception **)this; + std::string::basic_string((char *)v16, (int)&night::NS_TYPE_B_TYPE); + lpuexcpt = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcptc, (int)v16); + std::string::_M_dispose(v16); + std::string::_M_assign((int)lpuexcpt + 60, (int)v13); + std::string::_M_assign((int)lpuexcpt + 84, a2); + } + std::string::_M_dispose(v13); + return lpuexcpt; +} +// 565A60: using guessed type int night::NS_BUILTIN_TYPE[6]; +// 565A78: using guessed type int night::NS_BUILTIN_KW[6]; + +//----- (004102F0) -------------------------------------------------------- +unsigned __int8 **__fastcall night::NSToken::read_next(int a1) +{ + int v1; // eax + struct _Unwind_Exception *string; // eax + _DWORD *v3; // eax + unsigned int v5; // [esp+10h] [ebp-B8h] + unsigned int v6; // [esp+10h] [ebp-B8h] + unsigned __int8 **v7; // [esp+14h] [ebp-B4h] + char v8; // [esp+14h] [ebp-B4h] + night::NSStream *v9; // [esp+14h] [ebp-B4h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-B0h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-B0h] + int v13[3]; // [esp+54h] [ebp-74h] BYREF + void *v14[6]; // [esp+60h] [ebp-68h] BYREF + int v15[2]; // [esp+78h] [ebp-50h] BYREF + char v16[16]; // [esp+80h] [ebp-48h] BYREF + int v17[2]; // [esp+90h] [ebp-38h] BYREF + char v18; // [esp+98h] [ebp-30h] BYREF + void *v19[2]; // [esp+A8h] [ebp-20h] BYREF + char v20; // [esp+B0h] [ebp-18h] BYREF + + v1 = *(_DWORD *)(a1 + 16); + if ( v1 == *(_DWORD *)(a1 + 12) ) + { + night::NSToken::read_while[abi:cxx11]( + (int)v14, + a1, + (unsigned __int8 (__cdecl *)(_DWORD, int))night::NSToken::tk_is_whitespace, + 0); + if ( night::NSStream::eof(*(night::NSStream **)(a1 + 4)) + || (night::NSToken::skip_comment((night::NSStream **)a1, (unsigned __int8 **)v14), + night::NSStream::eof(*(night::NSStream **)(a1 + 4))) ) + { + v7 = 0; + } + else + { + night::NSStream::peek(v13, *(night::NSStream **)(a1 + 4)); + v8 = v13[0]; + if ( LOBYTE(v13[0]) == 34 || LOBYTE(v13[0]) == 39 ) + { + string = night::NSToken::read_string((night::NSStream **)a1, v13[0], (int)v14); + } + else if ( (unsigned __int8)(LOBYTE(v13[0]) - 48) > 9u ) + { + if ( !(unsigned __int8)night::NSToken::tk_is_var_start(SLOBYTE(v13[0])) ) + { + v17[0] = (int)&v18; + std::string::_M_construct(v17, 1u, v8); + v5 = std::string::find(night::NS_BUILTIN_PUNC, (int)v17, 0); + std::string::_M_dispose((void **)v17); + if ( v5 == -1 ) + { + v19[0] = &v20; + std::string::_M_construct(v19, 1u, v8); + v6 = std::string::find(night::NS_BUILTIN_OP, (int)v19, 0); + std::string::_M_dispose(v19); + if ( v6 == -1 ) + { + v15[0] = (int)v16; + lpuexcptb = *(struct _Unwind_Exception **)(a1 + 4); + std::string::_M_construct(v15, 1u, v8); + std::operator+(v17, "Unexpected token `", (unsigned int *)v15); + v3 = std::string::append(v17, "`"); + std::string::basic_string(v19, v3); + night::NSStream::err(lpuexcptb, (int)v19, 0, 0, 0); + } + v15[0] = (int)v16; + v15[1] = 0; + v16[0] = 0; + night::NSToken::read_while[abi:cxx11]( + (int)v17, + a1, + (unsigned __int8 (__cdecl *)(_DWORD, int))night::NSToken::tk_is_valid_op_str, + (int)v15); + lpuexcpta = *(struct _Unwind_Exception **)a1; + std::string::basic_string((char *)v19, (int)&night::NS_TYPE_OP); + v7 = (unsigned __int8 **)night::NSGod::gen_son(lpuexcpta, (int)v19); + std::string::_M_dispose(v19); + std::string::_M_assign((int)(v7 + 15), (int)v17); + std::string::_M_assign((int)(v7 + 21), (int)v14); + std::string::_M_dispose((void **)v17); + std::string::_M_dispose((void **)v15); + } + else + { + v9 = *(night::NSStream **)a1; + std::string::basic_string((char *)v19, (int)&night::NS_TYPE_PUNC); + v7 = (unsigned __int8 **)night::NSGod::gen_son(v9, (int)v19); + std::string::_M_dispose(v19); + night::NSStream::next(v19, *(night::NSStream **)(a1 + 4)); + v15[0] = (int)v16; + std::string::_M_construct(v15, 1u, (char)v19[0]); + std::string::operator=(v7 + 15, (int)v15); + std::string::_M_dispose((void **)v15); + std::string::_M_assign((int)(v7 + 21), (int)v14); + } + goto LABEL_19; + } + string = night::NSToken::read_var(a1, (int)v14); + } + else + { + string = night::NSToken::read_number((night::NSStream **)a1, (int)v14); + } + v7 = (unsigned __int8 **)string; + } +LABEL_19: + std::string::_M_dispose(v14); + return v7; + } + v7 = *(unsigned __int8 ***)(v1 - 4); + *(_DWORD *)(a1 + 16) = v1 - 4; + return v7; +} +// 565AA8: using guessed type int night::NS_BUILTIN_PUNC[6]; +// 565AF0: using guessed type int night::NS_BUILTIN_OP[6]; +// 4102F0: using guessed type int var_74[3]; + +//----- (0041081E) -------------------------------------------------------- +unsigned __int8 **__fastcall night::NSToken::peek(int a1) +{ + unsigned __int8 **result; // eax + + result = *(unsigned __int8 ***)(a1 + 8); + if ( !result ) + { + result = night::NSToken::read_next(a1); + *(_DWORD *)(a1 + 8) = result; + } + return result; +} + +//----- (0041083A) -------------------------------------------------------- +bool __fastcall night::NSToken::eof(int a1) +{ + return night::NSToken::peek(a1) == 0; +} + +//----- (0041084C) -------------------------------------------------------- +unsigned __int8 **__thiscall night::NSASTParse::is_punctuation(int *this, int a2) +{ + unsigned __int8 **v2; // eax + unsigned __int8 **v3; // ebx + + v2 = night::NSToken::peek(this[7]); + v3 = v2; + if ( v2 ) + { + if ( std::operator==((int)&night::NS_TYPE_PUNC, (int)v2) ) + { + if ( !std::operator==(a2, (int)(v3 + 15)) ) + return 0; + } + else + { + return 0; + } + } + return v3; +} + +//----- (004108A0) -------------------------------------------------------- +unsigned __int8 **__thiscall night::NSASTParse::is_buildin_keywords(int *this, int a2) +{ + unsigned __int8 **v2; // eax + unsigned __int8 **v3; // ebx + + v2 = night::NSToken::peek(this[7]); + v3 = v2; + if ( v2 ) + { + if ( std::operator==((int)&night::NS_TYPE_KW, (int)v2) ) + { + if ( !std::operator==(a2, (int)(v3 + 15)) ) + return 0; + } + else + { + return 0; + } + } + return v3; +} + +//----- (004108F4) -------------------------------------------------------- +unsigned __int8 **__thiscall night::NSASTParse::is_op(int *this, int a2) +{ + unsigned __int8 **v2; // eax + unsigned __int8 **v3; // ebx + + v2 = night::NSToken::peek(this[7]); + v3 = v2; + if ( v2 ) + { + if ( std::operator==((int)&night::NS_TYPE_OP, (int)v2) ) + { + if ( *(_DWORD *)(a2 + 4) && !std::operator==(a2, (int)(v3 + 15)) ) + return 0; + } + else + { + return 0; + } + } + return v3; +} + +//----- (00410950) -------------------------------------------------------- +unsigned __int8 **__thiscall night::NSASTParse::is_op_or_comma(int *this, int a2) +{ + unsigned __int8 **lpuexcpt; // [esp+18h] [ebp-60h] + void *v5[8]; // [esp+58h] [ebp-20h] BYREF + + std::string::basic_string(v5, ","); + lpuexcpt = night::NSASTParse::is_punctuation(this, (int)v5); + std::string::_M_dispose(v5); + if ( !lpuexcpt ) + return night::NSASTParse::is_op(this, a2); + std::string::_M_assign((int)lpuexcpt, (int)&night::NS_TYPE_OP); + return lpuexcpt; +} + +//----- (00410A24) -------------------------------------------------------- +int __fastcall night::NSASTParse::end_line(int a1) +{ + unsigned __int8 **v1; // eax + int v2; // edx + + v1 = night::NSToken::peek(*(_DWORD *)(a1 + 28)); + LOBYTE(v2) = 1; + if ( v1 ) + LOBYTE(v2) = std::string::find((int *)v1 + 21, 10, 0) + 1 != 0; + return v2; +} +// 410A56: variable 'v2' is possibly undefined + +//----- (00410A5A) -------------------------------------------------------- +int __userpurge night::NSASTParse::is_op_self@(int a1@, night::NSASTParse *this, bool a3) +{ + unsigned __int8 **v3; // eax + int v4; // ebx + int v5; // edi + int v6; // eax + int v7; // eax + + v3 = night::NSToken::peek(*(_DWORD *)(a1 + 28)); + if ( !v3 ) + return 0; + v5 = (int)v3; + LOBYTE(v6) = std::operator==((int)&night::NS_TYPE_OP, (int)v3); + v4 = v6; + if ( !(_BYTE)v6 ) + return 0; + if ( std::string::find_first_not_of((int *)(v5 + 60), (int)&night::NS_BUILTIN_OP_SELF, 0) == -1 ) + return v4; + if ( !(_BYTE)this || !std::operator==((int)&night::NS_TYPE_OP, v5) ) + return 0; + if ( !std::operator==("-", v5 + 60) ) + { + LOBYTE(v7) = std::operator==("+", v5 + 60); + return v7; + } + return v4; +} +// 410A8B: variable 'v6' is possibly undefined +// 410AED: variable 'v7' is possibly undefined + +//----- (00410AFC) -------------------------------------------------------- +bool __userpurge night::NSASTParse::is_obj_op_self@(int *a1@, night::NSASTParse *this, bool a3) +{ + unsigned __int8 **v3; // eax + bool lpuexcpt; // [esp+18h] [ebp-70h] + void *v7[6]; // [esp+50h] [ebp-38h] BYREF + void *v8[8]; // [esp+68h] [ebp-20h] BYREF + + if ( (_BYTE)this ) + { + v3 = night::NSToken::peek(a1[7]); + if ( v3 ) + { + if ( std::string::find((int *)v3 + 21, 10, 0) != (char *)-1 ) + return 0; + } + } + std::string::basic_string(v7, "++"); + lpuexcpt = 1; + if ( !night::NSASTParse::is_op(a1, (int)v7) ) + { + std::string::basic_string(v8, "--"); + lpuexcpt = night::NSASTParse::is_op(a1, (int)v8) != 0; + std::string::_M_dispose(v8); + } + std::string::_M_dispose(v7); + return lpuexcpt; +} + +//----- (00410C40) -------------------------------------------------------- +unsigned __int8 **__fastcall night::NSToken::next(int a1) +{ + unsigned __int8 **result; // eax + + result = *(unsigned __int8 ***)(a1 + 8); + *(_DWORD *)(a1 + 8) = 0; + if ( !result ) + return night::NSToken::read_next(a1); + return result; +} + +//----- (00410C56) -------------------------------------------------------- +void __thiscall night::NSASTParse::ignore_punc_pass_sem(int *this, int a2) +{ + _DWORD *v2; // eax + _DWORD *v3; // [esp+10h] [ebp-98h] + unsigned __int8 **v4; // [esp+14h] [ebp-94h] + bool v5; // [esp+14h] [ebp-94h] + unsigned int v6; // [esp+14h] [ebp-94h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-90h] + int v9[6]; // [esp+58h] [ebp-50h] BYREF + int v10[6]; // [esp+70h] [ebp-38h] BYREF + void *v11[8]; // [esp+88h] [ebp-20h] BYREF + + if ( night::NSASTParse::is_punctuation(this, a2) ) + { + night::NSToken::next(this[7]); + } + else if ( !std::operator==(";", a2) ) + { + v4 = night::NSToken::peek(this[7]); + std::string::basic_string((void **)v9, " "); + if ( v4 ) + { + v3 = v4 + 15; + if ( (unsigned int)v4[16] > 3 + && (std::string::substr(v11, v3, 0, 3u), + v5 = std::operator==((int)v11, (int)&night::nsv_), + std::string::_M_dispose(v11), + v5) ) + { + std::string::substr(v11, v3, 3u, 0xFFFFFFFF); + std::string::operator=((unsigned __int8 **)v9, (int)v11); + std::string::_M_dispose(v11); + } + else + { + std::string::_M_assign((int)v9, (int)v3); + } + v6 = -v9[1]; + } + else + { + v6 = 0; + } + lpuexcpta = (struct _Unwind_Exception *)this[7]; + std::operator+((int)v10, "Unexpected identifier `", (int)v9); + v2 = std::string::append(v10, "`"); + std::string::basic_string(v11, v2); + night::NSToken::err((int)lpuexcpta, (int)v11, 0, v6, 0); + } +} + +//----- (00410EF0) -------------------------------------------------------- +void __thiscall night::NSASTParse::ignore_punc(int *this, int a2) +{ + unsigned __int8 **v2; // eax + int v3; // ecx + _DWORD *v4; // eax + _DWORD *v6; // [esp+14h] [ebp-94h] + int v7; // [esp+14h] [ebp-94h] + unsigned __int8 **lpuexcpt; // [esp+18h] [ebp-90h] + bool lpuexcptb; // [esp+18h] [ebp-90h] + unsigned int lpuexcpta; // [esp+18h] [ebp-90h] + int v11[6]; // [esp+58h] [ebp-50h] BYREF + int v12[6]; // [esp+70h] [ebp-38h] BYREF + void *v13[8]; // [esp+88h] [ebp-20h] BYREF + + v2 = night::NSASTParse::is_punctuation(this, a2); + v3 = this[7]; + if ( !v2 ) + { + lpuexcpt = night::NSToken::peek(v3); + std::string::basic_string((void **)v11, " "); + if ( lpuexcpt ) + { + v6 = lpuexcpt + 15; + if ( (unsigned int)lpuexcpt[16] > 3 + && (std::string::substr(v13, v6, 0, 3u), + lpuexcptb = std::operator==((int)v13, (int)&night::nsv_), + std::string::_M_dispose(v13), + lpuexcptb) ) + { + std::string::substr(v13, v6, 3u, 0xFFFFFFFF); + std::string::operator=((unsigned __int8 **)v11, (int)v13); + std::string::_M_dispose(v13); + } + else + { + std::string::_M_assign((int)v11, (int)v6); + } + lpuexcpta = -v11[1]; + } + else + { + lpuexcpta = 0; + } + v7 = this[7]; + std::operator+((int)v12, "Unexpected identifier `", (int)v11); + v4 = std::string::append(v12, "`"); + std::string::basic_string(v13, v4); + night::NSToken::err(v7, (int)v13, 0, lpuexcpta, 0); + } + night::NSToken::next(v3); +} + +//----- (00411166) -------------------------------------------------------- +void __thiscall night::NSASTParse::ignore_buildin_kw(int *this, int a2) +{ + unsigned __int8 **v2; // eax + _DWORD *v3; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-70h] + int v6[6]; // [esp+50h] [ebp-38h] BYREF + _DWORD v7[8]; // [esp+68h] [ebp-20h] BYREF + + v2 = night::NSASTParse::is_buildin_keywords(this, a2); + lpuexcpt = (struct _Unwind_Exception *)this[7]; + if ( !v2 ) + { + std::operator+((int)v6, "Expected `", a2); + v3 = std::string::append(v6, "`"); + std::string::basic_string(v7, v3); + night::NSToken::err((int)lpuexcpt, (int)v7, 0, 0, 0); + } + night::NSToken::next((int)lpuexcpt); +} +// 411166: using guessed type _DWORD var_20[8]; + +//----- (0041127E) -------------------------------------------------------- +void __thiscall night::NSASTParse::ignore_op(int *this, int a2) +{ + unsigned __int8 **v2; // eax + _DWORD *v3; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-70h] + int v6[6]; // [esp+50h] [ebp-38h] BYREF + _DWORD v7[8]; // [esp+68h] [ebp-20h] BYREF + + v2 = night::NSASTParse::is_op(this, a2); + lpuexcpt = (struct _Unwind_Exception *)this[7]; + if ( !v2 ) + { + std::operator+((int)v6, "Expected operator `", a2); + v3 = std::string::append(v6, "`"); + std::string::basic_string(v7, v3); + night::NSToken::err((int)lpuexcpt, (int)v7, 0, 0, 0); + } + night::NSToken::next((int)lpuexcpt); +} +// 41127E: using guessed type _DWORD var_20[8]; + +//----- (00411396) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall night::NSASTParse::ast_trans_kw(int *a1) +{ + int v1; // ecx + int v2; // eax + struct _Unwind_Exception *v3; // eax + _DWORD *v4; // eax + unsigned __int8 **v5; // eax + int v6; // eax + night::NSASTParse *v7; // edx + _DWORD *v8; // eax + _DWORD *v9; // eax + _DWORD *v10; // eax + unsigned __int8 **v11; // eax + _DWORD *v12; // eax + _DWORD *v13; // eax + _DWORD *v14; // eax + _DWORD *v15; // eax + night::NSASTParse *v17; // [esp+0h] [ebp-B8h] + char v18; // [esp+17h] [ebp-A1h] + unsigned int v19; // [esp+18h] [ebp-A0h] + unsigned int v20; // [esp+1Ch] [ebp-9Ch] + _DWORD *v21; // [esp+1Ch] [ebp-9Ch] + void *v22; // [esp+1Ch] [ebp-9Ch] + void **v23; // [esp+1Ch] [ebp-9Ch] + unsigned __int8 **v24; // [esp+20h] [ebp-98h] + int v25; // [esp+20h] [ebp-98h] + int v26; // [esp+20h] [ebp-98h] + void *v28; // [esp+24h] [ebp-94h] + int v29; // [esp+24h] [ebp-94h] + struct _Unwind_Exception *lpuexcpta; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcptb; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcpte; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcptc; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcptd; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcpt; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcptf; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcptg; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcpth; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcpti; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcptj; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcptk; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcptl; // [esp+28h] [ebp-90h] + int v43[6]; // [esp+68h] [ebp-50h] BYREF + int v44[6]; // [esp+80h] [ebp-38h] BYREF + void *v45[8]; // [esp+98h] [ebp-20h] BYREF + + v1 = a1[7]; + v2 = *(_DWORD *)(v1 + 4); + v19 = *(_DWORD *)(v2 + 52); + v20 = *(_DWORD *)(v2 + 56); + v24 = night::NSToken::next(v1); + std::string::basic_string((char *)v43, (int)(v24 + 15)); + if ( std::operator==("true", (int)v43) || std::operator==("false", (int)v43) ) + { + lpuexcpta = (struct _Unwind_Exception *)a1[6]; + std::string::basic_string((char *)v45, (int)&night::NS_TYPE_BOOL); + v3 = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcpta, (int)v45); + goto LABEL_31; + } + if ( std::operator==("null", (int)v43) + || std::operator==("undefined", (int)v43) + || std::operator==((char *)off_552620, (int)v43) + || std::operator==("Infinity", (int)v43) ) + { +LABEL_50: + lpuexcptl = (struct _Unwind_Exception *)a1[6]; + std::string::basic_string((char *)v45, (int)&night::NS_TYPE_KW); + lpuexcpt = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcptl, (int)v45); + std::string::_M_dispose(v45); + std::string::_M_assign((int)lpuexcpt + 24, (int)(v24 + 6)); + *((_DWORD *)lpuexcpt + 12) = v24[12]; + *((_DWORD *)lpuexcpt + 13) = v24[13]; + std::string::_M_assign((int)lpuexcpt + 60, (int)v43); + goto LABEL_51; + } + if ( std::operator==("return", (int)v43) + || std::operator==("delete", (int)v43) + || std::operator==("void", (int)v43) ) + { + if ( !std::string::compare((int)v43, "return") && a1[8] <= 0 ) + { + lpuexcpte = (struct _Unwind_Exception *)a1[7]; + std::operator+((int)v44, "Illegal ", (int)v43); + v4 = std::string::append(v44, " statement"); + std::string::basic_string(v45, v4); + night::NSToken::err((int)lpuexcpte, (int)v45, v19, v20, 1); + } + lpuexcptb = (struct _Unwind_Exception *)a1[6]; + std::string::basic_string((char *)v45, (int)&night::NS_TYPE_VAR); + v21 = night::NSGod::gen_son(lpuexcptb, (int)v45); + std::string::_M_dispose(v45); + std::string::_M_assign((int)(v21 + 15), (int)v43); + std::string::_M_assign((int)(v21 + 6), (int)(v24 + 6)); + v21[12] = v24[12]; + v21[13] = v24[13]; + lpuexcptc = (struct _Unwind_Exception *)a1[6]; + std::string::basic_string((char *)v45, (int)&night::std_v_v_n); + v25 = night::NSGod::gen_girl(lpuexcptc, (int)v45); + std::string::_M_dispose(v45); + lpuexcptd = (struct _Unwind_Exception *)a1[6]; + std::string::basic_string((char *)v45, (int)&night::NS_TYPE_CALL); + lpuexcpt = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcptd, (int)v45); + std::string::_M_dispose(v45); + *((_DWORD *)lpuexcpt + 55) = v21; + *((_DWORD *)lpuexcpt + 56) = v25; + v5 = night::NSToken::peek(a1[7]); + if ( v5 && std::string::find((int *)v5 + 21, 10, 0) == (char *)-1 ) + { + v22 = (void *)a1[6]; + std::string::basic_string((char *)v45, (int)&night::std_v_n); + v6 = night::NSGod::gen_girl(v22, (int)v45); + v17 = v7; + v44[0] = v6; + std::string::_M_dispose(v45); + v23 = (void **)v44[0]; + v45[0] = (void *)night::NSASTParse::ast_expression(v17); + std::vector::emplace_back(v23, (char **)v45); + } + else + { + v28 = (void *)a1[6]; + std::string::basic_string((char *)v45, (int)&night::std_v_n); + v44[0] = night::NSGod::gen_girl(v28, (int)v45); + std::string::_M_dispose(v45); + } + std::vector>>::push_back(v25, v44); + goto LABEL_51; + } + if ( std::operator==("typeof", (int)v43) ) + { + lpuexcptf = (struct _Unwind_Exception *)a1[6]; + std::string::basic_string((char *)v45, (int)&night::NS_TYPE_OP_SELF); + lpuexcpt = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcptf, (int)v45); + std::string::_M_dispose(v45); + std::string::basic_string((char *)v45, (int)v43); + std::string::append(v45, " "); + std::string::operator=((unsigned __int8 **)lpuexcpt + 39, (int)v45); + std::string::_M_dispose(v45); + v8 = night::NSASTParse::ast_expression_no_binary(a1); + *((_DWORD *)lpuexcpt + 48) = v8; + if ( !night::NSASTParse::is_exp((int)v8) ) + { + v29 = a1[7]; + std::operator+((int)v44, "Unexpected statement[", *((_DWORD *)lpuexcpt + 48)); + v9 = std::string::append(v44, "]"); + std::string::basic_string(v45, v9); + night::NSToken::err(v29, (int)v45, v19, v20, 1); + } + goto LABEL_51; + } + if ( std::operator==("this", (int)v43) ) + goto LABEL_30; + if ( !std::operator==("arguments", (int)v43) ) + { + if ( !std::operator==("break", (int)v43) && !std::operator==("continue", (int)v43) ) + { + lpuexcpti = (struct _Unwind_Exception *)a1[7]; + std::operator+((int)v44, "Unexpected token `", (int)v43); + v15 = std::string::append(v44, "`"); + std::string::basic_string(v45, v15); + night::NSToken::err((int)lpuexcpti, (int)v45, v19, v20, 1); + } + if ( !std::string::compare((int)v43, "break") && a1[9] <= 0 + || !std::string::compare((int)v43, "continue") && a1[10] <= 0 ) + { + lpuexcptj = (struct _Unwind_Exception *)a1[7]; + std::operator+((int)v44, "Illegal ", (int)v43); + v13 = std::string::append(v44, " statement"); + std::string::basic_string(v45, v13); + night::NSToken::err((int)lpuexcptj, (int)v45, v19, v20, 1); + } + v18 = night::NSASTParse::end_line((int)a1); + if ( !v18 ) + { + std::string::basic_string((void **)v44, ";"); + if ( !night::NSASTParse::is_punctuation(a1, (int)v44) ) + { + std::string::basic_string(v45, "}"); + v18 = night::NSASTParse::is_punctuation(a1, (int)v45) == 0; + std::string::_M_dispose(v45); + } + std::string::_M_dispose((void **)v44); + if ( v18 ) + { + lpuexcptk = (struct _Unwind_Exception *)a1[7]; + std::operator+((int)v44, "Unexpected token after `", (int)v43); + v14 = std::string::append(v44, "`"); + std::string::basic_string(v45, v14); + night::NSToken::err((int)lpuexcptk, (int)v45, v19, v20, 1); + } + } + goto LABEL_50; + } + if ( a1[8] <= 0 ) + { + lpuexcptg = (struct _Unwind_Exception *)a1[7]; + std::operator+((int)v44, "Illegal ", (int)v43); + v10 = std::string::append(v44, " statement"); + std::string::basic_string(v45, v10); + night::NSToken::err((int)lpuexcptg, (int)v45, v19, v20, 1); + } +LABEL_30: + lpuexcpth = (struct _Unwind_Exception *)a1[6]; + std::string::basic_string((char *)v45, (int)&night::NS_TYPE_KW); + v3 = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcpth, (int)v45); +LABEL_31: + lpuexcpt = v3; + std::string::_M_dispose(v45); + std::string::_M_assign((int)lpuexcpt + 60, (int)v43); + std::string::_M_assign((int)lpuexcpt + 24, (int)(v24 + 6)); + *((_DWORD *)lpuexcpt + 12) = v24[12]; + *((_DWORD *)lpuexcpt + 13) = v24[13]; + v11 = night::NSToken::peek(a1[7]); + if ( v11 ) + { + v26 = (int)(v11 + 15); + if ( std::operator==("[", (int)(v11 + 15)) ) + { + v12 = night::NSASTParse::ast_obj_op(a1, (int)lpuexcpt); +LABEL_36: + lpuexcpt = (struct _Unwind_Exception *)night::NSASTParse::make_call_or_just_expression(a1, v12); + goto LABEL_51; + } + if ( std::operator==(".", v26) ) + { + v12 = night::NSASTParse::ast_obj_dot(a1, (int)lpuexcpt); + goto LABEL_36; + } + } +LABEL_51: + std::string::_M_dispose((void **)v43); + return lpuexcpt; +} +// 411877: variable 'v7' is possibly undefined + +//----- (004120C0) -------------------------------------------------------- +_DWORD *__userpurge night::NSASTParse::ast_dispatch@(_DWORD *a1@, night::NSASTParse *this, bool a3) +{ + int v3; // eax + _DWORD *v4; // eax + unsigned int *v5; // ecx + unsigned __int8 **v6; // eax + _DWORD *v7; // eax + bool v9; // al + bool v10; // dl + _DWORD *v11; // eax + _DWORD *v12; // eax + unsigned __int8 **v13; // eax + unsigned __int8 **v14; // eax + _DWORD *v15; // eax + char *v17; // [esp+0h] [ebp-1E8h] + bool v18; // [esp+4h] [ebp-1E4h] + bool v19; // [esp+4h] [ebp-1E4h] + bool v20; // [esp+4h] [ebp-1E4h] + bool v21; // [esp+1Eh] [ebp-1CAh] + char v22; // [esp+1Fh] [ebp-1C9h] + char v23; // [esp+20h] [ebp-1C8h] + char v24; // [esp+21h] [ebp-1C7h] + char v25; // [esp+22h] [ebp-1C6h] + char v26; // [esp+23h] [ebp-1C5h] + unsigned int v27; // [esp+24h] [ebp-1C4h] + unsigned __int8 **v28; // [esp+24h] [ebp-1C4h] + char v29; // [esp+24h] [ebp-1C4h] + unsigned int v30; // [esp+28h] [ebp-1C0h] + unsigned __int8 **v31; // [esp+28h] [ebp-1C0h] + char v32; // [esp+28h] [ebp-1C0h] + void *v33; // [esp+2Ch] [ebp-1BCh] + void *v34; // [esp+2Ch] [ebp-1BCh] + void *v35; // [esp+2Ch] [ebp-1BCh] + void *v36; // [esp+2Ch] [ebp-1BCh] + unsigned __int8 **v37; // [esp+2Ch] [ebp-1BCh] + bool v38; // [esp+2Ch] [ebp-1BCh] + int v39; // [esp+2Ch] [ebp-1BCh] + int v40; // [esp+2Ch] [ebp-1BCh] + int v41; // [esp+2Ch] [ebp-1BCh] + unsigned __int8 **v42; // [esp+30h] [ebp-1B8h] + void *v43; // [esp+30h] [ebp-1B8h] + void **v44; // [esp+30h] [ebp-1B8h] + unsigned __int8 **v45; // [esp+30h] [ebp-1B8h] + bool v46; // [esp+30h] [ebp-1B8h] + unsigned __int8 **v47; // [esp+30h] [ebp-1B8h] + unsigned __int8 **v48; // [esp+30h] [ebp-1B8h] + unsigned __int8 **v49; // [esp+30h] [ebp-1B8h] + unsigned __int8 **v50; // [esp+30h] [ebp-1B8h] + unsigned __int8 **v51; // [esp+30h] [ebp-1B8h] + unsigned __int8 **v52; // [esp+30h] [ebp-1B8h] + char v53; // [esp+30h] [ebp-1B8h] + unsigned __int8 **v54; // [esp+30h] [ebp-1B8h] + unsigned __int8 **v55; // [esp+30h] [ebp-1B8h] + unsigned __int8 **v56; // [esp+30h] [ebp-1B8h] + unsigned __int8 **v57; // [esp+30h] [ebp-1B8h] + void *v58; // [esp+30h] [ebp-1B8h] + unsigned __int8 **v59; // [esp+30h] [ebp-1B8h] + int v61; // [esp+34h] [ebp-1B4h] + int v62; // [esp+34h] [ebp-1B4h] + int v63; // [esp+34h] [ebp-1B4h] + int v64; // [esp+38h] [ebp-1B0h] + _DWORD *v65; // [esp+38h] [ebp-1B0h] + char is_op_self; // [esp+38h] [ebp-1B0h] + bool v67[4]; // [esp+78h] [ebp-170h] BYREF + int v68; // [esp+7Ch] [ebp-16Ch] + void *v69[6]; // [esp+90h] [ebp-158h] BYREF + void *v70[6]; // [esp+A8h] [ebp-140h] BYREF + void *v71[6]; // [esp+C0h] [ebp-128h] BYREF + void *v72[6]; // [esp+D8h] [ebp-110h] BYREF + void *v73[6]; // [esp+F0h] [ebp-F8h] BYREF + void *v74[6]; // [esp+108h] [ebp-E0h] BYREF + void *v75[6]; // [esp+120h] [ebp-C8h] BYREF + void *v76[6]; // [esp+138h] [ebp-B0h] BYREF + void *v77[6]; // [esp+150h] [ebp-98h] BYREF + void *v78[6]; // [esp+168h] [ebp-80h] BYREF + void *v79[6]; // [esp+180h] [ebp-68h] BYREF + void *v80[6]; // [esp+198h] [ebp-50h] BYREF + int v81[6]; // [esp+1B0h] [ebp-38h] BYREF + void *v82[8]; // [esp+1C8h] [ebp-20h] BYREF + + std::string::basic_string(v82, (char *)asc_5527F4); + v42 = night::NSASTParse::is_punctuation(a1, (int)v82); + std::string::_M_dispose(v82); + if ( !v42 ) + { + std::string::basic_string((char *)v67, (int)(a1 + 11)); + std::string::operator=(a1 + 11, (char *)&byte_551F04); + std::string::basic_string(v82, (char *)&asc_5527F4[4]); + v45 = night::NSASTParse::is_punctuation(a1, (int)v82); + std::string::_M_dispose(v82); + if ( v45 ) + { + v28 = night::NSToken::next(a1[7]); + v37 = night::NSToken::next(a1[7]); + v31 = night::NSToken::next(a1[7]); + v46 = 0; + if ( v37 ) + { + if ( std::operator==((int)&night::NS_TYPE_VAR, (int)v37) + || (v46 = std::operator==((int)&night::NS_TYPE_STR, (int)v37)) ) + { + v46 = 0; + if ( v31 ) + { + v46 = std::operator==((int)&night::NS_TYPE_PUNC, (int)v31); + if ( v46 ) + v46 = std::operator==(":", (int)(v31 + 15)); + } + } + if ( std::operator==((int)&night::NS_TYPE_PUNC, (int)v37) ) + { + v9 = std::operator==("}", (int)(v37 + 15)); + v10 = v46; + if ( v9 ) + v10 = v9; + v46 = v10; + } + } + night::NSToken::push(a1[7], (int)v31); + night::NSToken::push(a1[7], (int)v37); + night::NSToken::push(a1[7], (int)v28); + if ( v46 ) + { + v11 = night::NSASTParse::ast_obj_block(a1); +LABEL_113: + v65 = night::NSASTParse::make_call_or_just_expression(a1, v11); + goto LABEL_114; + } + if ( !v68 || (unsigned __int8)std::operator!=("op not=", (int)v67) ) + { + v11 = night::NSASTParse::ast_code_block(a1); + goto LABEL_113; + } + } + std::string::basic_string(v82, "["); + v47 = night::NSASTParse::is_punctuation(a1, (int)v82); + std::string::_M_dispose(v82); + if ( v47 ) + { + v11 = night::NSASTParse::ast_new_array(a1); + goto LABEL_113; + } + if ( night::NSASTParse::is_obj_op_self(a1, 0, v18) ) + { + v11 = night::NSASTParse::ast_obj_op_self(a1, 0); + goto LABEL_113; + } + is_op_self = night::NSASTParse::is_op_self((int)a1, (night::NSASTParse *)1, v19); + if ( is_op_self ) + { + v11 = night::NSASTParse::ast_op_self((int)a1); + goto LABEL_113; + } + std::string::basic_string(v82, "if"); + v48 = night::NSASTParse::is_buildin_keywords(a1, (int)v82); + std::string::_M_dispose(v82); + if ( v48 ) + { + v11 = night::NSASTParse::ast_if(a1); + goto LABEL_113; + } + std::string::basic_string(v82, (char *)off_552210); + v49 = night::NSASTParse::is_buildin_keywords(a1, (int)v82); + std::string::_M_dispose(v82); + if ( v49 ) + { + v11 = night::NSASTParse::ast_for(a1); + goto LABEL_113; + } + std::string::basic_string(v82, "while"); + v50 = night::NSASTParse::is_buildin_keywords(a1, (int)v82); + std::string::_M_dispose(v82); + if ( v50 ) + { + v11 = night::NSASTParse::ast_while(a1); + goto LABEL_113; + } + std::string::basic_string(v82, "do"); + v51 = night::NSASTParse::is_buildin_keywords(a1, (int)v82); + std::string::_M_dispose(v82); + if ( v51 ) + { + v11 = night::NSASTParse::ast_do_while(a1); + goto LABEL_113; + } + std::string::basic_string(v82, "switch"); + v52 = night::NSASTParse::is_buildin_keywords(a1, (int)v82); + std::string::_M_dispose(v82); + if ( v52 ) + { + v11 = night::NSASTParse::ast_switch(a1); + goto LABEL_113; + } + std::string::basic_string(v69, "true"); + if ( night::NSASTParse::is_buildin_keywords(a1, (int)v69) ) + { + v38 = 0; + v53 = 0; + v26 = 0; + v29 = 0; + v32 = 0; + v23 = 0; + v22 = 0; + v25 = 0; + v24 = 0; + } + else + { + std::string::basic_string(v70, "false"); + if ( night::NSASTParse::is_buildin_keywords(a1, (int)v70) ) + { + v38 = 0; + v53 = 0; + v26 = 0; + v29 = 0; + v32 = 0; + v23 = 0; + v22 = 0; + v25 = 0; + } + else + { + std::string::basic_string(v71, "null"); + if ( night::NSASTParse::is_buildin_keywords(a1, (int)v71) ) + { + v38 = 0; + v53 = 0; + v26 = 0; + v29 = 0; + v32 = 0; + v23 = 0; + v22 = 0; + } + else + { + std::string::basic_string(v72, "undefined"); + if ( night::NSASTParse::is_buildin_keywords(a1, (int)v72) ) + { + v38 = 0; + v53 = 0; + v26 = 0; + v29 = 0; + v32 = 0; + v23 = 0; + } + else + { + std::string::basic_string(v73, (char *)off_552620); + if ( night::NSASTParse::is_buildin_keywords(a1, (int)v73) ) + { + v38 = 0; + v53 = 0; + v26 = 0; + v29 = 0; + v32 = 0; + } + else + { + std::string::basic_string(v74, "Infinity"); + if ( night::NSASTParse::is_buildin_keywords(a1, (int)v74) ) + { + v38 = 0; + v53 = 0; + v26 = 0; + v29 = 0; + } + else + { + std::string::basic_string(v75, "return"); + if ( night::NSASTParse::is_buildin_keywords(a1, (int)v75) ) + { + v38 = 0; + v53 = 0; + v26 = 0; + } + else + { + std::string::basic_string(v76, "delete"); + if ( night::NSASTParse::is_buildin_keywords(a1, (int)v76) ) + { + v38 = 0; + v53 = 0; + } + else + { + std::string::basic_string(v77, "void"); + if ( night::NSASTParse::is_buildin_keywords(a1, (int)v77) ) + { + v38 = 0; + } + else + { + std::string::basic_string(v78, "typeof"); + if ( !night::NSASTParse::is_buildin_keywords(a1, (int)v78) ) + { + std::string::basic_string(v79, "this"); + if ( !night::NSASTParse::is_buildin_keywords(a1, (int)v79) ) + { + std::string::basic_string(v80, "arguments"); + v21 = 1; + if ( !night::NSASTParse::is_buildin_keywords(a1, (int)v80) ) + { + std::string::basic_string((void **)v81, "break"); + v21 = 1; + if ( !night::NSASTParse::is_buildin_keywords(a1, (int)v81) ) + { + std::string::basic_string(v82, "continue"); + v21 = night::NSASTParse::is_buildin_keywords(a1, (int)v82) != 0; + std::string::_M_dispose(v82); + } + std::string::_M_dispose((void **)v81); + } + std::string::_M_dispose(v80); + v22 = 1; + v23 = 1; + v24 = 1; + v25 = 1; + v32 = 1; + v29 = 1; + v26 = 1; + v53 = 1; + v38 = 1; + goto LABEL_61; + } + is_op_self = 1; + } + v38 = 1; + } + v53 = 1; + } + v26 = 1; + } + v29 = 1; + } + v32 = 1; + } + v23 = 1; + } + v22 = 1; + } + v25 = 1; + } + v24 = 1; + } + v21 = 1; + if ( !is_op_self ) + { +LABEL_62: + if ( v38 ) + std::string::_M_dispose(v78); + if ( v53 ) + std::string::_M_dispose(v77); + if ( v26 ) + std::string::_M_dispose(v76); + if ( v29 ) + std::string::_M_dispose(v75); + if ( v32 ) + std::string::_M_dispose(v74); + if ( v23 ) + std::string::_M_dispose(v73); + if ( v22 ) + std::string::_M_dispose(v72); + if ( v25 ) + std::string::_M_dispose(v71); + if ( v24 ) + std::string::_M_dispose(v70); + std::string::_M_dispose(v69); + if ( v21 ) + { + v11 = night::NSASTParse::ast_trans_kw(a1); + goto LABEL_113; + } + std::string::basic_string(v82, "require"); + v54 = night::NSASTParse::is_buildin_keywords(a1, (int)v82); + std::string::_M_dispose(v82); + if ( v54 ) + { + v11 = night::NSASTParse::ast_require(a1); + goto LABEL_113; + } + std::string::basic_string(v82, (char *)off_551FFE); + v55 = night::NSASTParse::is_buildin_keywords(a1, (int)v82); + std::string::_M_dispose(v82); + if ( v55 ) + { + v11 = night::NSASTParse::ast_var(a1); + goto LABEL_113; + } + std::string::basic_string(v82, "function"); + v56 = night::NSASTParse::is_buildin_keywords(a1, (int)v82); + std::string::_M_dispose(v82); + if ( v56 ) + { + v11 = night::NSASTParse::ast_function(a1); + goto LABEL_113; + } + std::string::basic_string(v82, ";"); + v57 = night::NSASTParse::is_punctuation(a1, (int)v82); + std::string::_M_dispose(v82); + if ( v57 ) + { + v58 = (void *)a1[6]; + std::string::basic_string((char *)v82, (int)&night::NS_TYPE_SKIP); + v12 = night::NSGod::gen_son(v58, (int)v82); + v65 = night::NSASTParse::make_call_or_just_expression(a1, v12); + std::string::_M_dispose(v82); +LABEL_114: + std::string::_M_dispose((void **)v67); + return v65; + } + v59 = night::NSToken::next(a1[7]); + if ( !v59 ) + { + v62 = a1[7]; + std::string::basic_string(v82, "End of file"); + night::NSToken::err(v62, (int)v82, 0, 0, 0); + } + if ( !std::operator==((int)&night::NS_TYPE_VAR, (int)v59) + && !std::operator==((int)&night::NS_TYPE_NUM, (int)v59) + && !std::operator==((int)&night::NS_TYPE_STR, (int)v59) ) + { + v39 = (int)(v59 + 15); + if ( !std::operator==((int)&night::NS_TYPE_B_TYPE, (int)v59) ) + { + v63 = a1[7]; + std::operator+((int)v81, "Unexpected token `", v39); + v15 = std::string::append(v81, "`"); + std::string::basic_string(v82, v15); + night::NSToken::err(v63, (int)v82, 0, 0, 0); + } + if ( !std::operator==("Number", v39) + && !std::operator==("Math", v39) + && !std::operator==("Date", v39) ) + { + goto LABEL_112; + } + v14 = night::NSToken::peek(a1[7]); + if ( !v14 ) + goto LABEL_112; + v41 = (int)(v14 + 15); + if ( !std::operator==("[", (int)(v14 + 15)) ) + { + if ( std::operator==(".", v41) ) + goto LABEL_111; +LABEL_112: + v11 = v59; + goto LABEL_113; + } +LABEL_99: + v11 = night::NSASTParse::ast_obj_op(a1, (int)v59); + goto LABEL_113; + } + v13 = night::NSToken::peek(a1[7]); + if ( v13 ) + { + v40 = (int)(v13 + 15); + if ( std::operator==("[", (int)(v13 + 15)) ) + goto LABEL_99; + if ( std::operator==(".", v40) ) + { +LABEL_111: + v11 = night::NSASTParse::ast_obj_dot(a1, (int)v59); + goto LABEL_113; + } + } + if ( night::NSASTParse::is_obj_op_self(a1, (night::NSASTParse *)1, v20) ) + { + v11 = night::NSASTParse::ast_obj_op_self(a1, (int)v59); + goto LABEL_113; + } + goto LABEL_112; + } +LABEL_61: + std::string::_M_dispose(v79); + goto LABEL_62; + } + v43 = (void *)a1[6]; + std::string::basic_string((char *)v82, (int)&night::std_v_n); + v44 = (void **)night::NSGod::gen_girl(v43, (int)v82); + std::string::_M_dispose(v82); + v33 = (void *)a1[6]; + std::string::basic_string((char *)v82, (int)&night::NS_TYPE_PUNC); + v79[0] = night::NSGod::gen_son(v33, (int)v82); + std::string::_M_dispose(v82); + std::string::operator=((unsigned int *)v79[0] + 15, (char *)asc_5527F4); + v17 = std::vector::push_back(v44, (char **)v79); + night::NSToken::next(a1[7]); + v3 = *(_DWORD *)(a1[7] + 4); + v27 = *(_DWORD *)(v3 + 52); + v30 = *(_DWORD *)(v3 + 56); + v80[0] = (void *)night::NSASTParse::ast_expression((night::NSASTParse *)v17); + if ( !night::NSASTParse::is_exp((int)v80[0]) ) + { + v34 = v80[0]; + if ( (unsigned __int8)std::operator!=((int)&night::NS_TYPE_ASSIGN, (int)v80[0]) ) + { + v61 = a1[7]; + std::operator+((int)v81, "Unexpected statement[", (int)v34); + v4 = std::string::append(v81, "]"); + std::string::basic_string(v82, v4); + night::NSToken::err(v61, (int)v82, v27, v30, 1); + } + } + std::vector::push_back(v44, (char **)v80); + std::string::basic_string(v82, (char *)&asc_5527F4[2]); + night::NSASTParse::ignore_punc(a1, (int)v82); + std::string::_M_dispose(v82); + v35 = (void *)a1[6]; + std::string::basic_string((char *)v82, (int)&night::NS_TYPE_PUNC); + v79[0] = night::NSGod::gen_son(v35, (int)v82); + std::string::_M_dispose(v82); + std::string::operator=((unsigned int *)v79[0] + 15, (char *)&asc_5527F4[2]); + std::vector::push_back(v44, (char **)v79); + v36 = (void *)a1[6]; + std::string::basic_string((char *)v82, (int)&night::NS_TYPE_BRACKET); + v79[0] = night::NSGod::gen_son(v36, (int)v82); + std::string::_M_dispose(v82); + v5 = (unsigned int *)v79[0]; + *((_DWORD *)v79[0] + 57) = v44; + std::string::operator=(v5 + 27, (char *)&byte_551F04); + v6 = night::NSToken::peek(a1[7]); + if ( v6 ) + { + v64 = (int)(v6 + 15); + if ( std::operator==("[", (int)(v6 + 15)) ) + { + v7 = night::NSASTParse::ast_obj_op(a1, (int)v79[0]); + return night::NSASTParse::make_call_or_just_expression(a1, v7); + } + if ( std::operator==(".", v64) ) + { + v7 = night::NSASTParse::ast_obj_dot(a1, (int)v79[0]); + return night::NSASTParse::make_call_or_just_expression(a1, v7); + } + } + return night::NSASTParse::make_call_or_just_expression(a1, (_DWORD *)v79[0]); +} +// 4127DA: variable 'v18' is possibly undefined +// 412807: variable 'v19' is possibly undefined +// 413267: variable 'v20' is possibly undefined + +//----- (00413A7E) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall night::NSASTParse::ast_op_self(int a1) +{ + bool v2; // [esp+4h] [ebp-74h] + unsigned __int8 **v3; // [esp+10h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-60h] + void *v7[8]; // [esp+58h] [ebp-20h] BYREF + + v3 = night::NSToken::next(*(_DWORD *)(a1 + 28)); + lpuexcpt = *(struct _Unwind_Exception **)(a1 + 24); + std::string::basic_string((char *)v7, (int)&night::NS_TYPE_OP_SELF); + lpuexcpta = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcpt, (int)v7); + std::string::_M_dispose(v7); + std::string::_M_assign((int)lpuexcpta + 156, (int)(v3 + 15)); + *((_DWORD *)lpuexcpta + 48) = night::NSASTParse::ast_dispatch(0, v2); + return lpuexcpta; +} +// 413B25: variable 'v2' is possibly undefined + +//----- (00413B64) -------------------------------------------------------- +int __thiscall night::NSASTParse::make_binary_or_just_value(_DWORD *this, int a2, unsigned __int8 a3) +{ + unsigned __int8 **v3; // edx + int v4; // eax + bool v6; // al + bool v7; // zf + char *v8; // eax + int v9; // eax + void *v10; // eax + bool v12; // [esp+4h] [ebp-A4h] + bool v13; // [esp+4h] [ebp-A4h] + bool v14; // [esp+4h] [ebp-A4h] + unsigned int v15; // [esp+20h] [ebp-88h] + unsigned int v16; // [esp+24h] [ebp-84h] + int binary_or_just_value; // [esp+28h] [ebp-80h] + unsigned __int8 v18; // [esp+2Ch] [ebp-7Ch] + struct _Unwind_Exception *v19; // [esp+2Ch] [ebp-7Ch] + void *v20; // [esp+2Ch] [ebp-7Ch] + unsigned __int8 **v21; // [esp+30h] [ebp-78h] + int v22; // [esp+30h] [ebp-78h] + void *v23; // [esp+34h] [ebp-74h] + _DWORD *v24; // [esp+34h] [ebp-74h] + bool v25; // [esp+34h] [ebp-74h] + _DWORD *v26; // [esp+34h] [ebp-74h] + struct _Unwind_Exception *lpuexcpta; // [esp+38h] [ebp-70h] + struct _Unwind_Exception *lpuexcptb; // [esp+38h] [ebp-70h] + struct _Unwind_Exception *lpuexcptc; // [esp+38h] [ebp-70h] + void *v31[6]; // [esp+70h] [ebp-38h] BYREF + void *v32[8]; // [esp+88h] [ebp-20h] BYREF + + if ( a3 ) + { + std::string::basic_string(v31, (char *)&byte_551F04); + v21 = night::NSASTParse::is_op(this, (int)v31); + v18 = a3; + } + else + { + std::string::basic_string(v32, (char *)&byte_551F04); + v21 = night::NSASTParse::is_op_or_comma(this, (int)v32); + v18 = 0; + std::string::_M_dispose(v32); + } + if ( v18 ) + std::string::_M_dispose(v31); + if ( v21 + && !(unsigned __int8)night::NSASTParse::is_op_self((int)this, 0, v12) + && !night::NSASTParse::is_obj_op_self(this, 0, v13) + && night::NSASTParse::is_exp(a2) ) + { + v3 = night::NSToken::next(this[7]); + v4 = *(_DWORD *)(this[7] + 4); + v16 = *(_DWORD *)(v4 + 56); + v15 = *(_DWORD *)(v4 + 52); + v22 = (int)(v3 + 15); + if ( std::operator==("?", (int)(v3 + 15)) ) + { + v19 = night::NSASTParse::ast_ternary_expression(this); + if ( !night::NSASTParse::is_exp((int)v19) ) + { + lpuexcpta = (struct _Unwind_Exception *)this[7]; + std::string::basic_string(v32, "Expected exp"); + night::NSToken::err((int)lpuexcpta, (int)v32, v15, v16, 1); + } + v23 = (void *)this[6]; + std::string::basic_string((char *)v32, (int)&night::NS_TYPE_BINARY); + v24 = night::NSGod::gen_son(v23, (int)v32); + std::string::_M_dispose(v32); + std::string::_M_assign((int)(v24 + 39), v22); + v24[45] = a2; + v24[46] = v19; + return night::NSASTParse::make_binary_or_just_value(v24, a3); + } + else + { + v6 = std::operator==("=", v22); + v7 = !v6; + v25 = v6; + v8 = "="; + if ( v7 ) + v8 = "op not="; + std::string::operator=(this + 11, v8); + v9 = night::NSASTParse::ast_dispatch(0, v14); + binary_or_just_value = night::NSASTParse::make_binary_or_just_value(v9, a3); + if ( !night::NSASTParse::is_exp(binary_or_just_value) ) + { + lpuexcptb = (struct _Unwind_Exception *)this[7]; + std::string::basic_string(v32, "Expected exp"); + night::NSToken::err((int)lpuexcptb, (int)v32, v15, v16, 1); + } + v20 = (void *)this[6]; + v10 = &night::NS_TYPE_ASSIGN; + if ( !v25 ) + v10 = &night::NS_TYPE_BINARY; + std::string::basic_string((char *)v32, (int)v10); + v26 = night::NSGod::gen_son(v20, (int)v32); + std::string::_M_dispose(v32); + std::string::_M_assign((int)(v26 + 39), v22); + v26[45] = a2; + v26[46] = binary_or_just_value; + if ( (std::operator==("/", (int)(v26 + 39)) || std::operator==("/=", (int)(v26 + 39))) + && (!night::NSASTParse::is_save_for_division(a2) + || !night::NSASTParse::is_save_for_division(binary_or_just_value)) ) + { + lpuexcptc = (struct _Unwind_Exception *)this[7]; + std::string::basic_string(v32, "Expected exp"); + night::NSToken::err((int)lpuexcptc, (int)v32, v15, v16, 1); + } + return night::NSASTParse::make_binary_or_just_value(v26, a3); + } + } + return a2; +} +// 413C43: variable 'v12' is possibly undefined +// 413C5B: variable 'v13' is possibly undefined +// 413DFE: variable 'v14' is possibly undefined + +//----- (0041402E) -------------------------------------------------------- +_DWORD *__fastcall night::NSASTParse::ast_expression_no_comma(int *a1) +{ + int v1; // eax + _DWORD *binary_or_just_value; // eax + bool v4; // [esp+4h] [ebp-24h] + + v1 = night::NSASTParse::ast_dispatch(0, v4); + binary_or_just_value = (_DWORD *)night::NSASTParse::make_binary_or_just_value(a1, v1, 1u); + return night::NSASTParse::make_call_or_just_expression(a1, binary_or_just_value); +} +// 41403E: variable 'v4' is possibly undefined + +//----- (00414068) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall night::NSASTParse::ast_varname(int a1) +{ + int v1; // eax + night::NSASTParse *v3; // [esp+0h] [ebp-88h] + unsigned int v4; // [esp+1Ch] [ebp-6Ch] + unsigned int v5; // [esp+20h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+28h] [ebp-60h] + struct _Unwind_Exception *lpuexcpta; // [esp+28h] [ebp-60h] + void *v9[8]; // [esp+68h] [ebp-20h] BYREF + + v1 = *(_DWORD *)(*(_DWORD *)(a1 + 28) + 4); + v4 = *(_DWORD *)(v1 + 52); + v5 = *(_DWORD *)(v1 + 56); + lpuexcpt = (struct _Unwind_Exception *)night::NSASTParse::ast_expression_no_comma(v3); + if ( (!std::operator==((int)&night::NS_TYPE_ASSIGN, (int)lpuexcpt) + || !std::operator==((int)&night::NS_TYPE_VAR, *((_DWORD *)lpuexcpt + 45))) + && !std::operator==((int)&night::NS_TYPE_VAR, (int)lpuexcpt) ) + { + lpuexcpta = *(struct _Unwind_Exception **)(a1 + 28); + std::string::basic_string(v9, "Expected variable"); + night::NSToken::err((int)lpuexcpta, (int)v9, v4, v5, 1); + } + return lpuexcpt; +} +// 4140B9: variable 'v3' is possibly undefined + +//----- (00414188) -------------------------------------------------------- +_DWORD *__thiscall night::NSASTParse::ast_obj_op_self(_DWORD *this, int a2) +{ + unsigned __int8 **v2; // eax + int v3; // edx + _DWORD *v4; // eax + night::NSASTParse *v6; // [esp+0h] [ebp-98h] + int v7; // [esp+18h] [ebp-80h] + int v8; // [esp+1Ch] [ebp-7Ch] + void *v9; // [esp+1Ch] [ebp-7Ch] + _DWORD *v10; // [esp+1Ch] [ebp-7Ch] + int v11; // [esp+20h] [ebp-78h] + unsigned __int8 **v12; // [esp+20h] [ebp-78h] + int v13; // [esp+20h] [ebp-78h] + void *v14; // [esp+24h] [ebp-74h] + _DWORD *v15; // [esp+24h] [ebp-74h] + struct _Unwind_Exception *lpuexcpta; // [esp+28h] [ebp-70h] + struct _Unwind_Exception *lpuexcptb; // [esp+28h] [ebp-70h] + struct _Unwind_Exception *lpuexcptc; // [esp+28h] [ebp-70h] + int v20[6]; // [esp+60h] [ebp-38h] BYREF + void *v21[8]; // [esp+78h] [ebp-20h] BYREF + + v14 = (void *)this[6]; + std::string::basic_string((char *)v21, (int)&night::NS_TYPE_OBJ_SELF_OP); + v15 = night::NSGod::gen_son(v14, (int)v21); + std::string::_M_dispose(v21); + *((_BYTE *)v15 + 200) = a2 == 0; + v11 = (int)(v15 + 39); + std::string::operator=(v15 + 39, (char *)&byte_551F04); + v15[48] = 0; + v2 = night::NSToken::next(this[7]); + if ( !v2 ) + { + lpuexcpta = (struct _Unwind_Exception *)this[7]; + std::string::basic_string(v21, "End of file"); + night::NSToken::err((int)lpuexcpta, (int)v21, 0, 0, 0); + } + v3 = (int)(v2 + 15); + v7 = (int)(v2 + 21); + v8 = (int)(v15 + 21); + if ( a2 ) + { + v15[48] = a2; + std::string::_M_assign(v11, v3); + std::string::_M_assign(v8, v7); + } + else + { + std::string::_M_assign(v11, v3); + std::string::_M_assign(v8, v7); + v12 = night::NSToken::peek(this[7]); + if ( !v12 ) + { + lpuexcptb = (struct _Unwind_Exception *)this[7]; + std::string::basic_string(v21, "End of file"); + night::NSToken::err((int)lpuexcptb, (int)v21, 0, 0, 0); + } + if ( (unsigned __int8)std::operator!=((int)&night::NS_TYPE_VAR, (int)v12) ) + { + lpuexcptc = (struct _Unwind_Exception *)this[7]; + std::operator+((int)v20, "Unexpected token `", (int)(v12 + 15)); + v4 = std::string::append(v20, "`"); + std::string::basic_string(v21, v4); + night::NSToken::err((int)lpuexcptc, (int)v21, 0, 0, 0); + } + v13 = night::NSASTParse::ast_expression_no_comma(v6); + if ( std::operator==((int)&night::NS_TYPE_OBJ_SELF_OP, v13) ) + { + v9 = (void *)this[6]; + std::string::basic_string((char *)v21, (int)&night::NS_TYPE_OP); + v10 = night::NSGod::gen_son(v9, (int)v21); + std::string::_M_dispose(v21); + std::string::_M_assign((int)(v10 + 15), v13 + 156); + std::string::_M_assign((int)(v10 + 21), v13 + 84); + night::NSToken::push(this[7], (int)v10); + v15[48] = *(_DWORD *)(v13 + 192); + } + else + { + v15[48] = v13; + } + } + return v15; +} +// 4143BD: variable 'v6' is possibly undefined + +//----- (004144FA) -------------------------------------------------------- +_DWORD *__thiscall night::NSASTParse::ast_obj_dot(int *this, int a2) +{ + int v2; // ecx + int v3; // eax + _DWORD *v4; // eax + unsigned __int8 **v5; // eax + unsigned int v7; // [esp+14h] [ebp-84h] + unsigned int v8; // [esp+18h] [ebp-80h] + void **v9; // [esp+1Ch] [ebp-7Ch] + _DWORD *v10; // [esp+20h] [ebp-78h] + void *v11; // [esp+24h] [ebp-74h] + void *v12; // [esp+24h] [ebp-74h] + unsigned __int8 **v13; // [esp+24h] [ebp-74h] + struct _Unwind_Exception *lpuexcpta; // [esp+28h] [ebp-70h] + struct _Unwind_Exception *lpuexcptb; // [esp+28h] [ebp-70h] + int v17[6]; // [esp+60h] [ebp-38h] BYREF + void *v18[8]; // [esp+78h] [ebp-20h] BYREF + + v11 = (void *)this[6]; + std::string::basic_string((char *)v18, (int)&night::std_v_n); + v9 = (void **)night::NSGod::gen_girl(v11, (int)v18); + std::string::_M_dispose(v18); + v12 = (void *)this[6]; + std::string::basic_string((char *)v18, (int)&night::NS_TYPE_OBJ_DOT); + v10 = night::NSGod::gen_son(v12, (int)v18); + std::string::_M_dispose(v18); + v10[48] = a2; + v10[49] = v9; + do + { + std::string::basic_string(v18, "."); + night::NSASTParse::ignore_punc(this, (int)v18); + std::string::_M_dispose(v18); + v2 = this[7]; + v3 = *(_DWORD *)(v2 + 4); + v7 = *(_DWORD *)(v3 + 52); + v8 = *(_DWORD *)(v3 + 56); + v13 = night::NSToken::peek(v2); + if ( !v13 ) + { + lpuexcpta = (struct _Unwind_Exception *)this[7]; + std::string::basic_string(v18, "End of file"); + night::NSToken::err((int)lpuexcpta, (int)v18, 0, 0, 0); + } + if ( (unsigned __int8)std::operator!=((int)&night::NS_TYPE_VAR, (int)v13) ) + { + lpuexcptb = (struct _Unwind_Exception *)this[7]; + std::operator+((int)v17, "Unexpected token `", (int)(v13 + 15)); + v4 = std::string::append(v17, "`"); + std::string::basic_string(v18, v4); + night::NSToken::err((int)lpuexcptb, (int)v18, v7, v8, 1); + } + v18[0] = night::NSASTParse::ast_expression_no_comma(this); + std::vector::emplace_back(v9, (char **)v18); + v5 = night::NSToken::peek(this[7]); + } + while ( v5 && !(unsigned __int8)std::operator!=(".", (int)(v5 + 15)) ); + return v10; +} + +//----- (0041479A) -------------------------------------------------------- +unsigned int *__fastcall night::NSASTParse::ast_if(int *a1) +{ + _DWORD *v2; // [esp+1Ch] [ebp-6Ch] + _DWORD *v3; // [esp+20h] [ebp-68h] + unsigned __int8 **v4; // [esp+20h] [ebp-68h] + unsigned __int8 **v5; // [esp+20h] [ebp-68h] + void *v6; // [esp+24h] [ebp-64h] + unsigned int *v7; // [esp+24h] [ebp-64h] + void *v9[8]; // [esp+68h] [ebp-20h] BYREF + + std::string::basic_string(v9, "if"); + night::NSASTParse::ignore_buildin_kw(a1, (int)v9); + std::string::_M_dispose(v9); + v2 = night::NSASTParse::ast_expression_no_comma(a1); + v3 = night::NSASTParse::ast_expression_no_comma(a1); + v6 = (void *)a1[6]; + std::string::basic_string((char *)v9, (int)&night::NS_TYPE_IF); + v7 = night::NSGod::gen_son(v6, (int)v9); + std::string::_M_dispose(v9); + v7[51] = (unsigned int)v2; + v7[53] = 0; + v7[52] = (unsigned int)v3; + if ( (unsigned __int8)std::operator!=((int)&night::NS_TYPE_PROG_NO_SEM, (int)v3) ) + { + if ( !night::NSToken::eof(a1[7]) ) + { + std::string::basic_string(v9, ";"); + v4 = night::NSASTParse::is_punctuation(a1, (int)v9); + std::string::_M_dispose(v9); + if ( v4 ) + night::NSToken::next(a1[7]); + } + std::string::operator=(v7 + 27, ";"); + } + std::string::basic_string(v9, "else"); + v5 = night::NSASTParse::is_buildin_keywords(a1, (int)v9); + std::string::_M_dispose(v9); + if ( v5 ) + { + night::NSToken::next(a1[7]); + v7[53] = (unsigned int)night::NSASTParse::ast_expression_no_comma(a1); + } + return v7; +} + +//----- (004149B4) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall night::NSASTParse::ast_ternary_expression(int *a1) +{ + night::NSASTParse *v1; // ecx + night::NSASTParse *v3; // [esp+0h] [ebp-78h] + night::NSASTParse *v4; // [esp+0h] [ebp-78h] + int v5; // [esp+10h] [ebp-68h] + int v6; // [esp+14h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-60h] + void *v10[8]; // [esp+58h] [ebp-20h] BYREF + + v6 = night::NSASTParse::ast_expression_no_comma(v3); + std::string::basic_string(v10, ":"); + night::NSASTParse::ignore_punc(a1, (int)v10); + v4 = v1; + std::string::_M_dispose(v10); + v5 = night::NSASTParse::ast_expression_no_comma(v4); + lpuexcpta = (struct _Unwind_Exception *)a1[6]; + std::string::basic_string((char *)v10, (int)&night::NS_TYPE_TERNARY); + lpuexcptb = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcpta, (int)v10); + std::string::_M_dispose(v10); + *((_DWORD *)lpuexcptb + 45) = v6; + *((_DWORD *)lpuexcptb + 46) = v5; + return lpuexcptb; +} +// 4149ED: variable 'v3' is possibly undefined +// 414A1A: variable 'v1' is possibly undefined + +//----- (00414AC0) -------------------------------------------------------- +void **__thiscall night::NSASTParse::make_list_by_parser( + int *this, + int a2, + int a3, + int a4, + int a5, + char a6, + int a7, + int a8) +{ + unsigned __int8 **v8; // eax + night::NSASTParse *v9; // edx + char *v10; // eax + night::NSASTParse *v12; // [esp+0h] [ebp-88h] + night::NSASTParse *v13; // [esp+0h] [ebp-88h] + int v14; // [esp+1Ch] [ebp-6Ch] + char i; // [esp+20h] [ebp-68h] + void *v16; // [esp+20h] [ebp-68h] + void *v17; // [esp+24h] [ebp-64h] + void **v18; // [esp+24h] [ebp-64h] + char *v20; // [esp+64h] [ebp-24h] BYREF + void *v21[8]; // [esp+68h] [ebp-20h] BYREF + + v17 = (void *)this[6]; + std::string::basic_string((char *)v21, (int)&night::std_v_n); + v18 = (void **)night::NSGod::gen_girl(v17, (int)v21); + std::string::_M_dispose(v21); + night::NSASTParse::ignore_punc(this, a2); + v14 = 0; + for ( i = 1; !night::NSToken::eof(this[7]) && !night::NSASTParse::is_punctuation(this, a3); i = 0 ) + { + if ( !i ) + { + if ( a6 ) + night::NSASTParse::ignore_punc_pass_sem(this, a4); + else + night::NSASTParse::ignore_punc(this, a4); + ++v14; + } + if ( night::NSASTParse::is_punctuation(this, a3) ) + break; + if ( std::operator==("ast_expression_no_comma", a5) ) + { + if ( std::operator==("ast_new_array", a8) ) + { + v8 = night::NSASTParse::is_punctuation(this, a4); + v12 = v9; + if ( v8 ) + { + v16 = (void *)this[6]; + std::string::basic_string((char *)v21, (int)&night::NS_TYPE_SKIP); + v20 = (char *)night::NSGod::gen_son(v16, (int)v21); + std::string::_M_dispose(v21); + goto LABEL_20; + } + } + v10 = (char *)night::NSASTParse::ast_expression_no_comma(v12); + } + else if ( std::operator==("ast_expression", a5) ) + { + v10 = (char *)night::NSASTParse::ast_expression(v13); + } + else + { + if ( !std::operator==("ast_varname", a5) ) + goto LABEL_20; + v10 = (char *)night::NSASTParse::ast_varname((int)this); + } + v20 = v10; +LABEL_20: + std::vector::push_back(v18, &v20); + } + if ( a7 != -1 && v14 != a7 ) + return 0; + night::NSASTParse::ignore_punc(this, a3); + return v18; +} +// 414C14: variable 'v9' is possibly undefined +// 414C5F: variable 'v12' is possibly undefined +// 414C87: variable 'v13' is possibly undefined + +//----- (00414D44) -------------------------------------------------------- +_DWORD *__thiscall night::NSASTParse::ast_call(int *this, int a2) +{ + _DWORD *v2; // eax + void ***i; // eax + unsigned __int8 **v4; // eax + unsigned __int8 **v5; // eax + unsigned __int8 **v7; // [esp+28h] [ebp-D0h] + unsigned __int8 **v8; // [esp+2Ch] [ebp-CCh] + unsigned __int8 **v9; // [esp+2Ch] [ebp-CCh] + int v10; // [esp+30h] [ebp-C8h] + int v11; // [esp+30h] [ebp-C8h] + int v12; // [esp+30h] [ebp-C8h] + void *v13; // [esp+34h] [ebp-C4h] + void *v14; // [esp+34h] [ebp-C4h] + _DWORD *v15; // [esp+34h] [ebp-C4h] + struct _Unwind_Exception *lpuexcpta; // [esp+38h] [ebp-C0h] + void **list_by_parser; // [esp+70h] [ebp-88h] BYREF + void **v19; // [esp+74h] [ebp-84h] BYREF + void *v20[6]; // [esp+78h] [ebp-80h] BYREF + void *v21[6]; // [esp+90h] [ebp-68h] BYREF + void *v22[6]; // [esp+A8h] [ebp-50h] BYREF + int v23[6]; // [esp+C0h] [ebp-38h] BYREF + void *v24[8]; // [esp+D8h] [ebp-20h] BYREF + + v13 = (void *)this[6]; + std::string::basic_string((char *)v24, (int)&night::std_v_v_n); + v10 = night::NSGod::gen_girl(v13, (int)v24); + std::string::_M_dispose(v24); + v14 = (void *)this[6]; + std::string::basic_string((char *)v24, (int)&night::NS_TYPE_CALL); + v15 = night::NSGod::gen_son(v14, (int)v24); + std::string::_M_dispose(v24); + v15[55] = a2; + v15[56] = v10; + v8 = night::NSToken::peek(this[7]); + std::string::basic_string(v24, (char *)asc_5527F4); + v7 = night::NSASTParse::is_punctuation(this, (int)v24); + std::string::_M_dispose(v24); + if ( !v7 ) + { + lpuexcpta = (struct _Unwind_Exception *)this[7]; + std::operator+((int)v23, "Unexpected token `", (int)(v8 + 15)); + v2 = std::string::append(v23, "`"); + std::string::basic_string(v24, v2); + night::NSToken::err((int)lpuexcpta, (int)v24, 0, 0, 0); + } + std::string::basic_string(v24, (char *)&byte_551F04); + std::string::basic_string((void **)v23, "ast_expression_no_comma"); + std::string::basic_string(v22, ","); + std::string::basic_string(v21, (char *)&asc_5527F4[2]); + std::string::basic_string(v20, (char *)asc_5527F4); + list_by_parser = night::NSASTParse::make_list_by_parser(this, (int)v20, (int)v21, (int)v22, (int)v23, 0, -1, (int)v24); + std::string::_M_dispose(v20); + std::string::_M_dispose(v21); + std::string::_M_dispose(v22); + std::string::_M_dispose((void **)v23); + std::string::_M_dispose(v24); + for ( i = &list_by_parser; ; i = &v19 ) + { + std::vector>>::push_back(v10, i); + std::string::basic_string(v24, (char *)asc_5527F4); + v9 = night::NSASTParse::is_punctuation(this, (int)v24); + std::string::_M_dispose(v24); + if ( !v9 ) + break; + std::string::basic_string(v24, (char *)&byte_551F04); + std::string::basic_string((void **)v23, "ast_expression_no_comma"); + std::string::basic_string(v22, ","); + std::string::basic_string(v21, (char *)&asc_5527F4[2]); + std::string::basic_string(v20, (char *)asc_5527F4); + v19 = night::NSASTParse::make_list_by_parser(this, (int)v20, (int)v21, (int)v22, (int)v23, 0, -1, (int)v24); + std::string::_M_dispose(v20); + std::string::_M_dispose(v21); + std::string::_M_dispose(v22); + std::string::_M_dispose((void **)v23); + std::string::_M_dispose(v24); + } + v4 = night::NSToken::peek(this[7]); + if ( v4 ) + { + v11 = (int)(v4 + 15); + if ( std::operator==("[", (int)(v4 + 15)) ) + { + v15 = night::NSASTParse::ast_obj_op(this, (int)v15); + std::string::basic_string(v24, (char *)asc_5527F4); + v5 = night::NSASTParse::is_punctuation(this, (int)v24); + } + else + { + if ( !std::operator==(".", v11) ) + return v15; + v15 = (_DWORD *)night::NSASTParse::ast_obj_dot(v15); + std::string::basic_string(v24, (char *)asc_5527F4); + v5 = night::NSASTParse::is_punctuation(this, (int)v24); + } + v12 = (int)v5; + std::string::_M_dispose(v24); + if ( v12 ) + return (_DWORD *)night::NSASTParse::ast_call(v15); + } + return v15; +} +// 4144FA: using guessed type __int64 __stdcall night::NSASTParse::ast_obj_dot(_DWORD); + +//----- (00415374) -------------------------------------------------------- +_DWORD *__thiscall night::NSASTParse::make_call_or_just_expression(int *this, _DWORD *a2) +{ + void *v4[8]; // [esp+58h] [ebp-20h] BYREF + + if ( !std::operator==((int)&night::NS_TYPE_PROG, (int)a2) + && !std::operator==((int)&night::NS_TYPE_B_TYPE, (int)a2) + && !std::operator==((int)&night::NS_TYPE_KW, (int)a2) + && (!std::operator==((int)&night::NS_TYPE_FUNC, (int)a2) + || !(unsigned __int8)std::operator!=((char *)&byte_551F04, (int)(a2 + 33))) ) + { + std::string::basic_string(v4, (char *)asc_5527F4); + if ( night::NSASTParse::is_punctuation(this, (int)v4) ) + a2 = night::NSASTParse::ast_call(this, (int)a2); + std::string::_M_dispose(v4); + } + return a2; +} + +//----- (004154B2) -------------------------------------------------------- +_DWORD *__fastcall night::NSASTParse::ast_expression(int *a1) +{ + _DWORD *v1; // eax + _DWORD *binary_or_just_value; // eax + bool v4; // [esp+4h] [ebp-24h] + + v1 = night::NSASTParse::ast_dispatch(a1, 0, v4); + binary_or_just_value = (_DWORD *)night::NSASTParse::make_binary_or_just_value(a1, (int)v1, 0); + return night::NSASTParse::make_call_or_just_expression(a1, binary_or_just_value); +} +// 4154C2: variable 'v4' is possibly undefined + +//----- (004154EC) -------------------------------------------------------- +_DWORD *__thiscall night::NSASTParse::ast_obj_op(int *this, int a2) +{ + night::NSASTParse *v2; // eax + unsigned __int8 **v3; // eax + unsigned __int8 **v5; // eax + night::NSASTParse *v7; // [esp+0h] [ebp-88h] + bool v8; // [esp+4h] [ebp-84h] + void **v9; // [esp+1Ch] [ebp-6Ch] + int v10; // [esp+20h] [ebp-68h] + void *v11; // [esp+24h] [ebp-64h] + void *v12; // [esp+24h] [ebp-64h] + _DWORD *v13; // [esp+24h] [ebp-64h] + void *v15[8]; // [esp+68h] [ebp-20h] BYREF + + v11 = (void *)this[6]; + std::string::basic_string((char *)v15, (int)&night::std_v_n); + v9 = (void **)night::NSGod::gen_girl(v11, (int)v15); + std::string::_M_dispose(v15); + v12 = (void *)this[6]; + std::string::basic_string((char *)v15, (int)&night::NS_TYPE_OBJ_PROPERTY); + v13 = night::NSGod::gen_son(v12, (int)v15); + std::string::_M_dispose(v15); + v13[48] = a2; + v13[49] = v9; + do + { + std::string::basic_string(v15, "["); + night::NSASTParse::ignore_punc(this, (int)v15); + v7 = v2; + std::string::_M_dispose(v15); + v15[0] = (void *)night::NSASTParse::ast_expression(v7); + std::vector::emplace_back(v9, (char **)v15); + std::string::basic_string(v15, "]"); + night::NSASTParse::ignore_punc(this, (int)v15); + std::string::_M_dispose(v15); + v3 = night::NSToken::peek(this[7]); + if ( !v3 ) + break; + v10 = (int)(v3 + 15); + if ( std::operator==(";", (int)(v3 + 15)) ) + break; + } + while ( !(unsigned __int8)std::operator!=("[", v10) ); + if ( night::NSASTParse::is_obj_op_self(this, 0, v8) ) + return night::NSASTParse::ast_obj_op_self(this, (int)v13); + v5 = night::NSToken::peek(this[7]); + if ( v5 && std::operator==(".", (int)(v5 + 15)) ) + return (_DWORD *)night::NSASTParse::ast_obj_dot(v13); + return v13; +} +// 4155E3: variable 'v2' is possibly undefined +// 415697: variable 'v8' is possibly undefined +// 4144FA: using guessed type __int64 __stdcall night::NSASTParse::ast_obj_dot(_DWORD); + +//----- (00415736) -------------------------------------------------------- +_DWORD *__fastcall night::NSASTParse::ast_while(int *a1) +{ + night::NSASTParse *v1; // edx + night::NSASTParse *v2; // eax + night::NSASTParse *v4; // [esp+0h] [ebp-78h] + night::NSASTParse *v5; // [esp+0h] [ebp-78h] + void *v6; // [esp+14h] [ebp-64h] + _DWORD *v7; // [esp+14h] [ebp-64h] + void *v9[8]; // [esp+58h] [ebp-20h] BYREF + + night::NSToken::next(a1[7]); + v6 = (void *)a1[6]; + std::string::basic_string((char *)v9, (int)&night::NS_TYPE_WHILE); + v7 = night::NSGod::gen_son(v6, (int)v9); + std::string::_M_dispose(v9); + v7[51] = 0; + v7[54] = 0; + std::string::basic_string(v9, (char *)asc_5527F4); + night::NSASTParse::ignore_punc(a1, (int)v9); + v4 = v1; + std::string::_M_dispose(v9); + v7[51] = night::NSASTParse::ast_expression(v4); + std::string::basic_string(v9, (char *)&asc_5527F4[2]); + night::NSASTParse::ignore_punc(a1, (int)v9); + v5 = v2; + std::string::_M_dispose(v9); + ++a1[9]; + ++a1[10]; + v7[54] = night::NSASTParse::ast_expression(v5); + --a1[9]; + --a1[10]; + return v7; +} +// 4157F4: variable 'v1' is possibly undefined +// 41583A: variable 'v2' is possibly undefined + +//----- (004158AC) -------------------------------------------------------- +_DWORD *__fastcall night::NSASTParse::ast_do_while(int *a1) +{ + int v1; // eax + unsigned __int8 **v2; // eax + night::NSASTParse *v3; // edx + night::NSASTParse *v4; // edx + night::NSASTParse *v6; // [esp+0h] [ebp-88h] + night::NSASTParse *v7; // [esp+0h] [ebp-88h] + unsigned int v8; // [esp+18h] [ebp-70h] + unsigned __int8 **v9; // [esp+1Ch] [ebp-6Ch] + unsigned int v10; // [esp+20h] [ebp-68h] + void *v11; // [esp+24h] [ebp-64h] + _DWORD *v12; // [esp+24h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+28h] [ebp-60h] + void *v15[8]; // [esp+68h] [ebp-20h] BYREF + + night::NSToken::next(a1[7]); + v11 = (void *)a1[6]; + std::string::basic_string((char *)v15, (int)&night::NS_TYPE_DO_WHILE); + v12 = night::NSGod::gen_son(v11, (int)v15); + std::string::_M_dispose(v15); + v12[51] = 0; + v12[54] = 0; + v1 = *(_DWORD *)(a1[7] + 4); + v10 = *(_DWORD *)(v1 + 56); + v8 = *(_DWORD *)(v1 + 52); + std::string::basic_string(v15, (char *)&asc_5527F4[4]); + v2 = night::NSASTParse::is_punctuation(a1, (int)v15); + v6 = v3; + v9 = v2; + std::string::_M_dispose(v15); + if ( !v9 ) + { + lpuexcpta = (struct _Unwind_Exception *)a1[7]; + std::string::basic_string(v15, "Expected `{`"); + night::NSToken::err((int)lpuexcpta, (int)v15, v8, v10, 1); + } + ++a1[9]; + ++a1[10]; + v12[54] = night::NSASTParse::ast_expression(v6); + --a1[9]; + --a1[10]; + std::string::basic_string(v15, "while"); + night::NSASTParse::ignore_buildin_kw(a1, (int)v15); + std::string::_M_dispose(v15); + std::string::basic_string(v15, (char *)asc_5527F4); + night::NSASTParse::ignore_punc(a1, (int)v15); + v7 = v4; + std::string::_M_dispose(v15); + v12[51] = night::NSASTParse::ast_expression(v7); + std::string::basic_string(v15, (char *)&asc_5527F4[2]); + night::NSASTParse::ignore_punc(a1, (int)v15); + std::string::_M_dispose(v15); + return v12; +} +// 415982: variable 'v3' is possibly undefined +// 415A5F: variable 'v4' is possibly undefined + +//----- (00415AF0) -------------------------------------------------------- +_DWORD *__fastcall night::NSASTParse::ast_switch(int *a1) +{ + night::NSASTParse *v1; // eax + int v2; // ecx + int v3; // eax + unsigned __int8 **v4; // eax + unsigned __int8 **v5; // eax + night::NSASTParse *v6; // edx + unsigned __int8 **v7; // eax + night::NSASTParse *v8; // edx + unsigned __int8 **v9; // eax + night::NSASTParse *v10; // edx + int v11; // eax + night::NSASTParse *v12; // edx + unsigned __int8 **v13; // eax + night::NSASTParse *v14; // edx + night::NSASTParse *v16; // [esp+0h] [ebp-B8h] + night::NSASTParse *v17; // [esp+0h] [ebp-B8h] + night::NSASTParse *v18; // [esp+0h] [ebp-B8h] + unsigned int v19; // [esp+10h] [ebp-A8h] + int v20; // [esp+14h] [ebp-A4h] + unsigned int v21; // [esp+14h] [ebp-A4h] + int v22; // [esp+1Ch] [ebp-9Ch] + bool v23; // [esp+1Ch] [ebp-9Ch] + unsigned __int8 **v24; // [esp+1Ch] [ebp-9Ch] + unsigned __int8 **v25; // [esp+1Ch] [ebp-9Ch] + void *v26; // [esp+1Ch] [ebp-9Ch] + int v27; // [esp+20h] [ebp-98h] + unsigned __int8 **v28; // [esp+20h] [ebp-98h] + unsigned __int8 **v29; // [esp+20h] [ebp-98h] + bool v30; // [esp+20h] [ebp-98h] + void **v31; // [esp+20h] [ebp-98h] + bool v32; // [esp+20h] [ebp-98h] + void *v33; // [esp+20h] [ebp-98h] + void **v34; // [esp+20h] [ebp-98h] + unsigned __int8 **v35; // [esp+20h] [ebp-98h] + void *v36; // [esp+20h] [ebp-98h] + void **v37; // [esp+20h] [ebp-98h] + unsigned __int8 **v38; // [esp+20h] [ebp-98h] + unsigned __int8 **v39; // [esp+20h] [ebp-98h] + unsigned __int8 **v40; // [esp+20h] [ebp-98h] + void **v41; // [esp+20h] [ebp-98h] + unsigned __int8 **v42; // [esp+20h] [ebp-98h] + void *v43; // [esp+24h] [ebp-94h] + void *v44; // [esp+24h] [ebp-94h] + void *v45; // [esp+24h] [ebp-94h] + void *v46; // [esp+24h] [ebp-94h] + _DWORD *v47; // [esp+24h] [ebp-94h] + struct _Unwind_Exception *lpuexcpta; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcptb; // [esp+28h] [ebp-90h] + struct _Unwind_Exception *lpuexcptc; // [esp+28h] [ebp-90h] + void **v52; // [esp+64h] [ebp-54h] BYREF + void *v53[6]; // [esp+68h] [ebp-50h] BYREF + void *v54[6]; // [esp+80h] [ebp-38h] BYREF + void *v55[8]; // [esp+98h] [ebp-20h] BYREF + + night::NSToken::next(a1[7]); + v43 = (void *)a1[6]; + std::string::basic_string((char *)v55, (int)&night::std_v_n); + v27 = night::NSGod::gen_girl(v43, (int)v55); + std::string::_M_dispose(v55); + v44 = (void *)a1[6]; + std::string::basic_string((char *)v55, (int)&night::std_v_v_n); + v22 = night::NSGod::gen_girl(v44, (int)v55); + std::string::_M_dispose(v55); + v45 = (void *)a1[6]; + std::string::basic_string((char *)v55, (int)&night::std_v_n); + v20 = night::NSGod::gen_girl(v45, (int)v55); + std::string::_M_dispose(v55); + v46 = (void *)a1[6]; + std::string::basic_string((char *)v55, (int)&night::NS_TYPE_SWITCH); + v47 = night::NSGod::gen_son(v46, (int)v55); + std::string::_M_dispose(v55); + v47[58] = v27; + v47[51] = 0; + v47[59] = v22; + v47[60] = v20; + std::string::basic_string(v55, (char *)asc_5527F4); + night::NSASTParse::ignore_punc(a1, (int)v55); + v16 = v1; + std::string::_M_dispose(v55); + v47[51] = night::NSASTParse::ast_expression(v16); + std::string::basic_string(v55, (char *)&asc_5527F4[2]); + night::NSASTParse::ignore_punc(a1, (int)v55); + std::string::_M_dispose(v55); + std::string::basic_string(v55, (char *)&asc_5527F4[4]); + night::NSASTParse::ignore_punc(a1, (int)v55); + std::string::_M_dispose(v55); + ++a1[9]; + while ( 1 ) + { + std::string::basic_string(v55, "case"); + v28 = night::NSASTParse::is_buildin_keywords(a1, (int)v55); + std::string::_M_dispose(v55); + if ( !v28 ) + break; + std::string::basic_string(v55, "case"); + night::NSASTParse::ignore_buildin_kw(a1, (int)v55); + std::string::_M_dispose(v55); + v2 = a1[7]; + v3 = *(_DWORD *)(v2 + 4); + v19 = *(_DWORD *)(v3 + 52); + v21 = *(_DWORD *)(v3 + 56); + v29 = night::NSToken::peek(v2); + if ( !v29 ) + goto LABEL_4; + std::string::basic_string(v54, "-"); + v23 = 1; + if ( !night::NSASTParse::is_op(a1, (int)v54) ) + { + std::string::basic_string(v55, "+"); + v23 = night::NSASTParse::is_op(a1, (int)v55) != 0; + std::string::_M_dispose(v55); + } + std::string::_M_dispose(v54); + if ( v23 ) + { + night::NSToken::next(a1[7]); + v4 = night::NSToken::peek(a1[7]); + v24 = v4; + if ( !v4 || !std::operator==((int)&night::NS_TYPE_NUM, (int)v4) ) + goto LABEL_4; + v25 = v24 + 15; + std::operator+((char *)v55, (int)(v29 + 15), (int)v25); + std::string::operator=(v25, (int)v55); + std::string::_M_dispose(v55); + } + else if ( !std::operator==((int)&night::NS_TYPE_VAR, (int)v29) + && !std::operator==((int)&night::NS_TYPE_NUM, (int)v29) + && !std::operator==((int)&night::NS_TYPE_STR, (int)v29) ) + { + std::string::basic_string(v54, "true"); + if ( night::NSASTParse::is_buildin_keywords(a1, (int)v54) ) + { + v30 = 1; + } + else + { + std::string::basic_string(v55, "false"); + v30 = night::NSASTParse::is_buildin_keywords(a1, (int)v55) != 0; + std::string::_M_dispose(v55); + } + std::string::_M_dispose(v54); + if ( !v30 ) + { +LABEL_4: + lpuexcpta = (struct _Unwind_Exception *)a1[7]; + std::string::basic_string(v55, "Expected variable|numer|boolean|string"); + night::NSToken::err((int)lpuexcpta, (int)v55, v19, v21, 1); + } + } + v31 = (void **)v47[58]; + v55[0] = night::NSToken::next(a1[7]); + std::vector::emplace_back(v31, (char **)v55); + std::string::basic_string(v55, ":"); + night::NSASTParse::ignore_punc(a1, (int)v55); + std::string::_M_dispose(v55); + v52 = 0; + while ( 1 ) + { + std::string::basic_string(v53, "case"); + v5 = night::NSASTParse::is_buildin_keywords(a1, (int)v53); + v17 = v6; + if ( v5 ) + { + v32 = 0; + } + else + { + std::string::basic_string(v54, "default"); + v7 = night::NSASTParse::is_buildin_keywords(a1, (int)v54); + v32 = 0; + v17 = v8; + if ( !v7 ) + { + std::string::basic_string(v55, "}"); + v9 = night::NSASTParse::is_punctuation(a1, (int)v55); + v17 = v10; + v32 = v9 == 0; + std::string::_M_dispose(v55); + } + std::string::_M_dispose(v54); + } + std::string::_M_dispose(v53); + if ( !v32 ) + break; + if ( !v52 ) + { + v33 = (void *)a1[6]; + std::string::basic_string((char *)v55, (int)&night::std_v_n); + v11 = night::NSGod::gen_girl(v33, (int)v55); + v17 = v12; + v52 = (void **)v11; + std::string::_M_dispose(v55); + } + v34 = v52; + v55[0] = (void *)night::NSASTParse::ast_expression(v17); + std::vector::emplace_back(v34, (char **)v55); + while ( !night::NSToken::eof(a1[7]) ) + { + std::string::basic_string(v55, ";"); + v35 = night::NSASTParse::is_punctuation(a1, (int)v55); + std::string::_M_dispose(v55); + if ( !v35 ) + break; + night::NSToken::next(a1[7]); + } + } + if ( !v52 ) + { + v36 = (void *)a1[6]; + std::string::basic_string((char *)v55, (int)&night::std_v_n); + v52 = (void **)night::NSGod::gen_girl(v36, (int)v55); + std::string::_M_dispose(v55); + v37 = v52; + v26 = (void *)a1[6]; + std::string::basic_string((char *)v55, (int)&night::NS_TYPE_SKIP); + v54[0] = night::NSGod::gen_son(v26, (int)v55); + std::vector::emplace_back(v37, (char **)v54); + std::string::_M_dispose(v55); + } + std::vector>>::push_back(v47[59], &v52); + if ( night::NSToken::eof(a1[7]) ) + { + lpuexcptb = (struct _Unwind_Exception *)a1[7]; + std::string::basic_string(v55, "End of file"); + night::NSToken::err((int)lpuexcptb, (int)v55, 0, 0, 0); + } + std::string::basic_string(v55, "}"); + v38 = night::NSASTParse::is_punctuation(a1, (int)v55); + std::string::_M_dispose(v55); + if ( v38 ) + break; + std::string::basic_string(v55, "default"); + v39 = night::NSASTParse::is_buildin_keywords(a1, (int)v55); + std::string::_M_dispose(v55); + if ( v39 ) + { + std::string::basic_string(v55, "default"); + night::NSASTParse::ignore_buildin_kw(a1, (int)v55); + std::string::_M_dispose(v55); + std::string::basic_string(v55, ":"); + night::NSASTParse::ignore_punc(a1, (int)v55); + std::string::_M_dispose(v55); + while ( 1 ) + { + std::string::basic_string(v55, "}"); + v13 = night::NSASTParse::is_punctuation(a1, (int)v55); + v18 = v14; + v40 = v13; + std::string::_M_dispose(v55); + if ( v40 ) + break; + v41 = (void **)v47[60]; + v55[0] = (void *)night::NSASTParse::ast_expression(v18); + std::vector::emplace_back(v41, (char **)v55); + if ( night::NSToken::eof(a1[7]) ) + { + lpuexcptc = (struct _Unwind_Exception *)a1[7]; + std::string::basic_string(v55, "End of file"); + night::NSToken::err((int)lpuexcptc, (int)v55, 0, 0, 0); + } + while ( 1 ) + { + std::string::basic_string(v55, ";"); + v42 = night::NSASTParse::is_punctuation(a1, (int)v55); + std::string::_M_dispose(v55); + if ( !v42 ) + break; + night::NSToken::next(a1[7]); + } + } + break; + } + } + --a1[9]; + std::string::basic_string(v55, "}"); + night::NSASTParse::ignore_punc(a1, (int)v55); + std::string::_M_dispose(v55); + return v47; +} +// 415CEB: variable 'v1' is possibly undefined +// 416197: variable 'v6' is possibly undefined +// 4161E4: variable 'v8' is possibly undefined +// 41621E: variable 'v10' is possibly undefined +// 416297: variable 'v12' is possibly undefined +// 41660C: variable 'v14' is possibly undefined + +//----- (00416800) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall night::NSASTParse::top_down(int *a1) +{ + int v1; // eax + unsigned __int8 **v2; // eax + unsigned int v4; // [esp+14h] [ebp-74h] + unsigned int v5; // [esp+18h] [ebp-70h] + void **v6; // [esp+1Ch] [ebp-6Ch] + int v7; // [esp+20h] [ebp-68h] + struct _Unwind_Exception *lpuexcptb; // [esp+28h] [ebp-60h] + struct _Unwind_Exception *lpuexcpt; // [esp+28h] [ebp-60h] + struct _Unwind_Exception *lpuexcpta; // [esp+28h] [ebp-60h] + struct _Unwind_Exception *lpuexcptc; // [esp+28h] [ebp-60h] + unsigned __int8 **lpuexcptd; // [esp+28h] [ebp-60h] + struct _Unwind_Exception *lpuexcpte; // [esp+28h] [ebp-60h] + struct _Unwind_Exception *lpuexcptf; // [esp+28h] [ebp-60h] + struct _Unwind_Exception *v16; // [esp+64h] [ebp-24h] BYREF + void *v17[8]; // [esp+68h] [ebp-20h] BYREF + + lpuexcptb = (struct _Unwind_Exception *)a1[6]; + std::string::basic_string((char *)v17, (int)&night::std_v_n); + v6 = (void **)night::NSGod::gen_girl(lpuexcptb, (int)v17); + std::string::_M_dispose(v17); + while ( !night::NSToken::eof(a1[7]) ) + { + v16 = (struct _Unwind_Exception *)night::NSASTParse::ast_expression(a1); + std::vector::push_back(v6, (char **)&v16); + v7 = a1[7]; + v1 = *(_DWORD *)(v7 + 4); + v5 = *(_DWORD *)(v1 + 56); + v4 = *(_DWORD *)(v1 + 52); + lpuexcpt = v16; + if ( std::operator==((int)&night::NS_TYPE_BOOL, (int)v16) + || std::operator==((int)&night::NS_TYPE_VAR, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_STR, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_NUM, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_B_TYPE, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_KW, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_OP_SELF, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_BINARY, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_ASSIGN, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_TERNARY, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_OBJ_DOT, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_OBJ_PROPERTY, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_OBJ_SELF_OP, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_ARRAY, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_BRACKET, (int)lpuexcpt) + || std::operator==((int)&night::NS_TYPE_CALL, (int)lpuexcpt) ) + { + v2 = night::NSToken::peek(v7); + lpuexcpta = (struct _Unwind_Exception *)v2; + if ( v2 ) + { + if ( (unsigned __int8)std::operator!=(";", (int)(v2 + 15)) + && std::string::find((int *)lpuexcpta + 21, 10, 0) == (char *)-1 ) + { + lpuexcptc = (struct _Unwind_Exception *)a1[7]; + std::string::basic_string(v17, "Expected LineFeed"); + night::NSToken::err((int)lpuexcptc, (int)v17, v4, v5, 1); + } + } + } + while ( !night::NSToken::eof(a1[7]) ) + { + std::string::basic_string(v17, ";"); + lpuexcptd = night::NSASTParse::is_punctuation(a1, (int)v17); + std::string::_M_dispose(v17); + if ( !lpuexcptd ) + break; + night::NSToken::next(a1[7]); + } + } + lpuexcpte = (struct _Unwind_Exception *)a1[6]; + std::string::basic_string((char *)v17, (int)&night::NS_TYPE_PROG); + lpuexcptf = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcpte, (int)v17); + std::string::_M_dispose(v17); + *((_DWORD *)lpuexcptf + 57) = v6; + std::string::operator=((unsigned int *)lpuexcptf + 27, (char *)&byte_551F04); + return lpuexcptf; +} + +//----- (00416C10) -------------------------------------------------------- +unsigned __int8 **__fastcall night::NSASTParse::ast_require(int *a1) +{ + int v1; // ecx + int v2; // eax + char *v3; // eax + unsigned __int8 **v4; // ecx + unsigned __int8 **v5; // eax + _DWORD *v6; // eax + unsigned int v8; // [esp+18h] [ebp-90h] + unsigned int v9; // [esp+1Ch] [ebp-8Ch] + void *v10; // [esp+20h] [ebp-88h] + char *v11; // [esp+20h] [ebp-88h] + void *v12; // [esp+20h] [ebp-88h] + void *v13; // [esp+20h] [ebp-88h] + void *v14; // [esp+20h] [ebp-88h] + void *v15; // [esp+20h] [ebp-88h] + void *v16; // [esp+24h] [ebp-84h] + void **v17; // [esp+24h] [ebp-84h] + int v18; // [esp+24h] [ebp-84h] + struct _Unwind_Exception *lpuexcpta; // [esp+28h] [ebp-80h] + struct _Unwind_Exception *lpuexcptb; // [esp+28h] [ebp-80h] + unsigned __int8 **v22; // [esp+68h] [ebp-40h] BYREF + unsigned __int8 **v23; // [esp+6Ch] [ebp-3Ch] BYREF + int v24[2]; // [esp+70h] [ebp-38h] BYREF + char v25; // [esp+78h] [ebp-30h] BYREF + int v26[8]; // [esp+88h] [ebp-20h] BYREF + + v16 = (void *)a1[6]; + std::string::basic_string((char *)v26, (int)&night::std_v_n); + v17 = (void **)night::NSGod::gen_girl(v16, (int)v26); + std::string::_M_dispose((void **)v26); + v22 = night::NSToken::next(a1[7]); + std::operator+((char *)v26, (int)&night::nsv_, (int)(v22 + 15)); + std::string::operator=(v22 + 15, (int)v26); + std::string::_M_dispose((void **)v26); + std::vector::push_back(v17, (char **)&v22); + v10 = (void *)a1[6]; + std::string::basic_string((char *)v26, (int)&night::NS_TYPE_PUNC); + v22 = (unsigned __int8 **)night::NSGod::gen_son(v10, (int)v26); + std::string::_M_dispose((void **)v26); + std::string::operator=((unsigned int *)v22 + 15, (char *)asc_5527F4); + std::vector::push_back(v17, (char **)&v22); + night::NSToken::next(a1[7]); + v1 = a1[7]; + v2 = *(_DWORD *)(v1 + 4); + v8 = *(_DWORD *)(v2 + 52); + v9 = *(_DWORD *)(v2 + 56); + v3 = (char *)night::NSToken::next(v1); + v11 = v3; + v23 = (unsigned __int8 **)v3; + if ( !v3 || (unsigned __int8)std::operator!=((int)&night::NS_TYPE_STR, (int)v3) ) + { + lpuexcpta = (struct _Unwind_Exception *)a1[7]; + std::string::basic_string((void **)v26, "Expected string"); + night::NSToken::err((int)lpuexcpta, (int)v26, v8, v9, 1); + } + v24[1] = 0; + v24[0] = (int)&v25; + v25 = 0; + if ( night::str::path_combine(a1, (_DWORD *)v11 + 15, (int)v24) ) + { + lpuexcptb = (struct _Unwind_Exception *)a1[7]; + std::string::basic_string((void **)v26, "Expected wxs file"); + night::NSToken::err((int)lpuexcptb, (int)v26, v8, v9, 1); + } + std::operator+((int)v26, "p_", (int)v24); + std::string::operator=(v23 + 15, (int)v26); + std::string::_M_dispose((void **)v26); + std::vector::push_back(v17, (char **)&v23); + std::string::_M_dispose((void **)v24); + v12 = (void *)a1[6]; + std::string::basic_string((char *)v26, (int)&night::NS_TYPE_PUNC); + v22 = (unsigned __int8 **)night::NSGod::gen_son(v12, (int)v26); + std::string::_M_dispose((void **)v26); + std::string::operator=((unsigned int *)v22 + 15, (char *)&asc_5527F4[2]); + std::vector::push_back(v17, (char **)&v22); + night::NSToken::next(a1[7]); + v13 = (void *)a1[6]; + std::string::basic_string((char *)v26, (int)&night::NS_TYPE_PUNC); + v22 = (unsigned __int8 **)night::NSGod::gen_son(v13, (int)v26); + std::string::_M_dispose((void **)v26); + std::string::operator=((unsigned int *)v22 + 15, (char *)asc_5527F4); + std::vector::push_back(v17, (char **)&v22); + v14 = (void *)a1[6]; + std::string::basic_string((char *)v26, (int)&night::NS_TYPE_PUNC); + v22 = (unsigned __int8 **)night::NSGod::gen_son(v14, (int)v26); + std::string::_M_dispose((void **)v26); + std::string::operator=((unsigned int *)v22 + 15, (char *)&asc_5527F4[2]); + std::vector::push_back(v17, (char **)&v22); + v15 = (void *)a1[6]; + std::string::basic_string((char *)v26, (int)&night::NS_TYPE_PROG_NO_SEM_REQUIRE); + v22 = (unsigned __int8 **)night::NSGod::gen_son(v15, (int)v26); + std::string::_M_dispose((void **)v26); + v4 = v22; + v22[57] = (unsigned __int8 *)v17; + std::string::operator=((unsigned int *)v4 + 27, (char *)&byte_551F04); + v5 = night::NSToken::peek(a1[7]); + if ( !v5 ) + return v22; + v18 = (int)(v5 + 15); + if ( !std::operator==("[", (int)(v5 + 15)) ) + { + if ( std::operator==(".", v18) ) + { + v6 = night::NSASTParse::ast_obj_dot(a1, (int)v22); + return (unsigned __int8 **)night::NSASTParse::make_call_or_just_expression(a1, v6); + } + return v22; + } + v6 = night::NSASTParse::ast_obj_op(a1, (int)v22); + return (unsigned __int8 **)night::NSASTParse::make_call_or_just_expression(a1, v6); +} + +//----- (00417150) -------------------------------------------------------- +_DWORD *__fastcall night::NSASTParse::ast_code_block(int *a1) +{ + unsigned int *v1; // ecx + unsigned int *v2; // ecx + void *v4; // [esp+2Ch] [ebp-CCh] + void *v5; // [esp+2Ch] [ebp-CCh] + void **list_by_parser; // [esp+30h] [ebp-C8h] + void *v7; // [esp+30h] [ebp-C8h] + void *v8; // [esp+30h] [ebp-C8h] + void *v9; // [esp+34h] [ebp-C4h] + void **v10; // [esp+34h] [ebp-C4h] + void *v12[6]; // [esp+78h] [ebp-80h] BYREF + void *v13[6]; // [esp+90h] [ebp-68h] BYREF + void *v14[6]; // [esp+A8h] [ebp-50h] BYREF + void *v15[6]; // [esp+C0h] [ebp-38h] BYREF + void *v16[8]; // [esp+D8h] [ebp-20h] BYREF + + std::string::basic_string(v16, (char *)&byte_551F04); + std::string::basic_string(v15, "ast_expression"); + std::string::basic_string(v14, ";"); + std::string::basic_string(v13, "}"); + std::string::basic_string(v12, (char *)&asc_5527F4[4]); + list_by_parser = night::NSASTParse::make_list_by_parser(a1, (int)v12, (int)v13, (int)v14, (int)v15, 1, -1, (int)v16); + std::string::_M_dispose(v12); + std::string::_M_dispose(v13); + std::string::_M_dispose(v14); + std::string::_M_dispose(v15); + std::string::_M_dispose(v16); + v9 = (void *)a1[6]; + std::string::basic_string((char *)v16, (int)&night::std_v_n); + v10 = (void **)night::NSGod::gen_girl(v9, (int)v16); + std::string::_M_dispose(v16); + v4 = (void *)a1[6]; + std::string::basic_string((char *)v16, (int)&night::NS_TYPE_PUNC); + v15[0] = night::NSGod::gen_son(v4, (int)v16); + std::string::_M_dispose(v16); + std::string::operator=((unsigned int *)v15[0] + 15, (char *)&asc_5527F4[4]); + std::vector::push_back(v10, (char **)v15); + if ( *list_by_parser != list_by_parser[1] ) + { + v5 = (void *)a1[6]; + std::string::basic_string((char *)v16, (int)&night::NS_TYPE_PROG); + v15[0] = night::NSGod::gen_son(v5, (int)v16); + std::string::_M_dispose(v16); + v1 = (unsigned int *)v15[0]; + *((_DWORD *)v15[0] + 57) = list_by_parser; + std::string::operator=(v1 + 27, (char *)&byte_551F04); + std::vector::push_back(v10, (char **)v15); + } + v7 = (void *)a1[6]; + std::string::basic_string((char *)v16, (int)&night::NS_TYPE_PUNC); + v15[0] = night::NSGod::gen_son(v7, (int)v16); + std::string::_M_dispose(v16); + std::string::operator=((unsigned int *)v15[0] + 15, "}"); + std::vector::push_back(v10, (char **)v15); + v8 = (void *)a1[6]; + std::string::basic_string((char *)v16, (int)&night::NS_TYPE_PROG_NO_SEM); + v15[0] = night::NSGod::gen_son(v8, (int)v16); + std::string::_M_dispose(v16); + v2 = (unsigned int *)v15[0]; + *((_DWORD *)v15[0] + 57) = v10; + std::string::operator=(v2 + 27, (char *)&byte_551F04); + return night::NSASTParse::make_call_or_just_expression(a1, (_DWORD *)v15[0]); +} + +//----- (00417578) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall night::NSASTParse::ast_function(int *a1) +{ + unsigned int *v2; // [esp+2Ch] [ebp-CCh] + unsigned __int8 **v3; // [esp+30h] [ebp-C8h] + struct _Unwind_Exception *lpuexcpta; // [esp+38h] [ebp-C0h] + struct _Unwind_Exception *lpuexcpt; // [esp+38h] [ebp-C0h] + void *v7[6]; // [esp+78h] [ebp-80h] BYREF + void *v8[6]; // [esp+90h] [ebp-68h] BYREF + void *v9[6]; // [esp+A8h] [ebp-50h] BYREF + void *v10[6]; // [esp+C0h] [ebp-38h] BYREF + void *v11[8]; // [esp+D8h] [ebp-20h] BYREF + + lpuexcpta = (struct _Unwind_Exception *)a1[6]; + std::string::basic_string((char *)v11, (int)&night::NS_TYPE_FUNC); + lpuexcpt = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcpta, (int)v11); + std::string::_M_dispose(v11); + std::string::_M_assign((int)lpuexcpt, (int)&night::NS_TYPE_FUNC); + night::NSToken::next(a1[7]); + v3 = night::NSToken::peek(a1[7]); + v2 = (unsigned int *)((char *)lpuexcpt + 132); + if ( v3 && std::operator==((int)&night::NS_TYPE_VAR, (int)v3) ) + { + std::string::_M_assign((int)v2, (int)(v3 + 15)); + std::string::_M_assign((int)lpuexcpt + 24, (int)(v3 + 6)); + *((_DWORD *)lpuexcpt + 12) = v3[12]; + *((_DWORD *)lpuexcpt + 13) = v3[13]; + night::NSToken::next(a1[7]); + } + else + { + std::string::operator=(v2, (char *)&byte_551F04); + } + std::string::basic_string(v11, (char *)&byte_551F04); + std::string::basic_string(v10, "ast_varname"); + std::string::basic_string(v9, ","); + std::string::basic_string(v8, (char *)&asc_5527F4[2]); + std::string::basic_string(v7, (char *)asc_5527F4); + *((_DWORD *)lpuexcpt + 61) = night::NSASTParse::make_list_by_parser( + a1, + (int)v7, + (int)v8, + (int)v9, + (int)v10, + 0, + -1, + (int)v11); + std::string::_M_dispose(v7); + std::string::_M_dispose(v8); + std::string::_M_dispose(v9); + std::string::_M_dispose(v10); + std::string::_M_dispose(v11); + ++a1[8]; + *((_DWORD *)lpuexcpt + 54) = night::NSASTParse::ast_code_block(a1); + --a1[8]; + return lpuexcpt; +} + +//----- (004178AC) -------------------------------------------------------- +_DWORD *__fastcall night::NSASTParse::ast_new_array(int *a1) +{ + unsigned int *v1; // ecx + unsigned int *v2; // ecx + unsigned __int8 **v3; // eax + void *v6; // [esp+2Ch] [ebp-CCh] + void *v7; // [esp+2Ch] [ebp-CCh] + void **list_by_parser; // [esp+30h] [ebp-C8h] + void *v9; // [esp+30h] [ebp-C8h] + void *v10; // [esp+30h] [ebp-C8h] + int v11; // [esp+30h] [ebp-C8h] + void *v12; // [esp+34h] [ebp-C4h] + void **v13; // [esp+34h] [ebp-C4h] + _DWORD *v14; // [esp+34h] [ebp-C4h] + void *v16[6]; // [esp+78h] [ebp-80h] BYREF + void *v17[6]; // [esp+90h] [ebp-68h] BYREF + void *v18[6]; // [esp+A8h] [ebp-50h] BYREF + void *v19[6]; // [esp+C0h] [ebp-38h] BYREF + void *v20[8]; // [esp+D8h] [ebp-20h] BYREF + + std::string::basic_string(v20, "ast_new_array"); + std::string::basic_string(v19, "ast_expression_no_comma"); + std::string::basic_string(v18, ","); + std::string::basic_string(v17, "]"); + std::string::basic_string(v16, "["); + list_by_parser = night::NSASTParse::make_list_by_parser(a1, (int)v16, (int)v17, (int)v18, (int)v19, 0, -1, (int)v20); + std::string::_M_dispose(v16); + std::string::_M_dispose(v17); + std::string::_M_dispose(v18); + std::string::_M_dispose(v19); + std::string::_M_dispose(v20); + v12 = (void *)a1[6]; + std::string::basic_string((char *)v20, (int)&night::std_v_n); + v13 = (void **)night::NSGod::gen_girl(v12, (int)v20); + std::string::_M_dispose(v20); + v6 = (void *)a1[6]; + std::string::basic_string((char *)v20, (int)&night::NS_TYPE_PUNC); + v19[0] = night::NSGod::gen_son(v6, (int)v20); + std::string::_M_dispose(v20); + std::string::operator=((unsigned int *)v19[0] + 15, "["); + std::vector::push_back(v13, (char **)v19); + if ( *list_by_parser != list_by_parser[1] ) + { + v7 = (void *)a1[6]; + std::string::basic_string((char *)v20, (int)&night::NS_TYPE_PROG); + v19[0] = night::NSGod::gen_son(v7, (int)v20); + std::string::_M_dispose(v20); + v1 = (unsigned int *)v19[0]; + *((_DWORD *)v19[0] + 57) = list_by_parser; + std::string::operator=(v1 + 27, ","); + std::vector::push_back(v13, (char **)v19); + } + v9 = (void *)a1[6]; + std::string::basic_string((char *)v20, (int)&night::NS_TYPE_PUNC); + v19[0] = night::NSGod::gen_son(v9, (int)v20); + std::string::_M_dispose(v20); + std::string::operator=((unsigned int *)v19[0] + 15, "]"); + std::vector::push_back(v13, (char **)v19); + v10 = (void *)a1[6]; + std::string::basic_string((char *)v20, (int)&night::NS_TYPE_ARRAY); + v19[0] = night::NSGod::gen_son(v10, (int)v20); + std::string::_M_dispose(v20); + v2 = (unsigned int *)v19[0]; + *((_DWORD *)v19[0] + 57) = v13; + std::string::operator=(v2 + 27, (char *)&byte_551F04); + v14 = night::NSASTParse::make_call_or_just_expression(a1, (_DWORD *)v19[0]); + v3 = night::NSToken::peek(a1[7]); + if ( v3 ) + { + v11 = (int)(v3 + 15); + if ( std::operator==("[", (int)(v3 + 15)) ) + return night::NSASTParse::ast_obj_op(a1, (int)v14); + if ( std::operator==(".", v11) ) + return night::NSASTParse::ast_obj_dot(a1, (int)v14); + } + return v14; +} + +//----- (00417D62) -------------------------------------------------------- +_DWORD *__fastcall night::NSASTParse::ast_for(int *a1) +{ + night::NSASTParse *v1; // edx + night::NSASTParse *v3; // [esp+0h] [ebp-F8h] + void *v4; // [esp+2Ch] [ebp-CCh] + int v5; // [esp+30h] [ebp-C8h] + void *v6; // [esp+34h] [ebp-C4h] + _DWORD *v7; // [esp+34h] [ebp-C4h] + struct _Unwind_Exception *lpuexcpta; // [esp+38h] [ebp-C0h] + struct _Unwind_Exception *lpuexcptb; // [esp+38h] [ebp-C0h] + void *v11[6]; // [esp+78h] [ebp-80h] BYREF + void *v12[6]; // [esp+90h] [ebp-68h] BYREF + void *v13[6]; // [esp+A8h] [ebp-50h] BYREF + void *v14[6]; // [esp+C0h] [ebp-38h] BYREF + void *v15[8]; // [esp+D8h] [ebp-20h] BYREF + + night::NSToken::next(a1[7]); + v6 = (void *)a1[6]; + std::string::basic_string((char *)v15, (int)&night::NS_TYPE_FOR); + v7 = night::NSGod::gen_son(v6, (int)v15); + std::string::_M_dispose(v15); + v7[57] = 0; + v7[54] = 0; + std::string::basic_string(v15, (char *)&byte_551F04); + std::string::basic_string(v14, "ast_expression"); + std::string::basic_string(v13, ";"); + std::string::basic_string(v12, (char *)&asc_5527F4[2]); + std::string::basic_string(v11, (char *)asc_5527F4); + v7[57] = night::NSASTParse::make_list_by_parser(a1, (int)v11, (int)v12, (int)v13, (int)v14, 0, 2, (int)v15); + std::string::_M_dispose(v11); + std::string::_M_dispose(v12); + std::string::_M_dispose(v13); + std::string::_M_dispose(v14); + std::string::_M_dispose(v15); + v5 = v7[57]; + if ( !v5 ) + { + lpuexcpta = (struct _Unwind_Exception *)a1[7]; + std::string::basic_string(v15, "Expected `for(xxx;xxx;xxx)`"); + night::NSToken::err((int)lpuexcpta, (int)v15, 0, 0, 0); + } + if ( *(_DWORD *)(v5 + 4) - *(_DWORD *)v5 == 8 ) + { + v4 = (void *)a1[6]; + std::string::basic_string((char *)v15, (int)&night::NS_TYPE_SKIP); + v14[0] = night::NSGod::gen_son(v4, (int)v15); + std::vector::emplace_back((void **)v5, (char **)v14); + v3 = v1; + std::string::_M_dispose(v15); + } + if ( *(_DWORD *)(v7[57] + 4) - *(_DWORD *)v7[57] != 12 ) + { + lpuexcptb = (struct _Unwind_Exception *)a1[7]; + std::string::basic_string(v15, "Expected `for(xxx;xxx;xxx)`"); + night::NSToken::err((int)lpuexcptb, (int)v15, 0, 0, 0); + } + ++a1[9]; + ++a1[10]; + v7[54] = night::NSASTParse::ast_expression(v3); + --a1[9]; + --a1[10]; + return v7; +} +// 418005: variable 'v1' is possibly undefined +// 4180FA: variable 'v3' is possibly undefined + +//----- (0041812E) -------------------------------------------------------- +_DWORD *__fastcall night::NSASTParse::ast_obj_block(int *a1) +{ + bool v1; // zf + unsigned __int8 **v2; // eax + char *v3; // eax + unsigned __int8 **v4; // eax + unsigned __int8 **v5; // eax + char *v6; // ecx + unsigned __int8 **v7; // eax + _DWORD *v8; // eax + _DWORD *v10; // [esp+18h] [ebp-70h] + void *v11; // [esp+1Ch] [ebp-6Ch] + void **v12; // [esp+20h] [ebp-68h] + void *v13; // [esp+24h] [ebp-64h] + void *v14; // [esp+24h] [ebp-64h] + unsigned __int8 **v15; // [esp+24h] [ebp-64h] + int v16; // [esp+24h] [ebp-64h] + int v17; // [esp+24h] [ebp-64h] + void *v18; // [esp+24h] [ebp-64h] + void *v19; // [esp+24h] [ebp-64h] + int v20; // [esp+24h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+28h] [ebp-60h] + struct _Unwind_Exception *lpuexcptb; // [esp+28h] [ebp-60h] + struct _Unwind_Exception *lpuexcptc; // [esp+28h] [ebp-60h] + char *v25; // [esp+64h] [ebp-24h] BYREF + void *v26[8]; // [esp+68h] [ebp-20h] BYREF + + v13 = (void *)a1[6]; + std::string::basic_string((char *)v26, (int)&night::std_v_n); + v12 = (void **)night::NSGod::gen_girl(v13, (int)v26); + std::string::_M_dispose(v26); + std::string::basic_string(v26, (char *)&asc_5527F4[4]); + night::NSASTParse::ignore_punc(a1, (int)v26); + std::string::_M_dispose(v26); + v14 = (void *)a1[6]; + std::string::basic_string((char *)v26, (int)&night::NS_TYPE_PUNC); + v25 = (char *)night::NSGod::gen_son(v14, (int)v26); + std::string::_M_dispose(v26); + std::string::operator=((unsigned int *)v25 + 15, (char *)&asc_5527F4[4]); + std::vector::push_back(v12, &v25); + std::string::basic_string(v26, "}"); + v15 = night::NSASTParse::is_punctuation(a1, (int)v26); + std::string::_M_dispose(v26); + v1 = v15 == 0; +LABEL_2: + if ( v1 ) + { + while ( 1 ) + { + v2 = night::NSToken::next(a1[7]); + v16 = (int)v2; + if ( !v2 + || (unsigned __int8)std::operator!=((int)&night::NS_TYPE_VAR, (int)v2) + && (unsigned __int8)std::operator!=((int)&night::NS_TYPE_STR, v16) ) + { + lpuexcpta = (struct _Unwind_Exception *)a1[7]; + std::string::basic_string(v26, "Expected variable|string"); + night::NSToken::err((int)lpuexcpta, (int)v26, 0, 0, 0); + } + if ( std::operator==((int)&night::NS_TYPE_STR, v16) ) + { + std::operator+((char *)v26, (int)&night::nsv_, v16 + 60); + std::string::operator=((unsigned __int8 **)(v16 + 60), (int)v26); + std::string::_M_dispose(v26); + } + std::string::basic_string(v26, ":"); + night::NSASTParse::ignore_punc(a1, (int)v26); + std::string::_M_dispose(v26); + v10 = night::NSASTParse::ast_expression_no_comma(a1); + v11 = (void *)a1[6]; + std::string::basic_string((char *)v26, (int)&night::NS_TYPE_K_V); + v25 = (char *)night::NSGod::gen_son(v11, (int)v26); + std::string::_M_dispose(v26); + v3 = v25; + *((_DWORD *)v25 + 47) = v16; + *((_DWORD *)v3 + 48) = v10; + std::vector::push_back(v12, &v25); + v4 = night::NSToken::peek(a1[7]); + if ( !v4 ) + { + lpuexcptb = (struct _Unwind_Exception *)a1[7]; + std::string::basic_string(v26, "Expected variable|string"); + night::NSToken::err((int)lpuexcptb, (int)v26, 0, 0, 0); + } + v17 = (int)(v4 + 15); + if ( std::operator==("}", (int)(v4 + 15)) ) + break; + if ( std::operator==(",", v17) ) + { + night::NSToken::next(a1[7]); + v5 = night::NSToken::peek(a1[7]); + if ( !v5 ) + { + lpuexcptc = (struct _Unwind_Exception *)a1[7]; + std::string::basic_string(v26, "Expected variable|string"); + night::NSToken::err((int)lpuexcptc, (int)v26, 0, 0, 0); + } + v1 = !std::operator==("}", (int)(v5 + 15)); + goto LABEL_2; + } + } + } + std::string::basic_string(v26, "}"); + night::NSASTParse::ignore_punc(a1, (int)v26); + std::string::_M_dispose(v26); + v18 = (void *)a1[6]; + std::string::basic_string((char *)v26, (int)&night::NS_TYPE_PUNC); + v25 = (char *)night::NSGod::gen_son(v18, (int)v26); + std::string::_M_dispose(v26); + std::string::operator=((unsigned int *)v25 + 15, "}"); + std::vector::push_back(v12, &v25); + v19 = (void *)a1[6]; + std::string::basic_string((char *)v26, (int)&night::NS_TYPE_OBJ_BLOCK); + v25 = (char *)night::NSGod::gen_son(v19, (int)v26); + std::string::_M_dispose(v26); + v6 = v25; + *((_DWORD *)v25 + 57) = v12; + std::string::operator=((unsigned int *)v6 + 27, (char *)&byte_551F04); + v7 = night::NSToken::peek(a1[7]); + if ( !v7 ) + return night::NSASTParse::make_call_or_just_expression(a1, v25); + v20 = (int)(v7 + 15); + if ( !std::operator==("[", (int)(v7 + 15)) ) + { + if ( std::operator==(".", v20) ) + { + v8 = night::NSASTParse::ast_obj_dot(a1, (int)v25); + return night::NSASTParse::make_call_or_just_expression(a1, v8); + } + return night::NSASTParse::make_call_or_just_expression(a1, v25); + } + v8 = night::NSASTParse::ast_obj_op(a1, (int)v25); + return night::NSASTParse::make_call_or_just_expression(a1, v8); +} + +//----- (004186DE) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall night::NSASTParse::ast_var(_DWORD *a1) +{ + int v1; // ecx + int v2; // eax + unsigned __int8 **v3; // eax + int v4; // ecx + int v5; // eax + char v7; // al + _DWORD *v8; // eax + unsigned int v9; // [esp+14h] [ebp-94h] + unsigned int v10; // [esp+14h] [ebp-94h] + unsigned int v11; // [esp+18h] [ebp-90h] + unsigned int v12; // [esp+18h] [ebp-90h] + int v13; // [esp+1Ch] [ebp-8Ch] + unsigned __int8 **v14; // [esp+1Ch] [ebp-8Ch] + int v15; // [esp+1Ch] [ebp-8Ch] + void **v16; // [esp+20h] [ebp-88h] + void *v17; // [esp+24h] [ebp-84h] + char *v18; // [esp+24h] [ebp-84h] + int v19; // [esp+24h] [ebp-84h] + struct _Unwind_Exception *lpuexcpta; // [esp+28h] [ebp-80h] + struct _Unwind_Exception *lpuexcptb; // [esp+28h] [ebp-80h] + struct _Unwind_Exception *lpuexcptc; // [esp+28h] [ebp-80h] + char *v24; // [esp+6Ch] [ebp-3Ch] BYREF + int v25[6]; // [esp+70h] [ebp-38h] BYREF + void *v26[8]; // [esp+88h] [ebp-20h] BYREF + + night::NSToken::next(a1[7]); + v17 = (void *)a1[6]; + std::string::basic_string((char *)v26, (int)&night::std_v_n); + v16 = (void **)night::NSGod::gen_girl(v17, (int)v26); + std::string::_M_dispose(v26); + while ( 1 ) + { + v1 = a1[7]; + v2 = *(_DWORD *)(v1 + 4); + v9 = *(_DWORD *)(v2 + 52); + v11 = *(_DWORD *)(v2 + 56); + v18 = (char *)night::NSToken::next(v1); + v24 = v18; + v13 = a1[7]; + if ( !v18 ) + { + std::string::basic_string(v26, "End of file"); + night::NSToken::err(v13, (int)v26, 0, 0, 0); + } + if ( (unsigned __int8)std::operator!=((int)&night::NS_TYPE_VAR, (int)v18) ) + { + std::string::basic_string(v26, "Expected variable name"); + night::NSToken::err(v13, (int)v26, v9, v11, 1); + } + v18[56] = 1; + v3 = night::NSToken::peek(v13); + if ( v3 && std::operator==("=", (int)(v3 + 15)) ) + { + v26[0] = (void *)night::NSASTParse::make_binary_or_just_value(a1, (int)v24, 1u); + std::vector::emplace_back(v16, (char **)v26); + } + else + { + std::vector::push_back(v16, &v24); + } + v4 = a1[7]; + v5 = *(_DWORD *)(v4 + 4); + v10 = *(_DWORD *)(v5 + 52); + v12 = *(_DWORD *)(v5 + 56); + v14 = night::NSToken::peek(v4); + if ( !v14 ) + break; + v19 = (int)(v14 + 15); + if ( std::operator==(";", (int)(v14 + 15)) + || (unsigned __int8)std::operator!=(",", v19) && std::string::find((int *)v14 + 21, 10, 0) != (char *)-1 ) + { + break; + } + if ( night::NSToken::eof(a1[7]) ) + { + lpuexcptc = (struct _Unwind_Exception *)a1[7]; + std::string::basic_string(v26, "End of file"); + night::NSToken::err((int)lpuexcptc, (int)v26, 0, 0, 0); + } + v7 = std::operator!=(",", v19); + v15 = a1[7]; + if ( v7 ) + { + std::operator+((int)v25, "Unexpected token `", v19); + v8 = std::string::append(v25, "`"); + std::string::basic_string(v26, v8); + night::NSToken::err(v15, (int)v26, v10, v12, 1); + } + night::NSToken::next(v15); + } + lpuexcpta = (struct _Unwind_Exception *)a1[6]; + std::string::basic_string((char *)v26, (int)&night::NS_TYPE_PROG); + lpuexcptb = (struct _Unwind_Exception *)night::NSGod::gen_son(lpuexcpta, (int)v26); + std::string::_M_dispose(v26); + *((_DWORD *)lpuexcptb + 57) = v16; + std::string::operator=((unsigned int *)lpuexcptb + 27, (char *)&byte_551F04); + return lpuexcptb; +} + +//----- (00418B3E) -------------------------------------------------------- +_DWORD *__fastcall night::NSASTParse::ast_expression_no_binary(int *a1) +{ + _DWORD *v1; // eax + bool v3; // [esp+4h] [ebp-24h] + + v1 = (_DWORD *)night::NSASTParse::ast_dispatch(0, v3); + return night::NSASTParse::make_call_or_just_expression(a1, v1); +} +// 418B4E: variable 'v3' is possibly undefined + +//----- (00418B62) -------------------------------------------------------- +char *__thiscall night::NSCompileJs::compile_var[abi:cxx11](char *this, int a2, int a3) +{ + _DWORD *v3; // eax + char v6; // [esp+17h] [ebp-B1h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-B0h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-B0h] + void *v9[6]; // [esp+50h] [ebp-78h] BYREF + void *v10[6]; // [esp+68h] [ebp-60h] BYREF + int v11[2]; // [esp+80h] [ebp-48h] BYREF + char v12; // [esp+88h] [ebp-40h] BYREF + int v13; // [esp+98h] [ebp-30h] + int v14; // [esp+9Ch] [ebp-2Ch] + int v15[2]; // [esp+A0h] [ebp-28h] BYREF + char v16; // [esp+A8h] [ebp-20h] BYREF + int v17; // [esp+B8h] [ebp-10h] + int v18; // [esp+BCh] [ebp-Ch] + + std::string::basic_string(v9, (char *)&byte_551F04); + if ( *(_BYTE *)(a3 + 56) ) + std::string::operator=((unsigned int *)v9, "var "); + *(_DWORD *)(a2 + 48) += v9[1]; + lpuexcpt = (struct _Unwind_Exception *)(a3 + 60); + std::string::substr(v11, (_DWORD *)(a3 + 60), 0, dword_565DF4); + if ( (unsigned __int8)std::operator!=((int)v11, (int)&night::nsv_) + && (unsigned __int8)std::operator!=("return", (int)lpuexcpt) + && (unsigned __int8)std::operator!=("delete", (int)lpuexcpt) ) + { + v6 = std::operator!=("void", (int)lpuexcpt); + } + else + { + v6 = 0; + } + std::string::_M_dispose((void **)v11); + if ( v6 ) + { + std::operator+((int)v11, "error : sys error for compile_var `", (int)lpuexcpt); + v3 = std::string::append(v11, "`"); + std::string::basic_string(v10, v3); + std::string::_M_dispose((void **)v11); + lpuexcpta = (struct _Unwind_Exception *)__cxa_allocate_exception(0x18u); + std::string::basic_string(lpuexcpta, v10); + __cxa_throw( + lpuexcpta, + (struct type_info *)&`typeinfo for'std::string, + (void (__cdecl *)(void *))std::string::~string); + } + v12 = 0; + v11[0] = (int)&v12; + v15[0] = (int)&v16; + v11[1] = 0; + v13 = 0; + v14 = 0; + v15[1] = 0; + v16 = 0; + v17 = 0; + v18 = 0; + std::string::_M_assign((int)v11, a3 + 24); + v13 = *(_DWORD *)(a3 + 48); + v14 = *(_DWORD *)(a3 + 52); + std::string::_M_assign((int)v15, (int)lpuexcpt); + v17 = *(_DWORD *)(a3 + 48); + v18 = *(_DWORD *)(a2 + 48); + std::vector::push_back((night::ns_sourcemap **)(a2 + 36), (night::ns_sourcemap *)v11); + std::string::basic_string((char *)v10, (int)lpuexcpt); + *(_DWORD *)(a2 + 48) += v10[1]; + std::operator+(this, (int)v9, (int)v10); + std::string::_M_dispose(v10); + night::ns_sourcemap::~ns_sourcemap((void **)v11); + std::string::_M_dispose(v9); + return this; +} +// 55BB98: using guessed type int *`typeinfo for'std::string; +// 565DF4: using guessed type int dword_565DF4; + +//----- (00418ECE) -------------------------------------------------------- +_DWORD *__thiscall night::NSCompileJs::compile_function[abi:cxx11](_DWORD *this, int a2, _DWORD *a3) +{ + int *v3; // ecx + _DWORD *v4; // ecx + int *v5; // eax + bool v6; // al + _DWORD *v7; // ecx + _DWORD *v8; // eax + int v9; // eax + _DWORD *v10; // ecx + int *v11; // eax + int v12; // eax + _DWORD *v13; // eax + _DWORD *v14; // eax + int v15; // eax + _DWORD *v16; // eax + _DWORD *v17; // eax + int v18; // eax + int v19; // eax + int *v20; // ecx + _DWORD *v21; // eax + int v22; // eax + int v23; // eax + int v25; // [esp+18h] [ebp-110h] + unsigned int v26; // [esp+1Ch] [ebp-10Ch] + int v27; // [esp+1Ch] [ebp-10Ch] + int v28; // [esp+1Ch] [ebp-10Ch] + char v29; // [esp+20h] [ebp-108h] + unsigned int lpuexcpt; // [esp+24h] [ebp-104h] + unsigned int lpuexcpta; // [esp+24h] [ebp-104h] + unsigned int lpuexcptb; // [esp+24h] [ebp-104h] + void *v34[2]; // [esp+68h] [ebp-C0h] BYREF + char v35; // [esp+70h] [ebp-B8h] BYREF + int v36[6]; // [esp+80h] [ebp-A8h] BYREF + void *v37[6]; // [esp+98h] [ebp-90h] BYREF + char *v38; // [esp+B0h] [ebp-78h] BYREF + int v39; // [esp+B4h] [ebp-74h] + char v40; // [esp+B8h] [ebp-70h] BYREF + int v41; // [esp+C8h] [ebp-60h] BYREF + int v42; // [esp+CCh] [ebp-5Ch] + int v43; // [esp+E0h] [ebp-48h] BYREF + int v44; // [esp+E4h] [ebp-44h] + char v45; // [esp+E8h] [ebp-40h] BYREF + int v46; // [esp+F8h] [ebp-30h] + int v47; // [esp+FCh] [ebp-2Ch] + int v48[2]; // [esp+100h] [ebp-28h] BYREF + char v49; // [esp+108h] [ebp-20h] BYREF + int v50; // [esp+118h] [ebp-10h] + int v51; // [esp+11Ch] [ebp-Ch] + + this[1] = 0; + *this = this + 2; + *((_BYTE *)this + 8) = 0; + v25 = a3[34]; + if ( v25 ) + { + std::string::basic_string((void **)&v41, "function "); + std::string::operator+=(&v41); + v44 = 0; + *(_DWORD *)(a2 + 48) += v42; + v43 = (int)&v45; + v48[0] = (int)&v49; + v45 = 0; + v46 = 0; + v47 = 0; + v48[1] = 0; + v49 = 0; + v50 = 0; + v51 = 0; + std::string::_M_assign((int)&v43, (int)(a3 + 6)); + v46 = a3[12]; + v47 = a3[13]; + std::string::_M_assign((int)v48, (int)(a3 + 33)); + v50 = a3[12]; + v51 = *(_DWORD *)(a2 + 48); + std::vector::push_back((night::ns_sourcemap **)(a2 + 36), (night::ns_sourcemap *)&v43); + std::string::operator+=(a3 + 33); + *(_DWORD *)(a2 + 48) += a3[34]; + night::ns_sourcemap::~ns_sourcemap((void **)&v43); + v3 = &v41; + } + else + { + std::string::basic_string((void **)&v43, "(function "); + std::string::operator+=(&v43); + v3 = &v43; + *(_DWORD *)(a2 + 48) += v44; + } + std::string::_M_dispose((void **)v3); + std::string::operator+=(asc_5527F4); + lpuexcpt = 0; + ++*(_DWORD *)(a2 + 48); + v29 = 0; + while ( 1 ) + { + v4 = (_DWORD *)a3[61]; + if ( lpuexcpt >= (v4[1] - *v4) >> 2 ) + break; + v5 = (int *)std::vector::at(v4, lpuexcpt); + v6 = std::operator==((int)&night::NS_TYPE_VAR, *v5); + v7 = (_DWORD *)a3[61]; + if ( v6 ) + { + v8 = (_DWORD *)std::vector::at(v7, lpuexcpt); + std::string::operator+=(*v8 + 60); + *(_DWORD *)(a2 + 48) += *(_DWORD *)(*(_DWORD *)std::vector::at((_DWORD *)a3[61], lpuexcpt) + 64); + } + else + { + v9 = std::vector::at(v7, lpuexcpt); + std::string::operator+=(*(_DWORD *)(*(_DWORD *)v9 + 180) + 60); + v29 = 1; + *(_DWORD *)(a2 + 48) += *(_DWORD *)(*(_DWORD *)(*(_DWORD *)std::vector::at( + (_DWORD *)a3[61], + lpuexcpt) + + 180) + + 64); + } + v26 = lpuexcpt + 1; + lpuexcpt = (*(_DWORD *)(a3[61] + 4) - *(_DWORD *)a3[61]) >> 2; + if ( v26 != lpuexcpt ) + { + std::string::operator+=(","); + ++*(_DWORD *)(a2 + 48); + lpuexcpt = v26; + } + } + std::string::operator+=(5580790); + ++*(_DWORD *)(a2 + 48); + if ( v29 ) + { + std::string::operator+=(5580792); + lpuexcpta = 0; + ++*(_DWORD *)(a2 + 48); + while ( 1 ) + { + v10 = (_DWORD *)a3[61]; + if ( lpuexcpta >= (v10[1] - *v10) >> 2 ) + break; + v34[1] = 0; + v34[0] = &v35; + v35 = 0; + v11 = (int *)std::vector::at(v10, lpuexcpta); + if ( std::operator==((int)&night::NS_TYPE_ASSIGN, *v11) ) + { + v12 = std::vector::at((_DWORD *)a3[61], lpuexcpta); + std::string::basic_string((char *)v36, *(_DWORD *)(*(_DWORD *)v12 + 180) + 60); + std::string::basic_string((char *)&v41, (int)v36); + std::string::append(&v41, "=undefined==="); + v13 = std::string::append(&v41, (int)v36); + std::string::basic_string(&v43, v13); + v14 = std::string::append(&v43, "?"); + std::string::basic_string(v37, v14); + std::string::_M_dispose((void **)&v43); + std::string::_M_dispose((void **)&v41); + std::string::operator+=(v37); + *(_DWORD *)(a2 + 48) += v37[1]; + v15 = std::vector::at((_DWORD *)a3[61], lpuexcpta); + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(*(_DWORD *)v15 + 184)); + std::string::operator+=(&v38); + std::operator+((int)&v43, ":", (int)v36); + v16 = std::string::append(&v43, ";"); + std::string::basic_string(&v41, v16); + std::string::_M_dispose((void **)&v43); + std::string::operator+=(&v41); + *(_DWORD *)(a2 + 48) += v42; + std::string::_M_dispose((void **)&v41); + std::string::_M_dispose((void **)&v38); + std::string::_M_dispose(v37); + std::string::_M_dispose((void **)v36); + } + std::string::_M_dispose(v34); + ++lpuexcpta; + } + } + lpuexcptb = (*(_DWORD *)(a2 + 40) - *(_DWORD *)(a2 + 36)) >> 6; + night::NSCompileJs::compile[abi:cxx11](a2, a3[54]); + if ( v29 ) + { + v38 = &v40; + v39 = 0; + v40 = 0; + if ( std::string::find((int *)v37, "arguments", 0) != -1 ) + { + std::operator+((int)&v41, "arguments.", (int)&night::nsv_); + v17 = std::string::append(&v41, "length=arguments.length;"); + std::string::basic_string(&v43, v17); + std::string::operator=((unsigned __int8 **)&v38, (int)&v43); + std::string::_M_dispose((void **)&v43); + std::string::_M_dispose((void **)&v41); + std::string::operator+=(&v38); + *(_DWORD *)(a2 + 48) += v39; + } + std::string::substr(&v43, v37, 1u, 0xFFFFFFFF); + std::string::operator+=(&v43); + std::string::_M_dispose((void **)&v43); + --*(_DWORD *)(a2 + 48); + while ( lpuexcptb < (*(_DWORD *)(a2 + 40) - *(_DWORD *)(a2 + 36)) >> 6 ) + { + v18 = std::vector::at((int *)(a2 + 36), lpuexcptb); + v27 = v39 + *(_DWORD *)(v18 + 60) - 1; + v19 = std::vector::at((int *)(a2 + 36), lpuexcptb++); + *(_DWORD *)(v19 + 60) = v27; + } + v20 = (int *)&v38; + goto LABEL_29; + } + if ( std::string::find((int *)v37, "arguments", 0) != -1 ) + { + std::operator+((int)&v43, "{arguments.", (int)&night::nsv_); + v21 = std::string::append(&v43, "length=arguments.length;"); + std::string::basic_string(&v41, v21); + std::string::_M_dispose((void **)&v43); + std::string::operator+=(&v41); + *(_DWORD *)(a2 + 48) += v42; + std::string::substr(&v43, v37, 1u, 0xFFFFFFFF); + std::string::operator+=(&v43); + std::string::_M_dispose((void **)&v43); + --*(_DWORD *)(a2 + 48); + while ( lpuexcptb < (*(_DWORD *)(a2 + 40) - *(_DWORD *)(a2 + 36)) >> 6 ) + { + v22 = std::vector::at((int *)(a2 + 36), lpuexcptb); + v28 = v42 + *(_DWORD *)(v22 + 60) - 1; + v23 = std::vector::at((int *)(a2 + 36), lpuexcptb++); + *(_DWORD *)(v23 + 60) = v28; + } + v20 = &v41; +LABEL_29: + std::string::_M_dispose((void **)v20); + goto LABEL_31; + } + std::string::operator+=(v37); +LABEL_31: + if ( !v25 ) + { + std::string::operator+=(5580790); + ++*(_DWORD *)(a2 + 48); + } + std::string::_M_dispose(v37); + return this; +} +// 40E4F2: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041995C) -------------------------------------------------------- +void **__thiscall night::NSCompileJs::compile[abi:cxx11](void **this, int a2, _DWORD *a3) +{ + _DWORD *v3; // eax + char **v4; // ecx + bool v5; // al + int v7; // [esp+14h] [ebp-B4h] + void *v9[6]; // [esp+50h] [ebp-78h] BYREF + char *v10; // [esp+68h] [ebp-60h] BYREF + int v11; // [esp+6Ch] [ebp-5Ch] + char v12; // [esp+70h] [ebp-58h] BYREF + char *v13; // [esp+80h] [ebp-48h] BYREF + int v14; // [esp+84h] [ebp-44h] + char v15[16]; // [esp+88h] [ebp-40h] BYREF + int v16; // [esp+98h] [ebp-30h] + int v17; // [esp+9Ch] [ebp-2Ch] + char *v18; // [esp+A0h] [ebp-28h] BYREF + int v19; // [esp+A4h] [ebp-24h] + char v20[16]; // [esp+A8h] [ebp-20h] BYREF + int v21; // [esp+B8h] [ebp-10h] + int v22; // [esp+BCh] [ebp-Ch] + + if ( !*(_DWORD *)(a2 + 4) ) + { + std::string::basic_string((char *)v9, (int)a3); + if ( std::operator==((int)&night::NS_TYPE_SKIP, (int)v9) ) + { + std::string::basic_string(this, (char *)&byte_551F04); +LABEL_60: + std::string::_M_dispose(v9); + return this; + } + if ( !std::operator==((int)&night::NS_TYPE_NUM, (int)v9) ) + { + if ( std::operator==((int)&night::NS_TYPE_BOOL, (int)v9) ) + { + v15[0] = 0; + v13 = v15; + v18 = v20; + v14 = 0; + v16 = 0; + v17 = 0; + v19 = 0; + v20[0] = 0; + v21 = 0; + v22 = 0; + std::string::_M_assign((int)&v13, (int)(a3 + 6)); + v16 = a3[12]; + v17 = a3[13]; + std::string::_M_assign((int)&v18, (int)(a3 + 15)); + v21 = a3[12]; + v22 = *(_DWORD *)(a2 + 48); + std::vector::push_back((night::ns_sourcemap **)(a2 + 36), (night::ns_sourcemap *)&v13); + std::string::basic_string((char *)&v10, (int)(a3 + 15)); + *(_DWORD *)(a2 + 48) += v11; + std::string::basic_string(this, &v10); + std::string::_M_dispose((void **)&v10); + night::ns_sourcemap::~ns_sourcemap((void **)&v13); + goto LABEL_60; + } + if ( std::operator==((int)&night::NS_TYPE_STR, (int)v9) ) + { + std::operator+((char *)&v13, (int)(a3 + 27), (int)(a3 + 15)); + v3 = std::string::append(&v13, (int)(a3 + 27)); + std::string::basic_string(&v10, v3); + std::string::_M_dispose((void **)&v13); + *(_DWORD *)(a2 + 48) += v11; + std::string::basic_string(this, &v10); +LABEL_10: + v4 = &v10; +LABEL_11: + std::string::_M_dispose((void **)v4); + goto LABEL_60; + } + if ( !std::operator==((int)&night::NS_TYPE_B_TYPE, (int)v9) + && !std::operator==((int)&night::NS_TYPE_PUNC, (int)v9) ) + { + if ( !std::operator==((int)&night::NS_TYPE_KW, (int)v9) ) + { + if ( std::operator==((int)&night::NS_TYPE_VAR, (int)v9) ) + { + night::NSCompileJs::compile_var[abi:cxx11]((char *)this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_K_V, (int)v9) ) + { + night::NSCompileJs::compile_k_v[abi:cxx11]((int)this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_IF, (int)v9) ) + { + night::NSCompileJs::compile_if[abi:cxx11](this, a2, a3); + } + else if ( std::operator==((int)&night::NS_TYPE_FOR, (int)v9) ) + { + night::NSCompileJs::compile_for[abi:cxx11](this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_WHILE, (int)v9) ) + { + night::NSCompileJs::compile_while[abi:cxx11](this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_DO_WHILE, (int)v9) ) + { + night::NSCompileJs::compile_do_while[abi:cxx11](this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_SWITCH, (int)v9) ) + { + night::NSCompileJs::compile_switch[abi:cxx11](this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_OBJ_SELF_OP, (int)v9) ) + { + night::NSCompileJs::compile_obj_self_op[abi:cxx11](this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_OBJ_PROPERTY, (int)v9) ) + { + night::NSCompileJs::compile_obj_property[abi:cxx11](this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_OBJ_DOT, (int)v9) ) + { + night::NSCompileJs::compile_obj_dot[abi:cxx11](this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_OP_SELF, (int)v9) ) + { + night::NSCompileJs::compile_op_self[abi:cxx11](this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_TERNARY, (int)v9) ) + { + night::NSCompileJs::compile_ternary[abi:cxx11](this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_BINARY, (int)v9) + || std::operator==((int)&night::NS_TYPE_ASSIGN, (int)v9) ) + { + night::NSCompileJs::compile_binary[abi:cxx11](this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_FUNC, (int)v9) ) + { + night::NSCompileJs::compile_function[abi:cxx11](this, a2, a3); + } + else if ( std::operator==((int)&night::NS_TYPE_CALL, (int)v9) ) + { + night::NSCompileJs::compile_call[abi:cxx11]((int)this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_PROG, (int)v9) ) + { + night::NSCompileJs::compile_prog[abi:cxx11](this, a2, (int)a3); + } + else if ( std::operator==((int)&night::NS_TYPE_PROG_NO_SEM, (int)v9) + || std::operator==((int)&night::NS_TYPE_PROG_NO_SEM_REQUIRE, (int)v9) + || std::operator==((int)&night::NS_TYPE_OBJ_BLOCK, (int)v9) + || std::operator==((int)&night::NS_TYPE_ARRAY, (int)v9) + || std::operator==((int)&night::NS_TYPE_BRACKET, (int)v9) ) + { + night::NSCompileJs::compile_prog_no_sem[abi:cxx11](this, a2, (int)a3); + } + else + { + std::string::_M_assign(a2, (int)a3); + std::string::basic_string(this, (char *)&byte_551F04); + } + goto LABEL_60; + } + v10 = &v12; + v11 = 0; + v12 = 0; + v7 = (int)(a3 + 15); + if ( std::operator==("this", (int)(a3 + 15)) ) + { + std::string::operator=((unsigned int *)&v10, "(this.constructor===Window?{}:this)"); + ++*(_DWORD *)(a2 + 48); + } + else + { + std::string::_M_assign((int)&v10, v7); + } + v15[0] = 0; + v13 = v15; + v18 = v20; + v14 = 0; + v16 = 0; + v17 = 0; + v19 = 0; + v20[0] = 0; + v21 = 0; + v22 = 0; + std::string::_M_assign((int)&v13, (int)(a3 + 6)); + v16 = a3[12]; + v17 = a3[13]; + std::string::_M_assign((int)&v18, v7); + v21 = a3[12]; + v22 = *(_DWORD *)(a2 + 48); + std::vector::push_back((night::ns_sourcemap **)(a2 + 36), (night::ns_sourcemap *)&v13); + v5 = std::operator==("this", v7); + *(_DWORD *)(a2 + 48) = !v5 + v11 + *(_DWORD *)(a2 + 48) - 1; + std::string::basic_string(this, &v10); + night::ns_sourcemap::~ns_sourcemap((void **)&v13); + goto LABEL_10; + } + } + std::string::basic_string((char *)&v13, (int)(a3 + 15)); + *(_DWORD *)(a2 + 48) += v14; + std::string::basic_string(this, &v13); + v4 = &v13; + goto LABEL_11; + } + std::string::basic_string(this, (char *)&byte_551F04); + return this; +} + +//----- (0041A302) -------------------------------------------------------- +int __thiscall night::NSCompileJs::compile_k_v[abi:cxx11](int this, int a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // eax + void *v7[6]; // [esp+50h] [ebp-38h] BYREF + void *v8[8]; // [esp+68h] [ebp-20h] BYREF + + *(_BYTE *)(this + 8) = 0; + *(_DWORD *)this = this + 8; + *(_DWORD *)(this + 4) = 0; + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 188)); + v3 = std::string::append(v7, ":"); + std::string::basic_string(v8, v3); + std::string::operator=((unsigned __int8 **)this, (int)v8); + std::string::_M_dispose(v8); + std::string::_M_dispose(v7); + ++*(_DWORD *)(a2 + 48); + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 192)); + v4 = std::string::append(v7, ","); + std::string::basic_string(v8, v4); + std::string::operator+=(v8); + std::string::_M_dispose(v8); + std::string::_M_dispose(v7); + ++*(_DWORD *)(a2 + 48); + return this; +} +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041A482) -------------------------------------------------------- +_DWORD *__thiscall night::NSCompileJs::compile_if[abi:cxx11](_DWORD *this, int a2, _DWORD *a3) +{ + void *v5[6]; // [esp+50h] [ebp-38h] BYREF + void *v6[8]; // [esp+68h] [ebp-20h] BYREF + + this[1] = 0; + *this = this + 2; + *((_BYTE *)this + 8) = 0; + std::string::operator+=("if "); + *(_DWORD *)(a2 + 48) += 3; + night::NSCompileJs::compile[abi:cxx11](a2, a3[51]); + std::string::operator+=(v6); + std::string::_M_dispose(v6); + night::NSCompileJs::compile[abi:cxx11](a2, a3[52]); + std::string::operator+=(v6); + std::string::_M_dispose(v6); + std::string::operator+=(a3 + 27); + *(_DWORD *)(a2 + 48) += a3[28]; + if ( a3[53] ) + { + std::string::basic_string(v5, " else "); + std::string::operator+=(v5); + *(_DWORD *)(a2 + 48) += v5[1]; + night::NSCompileJs::compile[abi:cxx11](a2, a3[53]); + std::string::operator+=(v6); + std::string::_M_dispose(v6); + std::string::_M_dispose(v5); + } + return this; +} +// 40E4F2: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041A668) -------------------------------------------------------- +_DWORD *__thiscall night::NSCompileJs::compile_for[abi:cxx11](_DWORD *this, int a2, int a3) +{ + _DWORD *v3; // ecx + _DWORD *v4; // eax + _DWORD *v5; // eax + _DWORD *v6; // eax + _DWORD *v7; // eax + _DWORD *v8; // eax + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-A0h] + void *v12[2]; // [esp+50h] [ebp-68h] BYREF + char v13; // [esp+58h] [ebp-60h] BYREF + void *v14[6]; // [esp+68h] [ebp-50h] BYREF + void *v15[6]; // [esp+80h] [ebp-38h] BYREF + void *v16[8]; // [esp+98h] [ebp-20h] BYREF + + v13 = 0; + v12[0] = &v13; + v12[1] = 0; + std::string::basic_string(v14, "for("); + std::string::operator+=(v14); + *(_DWORD *)(a2 + 48) += v14[1]; + v3 = *(_DWORD **)(a3 + 228); + if ( v3[1] - *v3 != 12 ) + { + std::string::basic_string(v16, "error : sys error for compile_for"); + lpuexcpta = (struct _Unwind_Exception *)__cxa_allocate_exception(0x18u); + std::string::basic_string(lpuexcpta, v16); + __cxa_throw( + lpuexcpta, + (struct type_info *)&`typeinfo for'std::string, + (void (__cdecl *)(void *))std::string::~string); + } + v4 = (_DWORD *)std::vector::at(v3, 0); + night::NSCompileJs::compile[abi:cxx11](a2, *v4); + v5 = std::string::append(v15, ";"); + std::string::basic_string(v16, v5); + std::string::operator+=(v16); + std::string::_M_dispose(v16); + std::string::_M_dispose(v15); + ++*(_DWORD *)(a2 + 48); + v6 = (_DWORD *)std::vector::at(*(_DWORD **)(a3 + 228), 1u); + night::NSCompileJs::compile[abi:cxx11](a2, *v6); + v7 = std::string::append(v15, ";"); + std::string::basic_string(v16, v7); + std::string::operator+=(v16); + std::string::_M_dispose(v16); + std::string::_M_dispose(v15); + ++*(_DWORD *)(a2 + 48); + v8 = (_DWORD *)std::vector::at(*(_DWORD **)(a3 + 228), 2u); + night::NSCompileJs::compile[abi:cxx11](a2, *v8); + std::string::operator+=(v16); + std::string::_M_dispose(v16); + std::string::operator+=(5580790); + ++*(_DWORD *)(a2 + 48); + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 216)); + std::string::operator+=(v16); + std::string::_M_dispose(v16); + std::string::basic_string(this, v12); + std::string::_M_dispose(v14); + std::string::_M_dispose(v12); + return this; +} +// 40E4F2: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); +// 55BB98: using guessed type int *`typeinfo for'std::string; + +//----- (0041A9BA) -------------------------------------------------------- +_DWORD *__thiscall night::NSCompileJs::compile_while[abi:cxx11](_DWORD *this, int a2, int a3) +{ + void *v5[6]; // [esp+50h] [ebp-38h] BYREF + void *v6[8]; // [esp+68h] [ebp-20h] BYREF + + this[1] = 0; + *this = this + 2; + *((_BYTE *)this + 8) = 0; + std::string::basic_string(v5, "while("); + std::string::operator+=(v5); + *(_DWORD *)(a2 + 48) += v5[1]; + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 204)); + std::string::operator+=(v6); + std::string::_M_dispose(v6); + std::string::operator+=(5580790); + ++*(_DWORD *)(a2 + 48); + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 216)); + std::string::operator+=(v6); + std::string::_M_dispose(v6); + std::string::_M_dispose(v5); + return this; +} +// 40E4F2: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041AB28) -------------------------------------------------------- +_DWORD *__thiscall night::NSCompileJs::compile_do_while[abi:cxx11](_DWORD *this, int a2, int a3) +{ + void *v5[6]; // [esp+58h] [ebp-50h] BYREF + void *v6[6]; // [esp+70h] [ebp-38h] BYREF + void *v7[8]; // [esp+88h] [ebp-20h] BYREF + + this[1] = 0; + *this = this + 2; + *((_BYTE *)this + 8) = 0; + std::string::basic_string(v5, "do"); + std::string::operator+=(v5); + *(_DWORD *)(a2 + 48) += v5[1]; + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 216)); + std::string::operator+=(v7); + std::string::_M_dispose(v7); + std::string::basic_string(v6, "while("); + std::string::operator+=(v6); + *(_DWORD *)(a2 + 48) += v6[1]; + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 204)); + std::string::operator+=(v7); + std::string::_M_dispose(v7); + std::string::basic_string(v7, ");"); + std::string::operator+=(v7); + *(_DWORD *)(a2 + 48) += v7[1]; + std::string::_M_dispose(v7); + std::string::_M_dispose(v6); + std::string::_M_dispose(v5); + return this; +} +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041AD4C) -------------------------------------------------------- +_DWORD *__thiscall night::NSCompileJs::compile_switch[abi:cxx11](_DWORD *this, int a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // eax + _DWORD *v5; // eax + int v6; // eax + _DWORD **v7; // eax + _DWORD *v8; // eax + _DWORD *v9; // eax + _DWORD *v10; // eax + _DWORD *v11; // eax + unsigned int v13; // [esp+10h] [ebp-A8h] + unsigned int lpuexcpt; // [esp+14h] [ebp-A4h] + unsigned int lpuexcpta; // [esp+14h] [ebp-A4h] + void *v17[6]; // [esp+50h] [ebp-68h] BYREF + void *v18[6]; // [esp+68h] [ebp-50h] BYREF + void *v19[6]; // [esp+80h] [ebp-38h] BYREF + void *v20[8]; // [esp+98h] [ebp-20h] BYREF + + this[1] = 0; + *this = this + 2; + *((_BYTE *)this + 8) = 0; + std::string::basic_string(v17, "switch("); + std::string::operator+=(v17); + *(_DWORD *)(a2 + 48) += v17[1]; + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 204)); + v3 = std::string::append(v19, "){"); + std::string::basic_string(v20, v3); + std::string::operator+=(v20); + std::string::_M_dispose(v20); + std::string::_M_dispose(v19); + lpuexcpt = 0; + *(_DWORD *)(a2 + 48) += 2; + while ( lpuexcpt < (*(_DWORD *)(*(_DWORD *)(a3 + 232) + 4) - **(_DWORD **)(a3 + 232)) >> 2 ) + { + std::string::basic_string(v18, "case "); + std::string::operator+=(v18); + *(_DWORD *)(a2 + 48) += v18[1]; + v4 = (_DWORD *)std::vector::at(*(_DWORD **)(a3 + 232), lpuexcpt); + night::NSCompileJs::compile[abi:cxx11](a2, *v4); + v5 = std::string::append(v19, ":"); + std::string::basic_string(v20, v5); + std::string::operator+=(v20); + std::string::_M_dispose(v20); + std::string::_M_dispose(v19); + v13 = 0; + ++*(_DWORD *)(a2 + 48); + while ( 1 ) + { + v6 = std::vector>>::at( + *(_DWORD **)(a3 + 236), + lpuexcpt); + if ( v13 >= (*(_DWORD *)(*(_DWORD *)v6 + 4) - **(_DWORD **)v6) >> 2 ) + break; + v7 = (_DWORD **)std::vector>>::at( + *(_DWORD **)(a3 + 236), + lpuexcpt); + v8 = (_DWORD *)std::vector::at(*v7, v13); + night::NSCompileJs::compile[abi:cxx11](a2, *v8); + v9 = std::string::append(v19, ";"); + std::string::basic_string(v20, v9); + std::string::operator+=(v20); + std::string::_M_dispose(v20); + std::string::_M_dispose(v19); + ++v13; + ++*(_DWORD *)(a2 + 48); + } + std::string::_M_dispose(v18); + ++lpuexcpt; + } + for ( lpuexcpta = 0; lpuexcpta < (*(_DWORD *)(*(_DWORD *)(a3 + 240) + 4) - **(_DWORD **)(a3 + 240)) >> 2; ++lpuexcpta ) + { + if ( !lpuexcpta ) + { + std::string::basic_string(v20, "default:"); + std::string::operator+=(v20); + *(_DWORD *)(a2 + 48) += v20[1]; + std::string::_M_dispose(v20); + } + v10 = (_DWORD *)std::vector::at(*(_DWORD **)(a3 + 240), lpuexcpta); + night::NSCompileJs::compile[abi:cxx11](a2, *v10); + v11 = std::string::append(v19, ";"); + std::string::basic_string(v20, v11); + std::string::operator+=(v20); + std::string::_M_dispose(v20); + std::string::_M_dispose(v19); + ++*(_DWORD *)(a2 + 48); + } + std::string::operator+=("}"); + ++*(_DWORD *)(a2 + 48); + std::string::_M_dispose(v17); + return this; +} +// 40E4F2: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041B200) -------------------------------------------------------- +_BYTE *__thiscall night::NSCompileJs::compile_obj_self_op[abi:cxx11](_BYTE *this, int a2, int a3) +{ + _DWORD *v3; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-74h] + void *v7[6]; // [esp+50h] [ebp-38h] BYREF + void *v8[8]; // [esp+68h] [ebp-20h] BYREF + + this[8] = 0; + *(_DWORD *)this = this + 8; + *((_DWORD *)this + 1) = 0; + lpuexcpt = (struct _Unwind_Exception *)(a3 + 156); + if ( *(_BYTE *)(a3 + 200) ) + { + std::string::operator+=(lpuexcpt); + *(_DWORD *)(a2 + 48) += *(_DWORD *)(a3 + 160); + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 192)); + std::string::operator+=(v8); + std::string::_M_dispose(v8); + } + else + { + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 192)); + v3 = std::string::append(v7, (int)lpuexcpt); + std::string::basic_string(v8, v3); + std::string::operator+=(v8); + std::string::_M_dispose(v8); + std::string::_M_dispose(v7); + *(_DWORD *)(a2 + 48) += *(_DWORD *)(a3 + 160); + } + return this; +} +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041B398) -------------------------------------------------------- +_BYTE *__thiscall night::NSCompileJs::compile_obj_property[abi:cxx11](_BYTE *this, int a2, int a3) +{ + unsigned int *v3; // eax + int *v4; // eax + _DWORD *v5; // eax + _DWORD *v6; // eax + void **v7; // ecx + int *v8; // eax + _DWORD *v9; // eax + _DWORD *v10; // eax + _DWORD *v11; // eax + _DWORD *v12; // eax + _DWORD *v13; // eax + _DWORD *v14; // eax + _DWORD *v15; // eax + _DWORD *v16; // eax + _DWORD *v17; // eax + _DWORD *v18; // eax + _DWORD *v19; // eax + _DWORD *v20; // eax + _DWORD *v21; // eax + _DWORD *v22; // eax + unsigned int lpuexcpt; // [esp+18h] [ebp-180h] + int v26[6]; // [esp+58h] [ebp-140h] BYREF + unsigned __int8 *v27; // [esp+70h] [ebp-128h] BYREF + int v28; // [esp+74h] [ebp-124h] + int v29[6]; // [esp+88h] [ebp-110h] BYREF + void *v30[6]; // [esp+A0h] [ebp-F8h] BYREF + void *v31[6]; // [esp+B8h] [ebp-E0h] BYREF + void *v32[6]; // [esp+D0h] [ebp-C8h] BYREF + void *v33[6]; // [esp+E8h] [ebp-B0h] BYREF + void *v34[6]; // [esp+100h] [ebp-98h] BYREF + void *v35[6]; // [esp+118h] [ebp-80h] BYREF + void *v36[6]; // [esp+130h] [ebp-68h] BYREF + void *v37[6]; // [esp+148h] [ebp-50h] BYREF + void *v38[6]; // [esp+160h] [ebp-38h] BYREF + int v39[8]; // [esp+178h] [ebp-20h] BYREF + + std::to_string((std::__cxx11 *)v39, *(_DWORD *)(a2 + 32)); + v3 = std::string::insert((unsigned int *)v39, 0, (int)&night::nst_); + std::string::basic_string(v26, v3); + std::string::_M_dispose((void **)v39); + ++*(_DWORD *)(a2 + 32); + this[8] = 0; + *((_DWORD *)this + 1) = 0; + *(_DWORD *)this = this + 8; + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 192)); + std::string::operator+=(v39); + std::string::_M_dispose((void **)v39); + for ( lpuexcpt = 0; lpuexcpt < (*(_DWORD *)(*(_DWORD *)(a3 + 196) + 4) - **(_DWORD **)(a3 + 196)) >> 2; ++lpuexcpt ) + { + std::string::operator+=(&unk_552E38); + *(_DWORD *)(a2 + 48) += 2; + v4 = (int *)std::vector::at(*(_DWORD **)(a3 + 196), lpuexcpt); + if ( std::operator==((int)&night::NS_TYPE_STR, *v4) ) + { + std::operator+((int)v39, "\"", (int)&night::nsv_); + v5 = std::string::append(v39, "\"+"); + std::string::basic_string(v38, v5); + std::string::_M_dispose((void **)v39); + std::string::operator+=(v38); + *(_DWORD *)(a2 + 48) += v38[1]; + v6 = (_DWORD *)std::vector::at(*(_DWORD **)(a3 + 196), lpuexcpt); + night::NSCompileJs::compile[abi:cxx11](a2, *v6); + std::string::operator+=(v39); + std::string::_M_dispose((void **)v39); + v7 = v38; + } + else + { + v8 = (int *)std::vector::at(*(_DWORD **)(a3 + 196), lpuexcpt); + if ( std::operator==((int)&night::NS_TYPE_NUM, *v8) ) + { + v9 = (_DWORD *)std::vector::at(*(_DWORD **)(a3 + 196), lpuexcpt); + night::NSCompileJs::compile[abi:cxx11](a2, *v9); + std::string::operator+=(v39); + v7 = (void **)v39; + } + else + { + std::operator+((int)v39, (char *)asc_5527F4, (int)v26); + v10 = std::string::append(v39, "=("); + std::string::basic_string(&v27, v10); + std::string::_M_dispose((void **)v39); + std::string::operator+=(&v27); + *(_DWORD *)(a2 + 48) += v28; + v11 = (_DWORD *)std::vector::at(*(_DWORD **)(a3 + 196), lpuexcpt); + night::NSCompileJs::compile[abi:cxx11](a2, *v11); + v12 = std::string::append(v38, "),"); + std::string::basic_string(v39, v12); + std::string::operator+=(v39); + std::string::_M_dispose((void **)v39); + std::string::_M_dispose(v38); + *(_DWORD *)(a2 + 48) += 2; + std::operator+((int)v29, "null==", (int)v26); + v13 = std::string::append(v29, "?undefined:"); + std::string::basic_string(v30, v13); + v14 = std::string::append(v30, "'number'=== typeof "); + std::string::basic_string(v31, v14); + v15 = std::string::append(v31, (int)v26); + std::string::basic_string(v32, v15); + v16 = std::string::append(v32, "?"); + std::string::basic_string(v33, v16); + v17 = std::string::append(v33, (int)v26); + std::string::basic_string(v34, v17); + v18 = std::string::append(v34, ":\""); + std::string::basic_string(v35, v18); + v19 = std::string::append(v35, (int)&night::nsv_); + std::string::basic_string(v36, v19); + v20 = std::string::append(v36, "\"+"); + std::string::basic_string(v37, v20); + v21 = std::string::append(v37, (int)v26); + std::string::basic_string(v38, v21); + v22 = std::string::append(v38, (char *)&asc_5527F4[2]); + std::string::basic_string(v39, v22); + std::string::operator=(&v27, (int)v39); + std::string::_M_dispose((void **)v39); + std::string::_M_dispose(v38); + std::string::_M_dispose(v37); + std::string::_M_dispose(v36); + std::string::_M_dispose(v35); + std::string::_M_dispose(v34); + std::string::_M_dispose(v33); + std::string::_M_dispose(v32); + std::string::_M_dispose(v31); + std::string::_M_dispose(v30); + std::string::_M_dispose((void **)v29); + std::string::operator+=(&v27); + v7 = (void **)&v27; + *(_DWORD *)(a2 + 48) += v28; + } + } + std::string::_M_dispose(v7); + std::string::operator+=(")]"); + *(_DWORD *)(a2 + 48) += 2; + } + std::string::_M_dispose((void **)v26); + return this; +} +// 40E4F2: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041BB26) -------------------------------------------------------- +_BYTE *__thiscall night::NSCompileJs::compile_obj_dot[abi:cxx11](_BYTE *this, int a2, int a3) +{ + _DWORD *v3; // eax + unsigned int lpuexcpt; // [esp+14h] [ebp-64h] + void *v7[8]; // [esp+58h] [ebp-20h] BYREF + + this[8] = 0; + *(_DWORD *)this = this + 8; + *((_DWORD *)this + 1) = 0; + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 192)); + std::string::operator+=(v7); + std::string::_M_dispose(v7); + for ( lpuexcpt = 0; lpuexcpt < (*(_DWORD *)(*(_DWORD *)(a3 + 196) + 4) - **(_DWORD **)(a3 + 196)) >> 2; ++lpuexcpt ) + { + std::string::operator+=("."); + ++*(_DWORD *)(a2 + 48); + v3 = (_DWORD *)std::vector::at(*(_DWORD **)(a3 + 196), lpuexcpt); + night::NSCompileJs::compile[abi:cxx11](a2, *v3); + std::string::operator+=(v7); + std::string::_M_dispose(v7); + } + return this; +} +// 40E4F2: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041BC88) -------------------------------------------------------- +_DWORD *__thiscall night::NSCompileJs::compile_op_self[abi:cxx11](_DWORD *this, int a2, int a3) +{ + void *v5[8]; // [esp+58h] [ebp-20h] BYREF + + this[1] = 0; + *this = this + 2; + *((_BYTE *)this + 8) = 0; + std::string::operator+=(a3 + 156); + *(_DWORD *)(a2 + 48) += *(_DWORD *)(a3 + 160); + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 192)); + std::string::operator+=(v5); + std::string::_M_dispose(v5); + return this; +} +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041BD76) -------------------------------------------------------- +_BYTE *__thiscall night::NSCompileJs::compile_ternary[abi:cxx11](_BYTE *this, int a2, int a3) +{ + _DWORD *v3; // eax + void *v6[6]; // [esp+50h] [ebp-38h] BYREF + void *v7[8]; // [esp+68h] [ebp-20h] BYREF + + this[8] = 0; + *(_DWORD *)this = this + 8; + *((_DWORD *)this + 1) = 0; + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 180)); + v3 = std::string::append(v6, ":"); + std::string::basic_string(v7, v3); + std::string::operator+=(v7); + std::string::_M_dispose(v7); + std::string::_M_dispose(v6); + ++*(_DWORD *)(a2 + 48); + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 184)); + std::string::operator+=(v7); + std::string::_M_dispose(v7); + return this; +} +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041BED0) -------------------------------------------------------- +_DWORD *__thiscall night::NSCompileJs::compile_binary[abi:cxx11](_DWORD *this, int a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // eax + void *v7[6]; // [esp+50h] [ebp-68h] BYREF + void *v8[6]; // [esp+68h] [ebp-50h] BYREF + void *v9[6]; // [esp+80h] [ebp-38h] BYREF + int v10[8]; // [esp+98h] [ebp-20h] BYREF + + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 180)); + std::operator+((int)v10, " ", a3 + 156); + v3 = std::string::append(v10, " "); + std::string::basic_string(v8, v3); + std::string::_M_dispose((void **)v10); + *(_DWORD *)(a2 + 48) += v8[1]; + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 184)); + std::operator+((char *)v10, (int)v7, (int)v8); + v4 = std::string::append(v10, (int)v9); + std::string::basic_string(this, v4); + std::string::_M_dispose((void **)v10); + std::string::_M_dispose(v9); + std::string::_M_dispose(v8); + std::string::_M_dispose(v7); + return this; +} +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041C09C) -------------------------------------------------------- +_DWORD *__thiscall night::NSCompileJs::compile_assign[abi:cxx11](_DWORD *this, int a2, int a3) +{ + night::NSCompileJs::compile_binary[abi:cxx11](this, a2, a3); + return this; +} + +//----- (0041C0C0) -------------------------------------------------------- +int __thiscall night::NSCompileJs::compile_call[abi:cxx11](int this, int a2, int a3) +{ + _DWORD *v3; // ecx + int v4; // eax + int v5; // eax + _DWORD **v6; // eax + int *v7; // eax + _DWORD **v8; // eax + _DWORD *v9; // eax + int v10; // eax + int v11; // eax + int v12; // eax + _DWORD **v13; // eax + _DWORD *v14; // eax + int v15; // eax + unsigned int v17; // [esp+1Ch] [ebp-6Ch] + unsigned int v18; // [esp+1Ch] [ebp-6Ch] + unsigned int v19; // [esp+20h] [ebp-68h] + unsigned int i; // [esp+20h] [ebp-68h] + unsigned int lpuexcpt; // [esp+24h] [ebp-64h] + unsigned int lpuexcpta; // [esp+24h] [ebp-64h] + void *v24[8]; // [esp+68h] [ebp-20h] BYREF + + *(_BYTE *)(this + 8) = 0; + *(_DWORD *)this = this + 8; + *(_DWORD *)(this + 4) = 0; + night::NSCompileJs::compile[abi:cxx11](a2, *(_DWORD *)(a3 + 220)); + std::string::operator=((unsigned __int8 **)this, (int)v24); + std::string::_M_dispose(v24); + if ( std::operator==("return", *(_DWORD *)(a3 + 220) + 60) ) + { + for ( lpuexcpt = 0; ; ++lpuexcpt ) + { + v3 = *(_DWORD **)(a3 + 224); + if ( lpuexcpt >= (v3[1] - *v3) >> 2 ) + break; + v4 = std::vector>>::at(v3, lpuexcpt); + if ( **(_DWORD **)v4 != *(_DWORD *)(*(_DWORD *)v4 + 4) ) + { + v5 = std::vector>>::at( + *(_DWORD **)(a3 + 224), + lpuexcpt); + if ( *(_DWORD *)(*(_DWORD *)v5 + 4) - **(_DWORD **)v5 != 4 + || (v6 = (_DWORD **)std::vector>>::at( + *(_DWORD **)(a3 + 224), + lpuexcpt), + v7 = (int *)std::vector::at(*v6, 0), + !std::operator==((int)&night::NS_TYPE_SKIP, *v7)) ) + { + std::string::operator+=(asc_5527F4); + v19 = 0; + ++*(_DWORD *)(a2 + 48); + while ( 1 ) + { + v11 = std::vector>>::at( + *(_DWORD **)(a3 + 224), + lpuexcpt); + if ( v19 >= (*(_DWORD *)(*(_DWORD *)v11 + 4) - **(_DWORD **)v11) >> 2 ) + break; + v8 = (_DWORD **)std::vector>>::at( + *(_DWORD **)(a3 + 224), + lpuexcpt); + v9 = (_DWORD *)std::vector::at(*v8, v19); + night::NSCompileJs::compile[abi:cxx11](a2, *v9); + std::string::operator+=(v24); + std::string::_M_dispose(v24); + v17 = v19 + 1; + v10 = std::vector>>::at( + *(_DWORD **)(a3 + 224), + lpuexcpt); + v19 = (*(_DWORD *)(*(_DWORD *)v10 + 4) - **(_DWORD **)v10) >> 2; + if ( v17 != v19 ) + { + std::string::operator+=(","); + ++*(_DWORD *)(a2 + 48); + v19 = v17; + } + } + std::string::operator+=(5580790); + ++*(_DWORD *)(a2 + 48); + } + } + } + } + else + { + for ( i = 0; i < (*(_DWORD *)(*(_DWORD *)(a3 + 224) + 4) - **(_DWORD **)(a3 + 224)) >> 2; ++i ) + { + std::string::operator+=(asc_5527F4); + lpuexcpta = 0; + ++*(_DWORD *)(a2 + 48); + while ( 1 ) + { + v12 = std::vector>>::at(*(_DWORD **)(a3 + 224), i); + if ( lpuexcpta >= (*(_DWORD *)(*(_DWORD *)v12 + 4) - **(_DWORD **)v12) >> 2 ) + break; + v13 = (_DWORD **)std::vector>>::at( + *(_DWORD **)(a3 + 224), + i); + v14 = (_DWORD *)std::vector::at(*v13, lpuexcpta); + night::NSCompileJs::compile[abi:cxx11](a2, *v14); + std::string::operator+=(v24); + std::string::_M_dispose(v24); + v18 = lpuexcpta + 1; + v15 = std::vector>>::at(*(_DWORD **)(a3 + 224), i); + lpuexcpta = (*(_DWORD *)(*(_DWORD *)v15 + 4) - **(_DWORD **)v15) >> 2; + if ( v18 != lpuexcpta ) + { + std::string::operator+=(","); + ++*(_DWORD *)(a2 + 48); + lpuexcpta = v18; + } + } + std::string::operator+=(5580790); + ++*(_DWORD *)(a2 + 48); + } + } + return this; +} +// 40E4F2: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041C4DC) -------------------------------------------------------- +_DWORD *__thiscall night::NSCompileJs::compile_prog[abi:cxx11](_DWORD *this, int a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + unsigned int v6; // [esp+10h] [ebp-78h] + unsigned int lpuexcpt; // [esp+14h] [ebp-74h] + void *v9; // [esp+50h] [ebp-38h] BYREF + int v10; // [esp+54h] [ebp-34h] + void *v11[8]; // [esp+68h] [ebp-20h] BYREF + + std::string::basic_string((char *)&v9, a3 + 108); + if ( !v10 ) + std::string::operator=((unsigned int *)&v9, ";"); + lpuexcpt = 0; + this[1] = 0; + *this = this + 2; + *((_BYTE *)this + 8) = 0; + while ( 1 ) + { + v4 = *(_DWORD **)(a3 + 228); + if ( lpuexcpt >= (v4[1] - *v4) >> 2 ) + break; + v3 = (_DWORD *)std::vector::at(v4, lpuexcpt); + night::NSCompileJs::compile[abi:cxx11](a2, *v3); + std::string::operator+=(v11); + std::string::_M_dispose(v11); + v6 = lpuexcpt + 1; + lpuexcpt = (*(_DWORD *)(*(_DWORD *)(a3 + 228) + 4) - **(_DWORD **)(a3 + 228)) >> 2; + if ( v6 != lpuexcpt ) + { + std::string::operator+=(&v9); + *(_DWORD *)(a2 + 48) += v10; + lpuexcpt = v6; + } + } + std::string::_M_dispose(&v9); + return this; +} +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041C66C) -------------------------------------------------------- +_DWORD *__thiscall night::NSCompileJs::compile_prog_no_sem[abi:cxx11](_DWORD *this, int a2, int a3) +{ + _DWORD *v3; // ecx + _DWORD *v4; // eax + unsigned int lpuexcpt; // [esp+14h] [ebp-64h] + void *v8[8]; // [esp+58h] [ebp-20h] BYREF + + this[1] = 0; + *this = this + 2; + *((_BYTE *)this + 8) = 0; + if ( std::operator==((int)&night::NS_TYPE_OBJ_BLOCK, a3) ) + { + std::string::operator+=(asc_5527F4); + ++*(_DWORD *)(a2 + 48); + } + for ( lpuexcpt = 0; ; ++lpuexcpt ) + { + v3 = *(_DWORD **)(a3 + 228); + if ( lpuexcpt >= (v3[1] - *v3) >> 2 ) + break; + v4 = (_DWORD *)std::vector::at(v3, lpuexcpt); + night::NSCompileJs::compile[abi:cxx11](a2, *v4); + std::string::operator+=(v8); + std::string::_M_dispose(v8); + } + if ( std::operator==((int)&night::NS_TYPE_OBJ_BLOCK, a3) ) + { + std::string::operator+=(5580790); + ++*(_DWORD *)(a2 + 48); + } + return this; +} +// 40E4F2: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 41995C: using guessed type _DWORD __stdcall night::NSCompileJs::compile[abi:cxx11](_DWORD, _DWORD); + +//----- (0041C7CC) -------------------------------------------------------- +char *__thiscall night::NSCompileJs::compile_once(char *this, int a2, unsigned int *a3, int a4, char a5) +{ + const char **v5; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + void *v9[8]; // [esp+58h] [ebp-20h] BYREF + + *(_DWORD *)(a2 + 28) = a4; + std::string::operator=(a3, (char *)&byte_551F04); + v5 = (const char **)night::NSASTParse::top_down(*(int **)(a2 + 24)); + lpuexcpt = (struct _Unwind_Exception *)v5; + if ( a5 ) + { + night::ns_node::debug_no_space[abi:cxx11](v9, v5); + printf("ast :%s\n", (const char *)v9[0]); + std::string::_M_dispose(v9); + } + night::NSCompileJs::compile[abi:cxx11](v9, a2, lpuexcpt); + std::string::_M_assign((int)a3, (int)v9); + std::string::basic_string(this, a2); + std::string::_M_dispose(v9); + return this; +} + +//----- (0041C8EC) -------------------------------------------------------- +int __cdecl night::compile_ns(int a1, int a2, int a3, int a4, unsigned int *a5, char a6) +{ + _DWORD *v6; // eax + _DWORD *v7; // eax + _DWORD *v8; // eax + _DWORD *v9; // eax + _DWORD *v10; // eax + _DWORD *v11; // eax + _DWORD *v12; // eax + int v13; // edx + int v14; // edx + int lpuexcpt; // [esp+18h] [ebp-200h] + void *v17[3]; // [esp+5Ch] [ebp-1BCh] BYREF + void **v18[3]; // [esp+68h] [ebp-1B0h] BYREF + void *v19[2]; // [esp+74h] [ebp-1A4h] BYREF + char v20; // [esp+7Ch] [ebp-19Ch] BYREF + void *v21[6]; // [esp+8Ch] [ebp-18Ch] BYREF + void *v22[6]; // [esp+A4h] [ebp-174h] BYREF + int v23[6]; // [esp+BCh] [ebp-15Ch] BYREF + int v24[6]; // [esp+D4h] [ebp-144h] BYREF + int v25[6]; // [esp+ECh] [ebp-12Ch] BYREF + void *v26[6]; // [esp+104h] [ebp-114h] BYREF + int v27[7]; // [esp+11Ch] [ebp-FCh] BYREF + int v28[5]; // [esp+138h] [ebp-E0h] BYREF + void *v29[2]; // [esp+14Ch] [ebp-CCh] BYREF + char v30; // [esp+154h] [ebp-C4h] BYREF + void **v31; // [esp+164h] [ebp-B4h] + int v32; // [esp+168h] [ebp-B0h] + int v33; // [esp+16Ch] [ebp-ACh] + int v34; // [esp+170h] [ebp-A8h] + int v35; // [esp+174h] [ebp-A4h] + int v36; // [esp+178h] [ebp-A0h] + int v37; // [esp+17Ch] [ebp-9Ch] + void *v38[15]; // [esp+180h] [ebp-98h] BYREF + void *v39[23]; // [esp+1BCh] [ebp-5Ch] BYREF + + std::string::operator=(a5, (char *)&byte_551F04); + memset(v17, 0, sizeof(v17)); + night::NSStream::NSStream(v38, a1, a3, a4); + v28[2] = (int)v28; + v28[3] = (int)v28; + v27[1] = (int)v38; + v27[0] = (int)v17; + v28[0] = 0; + v28[1] = 0; + v28[4] = 0; + memset(&v27[2], 0, 16); + std::string::basic_string((char *)v29, a1); + night::NSASTParse::NSASTParse((int)v39, (int)v29, (int)v27, (int)v17); + std::string::_M_dispose(v29); + v29[1] = 0; + v29[0] = &v30; + v31 = v39; + v19[0] = &v20; + v30 = 0; + v34 = 0; + v35 = 0; + v36 = 0; + v32 = 0; + v33 = 0; + v37 = 1; + v19[1] = 0; + v20 = 0; + memset(v18, 0, sizeof(v18)); + night::NSCompileJs::compile_once((char *)v21, (int)v29, (unsigned int *)v19, (int)v18, a6); + night::NSGod::hamlet(v17); + if ( v21[1] ) + { + std::string::_M_assign((int)a5, (int)v21); + lpuexcpt = 121; + } + else + { + std::operator+((int)v24, ";return ", (int)&night::nsv_); + v6 = std::string::append(v24, "module."); + std::string::basic_string(v25, v6); + v7 = std::string::append(v25, (int)&night::nsv_); + std::string::basic_string(v26, v7); + v8 = std::string::append(v26, "exports;"); + std::string::basic_string(v22, v8); + std::string::_M_dispose(v26); + std::string::_M_dispose((void **)v25); + std::string::_M_dispose((void **)v24); + std::operator+((int)v25, "function ", a2); + v9 = std::string::append(v25, "(){"); + std::string::basic_string(v26, v9); + std::string::operator=((unsigned __int8 **)a5, (int)v26); + std::string::_M_dispose(v26); + std::string::_M_dispose((void **)v25); + std::operator+((int)v23, "var ", (int)&night::nsv_); + v10 = std::string::append(v23, "module={"); + std::string::basic_string(v24, v10); + v11 = std::string::append(v24, (int)&night::nsv_); + std::string::basic_string(v25, v11); + v12 = std::string::append(v25, "exports:{}};"); + std::string::basic_string(v26, v12); + std::string::operator+=(v26); + std::string::_M_dispose(v26); + std::string::_M_dispose((void **)v25); + std::string::_M_dispose((void **)v24); + std::string::_M_dispose((void **)v23); + std::operator+((char *)v26, (int)v19, (int)v22); + std::string::operator+=(v26); + std::string::_M_dispose(v26); + std::string::operator+=("}"); + std::string::_M_dispose(v22); + lpuexcpt = 0; + } + std::string::_M_dispose(v21); + std::vector::~vector(v18, v13); + std::string::_M_dispose(v19); + night::NSCompileJs::~NSCompileJs((int)v29, v14); + night::NSASTParse::~NSASTParse(v39); + night::NSToken::~NSToken((int)v27); + night::NSStream::~NSStream(v38); + std::_Vector_base::~_Vector_base(v17); + return lpuexcpt; +} +// 41CE51: variable 'v13' is possibly undefined +// 41D02D: variable 'v14' is possibly undefined +// 40E4F2: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); + +//----- (0041D077) -------------------------------------------------------- +int __cdecl night::compile_ns_with_sourcemap( + night::NSASTParse *a1, + int a2, + int a3, + int a4, + int a5, + unsigned int *a6, + int a7) +{ + _DWORD *v7; // eax + _DWORD *v8; // eax + _DWORD *v9; // eax + _DWORD *v10; // eax + _DWORD *v11; // eax + _DWORD *v12; // eax + _DWORD *v13; // eax + int v14; // eax + int v15; // edx + int v16; // ecx + int v17; // edx + int v18; // ecx + int v19; // eax + int v20; // edx + int v21; // ecx + int v22; // edx + int v23; // ecx + int v24; // edx + int v25; // edx + int v26; // edx + const night::ns_sourcemap *v28; // [esp+4h] [ebp-234h] + int v29; // [esp+28h] [ebp-210h] + int v30; // [esp+2Ch] [ebp-20Ch] + void *v31; // [esp+30h] [ebp-208h] + int v32; // [esp+34h] [ebp-204h] + int lpuexcpt; // [esp+38h] [ebp-200h] + struct _Unwind_Exception *lpuexcpta; // [esp+38h] [ebp-200h] + struct _Unwind_Exception *lpuexcptb; // [esp+38h] [ebp-200h] + void *v36[3]; // [esp+70h] [ebp-1C8h] BYREF + void **v37[3]; // [esp+7Ch] [ebp-1BCh] BYREF + void *Block; // [esp+88h] [ebp-1B0h] BYREF + int v39; // [esp+8Ch] [ebp-1ACh] + int v40; // [esp+90h] [ebp-1A8h] + void *v41[2]; // [esp+94h] [ebp-1A4h] BYREF + char v42; // [esp+9Ch] [ebp-19Ch] BYREF + void *v43[6]; // [esp+ACh] [ebp-18Ch] BYREF + void *v44[6]; // [esp+C4h] [ebp-174h] BYREF + int v45; // [esp+DCh] [ebp-15Ch] BYREF + int v46; // [esp+E0h] [ebp-158h] BYREF + int v47; // [esp+E4h] [ebp-154h] + int *v48; // [esp+E8h] [ebp-150h] + int *v49; // [esp+ECh] [ebp-14Ch] + int v50; // [esp+F0h] [ebp-148h] + int v51; // [esp+F4h] [ebp-144h] BYREF + int v52; // [esp+F8h] [ebp-140h] BYREF + int v53; // [esp+FCh] [ebp-13Ch] + int *v54; // [esp+100h] [ebp-138h] + int *v55; // [esp+104h] [ebp-134h] + int v56; // [esp+108h] [ebp-130h] + int v57; // [esp+10Ch] [ebp-12Ch] BYREF + int v58; // [esp+110h] [ebp-128h] BYREF + int v59; // [esp+114h] [ebp-124h] + int *v60; // [esp+118h] [ebp-120h] + int *v61; // [esp+11Ch] [ebp-11Ch] + int v62; // [esp+120h] [ebp-118h] + int v63; // [esp+124h] [ebp-114h] BYREF + int v64; // [esp+128h] [ebp-110h] BYREF + int v65; // [esp+12Ch] [ebp-10Ch] + int *v66; // [esp+130h] [ebp-108h] + int *v67; // [esp+134h] [ebp-104h] + int v68; // [esp+138h] [ebp-100h] + int v69[7]; // [esp+13Ch] [ebp-FCh] BYREF + int v70[5]; // [esp+158h] [ebp-E0h] BYREF + void *v71[2]; // [esp+16Ch] [ebp-CCh] BYREF + char v72; // [esp+174h] [ebp-C4h] BYREF + void **v73; // [esp+184h] [ebp-B4h] + int v74; // [esp+188h] [ebp-B0h] + int v75; // [esp+18Ch] [ebp-ACh] + struct _Unwind_Exception *v76; // [esp+190h] [ebp-A8h] + struct _Unwind_Exception *v77; // [esp+194h] [ebp-A4h] + int v78; // [esp+198h] [ebp-A0h] + int v79; // [esp+19Ch] [ebp-9Ch] + void *v80[15]; // [esp+1A0h] [ebp-98h] BYREF + void *v81[23]; // [esp+1DCh] [ebp-5Ch] BYREF + + std::string::operator=(a6, (char *)&byte_551F04); + memset(v36, 0, sizeof(v36)); + night::NSStream::NSStream(v80, (int)a1, a4, a5); + v70[2] = (int)v70; + v70[3] = (int)v70; + v69[1] = (int)v80; + v69[0] = (int)v36; + v70[0] = 0; + v70[1] = 0; + v70[4] = 0; + memset(&v69[2], 0, 16); + std::string::basic_string((char *)v71, (int)a1); + night::NSASTParse::NSASTParse((int)v81, (int)v71, (int)v69, (int)v36); + std::string::_M_dispose(v71); + v71[0] = &v72; + v73 = v81; + v41[0] = &v42; + v71[1] = 0; + v72 = 0; + v76 = 0; + v77 = 0; + v78 = 0; + v74 = 0; + v75 = 0; + v79 = 1; + v41[1] = 0; + v42 = 0; + memset(v37, 0, sizeof(v37)); + night::NSCompileJs::compile_once((char *)v43, (int)v71, (unsigned int *)v41, (int)v37, 0); + night::NSGod::hamlet(v36); + if ( v43[1] ) + { + std::string::_M_assign((int)a6, (int)v43); + lpuexcpt = 121; + } + else + { + std::operator+((int)&v51, ";return ", (int)&night::nsv_); + v7 = std::string::append(&v51, "module."); + std::string::basic_string(&v57, v7); + v8 = std::string::append(&v57, (int)&night::nsv_); + std::string::basic_string(&v63, v8); + v9 = std::string::append(&v63, "exports;"); + std::string::basic_string(v44, v9); + std::string::_M_dispose((void **)&v63); + std::string::_M_dispose((void **)&v57); + std::string::_M_dispose((void **)&v51); + std::operator+((int)&v57, "function ", a3); + v10 = std::string::append(&v57, "(){"); + std::string::basic_string(&v63, v10); + std::string::operator=((unsigned __int8 **)a6, (int)&v63); + std::string::_M_dispose((void **)&v63); + std::string::_M_dispose((void **)&v57); + std::operator+((int)&v45, "var ", (int)&night::nsv_); + v11 = std::string::append(&v45, "module={"); + std::string::basic_string(&v51, v11); + v12 = std::string::append(&v51, (int)&night::nsv_); + std::string::basic_string(&v57, v12); + v13 = std::string::append(&v57, "exports:{}};"); + std::string::basic_string(&v63, v13); + std::string::operator+=(&v63); + std::string::_M_dispose((void **)&v63); + std::string::_M_dispose((void **)&v57); + std::string::_M_dispose((void **)&v51); + std::string::_M_dispose((void **)&v45); + v32 = a6[1]; + std::operator+((char *)&v63, (int)v41, (int)v44); + std::string::operator+=(&v63); + std::string::_M_dispose((void **)&v63); + std::string::operator+=("}"); + std::operator+((int)&v63, "\n//# sourceMappingURL=", a2); + std::string::operator+=(&v63); + std::string::_M_dispose((void **)&v63); + Block = 0; + v39 = 0; + v40 = 0; + lpuexcpta = (struct _Unwind_Exception *)(v77 - v76); + if ( v77 == v76 ) + { + v31 = 0; + } + else + { + if ( (unsigned int)(v77 - v76) > 0x7FFFFFC0 ) + std::__throw_bad_alloc(); + v31 = operator new((size_t)lpuexcpta); + } + Block = v31; + v39 = (int)v31; + v40 = (int)lpuexcpta + (_DWORD)v31; + v29 = (int)v77; + lpuexcptb = v76; + v30 = (int)v31; + while ( (struct _Unwind_Exception *)v29 != lpuexcptb ) + { + night::ns_sourcemap::ns_sourcemap(v30, lpuexcptb, v28); + v30 += 64; + lpuexcptb = (struct _Unwind_Exception *)((char *)lpuexcptb + 64); + } + v46 = 0; + v39 = v30; + v48 = &v46; + v49 = &v46; + v47 = 0; + v50 = 0; + v52 = 0; + v53 = 0; + v54 = &v52; + v55 = &v52; + v56 = 0; + night::NSToken::get_tokens_for_sourcemap(v69, (void **)&v45, &v51); + v64 = 0; + v65 = 0; + v66 = &v64; + v67 = &v64; + v68 = 0; + if ( v53 ) + { + v14 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_copy,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>( + v53, + (int)&v64); + v15 = v14; + do + { + v16 = v15; + v15 = *(_DWORD *)(v15 + 8); + } + while ( v15 ); + v66 = (int *)v16; + v17 = v14; + do + { + v18 = v17; + v17 = *(_DWORD *)(v17 + 12); + } + while ( v17 ); + v67 = (int *)v18; + v65 = v14; + v68 = v56; + } + v58 = 0; + v59 = 0; + v60 = &v58; + v61 = &v58; + v62 = 0; + if ( v47 ) + { + v19 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_copy,std::_Select1st>,std::less,std::allocator>>::_Alloc_node>( + v47, + (int)&v58); + v20 = v19; + do + { + v21 = v20; + v20 = *(_DWORD *)(v20 + 8); + } + while ( v20 ); + v60 = (int *)v21; + v22 = v19; + do + { + v23 = v22; + v22 = *(_DWORD *)(v22 + 12); + } + while ( v22 ); + v61 = (int *)v23; + v59 = v19; + v62 = v50; + } + night::sourcemap::gen_sourcemap_content((int *)a1, &v57, &v63, (int *)&Block, v32, a7); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v57); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v63); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v51); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v45); + std::vector::~vector((void ***)&Block, v24); + std::string::_M_dispose(v44); + lpuexcpt = 0; + } + std::string::_M_dispose(v43); + std::vector::~vector(v37, v25); + std::string::_M_dispose(v41); + night::NSCompileJs::~NSCompileJs((int)v71, v26); + night::NSASTParse::~NSASTParse(v81); + night::NSToken::~NSToken((int)v69); + night::NSStream::~NSStream(v80); + std::_Vector_base::~_Vector_base(v36); + return lpuexcpt; +} +// 41D6D5: variable 'v28' is possibly undefined +// 41D8F8: variable 'v24' is possibly undefined +// 41D923: variable 'v25' is possibly undefined +// 41DB97: variable 'v26' is possibly undefined +// 40E4F2: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); + +//----- (0041DBE4) -------------------------------------------------------- +void __tcf_0(void) +{ + std::string::_M_dispose((void **)&night::nsv_); +} + +//----- (0041DBEE) -------------------------------------------------------- +void __tcf_1_1(void) +{ + std::string::_M_dispose((void **)&night::nst_); +} + +//----- (0041DBF8) -------------------------------------------------------- +void __tcf_2_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_SKIP); +} + +//----- (0041DC02) -------------------------------------------------------- +void __tcf_3_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_BOOL); +} + +//----- (0041DC0C) -------------------------------------------------------- +void __tcf_4_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_VAR); +} + +//----- (0041DC16) -------------------------------------------------------- +void __tcf_5_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_STR); +} + +//----- (0041DC20) -------------------------------------------------------- +void __tcf_6_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_NUM); +} + +//----- (0041DC2A) -------------------------------------------------------- +void __tcf_7_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_B_TYPE); +} + +//----- (0041DC34) -------------------------------------------------------- +void __tcf_8_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_KW); +} + +//----- (0041DC3E) -------------------------------------------------------- +void __tcf_9_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PUNC); +} + +//----- (0041DC48) -------------------------------------------------------- +void __tcf_10_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OP); +} + +//----- (0041DC52) -------------------------------------------------------- +void __tcf_11_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OP_SELF); +} + +//----- (0041DC5C) -------------------------------------------------------- +void __tcf_12_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_BINARY); +} + +//----- (0041DC66) -------------------------------------------------------- +void __tcf_13_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_ASSIGN); +} + +//----- (0041DC70) -------------------------------------------------------- +void __tcf_14_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_TERNARY); +} + +//----- (0041DC7A) -------------------------------------------------------- +void __tcf_15_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_K_V); +} + +//----- (0041DC84) -------------------------------------------------------- +void __tcf_16_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_DOT); +} + +//----- (0041DC8E) -------------------------------------------------------- +void __tcf_17_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_PROPERTY); +} + +//----- (0041DC98) -------------------------------------------------------- +void __tcf_18_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_SELF_OP); +} + +//----- (0041DCA2) -------------------------------------------------------- +void __tcf_19_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_BLOCK); +} + +//----- (0041DCAC) -------------------------------------------------------- +void __tcf_20_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_ARRAY); +} + +//----- (0041DCB6) -------------------------------------------------------- +void __tcf_21_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_BRACKET); +} + +//----- (0041DCC0) -------------------------------------------------------- +void __tcf_22_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_IF); +} + +//----- (0041DCCA) -------------------------------------------------------- +void __tcf_23_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_FOR); +} + +//----- (0041DCD4) -------------------------------------------------------- +void __tcf_24_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_WHILE); +} + +//----- (0041DCDE) -------------------------------------------------------- +void __tcf_25_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_DO_WHILE); +} + +//----- (0041DCE8) -------------------------------------------------------- +void __tcf_26_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_SWITCH); +} + +//----- (0041DCF2) -------------------------------------------------------- +void __tcf_27_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PROG); +} + +//----- (0041DCFC) -------------------------------------------------------- +void __tcf_28_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PROG_NO_SEM); +} + +//----- (0041DD06) -------------------------------------------------------- +void __tcf_29_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PROG_NO_SEM_REQUIRE); +} + +//----- (0041DD10) -------------------------------------------------------- +void __tcf_30_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_FUNC); +} + +//----- (0041DD1A) -------------------------------------------------------- +void __tcf_31_1(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_CALL); +} + +//----- (0041DD24) -------------------------------------------------------- +void __tcf_32_1(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_OP); +} + +//----- (0041DD2E) -------------------------------------------------------- +void __tcf_33_1(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_OP_SELF); +} + +//----- (0041DD38) -------------------------------------------------------- +void __tcf_34_1(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_ALL_OP); +} + +//----- (0041DD42) -------------------------------------------------------- +void __tcf_35_1(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_PUNC); +} + +//----- (0041DD4C) -------------------------------------------------------- +void __tcf_36_1(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_SPACE); +} + +//----- (0041DD56) -------------------------------------------------------- +void __tcf_37_1(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_KW); +} + +//----- (0041DD60) -------------------------------------------------------- +void __tcf_38_1(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_TYPE); +} + +//----- (0041DD6A) -------------------------------------------------------- +_DWORD *__thiscall std::string::operator+=(_DWORD *this, int a2) +{ + return std::string::_M_append(this, *(_BYTE **)a2, *(_DWORD *)(a2 + 4)); +} + +//----- (0041DD8A) -------------------------------------------------------- +int __cdecl night::sourcemap::int2vlq[abi:cxx11](int a1, int a2) +{ + int v2; // edx + int v3; // eax + int v4; // edx + int lpuexcpt; // [esp+18h] [ebp-40h] + + v2 = 2 * a2; + *(_DWORD *)(a1 + 4) = 0; + if ( a2 < 0 ) + v2 = (-2 * a2) | 1; + *(_BYTE *)(a1 + 8) = 0; + lpuexcpt = v2; + *(_DWORD *)a1 = a1 + 8; + do + { + v3 = lpuexcpt; + lpuexcpt >>= 5; + v4 = v3 % 32; + if ( lpuexcpt > 0 ) + v4 |= 0x20u; + std::string::push_back((_DWORD *)a1, night::sourcemap::g_sVLQ[v4]); + } + while ( lpuexcpt > 0 ); + return a1; +} +// 53E0DC: using guessed type char *night::sourcemap::g_sVLQ; + +//----- (0041DE4C) -------------------------------------------------------- +int __cdecl night::sourcemap::gen_sourcemap_content(int *a1, _DWORD *a2, _DWORD *a3, int *a4, int a5, int a6) +{ + char *v6; // eax + _DWORD *v7; // eax + char *v8; // eax + bool v9; // zf + void **v10; // eax + void **v11; // edx + void **v12; // edx + char v13; // al + void *v14; // eax + void **v16; // [esp+18h] [ebp-C0h] + int insert_hint_unique_pos; // [esp+18h] [ebp-C0h] + int v18; // [esp+1Ch] [ebp-BCh] + int v19; // [esp+20h] [ebp-B8h] + int v20; // [esp+24h] [ebp-B4h] + int v21; // [esp+28h] [ebp-B0h] + int v22; // [esp+2Ch] [ebp-ACh] + int v23; // [esp+30h] [ebp-A8h] + int v24; // [esp+30h] [ebp-A8h] + int v25; // [esp+34h] [ebp-A4h] + int v26; // [esp+38h] [ebp-A0h] + void **v27; // [esp+38h] [ebp-A0h] + void **v28; // [esp+3Ch] [ebp-9Ch] + int v29; // [esp+3Ch] [ebp-9Ch] + void **v30; // [esp+40h] [ebp-98h] + void **v31; // [esp+40h] [ebp-98h] + int v32; // [esp+40h] [ebp-98h] + struct _Unwind_Exception *lpuexcpt; // [esp+44h] [ebp-94h] + unsigned int lpuexcpta; // [esp+44h] [ebp-94h] + void **Block; // [esp+48h] [ebp-90h] + unsigned int v36; // [esp+84h] [ebp-54h] BYREF + char *v37; // [esp+88h] [ebp-50h] BYREF + int v38; // [esp+8Ch] [ebp-4Ch] + char v39; // [esp+90h] [ebp-48h] BYREF + int v40[2]; // [esp+A0h] [ebp-38h] BYREF + char v41; // [esp+A8h] [ebp-30h] BYREF + void *v42[8]; // [esp+B8h] [ebp-20h] BYREF + + v39 = 0; + v37 = &v39; + v38 = 0; + std::string::append(&v37, "{\"version\":3,\"sources\":[\""); + WXML::Rewrite::ToStringCode((int)v42, a1); + std::string::operator+=(&v37, (int)v42); + std::string::_M_dispose(v42); + std::string::append(&v37, "\"],"); + std::string::append(&v37, "\"names\":["); + for ( lpuexcpt = 0; (unsigned int)lpuexcpt < a3[5]; lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1) ) + { + if ( lpuexcpt ) + { + v36 = (unsigned int)lpuexcpt + 1; + v8 = std::map::operator[](a3, &v36); + std::operator+((int)v40, ",\"", (int)v8); + } + else + { + v36 = 1; + v6 = std::map::operator[](a3, &v36); + std::operator+((int)v40, "\"", (int)v6); + } + v7 = std::string::append(v40, "\""); + std::string::basic_string(v42, v7); + std::string::operator+=(&v37, (int)v42); + std::string::_M_dispose(v42); + std::string::_M_dispose((void **)v40); + } + std::string::append(&v37, "],"); + std::string::append(&v37, "\"mappings\":\""); + lpuexcpta = 0; + v21 = 0; + v22 = 0; + v23 = 0; + v25 = 0; + while ( lpuexcpta < (a4[1] - *a4) >> 6 ) + { + v20 = *(_DWORD *)(std::vector::at(a4, lpuexcpta) + 60) + a5 - 1; + v19 = *(_DWORD *)(std::vector::at(a4, lpuexcpta) + 24) - 1; + v18 = *(_DWORD *)(std::vector::at(a4, lpuexcpta) + 28) - 1; + v26 = std::vector::at(a4, lpuexcpta); + v28 = (void **)(a2 + 1); + v30 = (void **)a2[2]; + Block = (void **)(a2 + 1); + while ( v30 ) + { + v9 = (unsigned __int8)std::operator<((int)(v30 + 4), v26) == 0; + v10 = Block; + if ( v9 ) + v10 = v30; + v11 = (void **)v30[3]; + Block = v10; + if ( v9 ) + v11 = (void **)v30[2]; + v30 = v11; + } + if ( v28 == Block || (unsigned __int8)std::operator<(v26, (int)(Block + 4)) ) + { + v16 = Block; + Block = (void **)operator new(0x2Cu); + v31 = Block + 4; + std::string::basic_string((char *)Block + 16, v26); + Block[10] = 0; + insert_hint_unique_pos = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + a2, + v16, + (int)(Block + 4)); + v27 = v12; + if ( v12 ) + { + v13 = insert_hint_unique_pos != 0 || v28 == v12; + if ( !v13 ) + v13 = std::operator<((int)v31, (int)(v12 + 4)); + std::_Rb_tree_insert_and_rebalance(v13, Block, v27, v28); + ++a2[5]; + } + else + { + std::string::_M_dispose(v31); + operator delete(Block); + Block = (void **)insert_hint_unique_pos; + } + } + v14 = Block[10]; + v40[1] = 0; + v41 = 0; + v32 = (int)v14 - 1; + v29 = v19 - v23; + v24 = (int)v14 - v21 - 1; + v40[0] = (int)&v41; + night::sourcemap::int2vlq[abi:cxx11]((int)v42, v20 - v25); + std::string::operator+=(v40, (int)v42); + std::string::_M_dispose(v42); + night::sourcemap::int2vlq[abi:cxx11]((int)v42, 0); + std::string::operator+=(v40, (int)v42); + std::string::_M_dispose(v42); + night::sourcemap::int2vlq[abi:cxx11]((int)v42, v29); + std::string::operator+=(v40, (int)v42); + std::string::_M_dispose(v42); + night::sourcemap::int2vlq[abi:cxx11]((int)v42, v18 - v22); + std::string::operator+=(v40, (int)v42); + std::string::_M_dispose(v42); + night::sourcemap::int2vlq[abi:cxx11]((int)v42, v24); + std::string::operator+=(v40, (int)v42); + std::string::_M_dispose(v42); + std::string::basic_string((char *)v42, (int)v40); + std::string::append(v42, ","); + std::string::operator+=(&v37, (int)v42); + std::string::_M_dispose(v42); + std::string::_M_dispose((void **)v40); + ++lpuexcpta; + v21 = v32; + v22 = v18; + v23 = v19; + v25 = v20; + } + v37[v38 - 1] = 34; + std::string::append(&v37, "}"); + std::string::_M_assign(a6, (int)&v37); + std::string::_M_dispose((void **)&v37); + return 0; +} +// 41E242: variable 'v12' is possibly undefined + +//----- (0041E5F4) -------------------------------------------------------- +void __tcf_1_2(void) +{ + std::string::_M_dispose((void **)&night::nsv_); +} + +//----- (0041E5FE) -------------------------------------------------------- +void __tcf_2_2(void) +{ + std::string::_M_dispose((void **)&night::nst_); +} + +//----- (0041E608) -------------------------------------------------------- +void __tcf_3_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_SKIP); +} + +//----- (0041E612) -------------------------------------------------------- +void __tcf_4_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_BOOL); +} + +//----- (0041E61C) -------------------------------------------------------- +void __tcf_5_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_VAR); +} + +//----- (0041E626) -------------------------------------------------------- +void __tcf_6_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_STR); +} + +//----- (0041E630) -------------------------------------------------------- +void __tcf_7_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_NUM); +} + +//----- (0041E63A) -------------------------------------------------------- +void __tcf_8_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_B_TYPE); +} + +//----- (0041E644) -------------------------------------------------------- +void __tcf_9_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_KW); +} + +//----- (0041E64E) -------------------------------------------------------- +void __tcf_10_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PUNC); +} + +//----- (0041E658) -------------------------------------------------------- +void __tcf_11_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OP); +} + +//----- (0041E662) -------------------------------------------------------- +void __tcf_12_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OP_SELF); +} + +//----- (0041E66C) -------------------------------------------------------- +void __tcf_13_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_BINARY); +} + +//----- (0041E676) -------------------------------------------------------- +void __tcf_14_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_ASSIGN); +} + +//----- (0041E680) -------------------------------------------------------- +void __tcf_15_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_TERNARY); +} + +//----- (0041E68A) -------------------------------------------------------- +void __tcf_16_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_K_V); +} + +//----- (0041E694) -------------------------------------------------------- +void __tcf_17_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_DOT); +} + +//----- (0041E69E) -------------------------------------------------------- +void __tcf_18_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_PROPERTY); +} + +//----- (0041E6A8) -------------------------------------------------------- +void __tcf_19_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_SELF_OP); +} + +//----- (0041E6B2) -------------------------------------------------------- +void __tcf_20_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_OBJ_BLOCK); +} + +//----- (0041E6BC) -------------------------------------------------------- +void __tcf_21_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_ARRAY); +} + +//----- (0041E6C6) -------------------------------------------------------- +void __tcf_22_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_BRACKET); +} + +//----- (0041E6D0) -------------------------------------------------------- +void __tcf_23_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_IF); +} + +//----- (0041E6DA) -------------------------------------------------------- +void __tcf_24_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_FOR); +} + +//----- (0041E6E4) -------------------------------------------------------- +void __tcf_25_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_WHILE); +} + +//----- (0041E6EE) -------------------------------------------------------- +void __tcf_26_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_DO_WHILE); +} + +//----- (0041E6F8) -------------------------------------------------------- +void __tcf_27_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_SWITCH); +} + +//----- (0041E702) -------------------------------------------------------- +void __tcf_28_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PROG); +} + +//----- (0041E70C) -------------------------------------------------------- +void __tcf_29_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PROG_NO_SEM); +} + +//----- (0041E716) -------------------------------------------------------- +void __tcf_30_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_PROG_NO_SEM_REQUIRE); +} + +//----- (0041E720) -------------------------------------------------------- +void __tcf_31_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_FUNC); +} + +//----- (0041E72A) -------------------------------------------------------- +void __tcf_32_2(void) +{ + std::string::_M_dispose((void **)&night::NS_TYPE_CALL); +} + +//----- (0041E734) -------------------------------------------------------- +void __tcf_33_2(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_OP); +} + +//----- (0041E73E) -------------------------------------------------------- +void __tcf_34_2(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_OP_SELF); +} + +//----- (0041E748) -------------------------------------------------------- +void __tcf_35_2(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_ALL_OP); +} + +//----- (0041E752) -------------------------------------------------------- +void __tcf_36_2(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_PUNC); +} + +//----- (0041E75C) -------------------------------------------------------- +void __tcf_37_2(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_SPACE); +} + +//----- (0041E766) -------------------------------------------------------- +void __tcf_38_2(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_KW); +} + +//----- (0041E770) -------------------------------------------------------- +void __tcf_39_1(void) +{ + std::string::_M_dispose((void **)&night::NS_BUILTIN_TYPE); +} + +//----- (0041E77A) -------------------------------------------------------- +int __cdecl night::str::path_combine(_DWORD *a1, _DWORD *a2, int a3) +{ + void *v3; // ecx + _BYTE *v4; // eax + size_t v5; // eax + _BYTE *v6; // edx + int v7; // edx + int v9; // [esp+14h] [ebp-94h] + int lpuexcpt; // [esp+18h] [ebp-90h] + char *v11; // [esp+58h] [ebp-50h] BYREF + unsigned int v12; // [esp+5Ch] [ebp-4Ch] + char v13; // [esp+60h] [ebp-48h] BYREF + void *v14[6]; // [esp+70h] [ebp-38h] BYREF + void *Src; // [esp+88h] [ebp-20h] BYREF + size_t Size; // [esp+8Ch] [ebp-1Ch] + int v17[5]; // [esp+90h] [ebp-18h] BYREF + + v12 = 0; + v11 = &v13; + v13 = 0; + lpuexcpt = MMBizWxaAppComm::PathCombine(a1, a2, (unsigned int *)&v11); + if ( !lpuexcpt ) + { + lpuexcpt = 1; + if ( v12 > 3 ) + { + std::string::substr(v14, &v11, v12 - 4, 0xFFFFFFFF); + lpuexcpt = std::string::compare((int)v14, ".wxs"); + std::string::_M_dispose(v14); + if ( lpuexcpt ) + { + lpuexcpt = 2; + } + else + { + WXML::Rewrite::ToStringCode((int)&Src, (int *)&v11); + v3 = Src; + v4 = *(_BYTE **)a3; + if ( Src == v17 ) + { + if ( Size ) + std::string::_S_copy(v4, (unsigned __int8 *)Src, Size); + v5 = Size; + v6 = *(_BYTE **)a3; + *(_DWORD *)(a3 + 4) = Size; + v6[v5] = 0; + } + else + { + if ( v4 == (_BYTE *)(a3 + 8) ) + v4 = 0; + else + v9 = *(_DWORD *)(a3 + 8); + *(_DWORD *)(a3 + 4) = Size; + v7 = v17[0]; + *(_DWORD *)a3 = v3; + *(_DWORD *)(a3 + 8) = v7; + if ( v4 ) + { + Src = v4; + v17[0] = v9; + } + else + { + Src = v17; + } + } + Size = 0; + *(_BYTE *)Src = 0; + std::string::_M_dispose(&Src); + } + } + } + std::string::_M_dispose((void **)&v11); + return lpuexcpt; +} +// 41E8CE: variable 'v9' is possibly undefined + +//----- (0041E949) -------------------------------------------------------- +int __cdecl night::str::get_token(int a1, _DWORD *a2, unsigned int a3) +{ + char v3; // al + + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)a1 = a1 + 8; + *(_BYTE *)(a1 + 8) = 0; + while ( a3 < a2[1] ) + { + v3 = *(_BYTE *)std::string::at(a2, a3); + if ( (unsigned __int8)((v3 & 0xDF) - 65) > 0x19u && v3 != 95 && (unsigned __int8)(v3 - 48) > 9u ) + break; + ++a3; + std::string::push_back((_DWORD *)a1, v3); + } + return a1; +} + +//----- (0041EA13) -------------------------------------------------------- +int __cdecl night::readfile(char *FileName, unsigned int *a2) +{ + void *v2; // esp + FILE *v3; // eax + FILE *v4; // ebx + unsigned int v5; // eax + char Buffer[4]; // [esp+10h] [ebp-1018h] BYREF + char v8[4092]; // [esp+14h] [ebp-1014h] BYREF + + v2 = alloca(4124); + std::string::_M_replace(a2, 0, a2[1], (char *)&unk_5534F3, 0); + v3 = fopen(FileName, "r"); + if ( !v3 ) + return -1; + v4 = v3; + memset(v8, 0, sizeof(v8)); + *(_DWORD *)Buffer = 0; + while ( fgets(Buffer, 4096, v4) ) + { + v5 = strlen(Buffer); + if ( 0x3FFFFFFF - a2[1] < v5 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(a2, Buffer, v5); + } + fclose(v4); + return 0; +} + +//----- (0041EAE9) -------------------------------------------------------- +int __cdecl night::writefile(char *FileName, int a2) +{ + FILE *v2; // ebx + int result; // eax + + v2 = fopen(FileName, "w+"); + result = -1; + if ( v2 ) + { + if ( fwrite(*(const void **)a2, *(_DWORD *)(a2 + 4), 1u, v2) == 1 ) + { + fclose(v2); + return 0; + } + else + { + fclose(v2); + return -1; + } + } + return result; +} + +//----- (0041EB4C) -------------------------------------------------------- +bool __cdecl WXML::DOMLib::AttrsCompartor(int a1, int a2) +{ + return *(_DWORD *)(a1 + 80) < *(_DWORD *)(a2 + 80); +} + +//----- (0041EB60) -------------------------------------------------------- +void __tcf_1_3(void) +{ + std::ios_base::Init::~Init(); +} + +//----- (0041EB6A) -------------------------------------------------------- +int __usercall __gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>::operator()<__gnu_cxx::__normal_iterator*,std::vector>>,__gnu_cxx::__normal_iterator*,std::vector>>>@( + int (__cdecl *a1)(int, int)@, + int a2@, + int a3@) +{ + return a1(a2, a3); +} + +//----- (0041EB7C) -------------------------------------------------------- +void __usercall std::_Rb_tree,std::less,std::allocator>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-18h] + + while ( a1 ) + { + std::_Rb_tree,std::less,std::allocator>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::string::_M_dispose((void **)(a1 + 16)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (0041EBB0) -------------------------------------------------------- +void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-28h] + + while ( a1 ) + { + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::string::_M_dispose((void **)(a1 + 40)); + std::string::_M_dispose((void **)(a1 + 16)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (0041EBF0) -------------------------------------------------------- +std::ostream::sentry *__usercall std::operator<<>@( + std::ostream::sentry *a1@, + char a2@
) +{ + int v3[3]; // [esp+1Ch] [ebp-Ch] BYREF + + LOBYTE(v3[0]) = a2; + return std::__ostream_insert>(a1, (int)v3, 1); +} +// 41EBF0: using guessed type int var_C[3]; + +//----- (0041EC12) -------------------------------------------------------- +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str) +{ + size_t v2; // eax + + v2 = strlen(Str); + return std::string::_M_replace(this, 0, this[1], Str, v2); +} + +//----- (0041EC50) -------------------------------------------------------- +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2) +{ + unsigned __int8 *v3; // eax + unsigned __int8 *v4; // ecx + unsigned __int8 *v5; // edx + unsigned __int8 *v6; // eax + unsigned __int8 *v7; // edx + unsigned __int8 *result; // eax + unsigned __int8 *v9; // [esp+18h] [ebp-20h] + + v3 = *this; + v4 = *(unsigned __int8 **)a2; + v5 = *(unsigned __int8 **)(a2 + 4); + if ( *(_DWORD *)a2 == a2 + 8 ) + { + if ( v5 ) + std::string::_S_copy(v3, v4, *(_DWORD *)(a2 + 4)); + v6 = *(unsigned __int8 **)(a2 + 4); + v7 = *this; + this[1] = v6; + v6[(_DWORD)v7] = 0; + } + else + { + if ( v3 == (unsigned __int8 *)(this + 2) ) + v3 = 0; + else + v9 = this[2]; + *this = v4; + this[1] = v5; + this[2] = *(unsigned __int8 **)(a2 + 8); + if ( v3 ) + { + *(_DWORD *)a2 = v3; + *(_DWORD *)(a2 + 8) = v9; + } + else + { + *(_DWORD *)a2 = a2 + 8; + } + } + result = *(unsigned __int8 **)a2; + *(_DWORD *)(a2 + 4) = 0; + *result = 0; + return result; +} +// 41ECB7: variable 'v9' is possibly undefined + +//----- (0041ECD8) -------------------------------------------------------- +int __userpurge WXML::DOMLib::WXMLDom::GenRawId@( + _DWORD *a1@, + WXML::DOMLib::WXMLDom *this, + unsigned __int64 *a3) +{ + unsigned int i; // esi + int v5; // edx + int v6; // eax + int result; // eax + unsigned __int64 *v8; // [esp+4h] [ebp-24h] + + for ( i = 0; (a1[19] - a1[18]) >> 3 > i; ++i ) + WXML::DOMLib::WXMLDom::GenRawId(this, v8); + v5 = *((_DWORD *)this + 1); + v6 = *(_DWORD *)this; + a1[67] = v5; + a1[66] = v6; + *(_DWORD *)this = v6; + result = 0; + *((_DWORD *)this + 1) = v5 + 1; + return result; +} +// 41ECFE: variable 'v8' is possibly undefined + +//----- (0041ED2A) -------------------------------------------------------- +void __fastcall WXML::DOMLib::Parser::Match(int a1) +{ + ++*(_DWORD *)(a1 + 100); +} + +//----- (0041ED2E) -------------------------------------------------------- +bool __stdcall WXML::DOMLib::Parser::IsValidTag(const char **a1) +{ + return strncmp(*a1, "wx-", 3u) != 0; +} + +//----- (0041ED5A) -------------------------------------------------------- +_DWORD *__fastcall WXML::DOMLib::Parser::Peek(_DWORD *a1) +{ + _DWORD *result; // eax + int v2; // esi + unsigned int v3; // ebx + + result = a1 + 26; + v2 = a1[22]; + v3 = a1[25]; + if ( v3 < -1227133513 * ((a1[23] - v2) >> 4) ) + return (_DWORD *)(v2 + 112 * v3); + return result; +} + +//----- (0041ED84) -------------------------------------------------------- +int __cdecl WXML::DOMLib::WXMLDom::Error(int a1, int *a2, int a3, int *a4, int *a5) +{ + std::ostream::sentry *v5; // eax + std::ostream::sentry *v6; // eax + std::ostream::sentry *v7; // eax + std::ostream::sentry *v8; // eax + std::ostream::sentry *v9; // eax + std::ostream::sentry *v10; // eax + std::ostream::sentry *v11; // eax + void *v13[6]; // [esp+58h] [ebp-F0h] BYREF + char v14[8]; // [esp+70h] [ebp-D8h] BYREF + char v15[4]; // [esp+78h] [ebp-D0h] BYREF + char v16[204]; // [esp+7Ch] [ebp-CCh] BYREF + + std::basic_stringstream,std::allocator>::basic_stringstream((int)v14); + v5 = std::operator<<((std::ostream::sentry *)v15, a2); + std::operator<<>(v5, ":"); + v6 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(a3 + 8)); + std::operator<<>(v6, ":"); + v7 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(a3 + 12)); + std::operator<<>(v7, ":"); + if ( a4[1] ) + { + v8 = std::operator<<>((std::ostream::sentry *)v15, " Bad attr `"); + v9 = std::operator<<(v8, a4); + std::operator<<>(v9, "`"); + } + else + { + std::operator<<>((std::ostream::sentry *)v15, " Bad value"); + } + v10 = std::operator<<>((std::ostream::sentry *)v15, " with message: "); + v11 = std::operator<<(v10, a5); + std::operator<<>(v11, "."); + std::stringbuf::str((int)v13, (int)v16); + *(_DWORD *)a1 = a1 + 8; + *(_DWORD *)(a1 + 4) = 0; + *(_BYTE *)(a1 + 8) = 0; + std::string::_M_assign(a1, (int)v13); + std::string::_M_dispose(v13); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v14); + return a1; +} +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); +// 41ED84: using guessed type char var_D0[4]; +// 41ED84: using guessed type char var_CC[204]; + +//----- (0041EFB6) -------------------------------------------------------- +int __cdecl WXML::DOMLib::joinString(int a1, _DWORD *a2, char a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-110h] + char v5[8]; // [esp+50h] [ebp-D8h] BYREF + char v6[4]; // [esp+58h] [ebp-D0h] BYREF + char v7[204]; // [esp+5Ch] [ebp-CCh] BYREF + + std::basic_stringstream,std::allocator>::basic_stringstream((int)v5); + for ( lpuexcpt = 0; + (unsigned int)lpuexcpt < -1431655765 * ((a2[1] - *a2) >> 3); + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1) ) + { + std::operator<<((std::ostream::sentry *)v6, (int *)(24 * (_DWORD)lpuexcpt + *a2)); + if ( (struct _Unwind_Exception *)(-1431655765 * ((a2[1] - *a2) >> 3) - 1) != lpuexcpt ) + std::operator<<>((std::ostream::sentry *)v6, a3); + } + std::stringbuf::str(a1, (int)v7); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v5); + return a1; +} +// 41EFB6: using guessed type char var_D0[4]; +// 41EFB6: using guessed type char var_CC[204]; + +//----- (0041F11E) -------------------------------------------------------- +_DWORD *__thiscall WXML::DOMLib::Parser::GetParsed(_DWORD *ecx0, WXML::DOMLib::Parser *this) +{ + std::__shared_ptr::__shared_ptr(ecx0, this); + return ecx0; +} + +//----- (0041F13A) -------------------------------------------------------- +void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_drop_node( + void **a1@) +{ + void **v1; // esi + + v1 = a1 + 4; + WXML::DOMLib::Token::~Token((int)(a1 + 10)); + std::string::_M_dispose(v1); + operator delete(a1); +} + +//----- (0041F166) -------------------------------------------------------- +void __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase( + int a1@) +{ + int v2; // esi + + while ( a1 ) + { + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_drop_node((void **)a1); + a1 = v2; + } +} + +//----- (0041F18C) -------------------------------------------------------- +void __fastcall WXML::DOMLib::WXMLDom::~WXMLDom(int a1) +{ + int v2; // edi + int i; // esi + volatile signed __int32 **v4; // ecx + + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(*(_DWORD *)(a1 + 280)); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)(a1 + 252)); + std::string::_M_dispose((void **)(a1 + 220)); + std::string::_M_dispose((void **)(a1 + 196)); + WXML::DOMLib::Token::~Token(a1 + 84); + v2 = *(_DWORD *)(a1 + 76); + for ( i = *(_DWORD *)(a1 + 72); v2 != i; i += 8 ) + { + v4 = (volatile signed __int32 **)(i + 4); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v4); + } + if ( *(_DWORD *)(a1 + 72) ) + operator delete(*(void **)(a1 + 72)); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(*(_DWORD *)(a1 + 56)); + std::string::_M_dispose((void **)(a1 + 24)); + std::string::_M_dispose((void **)a1); +} + +//----- (0041F210) -------------------------------------------------------- +void __thiscall std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(volatile signed __int32 **this, int a2) +{ + if ( *this != (volatile signed __int32 *)a2 ) + { + if ( a2 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy(a2); + if ( *this ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release(*this); + *this = (volatile signed __int32 *)a2; + } +} + +//----- (0041F23C) -------------------------------------------------------- +void __thiscall WXML::DOMLib::Token::operator=(int this, int a2) +{ + volatile signed __int32 **v3; // ecx + + v3 = (volatile signed __int32 **)(this + 4); + *(v3 - 1) = *(volatile signed __int32 **)a2; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(v3, *(_DWORD *)(a2 + 4)); + *(_DWORD *)(this + 8) = *(_DWORD *)(a2 + 8); + *(_DWORD *)(this + 12) = *(_DWORD *)(a2 + 12); + *(_DWORD *)(this + 16) = *(_DWORD *)(a2 + 16); + *(_DWORD *)(this + 20) = *(_DWORD *)(a2 + 20); + *(_DWORD *)(this + 24) = *(_DWORD *)(a2 + 24); + *(_BYTE *)(this + 28) = *(_BYTE *)(a2 + 28); + std::string::_M_assign(this + 32, a2 + 32); + *(_DWORD *)(this + 56) = *(_DWORD *)(a2 + 56); + std::string::_M_assign(this + 60, a2 + 60); + *(_BYTE *)(this + 84) = *(_BYTE *)(a2 + 84); + std::string::_M_assign(this + 88, a2 + 88); +} + +//----- (0041F2C0) -------------------------------------------------------- +_DWORD *__thiscall WXML::DOMLib::Parser::Error( + _DWORD *ecx0, + WXML::DOMLib::Parser *this, + char *a3, + WXML::DOMLib::Token *a4) +{ + WXML::DOMLib::Token *v4; // eax + std::ostream::sentry *v5; // eax + std::ostream::sentry *v6; // eax + std::ostream::sentry *v7; // eax + std::ostream::sentry *v8; // eax + std::ostream::sentry *v9; // eax + char v10; // dl + const WXML::DOMLib::Token *v12; // [esp+4h] [ebp-1C4h] + char *v13; // [esp+4h] [ebp-1C4h] + int v14; // [esp+1Ch] [ebp-1ACh] + int v15; // [esp+20h] [ebp-1A8h] + int v16; // [esp+24h] [ebp-1A4h] + void *v18[6]; // [esp+68h] [ebp-160h] BYREF + int v19[5]; // [esp+80h] [ebp-148h] BYREF + int v20; // [esp+94h] [ebp-134h] + int v21; // [esp+98h] [ebp-130h] + char v22[8]; // [esp+F0h] [ebp-D8h] BYREF + char v23[4]; // [esp+F8h] [ebp-D0h] BYREF + char v24[204]; // [esp+FCh] [ebp-CCh] BYREF + + std::basic_stringstream,std::allocator>::basic_stringstream((int)v22); + v4 = (WXML::DOMLib::Token *)WXML::DOMLib::Parser::Peek(this); + WXML::DOMLib::Token::Token((int)v19, v4, v12); + if ( v21 == 4 ) + { + if ( !a4 ) + a4 = (WXML::DOMLib::Token *)(*((_DWORD *)this + 22) + 112 * (*((_DWORD *)this + 25) - 1)); + WXML::DOMLib::Token::operator=((int)v19, (int)a4); + a3 = "end tag missing"; + } + v5 = std::operator<<((std::ostream::sentry *)v23, (int *)this + 82); + std::operator<<>(v5, ":"); + v6 = (std::ostream::sentry *)std::ostream::operator<<(v19[2]); + std::operator<<>(v6, ":"); + v7 = (std::ostream::sentry *)std::ostream::operator<<(v19[3]); + v8 = std::operator<<>(v7, ": "); + v9 = std::operator<<>(v8, a3); + std::operator<<>(v9, ", near `"); + v16 = 0; + v14 = *(_DWORD *)v19[0]; + v15 = v19[4]; + while ( v20 > v16 ) + { + if ( v16 == 7 ) + { + if ( v20 > 7 ) + std::operator<<>((std::ostream::sentry *)v23, "..."); + break; + } + v10 = *(_BYTE *)(v15 + v14 + v16); + if ( v10 == 13 ) + { + v13 = "\\r"; +LABEL_11: + std::operator<<>((std::ostream::sentry *)v23, v13); + goto LABEL_12; + } + if ( v10 == 10 ) + { + v13 = "\\n"; + goto LABEL_11; + } + std::operator<<>((std::ostream::sentry *)v23, v10); +LABEL_12: + ++v16; + } + std::operator<<>((std::ostream::sentry *)v23, "`"); + std::stringbuf::str((int)v18, (int)v24); + *ecx0 = ecx0 + 2; + ecx0[1] = 0; + *((_BYTE *)ecx0 + 8) = 0; + std::string::_M_assign((int)ecx0, (int)v18); + std::string::_M_dispose(v18); + WXML::DOMLib::Token::~Token((int)v19); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v22); + return ecx0; +} +// 41F337: variable 'v12' is possibly undefined +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); +// 41F2C0: using guessed type char var_D0[4]; +// 41F2C0: using guessed type char var_CC[204]; + +//----- (0041F610) -------------------------------------------------------- +unsigned __int8 *__thiscall WXML::DOMLib::Token::operator=(int this, int a2) +{ + volatile signed __int32 **v3; // ecx + + v3 = (volatile signed __int32 **)(this + 4); + *(v3 - 1) = *(volatile signed __int32 **)a2; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(v3, *(_DWORD *)(a2 + 4)); + *(_DWORD *)(this + 8) = *(_DWORD *)(a2 + 8); + *(_DWORD *)(this + 12) = *(_DWORD *)(a2 + 12); + *(_DWORD *)(this + 16) = *(_DWORD *)(a2 + 16); + *(_DWORD *)(this + 20) = *(_DWORD *)(a2 + 20); + *(_DWORD *)(this + 24) = *(_DWORD *)(a2 + 24); + *(_BYTE *)(this + 28) = *(_BYTE *)(a2 + 28); + std::string::operator=((unsigned __int8 **)(this + 32), a2 + 32); + *(_DWORD *)(this + 56) = *(_DWORD *)(a2 + 56); + std::string::operator=((unsigned __int8 **)(this + 60), a2 + 60); + *(_BYTE *)(this + 84) = *(_BYTE *)(a2 + 84); + return std::string::operator=((unsigned __int8 **)(this + 88), a2 + 88); +} + +//----- (0041F694) -------------------------------------------------------- +unsigned __int8 *__thiscall std::pair::operator=(unsigned __int8 **this, int a2) +{ + std::string::operator=(this, a2); + return WXML::DOMLib::Token::operator=((int)(this + 6), a2 + 24); +} + +//----- (0041F6BE) -------------------------------------------------------- +unsigned int __thiscall std::string::basic_string(void **this, char *Str) +{ + size_t v2; // eax + size_t v3; // eax + void **v5; // [esp+1Ch] [ebp-Ch] + + *this = this + 2; + v2 = -1; + if ( Str ) + { + v5 = this; + v3 = strlen(Str); + this = v5; + v2 = (size_t)&Str[v3]; + } + return std::string::_M_construct(this, (unsigned __int8 *)Str, v2); +} + +//----- (0041F6F9) -------------------------------------------------------- +void **__cdecl WXML::DOMLib::removern(void **a1, _DWORD *a2) +{ + unsigned int v2; // edx + char v3; // al + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-40h] + + std::string::basic_string(a1, (char *)&byte_5537CA); + for ( lpuexcpt = 0; ; lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1) ) + { + v2 = a2[1]; + if ( (unsigned int)lpuexcpt >= v2 ) + break; + v3 = *((_BYTE *)lpuexcpt + *a2); + if ( v2 - 1 <= (unsigned int)lpuexcpt || v3 != 13 || *((_BYTE *)lpuexcpt + *a2 + 1) != 10 ) + std::string::push_back(a1, v3); + } + return a1; +} + +//----- (0041F7BA) -------------------------------------------------------- +int __usercall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_lower_bound@( + int a1@, + int a2@, + int a3@) +{ + char v6; // al + int v7; // edx + + while ( a1 ) + { + v6 = std::operator<(a1 + 16, a3); + v7 = *(_DWORD *)(a1 + 12); + if ( !v6 ) + v7 = *(_DWORD *)(a1 + 8); + if ( !v6 ) + a2 = a1; + a1 = v7; + } + return a2; +} + +//----- (0041F7F6) -------------------------------------------------------- +int __thiscall WXML::DOMLib::WXMLDom::AddTestAttr(_DWORD *this, int *a2, int a3, char a4) +{ + std::ostream::sentry *v4; // eax + std::ostream::sentry *v5; // eax + std::ostream::sentry *v6; // eax + std::ostream::sentry *v7; // eax + std::ostream::sentry *v8; // eax + std::ostream::sentry *v9; // eax + std::ostream::sentry *v10; // eax + std::ostream::sentry *v11; // eax + std::ostream::sentry *v12; // eax + std::ostream::sentry *v13; // eax + std::ostream::sentry *v14; // eax + std::ostream::sentry *v15; // eax + BOOL v17; // [esp+18h] [ebp-140h] + unsigned int i; // [esp+20h] [ebp-138h] + BOOL lpuexcpt; // [esp+24h] [ebp-134h] + struct _Unwind_Exception *lpuexcpta; // [esp+24h] [ebp-134h] + void **v22; // [esp+28h] [ebp-130h] + void *v23[6]; // [esp+60h] [ebp-F8h] BYREF + _QWORD v24[3]; // [esp+78h] [ebp-E0h] BYREF + void *v25[6]; // [esp+90h] [ebp-C8h] BYREF + void *v26[6]; // [esp+A8h] [ebp-B0h] BYREF + _QWORD v27[3]; // [esp+C0h] [ebp-98h] BYREF + void *v28; // [esp+D8h] [ebp-80h] BYREF + void *v29; // [esp+F0h] [ebp-68h] BYREF + void *v30; // [esp+108h] [ebp-50h] BYREF + void *v31; // [esp+120h] [ebp-38h] BYREF + void *v32; // [esp+138h] [ebp-20h] BYREF + char v33; // [esp+150h] [ebp-8h] BYREF + + lpuexcpt = 1; + if ( !std::operator==((int)this, "button") ) + lpuexcpt = std::operator==((int)this, "navigator"); + std::string::basic_string((void **)v27, "bind"); + std::string::basic_string(&v28, "bind:"); + std::string::basic_string(&v29, "catch"); + std::string::basic_string(&v30, "catch:"); + std::string::basic_string(&v31, "capture-bind"); + std::string::basic_string(&v32, "capture-catch"); + std::string::basic_string((void **)v24, (char *)off_553859); + std::string::basic_string(v25, "touchstart"); + std::string::basic_string(v26, "touchend"); + for ( i = 0; i <= 5 && !lpuexcpt; ++i ) + { + lpuexcpta = 0; + do + { + std::string::basic_string((char *)v23, (int)&v27[3 * i]); + std::string::append(v23, (int)&v24[3 * (int)lpuexcpta]); + v17 = std::map::count(this + 12, (int)v23); + std::string::_M_dispose(v23); + lpuexcpta = (struct _Unwind_Exception *)((char *)lpuexcpta + 1); + } + while ( (unsigned int)lpuexcpta <= 2 && !v17 ); + lpuexcpt = v17; + } + if ( lpuexcpt ) + { + ++WXML::DOMLib::WXMLDom::componentCnt; + v4 = std::operator<<>((std::ostream::sentry *)(a3 + 8), "_af("); + v5 = std::operator<<(v4, a2); + v6 = std::operator<<>(v5, ","); + v7 = std::ostream::_M_insert(v6, 1); + v8 = std::operator<<>(v7, ","); + v9 = std::ostream::_M_insert(v8, this[66], this[67]); + } + else + { + v10 = std::operator<<>((std::ostream::sentry *)(a3 + 8), "_af("); + v11 = std::operator<<(v10, a2); + v12 = std::operator<<>(v11, ","); + v9 = std::ostream::_M_insert(v12, 0); + } + v13 = std::operator<<>(v9, ","); + v14 = std::ostream::_M_insert(v13, this[66], this[67]); + v15 = std::operator<<>(v14, ");"); + std::operator<<>(v15, a4); + std::string::_M_dispose(v26); + std::string::_M_dispose(v25); + std::string::_M_dispose((void **)v24); + v22 = (void **)&v33; + do + { + v22 -= 6; + std::string::_M_dispose(v22); + } + while ( v22 != (void **)v27 ); + return 0; +} +// 566558: using guessed type int WXML::DOMLib::WXMLDom::componentCnt; + +//----- (0041FD73) -------------------------------------------------------- +int __cdecl WXML::DOMLib::splitString(int a1, int *a2, char a3) +{ + char *i; // [esp+14h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + void *v6[8]; // [esp+58h] [ebp-20h] BYREF + + *(_DWORD *)a1 = 0; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 8) = 0; + lpuexcpt = 0; + for ( i = std::string::find(a2, a3, 0); i != (char *)-1; i = std::string::find(a2, a3, (unsigned int)(i + 1)) ) + { + std::string::substr(v6, a2, (unsigned int)lpuexcpt, i - (char *)lpuexcpt); + std::vector::emplace_back((void **)a1, v6); + std::string::_M_dispose(v6); + lpuexcpt = (struct _Unwind_Exception *)(i + 1); + } + std::string::substr(v6, a2, (unsigned int)lpuexcpt, 0xFFFFFFFF); + std::vector::emplace_back((void **)a1, v6); + std::string::_M_dispose(v6); + return a1; +} + +//----- (0041FEDD) -------------------------------------------------------- +int __cdecl WXML::DOMLib::resolvePath(int a1, int *a2, int *a3) +{ + int v3; // edx + int v4; // edx + unsigned int v5; // eax + unsigned int i; // [esp+14h] [ebp-84h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-80h] + bool lpuexcpta; // [esp+18h] [ebp-80h] + void **v10; // [esp+54h] [ebp-44h] BYREF + void **v11; // [esp+58h] [ebp-40h] + void *v12[6]; // [esp+60h] [ebp-38h] BYREF + int v13[8]; // [esp+78h] [ebp-20h] BYREF + + *(_BYTE *)(a1 + 8) = 0; + *(_DWORD *)a1 = a1 + 8; + *(_DWORD *)(a1 + 4) = 0; + if ( *(_BYTE *)*a3 != 47 ) + { + WXML::DOMLib::splitString((int)&v10, a2, 47); + v11 -= 6; + std::string::_M_dispose(v11); + WXML::DOMLib::splitString((int)v13, a3, 47); + for ( i = 0; i < -1431655765 * ((v13[1] - v13[0]) >> 3); ++i ) + { + lpuexcpt = (struct _Unwind_Exception *)(24 * i); + if ( std::operator==(24 * i + v13[0], "..") ) + { + v11 -= 6; + std::string::_M_dispose(v11); + } + else if ( !std::operator==((int)lpuexcpt + v13[0], (char *)&byte_5537CA) + && !std::operator==((int)lpuexcpt + v13[0], ".") ) + { + std::vector::push_back((int)&v10, (int)lpuexcpt + v13[0]); + } + } + WXML::DOMLib::joinString((int)v12, &v10, 47); + std::string::operator=((unsigned __int8 **)a1, (int)v12); + std::string::_M_dispose(v12); + std::vector::~vector((void ***)v13, v3); + std::vector::~vector(&v10, v4); + } + if ( *(_BYTE *)*a2 == 46 && *(_BYTE *)*a3 == 47 ) + { + std::operator+((int)v13, ".", (int)a3); + std::string::operator=((unsigned __int8 **)a1, (int)v13); + std::string::_M_dispose((void **)v13); + } + v5 = *(_DWORD *)(a1 + 4); + if ( v5 <= 4 + || (std::string::substr(v13, (_DWORD *)a1, v5 - 5, 0xFFFFFFFF), + lpuexcpta = std::operator==((int)v13, ".wxml"), + std::string::_M_dispose((void **)v13), + !lpuexcpta) ) + { + std::string::append((_DWORD *)a1, ".wxml"); + } + return a1; +} +// 42006A: variable 'v3' is possibly undefined +// 420072: variable 'v4' is possibly undefined + +//----- (00420184) -------------------------------------------------------- +void __fastcall WXML::DOMLib::Parser::ATTR(WXML::DOMLib::Parser *a1) +{ + WXML::DOMLib::Token *v1; // eax + int i; // edx + char v3; // cl + unsigned __int8 **v4; // eax + _DWORD *v5; // eax + WXML::DOMLib::Token *v6; // eax + int v7; // ecx + char *v8; // eax + int v9; // ecx + char *v10; // eax + const WXML::DOMLib::Token *v11; // [esp+4h] [ebp-164h] + const char *v12; // [esp+4h] [ebp-164h] + const char *v13; // [esp+4h] [ebp-164h] + const char *v14; // [esp+4h] [ebp-164h] + const WXML::DOMLib::Token *v15; // [esp+4h] [ebp-164h] + _DWORD *exception; // [esp+14h] [ebp-154h] + void *v18[6]; // [esp+58h] [ebp-110h] BYREF + int v19[5]; // [esp+70h] [ebp-F8h] BYREF + int v20; // [esp+84h] [ebp-E4h] + char v21[24]; // [esp+E0h] [ebp-88h] BYREF + int v22; // [esp+F8h] [ebp-70h] + + v1 = (WXML::DOMLib::Token *)WXML::DOMLib::Parser::Peek(a1); + WXML::DOMLib::Token::Token((int)v19, v1, v11); + if ( !WXML::DOMLib::Token::IsMatch((int)v19, (WXML::DOMLib::Token *)">", v12) + && !WXML::DOMLib::Token::IsMatch((int)v19, (WXML::DOMLib::Token *)"/>", v13) ) + { + if ( !v19[0] ) + goto LABEL_12; + for ( i = 0; v20 > i; ++i ) + { + v3 = *(_BYTE *)(v19[4] + *(_DWORD *)v19[0] + i); + if ( (unsigned __int8)((v3 & 0xDF) - 65) > 0x19u && (unsigned __int8)(v3 - 48) > 0xAu && v3 != 95 && v3 != 45 ) + goto LABEL_12; + } + if ( (unsigned int)(v20 - 1) > 0xFFFE ) + { +LABEL_12: + exception = __cxa_allocate_exception(0x18u); + WXML::DOMLib::Parser::Error(exception, a1, "unexpected attribute name", 0); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'WXML::DOMLib::ParseException, + WXML::DOMLib::ParseException::~ParseException); + } + v4 = WXML::DOMLib::Token::ToString[abi:cxx11]((int)v19); + std::string::basic_string((char *)v18, (int)v4); + ++*((_DWORD *)a1 + 25); + v5 = WXML::DOMLib::Parser::Peek(a1); + WXML::DOMLib::Token::operator=((int)v19, (int)v5); + if ( WXML::DOMLib::Token::IsMatch((int)v19, (WXML::DOMLib::Token *)"=", v14) ) + { + ++*((_DWORD *)a1 + 25); + v6 = (WXML::DOMLib::Token *)WXML::DOMLib::Parser::Peek(a1); + WXML::DOMLib::Token::Token((int)v21, v6, v15); + if ( v22 == 2 ) + { + ++*((_DWORD *)a1 + 25); + v7 = *(_DWORD *)std::deque>::back((_DWORD *)a1 + 12); + v8 = std::map::operator[]((_DWORD *)(v7 + 48), (int)v18); + WXML::DOMLib::Token::operator=((int)v8, (int)v21); + } + WXML::DOMLib::Token::~Token((int)v21); + } + else + { + v9 = *(_DWORD *)std::deque>::back((_DWORD *)a1 + 12); + v10 = std::map::operator[]((_DWORD *)(v9 + 48), (int)v18); + WXML::DOMLib::Token::operator=((int)v10, (int)a1 + 216); + } + std::string::_M_dispose(v18); + } + WXML::DOMLib::Token::~Token((int)v19); +} +// 4201EC: variable 'v11' is possibly undefined +// 4201FF: variable 'v12' is possibly undefined +// 42021A: variable 'v13' is possibly undefined +// 42033E: variable 'v14' is possibly undefined +// 420361: variable 'v15' is possibly undefined +// 55B664: using guessed type int *`typeinfo for'WXML::DOMLib::ParseException; + +//----- (0042049C) -------------------------------------------------------- +void __fastcall WXML::DOMLib::Parser::ATTR_LIST(WXML::DOMLib::Parser *a1) +{ + WXML::DOMLib::Token *v1; // eax + WXML::DOMLib::Parser *v2; // edx + const WXML::DOMLib::Token *v3; // [esp+4h] [ebp-C4h] + const char *v4; // [esp+4h] [ebp-C4h] + const char *v5; // [esp+4h] [ebp-C4h] + char v7[120]; // [esp+50h] [ebp-78h] BYREF + + WXML::DOMLib::Parser::ATTR(a1); + v1 = (WXML::DOMLib::Token *)WXML::DOMLib::Parser::Peek(a1); + WXML::DOMLib::Token::Token((int)v7, v1, v3); + if ( !WXML::DOMLib::Token::IsMatch((int)v7, (WXML::DOMLib::Token *)">", v4) + && !WXML::DOMLib::Token::IsMatch((int)v7, (WXML::DOMLib::Token *)"/>", v5) ) + { + WXML::DOMLib::Parser::ATTR_LIST(v2); + } + WXML::DOMLib::Token::~Token((int)v7); +} +// 420509: variable 'v3' is possibly undefined +// 420519: variable 'v4' is possibly undefined +// 42052D: variable 'v5' is possibly undefined +// 420547: variable 'v2' is possibly undefined + +//----- (00420592) -------------------------------------------------------- +void __thiscall std::map::erase(_DWORD *this, int a2) +{ + int *v3; // edx + int *v4; // esi + int *v5; // edi + int *v6; // eax + int v7; // [esp+1Ch] [ebp-1Ch] + + v4 = (int *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::equal_range( + this, + a2); + v5 = v3; + if ( v4 == (int *)this[3] && v3 == this + 1 ) + { + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(this[2]); + this[2] = 0; + this[3] = v5; + this[4] = v5; + this[5] = 0; + } + else + { + while ( v5 != v4 ) + { + v7 = std::_Rb_tree_increment((int)v4); + v6 = std::_Rb_tree_rebalance_for_erase(v4, this + 1); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_drop_node((void **)v6); + --this[5]; + v4 = (int *)v7; + } + } +} +// 4205AB: variable 'v3' is possibly undefined + +//----- (0042060C) -------------------------------------------------------- +int __fastcall WXML::DOMLib::WXMLDom::RewriteTree(int a1) +{ + int v1; // edx + _DWORD *v2; // eax + unsigned int *v3; // edx + char *v4; // eax + unsigned int *v5; // eax + int v6; // edx + char *v7; // eax + unsigned int *v8; // edx + _DWORD *v9; // eax + unsigned int *v10; // edx + char *v11; // eax + volatile signed __int32 **v12; // ecx + unsigned int *v13; // eax + int v14; // edx + unsigned int *v15; // ecx + int v16; // edx + unsigned int *v17; // ecx + int v18; // edx + char *v19; // eax + unsigned int *v20; // edx + char *v21; // eax + char *v22; // eax + char *v23; // eax + char *v24; // eax + volatile signed __int32 **v25; // ecx + unsigned int *v26; // ecx + int v27; // edx + char *v28; // eax + unsigned int *v29; // edx + char *v30; // eax + volatile signed __int32 **v31; // ecx + unsigned int *v32; // ecx + unsigned int *v34; // [esp+0h] [ebp-188h] + char *v35; // [esp+0h] [ebp-188h] + const WXML::DOMLib::Token *v36; // [esp+4h] [ebp-184h] + _DWORD *v37; // [esp+10h] [ebp-178h] + char **v38; // [esp+14h] [ebp-174h] + void *Block; // [esp+18h] [ebp-170h] + char *Blocka; // [esp+18h] [ebp-170h] + _DWORD *Blockb; // [esp+18h] [ebp-170h] + void *Blockc; // [esp+18h] [ebp-170h] + unsigned int *Blockd; // [esp+18h] [ebp-170h] + _DWORD *Blocke; // [esp+18h] [ebp-170h] + char *Blockf; // [esp+18h] [ebp-170h] + _DWORD *Blockg; // [esp+18h] [ebp-170h] + _DWORD *Blockh; // [esp+18h] [ebp-170h] + _DWORD *Blocki; // [esp+18h] [ebp-170h] + char *Blockj; // [esp+18h] [ebp-170h] + char *v50; // [esp+1Ch] [ebp-16Ch] + _DWORD *v51; // [esp+1Ch] [ebp-16Ch] + bool v52; // [esp+1Ch] [ebp-16Ch] + _DWORD *v53; // [esp+1Ch] [ebp-16Ch] + _DWORD *v54; // [esp+1Ch] [ebp-16Ch] + void *v55; // [esp+1Ch] [ebp-16Ch] + unsigned int *v56; // [esp+1Ch] [ebp-16Ch] + _DWORD *v57; // [esp+1Ch] [ebp-16Ch] + _DWORD *v58; // [esp+1Ch] [ebp-16Ch] + _DWORD *v59; // [esp+1Ch] [ebp-16Ch] + unsigned int *v60; // [esp+1Ch] [ebp-16Ch] + _DWORD *v61; // [esp+1Ch] [ebp-16Ch] + _DWORD *v62; // [esp+1Ch] [ebp-16Ch] + _DWORD *v63; // [esp+1Ch] [ebp-16Ch] + unsigned int *v64; // [esp+1Ch] [ebp-16Ch] + _DWORD *v65; // [esp+1Ch] [ebp-16Ch] + _DWORD *v66; // [esp+1Ch] [ebp-16Ch] + _DWORD *v67; // [esp+1Ch] [ebp-16Ch] + unsigned int *v68; // [esp+1Ch] [ebp-16Ch] + _DWORD *v69; // [esp+1Ch] [ebp-16Ch] + _DWORD *v70; // [esp+1Ch] [ebp-16Ch] + void *v71; // [esp+1Ch] [ebp-16Ch] + unsigned int *v72; // [esp+1Ch] [ebp-16Ch] + _DWORD *v73; // [esp+1Ch] [ebp-16Ch] + int v74; // [esp+20h] [ebp-168h] + int v75; // [esp+20h] [ebp-168h] + _DWORD *v76; // [esp+20h] [ebp-168h] + unsigned int i; // [esp+20h] [ebp-168h] + unsigned int j; // [esp+20h] [ebp-168h] + int v79; // [esp+20h] [ebp-168h] + char *Str; // [esp+24h] [ebp-164h] + char *Strg; // [esp+24h] [ebp-164h] + char *Stra; // [esp+24h] [ebp-164h] + char *Strb; // [esp+24h] [ebp-164h] + char *Strc; // [esp+24h] [ebp-164h] + char *Strd; // [esp+24h] [ebp-164h] + char *Stre; // [esp+24h] [ebp-164h] + char *Strf; // [esp+24h] [ebp-164h] + _DWORD *v89; // [esp+6Ch] [ebp-11Ch] BYREF + volatile signed __int32 *v90; // [esp+70h] [ebp-118h] BYREF + unsigned int *v91; // [esp+74h] [ebp-114h] + volatile signed __int32 *v92; // [esp+78h] [ebp-110h] BYREF + void *v93[6]; // [esp+7Ch] [ebp-10Ch] BYREF + void *v94[6]; // [esp+94h] [ebp-F4h] BYREF + void *v95[6]; // [esp+ACh] [ebp-DCh] BYREF + _DWORD *v96; // [esp+C4h] [ebp-C4h] BYREF + volatile signed __int32 *v97[5]; // [esp+C8h] [ebp-C0h] BYREF + unsigned int *v98; // [esp+DCh] [ebp-ACh] BYREF + volatile signed __int32 *v99[5]; // [esp+E0h] [ebp-A8h] BYREF + void *v100[6]; // [esp+F4h] [ebp-94h] BYREF + const char *v101; // [esp+10Ch] [ebp-7Ch] BYREF + char v102[120]; // [esp+110h] [ebp-78h] BYREF + + for ( Str = 0; ; ++Str ) + { + v1 = *(_DWORD *)(a1 + 72); + if ( (*(_DWORD *)(a1 + 76) - v1) >> 3 <= (unsigned int)Str ) + break; + v74 = *(_DWORD *)(v1 + 8 * (_DWORD)Str); + std::string::basic_string((void **)&v101, "wx:for"); + v2 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)(v74 + 48), + (int)&v101); + v34 = v3; + Block = v2; + std::string::_M_dispose((void **)&v101); + if ( Block != (void *)(v74 + 52) ) + { + v75 = *(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Str); + std::string::basic_string(v100, "wx:for"); + v4 = std::map::operator[]( + (_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Str) + 48), + v100); + v101 = "wx:for-items"; + WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v4, v36); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_emplace_unique>( + (_DWORD *)(v75 + 48), + (char **)&v101); + WXML::DOMLib::Token::~Token((int)v102); + std::string::_M_dispose(v100); + v76 = (_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Str) + 48); + std::string::basic_string((void **)&v101, "wx:for"); + std::map::erase(v76, (int)&v101); + v34 = v5; + std::string::_M_dispose((void **)&v101); + } + } + for ( i = 0; ; ++i ) + { + v6 = *(_DWORD *)(a1 + 72); + if ( (*(_DWORD *)(a1 + 76) - v6) >> 3 <= i ) + break; + v50 = (char *)(8 * i); + Strg = *(char **)(v6 + 8 * i); + std::string::basic_string((void **)&v101, "wx:for-items"); + v7 = (char *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)Strg + 12, + (int)&v101); + v34 = v8; + Blocka = v7; + std::string::_M_dispose((void **)&v101); + if ( Blocka == Strg + 52 && !std::operator==(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * i), "block") ) + { + v38 = WXML::DOMLib::szWXIFControlAttrs; + while ( 1 ) + { + Stra = *v38; + if ( !*v38 ) + break; + Blockb = *(_DWORD **)(*(_DWORD *)(a1 + 72) + 8 * i); + std::string::basic_string((void **)&v101, Stra); + v9 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + Blockb + 12, + (int)&v101); + v34 = v10; + v37 = v9; + std::string::_M_dispose((void **)&v101); + ++v38; + if ( v37 != Blockb + 13 ) + { + std::__shared_ptr::__shared_ptr( + &v96, + &v50[*(_DWORD *)(a1 + 72)]); + Blockc = operator new(0x128u); + WXML::DOMLib::WXMLDom::WXMLDom((int)Blockc); + zcc::shared_ptr::shared_ptr(Blockc); + Blockd = v98; + std::string::basic_string(v100, Stra); + v11 = std::map::operator[](v96 + 12, v100); + v101 = Stra; + WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v11, v36); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_emplace_unique>( + Blockd + 12, + (char **)&v101); + WXML::DOMLib::Token::~Token((int)v102); + std::string::_M_dispose(v100); + std::string::operator=(v98, "block"); + WXML::DOMLib::Token::operator=((int)(v98 + 21), (int)(v96 + 21)); + std::string::_M_assign((int)(v98 + 6), (int)(v96 + 6)); + Blocke = v96 + 12; + std::string::basic_string((void **)&v101, Stra); + std::map::erase(Blocke, (int)&v101); + std::string::_M_dispose((void **)&v101); + std::vector>::push_back(v98 + 18, &v96); + v12 = (volatile signed __int32 **)&v50[*(_DWORD *)(a1 + 72) + 4]; + *(v12 - 1) = (volatile signed __int32 *)v98; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(v12, (int)v99[0]); + v34 = v13; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v99); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v97); + break; + } + } + } + } + for ( Strb = 0; ; ++Strb ) + { + v14 = *(_DWORD *)(a1 + 72); + if ( (*(_DWORD *)(a1 + 76) - v14) >> 3 <= (unsigned int)Strb ) + break; + if ( !std::operator==(*(_DWORD *)(v14 + 8 * (_DWORD)Strb), "template") ) + goto LABEL_23; + v51 = *(_DWORD **)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strb); + std::string::basic_string(v100, "is"); + if ( v51 + 13 == std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v51 + 12, + (int)v100) ) + { + v52 = 0; + } + else + { + v53 = *(_DWORD **)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strb); + std::string::basic_string((void **)&v101, "name"); + v52 = v53 + 13 == std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v53 + 12, + (int)&v101); + std::string::_M_dispose((void **)&v101); + } + std::string::_M_dispose(v100); + if ( v52 ) + { + v15 = *(unsigned int **)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strb); + v35 = "wx-template"; + } + else + { +LABEL_23: + if ( !std::operator==(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strb), "template") ) + continue; + v15 = *(unsigned int **)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strb); + v35 = "wx-define"; + } + v34 = std::string::operator=(v15, v35); + } + for ( Strc = 0; ; ++Strc ) + { + v16 = *(_DWORD *)(a1 + 72); + if ( (*(_DWORD *)(a1 + 76) - v16) >> 3 <= (unsigned int)Strc ) + break; + if ( std::operator==(*(_DWORD *)(v16 + 8 * (_DWORD)Strc), "block") ) + { + std::string::operator=(*(unsigned int **)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strc), "block"); + v34 = v17; + } + } + for ( j = 0; ; ++j ) + { + v18 = *(_DWORD *)(a1 + 72); + if ( (*(_DWORD *)(a1 + 76) - v18) >> 3 <= j ) + break; + Strd = (char *)(8 * j); + if ( (unsigned __int8)std::operator!=(*(_DWORD *)(v18 + 8 * j), "wx-repeat") ) + { + if ( (unsigned __int8)std::operator!=(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * j), "wx-define") ) + { + if ( (unsigned __int8)std::operator!=(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * j), "wx-import") ) + { + if ( (unsigned __int8)std::operator!=(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * j), "import") ) + { + v54 = *(_DWORD **)(*(_DWORD *)(a1 + 72) + 8 * j); + std::string::basic_string((void **)&v101, "wx:for-items"); + v19 = (char *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v54 + 12, + (int)&v101); + v34 = v20; + Blockf = v19; + std::string::_M_dispose((void **)&v101); + if ( Blockf != (char *)(v54 + 13) ) + { + std::__shared_ptr::__shared_ptr( + &v89, + &Strd[*(_DWORD *)(a1 + 72)]); + v55 = operator new(0x128u); + WXML::DOMLib::WXMLDom::WXMLDom((int)v55); + zcc::shared_ptr::shared_ptr(v55); + std::string::operator=(v91, "wx-repeat"); + std::string::_M_assign((int)(v91 + 6), *(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * j) + 24); + WXML::DOMLib::Token::operator=((int)(v91 + 21), (int)(v89 + 21)); + std::vector>::push_back(v91 + 18, &v89); + v56 = v91; + std::string::basic_string(v100, "wx:for-items"); + v21 = std::map::operator[](v89 + 12, v100); + v101 = "wx:for-items"; + WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v21, v36); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_emplace_unique>( + v56 + 12, + (char **)&v101); + WXML::DOMLib::Token::~Token((int)v102); + std::string::_M_dispose(v100); + v57 = v89 + 12; + std::string::basic_string(v93, "wx:for-items"); + std::map::erase(v57, (int)v93); + std::string::_M_dispose(v93); + v58 = v89; + Blockg = v89 + 13; + std::string::basic_string(v94, "wx:for-item"); + v59 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v58 + 12, + (int)v94); + std::string::_M_dispose(v94); + if ( Blockg != v59 ) + { + v60 = v91; + std::string::basic_string(v100, "wx:for-item"); + v22 = std::map::operator[](v89 + 12, v100); + v101 = "wx:for-item"; + WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v22, v36); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_emplace_unique>( + v60 + 12, + (char **)&v101); + WXML::DOMLib::Token::~Token((int)v102); + std::string::_M_dispose(v100); + v61 = v89 + 12; + std::string::basic_string(v95, "wx:for-item"); + std::map::erase(v61, (int)v95); + std::string::_M_dispose(v95); + } + v62 = v89; + Blockh = v89 + 13; + std::string::basic_string((void **)&v96, "wx:for-index"); + v63 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v62 + 12, + (int)&v96); + std::string::_M_dispose((void **)&v96); + if ( v63 != Blockh ) + { + v64 = v91; + std::string::basic_string(v100, "wx:for-index"); + v23 = std::map::operator[](v89 + 12, v100); + v101 = "wx:for-index"; + WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v23, v36); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_emplace_unique>( + v64 + 12, + (char **)&v101); + WXML::DOMLib::Token::~Token((int)v102); + std::string::_M_dispose(v100); + v65 = v89 + 12; + std::string::basic_string((void **)&v98, "wx:for-index"); + std::map::erase(v65, (int)&v98); + std::string::_M_dispose((void **)&v98); + } + v66 = v89; + Blocki = v89 + 13; + std::string::basic_string(v100, "wx:key"); + v67 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v66 + 12, + (int)v100); + std::string::_M_dispose(v100); + if ( Blocki != v67 ) + { + v68 = v91; + std::string::basic_string(v100, "wx:key"); + v24 = std::map::operator[](v89 + 12, v100); + v101 = "wx:key"; + WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v24, v36); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_emplace_unique>( + v68 + 12, + (char **)&v101); + WXML::DOMLib::Token::~Token((int)v102); + std::string::_M_dispose(v100); + v69 = v89 + 12; + std::string::basic_string((void **)&v101, "wx:key"); + std::map::erase(v69, (int)&v101); + std::string::_M_dispose((void **)&v101); + } + v25 = (volatile signed __int32 **)&Strd[*(_DWORD *)(a1 + 72) + 4]; + *(v25 - 1) = (volatile signed __int32 *)v91; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(v25, (int)v92); + v34 = v26; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v92); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v90); + } + } + } + } + } + } + for ( Stre = 0; ; ++Stre ) + { + v27 = *(_DWORD *)(a1 + 72); + if ( (*(_DWORD *)(a1 + 76) - v27) >> 3 <= (unsigned int)Stre ) + break; + v79 = 8 * (_DWORD)Stre; + v70 = *(_DWORD **)(v27 + 8 * (_DWORD)Stre); + std::string::basic_string((void **)&v101, "wx:scope-data"); + v28 = (char *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v70 + 12, + (int)&v101); + v34 = v29; + Blockj = v28; + std::string::_M_dispose((void **)&v101); + if ( Blockj != (char *)(v70 + 13) ) + { + std::__shared_ptr::__shared_ptr( + &v96, + (_DWORD *)(*(_DWORD *)(a1 + 72) + v79)); + v71 = operator new(0x128u); + WXML::DOMLib::WXMLDom::WXMLDom((int)v71); + zcc::shared_ptr::shared_ptr(v71); + std::string::operator=(v98, "wx-scope"); + std::string::_M_assign((int)(v98 + 6), *(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Stre) + 24); + WXML::DOMLib::Token::operator=((int)(v98 + 21), (int)(v96 + 21)); + std::vector>::push_back(v98 + 18, &v96); + v72 = v98; + std::string::basic_string(v100, "wx:scope-data"); + v30 = std::map::operator[](v96 + 12, v100); + v101 = "wx:scope-data"; + WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v30, v36); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_emplace_unique>( + v72 + 12, + (char **)&v101); + WXML::DOMLib::Token::~Token((int)v102); + std::string::_M_dispose(v100); + v73 = v96 + 12; + std::string::basic_string((void **)&v101, "wx:scope-data"); + std::map::erase(v73, (int)&v101); + std::string::_M_dispose((void **)&v101); + v31 = (volatile signed __int32 **)(*(_DWORD *)(a1 + 72) + v79 + 4); + *(v31 - 1) = (volatile signed __int32 *)v98; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(v31, (int)v99[0]); + v34 = v32; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v99); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v97); + } + } + for ( Strf = 0; (*(_DWORD *)(a1 + 76) - *(_DWORD *)(a1 + 72)) >> 3 > (unsigned int)Strf; ++Strf ) + WXML::DOMLib::WXMLDom::RewriteTree((WXML::DOMLib::WXMLDom *)v34); + return 0; +} +// 4206CF: variable 'v3' is possibly undefined +// 420756: variable 'v36' is possibly undefined +// 4207D7: variable 'v5' is possibly undefined +// 420864: variable 'v8' is possibly undefined +// 42091F: variable 'v10' is possibly undefined +// 420B06: variable 'v13' is possibly undefined +// 420D42: variable 'v17' is possibly undefined +// 420E69: variable 'v20' is possibly undefined +// 4213FC: variable 'v26' is possibly undefined +// 42149A: variable 'v29' is possibly undefined +// 42167A: variable 'v32' is possibly undefined +// 4216DC: variable 'v34' is possibly undefined +// 554190: using guessed type char *WXML::DOMLib::szWXIFControlAttrs[4]; + +//----- (00421797) -------------------------------------------------------- +void __cdecl WXML::DOMLib::recurseDependencies(int *a1, int *a2, _DWORD *a3) +{ + char *v3; // eax + int *v4; // eax + int v5; // edx + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-70h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-70h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-70h] + void *v9[6]; // [esp+50h] [ebp-38h] BYREF + void *v10[8]; // [esp+68h] [ebp-20h] BYREF + + if ( std::operator==(*a1, "import") || std::operator==(*a1, "include") ) + { + lpuexcpta = (struct _Unwind_Exception *)(*a1 + 48); + std::string::basic_string(v10, (char *)off_5539C8); + lpuexcptb = (struct _Unwind_Exception *)std::map::count(lpuexcpta, (int)v10); + std::string::_M_dispose(v10); + if ( lpuexcptb ) + { + std::string::basic_string(v9, (char *)off_5539C8); + v3 = std::map::operator[]((_DWORD *)(*a1 + 48), v9); + v4 = (int *)WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v3); + WXML::DOMLib::resolvePath((int)v10, a2, v4); + std::_Rb_tree,std::less,std::allocator>::_M_insert_unique( + a3, + v10); + std::string::_M_dispose(v10); + std::string::_M_dispose(v9); + } + } + for ( lpuexcpt = 0; ; lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1) ) + { + v5 = *(_DWORD *)(*a1 + 72); + if ( (unsigned int)lpuexcpt >= (*(_DWORD *)(*a1 + 76) - v5) >> 3 ) + break; + WXML::DOMLib::recurseDependencies(v5 + 8 * (_DWORD)lpuexcpt, a2, a3); + } +} + +//----- (00421934) -------------------------------------------------------- +void __usercall WXML::DOMLib::Parser::DOM(_DWORD *a1@, WXML::DOMLib::Parser *a2@) +{ + WXML::DOMLib::Token *v2; // eax + _DWORD *v3; // eax + unsigned __int8 **v4; // eax + unsigned __int8 **v5; // eax + char *v6; // ecx + unsigned __int8 **v7; // eax + int v8; // eax + _DWORD *v9; // eax + WXML::DOMLib::Token *v11; // eax + _DWORD *v12; // eax + int v13; // eax + _DWORD *v14; // eax + _DWORD *v15; // eax + _DWORD *v16; // ecx + int v17; // eax + int v18; // edx + unsigned __int8 v19; // cl + _DWORD *v20; // eax + const WXML::DOMLib::Token *v21; // [esp+4h] [ebp-224h] + const char *v22; // [esp+4h] [ebp-224h] + const WXML::DOMLib::Token *v23; // [esp+4h] [ebp-224h] + const char *v24; // [esp+4h] [ebp-224h] + const WXML::DOMLib::Token *v25; // [esp+4h] [ebp-224h] + const char *v26; // [esp+4h] [ebp-224h] + const char *v27; // [esp+4h] [ebp-224h] + const char *v28; // [esp+4h] [ebp-224h] + _DWORD *v29; // [esp+18h] [ebp-210h] + _DWORD *v30; // [esp+1Ch] [ebp-20Ch] + WXML::DOMLib::Token *v31; // [esp+20h] [ebp-208h] + _DWORD *v32; // [esp+24h] [ebp-204h] + WXML::DOMLib::Token *exception; // [esp+28h] [ebp-200h] + _DWORD *v34; // [esp+2Ch] [ebp-1FCh] + _DWORD *v35; // [esp+30h] [ebp-1F8h] + void *Blocka; // [esp+34h] [ebp-1F4h] + _DWORD *Block; // [esp+34h] [ebp-1F4h] + struct _Unwind_Exception *lpuexcpta; // [esp+38h] [ebp-1F0h] + WXML::DOMLib::Token *v40[6]; // [esp+78h] [ebp-1B0h] BYREF + char *v41; // [esp+90h] [ebp-198h] BYREF + int v42[6]; // [esp+A8h] [ebp-180h] BYREF + int v43[6]; // [esp+C0h] [ebp-168h] BYREF + int v44; // [esp+D8h] [ebp-150h] + int v45; // [esp+130h] [ebp-F8h] BYREF + volatile signed __int32 *v46; // [esp+134h] [ebp-F4h] BYREF + unsigned int *v47; // [esp+1A0h] [ebp-88h] BYREF + volatile signed __int32 *v48[33]; // [esp+1A4h] [ebp-84h] BYREF + + v2 = (WXML::DOMLib::Token *)WXML::DOMLib::Parser::Peek(a1); + WXML::DOMLib::Token::Token((int)v43, v2, v21); + if ( v44 ) + { + if ( v44 == 4 ) + goto LABEL_41; + } + else + { + if ( WXML::DOMLib::Token::IsMatch((int)v43, (WXML::DOMLib::Token *)&unk_5539CC, v22) ) + { + ++a1[25]; + v3 = WXML::DOMLib::Parser::Peek(a1); + WXML::DOMLib::Token::operator=((int)v43, (int)v3); + WXML::DOMLib::Token::Token((int)&v45, (WXML::DOMLib::Token *)v43, v23); + v4 = WXML::DOMLib::Token::ToString[abi:cxx11]((int)v43); + if ( !WXML::DOMLib::Parser::IsValidTag((const char **)v4) ) + { + exception = (WXML::DOMLib::Token *)__cxa_allocate_exception(0x18u); + WXML::DOMLib::Parser::Error(exception, (WXML::DOMLib::Parser *)a1, "unexpected tag", 0); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'WXML::DOMLib::ParseException, + WXML::DOMLib::ParseException::~ParseException); + } + ++a1[25]; + v5 = WXML::DOMLib::Token::ToString[abi:cxx11]((int)v43); + v6 = (char *)a1[8]; + v35 = a1 + 2; + if ( v6 == (char *)(a1[10] - 24) ) + { + std::deque::_M_push_back_aux((int)v35, (int)v5); + } + else + { + std::string::basic_string(v6, (int)v5); + a1[8] += 24; + } + Blocka = operator new(0x128u); + WXML::DOMLib::WXMLDom::WXMLDom((int)Blocka); + zcc::shared_ptr::shared_ptr(Blocka); + v7 = WXML::DOMLib::Token::ToString[abi:cxx11]((int)v43); + std::string::_M_assign((int)v47, (int)v7); + std::string::_M_assign((int)(v47 + 6), (int)v47); + WXML::DOMLib::Token::operator=((int)(v47 + 21), (int)v43); + Block = a1 + 12; + v8 = std::deque>::back(a1 + 12); + std::vector>::push_back((_DWORD *)(*(_DWORD *)v8 + 72), &v47); + std::deque>::push_back((int)(a1 + 12), &v47); + WXML::DOMLib::Parser::ATTR_LIST((WXML::DOMLib::Parser *)a1); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v48); + v9 = WXML::DOMLib::Parser::Peek(a1); + WXML::DOMLib::Token::operator=((int)v43, (int)v9); + if ( !v44 ) + { + if ( WXML::DOMLib::Token::IsMatch((int)v43, (WXML::DOMLib::Token *)">", v24) ) + { + ++a1[25]; + WXML::DOMLib::Parser::DOMS(a2); + v11 = (WXML::DOMLib::Token *)WXML::DOMLib::Parser::Peek(a1); + WXML::DOMLib::Token::Token((int)&v47, v11, v25); + if ( v48[5] || !WXML::DOMLib::Token::IsMatch((int)&v47, (WXML::DOMLib::Token *)"((int)v42, "expect end-tag `", (int)v40); + v15 = std::string::append(v42, "`."); + std::string::basic_string(&v41, v15); + std::string::_M_dispose((void **)v42); + v30 = __cxa_allocate_exception(0x18u); + WXML::DOMLib::Parser::Error(v30, (WXML::DOMLib::Parser *)a1, v41, 0); + __cxa_throw( + v30, + (struct type_info *)&`typeinfo for'WXML::DOMLib::ParseException, + WXML::DOMLib::ParseException::~ParseException); + } + ++a1[25]; + std::deque::pop_back(v35); + std::deque>::pop_back(Block); + v14 = WXML::DOMLib::Parser::Peek(a1); + WXML::DOMLib::Token::operator=((int)&v47, (int)v14); + if ( !WXML::DOMLib::Token::IsMatch((int)&v47, (WXML::DOMLib::Token *)">", v28) ) + { + v29 = __cxa_allocate_exception(0x18u); + WXML::DOMLib::Parser::Error(v29, (WXML::DOMLib::Parser *)a1, "unexpected token", 0); + __cxa_throw( + v29, + (struct type_info *)&`typeinfo for'WXML::DOMLib::ParseException, + WXML::DOMLib::ParseException::~ParseException); + } + ++a1[25]; + std::string::_M_dispose((void **)v40); + WXML::DOMLib::Token::~Token((int)&v47); + goto LABEL_27; + } + if ( WXML::DOMLib::Token::IsMatch((int)v43, (WXML::DOMLib::Token *)"/>", (const char *)v25) ) + { + ++a1[25]; + std::deque>::pop_back(Block); + std::deque::pop_back(v35); +LABEL_27: + WXML::DOMLib::Token::~Token((int)&v45); + goto LABEL_41; + } + } + v32 = __cxa_allocate_exception(0x18u); + WXML::DOMLib::Parser::Error(v32, (WXML::DOMLib::Parser *)a1, "unexpected token", 0); + __cxa_throw( + v32, + (struct type_info *)&`typeinfo for'WXML::DOMLib::ParseException, + WXML::DOMLib::ParseException::~ParseException); + } + if ( WXML::DOMLib::Token::IsMatch((int)v43, (WXML::DOMLib::Token *)" v17 ) + { + v19 = *(_BYTE *)(v18 + v17) - 9; + if ( v19 > 0x17u || ((0x800013u >> v19) & 1) == 0 ) + { + v20 = (_DWORD *)std::deque>::back(a1 + 12); + std::__shared_ptr::__shared_ptr(&v45, v20); + lpuexcpta = (struct _Unwind_Exception *)operator new(0x128u); + WXML::DOMLib::WXMLDom::WXMLDom((int)lpuexcpta); + zcc::shared_ptr::shared_ptr(lpuexcpta); + std::string::operator=(v47, "TEXTNODE"); + WXML::DOMLib::Token::operator=((int)(v47 + 21), (int)v43); + std::vector>::push_back((_DWORD *)(v45 + 72), &v47); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v48); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v46); + break; + } + ++v17; + } + } +LABEL_41: + WXML::DOMLib::Token::~Token((int)v43); +} +// 42199C: variable 'v21' is possibly undefined +// 4219BD: variable 'v22' is possibly undefined +// 421A03: variable 'v23' is possibly undefined +// 421C1C: variable 'v24' is possibly undefined +// 421C58: variable 'v25' is possibly undefined +// 421C71: variable 'v26' is possibly undefined +// 421D7E: variable 'v27' is possibly undefined +// 421DDC: variable 'v28' is possibly undefined +// 55B664: using guessed type int *`typeinfo for'WXML::DOMLib::ParseException; + +//----- (004222D2) -------------------------------------------------------- +void __usercall WXML::DOMLib::Parser::DOMS(WXML::DOMLib::Parser *a1@, WXML::DOMLib::Parser *a2@) +{ + WXML::DOMLib::Token *v2; // eax + const WXML::DOMLib::Token *v3; // [esp+4h] [ebp-C4h] + const char *v4; // [esp+4h] [ebp-C4h] + _DWORD *exception; // [esp+14h] [ebp-B4h] + char v7[24]; // [esp+50h] [ebp-78h] BYREF + int v8; // [esp+68h] [ebp-60h] + + while ( 1 ) + { + WXML::DOMLib::Parser::DOM(a1, a2); + v2 = (WXML::DOMLib::Token *)WXML::DOMLib::Parser::Peek(a1); + WXML::DOMLib::Token::Token((int)v7, v2, v3); + if ( v8 == 4 ) + break; + if ( WXML::DOMLib::Token::IsMatch((int)v7, (WXML::DOMLib::Token *)"( + int a1@, + WXML::DOMLib::Parser *a2@, + char *Str, + int a4, + int a5, + _DWORD *a6) +{ + char *v7; // [esp+1Ch] [ebp-ACh] + char *Block; // [esp+20h] [ebp-A8h] + void *Blocka; // [esp+20h] [ebp-A8h] + char *v10; // [esp+24h] [ebp-A4h] + int Tokens; // [esp+24h] [ebp-A4h] + int v13; // [esp+6Ch] [ebp-5Ch] + volatile signed __int32 *v14; // [esp+70h] [ebp-58h] BYREF + int v15; // [esp+74h] [ebp-54h] BYREF + volatile signed __int32 *v16; // [esp+78h] [ebp-50h] BYREF + void *v17; // [esp+98h] [ebp-30h] BYREF + + while ( *(_DWORD *)(a1 + 16) != *(_DWORD *)(a1 + 32) ) + std::deque::pop_back((_DWORD *)(a1 + 8)); + while ( *(_DWORD *)(a1 + 72) != *(_DWORD *)(a1 + 56) ) + std::deque>::pop_back((_DWORD *)(a1 + 48)); + *(_DWORD *)(a1 + 100) = 0; + v10 = *(char **)(a1 + 88); + v7 = *(char **)(a1 + 92); + if ( v10 != v7 ) + { + Block = *(char **)(a1 + 88); + do + { + WXML::DOMLib::Token::~Token((int)Block); + Block += 112; + } + while ( v7 != Block ); + *(_DWORD *)(a1 + 92) = v10; + } + *(_DWORD *)(a1 + 128) = 4; + std::string::_M_assign(a1 + 328, a5); + WXML::DOMLib::Tokenizer::Tokenizer(&v15, Str, a5); + Tokens = WXML::DOMLib::Tokenizer::GetTokens(&v15, (_DWORD *)(a1 + 88), a4, a6); + if ( !Tokens ) + { + Blocka = operator new(0x128u); + WXML::DOMLib::WXMLDom::WXMLDom((int)Blocka); + zcc::shared_ptr::shared_ptr(Blocka); + *(_DWORD *)a1 = v13; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)(a1 + 4), (int)v14); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v14); + std::string::operator=(*(unsigned int **)a1, "root"); + std::deque>::push_back(a1 + 48, (_DWORD *)a1); + WXML::DOMLib::Parser::DOMS((WXML::DOMLib::Parser *)a1, a2); + } + std::string::_M_dispose(&v17); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v16); + return Tokens; +} +// 4225E6: variable 'v13' is possibly undefined + +//----- (0042270E) -------------------------------------------------------- +int __fastcall WXML::DOMLib::WXMLDom::RecordAllPath(_DWORD *a1) +{ + char *v1; // eax + int v2; // eax + int v3; // edx + volatile signed __int32 **v4; // ecx + WXML::DOMLib::WXMLDom *v5; // eax + int v7; // [esp+10h] [ebp-78h] + BOOL v8; // [esp+14h] [ebp-74h] + _DWORD *v9; // [esp+14h] [ebp-74h] + unsigned int i; // [esp+14h] [ebp-74h] + void *v12[6]; // [esp+50h] [ebp-38h] BYREF + void *v13[8]; // [esp+68h] [ebp-20h] BYREF + + if ( std::operator==((int)a1, "import") || std::operator==((int)a1, "include") ) + { + std::string::basic_string(v13, (char *)off_5539C8); + v8 = std::map::count(a1 + 12, (int)v13); + std::string::_M_dispose(v13); + if ( v8 ) + { + v9 = (_DWORD *)a1[62]; + std::string::basic_string(v12, (char *)off_5539C8); + v1 = std::map::operator[](a1 + 12, v12); + v2 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v1); + std::string::basic_string((char *)v13, v2); + if ( !std::map::count(v9, (int)v13) ) + { + v7 = v9[5]; + *(_DWORD *)std::map::operator[](v9, (int)v13) = v7; + std::vector::push_back((int)(v9 + 6), (int)v13); + } + std::string::_M_dispose(v13); + std::string::_M_dispose(v12); + } + } + for ( i = 0; ; ++i ) + { + v3 = a1[18]; + if ( i >= (a1[19] - v3) >> 3 ) + break; + v4 = (volatile signed __int32 **)(*(_DWORD *)(v3 + 8 * i) + 252); + *(v4 - 1) = (volatile signed __int32 *)a1[62]; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(v4, a1[63]); + WXML::DOMLib::WXMLDom::RecordAllPath(v5); + } + return 0; +} +// 4228B2: variable 'v5' is possibly undefined + +//----- (00422902) -------------------------------------------------------- +void __fastcall std::deque>::~deque(int a1) +{ + int v2; // edi + int v3; // edx + int *v4; // esi + int v5; // eax + int v6; // edx + int v7; // edx + void **v8; // esi + unsigned int v9; // edi + void *v10; // eax + int v11; // [esp+1Ch] [ebp-2Ch] + int v12; // [esp+20h] [ebp-28h] + int v13; // [esp+24h] [ebp-24h] + unsigned int v14; // [esp+28h] [ebp-20h] + int v15; // [esp+2Ch] [ebp-1Ch] + + v2 = *(_DWORD *)(a1 + 24); + v13 = *(_DWORD *)(a1 + 16); + v3 = *(_DWORD *)(a1 + 20); + v12 = *(_DWORD *)(a1 + 28); + v15 = v3; + v4 = (int *)(v3 + 4); + v14 = *(_DWORD *)(a1 + 36); + v5 = *(_DWORD *)(a1 + 8); + while ( v14 > (unsigned int)v4 ) + { + v6 = *v4; + v11 = v5; + ++v4; + std::_Destroy_aux::__destroy *>(v6, v6, v6 + 512); + v5 = v11; + } + if ( v15 == v14 ) + { + std::_Destroy_aux::__destroy *>(v3, v5, v2); + } + else + { + std::_Destroy_aux::__destroy *>(v13, v5, v13); + std::_Destroy_aux::__destroy *>(v7, v12, v2); + } + if ( *(_DWORD *)a1 ) + { + v8 = *(void ***)(a1 + 20); + v9 = *(_DWORD *)(a1 + 36) + 4; + while ( v9 > (unsigned int)v8 ) + { + v10 = *v8++; + operator delete(v10); + } + operator delete(*(void **)a1); + } +} +// 422970: variable 'v7' is possibly undefined +// 422979: variable 'v3' is possibly undefined + +//----- (004229B2) -------------------------------------------------------- +int __cdecl WXML::DOMLib::WXMLDom::DealSingleTokenToOps( + int *a1, + unsigned int *a2, + WXML::EXPRLib::Parser *a3, + _DWORD *a4, + _DWORD *a5, + char a6, + int a7, + char a8, + int *a9, + char a10, + int a11) +{ + unsigned __int8 **v11; // eax + char *v12; // eax + bool v13; // zf + struct _Unwind_Exception *v14; // eax + struct _Unwind_Exception *v15; // edx + struct _Unwind_Exception *v16; // eax + bool v17; // zf + struct _Unwind_Exception *v18; // eax + struct _Unwind_Exception *v19; // edx + _DWORD *v20; // ecx + _DWORD *v21; // eax + int v22; // eax + int v23; // edx + _DWORD *v24; // eax + _DWORD *v25; // eax + int v26; // edx + const char *v27; // eax + const char *v28; // eax + char *v29; // eax + bool v30; // zf + _DWORD *v31; // eax + _DWORD *v32; // edx + void *v33; // eax + void *v34; // eax + int v35; // eax + std::ostream::sentry *v36; // eax + std::ostream::sentry *v37; // eax + std::ostream::sentry *v38; // eax + std::ostream::sentry *v39; // eax + int v40; // eax + std::ostream::sentry *v41; // eax + std::ostream::sentry *v42; // eax + int v43; // eax + int v44; // eax + char *v46; // [esp+2Ch] [ebp-12Ch] + char *v47; // [esp+30h] [ebp-128h] + int v48; // [esp+3Ch] [ebp-11Ch] + void *exception; // [esp+40h] [ebp-118h] + int v50; // [esp+44h] [ebp-114h] + unsigned int v51; // [esp+48h] [ebp-110h] + char v52; // [esp+4Fh] [ebp-109h] + struct _Unwind_Exception *v53; // [esp+50h] [ebp-108h] + struct _Unwind_Exception *v54; // [esp+50h] [ebp-108h] + int i; // [esp+50h] [ebp-108h] + int v56; // [esp+50h] [ebp-108h] + _DWORD *v57; // [esp+50h] [ebp-108h] + int v58; // [esp+50h] [ebp-108h] + struct _Unwind_Exception *v59; // [esp+54h] [ebp-104h] + unsigned __int8 **v60; // [esp+54h] [ebp-104h] + int v61; // [esp+54h] [ebp-104h] + _DWORD *v62; // [esp+54h] [ebp-104h] + _DWORD *v63; // [esp+54h] [ebp-104h] + _DWORD *v64; // [esp+54h] [ebp-104h] + _DWORD *v65; // [esp+54h] [ebp-104h] + int v66; // [esp+54h] [ebp-104h] + unsigned int v67; // [esp+54h] [ebp-104h] + int v68; // [esp+54h] [ebp-104h] + char *v69; // [esp+54h] [ebp-104h] + int *v70; // [esp+54h] [ebp-104h] + struct _Unwind_Exception *lpuexcpt; // [esp+58h] [ebp-100h] + struct _Unwind_Exception *lpuexcpta; // [esp+58h] [ebp-100h] + struct _Unwind_Exception *lpuexcptb; // [esp+58h] [ebp-100h] + unsigned int lpuexcptc; // [esp+58h] [ebp-100h] + struct _Unwind_Exception *lpuexcptd; // [esp+58h] [ebp-100h] + struct _Unwind_Exception *lpuexcpte; // [esp+58h] [ebp-100h] + _WORD v77[3]; // [esp+9Eh] [ebp-BAh] BYREF + _DWORD *v78; // [esp+A4h] [ebp-B4h] + _DWORD *v79; // [esp+A8h] [ebp-B0h] + _BYTE *v80; // [esp+ACh] [ebp-ACh] BYREF + char *v81; // [esp+B0h] [ebp-A8h] + char *v82; // [esp+B4h] [ebp-A4h] + void *v83[2]; // [esp+C4h] [ebp-94h] BYREF + char v84; // [esp+CCh] [ebp-8Ch] BYREF + int *v85; // [esp+DCh] [ebp-7Ch] BYREF + void *v86[2]; // [esp+E0h] [ebp-78h] BYREF + char v87; // [esp+E8h] [ebp-70h] BYREF + void *Block; // [esp+F8h] [ebp-60h] BYREF + int v89; // [esp+FCh] [ebp-5Ch] BYREF + void *v90; // [esp+100h] [ebp-58h] BYREF + void *v91; // [esp+104h] [ebp-54h] BYREF + int v92; // [esp+108h] [ebp-50h] + _DWORD *v93; // [esp+10Ch] [ebp-4Ch] + int v94; // [esp+110h] [ebp-48h] + int v95; // [esp+114h] [ebp-44h] + int v96; // [esp+118h] [ebp-40h] + _DWORD *v97; // [esp+11Ch] [ebp-3Ch] + void *v98; // [esp+120h] [ebp-38h] + int v99; // [esp+124h] [ebp-34h] + void *v100; // [esp+128h] [ebp-30h] + void *v101; // [esp+12Ch] [ebp-2Ch] + int v102; // [esp+130h] [ebp-28h] + _DWORD *v103; // [esp+134h] [ebp-24h] + void *v104; // [esp+138h] [ebp-20h] + void *v105; // [esp+13Ch] [ebp-1Ch] + int v106; // [esp+140h] [ebp-18h] + _DWORD *v107; // [esp+144h] [ebp-14h] + int *v108; // [esp+148h] [ebp-10h] + void *v109; // [esp+14Ch] [ebp-Ch] + + if ( a8 ) + v11 = WXML::DOMLib::Token::ToString[abi:cxx11]((int)a5); + else + v11 = (unsigned __int8 **)WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)a5); + v12 = (char *)*v11; + *(_DWORD *)&v77[1] = 0; + v78 = 0; + v79 = 0; + LOBYTE(v77[0]) = 0; + v48 = WXML::StringTemplating::Deal(v12, (int)a2, (char **)&v77[1], v77); + if ( v48 ) + { + exception = __cxa_allocate_exception(0x18u); + std::string::basic_string(&Block, "did you forget }}, ' or \""); + std::string::basic_string((void **)&v85, (char *)&byte_5537CA); + WXML::DOMLib::WXMLDom::Error((int)exception, a1, (int)a5, (int *)&v85, (int *)&Block); + std::string::_M_dispose((void **)&v85); + std::string::_M_dispose(&Block); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + if ( a8 ) + { + std::string::basic_string(&Block, "plain_text_marker"); + v59 = (struct _Unwind_Exception *)(a11 + 4); + v53 = *(struct _Unwind_Exception **)(a11 + 8); + lpuexcpt = (struct _Unwind_Exception *)(a11 + 4); + while ( v53 ) + { + v13 = (unsigned __int8)std::operator<((int)v53 + 16, (int)&Block) == 0; + v14 = lpuexcpt; + v15 = (struct _Unwind_Exception *)*((_DWORD *)v53 + 3); + if ( v13 ) + { + v15 = (struct _Unwind_Exception *)*((_DWORD *)v53 + 2); + if ( v13 ) + v14 = v53; + } + v53 = v15; + lpuexcpt = v14; + } + if ( v59 != lpuexcpt ) + { + v13 = (unsigned __int8)std::operator<((int)&Block, (int)lpuexcpt + 16) == 0; + v16 = lpuexcpt; + if ( !v13 ) + v16 = (struct _Unwind_Exception *)(a11 + 4); + lpuexcpt = v16; + } + std::string::_M_dispose(&Block); + if ( v59 != lpuexcpt ) + { + std::string::basic_string(&Block, "plain_text_marker"); + lpuexcpta = *(struct _Unwind_Exception **)(a11 + 8); + v54 = (struct _Unwind_Exception *)(a11 + 4); + while ( lpuexcpta ) + { + v17 = (unsigned __int8)std::operator<((int)lpuexcpta + 16, (int)&Block) == 0; + v18 = v54; + v19 = (struct _Unwind_Exception *)*((_DWORD *)lpuexcpta + 3); + if ( v17 ) + { + v19 = (struct _Unwind_Exception *)*((_DWORD *)lpuexcpta + 2); + if ( v17 ) + v18 = lpuexcpta; + } + lpuexcpta = v19; + v54 = v18; + } + if ( v59 == v54 || (unsigned __int8)std::operator<((int)&Block, (int)v54 + 16) ) + std::__throw_out_of_range((std::out_of_range *)"map::at"); + std::string::basic_string((char *)&v80, (int)v54 + 40); + std::string::_M_dispose(&Block); + v87 = 0; + v86[0] = &v87; + v86[1] = 0; + v85 = 0; + std::string::operator=((unsigned int *)v86, (char *)&byte_5537CA); + lpuexcptb = *(struct _Unwind_Exception **)&v77[1]; + if ( *(_DWORD **)&v77[1] != v78 && **(_DWORD **)&v77[1] == 1 ) + { + if ( v78 == v79 ) + { + std::vector::_M_realloc_insert( + (char **)&v77[1], + *(char **)&v77[1], + &v85); + } + else + { + Block = &v77[1]; + v89 = (int)v85; + std::string::basic_string((char *)&v90, (int)v86); + v20 = v78 + 1; + v21 = v78 - 6; + *v78 = *(v78 - 7); + std::string::basic_string(v20, v21); + v60 = (unsigned __int8 **)(v78 - 7); + v22 = ((char *)(v78 - 7) - (char *)lpuexcptb) >> 2; + v78 += 7; + for ( i = -1227133513 * v22; i > 0; --i ) + { + v60 -= 7; + v60[7] = *v60; + std::string::operator=(v60 + 8, (int)(v60 + 1)); + } + *(_DWORD *)lpuexcptb = v89; + std::string::operator=((unsigned __int8 **)lpuexcptb + 1, (int)&v90); + std::string::_M_dispose(&v90); + } + } + if ( *(_DWORD **)&v77[1] != v78 && *(v78 - 7) == 1 ) + std::vector::push_back((char **)&v77[1], &v85); + lpuexcptc = 1; + v23 = 0; + while ( -1227133513 * (((int)v78 - *(_DWORD *)&v77[1]) >> 2) > lpuexcptc ) + { + v61 = v23 + 28; + v24 = (_DWORD *)(*(_DWORD *)&v77[1] + v23 + 28); + if ( *v24 == 1 ) + { + if ( !*(_DWORD *)(v23 + *(_DWORD *)&v77[1]) ) + std::string::append((_DWORD *)(v23 + *(_DWORD *)&v77[1] + 4), (int)&v80); + } + else if ( !*v24 && *(_DWORD *)(*(_DWORD *)&v77[1] + v23) == 1 ) + { + v56 = (int)(v24 + 1); + std::string::basic_string((char *)v83, (int)&v80); + std::string::append(v83, v56); + std::string::operator=((unsigned __int8 **)(*(_DWORD *)&v77[1] + v61 + 4), (int)v83); + std::string::_M_dispose(v83); + } + ++lpuexcptc; + v23 = v61; + } + std::string::_M_dispose(v86); + std::string::_M_dispose((void **)&v80); + } + } + if ( a7 ) + { + v25 = *(_DWORD **)&v77[1]; + v26 = 0; + while ( v78 != v25 ) + { + v26 -= (*v25 == 0) - 1; + v25 += 7; + } + if ( v26 != a7 ) + { + a5[14] = -3; + std::string::operator=(a5 + 15, "the very attr must be an expression (surrouned by `{{..}}`)"); + v48 = -1; + goto LABEL_112; + } + } + if ( v78 == *(_DWORD **)&v77[1] ) + { + v89 = (int)&v91; + v90 = 0; + LOBYTE(v91) = 0; + Block = 0; + std::string::operator=((unsigned int *)&v89, (char *)&byte_5537CA); + Block = 0; + std::vector::push_back((char **)&v77[1], &Block); + std::string::_M_dispose((void **)&v89); + } + v52 = 1; + if ( (unsigned int)v78 - *(_DWORD *)&v77[1] <= 0x1C ) + { + v52 = 0; + if ( (_DWORD *)((char *)v78 - *(_DWORD *)&v77[1]) == (_DWORD *)28 ) + v52 = a8 & (**(_DWORD **)&v77[1] == 1); + } + lpuexcptd = (WXML::EXPRLib::Parser *)((char *)a3 + 8); + std::operator<<>((WXML::EXPRLib::Parser *)((char *)a3 + 8), "Z("); + v80 = 0; + v81 = 0; + v82 = 0; + if ( v52 ) + { + std::operator<<>(lpuexcptd, "[a,"); + ++a9[1]; + } + v27 = (const char *)&off_553AE9; + v51 = 0; + if ( a8 ) + v27 = "t_"; + v47 = (char *)v27; + v28 = &byte_5537CA; + if ( a6 ) + v28 = (const char *)&unk_553AED; + v46 = (char *)v28; + while ( -1227133513 * (((int)v78 - *(_DWORD *)&v77[1]) >> 2) > v51 ) + { + if ( v51 ) + std::operator<<>(lpuexcptd, ","); + v83[1] = 0; + v84 = 0; + v50 = 28 * v51; + v62 = (_DWORD *)(*(_DWORD *)&v77[1] + 28 * v51); + v83[0] = &v84; + v29 = "s_"; + if ( *v62 ) + v29 = "e_"; + std::string::operator=((unsigned int *)v83, v29); + std::string::append(v83, v47); + std::string::append(v83, (int)(v62 + 1)); + std::string::append(v83, v46); + v57 = (_DWORD *)a4[2]; + v63 = a4 + 1; + while ( v57 ) + { + v30 = (unsigned __int8)std::operator<((int)(v57 + 4), (int)v83) == 0; + v31 = v63; + v32 = (_DWORD *)v57[3]; + if ( v30 ) + { + v32 = (_DWORD *)v57[2]; + if ( v30 ) + v31 = v57; + } + v57 = v32; + v63 = v31; + } + if ( a4 + 1 == v63 || (unsigned __int8)std::operator<((int)v83, (int)(v63 + 4)) ) + { + if ( *(_DWORD *)(*(_DWORD *)&v77[1] + 28 * v51) ) + { + Block = 0; + v90 = 0; + v91 = 0; + v92 = 0; + v93 = 0; + v94 = 0; + v95 = 0; + v96 = 0; + v97 = 0; + v89 = 8; + Block = operator new(0x20u); + v64 = (char *)Block + ((2 * v89 - 2) & 0xFFFFFFFC); + v33 = operator new(0x200u); + v91 = v33; + v92 = (int)v33 + 512; + *v64 = v33; + v93 = v64; + v97 = v64; + v95 = (int)v33; + v96 = (int)v33 + 512; + v90 = v33; + v94 = (int)v33; + v98 = 0; + v100 = 0; + v101 = 0; + v102 = 0; + v103 = 0; + v104 = 0; + v105 = 0; + v106 = 0; + v107 = 0; + v99 = 8; + v98 = operator new(0x20u); + v65 = (char *)v98 + ((2 * v99 - 2) & 0xFFFFFFFC); + v34 = operator new(0x200u); + v101 = v34; + v102 = (int)v34 + 512; + *v65 = v34; + v103 = v65; + v107 = v65; + v105 = v34; + v106 = (int)v34 + 512; + v100 = v34; + v104 = v34; + v108 = 0; + v109 = 0; + std::string::basic_string((void **)&v85, (char *)&byte_5537CA); + v66 = WXML::EXPRLib::Parser::Parse( + (int)&Block, + (char **)(*(_DWORD *)&v77[1] + v50 + 4), + (int)&v85, + 1, + 1, + a2, + a6); + std::string::_M_dispose((void **)&v85); + if ( v66 ) + { + a5[14] = -3; + std::string::_M_assign((int)(a5 + 15), (int)a2); + std::operator<<>(lpuexcptd, "undefined"); + WXML::EXPRLib::Parser::~Parser((int)&Block); + std::string::_M_dispose(v83); + break; + } + v85 = v108; + v86[0] = v109; + if ( v109 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy((int)v109); + v70 = v85; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)v86); + std::string::basic_string((void **)&v85, (char *)&byte_5537CA); + WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(v70, (int)a3, (int)&v85, (_BYTE *)v77 + 1); + std::string::_M_dispose((void **)&v85); + WXML::EXPRLib::Parser::~Parser((int)&Block); + } + else + { + std::operator<<>(lpuexcptd, "[3,'"); + WXML::DOMLib::removern(&Block, (_DWORD *)(*(_DWORD *)&v77[1] + v50 + 4)); + WXML::Rewrite::ToStringCode((int *)&Block, (int)a3); + std::operator<<>(lpuexcptd, "']"); + std::string::_M_dispose(&Block); + } + v68 = *a9; + v43 = -1; + if ( v52 ) + v43 = a9[1]; + v58 = v43; + std::string::basic_string((char *)&Block, (int)v83); + v94 = v68; + v95 = v58; + v69 = v81; + if ( v81 == v82 ) + { + std::vector>::_M_realloc_insert>( + &v80, + v81, + &Block); + } + else + { + std::string::basic_string(v81, &Block); + v44 = v94; + *((_DWORD *)v69 + 7) = v95; + *((_DWORD *)v69 + 6) = v44; + v81 += 32; + } + std::string::_M_dispose(&Block); + } + else + { + if ( v63[11] == -1 ) + { + if ( a10 ) + { + std::operator<<>(lpuexcptd, "z["); + v39 = (std::ostream::sentry *)std::ostream::operator<<(v63[10]); + std::operator<<>(v39, "][1]"); + goto LABEL_107; + } + std::operator<<>(lpuexcptd, "z["); + v40 = v63[10]; + } + else + { + std::operator<<>(lpuexcptd, "z["); + v42 = (std::ostream::sentry *)std::ostream::operator<<(v63[10]); + if ( a10 ) + std::operator<<>(v42, "][1]["); + else + std::operator<<>(v42, "]["); + v40 = v63[11]; + } + v41 = (std::ostream::sentry *)std::ostream::operator<<(v40); + std::operator<<>(v41, "]"); + } +LABEL_107: + ++a9[1]; + std::string::_M_dispose(v83); + ++v51; + } + if ( v52 ) + std::operator<<>(lpuexcptd, "]"); + v35 = *a9; + if ( a5[14] == -1 ) + a5[14] = v35; + v67 = 0; + a9[1] = 0; + *a9 = v35 + 1; + while ( (v81 - v80) >> 5 > v67 ) + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_emplace_unique>( + a4, + (int)&v80[32 * v67++]); + std::vector>::~vector((void ***)&v80); + if ( a10 ) + { + lpuexcpte = std::operator<<>(lpuexcptd, ",['"); + WXML::Rewrite::ToStringCode((int)&Block, a1); + v36 = std::operator<<(lpuexcpte, (int *)&Block); + std::operator<<>(v36, "',"); + v37 = (std::ostream::sentry *)std::ostream::operator<<(a5[2]); + std::operator<<>(v37, ","); + v38 = (std::ostream::sentry *)std::ostream::operator<<(a5[3]); + std::operator<<>(v38, "])\n"); + std::string::_M_dispose(&Block); + } + else + { + std::operator<<>(lpuexcptd, ")\n"); + } +LABEL_112: + std::vector::~vector((void **)&v77[1]); + return v48; +} +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); +// 553AE9: using guessed type void *off_553AE9; +// 55B66C: using guessed type int *`typeinfo for'WXML::DOMLib::RenderException; + +//----- (00423B6C) -------------------------------------------------------- +int __thiscall WXML::DOMLib::WXMLDom::RenderAllOpsAndRecord( + _DWORD *this, + int *a2, + unsigned int *a3, + WXML::EXPRLib::Parser *a4, + _DWORD *a5, + int *a6, + unsigned __int8 a7, + int a8) +{ + int i; // esi + unsigned int j; // esi + + if ( std::operator==((int)this, "TEXTNODE") ) + { + WXML::DOMLib::WXMLDom::DealSingleTokenToOps(a2, a3, a4, a5, this + 21, 0, 0, 1, a6, a7, a8); + } + else + { + for ( i = this[15]; (_DWORD *)i != this + 13; i = std::_Rb_tree_increment(i) ) + { + if ( *(_DWORD *)(i + 60) + && !std::operator==((int)this, "import") + && !std::operator==((int)this, "include") ) + { + if ( std::operator==((int)this, "wx-template") && std::operator==(i + 16, "data") + || std::operator==((int)this, "wx-scope") && std::operator==(i + 16, "wx:scope-data") ) + { + WXML::DOMLib::WXMLDom::DealSingleTokenToOps(a2, a3, a4, a5, (_DWORD *)(i + 40), 1, 1, 0, a6, a7, a8); + } + else + { + WXML::DOMLib::WXMLDom::DealSingleTokenToOps(a2, a3, a4, a5, (_DWORD *)(i + 40), 0, 0, 0, a6, a7, a8); + } + } + } + for ( j = 0; j < (this[19] - this[18]) >> 3; ++j ) + WXML::DOMLib::WXMLDom::RenderAllOpsAndRecord((int)a2, (int)a3, a4, (int)a5, (int)a6, a7, a8); + } + return 0; +} + +//----- (00423D86) -------------------------------------------------------- +int __thiscall WXML::DOMLib::WXMLDom::RenderNonDefine( + int this, + int *a2, + int *a3, + int a4, + int *a5, + int a6, + int *a7, + int *a8, + int *a9, + int *a10, + int *a11, + char a12, + unsigned __int8 a13, + int a14, + int a15) +{ + std::ostream::sentry *v15; // eax + std::ostream::sentry *v16; // eax + std::ostream::sentry *v17; // eax + std::ostream::sentry *v18; // eax + std::ostream::sentry *v19; // eax + std::ostream::sentry *v20; // eax + int v21; // eax + void *v22; // eax + std::ostream::sentry *v23; // eax + std::ostream::sentry *v24; // eax + std::ostream::sentry *v25; // eax + std::ostream::sentry *v26; // eax + std::ostream::sentry *v27; // eax + std::ostream::sentry *v28; // eax + std::ostream::sentry *v29; // eax + std::ostream::sentry *v30; // eax + std::ostream::sentry *v31; // eax + char *v32; // eax + int v33; // eax + char *v34; // eax + int v35; // eax + char *v36; // eax + char *v37; // eax + char *v38; // eax + std::ostream::sentry *v39; // eax + std::ostream::sentry *v40; // eax + std::ostream::sentry *v41; // eax + std::ostream::sentry *v42; // eax + std::ostream::sentry *v43; // eax + std::ostream::sentry *v44; // eax + std::ostream::sentry *v45; // eax + int v46; // eax + char *v47; // eax + char *v48; // eax + std::ostream::sentry *v49; // eax + std::ostream::sentry *v50; // eax + std::ostream::sentry *v51; // eax + char *v52; // eax + std::ostream::sentry *v53; // eax + std::ostream::sentry *v54; // eax + std::ostream::sentry *v55; // eax + std::ostream::sentry *v56; // eax + std::ostream::sentry *v57; // eax + std::ostream::sentry *v58; // eax + std::ostream::sentry *v59; // eax + std::ostream::sentry *v60; // eax + std::ostream::sentry *v61; // eax + std::ostream::sentry *v62; // eax + std::ostream::sentry *v63; // eax + std::ostream::sentry *v64; // eax + std::ostream::sentry *v65; // eax + std::ostream::sentry *v66; // eax + std::ostream::sentry *v67; // eax + char *v68; // eax + int *v69; // eax + std::ostream::sentry *v70; // eax + std::ostream::sentry *v71; // eax + void **v72; // ecx + char *v73; // eax + char *v74; // eax + int v75; // eax + int StrID; // eax + std::ostream::sentry *v77; // eax + std::ostream::sentry *v78; // eax + int v79; // eax + std::ostream::sentry *v80; // eax + std::ostream::sentry *v81; // eax + std::ostream::sentry *v82; // eax + std::ostream::sentry *v83; // eax + std::ostream::sentry *v84; // eax + std::ostream::sentry *v85; // eax + std::ostream::sentry *v86; // eax + std::ostream::sentry *v87; // eax + std::ostream::sentry *v88; // eax + std::ostream::sentry *v89; // eax + std::ostream::sentry *v90; // eax + char *v91; // eax + int *v92; // eax + std::ostream::sentry *v93; // eax + std::ostream::sentry *v94; // eax + char *v95; // eax + std::ostream::sentry *v96; // eax + std::ostream::sentry *v97; // eax + std::ostream::sentry *v98; // eax + std::ostream::sentry *v99; // eax + std::ostream::sentry *v100; // eax + std::ostream::sentry *v101; // eax + std::ostream::sentry *v102; // eax + std::ostream::sentry *v103; // eax + std::ostream::sentry *v104; // eax + std::ostream::sentry *v105; // eax + int v106; // eax + std::ostream::sentry *v107; // eax + std::ostream::sentry *v108; // eax + std::ostream::sentry *v109; // eax + std::ostream::sentry *v110; // eax + std::ostream::sentry *v111; // eax + std::ostream::sentry *v112; // eax + std::ostream::sentry *v113; // eax + std::ostream::sentry *v114; // eax + std::ostream::sentry *v115; // eax + std::ostream::sentry *v116; // eax + char *v117; // eax + std::ostream::sentry *v118; // eax + std::ostream::sentry *v119; // eax + std::ostream::sentry *v120; // eax + char *v121; // eax + std::ostream::sentry *v122; // eax + std::ostream::sentry *v123; // eax + char *v124; // eax + std::ostream::sentry *v125; // eax + std::ostream::sentry *v126; // eax + std::ostream::sentry *v127; // eax + std::ostream::sentry *v128; // eax + std::ostream::sentry *v129; // eax + std::ostream::sentry *v130; // eax + std::ostream::sentry *v131; // eax + std::ostream::sentry *v132; // eax + std::ostream::sentry *v133; // eax + std::ostream::sentry *v134; // eax + std::ostream::sentry *v135; // eax + std::ostream::sentry *v136; // eax + std::ostream::sentry *v137; // eax + std::ostream::sentry *v138; // eax + std::ostream::sentry *v139; // eax + std::ostream::sentry *v140; // eax + std::ostream::sentry *v141; // eax + std::ostream::sentry *v142; // eax + std::ostream::sentry *v143; // eax + std::ostream::sentry *v144; // eax + std::ostream::sentry *v145; // eax + std::ostream::sentry *v146; // eax + std::ostream::sentry *v147; // eax + std::ostream::sentry *v148; // eax + std::ostream::sentry *v149; // eax + std::ostream::sentry *v150; // eax + std::ostream::sentry *v151; // eax + std::ostream::sentry *v152; // eax + int v153; // eax + char *v154; // eax + std::ostream::sentry *v155; // eax + char *v156; // eax + std::ostream::sentry *v157; // eax + std::ostream::sentry *v158; // eax + int j; // eax + int v160; // eax + int v161; // eax + char v162; // dl + std::ostream::sentry *v163; // eax + std::ostream::sentry *v164; // eax + int *v165; // eax + std::ostream::sentry *v166; // eax + bool v167; // zf + int *v168; // eax + std::ostream::sentry *v169; // edx + int *v170; // eax + unsigned __int8 **v171; // ecx + char *v172; // edx + _DWORD *v173; // eax + _DWORD *v174; // eax + std::ostream::sentry *v175; // eax + std::ostream::sentry *v176; // eax + std::ostream::sentry *v177; // eax + std::ostream::sentry *v178; // eax + std::ostream::sentry *v179; // eax + std::ostream::sentry *v180; // eax + char *v181; // edx + std::ostream::sentry *v182; // eax + std::ostream::sentry *v183; // eax + std::ostream::sentry *v184; // eax + std::ostream::sentry *v185; // eax + std::ostream::sentry *v186; // eax + std::ostream::sentry *v187; // eax + std::ostream::sentry *v188; // eax + std::ostream::sentry *v189; // eax + std::ostream::sentry *v190; // eax + std::ostream::sentry *v191; // eax + std::ostream::sentry *v192; // eax + std::ostream::sentry *v193; // eax + std::ostream::sentry *v194; // eax + std::ostream::sentry *v195; // eax + std::ostream::sentry *v196; // eax + std::ostream::sentry *v197; // eax + std::ostream::sentry *v198; // eax + std::ostream::sentry *v199; // eax + std::ostream::sentry *v200; // eax + std::ostream::sentry *v201; // eax + std::ostream::sentry *v202; // eax + std::ostream::sentry *v203; // eax + std::ostream::sentry *v204; // eax + std::ostream::sentry *v205; // eax + std::ostream::sentry *v206; // eax + std::ostream::sentry *v207; // eax + std::ostream::sentry *v208; // eax + std::ostream::sentry *v209; // eax + std::ostream::sentry *v210; // eax + std::ostream::sentry *v211; // eax + std::ostream::sentry *v212; // eax + std::ostream::sentry *v213; // eax + std::ostream::sentry *v214; // eax + std::ostream::sentry *v215; // eax + std::ostream::sentry *v216; // eax + std::ostream::sentry *v217; // eax + std::ostream::sentry *v218; // eax + std::ostream::sentry *v219; // eax + std::ostream::sentry *v220; // eax + std::ostream::sentry *v221; // eax + std::ostream::sentry *v222; // eax + std::ostream::sentry *v223; // eax + std::ostream::sentry *v224; // eax + std::ostream::sentry *v225; // eax + std::ostream::sentry *v226; // eax + std::ostream::sentry *v227; // eax + std::ostream::sentry *v228; // eax + std::ostream::sentry *v229; // eax + std::ostream::sentry *v230; // eax + void **p_Str; // ecx + int i; // eax + std::ostream::sentry *v233; // eax + std::ostream::sentry *v234; // eax + std::ostream::sentry *v235; // eax + std::ostream::sentry *v236; // eax + std::ostream::sentry *v237; // eax + std::ostream::sentry *v238; // eax + std::ostream::sentry *v239; // eax + std::ostream::sentry *v241; // [esp+0h] [ebp-388h] + char *v242; // [esp+4h] [ebp-384h] + const WXML::DOMLib::Token *v243; // [esp+4h] [ebp-384h] + const WXML::DOMLib::Token *v244; // [esp+4h] [ebp-384h] + void *exception; // [esp+5Ch] [ebp-32Ch] + void *v246; // [esp+60h] [ebp-328h] + void *v247; // [esp+64h] [ebp-324h] + void *v248; // [esp+68h] [ebp-320h] + void *v249; // [esp+6Ch] [ebp-31Ch] + void *v250; // [esp+70h] [ebp-318h] + void *v251; // [esp+74h] [ebp-314h] + void *v252; // [esp+78h] [ebp-310h] + void *v253; // [esp+7Ch] [ebp-30Ch] + void *v254; // [esp+80h] [ebp-308h] + void *v255; // [esp+84h] [ebp-304h] + std::ostream::sentry *v256; // [esp+88h] [ebp-300h] + std::ostream::sentry *v257; // [esp+88h] [ebp-300h] + std::ostream::sentry *v258; // [esp+88h] [ebp-300h] + char *v259; // [esp+88h] [ebp-300h] + char Str1; // [esp+90h] [ebp-2F8h] + char *Str1a; // [esp+90h] [ebp-2F8h] + char *Str1g; // [esp+90h] [ebp-2F8h] + char *Str1h; // [esp+90h] [ebp-2F8h] + char *Str1b; // [esp+90h] [ebp-2F8h] + char *Str1c; // [esp+90h] [ebp-2F8h] + char *Str1d; // [esp+90h] [ebp-2F8h] + char *Str1e; // [esp+90h] [ebp-2F8h] + char Str1f; // [esp+90h] [ebp-2F8h] + bool v269; // [esp+96h] [ebp-2F2h] + bool v270; // [esp+97h] [ebp-2F1h] + std::ostream::sentry *v271; // [esp+9Ch] [ebp-2ECh] + std::ostream::sentry *v272; // [esp+9Ch] [ebp-2ECh] + std::ostream::sentry *m; // [esp+9Ch] [ebp-2ECh] + std::ostream::sentry *v274; // [esp+9Ch] [ebp-2ECh] + std::ostream::sentry *v275; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v276; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v277; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v278; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v279; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v280; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v281; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v282; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v283; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v284; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v285; // [esp+A0h] [ebp-2E8h] + int *jj; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v287; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *ii; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v289; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v290; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v291; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v292; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v293; // [esp+A0h] [ebp-2E8h] + std::ostream::sentry *v294; // [esp+A4h] [ebp-2E4h] + std::ostream::sentry *v295; // [esp+A4h] [ebp-2E4h] + std::ostream::sentry *v296; // [esp+A4h] [ebp-2E4h] + std::ostream::sentry *v297; // [esp+A4h] [ebp-2E4h] + int *v298; // [esp+A4h] [ebp-2E4h] + std::ostream::sentry *k; // [esp+A4h] [ebp-2E4h] + char v300; // [esp+A4h] [ebp-2E4h] + std::ostream::sentry *v301; // [esp+A4h] [ebp-2E4h] + std::ostream::sentry *v302; // [esp+A4h] [ebp-2E4h] + int *v303; // [esp+A4h] [ebp-2E4h] + int n; // [esp+A4h] [ebp-2E4h] + std::ostream::sentry *v305; // [esp+A4h] [ebp-2E4h] + int *lpuexcpta; // [esp+A8h] [ebp-2E0h] + int *lpuexcptb; // [esp+A8h] [ebp-2E0h] + int *lpuexcptc; // [esp+A8h] [ebp-2E0h] + int *lpuexcptd; // [esp+A8h] [ebp-2E0h] + int *lpuexcpte; // [esp+A8h] [ebp-2E0h] + void *v312[6]; // [esp+ECh] [ebp-29Ch] BYREF + void *v313[6]; // [esp+104h] [ebp-284h] BYREF + void *v314[6]; // [esp+11Ch] [ebp-26Ch] BYREF + void *v315[6]; // [esp+134h] [ebp-254h] BYREF + void *v316[2]; // [esp+14Ch] [ebp-23Ch] BYREF + char v317; // [esp+154h] [ebp-234h] BYREF + int v318; // [esp+164h] [ebp-224h] BYREF + int v319; // [esp+168h] [ebp-220h] + char v320; // [esp+16Ch] [ebp-21Ch] BYREF + int v321; // [esp+17Ch] [ebp-20Ch] BYREF + int v322; // [esp+180h] [ebp-208h] + char v323; // [esp+184h] [ebp-204h] BYREF + int v324; // [esp+194h] [ebp-1F4h] BYREF + char *v325; // [esp+198h] [ebp-1F0h] + int v326; // [esp+19Ch] [ebp-1ECh] BYREF + int v327; // [esp+1ACh] [ebp-1DCh] BYREF + int v328; // [esp+1B0h] [ebp-1D8h] + char v329[16]; // [esp+1B4h] [ebp-1D4h] BYREF + int *v330; // [esp+1C4h] [ebp-1C4h] BYREF + int v331; // [esp+1C8h] [ebp-1C0h] BYREF + int v332[4]; // [esp+1CCh] [ebp-1BCh] BYREF + int v333; // [esp+1DCh] [ebp-1ACh] BYREF + int v334; // [esp+1E0h] [ebp-1A8h] + char v335[16]; // [esp+1E4h] [ebp-1A4h] BYREF + int v336; // [esp+1F4h] [ebp-194h] BYREF + int v337; // [esp+1F8h] [ebp-190h] + char v338; // [esp+1FCh] [ebp-18Ch] BYREF + int v339; // [esp+20Ch] [ebp-17Ch] BYREF + int v340; // [esp+210h] [ebp-178h] + int v341[4]; // [esp+214h] [ebp-174h] BYREF + int v342[2]; // [esp+224h] [ebp-164h] BYREF + char v343; // [esp+22Ch] [ebp-15Ch] BYREF + char *Str; // [esp+23Ch] [ebp-14Ch] BYREF + int v345; // [esp+240h] [ebp-148h] BYREF + char v346[108]; // [esp+244h] [ebp-144h] BYREF + int v347[2]; // [esp+2B0h] [ebp-D8h] BYREF + char v348[4]; // [esp+2B8h] [ebp-D0h] BYREF + char v349[12]; // [esp+2BCh] [ebp-CCh] BYREF + _DWORD v350[47]; // [esp+2C8h] [ebp-C0h] BYREF + + if ( a13 && *(_DWORD *)(this + 28) ) + { + v294 = std::operator<<>((std::ostream::sentry *)(a6 + 8), "cs.push(\""); + WXML::Rewrite::ToStringCode((int)v347, a2); + v15 = std::operator<<(v294, v347); + v16 = std::operator<<>(v15, ":"); + v17 = std::operator<<(v16, (int *)(this + 24)); + std::operator<<>(v17, ":"); + v18 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 92)); + std::operator<<>(v18, ":"); + v19 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 96)); + v20 = std::operator<<>(v19, "\")"); + std::operator<<>(v20, a12); + std::string::_M_dispose((void **)v347); + } + Str1 = std::operator==(this, "TEXTNODE"); + if ( Str1 ) + { + v21 = *(_DWORD *)(this + 140); + if ( v21 == -3 ) + { + exception = __cxa_allocate_exception(0x18u); + std::string::basic_string((void **)v347, (char *)&byte_5537CA); + WXML::DOMLib::WXMLDom::Error((int)exception, a2, this + 84, v347, (int *)(this + 144)); + std::string::_M_dispose((void **)v347); + v22 = exception; + goto LABEL_9; + } + if ( v21 == -1 ) + { + v246 = __cxa_allocate_exception(0x18u); + std::string::basic_string((void **)v347, "value not set"); + std::string::basic_string((void **)&Str, (char *)&byte_5537CA); + WXML::DOMLib::WXMLDom::Error((int)v246, a2, this + 84, (int *)&Str, v347); + std::string::_M_dispose((void **)&Str); + std::string::_M_dispose((void **)v347); + v22 = v246; + goto LABEL_9; + } + v23 = std::operator<<>((std::ostream::sentry *)(a6 + 8), "var "); + v24 = std::operator<<(v23, a5); + std::operator<<>(v24, "=_oz(z,"); + v25 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 140)); + v26 = std::operator<<>(v25, ","); + v27 = std::operator<<(v26, a8); + v28 = std::operator<<>(v27, ","); + v29 = std::operator<<(v28, a9); + v30 = std::operator<<>(v29, ","); + v31 = std::operator<<(v30, a10); + v242 = ")"; +LABEL_68: + v87 = std::operator<<>(v31, v242); +LABEL_69: + std::operator<<>(v87, a12); + goto LABEL_169; + } + if ( !(unsigned __int8)std::operator!=(this, "wx-define") + || !(unsigned __int8)std::operator!=(this, "wx-import") + || !(unsigned __int8)std::operator!=(this, "import") + || !(unsigned __int8)std::operator!=(this, "template") ) + { + goto LABEL_169; + } + if ( std::operator==(this, "wx-repeat") ) + { + std::string::basic_string(v312, "items"); + v295 = (std::ostream::sentry *)(this + 48); + v275 = (std::ostream::sentry *)(this + 52); + if ( (_DWORD *)(this + 52) == std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)(this + 48), + (int)v312) ) + std::string::operator=((unsigned int *)v312, "wx:for-items"); + std::string::basic_string(v313, "index"); + if ( v275 == (std::ostream::sentry *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v295, + (int)v313) ) + std::string::operator=((unsigned int *)v313, "wx:for-index"); + std::string::basic_string(v314, "item"); + if ( v275 == (std::ostream::sentry *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v295, + (int)v314) ) + std::string::operator=((unsigned int *)v314, "wx:for-item"); + std::string::basic_string(v315, "wx:key"); + v316[0] = &v317; + v318 = (int)&v320; + v321 = (int)&v323; + v316[1] = 0; + v317 = 0; + v319 = 0; + v320 = 0; + v322 = 0; + v323 = 0; + if ( v275 == (std::ostream::sentry *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v295, + (int)v312) ) + { + std::string::_M_dispose((void **)&v321); + std::string::_M_dispose((void **)&v318); + std::string::_M_dispose(v316); + std::string::_M_dispose(v315); + std::string::_M_dispose(v314); + std::string::_M_dispose(v313); + std::string::_M_dispose(v312); + return 0; + } + if ( v275 == (std::ostream::sentry *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v295, + (int)v313) ) + { + std::string::operator=((unsigned int *)&v318, "index"); + } + else + { + v32 = std::map::operator[](v295, (int)v313); + v33 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v32); + std::string::_M_assign((int)&v318, v33); + } + if ( v275 == (std::ostream::sentry *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v295, + (int)v314) ) + { + std::string::operator=((unsigned int *)&v321, "item"); + } + else + { + v34 = std::map::operator[](v295, (int)v314); + v35 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v34); + std::string::_M_assign((int)&v321, v35); + } + if ( v275 != (std::ostream::sentry *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v295, + (int)v313) + && *((_DWORD *)std::map::operator[](v295, (int)v313) + 14) == -3 + && (a14 & 1) == 0 ) + { + v250 = __cxa_allocate_exception(0x18u); + lpuexcpta = (int *)(std::map::operator[](v295, (int)v313) + 60); + v36 = std::map::operator[](v295, (int)v313); + WXML::DOMLib::WXMLDom::Error((int)v250, a2, (int)v36, (int *)v313, lpuexcpta); + __cxa_throw( + v250, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + if ( v275 != (std::ostream::sentry *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v295, + (int)v315) + && *((_DWORD *)std::map::operator[](v295, (int)v315) + 14) == -3 + && (a14 & 1) == 0 ) + { + v249 = __cxa_allocate_exception(0x18u); + lpuexcptb = (int *)(std::map::operator[](v295, (int)v315) + 60); + v37 = std::map::operator[](v295, (int)v315); + WXML::DOMLib::WXMLDom::Error((int)v249, a2, (int)v37, (int *)v315, lpuexcptb); + __cxa_throw( + v249, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + if ( !v319 ) + std::string::operator=((unsigned int *)&v318, "index"); + if ( !v322 ) + std::string::operator=((unsigned int *)&v321, "item"); + v325 = 0; + v324 = (int)&v326; + LOBYTE(v326) = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v324); + v327 = (int)v329; + v328 = 0; + v329[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v327); + v330 = v332; + v331 = 0; + LOBYTE(v332[0]) = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v330); + v333 = (int)v335; + v334 = 0; + v335[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v333); + std::string::basic_string((void **)v347, (char *)&byte_5537CA); + std::string::basic_string((void **)&Str, (char *)&byte_5537CA); + WXML::DOMLib::WXMLDom::RenderMeAsFunction( + a2, + a3, + a4, + &v324, + a6, + a7, + &v330, + &v327, + a10, + &v333, + a11, + a12, + &Str, + 0, + a13, + a14, + v347); + std::string::_M_dispose((void **)&Str); + std::string::_M_dispose((void **)v347); + if ( *((_DWORD *)std::map::operator[](v295, (int)v312) + 14) == -3 ) + { + v247 = __cxa_allocate_exception(0x18u); + lpuexcptc = (int *)(std::map::operator[](v295, (int)v312) + 60); + v38 = std::map::operator[](v295, (int)v312); + WXML::DOMLib::WXMLDom::Error((int)v247, a2, (int)v38, (int *)v312, lpuexcptc); + __cxa_throw( + v247, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + if ( *((_DWORD *)std::map::operator[](v295, (int)v312) + 14) == -1 ) + { + v248 = __cxa_allocate_exception(0x18u); + std::string::basic_string((void **)v347, "value not set"); + WXML::DOMLib::WXMLDom::Error((int)v248, a2, this + 84, (int *)v312, v347); + std::string::_M_dispose((void **)v347); + __cxa_throw( + v248, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + if ( !a13 ) + goto LABEL_57; + if ( v275 == (std::ostream::sentry *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v295, + (int)v315) ) + { + Str = v346; + v345 = 0; + v346[0] = 0; + v256 = std::operator<<>((std::ostream::sentry *)(a6 + 8), "_wp('"); + WXML::Rewrite::ToStringCode((int)v347, a2); + v39 = std::operator<<(v256, v347); + v40 = std::operator<<>(v39, ":"); + v41 = std::operator<<(v40, (int *)(this + 24)); + std::operator<<>(v41, ":"); + v42 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 92)); + std::operator<<>(v42, ":"); + v43 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 96)); + v44 = std::operator<<>( + v43, + ": Now you can provide attr `wx:key` for a `wx:for` to improve performance.')"); + std::operator<<>(v44, a12); + std::string::_M_dispose((void **)v347); + std::string::_M_dispose((void **)&Str); + } + v45 = (std::ostream::sentry *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v295, + (int)v315); + if ( v45 == v275 ) + goto LABEL_57; + v46 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v45 + 40); + std::string::basic_string((char *)&v336, v46); + v339 = (int)v341; + v340 = 0; + LOBYTE(v341[0]) = 0; + v47 = std::string::find(&v336, 46, 0); + v276 = (std::ostream::sentry *)v47; + if ( v47 != (char *)-1 ) + { + std::string::substr(&Str, &v336, 0, (unsigned int)v47); + Str1 = WXML::DOMLib::Token::IsValidVariableName(&Str); + if ( Str1 ) + { + std::string::substr(v347, &v336, (unsigned int)v276 + 1, 0xFFFFFFFF); + Str1 = WXML::DOMLib::Token::IsValidVariableName((char **)v347); + std::string::_M_dispose((void **)v347); + } + std::string::_M_dispose((void **)&Str); + if ( Str1 ) + { + std::string::substr(&Str, &v336, (unsigned int)v276 + 1, 0xFFFFFFFF); + std::string::operator=((unsigned __int8 **)&v339, (int)&Str); + std::string::_M_dispose((void **)&Str); + } + } + if ( WXML::DOMLib::Token::GetTemplateContent(&v336, (unsigned __int8 **)&v339) ) + { + if ( Str1 ) + goto LABEL_181; + } + else + { + if ( Str1 == 1 || WXML::DOMLib::Token::IsValidVariableName((char **)&v339) ) + goto LABEL_181; + v48 = std::string::find(&v339, 46, 0); + v277 = (std::ostream::sentry *)v48; + if ( v48 != (char *)-1 ) + { + std::string::substr(&Str, &v339, 0, (unsigned int)v48); + Str1f = WXML::DOMLib::Token::IsValidVariableName(&Str); + if ( Str1f ) + { + std::string::substr(v347, &v339, (unsigned int)v277 + 1, 0xFFFFFFFF); + Str1f = WXML::DOMLib::Token::IsValidVariableName((char **)v347); + std::string::_M_dispose((void **)v347); + } + std::string::_M_dispose((void **)&Str); + if ( Str1f ) + { + std::string::substr(v347, &v339, (unsigned int)v277 + 1, 0xFFFFFFFF); + std::string::operator=((unsigned __int8 **)&v339, (int)v347); + std::string::_M_dispose((void **)v347); +LABEL_181: + v289 = std::operator<<>((std::ostream::sentry *)(a6 + 8), "_wp('"); + WXML::Rewrite::ToStringCode((int)v342, a2); + v223 = std::operator<<(v289, v342); + v224 = std::operator<<>(v223, ":"); + v225 = std::operator<<(v224, (int *)(this + 24)); + std::operator<<>(v225, ":"); + v226 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 92)); + std::operator<<>(v226, ":"); + v227 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 96)); + v290 = std::operator<<>(v227, ": wx:key=\""); + WXML::Rewrite::ToStringCode((int)&Str, &v336); + v228 = std::operator<<(v290, (int *)&Str); + v291 = std::operator<<>( + v228, + "\" does not look like a valid key name (did you mean wx:key=\""); + WXML::Rewrite::ToStringCode((int)v347, &v339); + v229 = std::operator<<(v291, v347); + v230 = std::operator<<>(v229, "\" ?)')"); + std::operator<<>(v230, a12); + std::string::_M_dispose((void **)v347); + std::string::_M_dispose((void **)&Str); + p_Str = (void **)v342; +LABEL_191: + std::string::_M_dispose(p_Str); + goto LABEL_56; + } + } + } + if ( !WXML::DOMLib::Token::IsValidVariableName((char **)&v336) ) + { + if ( v337 ) + { + if ( std::operator==((int)&v336, "0") ) + goto LABEL_56; + if ( *(_BYTE *)v336 != 48 ) + { + for ( i = 0; v337 != i; ++i ) + { + if ( (unsigned __int8)(*(_BYTE *)(v336 + i) - 48) > 9u ) + goto LABEL_189; + } + goto LABEL_56; + } + } +LABEL_189: + if ( !std::operator==((int)&v336, "*this") ) + { + v292 = std::operator<<>((std::ostream::sentry *)(a6 + 8), "_wp('"); + WXML::Rewrite::ToStringCode((int)&Str, a2); + v233 = std::operator<<(v292, (int *)&Str); + v234 = std::operator<<>(v233, ":"); + v235 = std::operator<<(v234, (int *)(this + 24)); + std::operator<<>(v235, ":"); + v236 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 92)); + std::operator<<>(v236, ":"); + v237 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 96)); + v293 = std::operator<<>(v237, ": wx:key=\""); + WXML::Rewrite::ToStringCode((int)v347, &v336); + v238 = std::operator<<(v293, v347); + v239 = std::operator<<>(v238, "\" does not look like a valid key name.')"); + std::operator<<>(v239, a12); + std::string::_M_dispose((void **)v347); + p_Str = (void **)&Str; + goto LABEL_191; + } + } +LABEL_56: + std::string::_M_dispose((void **)&v339); + std::string::_M_dispose((void **)&v336); +LABEL_57: + v241 = (std::ostream::sentry *)(a6 + 8); + if ( *(_BYTE *)(this + 256) ) + { + v49 = std::operator<<(v241, a5); + v50 = std::operator<<>(v49, ".wxXCkey=4"); + } + else + { + v51 = std::operator<<(v241, a5); + v50 = std::operator<<>(v51, ".wxXCkey=2"); + } + std::operator<<>(v50, a12); + std::operator<<>((std::ostream::sentry *)(a6 + 8), "_2z(z,"); + v52 = std::map::operator[](v295, (int)v312); + v53 = (std::ostream::sentry *)std::ostream::operator<<(*((_DWORD *)v52 + 14)); + v54 = std::operator<<>(v53, ","); + v55 = std::operator<<(v54, &v324); + v56 = std::operator<<>(v55, ","); + v57 = std::operator<<(v56, a8); + v58 = std::operator<<>(v57, ","); + v59 = std::operator<<(v58, a9); + v60 = std::operator<<>(v59, ","); + v61 = std::operator<<(v60, a10); + v62 = std::operator<<>(v61, ","); + v63 = std::operator<<(v62, a5); + v64 = std::operator<<>(v63, ",'"); + v65 = std::operator<<(v64, &v321); + v66 = std::operator<<>(v65, "','"); + v67 = std::operator<<(v66, &v318); + v278 = std::operator<<>(v67, "','"); + v68 = std::map::operator[](v295, (int)v315); + v69 = (int *)WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v68); + v70 = std::operator<<(v278, v69); + v71 = std::operator<<>(v70, "')"); + std::operator<<>(v71, a12); + std::string::_M_dispose((void **)&v333); + std::string::_M_dispose((void **)&v330); + std::string::_M_dispose((void **)&v327); + std::string::_M_dispose((void **)&v324); + std::string::_M_dispose((void **)&v321); + std::string::_M_dispose((void **)&v318); + std::string::_M_dispose(v316); + std::string::_M_dispose(v315); + std::string::_M_dispose(v314); + std::string::_M_dispose(v313); + v72 = v312; + goto LABEL_84; + } + if ( std::operator==(this, "block") ) + { + WXML::DOMLib::WXMLDom::RenderChildren(a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + goto LABEL_169; + } + v296 = (std::ostream::sentry *)(this + 48); + Str1a = (char *)(this + 52); + if ( std::operator==(this, "include") ) + { + std::string::basic_string((void **)v347, (char *)off_5539C8); + v279 = (std::ostream::sentry *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v296, + (int)v347); + std::string::_M_dispose((void **)v347); + if ( v279 == (std::ostream::sentry *)Str1a ) + goto LABEL_169; + std::string::basic_string((void **)v347, (char *)off_5539C8); + v280 = (std::ostream::sentry *)*((_DWORD *)std::map::operator[](v296, v347) + 14); + std::string::_M_dispose((void **)v347); + if ( v280 == (std::ostream::sentry *)-3 ) + { + v251 = __cxa_allocate_exception(0x18u); + std::string::basic_string((void **)&Str, (char *)off_5539C8); + lpuexcptd = (int *)(std::map::operator[](v296, &Str) + 60); + std::string::basic_string((void **)v347, (char *)off_5539C8); + std::string::basic_string((void **)v342, (char *)off_5539C8); + v73 = std::map::operator[](v296, v342); + WXML::DOMLib::WXMLDom::Error((int)v251, a2, (int)v73, v347, lpuexcptd); + std::string::_M_dispose((void **)v342); + std::string::_M_dispose((void **)v347); + std::string::_M_dispose((void **)&Str); + v22 = v251; +LABEL_9: + __cxa_throw( + v22, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + std::operator<<>((std::ostream::sentry *)(a6 + 8), "_ic(x["); + v271 = *(std::ostream::sentry **)(this + 248); + std::string::basic_string((void **)&Str, (char *)off_5539C8); + v74 = std::map::operator[](v296, &Str); + v75 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v74); + std::string::basic_string((char *)v347, v75); + StrID = WXML::DOMLib::StrCache::GetStrID(v271, (int)v347); + std::ostream::operator<<(StrID); + std::string::_M_dispose((void **)v347); + std::string::_M_dispose((void **)&Str); + v77 = std::operator<<>((std::ostream::sentry *)(a6 + 8), "],"); + v78 = std::operator<<(v77, a3); + std::operator<<>(v78, (char *)off_553CC8); + v297 = *(std::ostream::sentry **)(this + 248); + std::string::basic_string((char *)v347, (int)a2); + v79 = WXML::DOMLib::StrCache::GetStrID(v297, (int)v347); + std::ostream::operator<<(v79); + std::string::_M_dispose((void **)v347); + v80 = std::operator<<>((std::ostream::sentry *)(a6 + 8), "],"); + v81 = std::operator<<(v80, a8); + v82 = std::operator<<>(v81, ","); + v83 = std::operator<<(v82, a9); + v84 = std::operator<<>(v83, ","); + v85 = std::operator<<(v84, a5); + v86 = std::operator<<>(v85, ","); + v31 = std::operator<<(v86, a10); + v242 = ");"; + goto LABEL_68; + } + v270 = std::operator==(this, "wx-template"); + if ( v270 ) + { + std::string::basic_string((void **)v347, "is"); + v281 = (std::ostream::sentry *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v296, + (int)v347); + std::string::_M_dispose((void **)v347); + if ( v281 == (std::ostream::sentry *)Str1a ) + goto LABEL_169; + std::string::basic_string((void **)&Str, "is"); + v269 = v270; + if ( *((_DWORD *)std::map::operator[](v296, &Str) + 14) != -3 ) + { + std::string::basic_string((void **)v347, "is"); + v269 = *((_DWORD *)std::map::operator[](v296, v347) + 14) == -1; + std::string::_M_dispose((void **)v347); + } + std::string::_M_dispose((void **)&Str); + if ( v269 ) + { + v272 = std::operator<<>((std::ostream::sentry *)(a6 + 8), "_wp(\""); + WXML::Rewrite::ToStringCode((int)v347, a2); + v88 = std::operator<<(v272, v347); + std::operator<<>(v88, ":template:"); + v89 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 92)); + std::operator<<>(v89, ":"); + v90 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 96)); + std::operator<<>(v90, (char *)off_553CDD); + std::string::_M_dispose((void **)v347); + std::string::basic_string((void **)v347, "is"); + v91 = std::map::operator[](v296, v347); + v92 = (int *)WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v91); + WXML::Rewrite::ToStringCode(v92, a6); + std::string::_M_dispose((void **)v347); + v87 = std::operator<<>( + (std::ostream::sentry *)(a6 + 8), + "` is not a valid expression for a template.\")"); + goto LABEL_69; + } + v334 = 0; + v333 = (int)v335; + v335[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v333); + v282 = (std::ostream::sentry *)(a6 + 8); + v93 = std::operator<<>((std::ostream::sentry *)(a6 + 8), "var "); + v94 = std::operator<<(v93, &v333); + std::operator<<>(v94, "=_oz(z,"); + std::string::basic_string((void **)v347, "is"); + v95 = std::map::operator[](v296, v347); + v96 = (std::ostream::sentry *)std::ostream::operator<<(*((_DWORD *)v95 + 14)); + v97 = std::operator<<>(v96, ","); + v98 = std::operator<<(v97, a8); + v99 = std::operator<<>(v98, ","); + v100 = std::operator<<(v99, a9); + v101 = std::operator<<>(v100, ","); + v102 = std::operator<<(v101, a10); + v103 = std::operator<<>(v102, ")"); + std::operator<<>(v103, a12); + std::string::_M_dispose((void **)v347); + v336 = (int)&v338; + v337 = 0; + v338 = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v336); + v104 = std::operator<<>((std::ostream::sentry *)(a6 + 8), "var "); + v105 = std::operator<<(v104, &v336); + std::operator<<>(v105, "=_gd(x["); + v257 = *(std::ostream::sentry **)(this + 248); + std::string::basic_string((char *)v347, (int)a2); + v106 = WXML::DOMLib::StrCache::GetStrID(v257, (int)v347); + std::ostream::operator<<(v106); + std::string::_M_dispose((void **)v347); + v107 = std::operator<<>((std::ostream::sentry *)(a6 + 8), "],"); + v108 = std::operator<<(v107, &v333); + v109 = std::operator<<>(v108, ","); + v110 = std::operator<<(v109, a3); + v111 = std::operator<<>(v110, ","); + v112 = std::operator<<(v111, a11); + v113 = std::operator<<>(v112, ")"); + std::operator<<>(v113, a12); + v114 = std::operator<<>((std::ostream::sentry *)(a6 + 8), "if("); + v115 = std::operator<<(v114, &v336); + v116 = std::operator<<>(v115, "){"); + std::operator<<>(v116, a12); + v340 = 0; + v339 = (int)v341; + LOBYTE(v341[0]) = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v339); + std::string::basic_string((void **)&Str, "data"); + if ( Str1a != (char *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + v296, + (int)&Str) ) + { + std::string::basic_string((void **)v347, "data"); + v117 = std::map::operator[](v296, v347); + v270 = *(_DWORD *)(WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v117) + 4) == 0; + std::string::_M_dispose((void **)v347); + } + std::string::_M_dispose((void **)&Str); + if ( v270 ) + { + v118 = std::operator<<>(v282, "var "); + v119 = std::operator<<(v118, &v339); + v120 = std::operator<<>(v119, "={}"); + std::operator<<>(v120, a12); + } + else + { + std::string::basic_string((void **)v347, "data"); + Str1g = (char *)*((_DWORD *)std::map::operator[](v296, v347) + 14); + std::string::_M_dispose((void **)v347); + if ( Str1g == (char *)-3 ) + { + v252 = __cxa_allocate_exception(0x18u); + std::string::basic_string((void **)&Str, "data"); + lpuexcpte = (int *)(std::map::operator[](v296, &Str) + 60); + std::string::basic_string((void **)v347, "data"); + std::string::basic_string((void **)v342, "data"); + v121 = std::map::operator[](v296, v342); + WXML::DOMLib::WXMLDom::Error((int)v252, a2, (int)v121, v347, lpuexcpte); + std::string::_M_dispose((void **)v342); + std::string::_M_dispose((void **)v347); + std::string::_M_dispose((void **)&Str); + __cxa_throw( + v252, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + v122 = std::operator<<>(v282, "var "); + v123 = std::operator<<(v122, &v339); + std::operator<<>(v123, "=_1z(z,"); + std::string::basic_string((void **)v347, "data"); + v124 = std::map::operator[](v296, v347); + v125 = (std::ostream::sentry *)std::ostream::operator<<(*((_DWORD *)v124 + 14)); + v126 = std::operator<<>(v125, ","); + v127 = std::operator<<(v126, a8); + v128 = std::operator<<>(v127, ","); + v129 = std::operator<<(v128, a9); + v130 = std::operator<<>(v129, ","); + v131 = std::operator<<(v130, a10); + v132 = std::operator<<>(v131, ") || {}"); + std::operator<<>(v132, a12); + std::string::_M_dispose((void **)v347); + } + v133 = std::operator<<>(v282, "var cur_globalf="); + v134 = std::operator<<(v133, a10); + v135 = std::operator<<>(v134, ".f"); + std::operator<<>(v135, a12); + v136 = std::operator<<(v282, a5); + v137 = std::operator<<>(v136, ".wxXCkey=3"); + std::operator<<>(v137, a12); + v138 = std::operator<<(v282, &v336); + v139 = std::operator<<>(v138, "("); + v140 = std::operator<<(v139, &v339); + v141 = std::operator<<>(v140, ","); + v142 = std::operator<<(v141, &v339); + v143 = std::operator<<>(v142, ","); + v144 = std::operator<<(v143, a5); + v145 = std::operator<<>(v144, ","); + v146 = std::operator<<(v145, a10); + v147 = std::operator<<>(v146, ")"); + std::operator<<>(v147, a12); + v148 = std::operator<<(v282, a10); + v149 = std::operator<<>(v148, ".f=cur_globalf"); + std::operator<<>(v149, a12); + std::string::_M_dispose((void **)&v339); + v150 = std::operator<<>(v282, "}"); + std::operator<<>(v150, a12); + v151 = std::operator<<>(v282, "else _w("); + v152 = std::operator<<(v151, &v333); + std::operator<<>(v152, (char *)off_553CC8); + Str1h = *(char **)(this + 248); + std::string::basic_string((char *)v347, (int)a2); + v153 = WXML::DOMLib::StrCache::GetStrID(Str1h, (int)v347); + std::ostream::operator<<(v153); + std::string::_M_dispose((void **)v347); + std::operator<<>(v282, "],"); + std::string::basic_string((void **)&Str, "is"); + v154 = std::map::operator[](v296, &Str); + v155 = (std::ostream::sentry *)std::ostream::operator<<(*((_DWORD *)v154 + 2)); + std::operator<<>(v155, ","); + std::string::basic_string((void **)v347, "is"); + v156 = std::map::operator[](v296, v347); + v157 = (std::ostream::sentry *)std::ostream::operator<<(*((_DWORD *)v156 + 3)); + v158 = std::operator<<>(v157, ")"); + std::operator<<>(v158, a12); + std::string::_M_dispose((void **)v347); + std::string::_M_dispose((void **)&Str); + std::string::_M_dispose((void **)&v336); + v72 = (void **)&v333; +LABEL_84: + std::string::_M_dispose(v72); + goto LABEL_169; + } + v324 = 0; + v325 = 0; + v326 = 0; + for ( j = *(_DWORD *)(this + 60); ; j = std::_Rb_tree_increment((int)v298) ) + { + v298 = (int *)j; + if ( (char *)j == Str1a ) + break; + v160 = *(_DWORD *)(j + 96); + if ( v160 == -3 ) + { + if ( (a14 & 1) == 0 ) + { + v254 = __cxa_allocate_exception(0x18u); + WXML::DOMLib::WXMLDom::Error((int)v254, a2, (int)(v298 + 10), v298 + 4, v298 + 25); + __cxa_throw( + v254, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + } + else if ( v160 == -1 && v298[15] > 0 ) + { + v253 = __cxa_allocate_exception(0x18u); + std::string::basic_string((void **)v347, "interal error(1010)"); + WXML::DOMLib::WXMLDom::Error((int)v253, a2, (int)(v298 + 10), v298 + 4, v347); + std::string::_M_dispose((void **)v347); + __cxa_throw( + v253, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + v161 = v298[4]; + if ( *(_BYTE *)v161 != 119 + || *(_BYTE *)(v161 + 1) != 120 + || (v162 = *(_BYTE *)(v161 + 2), v162 != 58) && v162 != 45 + || !__stricmp((const char *)v161, "wx:scope-data") ) + { + std::string::basic_string((char *)v347, (int)(v298 + 4)); + WXML::DOMLib::Token::Token((int)v350, (WXML::DOMLib::Token *)(v298 + 10), v243); + std::vector>::emplace_back>( + &v324, + v347); + std::pair::~pair((void **)v347); + } + } + std::sort<__gnu_cxx::__normal_iterator *,std::vector>>,bool (*)(std::pair const&,std::pair const&)>( + (char *)v324, + v325, + (int (__cdecl *)(int, int))WXML::DOMLib::AttrsCompartor); + v328 = 0; + v327 = (int)v329; + v332[1] = (int)&v331; + v332[2] = (int)&v331; + v329[0] = 0; + v283 = (std::ostream::sentry *)v325; + v331 = 0; + v332[0] = 0; + v332[3] = 0; + for ( k = (std::ostream::sentry *)v324; v283 != k; k = (std::ostream::sentry *)((char *)k + 136) ) + std::set::insert(&v330, (int)k); + std::basic_stringstream,std::allocator>::basic_stringstream((int)v347); + for ( m = 0; (unsigned int)m < -252645135 * ((int)&v325[-v324] >> 3); m = (std::ostream::sentry *)((char *)m + 1) ) + { + v258 = (std::ostream::sentry *)(136 * (_DWORD)m); + Str1b = (char *)(136 * (_DWORD)m + v324); + std::string::substr(&v333, Str1b, 0, 6u); + v300 = std::operator!=((int)&v333, "model:"); + std::string::_M_dispose((void **)&v333); + if ( !v300 ) + { + v301 = std::operator<<>((std::ostream::sentry *)v348, "\"model:"); + std::string::substr(v342, Str1b, 6u, 0xFFFFFFFF); + v163 = std::operator<<(v301, v342); + v164 = std::operator<<>(v163, "\""); + v302 = std::operator<<>(v164, ":\""); + v165 = (int *)WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v258 + v324 + 24); + WXML::Rewrite::ToStringCode((int)&Str, v165); + v166 = std::operator<<(v302, (int *)&Str); + std::operator<<>(v166, "\","); + std::string::_M_dispose((void **)&Str); + std::string::_M_dispose((void **)v342); + std::string::substr(&v336, Str1b, 6u, 0xFFFFFFFF); + v284 = (std::ostream::sentry *)v332[0]; + v303 = &v331; + while ( v284 ) + { + v167 = (unsigned __int8)std::operator<((int)v284 + 16, (int)&v336) == 0; + v168 = v303; + v169 = (std::ostream::sentry *)*((_DWORD *)v284 + 3); + if ( v167 ) + { + v169 = (std::ostream::sentry *)*((_DWORD *)v284 + 2); + if ( v167 ) + v168 = (int *)v284; + } + v284 = v169; + v303 = v168; + } + if ( v303 != &v331 ) + { + v167 = (unsigned __int8)std::operator<((int)&v336, (int)(v303 + 4)) == 0; + v170 = &v331; + if ( v167 ) + v170 = v303; + v303 = v170; + } + std::string::_M_dispose((void **)&v336); + if ( v303 == &v331 ) + { + std::string::substr(&v339, Str1b, 6u, 0xFFFFFFFF); + std::string::operator=((unsigned __int8 **)((char *)v258 + v324), (int)&v339); + std::string::_M_dispose((void **)&v339); + } + else + { + v171 = (unsigned __int8 **)((char *)v258 + v324); + v172 = (char *)v258 + v324 + 136; + if ( v325 != v172 ) + { + for ( n = -252645135 * ((v325 - v172) >> 3); ; --n ) + { + v285 = (std::ostream::sentry *)(v171 + 34); + if ( n <= 0 ) + break; + std::pair::operator=(v171, (int)(v171 + 34)); + v171 = (unsigned __int8 **)v285; + } + } + v325 -= 136; + std::pair::~pair((void **)v325); + m = (std::ostream::sentry *)((char *)m - 1); + } + } + } + std::stringbuf::str((int)v342, (int)v349); + std::string::operator=((unsigned __int8 **)&v327, (int)v342); + std::string::_M_dispose((void **)v342); + if ( v328 ) + { + std::string::basic_string((char *)&v339, (int)a5); + std::string::append(&v339, ".rawAttr={"); + v173 = std::string::append(&v339, (int)&v327); + std::string::basic_string(v342, v173); + v174 = std::string::append(v342, "};"); + std::string::basic_string(&Str, v174); + std::string::operator=((unsigned __int8 **)&v327, (int)&Str); + std::string::_M_dispose((void **)&Str); + std::string::_M_dispose((void **)v342); + std::string::_M_dispose((void **)&v339); + } + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v347); + std::_Rb_tree,std::less,std::allocator>::_M_erase(v332[0]); + v305 = (std::ostream::sentry *)(a6 + 8); + if ( (unsigned int)&v325[-v324] <= 0x88 ) + { + v191 = std::operator<<>(v305, "var "); + v192 = std::operator<<(v191, a5); + v193 = std::operator<<>(v192, "=_n('"); + v194 = std::operator<<(v193, (int *)this); + v195 = std::operator<<>(v194, "')"); + std::operator<<>(v195, a12); + for ( ii = (std::ostream::sentry *)v324; ; ii = (std::ostream::sentry *)((char *)ii + 136) ) + { + if ( ii == (std::ostream::sentry *)v325 ) + goto LABEL_164; + Str1e = *(char **)ii; + Str = v346; + v345 = 0; + v346[0] = 0; + if ( !strncmp(Str1e, "data-", 5u) || std::string::find((int *)ii, 58, 0) != (char *)-1 ) + { + std::string::_M_assign((int)&Str, (int)ii); + if ( !strncmp(Str1e, "generic:", 8u) ) + { + std::operator<<>(v305, "var $tmp="); + if ( *((_DWORD *)ii + 11) ) + { + std::operator<<>(v305, "grb(z["); + v196 = (std::ostream::sentry *)std::ostream::operator<<(*((_DWORD *)ii + 20)); + v197 = std::operator<<>(v196, "],"); + v198 = std::operator<<(v197, a8); + v199 = std::operator<<>(v198, ","); + v200 = std::operator<<(v199, a9); + v201 = std::operator<<>(v200, ","); + v202 = std::operator<<(v201, a10); + v203 = std::operator<<>(v202, ")"); + std::operator<<>(v203, a12); + v204 = std::operator<<>(v305, "if ($tmp!=\"\") $tmp=\"wx-\"+$tmp"); + } + else + { + v204 = std::operator<<>(v305, "\"\""); + } + std::operator<<>(v204, a12); + v205 = std::operator<<(v305, a5); + std::operator<<>(v205, ".generics['"); + v206 = std::operator<<>(v305, "wx-"); + v207 = std::operator<<>(v206, Str1e + 8); + v208 = std::operator<<>(v207, "']=$tmp"); + goto LABEL_158; + } + } + else + { + WXML::DOMLib::WXMLDom::ToCamelStyle((int)v347, (int)ii); + std::string::operator=((unsigned __int8 **)&Str, (int)v347); + std::string::_M_dispose((void **)v347); + } + if ( *((_DWORD *)ii + 11) ) + { + if ( *((_DWORD *)ii + 20) == -1 ) + { + v255 = __cxa_allocate_exception(0x18u); + std::string::basic_string((void **)v347, "interal error(1010)"); + WXML::DOMLib::WXMLDom::Error((int)v255, a2, (int)ii + 24, (int *)ii, v347); + std::string::_M_dispose((void **)v347); + __cxa_throw( + v255, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + v211 = std::operator<<>(v305, "_rz(z,"); + v212 = std::operator<<(v211, a5); + v213 = std::operator<<>(v212, ",'"); + v214 = std::operator<<(v213, (int *)&Str); + std::operator<<>(v214, "',"); + v215 = (std::ostream::sentry *)std::ostream::operator<<(*((_DWORD *)ii + 20)); + v216 = std::operator<<>(v215, ","); + v217 = std::operator<<(v216, a8); + v218 = std::operator<<>(v217, ","); + v219 = std::operator<<(v218, a9); + v220 = std::operator<<>(v219, ","); + v221 = std::operator<<(v220, a10); + v208 = std::operator<<>(v221, ")"); + } + else + { + v209 = std::operator<<(v305, a5); + std::operator<<>(v209, ".attr['"); + v210 = std::operator<<(v305, (int *)&Str); + v208 = std::operator<<>(v210, "']=true"); + } +LABEL_158: + std::operator<<>(v208, a12); + std::string::_M_dispose((void **)&Str); + } + } + v339 = 0; + v340 = 0; + v341[0] = 0; + v175 = std::operator<<>(v305, "var "); + v176 = std::operator<<(v175, a5); + v177 = std::operator<<>(v176, "=_mz(z,'"); + v178 = std::operator<<(v177, (int *)this); + std::operator<<>(v178, (char *)off_553DAF); + v274 = 0; + v259 = (char *)&byte_5537CA; + for ( jj = (int *)v324; jj != (int *)v325; jj += 34 ) + { + Str1c = (char *)*jj; + v342[0] = (int)&v343; + v342[1] = 0; + v343 = 0; + if ( !strncmp(Str1c, "data-", 5u) || std::string::find(jj, 58, 0) != (char *)-1 ) + { + std::string::_M_assign((int)v342, (int)jj); + if ( !strncmp(Str1c, "generic:", 8u) ) + { + Str = Str1c + 8; + WXML::DOMLib::Token::Token((int)&v345, (WXML::DOMLib::Token *)(jj + 6), v244); + std::string::basic_string((void **)v347, Str); + WXML::DOMLib::Token::Token(v350, (int)&v345); + std::vector>::emplace_back>( + &v339, + v347); + std::pair::~pair((void **)v347); + WXML::DOMLib::Token::~Token((int)&v345); + std::string::_M_dispose((void **)v342); + continue; + } + } + else + { + WXML::DOMLib::WXMLDom::ToCamelStyle((int)&Str, (int)jj); + std::string::operator=((unsigned __int8 **)v342, (int)&Str); + std::string::_M_dispose((void **)&Str); + } + std::operator<<>(v305, v259); + v179 = std::operator<<>(v305, "'"); + v180 = std::operator<<(v179, v342); + std::operator<<>(v180, "',"); + if ( jj[11] ) + { + std::ostream::operator<<(jj[20] - (_DWORD)v274); + if ( !v274 ) + v274 = (std::ostream::sentry *)jj[20]; + } + else + { + std::operator<<>(v305, "-1"); + } + std::string::_M_dispose((void **)v342); + v259 = ","; + } + std::operator<<>(v305, (char *)off_553DC7); + v287 = 0; + v181 = (char *)&byte_5537CA; + while ( (unsigned int)v287 < -252645135 * ((v340 - v339) >> 3) ) + { + std::operator<<>(v305, v181); + v182 = std::operator<<>(v305, "'wx-"); + Str1d = (char *)(136 * (_DWORD)v287); + v183 = std::operator<<(v182, (int *)(v339 + 136 * (_DWORD)v287)); + std::operator<<>(v183, "',"); + if ( *(_DWORD *)(v339 + 136 * (_DWORD)v287 + 44) ) + { + std::ostream::operator<<(*(_DWORD *)&Str1d[v339 + 80] - (_DWORD)v274); + if ( !v274 ) + v274 = *(std::ostream::sentry **)&Str1d[v339 + 80]; + } + else + { + std::operator<<>(v305, "-1"); + } + v287 = (std::ostream::sentry *)((char *)v287 + 1); + v181 = ","; + } + v184 = std::operator<<>(v305, "],"); + v185 = std::operator<<(v184, a8); + v186 = std::operator<<>(v185, ","); + v187 = std::operator<<(v186, a9); + v188 = std::operator<<>(v187, ","); + v189 = std::operator<<(v188, a10); + v190 = std::operator<<>(v189, ")"); + std::operator<<>(v190, a12); + std::vector>::~vector((void ***)&v339); +LABEL_164: + if ( v328 ) + std::operator<<(v305, &v327); + WXML::DOMLib::WXMLDom::RenderChildren(a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); + if ( (a14 & 1) != 0 ) + WXML::DOMLib::WXMLDom::AddTestAttr((_DWORD *)this, a5, a6, 10); + std::string::_M_dispose((void **)&v327); + std::vector>::~vector((void ***)&v324); +LABEL_169: + if ( a13 && *(_DWORD *)(this + 28) ) + { + v222 = std::operator<<>((std::ostream::sentry *)(a6 + 8), "cs.pop()"); + std::operator<<>(v222, a12); + } + return 0; +} +// 4261A0: variable 'v243' is possibly undefined +// 426A09: variable 'v244' is possibly undefined +// 427CBE: using guessed type _DWORD __stdcall WXML::DOMLib::WXMLDom::RenderChildren(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, char, char, _DWORD, _DWORD); +// 429976: using guessed type _DWORD __stdcall WXML::DOMLib::WXMLDom::RenderMeAsFunction(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); +// 55B66C: using guessed type int *`typeinfo for'WXML::DOMLib::RenderException; +// 423D86: using guessed type _DWORD var_C0[47]; +// 423D86: using guessed type char var_D0[4]; +// 423D86: using guessed type char var_CC[12]; + +//----- (00427CBE) -------------------------------------------------------- +int __thiscall WXML::DOMLib::WXMLDom::RenderChildren( + _DWORD *this, + int *a2, + int *a3, + int a4, + int *a5, + int a6, + int *a7, + int *a8, + int *a9, + int *a10, + int *a11, + char a12, + unsigned __int8 a13, + int a14, + int a15) +{ + int v15; // edx + std::ostream::sentry *v16; // eax + std::ostream::sentry *v17; // eax + std::ostream::sentry *v18; // eax + std::ostream::sentry *v19; // eax + int StrID; // eax + std::ostream::sentry *v21; // eax + std::ostream::sentry *v22; // eax + std::ostream::sentry *v23; // eax + std::ostream::sentry *v24; // eax + std::ostream::sentry *v25; // eax + int v26; // eax + std::ostream::sentry *v27; // eax + int v28; // edx + char *v29; // eax + int v30; // ecx + int v31; // ecx + char *v32; // eax + std::ostream::sentry *v33; // eax + std::ostream::sentry *v34; // eax + std::ostream::sentry *v35; // eax + std::ostream::sentry *v36; // eax + std::ostream::sentry *v37; // eax + std::ostream::sentry *v38; // eax + std::ostream::sentry *v39; // eax + std::ostream::sentry *v40; // eax + char *v41; // eax + std::ostream::sentry *v42; // eax + std::ostream::sentry *v43; // eax + std::ostream::sentry *v44; // eax + std::ostream::sentry *v45; // eax + std::ostream::sentry *v46; // eax + std::ostream::sentry *v47; // eax + std::ostream::sentry *v48; // eax + std::ostream::sentry *v49; // eax + int v50; // eax + char *v51; // eax + std::ostream::sentry *v52; // eax + std::ostream::sentry *v53; // eax + std::ostream::sentry *v54; // eax + std::ostream::sentry *v55; // eax + std::ostream::sentry *v56; // eax + std::ostream::sentry *v57; // eax + std::ostream::sentry *v58; // eax + std::ostream::sentry *v59; // eax + std::ostream::sentry *v60; // eax + std::ostream::sentry *v61; // eax + std::ostream::sentry *v62; // eax + std::ostream::sentry *v63; // eax + std::ostream::sentry *v64; // eax + _DWORD *v65; // eax + int v66; // eax + int v67; // eax + std::ostream::sentry *v68; // eax + int v69; // eax + std::ostream::sentry *v70; // eax + std::ostream::sentry *v71; // eax + std::ostream::sentry *v72; // eax + std::ostream::sentry *v73; // eax + std::ostream::sentry *v74; // eax + std::ostream::sentry *v75; // eax + std::ostream::sentry *v76; // eax + std::ostream::sentry *v77; // eax + std::ostream::sentry *v78; // eax + std::ostream::sentry *v79; // eax + std::ostream::sentry *v80; // eax + std::ostream::sentry *v82; // eax + std::ostream::sentry *v83; // eax + std::ostream::sentry *v84; // eax + std::ostream::sentry *v85; // eax + std::ostream::sentry *v86; // eax + std::ostream::sentry *v87; // eax + std::ostream::sentry *v88; // eax + std::ostream::sentry *v89; // eax + std::ostream::sentry *v90; // eax + std::ostream::sentry *v91; // eax + std::ostream::sentry *v92; // eax + std::ostream::sentry *v93; // eax + int v95; // [esp+44h] [ebp-134h] + int v96; // [esp+48h] [ebp-130h] + _DWORD *v97; // [esp+48h] [ebp-130h] + char **v98; // [esp+4Ch] [ebp-12Ch] + char *v99; // [esp+4Ch] [ebp-12Ch] + _DWORD *v100; // [esp+4Ch] [ebp-12Ch] + _DWORD *v101; // [esp+50h] [ebp-128h] + char *v102; // [esp+50h] [ebp-128h] + char *v103; // [esp+50h] [ebp-128h] + char *v104; // [esp+50h] [ebp-128h] + void *v105; // [esp+54h] [ebp-124h] + void *v106; // [esp+58h] [ebp-120h] + void *v107; // [esp+5Ch] [ebp-11Ch] + void *v108; // [esp+60h] [ebp-118h] + struct _Unwind_Exception *v109; // [esp+64h] [ebp-114h] + struct _Unwind_Exception *v110; // [esp+68h] [ebp-110h] + char *Strc; // [esp+6Ch] [ebp-10Ch] + bool Str; // [esp+6Ch] [ebp-10Ch] + char *Strd; // [esp+6Ch] [ebp-10Ch] + int Stra; // [esp+6Ch] [ebp-10Ch] + char *Stre; // [esp+6Ch] [ebp-10Ch] + char *Strf; // [esp+6Ch] [ebp-10Ch] + char *Strg; // [esp+6Ch] [ebp-10Ch] + char *Strh; // [esp+6Ch] [ebp-10Ch] + char *Strb; // [esp+6Ch] [ebp-10Ch] + char *Stri; // [esp+6Ch] [ebp-10Ch] + char *Strj; // [esp+6Ch] [ebp-10Ch] + char *Strk; // [esp+6Ch] [ebp-10Ch] + char *Strl; // [esp+6Ch] [ebp-10Ch] + int v124; // [esp+70h] [ebp-108h] + _DWORD *v125; // [esp+70h] [ebp-108h] + _DWORD *v126; // [esp+70h] [ebp-108h] + unsigned int v127; // [esp+70h] [ebp-108h] + unsigned int j; // [esp+70h] [ebp-108h] + _DWORD *exception; // [esp+78h] [ebp-100h] + _DWORD *v130; // [esp+7Ch] [ebp-FCh] + int v131; // [esp+7Ch] [ebp-FCh] + _DWORD *v132; // [esp+7Ch] [ebp-FCh] + _DWORD *v133; // [esp+7Ch] [ebp-FCh] + int i; // [esp+7Ch] [ebp-FCh] + std::ostream::sentry *v135; // [esp+80h] [ebp-F8h] + int *v136; // [esp+80h] [ebp-F8h] + unsigned int v137; // [esp+84h] [ebp-F4h] + struct _Unwind_Exception *lpuexcpta; // [esp+88h] [ebp-F0h] + struct _Unwind_Exception *lpuexcptb; // [esp+88h] [ebp-F0h] + struct _Unwind_Exception *lpuexcptc; // [esp+88h] [ebp-F0h] + void **v142; // [esp+CCh] [ebp-ACh] BYREF + int v143; // [esp+D0h] [ebp-A8h] + int v144; // [esp+D4h] [ebp-A4h] + int v145[2]; // [esp+D8h] [ebp-A0h] BYREF + char v146; // [esp+E0h] [ebp-98h] BYREF + int v147[2]; // [esp+F0h] [ebp-88h] BYREF + char v148; // [esp+F8h] [ebp-80h] BYREF + void *v149[2]; // [esp+108h] [ebp-70h] BYREF + char v150; // [esp+110h] [ebp-68h] BYREF + int v151[2]; // [esp+120h] [ebp-58h] BYREF + char v152; // [esp+128h] [ebp-50h] BYREF + int v153[2]; // [esp+138h] [ebp-40h] BYREF + char v154; // [esp+140h] [ebp-38h] BYREF + __int64 v155; // [esp+150h] [ebp-28h] BYREF + char v156[16]; // [esp+158h] [ebp-20h] BYREF + int v157; // [esp+168h] [ebp-10h] + + v135 = (std::ostream::sentry *)(a6 + 8); + std::ostream::tellp(&v155, (std::ostream *)(a6 + 8)); + if ( v155 > 52428800 ) + { + exception = __cxa_allocate_exception(0x18u); + std::string::basic_string( + (void **)&v155, + "Interal error: generated code (>10M) will be too heavy to fly in a narrow wind."); + *exception = exception + 2; + exception[1] = 0; + *((_BYTE *)exception + 8) = 0; + std::string::_M_assign((int)exception, (int)&v155); + std::string::_M_dispose((void **)&v155); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + v148 = 0; + v145[0] = (int)&v146; + v147[0] = (int)&v148; + v145[1] = 0; + v146 = 0; + v147[1] = 0; + v137 = 0; + v109 = 0; + v110 = 0; + while ( 1 ) + { + v15 = this[18]; + if ( (this[19] - v15) >> 3 <= v137 ) + break; + if ( (std::operator==(*(_DWORD *)(v15 + 8 * v137), "import") + || std::operator==(*(_DWORD *)(this[18] + 8 * v137), "wx-import")) + && (v124 = *(_DWORD *)(this[18] + 8 * v137), + v101 = (_DWORD *)(v124 + 52), + std::string::basic_string((void **)&v155, (char *)off_5539C8), + v125 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)(v124 + 48), + (int)&v155), + std::string::_M_dispose((void **)&v155), + v101 != v125) ) + { + if ( !v110 ) + { + WXML::NameAllocator::GetNextName(a7, (int)v145); + v16 = std::operator<<>(v135, "var "); + v17 = std::operator<<(v16, v145); + v18 = std::operator<<>(v17, "="); + v19 = std::operator<<(v18, a3); + std::operator<<>(v19, (char *)off_553FDC); + v130 = (_DWORD *)this[62]; + std::string::basic_string((char *)&v155, (int)a2); + StrID = WXML::DOMLib::StrCache::GetStrID(v130, (int)&v155); + std::ostream::operator<<(StrID); + std::string::_M_dispose((void **)&v155); + v21 = std::operator<<>(v135, "]].i"); + std::operator<<>(v21, a12); + } + v110 = (struct _Unwind_Exception *)((char *)v110 + 1); + } + else if ( std::operator==(*(_DWORD *)(this[18] + 8 * v137), "include") ) + { + v131 = *(_DWORD *)(this[18] + 8 * v137); + v126 = (_DWORD *)(v131 + 52); + std::string::basic_string((void **)&v155, (char *)off_5539C8); + v132 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)(v131 + 48), + (int)&v155); + std::string::_M_dispose((void **)&v155); + if ( v132 != v126 ) + { + if ( !v109 ) + { + WXML::NameAllocator::GetNextName(a7, (int)v147); + v22 = std::operator<<>(v135, "var "); + v23 = std::operator<<(v22, v147); + v24 = std::operator<<>(v23, "="); + v25 = std::operator<<(v24, a3); + std::operator<<>(v25, (char *)off_553FDC); + v133 = (_DWORD *)this[62]; + std::string::basic_string((char *)&v155, (int)a2); + v26 = WXML::DOMLib::StrCache::GetStrID(v133, (int)&v155); + std::ostream::operator<<(v26); + std::string::_M_dispose((void **)&v155); + v27 = std::operator<<>(v135, "]].j"); + std::operator<<>(v27, a12); + } + v109 = (struct _Unwind_Exception *)((char *)v109 + 1); + } + } + ++v137; + } + v150 = 0; + v149[0] = &v150; + v149[1] = 0; + v127 = 0; + for ( i = 0; ; i = Stra ) + { + v28 = this[18]; + if ( (this[19] - v28) >> 3 <= v127 ) + break; + Strc = *(char **)(v28 + 8 * v127); + v102 = Strc + 52; + std::string::basic_string((void **)v153, "wx-if"); + v29 = (char *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)Strc + 12, + (int)v153); + Str = 1; + if ( v102 == v29 ) + { + Strd = *(char **)(this[18] + 8 * v127); + std::string::basic_string((void **)&v155, "wx:if"); + Str = Strd + 52 != (char *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)Strd + 12, + (int)&v155); + std::string::_M_dispose((void **)&v155); + } + std::string::_M_dispose((void **)v153); + if ( Str ) + { + WXML::NameAllocator::GetNextName(a7, (int)v149); + std::string::_M_assign(*(_DWORD *)(this[18] + 8 * v127) + 220, (int)v149); + Stra = 2; + *(_DWORD *)(*(_DWORD *)(this[18] + 8 * v127) + 244) = 1; + } + else + { + Stre = *(char **)(this[18] + 8 * v127); + v103 = Stre + 52; + std::string::basic_string((void **)v151, "wx:elif"); + Strf = (char *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)Stre + 12, + (int)v151); + std::string::_M_dispose((void **)v151); + if ( v103 == Strf ) + { + Strg = *(char **)(this[18] + 8 * v127); + v104 = Strg + 52; + std::string::basic_string((void **)v153, "wx:else"); + Strh = (char *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)Strg + 12, + (int)v153); + std::string::_M_dispose((void **)v153); + if ( Strh != v104 ) + { + if ( !i ) + { + v106 = __cxa_allocate_exception(0x18u); + std::string::basic_string((void **)&v155, "`wx:if not found, then something must be wrong`"); + std::string::basic_string((void **)v153, "wx:else"); + WXML::DOMLib::WXMLDom::Error((int)v106, a2, *(_DWORD *)(this[18] + 8 * v127) + 84, v153, (int *)&v155); + std::string::_M_dispose((void **)v153); + std::string::_M_dispose((void **)&v155); + __cxa_throw( + v106, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + v31 = *(_DWORD *)(this[18] + 8 * v127); + *(_DWORD *)(v31 + 244) = i; + std::string::_M_assign(v31 + 220, (int)v149); + } + Stra = 0; + } + else + { + if ( !i ) + { + v105 = __cxa_allocate_exception(0x18u); + std::string::basic_string((void **)&v155, "`wx:if not found, then something must be wrong`"); + std::string::basic_string((void **)v153, "wx:elif"); + WXML::DOMLib::WXMLDom::Error((int)v105, a2, *(_DWORD *)(this[18] + 8 * v127) + 84, v153, (int *)&v155); + std::string::_M_dispose((void **)v153); + std::string::_M_dispose((void **)&v155); + __cxa_throw( + v105, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + Stra = i + 1; + v30 = *(_DWORD *)(this[18] + 8 * v127); + *(_DWORD *)(v30 + 244) = i; + std::string::_M_assign(v30 + 220, (int)v149); + } + } + ++v127; + } + v152 = 0; + v151[0] = (int)&v152; + v151[1] = 0; + v142 = 0; + v143 = 0; + v144 = 0; + for ( j = 0; (this[19] - this[18]) >> 3 > j; ++j ) + { + std::string::_M_assign((int)v151, (int)a5); + if ( *(int *)(*(_DWORD *)(this[18] + 8 * j) + 244) <= 0 ) + goto LABEL_56; + v154 = 0; + v153[0] = (int)&v154; + v153[1] = 0; + v98 = WXML::DOMLib::szWXIFControlAttrs; + while ( 1 ) + { + Strb = *v98; + v96 = *(_DWORD *)(this[18] + 8 * j); + if ( !*v98 ) + break; + v95 = *(_DWORD *)(this[18] + 8 * j) + 52; + std::string::basic_string((void **)&v155, Strb); + v97 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)(v96 + 48), + (int)&v155); + std::string::_M_dispose((void **)&v155); + ++v98; + if ( v97 != (_DWORD *)v95 ) + { + std::string::operator=((unsigned int *)v153, Strb); + break; + } + } + if ( *((_DWORD *)std::map::operator[]( + (_DWORD *)(*(_DWORD *)(this[18] + 8 * j) + 48), + (int)v153) + + 14) == -3 ) + { + v107 = __cxa_allocate_exception(0x18u); + v136 = (int *)(std::map::operator[]( + (_DWORD *)(*(_DWORD *)(this[18] + 8 * j) + 48), + (int)v153) + + 60); + v32 = std::map::operator[]( + (_DWORD *)(*(_DWORD *)(this[18] + 8 * j) + 48), + (int)v153); + WXML::DOMLib::WXMLDom::Error((int)v107, a2, (int)v32, v153, v136); + __cxa_throw( + v107, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + if ( *((_DWORD *)std::map::operator[]( + (_DWORD *)(*(_DWORD *)(this[18] + 8 * j) + 48), + (int)v153) + + 14) == -1 + && (unsigned __int8)std::operator!=((int)v153, "wx:else") ) + { + v108 = __cxa_allocate_exception(0x18u); + std::string::basic_string((void **)&v155, "value not set"); + WXML::DOMLib::WXMLDom::Error((int)v108, a2, *(_DWORD *)(this[18] + 8 * j) + 84, v153, (int *)&v155); + std::string::_M_dispose((void **)&v155); + __cxa_throw( + v108, + (struct type_info *)&`typeinfo for'WXML::DOMLib::RenderException, + WXML::DOMLib::RenderException::~RenderException); + } + if ( std::operator==((int)v153, "wx-if") || std::operator==((int)v153, "wx:if") ) + { + v33 = std::operator<<>(v135, "var "); + v34 = std::operator<<(v33, (int *)(*(_DWORD *)(this[18] + 8 * j) + 220)); + v35 = std::operator<<>(v34, "=_v()"); + std::operator<<>(v35, a12); + v36 = std::operator<<>(v135, "_("); + v37 = std::operator<<(v36, a5); + v38 = std::operator<<>(v37, ","); + v39 = std::operator<<(v38, (int *)(*(_DWORD *)(this[18] + 8 * j) + 220)); + v40 = std::operator<<>(v39, ")"); + std::operator<<>(v40, a12); + std::operator<<>(v135, "if(_oz(z,"); + v41 = std::map::operator[]( + (_DWORD *)(*(_DWORD *)(this[18] + 8 * j) + 48), + (int)v153); + std::ostream::operator<<(*((_DWORD *)v41 + 14)); + v42 = std::operator<<>(v135, ","); + v43 = std::operator<<(v42, a8); + v44 = std::operator<<>(v43, ","); + v45 = std::operator<<(v44, a9); + v46 = std::operator<<>(v45, ","); + v47 = std::operator<<(v46, a10); + std::operator<<>(v47, ")){"); + v48 = std::operator<<(v135, (int *)(*(_DWORD *)(this[18] + 8 * j) + 220)); + std::operator<<>(v48, ".wxVkey="); + v49 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(*(_DWORD *)(this[18] + 8 * j) + 244)); + std::operator<<>(v49, a12); + std::string::basic_string((char *)&v155, *(_DWORD *)(this[18] + 8 * j) + 220); + v157 = 1; + std::vector>::emplace_back>((int)&v142, &v155); + std::string::_M_dispose((void **)&v155); + v50 = *(_DWORD *)(this[18] + 8 * j); + if ( *(_BYTE *)(v50 + 256) ) + goto LABEL_54; + } + else + { + if ( !std::operator==((int)v153, "wx:elif") ) + { + v60 = std::operator<<>(v135, "else{"); + v61 = std::operator<<(v60, (int *)(*(_DWORD *)(this[18] + 8 * j) + 220)); + std::operator<<>(v61, ".wxVkey="); + v62 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(*(_DWORD *)(this[18] + 8 * j) + 244)); + std::operator<<>(v62, a12); + v50 = *(_DWORD *)(this[18] + 8 * j); + if ( !*(_BYTE *)(v50 + 256) ) + goto LABEL_55; +LABEL_54: + std::string::basic_string((char *)&v155, v50 + 220); + v157 = 3; + std::vector>::emplace_back>((int)&v142, &v155); + std::string::_M_dispose((void **)&v155); + goto LABEL_55; + } + std::operator<<>(v135, "else if(_oz(z,"); + v51 = std::map::operator[]( + (_DWORD *)(*(_DWORD *)(this[18] + 8 * j) + 48), + (int)v153); + std::ostream::operator<<(*((_DWORD *)v51 + 14)); + v52 = std::operator<<>(v135, ","); + v53 = std::operator<<(v52, a8); + v54 = std::operator<<>(v53, ","); + v55 = std::operator<<(v54, a9); + v56 = std::operator<<>(v55, ","); + v57 = std::operator<<(v56, a10); + std::operator<<>(v57, ")){"); + v58 = std::operator<<(v135, (int *)(*(_DWORD *)(this[18] + 8 * j) + 220)); + std::operator<<>(v58, ".wxVkey="); + v59 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(*(_DWORD *)(this[18] + 8 * j) + 244)); + std::operator<<>(v59, a12); + v50 = *(_DWORD *)(this[18] + 8 * j); + if ( *(_BYTE *)(v50 + 256) ) + goto LABEL_54; + } +LABEL_55: + std::string::_M_assign((int)v151, *(_DWORD *)(this[18] + 8 * j) + 220); + std::string::_M_dispose((void **)v153); +LABEL_56: + if ( std::operator==(*(_DWORD *)(this[18] + 8 * j), "import") + || std::operator==(*(_DWORD *)(this[18] + 8 * j), "wx-import") ) + { + Stri = *(char **)(this[18] + 8 * j); + v99 = Stri + 52; + std::string::basic_string((void **)&v155, (char *)off_5539C8); + Strj = (char *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)Stri + 12, + (int)&v155); + std::string::_M_dispose((void **)&v155); + if ( v99 != Strj ) + { + v63 = std::operator<<>(v135, "_ai("); + v64 = std::operator<<(v63, v145); + std::operator<<>(v64, (char *)off_553CC8); + v100 = (_DWORD *)this[62]; + Strk = *(char **)(this[18] + 8 * j); + std::string::basic_string((void **)v153, (char *)off_5539C8); + v65 = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + (_DWORD *)Strk + 12, + (int)v153); + v66 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)(v65 + 10)); + std::string::basic_string((char *)&v155, v66); + v67 = WXML::DOMLib::StrCache::GetStrID(v100, (int)&v155); + std::ostream::operator<<(v67); + std::string::_M_dispose((void **)&v155); + std::string::_M_dispose((void **)v153); + std::operator<<>(v135, "],"); + v68 = std::operator<<(v135, a3); + std::operator<<>(v68, (char *)off_553CC8); + Strl = (char *)this[62]; + std::string::basic_string((char *)&v155, (int)a2); + v69 = WXML::DOMLib::StrCache::GetStrID(Strl, (int)&v155); + std::ostream::operator<<(v69); + std::string::_M_dispose((void **)&v155); + std::operator<<>(v135, "],"); + v70 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(*(_DWORD *)(this[18] + 8 * j) + 92)); + std::operator<<>(v70, ","); + v71 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(*(_DWORD *)(this[18] + 8 * j) + 96)); + v72 = std::operator<<>(v71, ")"); + std::operator<<>(v72, a12); + goto LABEL_74; + } + } + if ( !std::operator==(*(_DWORD *)(this[18] + 8 * j), "import") + && !std::operator==(*(_DWORD *)(this[18] + 8 * j), "wx-import") ) + { + if ( std::operator==(*(_DWORD *)(this[18] + 8 * j), "wx-repeat") + || std::operator==(*(_DWORD *)(this[18] + 8 * j), "wx-template") ) + { + v155 = (unsigned int)v156; + v156[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v155); + v73 = std::operator<<>(v135, "var "); + v74 = std::operator<<(v73, (int *)&v155); + v75 = std::operator<<>(v74, "=_v()"); + std::operator<<>(v75, a12); + v76 = std::operator<<>(v135, "_("); + v77 = std::operator<<(v76, v151); + v78 = std::operator<<>(v77, ","); + v79 = std::operator<<(v78, (int *)&v155); + v80 = std::operator<<>(v79, ")"); + std::operator<<>(v80, a12); + WXML::DOMLib::WXMLDom::RenderNonDefine( + *(_DWORD *)(this[18] + 8 * j), + a2, + a3, + a4, + (int *)&v155, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15); +LABEL_73: + std::string::_M_dispose((void **)&v155); + goto LABEL_74; + } + if ( std::operator==(*(_DWORD *)(this[18] + 8 * j), "block") + || std::operator==(*(_DWORD *)(this[18] + 8 * j), "include") ) + { + WXML::DOMLib::WXMLDom::RenderNonDefine( + *(_DWORD *)(this[18] + 8 * j), + a2, + a3, + a4, + v151, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15); + goto LABEL_74; + } + if ( (unsigned __int8)std::operator!=(*(_DWORD *)(this[18] + 8 * j), "wx-import") ) + { + if ( (unsigned __int8)std::operator!=(*(_DWORD *)(this[18] + 8 * j), "wx-define") ) + { + v155 = (unsigned int)v156; + v156[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v155); + WXML::DOMLib::WXMLDom::RenderNonDefine( + *(_DWORD *)(this[18] + 8 * j), + a2, + a3, + a4, + (int *)&v155, + a6, + a7, + a8, + a9, + a10, + a11, + a12, + a13, + a14, + a15); + v82 = std::operator<<>(v135, "_("); + v83 = std::operator<<(v82, v151); + v84 = std::operator<<>(v83, ","); + v85 = std::operator<<(v84, (int *)&v155); + v86 = std::operator<<>(v85, ")"); + std::operator<<>(v86, a12); + goto LABEL_73; + } + } + } +LABEL_74: + if ( *(int *)(*(_DWORD *)(this[18] + 8 * j) + 244) > 0 ) + { + v87 = std::operator<<>(v135, "}"); + std::operator<<>(v87, a12); + } + } + for ( lpuexcpta = 0; + (unsigned int)lpuexcpta < -1227133513 * ((v143 - (int)v142) >> 2); + lpuexcpta = (struct _Unwind_Exception *)((char *)lpuexcpta + 1) ) + { + v88 = std::operator<<(v135, (int *)&v142[7 * (_DWORD)lpuexcpta]); + std::operator<<>(v88, ".wxXCkey="); + v89 = (std::ostream::sentry *)std::ostream::operator<<(v142[7 * (_DWORD)lpuexcpta + 6]); + std::operator<<>(v89, a12); + } + for ( lpuexcptb = 0; v110 != lpuexcptb; lpuexcptb = (struct _Unwind_Exception *)((char *)lpuexcptb + 1) ) + { + v90 = std::operator<<(v135, v145); + v91 = std::operator<<>(v90, ".pop()"); + std::operator<<>(v91, a12); + } + for ( lpuexcptc = 0; v109 != lpuexcptc; lpuexcptc = (struct _Unwind_Exception *)((char *)lpuexcptc + 1) ) + { + v92 = std::operator<<(v135, v147); + v93 = std::operator<<>(v92, ".pop()"); + std::operator<<>(v93, a12); + } + std::vector>::~vector(&v142); + std::string::_M_dispose((void **)v151); + std::string::_M_dispose(v149); + std::string::_M_dispose((void **)v147); + std::string::_M_dispose((void **)v145); + return 0; +} +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); +// 554190: using guessed type char *WXML::DOMLib::szWXIFControlAttrs[4]; +// 55B66C: using guessed type int *`typeinfo for'WXML::DOMLib::RenderException; + +//----- (00429976) -------------------------------------------------------- +int __thiscall WXML::DOMLib::WXMLDom::RenderMeAsFunction( + _DWORD *this, + int *a2, + int *a3, + int a4, + int *a5, + int a6, + int *a7, + int *a8, + int *a9, + int *a10, + int *a11, + int *a12, + char a13, + int *a14, + char a15, + unsigned __int8 a16, + int a17, + int *a18) +{ + std::ostream::sentry *v18; // eax + int StrID; // eax + std::ostream::sentry *v20; // eax + std::ostream::sentry *v21; // eax + std::ostream::sentry *v22; // eax + std::ostream::sentry *v23; // eax + std::ostream::sentry *v24; // eax + std::ostream::sentry *v25; // eax + std::ostream::sentry *v26; // eax + std::ostream::sentry *v27; // eax + std::ostream::sentry *v28; // eax + std::ostream::sentry *v29; // eax + std::ostream::sentry *v30; // eax + std::ostream::sentry *v31; // eax + std::ostream::sentry *v32; // eax + std::ostream::sentry *v33; // eax + std::ostream::sentry *v34; // eax + int v35; // eax + std::ostream::sentry *v36; // eax + std::ostream::sentry *v37; // eax + std::ostream::sentry *v38; // eax + std::ostream::sentry *v39; // eax + std::ostream::sentry *v40; // eax + std::ostream::sentry *v41; // eax + std::ostream::sentry *v42; // eax + std::ostream::sentry *v43; // eax + std::ostream::sentry *v44; // eax + std::ostream::sentry *v45; // eax + std::ostream::sentry *v46; // eax + std::ostream::sentry *v47; // eax + int v48; // eax + std::ostream::sentry *v49; // eax + std::ostream::sentry *v50; // eax + std::ostream::sentry *v51; // eax + std::ostream::sentry *v52; // eax + std::ostream::sentry *v53; // eax + std::ostream::sentry *v54; // eax + std::ostream::sentry *v55; // eax + std::ostream::sentry *v56; // eax + std::ostream::sentry *v57; // eax + std::ostream::sentry *v58; // eax + std::ostream::sentry *v59; // eax + std::ostream::sentry *v60; // eax + std::ostream::sentry *v61; // eax + std::ostream::sentry *v62; // eax + std::ostream::sentry *v63; // eax + std::ostream::sentry *v64; // eax + std::ostream::sentry *v65; // eax + std::ostream::sentry *v66; // eax + std::ostream::sentry *v67; // eax + std::ostream::sentry *v68; // eax + std::ostream::sentry *v69; // eax + _DWORD *v71; // [esp+44h] [ebp-84h] + std::ostream::sentry *v72; // [esp+48h] [ebp-80h] + std::ostream::sentry *v73; // [esp+48h] [ebp-80h] + _DWORD *v75; // [esp+54h] [ebp-74h] + struct _Unwind_Exception *lpuexcpt; // [esp+58h] [ebp-70h] + int v77[2]; // [esp+90h] [ebp-38h] BYREF + char v78; // [esp+98h] [ebp-30h] BYREF + int v79; // [esp+A8h] [ebp-20h] BYREF + int v80; // [esp+ACh] [ebp-1Ch] BYREF + int v81; // [esp+B0h] [ebp-18h] + int *v82; // [esp+B4h] [ebp-14h] + int *v83; // [esp+B8h] [ebp-10h] + int v84; // [esp+BCh] [ebp-Ch] + + v77[0] = (int)&v78; + v77[1] = 0; + v78 = 0; + WXML::NameAllocator::GetNextName(a7, (int)v77); + lpuexcpt = (struct _Unwind_Exception *)(a6 + 8); + if ( a15 ) + { + v18 = std::operator<<(lpuexcpt, a12); + std::operator<<>(v18, (char *)off_553FDC); + v75 = (_DWORD *)this[62]; + std::string::basic_string((char *)&v79, (int)a2); + StrID = WXML::DOMLib::StrCache::GetStrID(v75, (int)&v79); + std::ostream::operator<<(StrID); + std::string::_M_dispose((void **)&v79); + std::operator<<>(lpuexcpt, "]][\""); + WXML::Rewrite::ToStringCode(a5, a6); + std::operator<<>(lpuexcpt, "\"]"); + } + else + { + v20 = std::operator<<>(lpuexcpt, "var "); + std::operator<<(v20, a5); + } + v21 = std::operator<<>(lpuexcpt, "=function("); + v22 = std::operator<<(v21, a8); + v23 = std::operator<<>(v22, ","); + v24 = std::operator<<(v23, a9); + v25 = std::operator<<>(v24, ","); + v26 = std::operator<<(v25, a11); + v27 = std::operator<<>(v26, ","); + v28 = std::operator<<(v27, a10); + v29 = std::operator<<>(v28, "){"); + std::operator<<>(v29, a13); + if ( a18[1] ) + { + v30 = std::operator<<>(lpuexcpt, "var z="); + v31 = std::operator<<(v30, a18); + v32 = std::operator<<>(v31, "()"); + std::operator<<>(v32, a13); + } + if ( a15 ) + { + v33 = std::operator<<>(lpuexcpt, "var "); + v34 = std::operator<<(v33, v77); + std::operator<<>(v34, (char *)off_554111); + v72 = (std::ostream::sentry *)this[62]; + std::string::basic_string((char *)&v79, (int)a2); + v35 = WXML::DOMLib::StrCache::GetStrID(v72, (int)&v79); + std::ostream::operator<<(v35); + std::string::_M_dispose((void **)&v79); + std::operator<<>(lpuexcpt, "]"); + std::operator<<>(lpuexcpt, "+':"); + WXML::Rewrite::ToStringCode(a5, a6); + std::operator<<>(lpuexcpt, "'"); + std::operator<<>(lpuexcpt, a13); + v36 = std::operator<<(lpuexcpt, a11); + v37 = std::operator<<>(v36, ".wxVkey="); + v38 = std::operator<<(v37, v77); + std::operator<<>(v38, a13); + v39 = std::operator<<(lpuexcpt, a10); + v73 = std::operator<<>(v39, ".f=$gdc(f_[\""); + WXML::Rewrite::ToStringCode((int)&v79, a2); + v40 = std::operator<<(v73, &v79); + v41 = std::operator<<>(v40, "\"],\"\",1)"); + std::operator<<>(v41, a13); + std::string::_M_dispose((void **)&v79); + v42 = std::operator<<>(lpuexcpt, "if("); + v43 = std::operator<<(v42, a14); + v44 = std::operator<<>(v43, "["); + v45 = std::operator<<(v44, v77); + v46 = std::operator<<>(v45, "]){_wl("); + v47 = std::operator<<(v46, v77); + std::operator<<>(v47, (char *)off_553CC8); + v71 = (_DWORD *)this[62]; + std::string::basic_string((char *)&v79, (int)a2); + v48 = WXML::DOMLib::StrCache::GetStrID(v71, (int)&v79); + v49 = (std::ostream::sentry *)std::ostream::operator<<(v48); + v50 = std::operator<<>(v49, "]);return}"); + std::operator<<>(v50, a13); + std::string::_M_dispose((void **)&v79); + v51 = std::operator<<(lpuexcpt, a14); + v52 = std::operator<<>(v51, "["); + v53 = std::operator<<(v52, v77); + v54 = std::operator<<>(v53, "]=true"); + std::operator<<>(v54, a13); + v55 = std::operator<<>(lpuexcpt, "try{"); + std::operator<<>(v55, a13); + } + v80 = 0; + v82 = &v80; + v83 = &v80; + v81 = 0; + v84 = 0; + WXML::DOMLib::WXMLDom::RenderChildren(this, a2, a3, a4, a11, a6, a7, a8, a9, a10, a12, a13, a16, a17, (int)&v79); + if ( a15 ) + { + v56 = std::operator<<>(lpuexcpt, "}catch(err){"); + std::operator<<>(v56, a13); + v57 = std::operator<<(lpuexcpt, a14); + v58 = std::operator<<>(v57, "["); + v59 = std::operator<<(v58, v77); + v60 = std::operator<<>(v59, "]=false"); + std::operator<<>(v60, a13); + v61 = std::operator<<>(lpuexcpt, "throw err"); + std::operator<<>(v61, a13); + v62 = std::operator<<>(lpuexcpt, "}"); + std::operator<<>(v62, a13); + v63 = std::operator<<(lpuexcpt, a14); + v64 = std::operator<<>(v63, "["); + v65 = std::operator<<(v64, v77); + v66 = std::operator<<>(v65, "]=false"); + std::operator<<>(v66, a13); + } + v67 = std::operator<<>(lpuexcpt, "return "); + v68 = std::operator<<(v67, a11); + std::operator<<>(v68, a13); + v69 = std::operator<<>(lpuexcpt, "}"); + std::operator<<>(v69, a13); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(v81); + std::string::_M_dispose((void **)v77); + return 0; +} +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); + +//----- (0042A0BC) -------------------------------------------------------- +void __tcf_0_0(void) +{ + std::ios_base::Init::~Init(); +} + +//----- (0042A0C6) -------------------------------------------------------- +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2) +{ + unsigned __int8 *v3; // eax + unsigned __int8 *v4; // ecx + unsigned __int8 *v5; // edx + unsigned __int8 *v6; // eax + unsigned __int8 *v7; // edx + unsigned __int8 *result; // eax + unsigned __int8 *v9; // [esp+18h] [ebp-20h] + + v3 = *this; + v4 = *(unsigned __int8 **)a2; + v5 = *(unsigned __int8 **)(a2 + 4); + if ( *(_DWORD *)a2 == a2 + 8 ) + { + if ( v5 ) + std::string::_S_copy(v3, v4, *(_DWORD *)(a2 + 4)); + v6 = *(unsigned __int8 **)(a2 + 4); + v7 = *this; + this[1] = v6; + v6[(_DWORD)v7] = 0; + } + else + { + if ( v3 == (unsigned __int8 *)(this + 2) ) + v3 = 0; + else + v9 = this[2]; + *this = v4; + this[1] = v5; + this[2] = *(unsigned __int8 **)(a2 + 8); + if ( v3 ) + { + *(_DWORD *)a2 = v3; + *(_DWORD *)(a2 + 8) = v9; + } + else + { + *(_DWORD *)a2 = a2 + 8; + } + } + result = *(unsigned __int8 **)a2; + *(_DWORD *)(a2 + 4) = 0; + *result = 0; + return result; +} +// 42A12D: variable 'v9' is possibly undefined + +//----- (0042A14E) -------------------------------------------------------- +int __fastcall WXML::DOMLib::Machine::Reset(_DWORD *a1) +{ + int result; // eax + + a1[1] = 0; + result = 0; + *a1 = 0; + a1[2] = 1; + a1[3] = 0; + a1[4] = 1; + a1[5] = 1; + a1[6] = 1; + return result; +} + +//----- (0042A182) -------------------------------------------------------- +void WXML::DOMLib::Machine::InitTransitTable() +{ + const char *v0; // edx + int v1; // eax + const char *i; // edx + int v3; // eax + const char *v4; // edx + int v5; // eax + const char *j; // edx + int v7; // eax + const char *k; // edx + int v9; // eax + const char *v10; // edx + int v11; // eax + const char *m; // edx + int v13; // eax + const char *v14; // edx + int v15; // eax + const char *n; // edx + int v17; // eax + const char *ii; // edx + int v19; // eax + const char *v20; // edx + int v21; // eax + const char *v22; // edx + int v23; // eax + const char *v24; // edx + int v25; // eax + + if ( !WXML::DOMLib::Machine::InitTransitTable(void)::bInited ) + { + WXML::DOMLib::Machine::InitTransitTable(void)::bInited = 1; + v0 = " \n\t\r"; + memset(&WXML::DOMLib::Machine::TT, 0, 0x101000u); + dword_5806EC = 99; + dword_567A54 = 131074; + dword_567B50 = 15; + dword_567D64 = 1; + dword_567964 = 131171; + dword_56B388 = 16; + dword_56B59C = 1; + dword_56B794 = 17; + dword_56B5A0 = -1; + dword_56B9A0 = 16; + dword_56BB98 = 1; + dword_56BDA4 = 1048592; + dword_56B628 = 11; + dword_56B63C = 13; + dword_56A2FC = 12; + dword_56A990 = 11; + dword_56A214 = 16; + dword_56A18C = -1; + dword_56A58C = 11; + dword_56AB04 = 14; + dword_56B198 = 13; + dword_56AA30 = 16; + dword_56A994 = -1; + dword_56AD94 = 13; + while ( 1 ) + { + v1 = *v0; + if ( !(_BYTE)v1 ) + break; + dword_567D68[v1] = 655363; + ++v0; + } + for ( i = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-:"; ; ++i ) + { + v3 = *i; + if ( !(_BYTE)v3 ) + break; + dword_567D68[v3] = 131076; + } + dword_567E24 = 262147; + v4 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-:"; + dword_567DEC = 33; + dword_567F44 = 22; + dword_568168 = -1; + dword_56FA98 = 34; + dword_56FDE4 = -1; + dword_56FE9C = 19; + dword_5701E8 = -1; + dword_56C260 = 20; + dword_56C5AC = 19; + dword_56C664 = 21; + dword_56C9B0 = 19; + dword_56CAAC = 524289; + dword_56CA68 = 21; + dword_56CDB4 = 19; + while ( 1 ) + { + v5 = *v4; + if ( !(_BYTE)v5 ) + break; + dword_568570[v5] = 4; + ++v4; + } + for ( j = "0123456789"; ; ++j ) + { + v7 = *j; + if ( !(_BYTE)v7 ) + break; + dword_568570[v7] = 4; + } + for ( k = " \n\t\r"; ; ++k ) + { + v9 = *k; + if ( !(_BYTE)v9 ) + break; + dword_568570[v9] = 655363; + } + dword_568664 = 131078; + v10 = " \n\t\r"; + dword_5685F8 = -1; + dword_568668 = 393217; + dword_56862C = 131090; + dword_568970 = 131075; + dword_568570[0] = -1; + while ( 1 ) + { + v11 = *v10; + if ( !(_BYTE)v11 ) + break; + dword_568D78[v11] = 655363; + ++v10; + } + for ( m = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-:"; ; ++m ) + { + v13 = *m; + if ( !(_BYTE)v13 ) + break; + dword_568D78[v13] = 131077; + } + dword_568E00 = 131077; + v14 = " \n\t\r"; + dword_568E14 = 131081; + dword_568D78[0] = -1; + dword_569178 = -1; + while ( 1 ) + { + v15 = *v14; + if ( !(_BYTE)v15 ) + break; + dword_56816C[v15] = 524291; + ++v14; + } + for ( n = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-:"; ; ++n ) + { + v17 = *n; + if ( !(_BYTE)v17 ) + break; + dword_56816C[v17] = 4; + } + for ( ii = "0123456789"; ; ++ii ) + { + v19 = *ii; + if ( !(_BYTE)v19 ) + break; + dword_56816C[v19] = -1; + } + dword_56825C = -1; + v20 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-:"; + dword_5681F4 = 5; + dword_568208 = 9; + dword_568228 = 18; + dword_568264 = 262145; + dword_568260 = 6; + dword_56816C[0] = -1; + dword_56856C = -1; + while ( 1 ) + { + v21 = *v20; + if ( !(_BYTE)v21 ) + break; + dword_56BDA8[v21] = 131076; + ++v20; + } + dword_56BEA0 = 262145; + v22 = " \n\t\r"; + dword_56C1A8 = -1; + dword_568AE4 = 7; + dword_56899C = -1; + dword_56957C = 5; + dword_5691A4 = 655363; + dword_5689FC = 262147; + dword_568974 = -1; + dword_568D74 = 5; + dword_569AF4 = 10; + dword_5699AC = -1; + dword_56A188 = 9; + dword_569DB0 = 655363; + dword_569A20 = 262147; + dword_569984 = -1; + dword_569D84 = 9; + dword_56CF98 = 23; + dword_56D1B8 = 3145732; + dword_56D388 = 24; + dword_56D5BC = 3145732; + while ( 1 ) + { + v23 = *v22; + if ( !(_BYTE)v23 ) + break; + dword_56D5C0[v23] = 25; + ++v22; + } + dword_56D6B8 = 31; + v24 = " \n\t\r"; + dword_56D9C0 = 3145732; + dword_56DABC = 31; + dword_56DA80 = 32; + dword_56DDC4 = 25; + dword_56F6D8 = 262145; + dword_56F9E0 = 1048601; + dword_56F2CC = 131098; + dword_56F5DC = 31; + dword_56DE84 = 27; + dword_56E1C8 = (int)&loc_50001E + 1; + dword_56E3A8 = 28; + dword_56E5CC = (int)&loc_50001E + 1; + dword_56E7B0 = 29; + dword_56E9D0 = (int)&loc_50001E + 1; + dword_56EBA0 = 30; + dword_56EDD4 = (int)&loc_50001E + 1; + while ( 1 ) + { + v25 = *v24; + if ( !(_BYTE)v25 ) + break; + dword_56EDD8[v25] = 30; + ++v24; + } + dword_56EED0 = 524289; + dword_56F1D8 = -1; + dword_566564 = 1; + dword_566574 = 2; + dword_566584 = 2; + dword_5665DC = 3; + dword_5665E0 = 3; + } +} +// 566564: using guessed type int dword_566564; +// 566574: using guessed type int dword_566574; +// 566584: using guessed type int dword_566584; +// 5665DC: using guessed type int dword_5665DC; +// 5665E0: using guessed type int dword_5665E0; +// 567560: using guessed type int WXML::DOMLib::Machine::TT; +// 567964: using guessed type int dword_567964; +// 567A54: using guessed type int dword_567A54; +// 567B50: using guessed type int dword_567B50; +// 567D64: using guessed type int dword_567D64; +// 567D68: using guessed type int dword_567D68[33]; +// 567DEC: using guessed type int dword_567DEC; +// 567E24: using guessed type int dword_567E24; +// 567F44: using guessed type int dword_567F44; +// 568168: using guessed type int dword_568168; +// 56816C: using guessed type int dword_56816C[34]; +// 5681F4: using guessed type int dword_5681F4; +// 568208: using guessed type int dword_568208; +// 568228: using guessed type int dword_568228; +// 56825C: using guessed type int dword_56825C; +// 568260: using guessed type int dword_568260; +// 568264: using guessed type int dword_568264; +// 56856C: using guessed type int dword_56856C; +// 568570: using guessed type int dword_568570[34]; +// 5685F8: using guessed type int dword_5685F8; +// 56862C: using guessed type int dword_56862C; +// 568664: using guessed type int dword_568664; +// 568668: using guessed type int dword_568668; +// 568970: using guessed type int dword_568970; +// 568974: using guessed type int dword_568974; +// 56899C: using guessed type int dword_56899C; +// 5689FC: using guessed type int dword_5689FC; +// 568AE4: using guessed type int dword_568AE4; +// 568D74: using guessed type int dword_568D74; +// 568D78: using guessed type int dword_568D78[]; +// 568E00: using guessed type int dword_568E00; +// 568E14: using guessed type int dword_568E14; +// 569178: using guessed type int dword_569178; +// 5691A4: using guessed type int dword_5691A4; +// 56957C: using guessed type int dword_56957C; +// 569984: using guessed type int dword_569984; +// 5699AC: using guessed type int dword_5699AC; +// 569A20: using guessed type int dword_569A20; +// 569AF4: using guessed type int dword_569AF4; +// 569D84: using guessed type int dword_569D84; +// 569DB0: using guessed type int dword_569DB0; +// 56A188: using guessed type int dword_56A188; +// 56A18C: using guessed type int dword_56A18C; +// 56A214: using guessed type int dword_56A214; +// 56A2FC: using guessed type int dword_56A2FC; +// 56A58C: using guessed type int dword_56A58C; +// 56A990: using guessed type int dword_56A990; +// 56A994: using guessed type int dword_56A994; +// 56AA30: using guessed type int dword_56AA30; +// 56AB04: using guessed type int dword_56AB04; +// 56AD94: using guessed type int dword_56AD94; +// 56B198: using guessed type int dword_56B198; +// 56B388: using guessed type int dword_56B388; +// 56B59C: using guessed type int dword_56B59C; +// 56B5A0: using guessed type int dword_56B5A0; +// 56B628: using guessed type int dword_56B628; +// 56B63C: using guessed type int dword_56B63C; +// 56B794: using guessed type int dword_56B794; +// 56B9A0: using guessed type int dword_56B9A0; +// 56BB98: using guessed type int dword_56BB98; +// 56BDA4: using guessed type int dword_56BDA4; +// 56BDA8: using guessed type int dword_56BDA8[62]; +// 56BEA0: using guessed type int dword_56BEA0; +// 56C1A8: using guessed type int dword_56C1A8; +// 56C260: using guessed type int dword_56C260; +// 56C5AC: using guessed type int dword_56C5AC; +// 56C664: using guessed type int dword_56C664; +// 56C9B0: using guessed type int dword_56C9B0; +// 56CA68: using guessed type int dword_56CA68; +// 56CAAC: using guessed type int dword_56CAAC; +// 56CDB4: using guessed type int dword_56CDB4; +// 56CF98: using guessed type int dword_56CF98; +// 56D1B8: using guessed type int dword_56D1B8; +// 56D388: using guessed type int dword_56D388; +// 56D5BC: using guessed type int dword_56D5BC; +// 56D5C0: using guessed type int dword_56D5C0[62]; +// 56D6B8: using guessed type int dword_56D6B8; +// 56D9C0: using guessed type int dword_56D9C0; +// 56DA80: using guessed type int dword_56DA80; +// 56DABC: using guessed type int dword_56DABC; +// 56DDC4: using guessed type int dword_56DDC4; +// 56DE84: using guessed type int dword_56DE84; +// 56E1C8: using guessed type int dword_56E1C8; +// 56E3A8: using guessed type int dword_56E3A8; +// 56E5CC: using guessed type int dword_56E5CC; +// 56E7B0: using guessed type int dword_56E7B0; +// 56E9D0: using guessed type int dword_56E9D0; +// 56EBA0: using guessed type int dword_56EBA0; +// 56EDD4: using guessed type int dword_56EDD4; +// 56EDD8: using guessed type int dword_56EDD8[62]; +// 56EED0: using guessed type int dword_56EED0; +// 56F1D8: using guessed type int dword_56F1D8; +// 56F2CC: using guessed type int dword_56F2CC; +// 56F5DC: using guessed type int dword_56F5DC; +// 56F6D8: using guessed type int dword_56F6D8; +// 56F9E0: using guessed type int dword_56F9E0; +// 56FA98: using guessed type int dword_56FA98; +// 56FDE4: using guessed type int dword_56FDE4; +// 56FE9C: using guessed type int dword_56FE9C; +// 5701E8: using guessed type int dword_5701E8; +// 5806EC: using guessed type int dword_5806EC; +// 668560: using guessed type char WXML::DOMLib::Machine::InitTransitTable(void)::bInited; + +//----- (0042A6F2) -------------------------------------------------------- +void __thiscall WXML::DOMLib::Machine::Machine(int this, int a2) +{ + int v2; // [esp+14h] [ebp-44h] + + *(_DWORD *)(this + 32) = 0; + v2 = this + 28; + *(_BYTE *)(this + 36) = 0; + *(_DWORD *)(this + 28) = this + 36; + WXML::DOMLib::Machine::InitTransitTable(); + std::string::_M_assign(v2, a2); +} + +//----- (0042A78B) -------------------------------------------------------- +int __usercall std::__relocate_a_1>@( + int a1@, + int a2@, + int a3@) +{ + int v6; // ecx + _DWORD *v7; // ecx + int v8; // ecx + + while ( a1 != a2 ) + { + v6 = *(_DWORD *)(a1 + 4); + *(_DWORD *)a3 = *(_DWORD *)a1; + *(_DWORD *)(a3 + 4) = v6; + if ( v6 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy(v6); + *(_DWORD *)(a3 + 8) = *(_DWORD *)(a1 + 8); + *(_DWORD *)(a3 + 12) = *(_DWORD *)(a1 + 12); + *(_DWORD *)(a3 + 16) = *(_DWORD *)(a1 + 16); + *(_DWORD *)(a3 + 20) = *(_DWORD *)(a1 + 20); + *(_DWORD *)(a3 + 24) = *(_DWORD *)(a1 + 24); + *(_BYTE *)(a3 + 28) = *(_BYTE *)(a1 + 28); + std::string::basic_string((_DWORD *)(a3 + 32), (_DWORD *)(a1 + 32)); + *(_DWORD *)(a3 + 56) = *(_DWORD *)(a1 + 56); + std::string::basic_string((_DWORD *)(a3 + 60), (_DWORD *)(a1 + 60)); + v7 = (_DWORD *)(a3 + 88); + a3 += 112; + *(_BYTE *)(a3 - 28) = *(_BYTE *)(a1 + 84); + std::string::basic_string(v7, (_DWORD *)(a1 + 88)); + v8 = a1; + a1 += 112; + WXML::DOMLib::Token::~Token(v8); + } + return a3; +} + +//----- (0042A82E) -------------------------------------------------------- +int __thiscall WXML::DOMLib::Machine::Feed( + struct _Unwind_Exception *this, + char a2, + int a3, + unsigned __int8 **a4, + int a5, + int a6) +{ + struct _Unwind_Exception *v6; // eax + std::ostream::sentry *v7; // eax + std::ostream::sentry *v8; // eax + std::ostream::sentry *v9; // eax + std::ostream::sentry *v10; // eax + std::ostream::sentry *v11; // eax + std::ostream::sentry *v12; // eax + std::ostream::sentry *v13; // eax + std::ostream::sentry *v14; // eax + struct _Unwind_Exception *v15; // ebx + unsigned __int8 v16; // cf + int v17; // eax + int v18; // edx + int v19; // edx + int v20; // ecx + struct _Unwind_Exception *v21; // esi + int v22; // eax + int v23; // edx + int v24; // ebx + int v25; // esi + int v26; // esi + struct _Unwind_Exception *v27; // esi + int v28; // eax + int v29; // eax + int v30; // ecx + struct _Unwind_Exception *v31; // esi + int v32; // eax + int v33; // edx + int v34; // ebx + int v35; // ecx + int v36; // ecx + int v37; // ecx + int v38; // eax + int v39; // eax + int v40; // ecx + struct _Unwind_Exception *v41; // edx + const WXML::DOMLib::Token *v43; // [esp+4h] [ebp-154h] + int v44; // [esp+18h] [ebp-140h] + int v45; // [esp+1Ch] [ebp-13Ch] + signed __int32 v46; // [esp+24h] [ebp-134h] BYREF + struct _Unwind_Exception *lpuexcpt; // [esp+28h] [ebp-130h] + void *v48[6]; // [esp+68h] [ebp-F0h] BYREF + int v49; // [esp+80h] [ebp-D8h] BYREF + int v50; // [esp+84h] [ebp-D4h] + int v51; // [esp+88h] [ebp-D0h] BYREF + int v52; // [esp+8Ch] [ebp-CCh] BYREF + int v53; // [esp+90h] [ebp-C8h] + int v54; // [esp+94h] [ebp-C4h] + int v55; // [esp+98h] [ebp-C0h] + char v56; // [esp+9Ch] [ebp-BCh] + char *v57; // [esp+A0h] [ebp-B8h] + int v58; // [esp+A4h] [ebp-B4h] + char v59[16]; // [esp+A8h] [ebp-B0h] BYREF + int v60; // [esp+B8h] [ebp-A0h] + char *v61; // [esp+BCh] [ebp-9Ch] + int v62; // [esp+C0h] [ebp-98h] + char v63[16]; // [esp+C4h] [ebp-94h] BYREF + char v64; // [esp+D4h] [ebp-84h] + char *v65; // [esp+D8h] [ebp-80h] + int v66; // [esp+DCh] [ebp-7Ch] + char v67[120]; // [esp+E0h] [ebp-78h] BYREF + + lpuexcpt = this; + LOBYTE(v46) = a2; + if ( a2 == 10 ) + { + v6 = lpuexcpt; + ++*((_DWORD *)lpuexcpt + 2); + *((_DWORD *)v6 + 3) = 0; + } + v44 = (unsigned __int8)v46; + do + { + v45 = *((_DWORD *)lpuexcpt + 6); + v46 = WXML::DOMLib::Machine::TT[257 * v45 + v44]; + if ( !v46 ) + { + v46 = dword_567960[257 * v45]; + if ( !v46 ) + { + std::basic_stringstream,std::allocator>::basic_stringstream((int)&v49); + std::operator<<>((std::ostream::sentry *)&v51, "BAD STATE MACHINE! AT INPUT "); + v7 = (std::ostream::sentry *)std::ostream::operator<<(*((_DWORD *)lpuexcpt + 6)); + v8 = std::operator<<>(v7, " "); + std::operator<<>(v8, a2); + std::stringbuf::str((int)v48, (int)&v52); +LABEL_12: + std::string::operator=(a4, (int)v48); + std::string::_M_dispose(v48); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)&v49); + return -1; + } + } + if ( v46 < 0 ) + { + std::basic_stringstream,std::allocator>::basic_stringstream((int)&v49); + v9 = std::operator<<((std::ostream::sentry *)&v51, (int *)lpuexcpt + 7); + std::operator<<>(v9, ":"); + v10 = (std::ostream::sentry *)std::ostream::operator<<(*((_DWORD *)lpuexcpt + 2)); + std::operator<<>(v10, ":"); + v11 = (std::ostream::sentry *)std::ostream::operator<<(*((_DWORD *)lpuexcpt + 3)); + v12 = std::operator<<>(v11, ": "); + if ( a2 ) + { + v13 = std::operator<<>(v12, "unexpected character `"); + v14 = std::operator<<>(v13, a2); + std::operator<<>(v14, "`"); + } + else + { + std::operator<<>(v12, "unexpected end"); + } + std::stringbuf::str((int)v48, (int)&v52); + goto LABEL_12; + } + v15 = lpuexcpt; + v16 = _bittest(&v46, 0x15u); + *((_DWORD *)lpuexcpt + 6) = (unsigned __int16)v46; + if ( v16 ) + { + v17 = *((_DWORD *)v15 + 1); + if ( *(_DWORD *)v15 > v17 ) + { + v53 = *((_DWORD *)v15 + 1); + v57 = v59; + v61 = v63; + v65 = v67; + v18 = *((_DWORD *)v15 + 4); + *((_DWORD *)v15 + 1) = v17 + 1; + v51 = v18; + v19 = *((_DWORD *)v15 + 5); + v49 = 0; + v52 = v19; + *((_DWORD *)v15 + 5) = v19 + 1; + v50 = 0; + v58 = 0; + v59[0] = 0; + v62 = 0; + v63[0] = 0; + v66 = 0; + v67[0] = 0; + v56 = 0; + v64 = 0; + v60 = -1; + v54 = 1; + v55 = 0; + std::vector::push_back(a3, (WXML::DOMLib::Token *)&v49); + WXML::DOMLib::Token::~Token((int)&v49); + } + } + if ( _bittest(&v46, 0x16u) ) + { + WXML::DOMLib::Token::Token((int)&v49, (WXML::DOMLib::Token *)(*(_DWORD *)(a5 + 4) - 112), v43); + v20 = *(_DWORD *)(a5 + 4) - 112; + *(_DWORD *)(a5 + 4) = v20; + WXML::DOMLib::Token::~Token(v20); + v21 = lpuexcpt; + *((_DWORD *)lpuexcpt + 4) = v51; + *((_DWORD *)v21 + 5) = v52; + *((_DWORD *)v21 + 1) = v53; + WXML::DOMLib::Token::~Token((int)&v49); + } + } + while ( _bittest(&v46, 0x14u) ); + if ( _bittest(&v46, 0x11u) ) + { + v22 = *(_DWORD *)lpuexcpt; + v23 = *((_DWORD *)lpuexcpt + 1); + if ( v23 < *(_DWORD *)lpuexcpt ) + { + v24 = *((_DWORD *)lpuexcpt + 3); + v49 = 0; + v57 = v59; + v61 = v63; + v65 = v67; + v50 = 0; + v25 = *((_DWORD *)lpuexcpt + 4); + v67[0] = 0; + v58 = 0; + v51 = v25; + v59[0] = 0; + v26 = *((_DWORD *)lpuexcpt + 5); + v63[0] = 0; + v62 = 0; + v52 = v26; + v66 = 0; + v54 = v22 - v23; + v27 = lpuexcpt; + v56 = 0; + *((_DWORD *)lpuexcpt + 1) = v22; + v28 = *((_DWORD *)v27 + 2); + *((_DWORD *)v27 + 5) = v24; + *((_DWORD *)v27 + 4) = v28; + v64 = 0; + v29 = WXML::DOMLib::Machine::STT[v45]; + v53 = v23; + v60 = -1; + v55 = v29; + if ( v29 == 3 ) + v30 = a5; + else + v30 = a3; + std::vector::push_back(v30, (WXML::DOMLib::Token *)&v49); + WXML::DOMLib::Token::~Token((int)&v49); + } + } + v31 = lpuexcpt; + v32 = *(_DWORD *)lpuexcpt + 1; + v33 = *((_DWORD *)lpuexcpt + 3) + 1; + v16 = _bittest(&v46, 0x12u); + *(_DWORD *)lpuexcpt = v32; + *((_DWORD *)v31 + 3) = v33; + if ( v16 ) + { + v34 = v32; + v67[0] = 0; + v57 = v59; + v61 = v63; + v65 = v67; + v35 = *((_DWORD *)v31 + 4); + v49 = 0; + v51 = v35; + v36 = *((_DWORD *)v31 + 5); + v50 = 0; + v52 = v36; + v37 = *((_DWORD *)v31 + 1); + *((_DWORD *)v31 + 1) = v32; + v38 = *((_DWORD *)v31 + 2); + *((_DWORD *)v31 + 5) = v33; + *((_DWORD *)v31 + 4) = v38; + v58 = 0; + v39 = WXML::DOMLib::Machine::STT[v45]; + v59[0] = 0; + v62 = 0; + v55 = v39; + v63[0] = 0; + v66 = 0; + v56 = 0; + v64 = 0; + v60 = -1; + v53 = v37; + v54 = v34 - v37; + if ( v39 == 3 ) + v40 = a5; + else + v40 = a3; + std::vector::push_back(v40, (WXML::DOMLib::Token *)&v49); + WXML::DOMLib::Token::~Token((int)&v49); + } + v46 &= 0x80000u; + if ( v46 ) + { + v41 = lpuexcpt; + v46 = 0; + *((_DWORD *)lpuexcpt + 1) = *(_DWORD *)lpuexcpt; + *((_DWORD *)v41 + 5) = *((_DWORD *)v41 + 3); + } + return v46; +} +// 42AC48: variable 'v43' is possibly undefined +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); +// 566560: using guessed type int WXML::DOMLib::Machine::STT[]; +// 567560: using guessed type int WXML::DOMLib::Machine::TT[]; +// 567960: using guessed type int dword_567960[]; + +//----- (0042AF82) -------------------------------------------------------- +void __thiscall std::__shared_ptr::operator=(_DWORD *this, _DWORD *a2) +{ + int v2; // esi + volatile signed __int32 *v4; // ecx + + v2 = a2[1]; + *this = *a2; + if ( v2 != this[1] ) + { + if ( v2 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy(v2); + v4 = (volatile signed __int32 *)this[1]; + if ( v4 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release(v4); + this[1] = v2; + } +} + +//----- (0042AFB8) -------------------------------------------------------- +int __thiscall WXML::DOMLib::Tokenizer::GetTokens(_DWORD *this, _DWORD *a2, int a3, _DWORD *a4) +{ + struct _Unwind_Exception *v5; // ecx + unsigned int v6; // ebx + unsigned int v7; // edx + int v8; // eax + unsigned int v9; // edi + int v10; // eax + int v11; // eax + unsigned int v13; // [esp+28h] [ebp-20h] + struct _Unwind_Exception *v14; // [esp+2Ch] [ebp-1Ch] + int v15; // [esp+2Ch] [ebp-1Ch] + + WXML::DOMLib::Machine::Reset(this + 2); + if ( *this ) + { + v7 = 0; + v6 = 0; + while ( *(_DWORD *)(*this + 4) > v7 ) + { + if ( v6 ) + return v6; + v13 = v7; + v14 = v5; + v8 = WXML::DOMLib::Machine::Feed( + v5, + *(_BYTE *)(*(_DWORD *)*this + v7), + (int)a2, + (unsigned __int8 **)a3, + (int)a4, + 0); + v5 = v14; + v6 = v8; + v7 = v13 + 1; + } + if ( !v6 ) + { + v9 = 0; + v15 = WXML::DOMLib::Machine::Feed(v5, 0, (int)a2, (unsigned __int8 **)a3, (int)a4, 0); + while ( -1227133513 * ((a2[1] - *a2) >> 4) > v9 ) + { + v10 = 112 * v9++; + std::__shared_ptr::operator=((_DWORD *)(v10 + *a2), this); + } + while ( -1227133513 * ((a4[1] - *a4) >> 4) > v6 ) + { + v11 = 112 * v6++; + std::__shared_ptr::operator=((_DWORD *)(v11 + *a4), this); + } + return v15; + } + } + else + { + v6 = -1; + std::string::_M_replace( + (unsigned int *)a3, + 0, + *(_DWORD *)(a3 + 4), + "FATAL: no source was set or failed to allocate space for input source", + 0x45u); + } + return v6; +} +// 42B035: variable 'v5' is possibly undefined + +//----- (0042B0EE) -------------------------------------------------------- +void __thiscall WXML::DOMLib::Tokenizer::Tokenizer(_DWORD *this, char *Str, int a3) +{ + size_t v3; // eax + unsigned int v4; // eax + volatile signed __int32 *v5; // eax + int v6; // edx + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-58h] + _BYTE **Block; // [esp+18h] [ebp-50h] + int v10; // [esp+50h] [ebp-18h] BYREF + volatile signed __int32 *v11; // [esp+54h] [ebp-14h] BYREF + _BYTE *v12; // [esp+58h] [ebp-10h] BYREF + volatile signed __int32 *v13; // [esp+5Ch] [ebp-Ch] BYREF + + *this = 0; + this[1] = 0; + WXML::DOMLib::Machine::Machine((int)(this + 2), a3); + Block = (_BYTE **)operator new(0x18u); + v3 = strlen(Str) + 1; + v12 = (_BYTE *)v3; + *Block = Block + 2; + lpuexcpt = (struct _Unwind_Exception *)&Str[v3]; + if ( v3 > 0xF ) + { + *Block = std::string::_M_create((unsigned int *)&v12, 0); + Block[2] = v12; + } + std::string::_S_copy_chars(*Block, (unsigned __int8 *)Str, (size_t)lpuexcpt); + v4 = (unsigned int)v12; + Block[1] = v12; + (*Block)[v4] = 0; + v11 = 0; + v12 = Block; + v13 = 0; + v5 = (volatile signed __int32 *)operator new(0x10u); + *((_DWORD *)v5 + 1) = 1; + *((_DWORD *)v5 + 2) = 1; + *((_DWORD *)v5 + 3) = Block; + v6 = (int)v12; + *v5 = (volatile signed __int32)&off_5603EC; + v10 = v6; + v12 = 0; + v13 = v11; + v11 = v5; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v13); + std::__shared_ptr::operator=(this, &v10); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v11); +} +// 5603EC: using guessed type int (*off_5603EC)(); + +//----- (0042B2F0) -------------------------------------------------------- +void __tcf_1_4(void) +{ + std::ios_base::Init::~Init(); +} + +//----- (0042B2FA) -------------------------------------------------------- +_DWORD *__thiscall std::string::operator+=(_DWORD *this, int a2) +{ + return std::string::_M_append(this, *(_BYTE **)a2, *(_DWORD *)(a2 + 4)); +} + +//----- (0042B31A) -------------------------------------------------------- +_DWORD *__thiscall std::string::operator+=(_DWORD *this, char *Str) +{ + unsigned int v2; // eax + + v2 = strlen(Str); + if ( v2 > 0x3FFFFFFF - this[1] ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + return std::string::_M_append(this, Str, v2); +} + +//----- (0042B360) -------------------------------------------------------- +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str) +{ + size_t v2; // eax + + v2 = strlen(Str); + return std::string::_M_replace(this, 0, this[1], Str, v2); +} + +//----- (0042B39D) -------------------------------------------------------- +std::ostream::sentry *__usercall std::operator<<>@( + std::ostream::sentry *a1@, + char a2@
) +{ + int v3[3]; // [esp+1Ch] [ebp-Ch] BYREF + + LOBYTE(v3[0]) = a2; + return std::__ostream_insert>(a1, (int)v3, 1); +} +// 42B39D: using guessed type int var_C[3]; + +//----- (0042B3C0) -------------------------------------------------------- +size_t __thiscall std::string::basic_string(void **this, char *Str) +{ + char *v3; // edi + size_t result; // eax + _BYTE *v5; // edx + size_t v6[7]; // [esp+1Ch] [ebp-1Ch] BYREF + + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v6[0] = strlen(Str); + v3 = &Str[v6[0]]; + if ( v6[0] > 0xF ) + { + *this = std::string::_M_create(v6, 0); + this[2] = (void *)v6[0]; + } + std::string::_S_copy_chars(*this, (unsigned __int8 *)Str, (size_t)v3); + result = v6[0]; + v5 = *this; + this[1] = (void *)v6[0]; + v5[result] = 0; + return result; +} +// 42B3C0: using guessed type size_t var_1C[7]; + +//----- (0042B43D) -------------------------------------------------------- +std::ostream::sentry *__cdecl WXML::EXPRLib::OutputAsStringOrKeyWord(int a1, int *a2, int a3, _BYTE *a4) +{ + std::ostream::sentry *v4; // ebx + std::ostream::sentry *v5; // eax + bool v6; // al + std::ostream::sentry *v7; // eax + std::ostream::sentry *v8; // eax + std::ostream::sentry *v10; // [esp+30h] [ebp+8h] + char *v11; // [esp+34h] [ebp+Ch] + + v4 = (std::ostream::sentry *)(a1 + 8); + if ( std::operator==((int)a2, "true") ) + { + v5 = std::operator<<>(v4, WXML::EXPRLib::OPShort::CONST); + v11 = ",true"; +LABEL_8: + v10 = v5; + return std::operator<<>(v10, v11); + } + if ( std::operator==((int)a2, "false") ) + { + v5 = std::operator<<>(v4, WXML::EXPRLib::OPShort::CONST); + v11 = ",false"; + goto LABEL_8; + } + v6 = std::operator==((int)a2, "$global"); + *a4 = 1; + if ( !v6 ) + { + v7 = std::operator<<>(v4, WXML::EXPRLib::OPShort::NAME); + v8 = std::operator<<>(v7, ",'"); + v5 = std::operator<<(v8, a2); + v11 = (char *)off_5542FA; + goto LABEL_8; + } + v10 = (std::ostream::sentry *)(a1 + 8); + v11 = (char *)WXML::EXPRLib::OPShort::CS_GLOBAL; + return std::operator<<>(v10, v11); +} +// 53E154: using guessed type void *WXML::EXPRLib::OPShort::CS_GLOBAL; + +//----- (0042B518) -------------------------------------------------------- +int __thiscall WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(int *this, int a2, int a3, _BYTE *a4) +{ + char *Literal; // eax + std::ostream::sentry *v5; // eax + const char *v6; // eax + std::ostream::sentry *v7; // eax + std::ostream::sentry *v8; // eax + std::ostream::sentry *v9; // eax + std::ostream::sentry *v10; // eax + std::ostream::sentry *v11; // eax + std::ostream::sentry *v12; // eax + std::ostream::sentry *v13; // eax + std::ostream::sentry *v14; // eax + std::ostream::sentry *v15; // eax + std::ostream::sentry *v16; // eax + std::ostream::sentry *v17; // eax + char *v18; // eax + std::ostream::sentry *v19; // eax + std::ostream::sentry *v20; // eax + std::ostream::sentry *v21; // eax + std::ostream::sentry *v22; // eax + std::ostream::sentry *v23; // eax + std::ostream::sentry *v24; // eax + std::ostream::sentry *v25; // eax + std::ostream::sentry *v26; // eax + std::ostream::sentry *v27; // eax + std::ostream::sentry *v28; // eax + std::ostream::sentry *v29; // eax + std::ostream::sentry *v30; // eax + std::ostream::sentry *v31; // eax + char *v33; // [esp+4h] [ebp-74h] + int v34; // [esp+4h] [ebp-74h] + _BYTE *v35; // [esp+8h] [ebp-70h] + std::ostream::sentry *v36; // [esp+10h] [ebp-68h] + std::ostream::sentry *v37; // [esp+10h] [ebp-68h] + std::ostream::sentry *i; // [esp+10h] [ebp-68h] + std::ostream::sentry *j; // [esp+10h] [ebp-68h] + std::ostream::sentry *v40; // [esp+10h] [ebp-68h] + std::ostream::sentry *k; // [esp+10h] [ebp-68h] + std::ostream::sentry *m; // [esp+10h] [ebp-68h] + std::ostream::sentry *n; // [esp+10h] [ebp-68h] + WXML::EXPRLib::Token *v44; // [esp+14h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-60h] + void *v47[8]; // [esp+58h] [ebp-20h] BYREF + + v36 = (std::ostream::sentry *)*this; + v44 = (WXML::EXPRLib::Token *)(a2 + 8); + std::operator<<>((std::ostream::sentry *)(a2 + 8), (char *)&off_5542FA[2]); + if ( *(_BYTE *)v36 == 36 ) + { + v37 = (std::ostream::sentry *)(this + 6); + if ( std::operator==((int)this, "$VAR") ) + { + Literal = (char *)WXML::EXPRLib::Token::GetLiteral(this + 6); + std::string::basic_string(v47, Literal); + WXML::EXPRLib::OutputAsStringOrKeyWord(a2, (int *)v47, a3, a4); + std::string::_M_dispose(v47); + } + else if ( std::operator==((int)this, "$STRING") ) + { + v5 = std::operator<<>(v44, WXML::EXPRLib::OPShort::CONST); + std::operator<<>(v5, ",'"); + lpuexcpta = (struct _Unwind_Exception *)(*(_DWORD *)(this[9] + 4) - 2); + v6 = WXML::EXPRLib::Token::GetLiteral(v37); + WXML::Rewrite::ToStringCode((int)(v6 + 1), (int)lpuexcpta, a2); + std::operator<<>(v44, (char *)off_5542FA); + } + else + { + v7 = std::operator<<>(v44, WXML::EXPRLib::OPShort::CONST); + std::operator<<>(v7, ","); + v33 = (char *)WXML::EXPRLib::Token::GetLiteral(v37); + std::operator<<>(v44, v33); + } + goto LABEL_46; + } + if ( *(_BYTE *)v36 == 79 && *((_BYTE *)v36 + 1) == 80 && *((_BYTE *)v36 + 2) == 95 ) + { + if ( std::operator==((int)this, "OP_PATH") ) + { + if ( this[14] - this[13] != 8 ) + goto LABEL_46; + v8 = std::operator<<>(v44, (char *)&off_5542FA[2]); + v9 = std::operator<<>(v8, WXML::EXPRLib::OPShort::GET_FROM_ENV); + std::operator<<>(v9, "],"); + v35 = a4; + v34 = a3; +LABEL_16: + WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, v34, v35); + goto LABEL_46; + } + if ( std::operator==((int)this, "OP_LIST") ) + { + v10 = std::operator<<>(v44, (char *)&off_5542FA[2]); + v11 = std::operator<<>(v10, WXML::EXPRLib::OPShort::MAKE_LIST); + std::operator<<>(v11, "]"); + std::operator<<>(v44, ","); + if ( this[13] == this[14] ) + goto LABEL_46; + goto LABEL_15; + } + if ( std::operator==((int)this, "OP_LIST_CONCAT") ) + { + v12 = std::operator<<>(v44, (char *)&off_5542FA[2]); + v13 = std::operator<<>(v12, WXML::EXPRLib::OPShort::CON_LIST); + std::operator<<>(v13, "]"); + for ( i = 0; (this[14] - this[13]) >> 3 > (unsigned int)i; i = (std::ostream::sentry *)((char *)i + 1) ) + { + std::operator<<>(v44, ","); + WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4); + } + } + else if ( std::operator==((int)this, "OP_DICT_CONCAT") ) + { + v14 = std::operator<<>(v44, (char *)&off_5542FA[2]); + v15 = std::operator<<>(v14, WXML::EXPRLib::OPShort::UNION_KV); + std::operator<<>(v15, "]"); + for ( j = 0; (this[14] - this[13]) >> 3 > (unsigned int)j; j = (std::ostream::sentry *)((char *)j + 1) ) + { + std::operator<<>(v44, ","); + WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4); + } + } + else if ( std::operator==((int)this, "OP_MAKE_DICT") ) + { + v16 = std::operator<<>(v44, (char *)&off_5542FA[2]); + v17 = std::operator<<>(v16, WXML::EXPRLib::OPShort::MAKE_KV); + std::operator<<>(v17, "],"); + v40 = std::operator<<>(v44, (char *)off_5542FA); + v18 = (char *)WXML::EXPRLib::Token::GetLiteral((_DWORD *)(*(_DWORD *)this[13] + 24)); + v19 = std::operator<<>(v40, v18); + std::operator<<>(v19, "',"); + if ( (unsigned int)(this[14] - this[13]) <= 8 ) + { + std::operator<<>(v44, (char *)&off_5542FA[2]); + std::operator<<>(v44, "[7],"); + WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4); + std::operator<<>(v44, "]"); + } + else + { + WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4); + } + } + else + { + if ( std::operator==((int)this, "OP_EXPAND") ) + { + v20 = std::operator<<>(v44, (char *)&off_5542FA[2]); + v21 = std::operator<<>(v20, WXML::EXPRLib::OPShort::EX_DICT); + std::operator<<>(v21, "],"); +LABEL_15: + v35 = a4; + v34 = a3; + goto LABEL_16; + } + if ( std::operator==((int)this, "OP_DICT") ) + { + v22 = std::operator<<>(v44, (char *)&off_5542FA[2]); + v23 = std::operator<<>(v22, WXML::EXPRLib::OPShort::GET_NAME); + std::operator<<>(v23, "]"); + for ( k = 0; (this[14] - this[13]) >> 3 > (unsigned int)k; k = (std::ostream::sentry *)((char *)k + 1) ) + { + std::operator<<>(v44, ","); + WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4); + } + } + else if ( std::operator==((int)this, "OP_FUNC") ) + { + v24 = std::operator<<>(v44, (char *)&off_5542FA[2]); + v25 = std::operator<<>(v24, WXML::EXPRLib::OPShort::DO_FUNC); + std::operator<<>(v25, "]"); + for ( m = 0; (this[14] - this[13]) >> 3 > (unsigned int)m; m = (std::ostream::sentry *)((char *)m + 1) ) + { + std::operator<<>(v44, ","); + WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4); + } + } + } + } + else + { + v26 = std::operator<<>(v44, (char *)&off_5542FA[2]); + v27 = std::operator<<>(v26, WXML::EXPRLib::OPShort::AOP); + v28 = std::operator<<>(v27, ","); + v29 = std::operator<<>(v28, (char *)off_5542FA); + v30 = std::operator<<(v29, this); + v31 = std::operator<<>(v30, (char *)off_5542FA); + std::operator<<>(v31, "]"); + std::operator<<>(v44, ","); + for ( n = 0; (this[14] - this[13]) >> 3 > (unsigned int)n; n = (std::ostream::sentry *)((char *)n + 1) ) + { + if ( n ) + std::operator<<>(v44, ","); + WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4); + } + } +LABEL_46: + std::operator<<>(v44, "]"); + return 0; +} + +//----- (0042BD94) -------------------------------------------------------- +bool __usercall __gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>@( + char **a1@, + int a2@) +{ + return std::operator==(a2, *a1); +} + +//----- (0042BDAA) -------------------------------------------------------- +void __thiscall std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count(int *this, int a2) +{ + *this = a2; + if ( a2 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy(a2); +} + +//----- (0042BDC4) -------------------------------------------------------- +void __fastcall WXML::EXPRLib::ExprSyntaxTree::~ExprSyntaxTree(int a1) +{ + int v2; // edi + int i; // esi + volatile signed __int32 **v4; // ecx + + v2 = *(_DWORD *)(a1 + 56); + for ( i = *(_DWORD *)(a1 + 52); v2 != i; i += 8 ) + { + v4 = (volatile signed __int32 **)(i + 4); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v4); + } + if ( *(_DWORD *)(a1 + 52) ) + operator delete(*(void **)(a1 + 52)); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)(a1 + 40)); + std::string::_M_dispose((void **)a1); +} + +//----- (0042BE0C) -------------------------------------------------------- +void __thiscall std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(volatile signed __int32 **this, int a2) +{ + if ( *this != (volatile signed __int32 *)a2 ) + { + if ( a2 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy(a2); + if ( *this ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release(*this); + *this = (volatile signed __int32 *)a2; + } +} + +//----- (0042BE38) -------------------------------------------------------- +int __thiscall WXML::EXPRLib::ExprSyntaxTree::RenderCode( + int *this, + WXML::EXPRLib::Token *a2, + int *a3, + int *a4, + int *a5, + int *a6, + int *a7, + char a8, + int a9) +{ + _BYTE *v9; // eax + char v10; // dl + std::ostream::sentry *v11; // eax + std::ostream::sentry *v12; // eax + std::ostream::sentry *v13; // eax + std::ostream::sentry *v14; // eax + std::ostream::sentry *v15; // eax + char v16; // dl + std::ostream::sentry *v17; // eax + std::ostream::sentry *v18; // eax + std::ostream::sentry *v19; // eax + std::ostream::sentry *v20; // eax + std::ostream::sentry *v21; // eax + std::ostream::sentry *v22; // eax + std::ostream::sentry *v23; // eax + char *Literal; // eax + std::ostream::sentry *v25; // eax + std::ostream::sentry *v26; // eax + std::ostream::sentry *v27; // eax + std::ostream::sentry *v28; // eax + std::ostream::sentry *v29; // eax + char *v30; // eax + std::ostream::sentry *v31; // eax + std::ostream::sentry *v32; // eax + std::ostream::sentry *v33; // eax + std::ostream::sentry *v34; // eax + std::ostream::sentry *v35; // eax + std::ostream::sentry *v36; // eax + std::ostream::sentry *v37; // eax + std::ostream::sentry *v38; // eax + const char *v39; // eax + std::ostream::sentry *v40; // eax + std::ostream::sentry *v41; // eax + std::ostream::sentry *v42; // eax + std::ostream::sentry *v43; // eax + int v44; // edx + char *v45; // eax + std::ostream::sentry *v46; // eax + std::ostream::sentry *v47; // eax + std::ostream::sentry *v48; // eax + std::ostream::sentry *v49; // eax + std::ostream::sentry *v50; // eax + char *v51; // eax + std::ostream::sentry *v52; // eax + std::ostream::sentry *v53; // eax + std::ostream::sentry *v54; // eax + std::ostream::sentry *v55; // eax + std::ostream::sentry *v56; // eax + int v57; // edx + std::ostream::sentry *v58; // eax + std::ostream::sentry *v59; // eax + std::ostream::sentry *v60; // eax + std::ostream::sentry *v61; // eax + int v62; // edx + std::ostream::sentry *v63; // eax + char *v64; // eax + std::ostream::sentry *v65; // eax + std::ostream::sentry *v66; // eax + char *v67; // eax + std::ostream::sentry *v68; // eax + std::ostream::sentry *v69; // eax + std::ostream::sentry *v70; // eax + char *v71; // eax + std::ostream::sentry *v72; // eax + std::ostream::sentry *v73; // eax + std::ostream::sentry *v74; // eax + char *v75; // eax + std::ostream::sentry *v76; // eax + char *v77; // eax + std::ostream::sentry *v78; // eax + char *v79; // eax + std::ostream::sentry *v80; // eax + std::ostream::sentry *v81; // eax + std::ostream::sentry *v82; // eax + std::ostream::sentry *v83; // eax + std::ostream::sentry *v84; // eax + std::ostream::sentry *v85; // eax + std::ostream::sentry *v86; // eax + std::ostream::sentry *v87; // eax + std::ostream::sentry *v88; // eax + std::ostream::sentry *v89; // eax + std::ostream::sentry *v90; // eax + std::ostream::sentry *v91; // eax + std::ostream::sentry *v92; // eax + std::ostream::sentry *v93; // eax + std::ostream::sentry *v94; // eax + std::ostream::sentry *v95; // eax + std::ostream::sentry *v96; // eax + std::ostream::sentry *v97; // eax + std::ostream::sentry *v98; // eax + std::ostream::sentry *v99; // eax + std::ostream::sentry *v100; // eax + std::ostream::sentry *v101; // eax + std::ostream::sentry *v102; // eax + std::ostream::sentry *v103; // eax + std::ostream::sentry *v104; // eax + std::ostream::sentry *v105; // eax + std::ostream::sentry *v106; // eax + std::ostream::sentry *v107; // eax + std::ostream::sentry *v108; // eax + std::ostream::sentry *v109; // eax + std::ostream::sentry *v110; // eax + std::ostream::sentry *v111; // eax + std::ostream::sentry *v112; // eax + std::ostream::sentry *v113; // eax + std::ostream::sentry *v114; // eax + std::ostream::sentry *v115; // eax + std::ostream::sentry *v116; // eax + std::ostream::sentry *v117; // eax + std::ostream::sentry *v118; // eax + std::ostream::sentry *v119; // eax + int *v120; // ecx + std::ostream::sentry *v121; // eax + std::ostream::sentry *v122; // eax + std::ostream::sentry *v123; // eax + std::ostream::sentry *v124; // eax + std::ostream::sentry *v125; // eax + std::ostream::sentry *v126; // eax + std::ostream::sentry *v127; // eax + std::ostream::sentry *v128; // eax + std::ostream::sentry *v129; // eax + std::ostream::sentry *v130; // eax + std::ostream::sentry *v131; // eax + std::ostream::sentry *v132; // eax + std::ostream::sentry *v133; // eax + std::ostream::sentry *v134; // eax + std::ostream::sentry *v135; // eax + std::ostream::sentry *v136; // eax + std::ostream::sentry *v137; // eax + std::ostream::sentry *v138; // eax + std::ostream::sentry *v139; // eax + std::ostream::sentry *v140; // eax + std::ostream::sentry *v141; // eax + std::ostream::sentry *v142; // eax + std::ostream::sentry *v143; // eax + std::ostream::sentry *v144; // eax + std::ostream::sentry *v145; // eax + std::ostream::sentry *v146; // eax + int v147; // eax + std::ostream::sentry *v148; // eax + std::ostream::sentry *v149; // eax + std::ostream::sentry *v150; // eax + std::ostream::sentry *v151; // eax + std::ostream::sentry *v152; // eax + std::ostream::sentry *v153; // eax + std::ostream::sentry *v154; // eax + std::ostream::sentry *v155; // eax + std::ostream::sentry *v156; // eax + std::ostream::sentry *v157; // eax + std::ostream::sentry *v158; // eax + char *v160; // [esp+4h] [ebp-C4h] + char *v161; // [esp+4h] [ebp-C4h] + std::ostream::sentry *v162; // [esp+28h] [ebp-A0h] + std::ostream::sentry *v163; // [esp+2Ch] [ebp-9Ch] + std::ostream::sentry *v164; // [esp+2Ch] [ebp-9Ch] + const char *v165; // [esp+30h] [ebp-98h] + std::ostream::sentry *v166; // [esp+30h] [ebp-98h] + std::ostream::sentry *v167; // [esp+30h] [ebp-98h] + std::ostream::sentry *v168; // [esp+30h] [ebp-98h] + std::ostream::sentry *v169; // [esp+30h] [ebp-98h] + std::ostream::sentry *v170; // [esp+30h] [ebp-98h] + std::ostream::sentry *v171; // [esp+30h] [ebp-98h] + std::ostream::sentry *v172; // [esp+30h] [ebp-98h] + std::ostream::sentry *v173; // [esp+30h] [ebp-98h] + std::ostream::sentry *v174; // [esp+34h] [ebp-94h] + std::ostream::sentry *i; // [esp+34h] [ebp-94h] + std::ostream::sentry *j; // [esp+34h] [ebp-94h] + char *Str1a; // [esp+38h] [ebp-90h] + std::ostream::sentry *Str1b; // [esp+38h] [ebp-90h] + std::ostream::sentry *Str1c; // [esp+38h] [ebp-90h] + char *Str1d; // [esp+38h] [ebp-90h] + char *Str1e; // [esp+38h] [ebp-90h] + int v183[2]; // [esp+78h] [ebp-50h] BYREF + char v184; // [esp+80h] [ebp-48h] BYREF + int v185; // [esp+90h] [ebp-38h] BYREF + int v186; // [esp+94h] [ebp-34h] + char v187[16]; // [esp+98h] [ebp-30h] BYREF + int v188; // [esp+A8h] [ebp-20h] BYREF + int v189; // [esp+ACh] [ebp-1Ch] + char v190[24]; // [esp+B0h] [ebp-18h] BYREF + + v9 = (_BYTE *)*this; + v10 = *(_BYTE *)*this; + if ( v10 == 36 ) + { + v163 = (std::ostream::sentry *)(this + 6); + v174 = (WXML::EXPRLib::Token *)((char *)a2 + 8); + if ( std::operator==((int)this, "$VAR") ) + { + Str1a = (char *)WXML::EXPRLib::Token::GetLiteral(v163); + if ( !strcmp(Str1a, "true") ) + { + v11 = std::operator<<>(v174, "var "); + v12 = std::operator<<(v11, a3); + v13 = std::operator<<>(v12, "=true"); +LABEL_7: + v16 = a8; +LABEL_8: + std::operator<<>(v13, v16); + return 0; + } + if ( !strcmp(Str1a, "false") ) + { + v14 = std::operator<<>(v174, "var "); + v15 = std::operator<<(v14, a3); + v13 = std::operator<<>(v15, "=false"); + goto LABEL_7; + } + if ( !strcmp(Str1a, "$global") ) + { + v17 = std::operator<<>(v174, "var "); + v18 = std::operator<<(v17, a3); + v19 = std::operator<<>(v18, "="); + v13 = std::operator<<(v19, a6); + goto LABEL_7; + } + v20 = std::operator<<>(v174, "var "); + v21 = std::operator<<(v20, a3); + std::operator<<>(v21, a8); + v22 = std::operator<<>(v174, "if(typeof("); + v23 = std::operator<<(v22, a5); + Str1b = std::operator<<>(v23, "."); + Literal = (char *)WXML::EXPRLib::Token::GetLiteral(v163); + v25 = std::operator<<>(Str1b, Literal); + v26 = std::operator<<>(v25, ")!='undefined')"); + v27 = std::operator<<(v26, a3); + v28 = std::operator<<>(v27, "="); + v29 = std::operator<<(v28, a5); + Str1c = std::operator<<>(v29, "."); + v30 = (char *)WXML::EXPRLib::Token::GetLiteral(v163); + v31 = std::operator<<>(Str1c, v30); + std::operator<<>(v31, a8); + v32 = std::operator<<>(v174, "else "); + v33 = std::operator<<(v32, a3); + v34 = std::operator<<>(v33, "="); + v35 = std::operator<<(v34, a4); + v36 = std::operator<<>(v35, "."); + } + else + { + if ( std::operator==((int)this, "$STRING") ) + { + v37 = std::operator<<>(v174, "var "); + v38 = std::operator<<(v37, a3); + std::operator<<>(v38, "=\""); + Str1d = (char *)(*(_DWORD *)(this[9] + 4) - 2); + v39 = WXML::EXPRLib::Token::GetLiteral(v163); + WXML::Rewrite::ToStringCode((int)(v39 + 1), (int)Str1d, (int)a2); + v13 = std::operator<<>(v174, "\""); + goto LABEL_7; + } + v40 = std::operator<<>(v174, "var "); + v41 = std::operator<<(v40, a3); + v36 = std::operator<<>(v41, "="); + } + Str1e = (char *)v36; + v160 = (char *)WXML::EXPRLib::Token::GetLiteral(v163); + v13 = std::operator<<>((std::ostream::sentry *)Str1e, v160); + goto LABEL_7; + } + if ( v10 != 79 || v9[1] != 80 || v9[2] != 95 ) + { + if ( std::operator==((int)this, "?:") ) + { + v183[1] = 0; + v183[0] = (int)&v184; + v184 = 0; + WXML::NameAllocator::GetNextName(a7, (int)v183); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)v183, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + v106 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "var "); + v107 = std::operator<<(v106, a3); + std::endl>(v107); + v108 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "if("); + v109 = std::operator<<(v108, v183); + v110 = std::operator<<>(v109, "){"); + std::operator<<>(v110, a8); + v186 = 0; + v185 = (int)v187; + v187[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v185); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v185, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + v111 = std::operator<<((WXML::EXPRLib::Token *)((char *)a2 + 8), a3); + v112 = std::operator<<>(v111, "="); + v113 = std::operator<<(v112, &v185); + v114 = std::operator<<>(v113, "}"); + std::operator<<>(v114, a8); + v115 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "else{"); + std::operator<<>(v115, a8); + v189 = 0; + v188 = (int)v190; + v190[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v188); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v188, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + v116 = std::operator<<((WXML::EXPRLib::Token *)((char *)a2 + 8), a3); + v117 = std::operator<<>(v116, "="); + v118 = std::operator<<(v117, &v188); + v119 = std::operator<<>(v118, "}"); + std::operator<<>(v119, a8); + std::string::_M_dispose((void **)&v188); + std::string::_M_dispose((void **)&v185); + v120 = v183; +LABEL_81: + std::string::_M_dispose((void **)v120); + return 0; + } + if ( std::operator==((int)this, "&&") ) + { + v186 = 0; + v185 = (int)v187; + v187[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v185); + v188 = (int)v190; + v189 = 0; + v190[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v188); + v121 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "var "); + v122 = std::operator<<(v121, a3); + std::endl>(v122); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v185, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + v123 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "if(!"); + v124 = std::operator<<(v123, &v185); + v125 = std::operator<<>(v124, ")"); + v126 = std::operator<<(v125, a3); + v127 = std::operator<<>(v126, "="); + v128 = std::operator<<(v127, &v185); + std::operator<<>(v128, a8); + v129 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "else{"); + std::operator<<>(v129, a8); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v188, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + v130 = std::operator<<((WXML::EXPRLib::Token *)((char *)a2 + 8), a3); + v131 = std::operator<<>(v130, "="); + v132 = std::operator<<(v131, &v188); + v133 = std::operator<<>(v132, "}"); + std::operator<<>(v133, a8); + } + else if ( std::operator==((int)this, "||") ) + { + v186 = 0; + v185 = (int)v187; + v187[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v185); + v188 = (int)v190; + v189 = 0; + v190[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v188); + v134 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "var "); + v135 = std::operator<<(v134, a3); + std::endl>(v135); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v185, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + v136 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "if("); + v137 = std::operator<<(v136, &v185); + v138 = std::operator<<>(v137, ")"); + v139 = std::operator<<(v138, a3); + v140 = std::operator<<>(v139, "="); + v141 = std::operator<<(v140, &v185); + std::operator<<>(v141, a8); + v142 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "else{"); + std::operator<<>(v142, a8); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v188, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + v143 = std::operator<<((WXML::EXPRLib::Token *)((char *)a2 + 8), a3); + v144 = std::operator<<>(v143, "="); + v145 = std::operator<<(v144, &v188); + v146 = std::operator<<>(v145, "}"); + std::operator<<>(v146, a8); + } + else + { + v147 = this[14] - this[13]; + if ( v147 != 16 ) + { + if ( v147 != 8 ) + return 0; + v189 = 0; + v188 = (int)v190; + v190[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v188); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v188, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + v154 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "var "); + v155 = std::operator<<(v154, a3); + v156 = std::operator<<>(v155, "="); + v157 = std::operator<<(v156, this); + v158 = std::operator<<(v157, &v188); + std::operator<<>(v158, a8); + goto LABEL_80; + } + v186 = 0; + v185 = (int)v187; + v187[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v185); + v188 = (int)v190; + v189 = 0; + v190[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v188); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v185, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v188, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + v148 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "var "); + v149 = std::operator<<(v148, a3); + v150 = std::operator<<>(v149, "="); + v151 = std::operator<<(v150, &v185); + v152 = std::operator<<(v151, this); + v153 = std::operator<<(v152, &v188); + std::operator<<>(v153, a8); + } +LABEL_76: + std::string::_M_dispose((void **)&v188); +LABEL_77: + v120 = &v185; + goto LABEL_81; + } + if ( v9[3] == 80 && v9[4] == 65 ) + { + if ( a3[1] ) + { + v42 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "var "); + v43 = std::operator<<(v42, a3); + std::operator<<>(v43, "="); + } + v44 = this[13]; + if ( this[14] - v44 == 8 ) + { + v165 = WXML::EXPRLib::Token::GetLiteral((_DWORD *)(*(_DWORD *)v44 + 24)); + v164 = (WXML::EXPRLib::Token *)((char *)a2 + 8); + if ( !strcmp(v165, "true") ) + { + std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "true"); +LABEL_35: + if ( !a3[1] ) + return 0; + v16 = a8; + v13 = (WXML::EXPRLib::Token *)((char *)a2 + 8); + goto LABEL_8; + } + if ( !strcmp(v165, "false") ) + { + std::operator<<>(v164, "false"); + goto LABEL_35; + } + if ( !strcmp(v165, "$global") ) + { + std::operator<<(v164, a6); + goto LABEL_35; + } + } + if ( a9 ) + { + v166 = *(std::ostream::sentry **)(a9 + 4); + v188 = (int)WXML::EXPRLib::Token::GetLiteral((_DWORD *)(*(_DWORD *)this[13] + 24)); + if ( v166 == (std::ostream::sentry *)std::find<__gnu_cxx::__normal_iterator>,char const*>( + *(_DWORD *)a9, + *(_DWORD *)(a9 + 4), + (char **)&v188) ) + { + v45 = (char *)WXML::EXPRLib::Token::GetLiteral((_DWORD *)(*(_DWORD *)this[13] + 24)); + std::string::basic_string((void **)&v188, v45); + std::vector::emplace_back((void **)a9, &v188); + std::string::_M_dispose((void **)&v188); + } + } + v46 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "_s("); + v47 = std::operator<<(v46, a5); + v48 = std::operator<<>(v47, ","); + v49 = std::operator<<(v48, a4); + v50 = std::operator<<>(v49, ","); + v167 = std::operator<<>(v50, (char *)off_5542FA); + v51 = (char *)WXML::EXPRLib::Token::GetLiteral((_DWORD *)(*(_DWORD *)this[13] + 24)); + v52 = std::operator<<>(v167, v51); + v53 = std::operator<<>(v52, "')"); + std::operator<<>(v53, a8); + goto LABEL_35; + } + if ( !std::operator==((int)this, "OP_LIST") ) + { + if ( std::operator==((int)this, "OP_LIST_CONCAT") ) + { + for ( i = 0; ; i = (std::ostream::sentry *)((char *)i + 1) ) + { + v57 = this[13]; + if ( (unsigned int)i >= (this[14] - v57) >> 3 ) + break; + if ( std::operator==(*(_DWORD *)(v57 + 8 * (_DWORD)i), "OP_LIST_CONCAT") ) + { + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)a3, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + } + else + { + v189 = 0; + v188 = (int)v190; + v190[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v188); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v188, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + v58 = std::operator<<((WXML::EXPRLib::Token *)((char *)a2 + 8), a3); + v59 = std::operator<<>(v58, ".push("); + v60 = std::operator<<(v59, &v188); + v61 = std::operator<<>(v60, ")"); + std::operator<<>(v61, a8); + std::string::_M_dispose((void **)&v188); + } + } + return 0; + } + if ( std::operator==((int)this, "OP_DICT_CONCAT") ) + { + for ( j = 0; ; j = (std::ostream::sentry *)((char *)j + 1) ) + { + v62 = this[13]; + if ( (unsigned int)j >= (this[14] - v62) >> 3 ) + break; + if ( std::operator==(*(_DWORD *)(v62 + 8 * (_DWORD)j), "$VAR") ) + { + v63 = std::operator<<((WXML::EXPRLib::Token *)((char *)a2 + 8), a3); + v162 = std::operator<<>(v63, "[\""); + v64 = (char *)WXML::EXPRLib::Token::GetLiteral((_DWORD *)(*(_DWORD *)(this[13] + 8 * (_DWORD)j) + 24)); + v65 = std::operator<<>(v162, v64); + std::operator<<>(v65, "\"]="); + v66 = std::operator<<((WXML::EXPRLib::Token *)((char *)a2 + 8), a5); + v168 = std::operator<<>(v66, "."); + v67 = (char *)WXML::EXPRLib::Token::GetLiteral((_DWORD *)(*(_DWORD *)(this[13] + 8 * (_DWORD)j) + 24)); + v68 = std::operator<<>(v168, v67); + v69 = std::operator<<>(v68, "?"); + v70 = std::operator<<(v69, a5); + v169 = std::operator<<>(v70, "."); + v71 = (char *)WXML::EXPRLib::Token::GetLiteral((_DWORD *)(*(_DWORD *)(this[13] + 8 * (_DWORD)j) + 24)); + v72 = std::operator<<>(v169, v71); + v73 = std::operator<<>(v72, ":"); + v74 = std::operator<<(v73, a4); + v170 = std::operator<<>(v74, "."); + v75 = (char *)WXML::EXPRLib::Token::GetLiteral((_DWORD *)(*(_DWORD *)(this[13] + 8 * (_DWORD)j) + 24)); + v76 = std::operator<<>(v170, v75); + std::operator<<>(v76, a8); + } + else + { + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)a3, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + } + } + return 0; + } + if ( std::operator==((int)this, "OP_MAKE_DICT") ) + { + v186 = 0; + v185 = (int)v187; + v187[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v185); + if ( (unsigned int)(this[14] - this[13]) <= 8 ) + { + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v185, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + if ( a9 ) + { + v171 = *(std::ostream::sentry **)(a9 + 4); + v188 = (int)WXML::EXPRLib::Token::GetLiteral((_DWORD *)(*(_DWORD *)this[13] + 24)); + if ( v171 == (std::ostream::sentry *)std::find<__gnu_cxx::__normal_iterator>,char const*>( + *(_DWORD *)a9, + *(_DWORD *)(a9 + 4), + (char **)&v188) ) + { + v77 = (char *)WXML::EXPRLib::Token::GetLiteral((_DWORD *)(*(_DWORD *)this[13] + 24)); + std::string::basic_string((void **)&v188, v77); + std::vector::emplace_back((void **)a9, &v188); + std::string::_M_dispose((void **)&v188); + } + } + } + else + { + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v185, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + } + v78 = std::operator<<((WXML::EXPRLib::Token *)((char *)a2 + 8), a3); + v172 = std::operator<<>(v78, "[\""); + v79 = (char *)WXML::EXPRLib::Token::GetLiteral((_DWORD *)(*(_DWORD *)this[13] + 24)); + v80 = std::operator<<>(v172, v79); + v81 = std::operator<<>(v80, "\"]="); + v82 = std::operator<<(v81, &v185); + std::operator<<>(v82, a8); + goto LABEL_77; + } + if ( std::operator==((int)this, "OP_EXPAND") ) + { + v189 = 0; + v188 = (int)v190; + v190[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v188); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v188, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + v83 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "{var ks=Object.keys("); + v84 = std::operator<<(v83, &v188); + std::operator<<>(v84, "||{});"); + v85 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "for(var k in ks){"); + v86 = std::operator<<(v85, a3); + v87 = std::operator<<>(v86, "[ks[k]]="); + v88 = std::operator<<(v87, &v188); + v89 = std::operator<<>(v88, "[ks[k]]}}"); + std::endl>(v89); +LABEL_80: + v120 = &v188; + goto LABEL_81; + } + if ( !std::operator==((int)this, "OP_DICT") ) + return 0; + v186 = 0; + v185 = (int)v187; + v187[0] = 0; + v188 = (int)v190; + v189 = 0; + v190[0] = 0; + WXML::NameAllocator::GetNextName(a7, (int)&v185); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v185, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + if ( std::operator==(*(_DWORD *)(this[13] + 8), "$VAR") ) + { + v90 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "var "); + v91 = std::operator<<(v90, a3); + v92 = std::operator<<>(v91, "="); + v93 = std::operator<<(v92, &v185); + v94 = std::operator<<>(v93, "?"); + v95 = std::operator<<(v94, &v185); + v173 = std::operator<<>(v95, "."); + v161 = (char *)WXML::EXPRLib::Token::GetLiteral((_DWORD *)(*(_DWORD *)(this[13] + 8) + 24)); + v96 = std::operator<<>(v173, v161); + } + else + { + WXML::NameAllocator::GetNextName(a7, (int)&v188); + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)&v188, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + v97 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "var "); + v98 = std::operator<<(v97, a3); + v99 = std::operator<<>(v98, "="); + v100 = std::operator<<(v99, &v185); + v101 = std::operator<<>(v100, "?"); + v102 = std::operator<<(v101, &v185); + v103 = std::operator<<>(v102, (char *)&off_5542FA[2]); + v104 = std::operator<<(v103, &v188); + v96 = std::operator<<>(v104, "]"); + } + v105 = std::operator<<>(v96, ":undefined"); + std::operator<<>(v105, a8); + goto LABEL_76; + } + v54 = std::operator<<>((WXML::EXPRLib::Token *)((char *)a2 + 8), "var "); + v55 = std::operator<<(v54, a3); + v56 = std::operator<<>(v55, (char *)off_5543FC); + std::operator<<>(v56, a8); + if ( this[13] != this[14] ) + WXML::EXPRLib::ExprSyntaxTree::RenderCode(a2, (int)a3, (int)a4, (int)a5, (int)a6, (int)a7, a8, a9); + return 0; +} + +//----- (0042DA5C) -------------------------------------------------------- +void __usercall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-28h] + + while ( a1 ) + { + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::_Destroy_aux::__destroy(*(void ***)(a1 + 40), *(char ***)(a1 + 44)); + if ( *(_DWORD *)(a1 + 40) ) + operator delete(*(void **)(a1 + 40)); + std::string::_M_dispose((void **)(a1 + 16)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (0042DAB6) -------------------------------------------------------- +int __thiscall WXML::EXPRLib::Parser::Parse(int this, char **a2, int a3, int a4, int a5, unsigned int *a6, char a7) +{ + const WXML::EXPRLib::Token *v7; // edx + _DWORD *v8; // edi + volatile signed __int32 **v9; // ecx + const WXML::EXPRLib::Token *v10; // edx + _DWORD *v11; // edi + _DWORD *v12; // eax + int v13; // eax + int v14; // ecx + int v15; // eax + char *TokenName; // eax + int i; // eax + char *v18; // eax + volatile signed __int32 **v19; // ecx + int *v20; // eax + int *v21; // eax + _DWORD *v22; // edi + int *v23; // eax + int *v24; // edx + char *v25; // eax + bool v26; // zf + _DWORD *v27; // eax + _DWORD *v28; // edx + _DWORD *v29; // eax + char *v30; // eax + _DWORD *v31; // eax + char *v32; // eax + char *Literal; // eax + char *v34; // eax + _DWORD *v35; // eax + int v36; // ecx + int *v37; // eax + int v38; // edx + int v39; // eax + WXML::EXPRLib::TransitTable *v41; // [esp+0h] [ebp-118h] + int v42; // [esp+0h] [ebp-118h] + const WXML::EXPRLib::Token *v43; // [esp+4h] [ebp-114h] + const WXML::EXPRLib::Token *v44; // [esp+4h] [ebp-114h] + int v45; // [esp+10h] [ebp-108h] + _DWORD *v46; // [esp+10h] [ebp-108h] + int v47; // [esp+14h] [ebp-104h] + _DWORD *v48; // [esp+14h] [ebp-104h] + unsigned int v49; // [esp+18h] [ebp-100h] + _DWORD *v50; // [esp+1Ch] [ebp-FCh] + int *v51; // [esp+1Ch] [ebp-FCh] + _DWORD *v52; // [esp+1Ch] [ebp-FCh] + char *v53; // [esp+1Ch] [ebp-FCh] + int Tokens; // [esp+20h] [ebp-F8h] + void *Blockh; // [esp+24h] [ebp-F4h] + _DWORD *Block; // [esp+24h] [ebp-F4h] + _DWORD *Blocka; // [esp+24h] [ebp-F4h] + _DWORD *Blocki; // [esp+24h] [ebp-F4h] + int **Blockb; // [esp+24h] [ebp-F4h] + char *Blockc; // [esp+24h] [ebp-F4h] + volatile signed __int32 **Blockd; // [esp+24h] [ebp-F4h] + _DWORD *Blockj; // [esp+24h] [ebp-F4h] + _DWORD *Blocke; // [esp+24h] [ebp-F4h] + bool Blockf; // [esp+24h] [ebp-F4h] + int Blockg; // [esp+24h] [ebp-F4h] + int v67; // [esp+68h] [ebp-B0h] BYREF + void *v68; // [esp+6Ch] [ebp-ACh] BYREF + volatile signed __int32 *v69; // [esp+70h] [ebp-A8h] BYREF + _DWORD *v70; // [esp+74h] [ebp-A4h] BYREF + volatile signed __int32 *v71; // [esp+78h] [ebp-A0h] BYREF + _DWORD *v72; // [esp+7Ch] [ebp-9Ch] + volatile signed __int32 *v73; // [esp+80h] [ebp-98h] BYREF + char *v74; // [esp+84h] [ebp-94h] BYREF + int v75; // [esp+88h] [ebp-90h] + int v76; // [esp+8Ch] [ebp-8Ch] + void *v77[6]; // [esp+90h] [ebp-88h] BYREF + int **v78; // [esp+A8h] [ebp-70h] BYREF + volatile signed __int32 *v79[5]; // [esp+ACh] [ebp-6Ch] BYREF + int **v80; // [esp+C0h] [ebp-58h] BYREF + volatile signed __int32 *v81[5]; // [esp+C4h] [ebp-54h] BYREF + int v82[4]; // [esp+D8h] [ebp-40h] BYREF + char v83; // [esp+E8h] [ebp-30h] BYREF + int *v84; // [esp+F4h] [ebp-24h] BYREF + int v85[3]; // [esp+F8h] [ebp-20h] BYREF + volatile signed __int32 *v86[4]; // [esp+104h] [ebp-14h] BYREF + + while ( *(_DWORD *)(this + 24) != *(_DWORD *)(this + 8) ) + std::deque>::pop_back((_DWORD *)this); + while ( *(_DWORD *)(this + 64) != *(_DWORD *)(this + 48) ) + std::deque>::pop_back((_DWORD *)(this + 40)); + if ( !(_BYTE)`guard variable for'WXML::EXPRLib::TransitTable::GetInstance(void)::ret + && __cxa_guard_acquire(&`guard variable for'WXML::EXPRLib::TransitTable::GetInstance(void)::ret) ) + { + dword_53FCE0 = 0; + dword_53FCE4 = 0; + dword_53FCE8 = (int)&dword_53FCE0; + dword_53FCEC = (int)&dword_53FCE0; + dword_53FCF0 = 0; + byte_53FCF4 = 0; + __cxa_guard_release(&`guard variable for'WXML::EXPRLib::TransitTable::GetInstance(void)::ret); + atexit(__tcf_0_1); + } + WXML::EXPRLib::TransitTable::Init(v41); + WXML::EXPRLib::Tokenizer::Tokenizer(v77, *a2, a3, a4, a5); + v74 = 0; + v75 = 0; + v76 = 0; + Tokens = WXML::EXPRLib::Tokenizer::GetTokens((int *)v77, &v74, a6); + v43 = v7; + if ( Tokens ) + goto LABEL_78; + if ( v74 == (char *)v75 ) + { + v8 = operator new(0x40u); + memset(v8, 0, 0x40u); + *v8 = v8 + 2; + WXML::EXPRLib::Token::Token(v8 + 6); + v8[13] = 0; + v8[14] = 0; + v8[15] = 0; + zcc::shared_ptr::shared_ptr(v8); + *(_DWORD *)(this + 80) = v84; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)(this + 84), v85[0]); + v9 = (volatile signed __int32 **)v85; + goto LABEL_77; + } + WXML::EXPRLib::Token::Token(v82); + v82[0] = 5; + if ( v75 == v76 ) + { + std::vector::_M_realloc_insert( + &v74, + (char *)v75, + (WXML::EXPRLib::Token *)v82); + v44 = v10; + } + else + { + WXML::EXPRLib::Token::Token((int *)v75, (WXML::EXPRLib::Token *)v82, v43); + v75 += 28; + } + v11 = operator new(0x38u); + *v11 = &off_55F220; + v11[1] = v11 + 3; + v11[2] = 0; + *((_BYTE *)v11 + 12) = 0; + WXML::EXPRLib::Token::Token(v11 + 7); + zcc::shared_ptr::shared_ptr(&v68, (int)v11); + Blockh = v68; + std::string::basic_string((void **)&v84, "$"); + std::string::_M_assign((int)Blockh + 4, (int)&v84); + std::string::_M_dispose((void **)&v84); + std::deque>::push_back(this, (int *)&v68); + v12 = operator new(8u); + *v12 = &off_55F1E4; + v12[1] = 0; + zcc::shared_ptr::shared_ptr(&v70, (int)v12); + Block = v70; + if ( a7 ) + Block[1] = WXML::EXPRLib::TransitTable::GetAttrListNTType(); + else + Block[1] = WXML::EXPRLib::TransitTable::GetExprNTType(); + std::deque>::push_back(this, (int *)&v70); + v72 = 0; + v73 = 0; + v49 = 0; + while ( 1 ) + { + v13 = *(_DWORD *)(this + 24); + if ( *(_DWORD *)(this + 8) == v13 ) + break; + if ( v13 == *(_DWORD *)(this + 28) ) + v13 = *(_DWORD *)(*(_DWORD *)(this + 36) - 4) + 512; + v42 = *(_DWORD *)(v13 - 4); + v72 = *(_DWORD **)(v13 - 8); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(&v73, v42); + WXML::EXPRLib::Token::Token((int *)&v84, (WXML::EXPRLib::Token *)&v74[28 * v49], v44); + v15 = (*(int (__thiscall **)(_DWORD *, int))(*v72 + 8))(v72, v14); + Blocka = v72; + if ( v15 == 1 ) + { + TokenName = (char *)WXML::EXPRLib::Token::GetTokenName((const char **)&v84); + if ( !std::operator==((int)(Blocka + 1), TokenName) || v49 >= -1227133513 * ((v75 - (int)v74) >> 2) ) + { + std::string::operator=(a6, "error at token `"); + goto LABEL_66; + } + ++v49; + std::deque>::pop_back((_DWORD *)this); + if ( (unsigned int)v84 - 1 <= 3 ) + { + Blocki = operator new(0x40u); + *Blocki = Blocki + 2; + Blocki[1] = 0; + *((_BYTE *)Blocki + 8) = 0; + WXML::EXPRLib::Token::Token(Blocki + 6); + Blocki[13] = 0; + Blocki[14] = 0; + Blocki[15] = 0; + zcc::shared_ptr::shared_ptr(Blocki); + Blockb = v80; + v80[6] = v84; + for ( i = 0; i != 8; ++i ) + *((_BYTE *)Blockb + i + 28) = *((_BYTE *)v85 + i); + Blockb[9] = (int *)v85[2]; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)Blockb + 10, (int)v86[0]); + Blockb[11] = (int *)v86[1]; + Blockb[12] = (int *)v86[2]; + v18 = (char *)WXML::EXPRLib::Token::GetTokenName((const char **)&v84); + std::string::operator=((unsigned int *)v80, v18); + std::deque>::push_back(this + 40, (int *)&v80); + v19 = v81; +LABEL_37: + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v19); + } + } + else + { + if ( (*(int (__fastcall **)(_DWORD *))(*v72 + 8))(v72) == 3 ) + { + std::deque>::pop_back((_DWORD *)this); + v50 = v72; + v47 = v72[7]; + if ( v47 == 2 ) + { + if ( *(_DWORD *)(this + 48) == *(_DWORD *)(this + 64) ) + { + std::string::operator=(a6, "interal error: "); + std::string::operator+=(a6, "1001"); + std::string::operator+=(a6, ", expr: `"); + std::string::operator+=(a6, (int)a2); + std::string::operator+=(a6, "`"); + Tokens = 1001; + goto LABEL_72; + } + v20 = (int *)std::deque>::back((_DWORD *)(this + 40)); + std::__shared_ptr::__shared_ptr((int *)&v78, v20); + std::deque>::pop_back((_DWORD *)(this + 40)); + if ( *(_DWORD *)(this + 64) == *(_DWORD *)(this + 48) ) + { + std::string::operator=(a6, "interal error: "); + std::string::operator+=(a6, "1002"); + std::string::operator+=(a6, ", expr: `"); + std::string::operator+=(a6, (int)a2); + std::string::operator+=(a6, "`"); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v79); + Tokens = 1002; + goto LABEL_72; + } + v21 = (int *)std::deque>::back((_DWORD *)(this + 40)); + std::__shared_ptr::__shared_ptr((int *)&v80, v21); + std::vector>::push_back(v80 + 13, (int *)&v78); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v81); + } + else + { + v45 = v72[8]; + v22 = operator new(0x40u); + memset(v22, 0, 0x40u); + *v22 = v22 + 2; + WXML::EXPRLib::Token::Token(v22 + 6); + v22[13] = 0; + v22[14] = 0; + v22[15] = 0; + zcc::shared_ptr::shared_ptr(v22); + std::string::_M_assign((int)v78, (int)(v50 + 1)); + for ( Blockc = 0; (int)Blockc < v45; ++Blockc ) + { + if ( *(_DWORD *)(this + 64) == *(_DWORD *)(this + 48) ) + { + std::string::operator=(a6, "interal error: "); + std::string::operator+=(a6, "1003"); + std::string::operator+=(a6, ", expr: `"); + std::string::operator+=(a6, (int)a2); + std::string::operator+=(a6, "`"); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v79); + Tokens = 1003; + goto LABEL_72; + } + v23 = (int *)std::deque>::back((_DWORD *)(this + 40)); + std::vector>::push_back(v78 + 13, v23); + std::deque>::pop_back((_DWORD *)(this + 40)); + } + if ( !v47 ) + { + v24 = v78[14]; + if ( v78[13] != v24 ) + { + v51 = v78[13]; + for ( Blockd = (volatile signed __int32 **)(v24 - 2); Blockd > (volatile signed __int32 **)v51; Blockd -= 2 ) + { + std::__shared_ptr::__shared_ptr( + (int *)&v80, + v51); + *v51 = (int)*Blockd; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=( + (volatile signed __int32 **)v51 + 1, + (int)Blockd[1]); + *Blockd = (volatile signed __int32 *)v80; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(Blockd + 1, (int)v81[0]); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v81); + v51 += 2; + } + } + } + std::deque>::push_back(this + 40, (int *)&v78); + } + v19 = v79; + goto LABEL_37; + } + if ( (*(int (__fastcall **)(_DWORD *))(*v72 + 8))(v72) == 2 ) + { + v67 = v72[1]; + v46 = std::map>>::operator[]( + &WXML::EXPRLib::TransitTable::GetInstance(void)::ret, + &v67) + + 1; + Blockj = std::map>>::operator[]( + &WXML::EXPRLib::TransitTable::GetInstance(void)::ret, + &v67); + v25 = (char *)WXML::EXPRLib::Token::GetTokenName((const char **)&v84); + std::string::basic_string((void **)&v78, v25); + v48 = Blockj + 1; + v52 = (_DWORD *)Blockj[2]; + Blocke = Blockj + 1; + while ( v52 ) + { + v26 = (unsigned __int8)std::operator<((int)(v52 + 4), (int)&v78) == 0; + v27 = Blocke; + if ( v26 ) + v27 = v52; + v28 = (_DWORD *)v52[3]; + Blocke = v27; + if ( v26 ) + v28 = (_DWORD *)v52[2]; + v52 = v28; + } + if ( v48 != Blocke ) + { + v26 = (unsigned __int8)std::operator<((int)&v78, (int)(Blocke + 4)) == 0; + v29 = v48; + if ( v26 ) + v29 = Blocke; + Blocke = v29; + } + if ( Blocke == v46 ) + { + Blockf = 1; + } + else + { + v30 = (char *)WXML::EXPRLib::Token::GetTokenName((const char **)&v84); + std::string::basic_string((void **)&v80, v30); + v31 = std::map>>::operator[]( + &WXML::EXPRLib::TransitTable::GetInstance(void)::ret, + &v67); + v32 = std::map>::operator[](v31, &v80); + Blockf = *((_DWORD *)v32 + 1) == *(_DWORD *)v32; + std::string::_M_dispose((void **)&v80); + } + std::string::_M_dispose((void **)&v78); + if ( Blockf ) + { + std::string::operator=(a6, "unexpected token `"); +LABEL_66: + Literal = (char *)WXML::EXPRLib::Token::GetLiteral(&v84); + std::string::operator+=(a6, Literal); + std::string::operator+=(a6, "`"); + Tokens = -1; +LABEL_72: + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v86); + goto LABEL_76; + } + std::deque>::pop_back((_DWORD *)this); + v34 = (char *)WXML::EXPRLib::Token::GetTokenName((const char **)&v84); + std::string::basic_string((void **)&v80, v34); + v35 = std::map>>::operator[]( + &WXML::EXPRLib::TransitTable::GetInstance(void)::ret, + &v67); + v53 = std::map>::operator[](v35, &v80); + std::string::_M_dispose((void **)&v80); + for ( Blockg = ((*(_DWORD *)(*(_DWORD *)v53 + 4) - **(_DWORD **)v53) >> 3) - 1; Blockg >= 0; --Blockg ) + { + v36 = *(_DWORD *)(**(_DWORD **)v53 + 8 * Blockg); + if ( (*(int (__fastcall **)(int))(*(_DWORD *)v36 + 8))(v36) == 4 ) + break; + std::deque>::push_back(this, (int *)(**(_DWORD **)v53 + 8 * Blockg)); + } + } + } + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v86); + } + if ( *(_DWORD *)(this + 64) == *(_DWORD *)(this + 48) ) + { + std::string::operator=(a6, "interal error: "); + std::string::operator+=(a6, "1004"); + std::string::operator+=(a6, ", expr: `"); + std::string::operator+=(a6, (int)a2); + std::string::operator+=(a6, "`"); + Tokens = 1004; + } + else + { + v37 = (int *)std::deque>::back((_DWORD *)(this + 40)); + v38 = *v37; + v39 = v37[1]; + *(_DWORD *)(this + 80) = v38; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)(this + 84), v39); + } +LABEL_76: + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v73); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v71); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v69); + v9 = (volatile signed __int32 **)&v83; +LABEL_77: + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v9); +LABEL_78: + std::vector::~vector((void **)&v74); + std::string::_M_dispose(v77); + return Tokens; +} +// 42DBAF: variable 'v41' is possibly undefined +// 42DC28: variable 'v7' is possibly undefined +// 42DD16: variable 'v10' is possibly undefined +// 42DED8: variable 'v44' is possibly undefined +// 42DEF3: variable 'v14' is possibly undefined +// 53FCDC: using guessed type _DWORD WXML::EXPRLib::TransitTable::GetInstance(void)::ret; +// 53FCE0: using guessed type int dword_53FCE0; +// 53FCE4: using guessed type int dword_53FCE4; +// 53FCE8: using guessed type int dword_53FCE8; +// 53FCEC: using guessed type int dword_53FCEC; +// 53FCF0: using guessed type int dword_53FCF0; +// 53FCF4: using guessed type char byte_53FCF4; +// 55F1E4: using guessed type void (__cdecl *off_55F1E4)(WXML::EXPRLib::NonTerminal *__hidden this); +// 55F220: using guessed type void (__cdecl *off_55F220)(WXML::EXPRLib::Terminal *__hidden this); + +//----- (0042E948) -------------------------------------------------------- +void __usercall std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_erase( + _DWORD *a1@) +{ + _DWORD *v2; // esi + void *v3; // [esp+0h] [ebp-18h] + + while ( a1 ) + { + std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_erase(); + v2 = (_DWORD *)a1[2]; + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(a1[7]); + v3 = a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (0042E97C) -------------------------------------------------------- +void __tcf_0_1(void) +{ + std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_erase((_DWORD *)dword_53FCE4); +} +// 53FCE4: using guessed type int dword_53FCE4; + +//----- (0042E984) -------------------------------------------------------- +void __tcf_0_2(void) +{ + std::ios_base::Init::~Init(); +} + +//----- (0042E98E) -------------------------------------------------------- +unsigned int __thiscall std::string::_M_construct(void **this, unsigned __int8 *Src, size_t Size) +{ + unsigned int result; // eax + _BYTE *v5; // edx + unsigned int v6[7]; // [esp+1Ch] [ebp-1Ch] BYREF + + if ( !Src && Size ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v6[0] = Size - (_DWORD)Src; + if ( Size - (unsigned int)Src > 0xF ) + { + *this = std::string::_M_create(v6, 0); + this[2] = (void *)v6[0]; + } + std::string::_S_copy_chars(*this, Src, Size); + result = v6[0]; + v5 = *this; + this[1] = (void *)v6[0]; + v5[result] = 0; + return result; +} +// 42E98E: using guessed type unsigned int var_1C[7]; + +//----- (0042EA06) -------------------------------------------------------- +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2) +{ + unsigned __int8 *v3; // eax + unsigned __int8 *v4; // ecx + unsigned __int8 *v5; // edx + unsigned __int8 *v6; // eax + unsigned __int8 *v7; // edx + unsigned __int8 *result; // eax + unsigned __int8 *v9; // [esp+18h] [ebp-20h] + + v3 = *this; + v4 = *(unsigned __int8 **)a2; + v5 = *(unsigned __int8 **)(a2 + 4); + if ( *(_DWORD *)a2 == a2 + 8 ) + { + if ( v5 ) + std::string::_S_copy(v3, v4, *(_DWORD *)(a2 + 4)); + v6 = *(unsigned __int8 **)(a2 + 4); + v7 = *this; + this[1] = v6; + v6[(_DWORD)v7] = 0; + } + else + { + if ( v3 == (unsigned __int8 *)(this + 2) ) + v3 = 0; + else + v9 = this[2]; + *this = v4; + this[1] = v5; + this[2] = *(unsigned __int8 **)(a2 + 8); + if ( v3 ) + { + *(_DWORD *)a2 = v3; + *(_DWORD *)(a2 + 8) = v9; + } + else + { + *(_DWORD *)a2 = a2 + 8; + } + } + result = *(unsigned __int8 **)a2; + *(_DWORD *)(a2 + 4) = 0; + *result = 0; + return result; +} +// 42EA6D: variable 'v9' is possibly undefined + +//----- (0042EA8E) -------------------------------------------------------- +const char *__fastcall WXML::EXPRLib::Token::GetTokenName(const char **a1) +{ + const char *result; // eax + + result = *a1; + switch ( (unsigned int)*a1 ) + { + case 0u: + result = (const char *)(a1 + 1); + break; + case 1u: + result = "$DECIMAL"; + break; + case 2u: + result = "$STRING"; + break; + case 3u: + result = "$VAR"; + break; + case 4u: + result = "$KEYWORD"; + break; + default: + return result; + } + return result; +} + +//----- (0042EABE) -------------------------------------------------------- +const char *__fastcall WXML::EXPRLib::Token::GetLiteral(_DWORD *a1) +{ + const char *result; // eax + int v2; // edx + + result = (const char *)(a1 + 1); + if ( *a1 ) + { + result = "$"; + if ( *a1 != 5 ) + { + v2 = a1[3]; + result = (const char *)&unk_5545E0; + if ( v2 ) + return *(const char **)v2; + } + } + return result; +} + +//----- (0042EAE0) -------------------------------------------------------- +void WXML::EXPRLib::Tokenizer::InitTransitTable() +{ + const char *i; // edx + int v1; // eax + const char *j; // edx + int v3; // eax + const char *k; // edx + int v5; // eax + const char *m; // edx + int v7; // eax + const char *v8; // edx + int v9; // eax + const char *n; // edx + int v11; // eax + const char *ii; // edx + int v13; // eax + const char *v14; // edx + int v15; // eax + const char *v16; // edx + int v17; // eax + + if ( !WXML::EXPRLib::Tokenizer::InitTransitTable(void)::bInited ) + { + WXML::EXPRLib::Tokenizer::InitTransitTable(void)::bInited = 1; + for ( i = " \n\t\r"; ; ++i ) + { + v1 = *i; + if ( !(_BYTE)v1 ) + break; + dword_6689A4[v1] = 8388609; + } + for ( j = "$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"; ; ++j ) + { + v3 = *j; + if ( !(_BYTE)v3 ) + break; + dword_6689A4[v3] = 13; + } + for ( k = "0123456789"; ; ++k ) + { + v5 = *k; + if ( !(_BYTE)v5 ) + break; + dword_6689A4[v5] = 10; + } + for ( m = "+-*/%^~()[],?:{}"; ; ++m ) + { + v7 = *m; + if ( !(_BYTE)v7 ) + break; + dword_6689A4[v7] = 327681; + } + dword_668A5C = 3; + v8 = "$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"; + dword_668A2C = 6; + dword_668A40 = 8; + dword_668A98 = 12; + dword_668B94 = 15; + dword_668A3C = 14; + dword_668A94 = 16; + dword_668A9C = 17; + dword_668A28 = 18; + dword_6689A4[0] = 8519681; + dword_668DA4 = -1; + dword_668A60 = 21; + dword_66DA9C = 22; + dword_66DDF4 = 4325377; + dword_66DEA0 = 23; + dword_66E1F8 = 8388630; + dword_66E2B8 = 8388609; + dword_66E2A4 = 4194326; + dword_66E5FC = 22; + while ( 1 ) + { + v9 = *v8; + if ( !(_BYTE)v9 ) + break; + dword_66B9D4[v9] = 13; + ++v8; + } + for ( n = "0123456789"; ; ++n ) + { + v11 = *n; + if ( !(_BYTE)v11 ) + break; + dword_66B9D4[v11] = 13; + } + dword_66BDD4 = (int)&unk_620001; + for ( ii = "0123456789"; ; ++ii ) + { + v13 = *ii; + if ( !(_BYTE)v13 ) + break; + dword_6691AC[v13] = 11; + } + dword_669264 = 4; + v14 = "0123456789"; + dword_6695AC = (int)&loc_460001; + dword_669668 = 327681; + dword_6699B0 = -1; + while ( 1 ) + { + v15 = *v14; + if ( !(_BYTE)v15 ) + break; + dword_66ADC8[v15] = 10; + ++v14; + } + dword_66AE80 = 11; + v16 = "0123456789"; + dword_66B1C8 = (int)&loc_4A0000 + 1; + while ( 1 ) + { + v17 = *v16; + if ( !(_BYTE)v17 ) + break; + dword_66B1CC[v17] = 11; + ++v16; + } + dword_66B5CC = (int)&loc_4A0000 + 1; + dword_66B6C4 = 19; + dword_66B9D0 = -1; + dword_66D2E0 = 327681; + dword_66D5EC = (int)&loc_460001; + dword_66BE70 = 327681; + dword_66C1D8 = 4325377; + dword_66C3CC = 327681; + dword_66C5DC = 4325377; + dword_668E9C = 327681; + dword_6691A8 = (int)&loc_460001; + dword_669F28 = 7; + dword_669DE0 = 9568257; + dword_66A5BC = 6; + dword_66A1E4 = 9568257; + dword_669E40 = 1114113; + dword_66A1B8 = 6; + dword_66A730 = 9; + dword_66A5E8 = 9568257; + dword_66ADC4 = 8; + dword_66A9EC = 9568257; + dword_66A65C = 1114113; + dword_66A9C0 = 8; + dword_66C6D4 = 327681; + dword_66C6D0 = 327681; + dword_66C9E0 = (int)&loc_460001; + dword_66CAD8 = 327681; + dword_66CADC = 327681; + dword_66CDE4 = (int)&loc_460001; + dword_66CEDC = 20; + dword_66D6E4 = 327681; + dword_66D9F0 = (int)&loc_460001; + dword_66D1E8 = (int)&loc_460001; + } +} +// 6689A4: using guessed type int dword_6689A4[33]; +// 668A28: using guessed type int dword_668A28; +// 668A2C: using guessed type int dword_668A2C; +// 668A3C: using guessed type int dword_668A3C; +// 668A40: using guessed type int dword_668A40; +// 668A5C: using guessed type int dword_668A5C; +// 668A60: using guessed type int dword_668A60; +// 668A94: using guessed type int dword_668A94; +// 668A98: using guessed type int dword_668A98; +// 668A9C: using guessed type int dword_668A9C; +// 668B94: using guessed type int dword_668B94; +// 668DA4: using guessed type int dword_668DA4; +// 668E9C: using guessed type int dword_668E9C; +// 6691A8: using guessed type int dword_6691A8; +// 6691AC: using guessed type int dword_6691AC[46]; +// 669264: using guessed type int dword_669264; +// 6695AC: using guessed type int dword_6695AC; +// 669668: using guessed type int dword_669668; +// 6699B0: using guessed type int dword_6699B0; +// 669DE0: using guessed type int dword_669DE0; +// 669E40: using guessed type int dword_669E40; +// 669F28: using guessed type int dword_669F28; +// 66A1B8: using guessed type int dword_66A1B8; +// 66A1E4: using guessed type int dword_66A1E4; +// 66A5BC: using guessed type int dword_66A5BC; +// 66A5E8: using guessed type int dword_66A5E8; +// 66A65C: using guessed type int dword_66A65C; +// 66A730: using guessed type int dword_66A730; +// 66A9C0: using guessed type int dword_66A9C0; +// 66A9EC: using guessed type int dword_66A9EC; +// 66ADC4: using guessed type int dword_66ADC4; +// 66ADC8: using guessed type int dword_66ADC8[46]; +// 66AE80: using guessed type int dword_66AE80; +// 66B1C8: using guessed type int dword_66B1C8; +// 66B1CC: using guessed type int dword_66B1CC[256]; +// 66B5CC: using guessed type int dword_66B5CC; +// 66B6C4: using guessed type int dword_66B6C4; +// 66B9D0: using guessed type int dword_66B9D0; +// 66B9D4: using guessed type int dword_66B9D4[256]; +// 66BDD4: using guessed type int dword_66BDD4; +// 66BE70: using guessed type int dword_66BE70; +// 66C1D8: using guessed type int dword_66C1D8; +// 66C3CC: using guessed type int dword_66C3CC; +// 66C5DC: using guessed type int dword_66C5DC; +// 66C6D0: using guessed type int dword_66C6D0; +// 66C6D4: using guessed type int dword_66C6D4; +// 66C9E0: using guessed type int dword_66C9E0; +// 66CAD8: using guessed type int dword_66CAD8; +// 66CADC: using guessed type int dword_66CADC; +// 66CDE4: using guessed type int dword_66CDE4; +// 66CEDC: using guessed type int dword_66CEDC; +// 66D1E8: using guessed type int dword_66D1E8; +// 66D2E0: using guessed type int dword_66D2E0; +// 66D5EC: using guessed type int dword_66D5EC; +// 66D6E4: using guessed type int dword_66D6E4; +// 66D9F0: using guessed type int dword_66D9F0; +// 66DA9C: using guessed type int dword_66DA9C; +// 66DDF4: using guessed type int dword_66DDF4; +// 66DEA0: using guessed type int dword_66DEA0; +// 66E1F8: using guessed type int dword_66E1F8; +// 66E2A4: using guessed type int dword_66E2A4; +// 66E2B8: using guessed type int dword_66E2B8; +// 66E5FC: using guessed type int dword_66E5FC; +// 7695A0: using guessed type char WXML::EXPRLib::Tokenizer::InitTransitTable(void)::bInited; + +//----- (0042EE2E) -------------------------------------------------------- +unsigned int __thiscall WXML::EXPRLib::Tokenizer::Tokenizer(void **this, char *Str, int a3, int a4, int a5) +{ + size_t v5; // eax + size_t v6; // eax + void **v8; // [esp+1Ch] [ebp-Ch] + + *this = this + 2; + v5 = -1; + if ( Str ) + { + v8 = this; + v6 = strlen(Str); + this = v8; + v5 = (size_t)&Str[v6]; + } + return std::string::_M_construct(this, (unsigned __int8 *)Str, v5); +} + +//----- (0042EE69) -------------------------------------------------------- +_DWORD *__usercall std::__relocate_a_1>@( + _DWORD *a1@, + _DWORD *a2@, + _DWORD *a3@) +{ + int v6; // edx + int v7; // ecx + int v8; // eax + volatile signed __int32 **v9; // ecx + + while ( a1 != a2 ) + { + *a3 = *a1; + v6 = a1[2]; + a3[1] = a1[1]; + a3[2] = v6; + v7 = a1[4]; + a3[3] = a1[3]; + a3[4] = v7; + if ( v7 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy(v7); + v8 = a1[5]; + v9 = (volatile signed __int32 **)(a1 + 4); + a3 += 7; + a1 += 7; + *(a3 - 2) = v8; + *(a3 - 1) = *(a1 - 1); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v9); + } + return a3; +} + +//----- (0042EEC8) -------------------------------------------------------- +int __thiscall WXML::EXPRLib::Tokenizer::GetTokens(int *this, _DWORD *a2, unsigned int *a3) +{ + unsigned __int8 v3; // di + std::ostream::sentry *v4; // eax + std::ostream::sentry *v5; // eax + std::ostream::sentry *v6; // eax + std::ostream::sentry *v7; // eax + int v8; // edx + int *v9; // ebx + char *v10; // eax + char v11; // cl + volatile signed __int32 *v12; // eax + void **v13; // edx + void **v14; // ecx + volatile signed __int32 *v15; // edx + int v17; // edx + volatile signed __int32 *v18; // ecx + int v19; // eax + int v21; // [esp+14h] [ebp-154h] + int v23; // [esp+1Ch] [ebp-14Ch] + int v24; // [esp+20h] [ebp-148h] + int v25; // [esp+24h] [ebp-144h] + const char **v26; // [esp+24h] [ebp-144h] + int v27; // [esp+28h] [ebp-140h] + int v28; // [esp+2Ch] [ebp-13Ch] + int v29; // [esp+30h] [ebp-138h] + volatile signed __int32 *v30; // [esp+30h] [ebp-138h] + const char **v31; // [esp+30h] [ebp-138h] + int v32; // [esp+30h] [ebp-138h] + void **Block; // [esp+34h] [ebp-134h] + struct _Unwind_Exception *lpuexcpt; // [esp+38h] [ebp-130h] BYREF + void **v35; // [esp+70h] [ebp-F8h] + volatile signed __int32 *v36; // [esp+74h] [ebp-F4h] BYREF + void **v37; // [esp+78h] [ebp-F0h] BYREF + volatile signed __int32 *v38; // [esp+7Ch] [ebp-ECh] BYREF + int v39; // [esp+90h] [ebp-D8h] BYREF + int v40[2]; // [esp+94h] [ebp-D4h] BYREF + const char **v41; // [esp+9Ch] [ebp-CCh] BYREF + volatile signed __int32 *v42; // [esp+A0h] [ebp-C8h] BYREF + int v43; // [esp+A4h] [ebp-C4h] + int v44; // [esp+A8h] [ebp-C0h] + + WXML::EXPRLib::Tokenizer::InitTransitTable(); + v21 = 18899; + v24 = 1; + v28 = 0; + v29 = 0; + v23 = this[1]; + while ( v28 <= v23 ) + { + if ( !--v21 ) + { + std::string::_M_replace(a3, 0, a3[1], "something must be wrong", 0x17u); + return -1; + } + v25 = *this; + v3 = *(_BYTE *)(*this + v28); + if ( v28 == v23 ) + v3 = 0; + lpuexcpt = (struct _Unwind_Exception *)WXML::EXPRLib::Tokenizer::TT[257 * v24 + v3]; + if ( !lpuexcpt ) + { + lpuexcpt = (struct _Unwind_Exception *)dword_6689A0[257 * v24]; + if ( !lpuexcpt ) + { + std::basic_stringstream,std::allocator>::basic_stringstream((int)&v39); + std::operator<<>((std::ostream::sentry *)&v40[1], "no transition for "); + v4 = (std::ostream::sentry *)std::ostream::operator<<(v24); + v5 = std::operator<<>(v4, " with input "); + std::operator<<>(v5, v3); + std::stringbuf::str((int)&v37, (int)&v41); + std::string::operator=((unsigned __int8 **)a3, (int)&v37); + std::string::_M_dispose((void **)&v37); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)&v39); + return -1; + } + } + if ( lpuexcpt == (struct _Unwind_Exception *)-1 ) + { + std::basic_stringstream,std::allocator>::basic_stringstream((int)&v39); + v6 = std::operator<<>((std::ostream::sentry *)&v40[1], "unexpected `"); + v7 = std::operator<<>(v6, v3); + std::operator<<>(v7, "` at pos"); + std::ostream::operator<<(v28); + std::stringbuf::str((int)&v37, (int)&v41); + std::string::operator=((unsigned __int8 **)a3, (int)&v37); + std::string::_M_dispose((void **)&v37); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)&v39); + return (int)lpuexcpt; + } + v24 = (unsigned __int16)lpuexcpt; + if ( ((unsigned int)lpuexcpt & 0x30000) != 0 ) + { + v8 = 1; + v27 = (((unsigned int)lpuexcpt & 0x20000) == 0) + v28 - 1; + if ( !_bittest((const signed __int32 *)&lpuexcpt, 0x13u) ) + { + v8 = 2; + if ( !_bittest((const signed __int32 *)&lpuexcpt, 0x14u) ) + v8 = ((int)((_DWORD)lpuexcpt << 10) >> 31) & 3; + } + if ( v29 <= v27 ) + { + v9 = v40; + v41 = 0; + v42 = 0; + memset(v40, 0, sizeof(v40)); + v39 = v8; + v43 = 0; + v44 = 0; + if ( v8 ) + { + Block = (void **)operator new(0x18u); + *Block = Block + 2; + std::string::_M_construct(Block, (unsigned __int8 *)(v29 + v25), v25 + v27 + 1); + v35 = 0; + v36 = 0; + v37 = Block; + v38 = 0; + v12 = (volatile signed __int32 *)operator new(0x10u); + v13 = v37; + *((_DWORD *)v12 + 1) = 1; + v14 = v35; + *((_DWORD *)v12 + 2) = 1; + *v12 = (volatile signed __int32)&off_5603EC; + *((_DWORD *)v12 + 3) = Block; + v35 = v13; + v15 = v36; + v37 = v14; + v36 = v12; + v38 = v15; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v38); + v41 = (const char **)v35; + v30 = v36; + if ( v36 != v42 ) + { + if ( v36 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy((int)v36); + if ( v42 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release(v42); + v42 = v30; + } + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v36); + v31 = (const char **)WXML::EXPRLib::Tokenizer::GetTokens(std::vector &,std::string &)::KEYWORDS; + v26 = v41; + while ( *v31 ) + { + if ( !strcmp(*v26, *v31++) ) + { + v39 = 4; + break; + } + } + } + else + { + v10 = (char *)(v29 + v25); + do + { + v11 = *v10++; + v9 = (int *)((char *)v9 + 1); + *((_BYTE *)v9 - 1) = v11; + } + while ( v10 != (char *)(v25 + v27 + 1) ); + *((_BYTE *)v40 + v27 + 1 - v29) = 0; + } + v32 = a2[1]; + if ( v32 == a2[2] ) + { + std::vector::_M_realloc_insert( + a2, + (char *)v32, + (WXML::EXPRLib::Token *)&v39); + } + else + { + *(_DWORD *)v32 = v39; + v17 = v40[1]; + *(_DWORD *)(v32 + 4) = v40[0]; + *(_DWORD *)(v32 + 8) = v17; + v18 = v42; + *(_DWORD *)(v32 + 12) = v41; + *(_DWORD *)(v32 + 16) = v18; + if ( v18 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy((int)v18); + *(_DWORD *)(v32 + 20) = v43; + *(_DWORD *)(v32 + 24) = v44; + a2[1] += 28; + } + v29 = v27 + 1; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v42); + } + } + v19 = v29; + v28 += ((unsigned int)lpuexcpt & 0x400000) == 0; + if ( ((unsigned int)lpuexcpt & 0x800000) != 0 ) + v19 = v28; + v29 = v19; + } + return 0; +} +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); +// 5546D8: using guessed type char *WXML::EXPRLib::Tokenizer::GetTokens(std::vector &,std::string &)::KEYWORDS[4]; +// 5603EC: using guessed type int (*off_5603EC)(); +// 6685A0: using guessed type int WXML::EXPRLib::Tokenizer::TT[]; +// 6689A0: using guessed type int dword_6689A0[]; + +//----- (0042F5E4) -------------------------------------------------------- +void __tcf_1_5(void) +{ + std::ios_base::Init::~Init(); +} + +//----- (0042F5EE) -------------------------------------------------------- +size_t __thiscall std::string::basic_string(void **this, char *Str) +{ + char *v3; // edi + size_t result; // eax + _BYTE *v5; // edx + size_t v6[7]; // [esp+1Ch] [ebp-1Ch] BYREF + + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v6[0] = strlen(Str); + v3 = &Str[v6[0]]; + if ( v6[0] > 0xF ) + { + *this = std::string::_M_create(v6, 0); + this[2] = (void *)v6[0]; + } + std::string::_S_copy_chars(*this, (unsigned __int8 *)Str, (size_t)v3); + result = v6[0]; + v5 = *this; + this[1] = (void *)v6[0]; + v5[result] = 0; + return result; +} +// 42F5EE: using guessed type size_t var_1C[7]; + +//----- (0042F66C) -------------------------------------------------------- +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str) +{ + size_t v2; // eax + + v2 = strlen(Str); + return std::string::_M_replace(this, 0, this[1], Str, v2); +} + +//----- (0042F6AA) -------------------------------------------------------- +int WXML::EXPRLib::TransitTable::GetExprNTType() +{ + return 14; +} + +//----- (0042F6B0) -------------------------------------------------------- +int WXML::EXPRLib::TransitTable::GetAttrListNTType() +{ + return 12; +} + +//----- (0042F6B6) -------------------------------------------------------- +void __thiscall std::vector::_M_move_assign(void *this, int *a2) +{ + void **v2; // ebx + void **v3; // edx + int v4; // edi + int v5; // edi + void **v6[9]; // [esp+4h] [ebp-24h] BYREF + + v2 = (void **)*((_DWORD *)this + 1); + v3 = (void **)*((_DWORD *)this + 2); + v4 = *a2; + v6[0] = *(void ***)this; + v6[1] = v2; + *(_DWORD *)this = v4; + v5 = a2[1]; + v6[2] = v3; + *((_DWORD *)this + 1) = v5; + *((_DWORD *)this + 2) = a2[2]; + *a2 = 0; + a2[1] = 0; + a2[2] = 0; + std::vector::~vector(v6); +} + +//----- (0042F70A) -------------------------------------------------------- +void __usercall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase( + int a1@) +{ + int v2; // esi + void *v3; // [esp+0h] [ebp-28h] + + while ( a1 ) + { + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(); + v2 = *(_DWORD *)(a1 + 8); + std::vector::~vector((void ***)(a1 + 40)); + std::string::_M_dispose((void **)(a1 + 16)); + v3 = (void *)a1; + a1 = v2; + operator delete(v3); + } +} + +//----- (0042F74A) -------------------------------------------------------- +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::operator=( + _DWORD *this, + _DWORD *a2) +{ + int result; // eax + int v4; // edi + + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(this[2]); + this[2] = 0; + this[3] = this + 1; + this[4] = this + 1; + result = a2[2]; + this[5] = 0; + if ( result ) + { + v4 = a2[1]; + this[2] = result; + this[1] = v4; + this[3] = a2[3]; + this[4] = a2[4]; + *(_DWORD *)(result + 4) = this + 1; + result = a2[5]; + this[5] = result; + a2[2] = 0; + a2[3] = a2 + 1; + a2[4] = a2 + 1; + a2[5] = 0; + } + return result; +} + +//----- (0042F7BE) -------------------------------------------------------- +#error "42F7BE: too big function (funcsize=0)" + +//----- (0045688C) -------------------------------------------------------- +void __tcf_0_3(void) +{ + std::ios_base::Init::~Init(); +} + +//----- (00456896) -------------------------------------------------------- +unsigned __int8 *__thiscall std::string::operator=(unsigned __int8 **this, int a2) +{ + unsigned __int8 *v3; // eax + unsigned __int8 *v4; // ecx + unsigned __int8 *v5; // edx + unsigned __int8 *v6; // eax + unsigned __int8 *v7; // edx + unsigned __int8 *result; // eax + unsigned __int8 *v9; // [esp+18h] [ebp-20h] + + v3 = *this; + v4 = *(unsigned __int8 **)a2; + v5 = *(unsigned __int8 **)(a2 + 4); + if ( *(_DWORD *)a2 == a2 + 8 ) + { + if ( v5 ) + std::string::_S_copy(v3, v4, *(_DWORD *)(a2 + 4)); + v6 = *(unsigned __int8 **)(a2 + 4); + v7 = *this; + this[1] = v6; + v6[(_DWORD)v7] = 0; + } + else + { + if ( v3 == (unsigned __int8 *)(this + 2) ) + v3 = 0; + else + v9 = this[2]; + *this = v4; + this[1] = v5; + this[2] = *(unsigned __int8 **)(a2 + 8); + if ( v3 ) + { + *(_DWORD *)a2 = v3; + *(_DWORD *)(a2 + 8) = v9; + } + else + { + *(_DWORD *)a2 = a2 + 8; + } + } + result = *(unsigned __int8 **)a2; + *(_DWORD *)(a2 + 4) = 0; + *result = 0; + return result; +} +// 4568FD: variable 'v9' is possibly undefined + +//----- (0045691E) -------------------------------------------------------- +unsigned int __thiscall std::string::basic_string(void **this, unsigned __int8 *Src, unsigned int a3) +{ + unsigned int result; // eax + _BYTE *v5; // edx + unsigned int v6[7]; // [esp+1Ch] [ebp-1Ch] BYREF + + *this = this + 2; + if ( &Src[a3] && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v6[0] = a3; + if ( a3 > 0xF ) + { + *this = std::string::_M_create(v6, 0); + this[2] = (void *)v6[0]; + } + std::string::_S_copy_chars(*this, Src, (size_t)&Src[a3]); + result = v6[0]; + v5 = *this; + this[1] = (void *)v6[0]; + v5[result] = 0; + return result; +} +// 45691E: using guessed type unsigned int var_1C[7]; + +//----- (00456999) -------------------------------------------------------- +int __cdecl WXML::StringTemplating::Deal(char *Str, int a2, char **a3, _BYTE *a4) +{ + size_t v4; // eax + int v5; // edx + char v6; // al + char v7; // cl + char *v8; // eax + char v9; // cl + char v10; // cl + bool v11; // zf + int v12; // eax + int v13; // eax + char *v14; // eax + signed int v16; // [esp+10h] [ebp-88h] + int v17; // [esp+14h] [ebp-84h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-80h] + void *v19[6]; // [esp+5Ch] [ebp-3Ch] BYREF + int v20; // [esp+74h] [ebp-24h] BYREF + char *v21; // [esp+78h] [ebp-20h] BYREF + int v22; // [esp+7Ch] [ebp-1Ch] + char v23[20]; // [esp+80h] [ebp-18h] BYREF + + v4 = strlen(Str); + lpuexcpt = 0; + v5 = 0; + v16 = v4; + v17 = 0; + while ( 1 ) + { + v6 = *((_BYTE *)lpuexcpt + (_DWORD)Str); + if ( (int)lpuexcpt >= v16 || !v6 ) + break; + v7 = *((_BYTE *)lpuexcpt + (_DWORD)Str + 1); + if ( v17 == 2 ) + { + if ( v6 == 92 ) + goto LABEL_37; + v11 = v6 == 34; +LABEL_39: + v12 = 1; +LABEL_40: + if ( !v11 ) + v12 = v17; + v17 = v12; + goto LABEL_44; + } + if ( v17 > 2 ) + { + if ( v6 == 92 ) + { +LABEL_37: + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + goto LABEL_44; + } + v11 = v6 == 39; + goto LABEL_39; + } + if ( v17 ) + { + if ( v6 != 125 || v7 != 125 ) + { + if ( v6 == 34 ) + { + v17 = 2; + goto LABEL_44; + } + v11 = v6 == 39; + v12 = 4; + goto LABEL_40; + } + if ( (int)lpuexcpt > v5 ) + { + v8 = (char *)lpuexcpt - 1; + while ( 1 ) + { + v9 = Str[v5]; + if ( v9 != 32 && v9 != 9 ) + break; + ++v5; + } + while ( v5 < (int)v8 ) + { + v10 = v8[(_DWORD)Str]; + if ( v10 != 32 && v10 != 9 ) + goto LABEL_30; + --v8; + } + if ( (char *)v5 != v8 ) + goto LABEL_31; +LABEL_30: + v21 = v23; + v22 = 0; + v23[0] = 0; + v20 = 0; + std::string::basic_string(v19, (unsigned __int8 *)&Str[v5], (unsigned int)&v8[-v5 + 1]); + std::string::operator=((unsigned __int8 **)&v21, (int)v19); + std::string::_M_dispose(v19); + v20 = 1; + std::vector::push_back(a3, &v20); + *a4 = 1; + std::string::_M_dispose((void **)&v21); + } +LABEL_31: + v17 = 0; + v5 = (int)lpuexcpt + 2; + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + } + else if ( v6 == 123 && v7 == 123 ) + { + if ( (int)lpuexcpt > v5 ) + { + v23[0] = 0; + v21 = v23; + v22 = 0; + v20 = 0; + std::string::basic_string(v19, (unsigned __int8 *)&Str[v5], (unsigned int)lpuexcpt - v5); + std::string::operator=((unsigned __int8 **)&v21, (int)v19); + std::string::_M_dispose(v19); + v20 = 0; + std::vector::push_back(a3, &v20); + std::string::_M_dispose((void **)&v21); + } + v17 = 1; + v5 = (int)lpuexcpt + 2; + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + } +LABEL_44: + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + } + if ( v17 ) + return 1; + v13 = ~((unsigned int)lpuexcpt - v16); + if ( (int)lpuexcpt < v16 - 1 ) + v13 = 0; + v14 = (char *)lpuexcpt + v13; + if ( v5 <= (int)v14 ) + { + v23[0] = 0; + v21 = v23; + v22 = 0; + v20 = 0; + std::string::basic_string(v19, (unsigned __int8 *)&Str[v5], (unsigned int)&v14[-v5 + 1]); + std::string::operator=((unsigned __int8 **)&v21, (int)v19); + std::string::_M_dispose(v19); + std::vector::push_back(a3, &v20); + std::string::_M_dispose((void **)&v21); + } + return v17; +} +// 456A2B: conditional instruction was optimized away because %var_84.4==1 +// 456A3D: conditional instruction was optimized away because %var_84.4==4 + +//----- (00456CF0) -------------------------------------------------------- +_DWORD *__usercall d_make_comp@(_DWORD *a1@, int a2@, int a3@, int a4) +{ + int v5; // ebx + _DWORD *v6; // ecx + _DWORD *result; // eax + + switch ( a2 ) + { + case 0: + case 5: + case 6: + case 7: + case 8: + case 24: + case 39: + case 44: + case 50: + case 51: + case 65: + case 66: + case 70: + case 71: + case 72: + return 0; + case 1: + case 2: + case 3: + case 4: + case 11: + case 33: + case 43: + case 45: + case 55: + case 56: + case 57: + case 58: + case 59: + case 61: + case 62: + case 64: + case 76: + case 78: + if ( a3 ) + goto LABEL_3; + return 0; + case 9: + case 10: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 20: + case 21: + case 22: + case 23: + case 34: + case 35: + case 36: + case 37: + case 38: + case 40: + case 48: + case 52: + case 53: + case 54: + case 60: + case 63: + case 67: + case 68: + case 69: + case 73: + case 74: + case 75: + if ( !a3 ) + return 0; + goto LABEL_4; + case 25: + case 26: + case 27: + case 28: + case 29: + case 30: + case 31: + case 32: + case 41: + case 46: + case 47: + case 77: + case 79: + case 80: + goto LABEL_4; + case 42: + case 49: +LABEL_3: + if ( !a4 ) + return 0; +LABEL_4: + v5 = a1[5]; + if ( v5 >= a1[6] ) + return 0; + v6 = (_DWORD *)(a1[4] + 20 * v5); + v6[1] = 0; + v6[2] = 0; + a1[5] = v5 + 1; + *v6 = a2; + v6[4] = a4; + result = v6; + v6[3] = a3; + return result; + default: + return 0; + } +} + +//----- (00456D70) -------------------------------------------------------- +_DWORD *__usercall d_make_name@(_DWORD *a1@, int a2@, int a3@) +{ + int v4; // ecx + _DWORD *v6; // edx + _DWORD *result; // eax + + v4 = a1[5]; + if ( v4 >= a1[6] ) + return 0; + v6 = (_DWORD *)(a1[4] + 20 * v4); + v6[1] = 0; + v6[2] = 0; + a1[5] = v4 + 1; + if ( !a2 || a3 <= 0 ) + return 0; + v6[1] = 0; + result = v6; + v6[2] = 0; + *v6 = 0; + v6[3] = a2; + v6[4] = a3; + return result; +} + +//----- (00456DD0) -------------------------------------------------------- +int __usercall d_number@(int a1@) +{ + char *v1; // ebx + char v2; // cl + _BYTE *v3; // ebx + signed int v4; // esi + int v5; // ecx + int v7; // [esp+0h] [ebp-14h] + + v1 = *(char **)(a1 + 12); + v2 = *v1; + if ( *v1 != 110 ) + { + if ( (unsigned __int8)(v2 - 48) <= 9u ) + { + v7 = 0; + goto LABEL_4; + } + return 0; + } + *(_DWORD *)(a1 + 12) = v1 + 1; + v2 = v1[1]; + if ( (unsigned __int8)(v2 - 48) > 9u ) + return 0; + v7 = 1; + ++v1; +LABEL_4: + v3 = v1 + 1; + v4 = 0; + v5 = (char)(v2 - 48); + while ( 1 ) + { + *(_DWORD *)(a1 + 12) = v3; + v4 = v5 + 10 * v4; + LOBYTE(v5) = *v3 - 48; + if ( (unsigned __int8)v5 > 9u ) + break; + v5 = (char)v5; + ++v3; + if ( (int)((0x7FFFFFFF - (char)v5) / 0xAu) < v4 ) + return -1; + } + if ( v7 ) + return -v4; + return v4; +} + +//----- (00456EA0) -------------------------------------------------------- +int __usercall d_call_offset@(int a1@, int a2@) +{ + _BYTE *v3; // eax + _BYTE *v4; // eax + _BYTE *v6; // eax + + if ( !a2 ) + { + v3 = *(_BYTE **)(a1 + 12); + if ( !*v3 ) + return 0; + *(_DWORD *)(a1 + 12) = v3 + 1; + a2 = (char)*v3; + } + if ( a2 != 104 ) + { + if ( a2 != 118 ) + return 0; + d_number(a1); + v4 = *(_BYTE **)(a1 + 12); + if ( *v4 != 95 ) + return 0; + *(_DWORD *)(a1 + 12) = v4 + 1; + } + d_number(a1); + v6 = *(_BYTE **)(a1 + 12); + if ( *v6 != 95 ) + return 0; + *(_DWORD *)(a1 + 12) = v6 + 1; + return 1; +} + +//----- (00456F00) -------------------------------------------------------- +_DWORD *__usercall d_ref_qualifier@(_DWORD *a1@, _DWORD *a2@) +{ + _DWORD *result; // eax + char *v4; // edx + char v5; // cl + int v6; // ebp + int v7; // esi + int v8; // edi + + result = a2; + v4 = (char *)a1[3]; + v5 = *v4; + if ( *v4 == 82 || v5 == 79 ) + { + v6 = a1[11]; + v7 = 32; + v8 = v6 + 3; + if ( v5 == 82 ) + { + v8 = v6 + 2; + v7 = 31; + } + a1[11] = v8; + a1[3] = v4 + 1; + return d_make_comp(a1, v7, (int)result, 0); + } + return result; +} + +//----- (00456F70) -------------------------------------------------------- +int __usercall d_discriminator@(int a1@) +{ + _BYTE *v2; // eax + int v3; // edx + int result; // eax + int v5; // eax + _BYTE *v6; // edx + + v2 = *(_BYTE **)(a1 + 12); + if ( *v2 != 95 ) + return 1; + *(_DWORD *)(a1 + 12) = v2 + 1; + if ( v2[1] != 95 ) + { + v3 = d_number(a1); + result = 0; + if ( v3 < 0 ) + return result; + return 1; + } + *(_DWORD *)(a1 + 12) = v2 + 2; + v5 = d_number(a1); + if ( v5 < 0 ) + return 0; + if ( v5 <= 9 ) + return 1; + v6 = *(_BYTE **)(a1 + 12); + result = 0; + if ( *v6 == 95 ) + { + *(_DWORD *)(a1 + 12) = v6 + 1; + return 1; + } + return result; +} + +//----- (00456FD0) -------------------------------------------------------- +int __usercall d_count_templates_scopes@(int result@, int *a2@, int a3@) +{ + _DWORD *v3; // esi + int *v4; // ebx + int v5; // edx + _DWORD *v6; // eax + int v7; // ecx + + if ( a2 ) + { + v3 = (_DWORD *)result; + v4 = a2; + while ( 2 ) + { + result = v4[2]; + if ( result <= 1 ) + { + v5 = v3[71]; + if ( v5 <= 1024 ) + { + v4[2] = result + 1; + result = *v4; + switch ( *v4 ) + { + case 1: + case 2: + case 3: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 20: + case 21: + case 22: + case 23: + case 25: + case 26: + case 27: + case 28: + case 29: + case 30: + case 31: + case 32: + case 33: + case 34: + case 37: + case 38: + case 40: + case 41: + case 42: + case 43: + case 45: + case 46: + case 47: + case 48: + case 49: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + case 58: + case 59: + case 60: + case 61: + case 62: + case 63: + case 64: + case 67: + case 73: + case 74: + case 75: + case 76: + case 77: + case 78: + case 79: + case 80: + goto LABEL_11; + case 4: + ++v3[81]; +LABEL_11: + v6 = (_DWORD *)v4[3]; + goto LABEL_12; + case 7: + case 8: + case 51: + v4 = (int *)v4[4]; + goto LABEL_7; + case 35: + case 36: + v6 = (_DWORD *)v4[3]; + if ( *v6 == 5 ) + ++v3[78]; +LABEL_12: + v3[71] = v5 + 1; + d_count_templates_scopes(a3, v6); + result = d_count_templates_scopes(v7, v4[4]); + --v3[71]; + return result; + case 44: + case 68: + case 69: + case 70: + case 71: + v4 = (int *)v4[3]; +LABEL_7: + if ( !v4 ) + return result; + continue; + default: + return result; + } + } + } + break; + } + } + return result; +} +// 45704A: variable 'v7' is possibly undefined + +//----- (00457080) -------------------------------------------------------- +_DWORD *__usercall d_index_template_argument_part_0@(_DWORD *result@, int a2@) +{ + if ( result ) + { + while ( *result == 47 ) + { + if ( a2 <= 0 ) + { + if ( a2 ) + return 0; + return (_DWORD *)result[3]; + } + result = (_DWORD *)result[4]; + --a2; + if ( !result ) + return result; + } + } + return 0; +} + +//----- (004570D0) -------------------------------------------------------- +void __cdecl d_growable_string_callback_adapter(void *Src, size_t Size, int a3) +{ + size_t v3; // ebx + int v4; // edx + size_t v5; // eax + void *v6; // eax + + v3 = *(_DWORD *)(a3 + 8); + v4 = *(_DWORD *)(a3 + 12); + v5 = Size + *(_DWORD *)(a3 + 4) + 1; + if ( v5 > v3 ) + { + if ( v4 ) + return; + if ( v3 || (v3 = 2, v5 > 2) ) + { + do + v3 *= 2; + while ( v5 > v3 ); + } + v6 = realloc(*(void **)a3, v3); + if ( !v6 ) + { + free(*(void **)a3); + *(_DWORD *)a3 = 0; + *(_DWORD *)(a3 + 4) = 0; + *(_DWORD *)(a3 + 8) = 0; + *(_DWORD *)(a3 + 12) = 1; + return; + } + *(_DWORD *)a3 = v6; + v4 = *(_DWORD *)(a3 + 12); + *(_DWORD *)(a3 + 8) = v3; + } + if ( !v4 ) + { + memcpy((void *)(*(_DWORD *)a3 + *(_DWORD *)(a3 + 4)), Src, Size); + *(_BYTE *)(*(_DWORD *)(a3 + 4) + Size + *(_DWORD *)a3) = 0; + *(_DWORD *)(a3 + 4) += Size; + } +} + +//----- (00457190) -------------------------------------------------------- +int sprintf_constprop_0(FILE *a1, int a2, ...) +{ + va_list va; // [esp+28h] [ebp+Ch] BYREF + + va_start(va, a2); + return __mingw_vsprintf(a1, "%d", (int *)va); +} + +//----- (004571C0) -------------------------------------------------------- +BOOL __usercall next_is_type_qual_isra_0@(char *a1@) +{ + char v2; // al + + v2 = *a1; + if ( v2 == 86 || v2 == 114 || v2 == 75 ) + return 1; + if ( v2 == 68 ) + return (a1[1] & 0xDF) == 79 || (unsigned __int8)(a1[1] - 119) <= 1u; + return 0; +} + +//----- (00457220) -------------------------------------------------------- +int __usercall d_append_char@(int a1@, char a2@
) +{ + int result; // eax + int v4; // ecx + int v5; // eax + char v6; // [esp+1Ch] [ebp-10h] + + result = *(_DWORD *)(a1 + 256); + if ( result == 255 ) + { + v5 = *(_DWORD *)(a1 + 268); + v6 = a2; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v5); + ++*(_DWORD *)(a1 + 296); + a2 = v6; + result = 0; + v4 = 1; + } + else + { + v4 = result + 1; + } + *(_DWORD *)(a1 + 256) = v4; + *(_BYTE *)(a1 + result) = a2; + *(_BYTE *)(a1 + 260) = a2; + return result; +} + +//----- (00457290) -------------------------------------------------------- +_DWORD *__usercall d_lookup_template_argument@(int a1@, int a2@) +{ + _DWORD *result; // eax + int v4; // edx + + result = *(_DWORD **)(a1 + 272); + if ( result ) + { + v4 = *(_DWORD *)(a2 + 12); + result = *(_DWORD **)(result[1] + 16); + if ( v4 >= 0 && result ) + { + while ( 1 ) + { + if ( *result != 47 ) + return 0; + if ( !v4 ) + break; + result = (_DWORD *)result[4]; + --v4; + if ( !result ) + return result; + } + return (_DWORD *)result[3]; + } + } + else + { + *(_DWORD *)(a1 + 280) = 1; + } + return result; +} + +//----- (004572F0) -------------------------------------------------------- +size_t __usercall d_append_string@(int a1@, const char *Str@) +{ + const char *v3; // ebx + size_t result; // eax + size_t v5; // edi + const char *v6; // edi + size_t v7; // ecx + char v8; // dl + int v9; // eax + char v10; // [esp+1Fh] [ebp-Dh] + + v3 = Str; + result = strlen(Str); + if ( result ) + { + v5 = result; + result = *(_DWORD *)(a1 + 256); + v6 = &v3[v5]; + do + { + v8 = *v3; + if ( result == 255 ) + { + v9 = *(_DWORD *)(a1 + 268); + v10 = *v3; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v9); + ++*(_DWORD *)(a1 + 296); + v8 = v10; + v7 = 0; + result = 1; + } + else + { + v7 = result++; + } + ++v3; + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v7) = v8; + *(_BYTE *)(a1 + 260) = v8; + } + while ( v6 != v3 ); + } + return result; +} + +//----- (00457390) -------------------------------------------------------- +_DWORD *__usercall d_find_pack@(int a1@, _DWORD *a2@, int a3@) +{ + _DWORD *v4; // ebx + _DWORD *result; // eax + int v6; // edx + + if ( !a2 ) + return 0; + v4 = a2; + while ( 2 ) + { + switch ( *v4 ) + { + case 0: + case 6: + case 0x18: + case 0x27: + case 0x2C: + case 0x32: + case 0x41: + case 0x42: + case 0x46: + case 0x47: + case 0x48: + case 0x4B: + case 0x4C: + return 0; + case 5: + result = *(_DWORD **)(a1 + 272); + if ( result ) + { + v6 = v4[3]; + result = *(_DWORD **)(result[1] + 16); + if ( v6 >= 0 ) + { + if ( !result ) + return 0; + while ( 1 ) + { + if ( *result != 47 ) + return 0; + if ( !v6 ) + break; + result = (_DWORD *)result[4]; + --v6; + if ( !result ) + return 0; + } + result = (_DWORD *)result[3]; + } + if ( !result || *result != 47 ) + return 0; + } + else + { + *(_DWORD *)(a1 + 280) = 1; + } + break; + case 7: + case 8: + case 0x33: + goto LABEL_10; + default: + result = (_DWORD *)d_find_pack(a3, v4[3]); + if ( result ) + return result; +LABEL_10: + v4 = (_DWORD *)v4[4]; + if ( !v4 ) + return 0; + continue; + } + return result; + } +} +// 4573CD: variable 'a3' is possibly undefined + +//----- (00457430) -------------------------------------------------------- +_DWORD *__usercall d_template_param@(_DWORD *a1@) +{ + _BYTE *v2; // eax + char v3; // dl + int v4; // ecx + _BYTE *v5; // eax + int v6; // edx + _DWORD *result; // eax + + v2 = (_BYTE *)a1[3]; + if ( *v2 != 84 ) + return 0; + a1[3] = v2 + 1; + v3 = v2[1]; + if ( v3 == 95 ) + { + v4 = 0; + a1[3] = v2 + 2; + } + else + { + if ( v3 == 110 ) + return 0; + v4 = d_number((int)a1) + 1; + if ( v4 < 0 ) + return 0; + v5 = (_BYTE *)a1[3]; + if ( *v5 != 95 ) + return 0; + a1[3] = v5 + 1; + } + v6 = a1[5]; + if ( v6 < a1[6] ) + { + result = (_DWORD *)(a1[4] + 20 * v6); + result[1] = 0; + result[2] = 0; + a1[5] = v6 + 1; + *result = 5; + result[3] = v4; + return result; + } + return 0; +} + +//----- (004574C0) -------------------------------------------------------- +size_t __usercall d_append_num@(int a1@, int a2@) +{ + FILE *p_Str; // ebx + size_t result; // eax + size_t v5; // edi + FILE *v6; // edi + size_t v7; // ecx + char ptr; // dl + int v9; // eax + char v10; // [esp+1Fh] [ebp-2Dh] + FILE Str; // [esp+27h] [ebp-25h] BYREF + + p_Str = &Str; + sprintf_constprop_0(&Str, (int)"%d", a2); + result = strlen((const char *)&Str); + if ( result ) + { + v5 = result; + result = *(_DWORD *)(a1 + 256); + v6 = (FILE *)((char *)&Str + v5); + do + { + ptr = (char)p_Str->_ptr; + if ( result == 255 ) + { + v9 = *(_DWORD *)(a1 + 268); + v10 = (char)p_Str->_ptr; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v9); + ++*(_DWORD *)(a1 + 296); + ptr = v10; + v7 = 0; + result = 1; + } + else + { + v7 = result++; + } + p_Str = (FILE *)((char *)p_Str + 1); + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v7) = ptr; + *(_BYTE *)(a1 + 260) = ptr; + } + while ( v6 != p_Str ); + } + return result; +} +// 4574C0: using guessed type FILE var_25; + +//----- (00457570) -------------------------------------------------------- +_DWORD *__usercall d_source_name@(int a1@) +{ + int v2; // eax + int v3; // ebp + int v4; // ecx + _BYTE *v5; // eax + _DWORD *result; // eax + int v7; // edx + int v8; // eax + char v9; // [esp+3h] [ebp-11h] + + v2 = d_number(a1); + if ( v2 > 0 ) + { + v3 = *(_DWORD *)(a1 + 12); + v4 = v2; + if ( v2 > *(_DWORD *)(a1 + 4) - v3 ) + goto LABEL_18; + v5 = (_BYTE *)(v3 + v2); + *(_DWORD *)(a1 + 12) = v3 + v4; + if ( (*(_BYTE *)(a1 + 8) & 4) != 0 && *v5 == 36 ) + { + *(_DWORD *)(a1 + 12) = v5 + 1; + if ( v4 <= 9 ) + goto LABEL_7; + } + else if ( v4 <= 9 ) + { + goto LABEL_7; + } + if ( *(_DWORD *)v3 == 1330399071 && *(_DWORD *)(v3 + 4) == 1598832962 ) + { + v9 = *(_BYTE *)(v3 + 8); + if ( (v9 == 95 || v9 == 46 || v9 == 36) && *(_BYTE *)(v3 + 9) == 78 ) + { + v7 = *(_DWORD *)(a1 + 20); + *(_DWORD *)(a1 + 44) = *(_DWORD *)(a1 + 44) + 22 - v4; + if ( v7 < *(_DWORD *)(a1 + 24) ) + { + v8 = *(_DWORD *)(a1 + 16); + *(_DWORD *)(a1 + 20) = v7 + 1; + result = (_DWORD *)(v8 + 20 * v7); + result[1] = 0; + result[2] = 0; + *result = 0; + result[3] = "(anonymous namespace)"; + result[4] = 21; + goto LABEL_8; + } +LABEL_18: + result = 0; + goto LABEL_8; + } + } +LABEL_7: + result = d_make_name((_DWORD *)a1, v3, v4); +LABEL_8: + *(_DWORD *)(a1 + 40) = result; + return result; + } + return 0; +} + +//----- (00457680) -------------------------------------------------------- +_DWORD *__usercall d_substitution@(int a1@, char a2@
) +{ + _BYTE *v3; // eax + int v5; // edx + BOOL v6; // eax + char v7; // cl + const char *v8; // eax + _DWORD *comp; // esi + unsigned int v11; // eax + unsigned int i; // ecx + char *v13; // eax + unsigned int v14; // ecx + int v15; // esi + int v16; // edx + int v17; // ebp + int v18; // edi + _DWORD *v19; // edi + int v20; // ecx + int v21; // eax + _BYTE *v22; // eax + int v23; // edi + _DWORD *v24; // eax + int v25; // eax + BOOL v26; // [esp+4h] [ebp-18h] + int v27; // [esp+8h] [ebp-14h] + + v3 = *(_BYTE **)(a1 + 12); + if ( *v3 != 83 ) + return 0; + *(_DWORD *)(a1 + 12) = v3 + 1; + LOBYTE(v5) = v3[1]; + if ( !(_BYTE)v5 ) + { +LABEL_3: + v26 = (*(_BYTE *)(a1 + 8) & 8) != 0; + if ( (*(_BYTE *)(a1 + 8) & 8) == 0 && (a2 & 1) != 0 ) + { + v6 = 1; + if ( (unsigned __int8)(**(_BYTE **)(a1 + 12) - 67) > 1u ) + v6 = (*(_BYTE *)(a1 + 8) & 8) != 0; + v26 = v6; + } + v7 = 116; + v8 = "t"; + while ( (_BYTE)v5 != v7 ) + { + v8 += 28; + if ( v8 == (const char *)&unk_559324 ) + return 0; + v7 = *v8; + } + v15 = *((_DWORD *)v8 + 5); + v16 = *(_DWORD *)(a1 + 20); + v17 = *(_DWORD *)(a1 + 24); + if ( v15 ) + { + v27 = *((_DWORD *)v8 + 6); + if ( v16 >= v17 ) + { + v19 = 0; + } + else + { + v18 = 5 * v16++; + v19 = (_DWORD *)(*(_DWORD *)(a1 + 16) + 4 * v18); + v19[1] = 0; + v19[2] = 0; + *(_DWORD *)(a1 + 20) = v16; + *v19 = 24; + v19[3] = v15; + v19[4] = v27; + } + *(_DWORD *)(a1 + 40) = v19; + } + if ( v26 ) + { + v20 = *((_DWORD *)v8 + 3); + v21 = *((_DWORD *)v8 + 4); + } + else + { + v20 = *((_DWORD *)v8 + 1); + v21 = *((_DWORD *)v8 + 2); + } + *(_DWORD *)(a1 + 44) += v21; + if ( v16 >= v17 ) + { + comp = 0; + } + else + { + comp = (_DWORD *)(*(_DWORD *)(a1 + 16) + 20 * v16); + comp[1] = 0; + comp[2] = 0; + *(_DWORD *)(a1 + 20) = v16 + 1; + *comp = 24; + comp[3] = v20; + comp[4] = v21; + } + v22 = *(_BYTE **)(a1 + 12); + if ( *v22 != 66 ) + return comp; + v23 = *(_DWORD *)(a1 + 40); + do + { + *(_DWORD *)(a1 + 12) = v22 + 1; + v24 = d_source_name(a1); + comp = d_make_comp((_DWORD *)a1, 76, (int)comp, (int)v24); + v22 = *(_BYTE **)(a1 + 12); + } + while ( *v22 == 66 ); + *(_DWORD *)(a1 + 40) = v23; + if ( comp ) + { + v25 = *(_DWORD *)(a1 + 32); + if ( v25 < *(_DWORD *)(a1 + 36) ) + { + *(_DWORD *)(*(_DWORD *)(a1 + 28) + 4 * v25) = comp; + *(_DWORD *)(a1 + 32) = v25 + 1; + return comp; + } + } + return 0; + } + *(_DWORD *)(a1 + 12) = v3 + 2; + v5 = (char)v3[1]; + if ( (unsigned __int8)(v5 - 48) > 9u ) + { + if ( (_BYTE)v5 != 95 ) + { + if ( (unsigned __int8)(v5 - 65) > 0x19u ) + goto LABEL_3; +LABEL_16: + v11 = 0; + if ( (unsigned __int8)(v5 - 48) > 9u ) + goto LABEL_22; +LABEL_17: + for ( i = v5 + 36 * v11 - 48; v11 <= i; i = v5 + 36 * v11 - 55 ) + { + v13 = *(char **)(a1 + 12); + v5 = *v13; + if ( (_BYTE)v5 ) + { + *(_DWORD *)(a1 + 12) = v13 + 1; + v5 = *v13; + if ( (_BYTE)v5 == 95 ) + { + v14 = i + 1; + goto LABEL_26; + } + } + v11 = i; + if ( (unsigned __int8)(v5 - 48) <= 9u ) + goto LABEL_17; +LABEL_22: + if ( (unsigned __int8)(v5 - 65) > 0x19u ) + return 0; + } + return 0; + } + } + else if ( (_BYTE)v5 != 95 ) + { + goto LABEL_16; + } + v14 = 0; +LABEL_26: + if ( *(_DWORD *)(a1 + 32) <= v14 ) + return 0; + return *(_DWORD **)(*(_DWORD *)(a1 + 28) + 4 * v14); +} + +//----- (004578C0) -------------------------------------------------------- +int __usercall d_print_java_identifier@(int result@, unsigned int a2@, int a3@) +{ + unsigned int v3; // edi + int v4; // ebx + char *i; // ebp + int v6; // ecx + char v7; // dl + unsigned int v8; // esi + _BYTE *v9; // ebx + int v10; // eax + char v11; // cl + int v12; // eax + _BYTE *v13; // esi + int v14; // eax + int v15; // [esp+14h] [ebp-28h] + char v16; // [esp+14h] [ebp-28h] + unsigned int v17; // [esp+14h] [ebp-28h] + int v18; // [esp+18h] [ebp-24h] + char *v19; // [esp+1Ch] [ebp-20h] + + v3 = a2 + a3; + if ( a2 < a2 + a3 ) + { + v4 = result; + for ( i = (char *)a2; v3 > (unsigned int)i; ++i ) + { + v7 = *i; + result = *(_DWORD *)(v4 + 256); + if ( (int)(v3 - (_DWORD)i) <= 3 || v7 != 95 || i[1] != 95 || i[2] != 85 || v3 <= (unsigned int)(i + 3) ) + { +LABEL_3: + if ( result == 255 ) + { + v12 = *(_DWORD *)(v4 + 268); + *(_BYTE *)(v4 + 255) = 0; + v16 = v7; + (*(void (__cdecl **)(int, int, int))(v4 + 264))(v4, 255, v12); + ++*(_DWORD *)(v4 + 296); + v7 = v16; + result = 0; + v6 = 1; + } + else + { + v6 = result + 1; + } + *(_DWORD *)(v4 + 256) = v6; + *(_BYTE *)(v4 + result) = v7; + *(_BYTE *)(v4 + 260) = v7; + continue; + } + v18 = v4; + v8 = 0; + v9 = i + 3; + v15 = result; + while ( 1 ) + { + v11 = *v9; + LOBYTE(v10) = *v9 - 48; + if ( (unsigned __int8)v10 <= 9u ) + { + v10 = (char)v10; + goto LABEL_15; + } + if ( (unsigned __int8)(v11 - 65) > 5u ) + break; + v10 = (char)(v11 - 55); +LABEL_15: + ++v9; + v8 = v10 + 16 * v8; + if ( (_BYTE *)v3 == v9 ) + { + result = v15; + v4 = v18; + goto LABEL_3; + } + } + if ( (unsigned __int8)(v11 - 97) <= 5u ) + { + v10 = (char)(v11 - 87); + goto LABEL_15; + } + result = v15; + v17 = v8; + v13 = v9; + v19 = v9; + v4 = v18; + if ( v3 <= (unsigned int)v13 || v17 > 0xFF || v11 != 95 ) + goto LABEL_3; + if ( result == 255 ) + { + v14 = *(_DWORD *)(v18 + 268); + *(_BYTE *)(v18 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(v18 + 264))(v18, 255, v14); + ++*(_DWORD *)(v18 + 296); + result = 0; + } + i = v19; + *(_DWORD *)(v18 + 256) = result + 1; + *(_BYTE *)(v18 + result) = v17; + *(_BYTE *)(v18 + 260) = v17; + } + } + return result; +} + +//----- (00457A70) -------------------------------------------------------- +int *__usercall d_type@( + _DWORD *a1@, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8, + int a9, + int a10, + int a11, + int a12) +{ + char *v13; // esi + int v14; // edi + unsigned int *v15; // eax + unsigned int *name; // esi + int *result; // eax + int **v18; // esi + int *v19; // eax + int *v20; // edx + int *v21; // ecx + int v22; // edx + int v23; // edx + int v24; // ecx + int v25; // edx + int v26; // edx + char v27; // al + _BYTE *v28; // edx + int v29; // eax + int v30; // eax + int v31; // eax + int v32; // eax + _DWORD *v33; // eax + int v34; // eax + int *comp; // esi + _BYTE *v36; // eax + int v37; // eax + _BYTE *v38; // esi + int v39; // ecx + _DWORD *v40; // ecx + _BYTE *v41; // edx + char v42; // al + char *v43; // esi + char *v44; // ecx + int v45; // eax + int v46; // esi + int v47; // eax + int v48; // esi + unsigned int *v49; // eax + _BYTE *v50; // edx + int v51; // eax + int *v52; // edi + unsigned __int8 v53; // al + char *v54; // eax + char v55; // dl + int v56; // edx + int v57; // eax + int v58; // edx + int v59; // eax + int v60; // edx + int v61; // edx + int v62; // edx + int v63; // edx + int v64; // eax + unsigned int *v65; // esi + _BYTE *v66; // eax + int v67; // eax + int v68; // edx + int v69; // edx + int v70; // edx + int v71; // eax + int v72; // edx + _DWORD *v73; // eax + int v74; // ebp + int v75; // edi + _DWORD *v76; // ecx + int *v77; // edx + int v78; // eax + int v79; // edi + unsigned int *v80; // eax + _DWORD *v81; // [esp+0h] [ebp-4Ch] + int v82; // [esp+1Ch] [ebp-30h] + int *v83; // [esp+2Ch] [ebp-20h] BYREF + + v13 = (char *)a1[3]; + if ( next_is_type_qual_isra_0(v13) ) + { + v18 = d_cv_qualifiers(a1, &v83, 0); + if ( v18 ) + { + v19 = *(_BYTE *)a1[3] == 70 ? d_function_type((int)a1) : (int *)d_type(); + *v18 = v19; + v20 = v19; + if ( v19 ) + { + result = v83; + if ( (unsigned int)(*v20 - 31) <= 1 ) + { + v21 = (int *)v20[3]; + v20[3] = (int)v83; + v83 = *v18; + *v18 = v21; + result = v83; + } + if ( result ) + { + v22 = a1[8]; + if ( v22 < a1[9] ) + { + *(_DWORD *)(a1[7] + 4 * v22) = result; + a1[8] = v22 + 1; + return result; + } + } + } + } + } + else + { + switch ( *v13 ) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'N': + case 'Z': + result = d_name(a1); + v83 = result; + goto LABEL_19; + case 'A': + v41 = v13 + 1; + a1[3] = v13 + 1; + v42 = v13[1]; + if ( v42 == 95 ) + { + name = 0; +LABEL_53: + a1[3] = v41 + 1; + v45 = d_type(); + result = d_make_comp(a1, 42, (int)name, v45); + v83 = result; + goto LABEL_19; + } + if ( (unsigned __int8)(v42 - 48) > 9u ) + { + v14 = a1[12]; + a1[12] = 1; + v15 = d_expression_1(a1); + a1[12] = v14; + name = v15; + if ( !v15 ) + return 0; +LABEL_52: + v41 = (_BYTE *)a1[3]; + if ( *v41 != 95 ) + return 0; + goto LABEL_53; + } + v43 = v13 + 2; + do + { + v44 = v43; + a1[3] = v43++; + } + while ( (unsigned __int8)(*v44 - 48) <= 9u ); + name = d_make_name(a1, (int)v41, v44 - v41); + if ( name ) + goto LABEL_52; + break; + case 'C': + a1[3] = v13 + 1; + v34 = d_type(); + result = d_make_comp(a1, 37, v34, 0); + v83 = result; + goto LABEL_19; + case 'D': + a1[3] = v13 + 1; + if ( !v13[1] ) + return 0; + a1[3] = v13 + 2; + switch ( v13[1] ) + { + case 'F': + v51 = a1[5]; + if ( v51 >= a1[6] ) + { + MEMORY[0] = 0; + BUG(); + } + v52 = (int *)(a1[4] + 20 * v51); + v52[1] = 0; + v52[2] = 0; + v83 = v52; + a1[5] = v51 + 1; + *v52 = 44; + v53 = v13[2] - 48; + *((_WORD *)v52 + 8) = v53 <= 9u; + if ( v53 <= 9u ) + { + d_number((int)a1); + v52 = v83; + } + v52[3] = d_type(); + if ( !v83[3] ) + return 0; + d_number((int)a1); + v54 = (char *)a1[3]; + v55 = *v54; + if ( *v54 ) + { + a1[3] = v54 + 1; + v55 = *v54; + } + result = v83; + *((_WORD *)v83 + 9) = v55 == 115; + return result; + case 'T': + case 't': + v48 = a1[12]; + a1[12] = 1; + v49 = d_expression_1(a1); + a1[12] = v48; + result = d_make_comp(a1, 67, (int)v49, 0); + v83 = result; + if ( result ) + { + v50 = (_BYTE *)a1[3]; + if ( *v50 ) + { + a1[3] = v50 + 1; + if ( *v50 == 69 ) + goto LABEL_20; + } + } + return 0; + case 'a': + v58 = a1[5]; + if ( v58 >= a1[6] ) + return 0; + v59 = a1[4]; + a1[5] = v58 + 1; + result = (int *)(v59 + 20 * v58); + result[1] = 0; + result[2] = 0; + *result = 0; + result[3] = (int)"auto"; + result[4] = 4; + return result; + case 'c': + v56 = a1[5]; + if ( v56 >= a1[6] ) + return 0; + v57 = a1[4]; + a1[5] = v56 + 1; + result = (int *)(v57 + 20 * v56); + result[1] = 0; + result[2] = 0; + *result = 0; + result[3] = (int)"decltype(auto)"; + result[4] = 14; + return result; + case 'd': + v68 = a1[5]; + if ( v68 >= a1[6] ) + { + v83 = 0; + BUG(); + } + result = (int *)(a1[4] + 20 * v68); + result[1] = 0; + result[2] = 0; + a1[5] = v68 + 1; + *result = 39; + result[3] = (int)&off_559C9C; + a1[11] += 9; + return result; + case 'e': + v63 = a1[5]; + if ( v63 >= a1[6] ) + { + v83 = 0; + BUG(); + } + result = (int *)(a1[4] + 20 * v63); + result[1] = 0; + result[2] = 0; + a1[5] = v63 + 1; + *result = 39; + result[3] = (int)&off_559CB0; + a1[11] += 10; + return result; + case 'f': + v61 = a1[5]; + if ( v61 >= a1[6] ) + { + v83 = 0; + BUG(); + } + result = (int *)(a1[4] + 20 * v61); + result[1] = 0; + result[2] = 0; + a1[5] = v61 + 1; + *result = 39; + result[3] = (int)&off_559C88; + a1[11] += 9; + return result; + case 'h': + v60 = a1[5]; + if ( v60 >= a1[6] ) + { + v83 = 0; + BUG(); + } + result = (int *)(a1[4] + 20 * v60); + result[1] = 0; + result[2] = 0; + a1[5] = v60 + 1; + *result = 39; + result[3] = (int)&off_559CC4; + a1[11] += 4; + return result; + case 'i': + v72 = a1[5]; + if ( v72 >= a1[6] ) + { + v83 = 0; + BUG(); + } + result = (int *)(a1[4] + 20 * v72); + result[1] = 0; + result[2] = 0; + a1[5] = v72 + 1; + *result = 39; + result[3] = (int)&off_559D00; + a1[11] += 8; + return result; + case 'n': + v69 = a1[5]; + if ( v69 >= a1[6] ) + { + v83 = 0; + BUG(); + } + result = (int *)(a1[4] + 20 * v69); + result[1] = 0; + result[2] = 0; + a1[5] = v69 + 1; + *result = 39; + result[3] = (int)&off_559D14; + a1[11] += 17; + return result; + case 'p': + v71 = d_type(); + result = d_make_comp(a1, 75, v71, 0); + v83 = result; + goto LABEL_19; + case 's': + v62 = a1[5]; + if ( v62 >= a1[6] ) + { + v83 = 0; + BUG(); + } + result = (int *)(a1[4] + 20 * v62); + result[1] = 0; + result[2] = 0; + a1[5] = v62 + 1; + *result = 39; + result[3] = (int)&off_559CEC; + a1[11] += 8; + return result; + case 'u': + v70 = a1[5]; + if ( v70 >= a1[6] ) + { + v83 = 0; + BUG(); + } + result = (int *)(a1[4] + 20 * v70); + result[1] = 0; + result[2] = 0; + a1[5] = v70 + 1; + *result = 39; + result[3] = (int)&off_559CD8; + a1[11] += 7; + return result; + case 'v': + if ( v13[2] == 95 ) + { + v79 = a1[12]; + a1[12] = 1; + a1[3] = v13 + 3; + v80 = d_expression_1(a1); + a1[12] = v79; + v65 = v80; + if ( !v80 ) + return 0; + } + else + { + v64 = a1[5]; + if ( v64 >= a1[6] ) + return 0; + v65 = (unsigned int *)(a1[4] + 20 * v64); + v65[1] = 0; + v65[2] = 0; + a1[5] = v64 + 1; + *v65 = 66; + v65[3] = d_number((int)a1); + } + v66 = (_BYTE *)a1[3]; + if ( *v66 != 95 ) + return 0; + a1[3] = v66 + 1; + v67 = d_type(); + result = d_make_comp(a1, 45, (int)v65, v67); + v83 = result; + break; + default: + return 0; + } + goto LABEL_19; + case 'F': + result = d_function_type((int)a1); + v83 = result; + goto LABEL_19; + case 'G': + a1[3] = v13 + 1; + v32 = d_type(); + result = d_make_comp(a1, 38, v32, 0); + v83 = result; + goto LABEL_19; + case 'M': + a1[3] = v13 + 1; + v46 = d_type(); + if ( !v46 ) + return 0; + v47 = d_type(); + if ( !v47 ) + return 0; + result = d_make_comp(a1, 43, v46, v47); + v83 = result; + goto LABEL_19; + case 'O': + a1[3] = v13 + 1; + v31 = d_type(); + result = d_make_comp(a1, 36, v31, 0); + v83 = result; + goto LABEL_19; + case 'P': + a1[3] = v13 + 1; + v30 = d_type(); + result = d_make_comp(a1, 34, v30, 0); + v83 = result; + goto LABEL_19; + case 'R': + a1[3] = v13 + 1; + v29 = d_type(); + result = d_make_comp(a1, 35, v29, 0); + v83 = result; + goto LABEL_19; + case 'S': + v27 = v13[1]; + if ( (unsigned __int8)(v27 - 48) <= 9u || v27 == 95 || (unsigned __int8)(v27 - 65) <= 0x19u ) + { + result = d_substitution((int)a1, 0); + v28 = (_BYTE *)a1[3]; + v83 = result; + if ( *v28 != 73 ) + return result; + a1[3] = v28 + 1; + v81 = d_template_args_1(a1); + result = d_make_comp(a1, 4, (int)v83, (int)v81); + goto LABEL_27; + } + result = d_name(a1); + v83 = result; + if ( !result ) + return 0; + if ( *result == 24 ) + return result; + goto LABEL_20; + case 'T': + result = d_template_param(a1); + v38 = (_BYTE *)a1[3]; + v83 = result; + if ( *v38 != 73 ) + goto LABEL_19; + if ( a1[13] ) + { + v74 = a1[5]; + v75 = a1[8]; + v82 = a1[11]; + a1[3] = v38 + 1; + v76 = d_template_args_1(a1); + if ( *(_BYTE *)a1[3] == 73 ) + { + v77 = v83; + if ( !v83 ) + return 0; + v78 = a1[8]; + if ( v78 >= a1[9] ) + return 0; + *(_DWORD *)(a1[7] + 4 * v78) = v83; + a1[8] = v78 + 1; + result = d_make_comp(a1, 4, (int)v77, (int)v76); + v83 = result; + } + else + { + a1[3] = v38; + a1[5] = v74; + a1[11] = v82; + result = v83; + a1[8] = v75; + } + } + else + { + if ( !result ) + return 0; + v39 = a1[8]; + if ( v39 >= a1[9] ) + return 0; + *(_DWORD *)(a1[7] + 4 * v39) = result; + a1[8] = v39 + 1; + v40 = 0; + if ( (unsigned __int8)(*v38 - 73) <= 1u ) + { + a1[3] = v38 + 1; + v40 = d_template_args_1(a1); + } + result = d_make_comp(a1, 4, (int)v83, (int)v40); +LABEL_27: + v83 = result; + } +LABEL_19: + if ( !result ) + return 0; +LABEL_20: + v26 = a1[8]; + if ( v26 < a1[9] ) + { + *(_DWORD *)(a1[7] + 4 * v26) = result; + result = v83; + a1[8] = v26 + 1; + return result; + } + return 0; + case 'U': + a1[3] = v13 + 1; + v83 = d_source_name((int)a1); + comp = v83; + v36 = (_BYTE *)a1[3]; + if ( *v36 == 73 ) + { + a1[3] = v36 + 1; + v73 = d_template_args_1(a1); + comp = d_make_comp(a1, 4, (int)v83, (int)v73); + } + v37 = d_type(); + result = d_make_comp(a1, 33, v37, (int)comp); + v83 = result; + goto LABEL_19; + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'l': + case 'm': + case 'n': + case 'o': + case 's': + case 't': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + v23 = a1[5]; + v24 = 20 * (char)(*v13 - 97) + 5610112; + if ( v23 >= a1[6] ) + d_type_cold(a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); + result = (int *)(a1[4] + 20 * v23); + result[1] = 0; + result[2] = 0; + a1[5] = v23 + 1; + v25 = *(_DWORD *)(v24 + 4); + *result = 39; + result[3] = v24; + a1[11] += v25; + a1[3] = v13 + 1; + return result; + case 'u': + a1[3] = v13 + 1; + v33 = d_source_name((int)a1); + result = d_make_comp(a1, 40, (int)v33, 0); + v83 = result; + goto LABEL_19; + default: + return 0; + } + } + return 0; +} +// 559C88: using guessed type char *off_559C88; +// 559C9C: using guessed type char *off_559C9C; +// 559CB0: using guessed type char *off_559CB0; +// 559CC4: using guessed type char *off_559CC4; +// 559CD8: using guessed type char *off_559CD8; +// 559CEC: using guessed type char *off_559CEC; +// 559D00: using guessed type char *off_559D00; +// 559D14: using guessed type char *off_559D14; + +//----- (004583F0) -------------------------------------------------------- +_DWORD *__usercall d_operator_name@(_DWORD *a1@) +{ + unsigned __int8 *v2; // eax + unsigned __int8 v3; // si + unsigned __int8 v4; // cl + int v5; // edx + unsigned __int8 v6; // bp + void **v7; // edi + _BYTE *v8; // ecx + bool v9; // cc + _DWORD *result; // eax + int v11; // edx + char v12; // bl + _DWORD *v13; // eax + int v14; // edx + _DWORD *v15; // ecx + int v16; // ebx + int v17; // ecx + int v18; // [esp+18h] [ebp-24h] + _DWORD *v19; // [esp+1Ch] [ebp-20h] + + v2 = (unsigned __int8 *)a1[3]; + if ( !*v2 ) + { + v4 = 0; + v3 = 0; + goto LABEL_3; + } + a1[3] = v2 + 1; + v3 = *v2; + v4 = v2[1]; + if ( !v4 ) + { +LABEL_3: + v19 = a1; + v5 = 0; + v6 = v4; + v18 = 69; + while ( 1 ) + { + v7 = &cplus_demangle_operators + 4 * v5 + 4 * ((v18 - v5) / 2); + v8 = *v7; + v9 = *(_BYTE *)*v7 <= v3; + if ( *(_BYTE *)*v7 == v3 ) + { + v9 = v8[1] <= v6; + if ( v8[1] == v6 ) + break; + } + if ( v9 ) + v5 += (v18 - v5) / 2 + 1; + else + v18 = v5 + (v18 - v5) / 2; + if ( v5 == v18 ) + return 0; + } + v11 = v19[5]; + if ( v11 < v19[6] ) + { + result = (_DWORD *)(v19[4] + 20 * v11); + result[1] = 0; + result[2] = 0; + v19[5] = v11 + 1; + *result = 50; + result[3] = v7; + return result; + } + return 0; + } + a1[3] = v2 + 2; + v4 = v2[1]; + if ( v3 == 118 ) + { + v12 = v4 - 48; + if ( (unsigned __int8)(v4 - 48) > 9u ) + goto LABEL_3; + v13 = d_source_name((int)a1); + v14 = a1[5]; + v15 = v13; + if ( v14 >= a1[6] ) + return 0; + result = (_DWORD *)(a1[4] + 20 * v14); + result[1] = 0; + result[2] = 0; + a1[5] = v14 + 1; + if ( !v15 ) + return 0; + result[1] = 0; + result[2] = 0; + *result = 51; + result[3] = v12; + result[4] = v15; + } + else + { + if ( v4 != 118 || v3 != 99 ) + goto LABEL_3; + v16 = a1[13]; + a1[13] = a1[12] == 0; + v17 = d_type(); + if ( a1[13] ) + result = d_make_comp(a1, 53, v17, 0); + else + result = d_make_comp(a1, 52, v17, 0); + a1[13] = v16; + } + return result; +} +// 457A70: using guessed type int d_type(void); +// 559500: using guessed type void *cplus_demangle_operators; + +//----- (004585B0) -------------------------------------------------------- +int __usercall d_parmlist@(_DWORD *a1@) +{ + char *v2; // ebp + char v3; // al + int *v4; // esi + _DWORD *comp; // eax + int v6; // ecx + int result; // eax + _DWORD *v8; // edx + int v9; // edx + int v10; // [esp+1Ch] [ebp-20h] BYREF + + v2 = (char *)a1[3]; + v10 = 0; + v3 = *v2; + if ( v3 == 0 || v3 == 69 ) + return 0; + v4 = &v10; + if ( v3 == 46 ) + return 0; + do + { + if ( (v3 == 82 || v3 == 79) && v2[1] == 69 ) + break; + v6 = d_type(); + if ( !v6 ) + return 0; + comp = d_make_comp(a1, 46, v6, 0); + *v4 = (int)comp; + if ( !comp ) + return 0; + v2 = (char *)a1[3]; + v4 = comp + 4; + v3 = *v2; + if ( *v2 == 69 || *v2 == 0 ) + break; + } + while ( v3 != 46 ); + result = v10; + if ( !v10 ) + return 0; + if ( !*(_DWORD *)(v10 + 16) ) + { + v8 = *(_DWORD **)(v10 + 12); + if ( *v8 == 39 ) + { + v9 = v8[3]; + if ( *(_DWORD *)(v9 + 16) == 9 ) + { + a1[11] -= *(_DWORD *)(v9 + 4); + *(_DWORD *)(result + 12) = 0; + } + } + } + return result; +} +// 457A70: using guessed type int d_type(void); + +//----- (00458680) -------------------------------------------------------- +_DWORD *__usercall d_bare_function_type@(_DWORD *a1@, int a2@) +{ + _BYTE *v3; // eax + int v4; // esi + int v5; // eax + + v3 = (_BYTE *)a1[3]; + if ( *v3 == 74 ) + { + a1[3] = v3 + 1; + goto LABEL_3; + } + if ( a2 ) + { +LABEL_3: + v4 = d_type(); + if ( v4 ) + { + v5 = d_parmlist(a1); + if ( v5 ) + return d_make_comp(a1, 41, v4, v5); + } + return 0; + } + v4 = 0; + v5 = d_parmlist(a1); + if ( v5 ) + return d_make_comp(a1, 41, v4, v5); + return 0; +} +// 457A70: using guessed type int d_type(void); + +//----- (004586F0) -------------------------------------------------------- +_DWORD *__usercall d_function_type@(int a1@) +{ + unsigned int v2; // ecx + _BYTE *v3; // edx + _DWORD *result; // eax + _DWORD *v5; // eax + _BYTE *v6; // edx + + if ( (*(_BYTE *)(a1 + 10) & 4) != 0 ) + { + v3 = *(_BYTE **)(a1 + 12); + if ( *v3 == 70 ) + goto LABEL_8; + return 0; + } + v2 = *(_DWORD *)(a1 + 56); + if ( v2 > 0x800 ) + return 0; + v3 = *(_BYTE **)(a1 + 12); + *(_DWORD *)(a1 + 56) = v2 + 1; + result = 0; + if ( *v3 != 70 ) + { +LABEL_4: + *(_DWORD *)(a1 + 56) = v2; + return result; + } +LABEL_8: + *(_DWORD *)(a1 + 12) = v3 + 1; + if ( v3[1] == 89 ) + *(_DWORD *)(a1 + 12) = v3 + 2; + v5 = d_bare_function_type((_DWORD *)a1, 1); + result = d_ref_qualifier((_DWORD *)a1, v5); + v6 = *(_BYTE **)(a1 + 12); + if ( *v6 == 69 ) + *(_DWORD *)(a1 + 12) = v6 + 1; + else + result = 0; + if ( (*(_BYTE *)(a1 + 10) & 4) == 0 ) + { + v2 = *(_DWORD *)(a1 + 56) - 1; + goto LABEL_4; + } + return result; +} + +//----- (00458780) -------------------------------------------------------- +_DWORD *__usercall d_unqualified_name@(_DWORD *a1@) +{ + char *v2; // eax + char v3; // cl + _DWORD *v4; // eax + _DWORD *comp; // esi + char v6; // dl + char v8; // dl + char *v9; // ecx + char v10; // dl + int v11; // eax + bool v12; // sf + int v13; // ecx + int v14; // eax + int v15; // edx + int v16; // edi + _DWORD *v17; // eax + int v18; // eax + int v19; // edx + _BYTE *v20; // eax + _DWORD *v21; // eax + _DWORD *v22; // edi + int v23; // edx + int v24; // ecx + int v25; // edi + char v26; // dl + int v27; // eax + int v28; // ecx + int v29; // edx + int v30; // ecx + int v31; // edi + int v32; // eax + int v33; // edx + _DWORD *v34; // [esp+1Ch] [ebp-20h] + + v2 = (char *)a1[3]; + v3 = *v2; + if ( (unsigned __int8)(*v2 - 48) > 9u ) + { + if ( (unsigned __int8)(v3 - 97) <= 0x19u ) + { + if ( v3 == 111 && v2[1] == 110 ) + a1[3] = v2 + 2; + v4 = d_operator_name(a1); + comp = v4; + if ( v4 ) + { + if ( *v4 == 50 ) + { + v18 = v4[3]; + v19 = *(_DWORD *)(v18 + 8); + v20 = *(_BYTE **)v18; + a1[11] += v19 + 7; + if ( *v20 == 108 && v20[1] == 105 && !v20[2] ) + { + v21 = d_source_name((int)a1); + comp = d_make_comp(a1, 55, (int)comp, (int)v21); + v2 = (char *)a1[3]; + v6 = *v2; + goto LABEL_7; + } + } + } +LABEL_6: + v2 = (char *)a1[3]; + v6 = *v2; + goto LABEL_7; + } + if ( (unsigned __int8)(v3 - 67) > 1u ) + { + if ( v3 != 76 ) + { + if ( v3 != 85 ) + return 0; + v8 = v2[1]; + if ( v8 == 108 ) + { + v9 = v2 + 1; + a1[3] = v2 + 1; + v6 = v2[1]; + if ( v6 == 108 ) + { + a1[3] = v2 + 2; + v25 = d_parmlist(a1); + v2 = (char *)a1[3]; + v6 = *v2; + if ( !v25 || v6 != 69 ) + goto LABEL_43; + a1[3] = v2 + 1; + v26 = v2[1]; + if ( v26 == 95 ) + { + v2 += 2; + v28 = 0; + a1[3] = v2; + } + else + { + if ( v26 == 110 ) + return 0; + v27 = d_number((int)a1); + v12 = v27 + 1 < 0; + v28 = v27 + 1; + v2 = (char *)a1[3]; + v6 = *v2; + if ( v12 || v6 != 95 ) + goto LABEL_43; + a1[3] = ++v2; + } + v29 = a1[5]; + if ( v29 < a1[6] ) + { + comp = (_DWORD *)(a1[4] + 20 * v29); + comp[1] = 0; + comp[2] = 0; + a1[5] = v29 + 1; + v15 = a1[8]; + *comp = 70; + comp[3] = v25; + comp[4] = v28; + if ( v15 < a1[9] ) + goto LABEL_22; + } + goto LABEL_64; + } + } + else + { + if ( v8 != 116 ) + return 0; + v9 = v2 + 1; + a1[3] = v2 + 1; + v6 = v2[1]; + if ( v6 == 116 ) + { + a1[3] = v2 + 2; + v10 = v2[2]; + if ( v10 == 95 ) + { + v13 = 0; + a1[3] = v2 + 3; +LABEL_20: + v14 = a1[5]; + if ( v14 < a1[6] ) + { + comp = (_DWORD *)(a1[4] + 20 * v14); + v15 = a1[8]; + comp[1] = 0; + comp[2] = 0; + a1[5] = v14 + 1; + v2 = (char *)a1[3]; + *comp = 72; + comp[3] = v13; + if ( v15 < a1[9] ) + { +LABEL_22: + *(_DWORD *)(a1[7] + 4 * v15) = comp; + a1[8] = v15 + 1; + v6 = *v2; + goto LABEL_7; + } + goto LABEL_64; + } + goto LABEL_71; + } + if ( v10 != 110 ) + { + v11 = d_number((int)a1); + v12 = v11 + 1 < 0; + v13 = v11 + 1; + v2 = (char *)a1[3]; + v6 = *v2; + if ( !v12 && v6 == 95 ) + { + a1[3] = v2 + 1; + goto LABEL_20; + } +LABEL_43: + comp = 0; + goto LABEL_7; + } + return 0; + } + } + v2 = v9; + comp = 0; + goto LABEL_7; + } + a1[3] = v2 + 1; + comp = d_source_name((int)a1); + if ( comp && d_discriminator((int)a1) ) + goto LABEL_6; + return 0; + } + v22 = (_DWORD *)a1[10]; + v34 = v22; + if ( v22 && (!*v22 || *v22 == 24) ) + { + a1[11] += v22[4]; + v6 = *v2; + v3 = *v2; + if ( *v2 != 67 ) + { + if ( v6 != 68 ) + goto LABEL_43; + goto LABEL_40; + } + } + else if ( v3 != 67 ) + { +LABEL_40: + switch ( v2[1] ) + { + case '0': + v23 = 1; + goto LABEL_46; + case '1': + v23 = 2; + goto LABEL_46; + case '2': + v23 = 3; + goto LABEL_46; + case '4': + v23 = 4; + goto LABEL_46; + case '5': + v23 = 5; +LABEL_46: + v24 = a1[5]; + a1[3] = v2 + 2; + if ( v24 < a1[6] && (comp = (_DWORD *)(a1[4] + 20 * v24), comp[1] = 0, comp[2] = 0, a1[5] = v24 + 1, v22) ) + { + comp[1] = 0; + comp[2] = 0; + *comp = 8; + comp[3] = v23; + comp[4] = v22; + v6 = v2[2]; + v2 += 2; + } + else + { + v6 = v2[2]; + comp = 0; + v2 += 2; + } + break; + default: + v6 = v3; + comp = 0; + break; + } +LABEL_7: + if ( v6 != 66 ) + return comp; + goto LABEL_24; + } + v30 = v2[1]; + if ( (_BYTE)v30 == 73 ) + { + a1[3] = v2 + 1; + v33 = v2[2]; + if ( (unsigned __int8)(v33 - 49) > 4u ) + { + v6 = v2[1]; + comp = 0; + ++v2; + goto LABEL_7; + } + v31 = v33 - 48; + a1[3] = v2 + 3; + d_type(); + v34 = (_DWORD *)a1[10]; + } + else + { + if ( (unsigned __int8)(v30 - 49) > 4u ) + return 0; + v31 = v30 - 48; + a1[3] = v2 + 2; + } + v32 = a1[5]; + if ( v32 < a1[6] ) + { + comp = (_DWORD *)(a1[4] + 20 * v32); + comp[1] = 0; + comp[2] = 0; + a1[5] = v32 + 1; + if ( v34 ) + { + comp[1] = 0; + comp[2] = 0; + *comp = 7; + comp[3] = v31; + comp[4] = v34; + goto LABEL_6; + } + } +LABEL_71: + v2 = (char *)a1[3]; +LABEL_64: + v6 = *v2; + comp = 0; + goto LABEL_7; + } + comp = d_source_name((int)a1); + v2 = (char *)a1[3]; + if ( *v2 != 66 ) + return comp; +LABEL_24: + v16 = a1[10]; + do + { + a1[3] = v2 + 1; + v17 = d_source_name((int)a1); + comp = d_make_comp(a1, 76, (int)comp, (int)v17); + v2 = (char *)a1[3]; + } + while ( *v2 == 66 ); + a1[10] = v16; + return comp; +} +// 457A70: using guessed type int d_type(void); + +//----- (00458C60) -------------------------------------------------------- +int *__usercall d_name@(_DWORD *a1@) +{ + char *v2; // edx + char v3; // al + int *v4; // esi + _BYTE *v5; // eax + char v7; // al + _DWORD *v8; // esi + _BYTE *v9; // eax + char v10; // dl + _DWORD *v11; // eax + _DWORD *v12; // edi + _BYTE *v13; // eax + int v14; // edx + _DWORD *v15; // ecx + _DWORD *v17; // edx + int v18; // eax + int v19; // ecx + _DWORD *v20; // ecx + int *comp; // eax + int v22; // edx + _DWORD *v23; // eax + int **v24; // ebp + unsigned __int8 *v25; // edx + _DWORD *v26; // eax + int *v27; // edi + int v28; // ebx + _DWORD *v29; // esi + unsigned int v30; // eax + int *v31; // eax + int v32; // edx + int v33; // eax + int v34; // ecx + char v35; // dl + int v36; // ebp + _BYTE *v37; // eax + _DWORD *v38; // edx + int v39; // eax + _DWORD *v40; // ebx + int *v41; // eax + _BYTE *v42; // eax + _DWORD *v43; // eax + int v44; // eax + int v45; // edx + int v46; // eax + int *v47; // [esp+1Ch] [ebp-30h] + _DWORD *v48; // [esp+1Ch] [ebp-30h] + int *v49; // [esp+2Ch] [ebp-20h] BYREF + + v2 = (char *)a1[3]; + v3 = *v2; + if ( *v2 == 85 ) + return d_unqualified_name(a1); + if ( v3 > 85 ) + { + if ( v3 != 90 ) + goto LABEL_21; + a1[3] = v2 + 1; + v7 = v2[1]; + if ( v7 == 71 || v7 == 84 ) + v8 = d_special_name(a1); + else + v8 = d_encoding_part_0((int)a1, 0); + if ( !v8 ) + return 0; + v9 = (_BYTE *)a1[3]; + if ( *v9 != 69 ) + return 0; + a1[3] = v9 + 1; + v10 = v9[1]; + if ( v10 == 115 ) + { + a1[3] = v9 + 2; + if ( !d_discriminator((int)a1) ) + return 0; + v44 = a1[5]; + if ( v44 < a1[6] ) + { + v45 = a1[4]; + a1[5] = v44 + 1; + v12 = (_DWORD *)(v45 + 20 * v44); + v12[1] = 0; + v12[2] = 0; + *v12 = 0; + v12[3] = "string literal"; + v12[4] = 14; + goto LABEL_18; + } + } + else + { + if ( v10 != 100 ) + { + v11 = (_DWORD *)d_name(); + v12 = v11; + if ( v11 && ((*v11 - 70) & 0xFFFFFFFD) != 0 && !d_discriminator((int)a1) ) + return 0; + goto LABEL_18; + } + a1[3] = v9 + 2; + v35 = v9[2]; + if ( v35 == 95 ) + { + v36 = 0; + a1[3] = v9 + 3; + } + else + { + if ( v35 == 110 ) + return 0; + v36 = d_number((int)a1) + 1; + if ( v36 < 0 ) + return 0; + v37 = (_BYTE *)a1[3]; + if ( *v37 != 95 ) + return 0; + a1[3] = v37 + 1; + } + v38 = (_DWORD *)d_name(); + if ( v38 ) + { + if ( ((*v38 - 70) & 0xFFFFFFFD) != 0 ) + { + v48 = v38; + v46 = d_discriminator((int)a1); + v38 = v48; + if ( !v46 ) + return 0; + } + } + v39 = a1[5]; + if ( v39 < a1[6] ) + { + v12 = (_DWORD *)(a1[4] + 20 * v39); + v12[1] = 0; + v12[2] = 0; + a1[5] = v39 + 1; + *v12 = 71; + v12[4] = v36; + v12[3] = v38; + goto LABEL_18; + } + } + v12 = 0; +LABEL_18: + if ( *v8 == 3 ) + { + v43 = (_DWORD *)v8[4]; + if ( *v43 == 41 ) + v43[3] = 0; + } + return d_make_comp(a1, 2, (int)v8, (int)v12); + } + if ( v3 != 78 ) + { + if ( v3 == 83 ) + { + if ( v2[1] != 116 ) + { + v4 = d_substitution((int)a1, 0); + v5 = (_BYTE *)a1[3]; + if ( *v5 != 73 ) + return v4; + goto LABEL_62; + } + a1[3] = v2 + 2; + v17 = d_unqualified_name(a1); + v18 = a1[5]; + if ( v18 >= a1[6] ) + { + v20 = 0; + } + else + { + v19 = a1[4]; + a1[5] = v18 + 1; + v20 = (_DWORD *)(v19 + 20 * v18); + v20[1] = 0; + v20[2] = 0; + *v20 = 0; + v20[3] = &off_558A2B; + v20[4] = 3; + } + comp = d_make_comp(a1, 1, (int)v20, (int)v17); + a1[11] += 3; + v4 = comp; + v5 = (_BYTE *)a1[3]; + if ( *v5 == 73 ) + { + if ( !v4 ) + return 0; + v22 = a1[8]; + if ( v22 >= a1[9] ) + return 0; + *(_DWORD *)(a1[7] + 4 * v22) = v4; + a1[8] = v22 + 1; + if ( (unsigned __int8)(*v5 - 73) > 1u ) + { + v23 = 0; + return d_make_comp(a1, 4, (int)v4, (int)v23); + } +LABEL_62: + a1[3] = v5 + 1; + v23 = d_template_args_1(a1); + return d_make_comp(a1, 4, (int)v4, (int)v23); + } + return v4; + } +LABEL_21: + v4 = d_unqualified_name(a1); + v13 = (_BYTE *)a1[3]; + if ( *v13 != 73 ) + return v4; + if ( !v4 ) + return 0; + v14 = a1[8]; + if ( v14 >= a1[9] ) + return 0; + *(_DWORD *)(a1[7] + 4 * v14) = v4; + v15 = 0; + a1[8] = v14 + 1; + if ( (unsigned __int8)(*v13 - 73) <= 1u ) + { + a1[3] = v13 + 1; + v15 = d_template_args_1(a1); + } + return d_make_comp(a1, 4, (int)v4, (int)v15); + } + a1[3] = v2 + 1; + v24 = d_cv_qualifiers(a1, &v49, 1); + if ( !v24 ) + return 0; + v47 = d_ref_qualifier(a1, 0); + if ( !*(_BYTE *)a1[3] ) + { +LABEL_51: + *v24 = 0; + return 0; + } + v25 = (unsigned __int8 *)a1[3]; + v26 = a1; + v27 = 0; + v28 = *v25; + v29 = v26; + while ( 1 ) + { + if ( (_BYTE)v28 == 68 ) + { + if ( (v25[1] & 0xDF) == 84 ) + v31 = (int *)d_type(); + else + v31 = d_unqualified_name(v29); +LABEL_55: + v32 = 1; + if ( v27 ) + goto LABEL_44; + goto LABEL_56; + } + v30 = v28 - 48; + if ( (unsigned __int8)(v28 - 48) <= 0x1Cu ) + goto LABEL_58; + if ( (unsigned __int8)(v28 - 97) <= 0x19u ) + break; + if ( (_BYTE)v28 == 85 ) + { + v31 = d_unqualified_name(v29); + if ( v27 ) + { +LABEL_43: + v32 = 1; +LABEL_44: + v27 = d_make_comp(v29, v32, (int)v27, (int)v31); + goto LABEL_45; + } +LABEL_56: + v25 = (unsigned __int8 *)v29[3]; + v27 = v31; + goto LABEL_46; + } + if ( (_BYTE)v28 != 83 ) + goto LABEL_75; + v31 = d_substitution((int)v29, 1); + if ( v27 ) + goto LABEL_43; + v25 = (unsigned __int8 *)v29[3]; + v27 = v31; +LABEL_50: + v28 = *v25; + if ( !(_BYTE)v28 ) + goto LABEL_51; + } + do + { + v31 = d_unqualified_name(v29); + if ( v27 ) + goto LABEL_43; + v27 = v31; +LABEL_45: + v25 = (unsigned __int8 *)v29[3]; + if ( (_BYTE)v28 == 83 ) + goto LABEL_50; +LABEL_46: + LOBYTE(v28) = *v25; + if ( *v25 != 69 ) + { + if ( !v27 ) + goto LABEL_51; + v33 = v29[8]; + if ( v33 >= v29[9] ) + goto LABEL_51; + *(_DWORD *)(v29[7] + 4 * v33) = v27; + v29[8] = v33 + 1; + goto LABEL_50; + } + v30 = 21; +LABEL_58: + v34 = 268960767; + } + while ( _bittest(&v34, v30) ); + if ( (_BYTE)v28 == 73 ) + { + if ( !v27 ) + goto LABEL_51; + v29[3] = v25 + 1; + v31 = d_template_args_1(v29); + v32 = 4; + goto LABEL_44; + } +LABEL_75: + if ( (_BYTE)v28 == 84 ) + { + v31 = d_template_param(v29); + goto LABEL_55; + } + if ( (_BYTE)v28 != 69 ) + { + if ( !v27 || (_BYTE)v28 != 77 ) + goto LABEL_51; + v29[3] = ++v25; + goto LABEL_50; + } + *v24 = v27; + v40 = v29; + if ( v27 ) + { + if ( v47 ) + { + v41 = v49; + v49 = v47; + v47[3] = (int)v41; + } + v42 = (_BYTE *)v29[3]; + if ( *v42 == 69 ) + { + v4 = v49; + v40[3] = v42 + 1; + return v4; + } + } + return 0; +} +// 457A70: using guessed type int d_type(void); +// 558A2B: using guessed type void *off_558A2B; + +//----- (00459230) -------------------------------------------------------- +unsigned int *__usercall d_encoding_part_0@(int a1@, int a2@) +{ + int v4; // eax + unsigned int *v5; // ebx + unsigned int v6; // eax + int *i; // edx + int v8; // eax + char v10; // al + unsigned int *v11; // edx + unsigned int v12; // eax + int v13; // edx + _DWORD *v14; // eax + unsigned int *v15; // edx + unsigned int v16; // eax + + v4 = d_name(); + if ( !v4 ) + return 0; + v5 = (unsigned int *)v4; + if ( !a2 || (*(_BYTE *)(a1 + 8) & 1) != 0 ) + { + v10 = **(_BYTE **)(a1 + 12); + if ( v10 && v10 != 69 ) + { + v11 = v5; + while ( 1 ) + { + v12 = *v11; + if ( *v11 == 4 ) + break; + if ( *v11 > 4 ) + { + if ( v12 != 77 ) + { + if ( v12 <= 0x4D ) + { + if ( v12 - 28 > 4 ) + { +LABEL_21: + v13 = 0; + goto LABEL_22; + } + } + else if ( v12 - 79 > 1 ) + { + goto LABEL_21; + } + } + v11 = (unsigned int *)v11[3]; + } + else + { + if ( v12 != 2 ) + goto LABEL_21; + v11 = (unsigned int *)v11[4]; + } + if ( !v11 ) + goto LABEL_21; + } + v15 = (unsigned int *)v11[3]; + if ( v15 ) + { + while ( 1 ) + { + v16 = *v15; + if ( *v15 > 8 ) + break; + if ( v16 > 6 ) + goto LABEL_21; + if ( v16 - 1 <= 1 ) + { + v15 = (unsigned int *)v15[4]; + if ( v15 ) + continue; + } + goto LABEL_42; + } + v13 = v16 != 53; + } + else + { +LABEL_42: + v13 = 1; + } +LABEL_22: + v14 = d_bare_function_type((_DWORD *)a1, v13); + if ( !v14 ) + return 0; + if ( !a2 && *v5 == 2 && *v14 == 41 ) + v14[3] = 0; + return d_make_comp((_DWORD *)a1, 3, (int)v5, (int)v14); + } + return v5; + } + while ( 1 ) + { + v6 = *v5; + if ( *v5 == 77 ) + goto LABEL_27; + if ( *v5 <= 0x4D ) + break; + if ( v6 - 79 > 1 ) + return v5; +LABEL_27: + v5 = (unsigned int *)v5[3]; + } + if ( v6 - 28 <= 4 ) + goto LABEL_27; + if ( v6 != 2 ) + return v5; + for ( i = (int *)v5[4]; i; v5[4] = (unsigned int)i ) + { + v8 = *i; + if ( *i != 77 ) + { + if ( (unsigned int)*i > 0x4D ) + { + if ( (unsigned int)(v8 - 79) > 1 ) + return v5; + } + else if ( (unsigned int)(v8 - 28) > 4 ) + { + return v5; + } + } + i = (int *)i[3]; + } + return 0; +} +// 458C60: using guessed type int d_name(void); + +//----- (00459400) -------------------------------------------------------- +_DWORD *__usercall d_special_name@(_DWORD *a1@) +{ + int v2; // ecx + _BYTE *v3; // eax + char v4; // dl + int v5; // eax + _BYTE *v6; // edx + _BYTE *v7; // esi + int v8; // edi + _DWORD *comp; // ebp + char v10; // al + int v11; // edx + _DWORD *name; // eax + _DWORD *result; // eax + char v14; // al + int v15; // edi + int v16; // eax + _DWORD *v17; // esi + char v18; // al + unsigned int *v19; // ecx + int v20; // eax + bool v21; // zf + char v22; // al + unsigned int *v23; // ecx + unsigned int *v24; // ecx + int v25; // eax + int v26; // eax + int v27; // esi + _BYTE *v28; // eax + int v29; // eax + int v30; // eax + unsigned int *v31; // eax + char v32; // al + unsigned int *v33; // ecx + char v34; // al + unsigned int *v35; // ecx + char v36; // al + unsigned int *v37; // ecx + int v38; // eax + int v39; // eax + int v40; // eax + int v41; // eax + int v42; // eax + int v43; // ecx + char v44; // al + int v45; // [esp+1Ch] [ebp-20h] + int v46; // [esp+1Ch] [ebp-20h] + + v2 = a1[11]; + a1[11] = v2 + 20; + v3 = (_BYTE *)a1[3]; + if ( *v3 == 84 ) + { + a1[3] = v3 + 1; + if ( v3[1] ) + { + a1[3] = v3 + 2; + v14 = v3[1] - 65; + switch ( v14 ) + { + case 0: + v31 = d_template_arg(a1); + result = d_make_comp(a1, 48, (int)v31, 0); + break; + case 2: + v27 = d_type(); + if ( d_number((int)a1) < 0 ) + return 0; + v28 = (_BYTE *)a1[3]; + if ( *v28 != 95 ) + return 0; + a1[3] = v28 + 1; + v29 = d_type(); + a1[11] += 5; + result = d_make_comp(a1, 11, v29, v27); + break; + case 5: + v26 = d_type(); + result = d_make_comp(a1, 14, v26, 0); + break; + case 7: + v30 = d_name(); + result = d_make_comp(a1, 20, v30, 0); + break; + case 8: + v25 = d_type(); + result = d_make_comp(a1, 12, v25, 0); + break; + case 9: + v42 = d_type(); + result = d_make_comp(a1, 18, v42, 0); + break; + case 18: + v41 = d_type(); + result = d_make_comp(a1, 13, v41, 0); + break; + case 19: + a1[11] = v2 + 10; + v40 = d_type(); + result = d_make_comp(a1, 10, v40, 0); + break; + case 21: + a1[11] = v2 + 15; + v39 = d_type(); + result = d_make_comp(a1, 9, v39, 0); + break; + case 22: + v38 = d_name(); + result = d_make_comp(a1, 21, v38, 0); + break; + case 34: + if ( !d_call_offset((int)a1, 0) || !d_call_offset((int)a1, 0) ) + return 0; + v36 = *(_BYTE *)a1[3]; + if ( v36 == 71 || v36 == 84 ) + v37 = (unsigned int *)d_special_name(); + else + v37 = d_encoding_part_0((int)a1, 0); + result = d_make_comp(a1, 17, (int)v37, 0); + break; + case 39: + if ( !d_call_offset((int)a1, 104) ) + return 0; + v34 = *(_BYTE *)a1[3]; + if ( v34 == 71 || v34 == 84 ) + v35 = (unsigned int *)d_special_name(); + else + v35 = d_encoding_part_0((int)a1, 0); + result = d_make_comp(a1, 15, (int)v35, 0); + break; + case 53: + if ( !d_call_offset((int)a1, 118) ) + return 0; + v32 = *(_BYTE *)a1[3]; + if ( v32 == 71 || v32 == 84 ) + v33 = (unsigned int *)d_special_name(); + else + v33 = d_encoding_part_0((int)a1, 0); + result = d_make_comp(a1, 16, (int)v33, 0); + break; + default: + return 0; + } + return result; + } + return 0; + } + if ( *v3 != 71 ) + return 0; + a1[3] = v3 + 1; + if ( !v3[1] ) + return 0; + a1[3] = v3 + 2; + v4 = v3[1]; + if ( v4 == 84 ) + { + if ( !v3[2] ) + goto LABEL_86; + a1[3] = v3 + 3; + v21 = v3[2] == 110; + v22 = v3[3]; + if ( v21 ) + { + if ( v22 == 71 || v22 == 84 ) + v24 = (unsigned int *)d_special_name(); + else + v24 = d_encoding_part_0((int)a1, 0); + return d_make_comp(a1, 74, (int)v24, 0); + } + if ( v22 == 71 || v22 == 84 ) + v23 = (unsigned int *)d_special_name(); + else +LABEL_86: + v23 = d_encoding_part_0((int)a1, 0); + return d_make_comp(a1, 73, (int)v23, 0); + } + if ( v4 <= 84 ) + { + if ( v4 == 65 ) + { + v18 = v3[2]; + if ( v18 == 71 || v18 == 84 ) + v19 = (unsigned int *)d_special_name(); + else + v19 = d_encoding_part_0((int)a1, 0); + return d_make_comp(a1, 23, (int)v19, 0); + } + if ( v4 == 82 ) + { + v15 = d_name(); + v16 = a1[5]; + if ( v16 >= a1[6] ) + { + v17 = 0; + } + else + { + v17 = (_DWORD *)(a1[4] + 20 * v16); + v17[1] = 0; + v17[2] = 0; + a1[5] = v16 + 1; + *v17 = 66; + v17[3] = d_number((int)a1); + } + return d_make_comp(a1, 22, v15, (int)v17); + } + return 0; + } + if ( v4 != 86 ) + { + if ( v4 == 114 ) + { + v5 = d_number((int)a1); + if ( v5 > 1 ) + { + v6 = (_BYTE *)a1[3]; + if ( *v6 ) + { + v7 = v6 + 1; + a1[3] = v6 + 1; + if ( *v6 == 95 ) + { + v8 = v5 - 1; + comp = 0; + while ( *v7 ) + { + if ( *v7 == 36 ) + { + v10 = v7[1]; + switch ( v10 ) + { + case 'S': + v45 = 47; + break; + case '_': + v45 = 46; + break; + case '$': + v45 = 36; + break; + default: + return 0; + } + v11 = a1[5]; + v7 = (_BYTE *)(a1[3] + 2); + if ( v11 >= a1[6] ) + { + a1[3] = v7; + return 0; + } + v8 -= 2; + name = (_DWORD *)(a1[4] + 20 * v11); + name[1] = 0; + name[2] = 0; + a1[5] = v11 + 1; + *name = 65; + name[3] = v45; + a1[3] = v7; + } + else + { + v43 = 0; + do + { + if ( ++v43 >= v8 ) + break; + v44 = v7[v43]; + if ( !v44 ) + break; + } + while ( v44 != 36 ); + v46 = v43; + name = d_make_name(a1, (int)v7, v43); + v7 = (_BYTE *)(v46 + a1[3]); + v8 -= v46; + a1[3] = v7; + if ( !name ) + return 0; + } + if ( comp ) + { + comp = d_make_comp(a1, 64, (int)comp, (int)name); + if ( !comp ) + return 0; + } + else + { + comp = name; + } + if ( v8 <= 0 ) + return d_make_comp(a1, 63, (int)comp, 0); + } + } + } + } + } + return 0; + } + v20 = d_name(); + return d_make_comp(a1, 19, v20, 0); +} +// 457A70: using guessed type int d_type(void); +// 458C60: using guessed type int d_name(void); + +//----- (00459A30) -------------------------------------------------------- +unsigned int *__usercall d_expr_primary@(_DWORD *a1@) +{ + _BYTE *v1; // edx + char *v3; // eax + char v4; // cl + _DWORD *v5; // eax + int v6; // ebp + char *v7; // edx + char v8; // cl + int v9; // esi + char *v10; // eax + char *v11; // edi + char v13; // al + unsigned int *comp; // ebp + char v15; // dl + int v16; // eax + int v17; // ecx + _DWORD *name; // eax + + v1 = (_BYTE *)a1[3]; + if ( *v1 != 76 ) + return 0; + v3 = v1 + 1; + a1[3] = v1 + 1; + v4 = v1[1]; + if ( v4 == 95 ) + { + v3 = v1 + 2; + a1[3] = v1 + 2; + v15 = v1[2]; + if ( v15 != 90 ) + { + comp = 0; + goto LABEL_17; + } + goto LABEL_14; + } + if ( v4 == 90 ) + { +LABEL_14: + a1[3] = v3 + 1; + v13 = v3[1]; + if ( v13 == 71 || v13 == 84 ) + { + comp = (unsigned int *)d_special_name(); + v3 = (char *)a1[3]; + v15 = *v3; + } + else + { + comp = d_encoding_part_0((int)a1, 0); + v3 = (char *)a1[3]; + v15 = *v3; + } + goto LABEL_17; + } + v5 = (_DWORD *)d_type(); + v6 = (int)v5; + if ( !v5 ) + return 0; + v7 = (char *)a1[3]; + if ( *v5 == 39 ) + { + v16 = v5[3]; + if ( *(_DWORD *)(v16 + 16) ) + a1[11] -= *(_DWORD *)(v16 + 4); + v8 = *v7; + if ( !strcmp(*(const char **)v16, "decltype(nullptr)") ) + { + if ( v8 == 69 ) + { + a1[3] = v7 + 1; + return (unsigned int *)v6; + } + v9 = 61; + if ( v8 != 110 ) + goto LABEL_9; + goto LABEL_24; + } + } + else + { + v8 = *v7; + } + v9 = 61; + if ( v8 == 110 ) + { +LABEL_24: + v9 = 62; + a1[3] = v7 + 1; + v8 = *++v7; + } + if ( v8 != 69 ) + { +LABEL_9: + v10 = v7 + 1; + while ( v8 ) + { + a1[3] = v10; + v11 = v10; + v8 = *v10++; + if ( v8 == 69 ) + { + v17 = v11 - v7; + goto LABEL_28; + } + } + return 0; + } + v17 = 0; +LABEL_28: + name = d_make_name(a1, (int)v7, v17); + comp = d_make_comp(a1, v9, v6, (int)name); + v3 = (char *)a1[3]; + v15 = *v3; +LABEL_17: + if ( v15 != 69 ) + return 0; + a1[3] = v3 + 1; + return comp; +} +// 457A70: using guessed type int d_type(void); +// 459400: using guessed type int d_special_name(void); + +//----- (00459BF0) -------------------------------------------------------- +unsigned int *__usercall d_expression_1@(_DWORD *a1@) +{ + char *v2; // edx + char v3; // al + _DWORD *v4; // esi + _BYTE *v5; // eax + int *v7; // eax + int v8; // esi + int v9; // eax + int v10; // eax + char v11; // al + int v12; // eax + char v13; // al + int v14; // eax + _BYTE *v15; // edx + int v16; // edx + int v17; // eax + _BYTE *v18; // edx + int v19; // esi + char **v20; // edx + char *v21; // edi + int v22; // eax + int v23; // ebp + _DWORD *v24; // eax + _DWORD *v25; // edi + int v26; // ebp + _DWORD *v27; // eax + _DWORD *v28; // eax + _DWORD *v29; // eax + _DWORD *v30; // eax + int v31; // esi + _DWORD *v32; // edi + _BYTE *v33; // eax + _DWORD *v35; // eax + _DWORD *v36; // eax + _DWORD *v37; // eax + int v38; // eax + char v39; // dl + _BYTE *v40; // edx + char *v41; // eax + _DWORD *v42; // ebp + int v43; // eax + _DWORD *v44; // edi + _DWORD *v45; // eax + unsigned __int8 v46; // al + char *v47; // eax + char v48; // dl + _BYTE *v49; // eax + _DWORD *v50; // eax + _BYTE *v51; // eax + char v52; // al + _DWORD *comp; // [esp+0h] [ebp-2Ch] + + v2 = (char *)a1[3]; + v3 = *v2; + if ( *v2 == 76 ) + return d_expr_primary(a1); + if ( v3 != 84 ) + { + if ( v3 == 115 ) + { + v11 = v2[1]; + if ( v11 == 114 ) + { + a1[3] = v2 + 2; + v31 = d_type(); + v32 = d_unqualified_name(a1); + v33 = (_BYTE *)a1[3]; + if ( *v33 != 73 ) + return d_make_comp(a1, 1, v31, (int)v32); + a1[3] = v33 + 1; + v37 = d_template_args_1(a1); + comp = d_make_comp(a1, 4, (int)v32, (int)v37); + return d_make_comp(a1, 1, v31, (int)comp); + } + if ( v11 == 112 ) + { + a1[3] = v2 + 2; + v12 = d_expression_1(); + return d_make_comp(a1, 75, v12, 0); + } + } + else if ( v3 == 102 ) + { + if ( v2[1] == 112 ) + { + a1[3] = v2 + 2; + v13 = v2[2]; + switch ( v13 ) + { + case 'T': + a1[3] = v2 + 3; + v16 = 0; + break; + case '_': + a1[3] = v2 + 3; + v16 = 1; + break; + case 'n': + return 0; + default: + v14 = d_number((int)a1); + if ( v14 + 1 < 0 ) + return 0; + v15 = (_BYTE *)a1[3]; + if ( *v15 != 95 ) + return 0; + a1[3] = v15 + 1; + if ( v14 == 2147483646 ) + return 0; + v16 = v14 + 2; + break; + } + v17 = a1[5]; + if ( v17 < a1[6] ) + { + v4 = (_DWORD *)(a1[4] + 20 * v17); + v4[1] = 0; + v4[2] = 0; + a1[5] = v17 + 1; + *v4 = 6; + v4[3] = v16; + return v4; + } + return 0; + } + } + else + { + if ( (unsigned __int8)(v3 - 48) <= 9u ) + goto LABEL_6; + if ( v3 == 111 ) + { + if ( v2[1] == 110 ) + { + a1[3] = v2 + 2; +LABEL_6: + v4 = d_unqualified_name(a1); + if ( v4 ) + { + v5 = (_BYTE *)a1[3]; + if ( *v5 == 73 ) + { + a1[3] = v5 + 1; + v30 = d_template_args_1(a1); + return d_make_comp(a1, 4, (int)v4, (int)v30); + } + return v4; + } + return 0; + } + } + else if ( (v3 == 105 || v3 == 116) && v2[1] == 108 ) + { + v18 = v2 + 2; + v19 = 0; + a1[3] = v18; + if ( v3 == 116 ) + { + v38 = d_type(); + v18 = (_BYTE *)a1[3]; + v19 = v38; + } + if ( *v18 && v18[1] ) + { + v36 = d_exprlist(a1, 69); + return d_make_comp(a1, 49, v19, (int)v36); + } + return 0; + } + } + v7 = d_operator_name(a1); + v8 = (int)v7; + if ( !v7 ) + return 0; + v9 = *v7; + if ( v9 != 50 ) + { + if ( v9 == 52 ) + { + v51 = (_BYTE *)a1[3]; + if ( *v51 == 95 ) + { + a1[3] = v51 + 1; + v35 = d_exprlist(a1, 69); + return d_make_comp(a1, 55, v8, (int)v35); + } + goto LABEL_65; + } + if ( v9 == 51 ) + { + v10 = *(_DWORD *)(v8 + 12); + if ( v10 <= 1 ) + { + if ( !v10 ) + return d_make_comp(a1, 54, v8, 0); + if ( v10 == 1 ) + { +LABEL_65: + v35 = (_DWORD *)d_expression_1(); + return d_make_comp(a1, 55, v8, (int)v35); + } + } + } + return 0; + } + v20 = *(char ***)(v8 + 12); + v21 = *v20; + a1[11] += v20[2] - 2; + v22 = (unsigned __int8)*v21; + if ( v22 == 115 && v21[1] == 116 && !v21[2] ) + { + v35 = (_DWORD *)d_type(); + return d_make_comp(a1, 55, v8, (int)v35); + } + v23 = (int)v20[3]; + if ( v23 == 1 ) + { + v39 = *v21; + if ( (*v21 == 112 || v39 == 109) && v39 == v21[1] ) + { + v40 = (_BYTE *)a1[3]; + if ( *v40 == 95 ) + { + v23 = 0; + a1[3] = v40 + 1; + v22 = (unsigned __int8)*v21; + } + } + else + { + v23 = 0; + } + if ( v22 == 115 && v21[1] == 80 && !v21[2] ) + v35 = d_template_args_1(a1); + else + v35 = (_DWORD *)d_expression_1(); + if ( v23 ) + v35 = d_make_comp(a1, 57, (int)v35, (int)v35); + return d_make_comp(a1, 55, v8, (int)v35); + } + if ( v23 <= 1 ) + { + if ( !v23 ) + return d_make_comp(a1, 54, v8, 0); + return 0; + } + if ( v23 == 2 ) + { + v41 = **(char ***)(v8 + 12); + if ( v41[1] == 99 && ((v52 = *v41, (unsigned __int8)(v52 - 99) <= 1u) || (unsigned __int8)(v52 - 114) <= 1u) ) + { + v42 = (_DWORD *)d_type(); + } + else if ( *v21 == 102 ) + { + v42 = d_operator_name(a1); + } + else + { + v42 = (_DWORD *)d_expression_1(); + } + v43 = (unsigned __int8)*v21; + if ( v43 == 99 && v21[1] == 108 && !v21[2] ) + { + v44 = d_exprlist(a1, 69); + } + else if ( v43 == 100 && v21[1] == 116 && !v21[2] || v43 == 112 && v21[1] == 116 && !v21[2] ) + { + v44 = d_unqualified_name(a1); + v49 = (_BYTE *)a1[3]; + if ( *v49 == 73 ) + { + a1[3] = v49 + 1; + v50 = d_template_args_1(a1); + v44 = d_make_comp(a1, 4, (int)v44, (int)v50); + } + } + else + { + v44 = (_DWORD *)d_expression_1(); + } + v45 = d_make_comp(a1, 57, (int)v42, (int)v44); + return d_make_comp(a1, 56, v8, (int)v45); + } + if ( v23 != 3 ) + return 0; + if ( v22 == 113 && v21[1] == 117 && !v21[2] ) + { + v24 = (_DWORD *)d_expression_1(); + } + else + { + if ( *v21 != 102 ) + { + if ( *v21 != 110 ) + return 0; + v46 = v21[1]; + if ( v46 != 119 && v46 != 97 ) + return 0; + v25 = d_exprlist(a1, 95); + v26 = d_type(); + v47 = (char *)a1[3]; + v48 = *v47; + if ( *v47 == 69 ) + { + a1[3] = v47 + 1; + v27 = 0; + } + else if ( v48 == 112 ) + { + if ( v47[1] != 105 ) + return 0; + a1[3] = v47 + 2; + v27 = d_exprlist(a1, 69); + } + else + { + if ( v48 != 105 || v47[1] != 108 ) + return 0; + v27 = (_DWORD *)d_expression_1(); + } + goto LABEL_53; + } + v24 = d_operator_name(a1); + } + v25 = v24; + v26 = d_expression_1(); + v27 = (_DWORD *)d_expression_1(); + if ( !v27 ) + return 0; +LABEL_53: + v28 = d_make_comp(a1, 60, v26, (int)v27); + v29 = d_make_comp(a1, 59, (int)v25, (int)v28); + return d_make_comp(a1, 58, v8, (int)v29); + } + return d_template_param(a1); +} +// 457A70: using guessed type int d_type(void); + +//----- (0045A2A0) -------------------------------------------------------- +_DWORD *__usercall d_exprlist@(_DWORD *a1@, char a2@
) +{ + _BYTE *v4; // eax + int *v5; // esi + _DWORD *comp; // eax + _BYTE *v7; // eax + int v8; // ebp + int v9; // eax + int v11; // [esp+1Ch] [ebp-20h] BYREF + + v4 = (_BYTE *)a1[3]; + v11 = 0; + v5 = &v11; + if ( *v4 == a2 ) + { + a1[3] = v4 + 1; + return d_make_comp(a1, 46, 0, 0); + } + else + { + do + { + v8 = a1[12]; + a1[12] = 1; + v9 = d_expression_1(); + a1[12] = v8; + if ( !v9 ) + return 0; + comp = d_make_comp(a1, 46, v9, 0); + *v5 = (int)comp; + if ( !comp ) + return 0; + v5 = comp + 4; + v7 = (_BYTE *)a1[3]; + } + while ( *v7 != a2 ); + a1[3] = v7 + 1; + return (_DWORD *)v11; + } +} +// 459BF0: using guessed type int d_expression_1(void); + +//----- (0045A350) -------------------------------------------------------- +int **__usercall d_cv_qualifiers@(_DWORD *a1@, int **a2@, int a3@) +{ + int **v3; // esi + char *v5; // ebp + char i; // di + char v7; // al + int v8; // edi + unsigned int *v9; // eax + _BYTE *v10; // edx + int v11; // edx + _DWORD *comp; // eax + int *v14; // eax + int v15; // edx + _BYTE *v16; // edx + int **v17; // eax + int v18; // [esp+1Ch] [ebp-30h] + int v19; // [esp+20h] [ebp-2Ch] + int v20; // [esp+24h] [ebp-28h] + char v21; // [esp+28h] [ebp-24h] + + v3 = a2; + v21 = a3; + v20 = a3 == 0 ? 27 : 30; + v19 = a3 == 0 ? 26 : 29; + v18 = a3 == 0 ? 25 : 28; + v5 = (char *)a1[3]; + for ( i = *v5; next_is_type_qual_isra_0(v5); i = *v5 ) + { + a1[3] = v5 + 1; + switch ( i ) + { + case 'r': + a1[11] += 9; + v11 = v18; + v9 = 0; + break; + case 'V': + a1[11] += 9; + v11 = v19; + v9 = 0; + break; + case 'K': + a1[11] += 6; + v11 = v20; + v9 = 0; + break; + default: + if ( !v5[1] ) + return 0; + a1[3] = v5 + 2; + v7 = v5[1]; + if ( v7 == 120 ) + { + a1[11] += 17; + v9 = 0; + v11 = 77; + } + else if ( (v7 & 0xDF) == 79 ) + { + a1[11] += 9; + if ( v7 == 79 ) + { + v8 = a1[12]; + a1[12] = 1; + v9 = d_expression_1(a1); + a1[12] = v8; + if ( !v9 ) + return 0; + v10 = (_BYTE *)a1[3]; + if ( *v10 != 69 ) + return 0; + a1[3] = v10 + 1; + v11 = 79; + } + else + { + v9 = 0; + v11 = 79; + } + } + else + { + if ( v7 != 119 ) + return 0; + a1[11] += 6; + v9 = (unsigned int *)d_parmlist(a1); + if ( !v9 ) + return 0; + v16 = (_BYTE *)a1[3]; + if ( *v16 != 69 ) + return 0; + a1[3] = v16 + 1; + v11 = 80; + } + break; + } + comp = d_make_comp(a1, v11, 0, (int)v9); + *v3 = comp; + if ( !comp ) + return 0; + v5 = (char *)a1[3]; + v3 = (int **)(comp + 3); + } + if ( (v21 & 1) == 0 && i == 70 && v3 != a2 ) + { + v14 = *a2; + v15 = **a2; + if ( v15 != 26 ) + goto LABEL_34; +LABEL_21: + *v14 = 29; + while ( 1 ) + { + v17 = (int **)(v14 + 3); + if ( v3 == v17 ) + break; + v14 = *v17; + v15 = *v14; + if ( *v14 == 26 ) + goto LABEL_21; +LABEL_34: + if ( v15 == 27 ) + { + *v14 = 30; + } + else if ( v15 == 25 ) + { + *v14 = 28; + } + } + } + return v3; +} + +//----- (0045A570) -------------------------------------------------------- +unsigned int *__usercall d_template_arg@(_DWORD *a1@) +{ + char *v2; // edx + char v3; // al + unsigned int *result; // eax + int v5; // esi + _BYTE *v6; // edx + + v2 = (char *)a1[3]; + v3 = *v2; + if ( *v2 == 76 ) + return d_expr_primary(a1); + if ( v3 <= 76 ) + { + if ( (unsigned __int8)(v3 - 73) <= 1u ) + { + a1[3] = v2 + 1; + return d_template_args_1(a1); + } + return (unsigned int *)d_type(); + } + if ( v3 != 88 ) + return (unsigned int *)d_type(); + v5 = a1[12]; + a1[12] = 1; + a1[3] = v2 + 1; + result = d_expression_1(a1); + v6 = (_BYTE *)a1[3]; + a1[12] = v5; + if ( *v6 != 69 ) + return 0; + a1[3] = v6 + 1; + return result; +} +// 457A70: using guessed type int d_type(void); + +//----- (0045A600) -------------------------------------------------------- +_DWORD *__usercall d_template_args_1@(_DWORD *a1@) +{ + int v2; // edi + _BYTE *v3; // eax + int *v4; // esi + _DWORD *comp; // eax + _BYTE *v6; // eax + int v7; // ecx + int v9; // [esp+1Ch] [ebp-10h] BYREF + + v2 = a1[10]; + v3 = (_BYTE *)a1[3]; + if ( *v3 == 69 ) + { + a1[3] = v3 + 1; + return d_make_comp(a1, 47, 0, 0); + } + else + { + v9 = 0; + v4 = &v9; + do + { + v7 = d_template_arg(); + if ( !v7 ) + return 0; + comp = d_make_comp(a1, 47, v7, 0); + *v4 = (int)comp; + if ( !comp ) + return 0; + v4 = comp + 4; + v6 = (_BYTE *)a1[3]; + } + while ( *v6 != 69 ); + a1[10] = v2; + a1[3] = v6 + 1; + return (_DWORD *)v9; + } +} +// 45A570: using guessed type int d_template_arg(void); + +//----- (0045A6B0) -------------------------------------------------------- +unsigned int __usercall d_print_comp_inner@(unsigned int result@, int a2@) +{ + unsigned int v2; // ebx + int v3; // edi + unsigned int v4; // ebp + _DWORD *v5; // esi + unsigned int *v6; // edi + FILE *v7; // edx + int *v8; // ecx + int v9; // eax + int v10; // edx + char *v11; // eax + int v12; // eax + int v13; // ecx + char *v14; // eax + int v15; // edx + char *v16; // eax + int v17; // ecx + char *v18; // edx + _DWORD *v19; // ecx + unsigned int v20; // edi + int v21; // eax + int v22; // edx + int v23; // eax + int v24; // edx + char v25; // dl + int v26; // ecx + unsigned int v27; // edi + const char *v28; // ebp + char i14; // al + unsigned int v30; // edx + const char *v31; // edi + int v32; // eax + char i; // dl + int v34; // ecx + int v35; // eax + int v36; // eax + const char *v37; // edi + char i15; // dl + int v39; // ecx + int v40; // eax + int v41; // ebp + char **v42; // edx + FILE *v43; // ebp + int v44; // eax + const char *v45; // edi + char jj; // dl + int v47; // ecx + int v48; // eax + int v49; // eax + const char *v50; // edi + char ii; // dl + int v52; // ecx + int v53; // eax + int v54; // eax + const char *v55; // edi + char i6; // dl + int v57; // ecx + int v58; // eax + int v59; // eax + const char *v60; // edi + char i5; // dl + int v62; // ecx + int v63; // eax + int v64; // eax + const char *v65; // edi + char i4; // dl + int v67; // ecx + int v68; // eax + const char *v69; // edi + int v70; // eax + char i29; // dl + int v72; // ecx + int v73; // eax + _DWORD *v74; // eax + int v75; // ecx + const char *v76; // esi + char i28; // dl + unsigned int v78; // ecx + int v79; // eax + int v80; // eax + const char *v81; // edi + char i27; // dl + int v83; // ecx + int v84; // eax + int v85; // eax + const char *v86; // edi + char i26; // dl + int v88; // ecx + int v89; // eax + int v90; // eax + const char *v91; // edi + char i25; // dl + int v93; // ecx + int v94; // eax + int v95; // eax + const char *v96; // edi + char i2; // dl + int v98; // ecx + int v99; // eax + int v100; // eax + const char *v101; // edi + char i1; // dl + int v103; // ecx + int v104; // eax + int v105; // eax + const char *v106; // edi + char nn; // dl + int v108; // ecx + int v109; // eax + int v110; // eax + const char *v111; // edi + char mm; // dl + int v113; // ecx + int v114; // eax + int v115; // eax + const char *v116; // edi + char i3; // dl + int v118; // ecx + int v119; // eax + int v120; // edx + int v121; // ecx + const char *v122; // edi + int v123; // eax + char i30; // dl + int v125; // ecx + int v126; // eax + char *v127; // ebp + unsigned int v128; // edi + char *v129; // ecx + char *v130; // ebp + int v131; // eax + unsigned int v132; // edx + _DWORD *v133; // ecx + int v134; // edi + char *v135; // esi + char *v136; // edi + unsigned int v137; // ecx + char v138; // dl + int v139; // eax + int v140; // ecx + char *v141; // eax + _DWORD *v142; // eax + unsigned __int8 *v143; // edx + int v144; // eax + int v145; // ecx + int v146; // ecx + unsigned __int8 *v147; // eax + int v148; // edx + int v149; // ebp + const char *v150; // esi + char k; // dl + unsigned int v152; // ecx + int v153; // eax + int v154; // eax + const char *v155; // edi + char i11; // dl + int v157; // ecx + int v158; // eax + int v159; // eax + const char *v160; // edi + char i9; // dl + int v162; // ecx + int v163; // eax + int v164; // eax + const char *v165; // edi + char i8; // dl + int v167; // ecx + int v168; // eax + int v169; // eax + const char *v170; // edi + char i7; // dl + int v172; // ecx + int v173; // eax + int v174; // ecx + char *v175; // eax + int v176; // eax + char *base; // ecx + int v178; // eax + const char *v179; // edi + char j; // dl + int v181; // ecx + int v182; // eax + int v183; // edi + int v184; // ebp + int v185; // eax + int v186; // edx + int v187; // edx + int v188; // ecx + int v189; // edx + const char *v190; // esi + char i13; // dl + unsigned int v192; // ecx + int v193; // eax + int v194; // eax + const char *v195; // edi + char n; // dl + int v197; // ecx + int v198; // eax + int v199; // eax + const char *v200; // edi + char i20; // dl + int v202; // ecx + int v203; // eax + int v204; // eax + const char *v205; // edi + char i24; // dl + int v207; // ecx + int v208; // eax + int v209; // eax + int v210; // edi + _DWORD *v211; // ecx + int v212; // eax + _DWORD *v213; // ebp + int *v214; // esi + int v215; // eax + const char *v216; // edi + char i21; // dl + int v218; // ecx + int v219; // eax + FILE *v220; // esi + unsigned int v221; // edi + FILE *v222; // edi + unsigned int v223; // ecx + char v224; // dl + int v225; // eax + int v226; // eax + const char *v227; // edi + char i22; // dl + int v229; // ecx + int v230; // eax + int v231; // eax + const char *v232; // edi + char i17; // dl + int v234; // ecx + int v235; // eax + int v236; // eax + const char *v237; // edi + char i16; // dl + int v239; // ecx + int v240; // eax + int v241; // edi + const char *v242; // esi + char v243; // dl + int v244; // ebp + unsigned int v245; // ecx + int v246; // eax + int v247; // ecx + int v248; // esi + int v249; // eax + int v250; // edx + int v251; // edx + _DWORD *v252; // edi + int v253; // eax + int v254; // eax + _DWORD *v255; // ecx + int v256; // eax + const char *v257; // edi + char i23; // dl + int v259; // ecx + int v260; // eax + int v261; // edi + char *v262; // esi + char *v263; // edi + unsigned int v264; // ecx + char v265; // dl + int v266; // eax + int v267; // edi + char *v268; // esi + char *v269; // edi + unsigned int v270; // ecx + char v271; // dl + int v272; // eax + int v273; // edx + bool v274; // cf + const char *v275; // edi + int v276; // eax + char kk; // dl + int v278; // ecx + int v279; // eax + _DWORD *v280; // edi + FILE *v281; // esi + size_t v282; // ebp + int v283; // eax + FILE *v284; // ebp + int v285; // ecx + char ptr; // dl + int v287; // eax + char *v288; // esi + int v289; // edi + char *v290; // edi + unsigned int v291; // ecx + char v292; // dl + int v293; // eax + int v294; // ecx + const char *v295; // edi + int v296; // eax + char v297; // dl + int v298; // ecx + int v299; // eax + int v300; // eax + FILE *v301; // esi + size_t v302; // edi + FILE *v303; // edi + unsigned int v304; // ecx + char v305; // dl + int v306; // eax + int v307; // eax + int v308; // edx + const char *v309; // edi + int v310; // eax + char i10; // dl + int v312; // ecx + int v313; // eax + int v314; // eax + FILE *v315; // esi + size_t v316; // edi + FILE *v317; // edi + unsigned int v318; // ecx + char v319; // dl + int v320; // eax + int v321; // ebp + int v322; // eax + int v323; // edx + _DWORD *charbuf; // ecx + int v325; // eax + char v326; // al + const char *v327; // esi + char i12; // dl + unsigned int v329; // ecx + int v330; // eax + unsigned int v331; // ecx + _DWORD *v332; // esi + int v333; // eax + FILE *v334; // esi + unsigned int v335; // edi + FILE *v336; // edi + unsigned int v337; // ecx + char v338; // dl + int v339; // eax + FILE *v340; // esi + size_t v341; // edi + FILE *v342; // edi + unsigned int v343; // ecx + char v344; // dl + int v345; // eax + const char *v346; // esi + char m; // dl + unsigned int v348; // ecx + int v349; // eax + int v350; // eax + char *v351; // eax + char *v352; // eax + char *v353; // eax + unsigned __int8 *v354; // ebp + int v355; // edx + int v356; // ecx + _DWORD *i18; // eax + int v358; // ecx + int v359; // eax + int v360; // ecx + int v361; // eax + _DWORD *pack; // eax + int v363; // ecx + int i19; // edx + int v365; // eax + int v366; // eax + int v367; // eax + int v368; // eax + int v369; // eax + int v370; // eax + int v371; // eax + int v372; // eax + _DWORD *v373; // eax + int v374; // edi + _DWORD *v375; // ecx + int v376; // edx + _DWORD *v377; // ebp + _DWORD *v378; // edx + int v379; // edx + char v380; // al + int v381; // eax + int v382; // edx + FILE *v383; // esi + unsigned int v384; // edi + FILE *v385; // edi + unsigned int v386; // ecx + char v387; // dl + int v388; // eax + int v389; // eax + int v390; // eax + const char *v391; // edx + int v392; // edx + int v393; // eax + unsigned int v394; // edi + int v395; // eax + int v396; // eax + bool v397; // zf + _DWORD *v398; // ecx + int v399; // ebp + int *v400; // ebp + int v401; // edx + int v402; // edi + char *Str2; // [esp+4h] [ebp-88h] + int v404; // [esp+8h] [ebp-84h] + char *v405; // [esp+10h] [ebp-7Ch] + char v406; // [esp+10h] [ebp-7Ch] + char v407; // [esp+10h] [ebp-7Ch] + char v408; // [esp+10h] [ebp-7Ch] + char v409; // [esp+10h] [ebp-7Ch] + char v410; // [esp+10h] [ebp-7Ch] + char v411; // [esp+10h] [ebp-7Ch] + char v412; // [esp+10h] [ebp-7Ch] + char v413; // [esp+10h] [ebp-7Ch] + char v414; // [esp+10h] [ebp-7Ch] + char v415; // [esp+10h] [ebp-7Ch] + char v416; // [esp+10h] [ebp-7Ch] + char v417; // [esp+10h] [ebp-7Ch] + char v418; // [esp+10h] [ebp-7Ch] + char v419; // [esp+10h] [ebp-7Ch] + char v420; // [esp+10h] [ebp-7Ch] + char v421; // [esp+10h] [ebp-7Ch] + char v422; // [esp+10h] [ebp-7Ch] + char v423; // [esp+10h] [ebp-7Ch] + char v424; // [esp+10h] [ebp-7Ch] + char v425; // [esp+10h] [ebp-7Ch] + char v426; // [esp+10h] [ebp-7Ch] + char v427; // [esp+10h] [ebp-7Ch] + char v428; // [esp+10h] [ebp-7Ch] + char v429; // [esp+10h] [ebp-7Ch] + char v430; // [esp+10h] [ebp-7Ch] + char v431; // [esp+10h] [ebp-7Ch] + char v432; // [esp+10h] [ebp-7Ch] + char v433; // [esp+10h] [ebp-7Ch] + char v434; // [esp+10h] [ebp-7Ch] + char v435; // [esp+10h] [ebp-7Ch] + _DWORD *v436; // [esp+10h] [ebp-7Ch] + char v437; // [esp+10h] [ebp-7Ch] + char v438; // [esp+10h] [ebp-7Ch] + char v439; // [esp+10h] [ebp-7Ch] + char v440; // [esp+10h] [ebp-7Ch] + char v441; // [esp+10h] [ebp-7Ch] + char v442; // [esp+10h] [ebp-7Ch] + char v443; // [esp+10h] [ebp-7Ch] + char v444; // [esp+10h] [ebp-7Ch] + char v445; // [esp+10h] [ebp-7Ch] + char v446; // [esp+10h] [ebp-7Ch] + char v447; // [esp+10h] [ebp-7Ch] + char v448; // [esp+10h] [ebp-7Ch] + char v449; // [esp+10h] [ebp-7Ch] + char v450; // [esp+10h] [ebp-7Ch] + char v451; // [esp+10h] [ebp-7Ch] + char v452; // [esp+10h] [ebp-7Ch] + char v453; // [esp+10h] [ebp-7Ch] + char v454; // [esp+10h] [ebp-7Ch] + char v455; // [esp+10h] [ebp-7Ch] + char v456; // [esp+10h] [ebp-7Ch] + int v457; // [esp+10h] [ebp-7Ch] + char v458; // [esp+10h] [ebp-7Ch] + int v459; // [esp+10h] [ebp-7Ch] + unsigned int v460; // [esp+14h] [ebp-78h] + int v461; // [esp+14h] [ebp-78h] + int v462; // [esp+14h] [ebp-78h] + char *v463; // [esp+14h] [ebp-78h] + FILE *v464; // [esp+18h] [ebp-74h] + int v465; // [esp+1Ch] [ebp-70h] + int v466[2]; // [esp+28h] [ebp-64h] BYREF + FILE Str[2]; // [esp+30h] [ebp-5Ch] BYREF + + v2 = result; + if ( !a2 ) + goto LABEL_7; + v3 = *(_DWORD *)(result + 280); + if ( v3 ) + return result; + v4 = *(_DWORD *)a2; + v5 = (_DWORD *)a2; + switch ( *(_DWORD *)a2 ) + { + case 0: + v261 = *(_DWORD *)(a2 + 16); + v262 = *(char **)(a2 + 12); + if ( v261 ) + { + result = *(_DWORD *)(result + 256); + v263 = &v262[v261]; + do + { + v265 = *v262; + if ( result == 255 ) + { + v266 = *(_DWORD *)(v2 + 268); + v444 = *v262; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v266); + ++*(_DWORD *)(v2 + 296); + v265 = v444; + v264 = v4; + result = 1; + } + else + { + v264 = result++; + } + ++v262; + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v264) = v265; + *(_BYTE *)(v2 + 260) = v265; + } + while ( v263 != v262 ); + } + return result; + case 1: + case 2: + v31 = "::"; + d_print_comp(*(_DWORD *)(a2 + 12), 17); + v32 = *(_DWORD *)(v2 + 256); + for ( i = 58; ; i = *v31 ) + { + if ( v32 == 255 ) + { + v35 = *(_DWORD *)(v2 + 268); + v407 = i; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v35); + ++*(_DWORD *)(v2 + 296); + i = v407; + v34 = 0; + v32 = 1; + } + else + { + v34 = v32++; + } + ++v31; + *(_DWORD *)(v2 + 256) = v32; + *(_BYTE *)(v2 + v34) = i; + *(_BYTE *)(v2 + 260) = i; + if ( "" == v31 ) + break; + } + v280 = (_DWORD *)v5[4]; + if ( *v280 == 71 ) + { + v281 = Str; + d_append_string(v2, "{default arg#"); + sprintf_constprop_0(Str, (int)"%d", v280[4] + 1); + v282 = strlen((const char *)Str); + if ( v282 ) + { + v283 = *(_DWORD *)(v2 + 256); + v284 = (FILE *)((char *)Str + v282); + do + { + ptr = (char)v281->_ptr; + if ( v283 == 255 ) + { + v287 = *(_DWORD *)(v2 + 268); + v447 = (char)v281->_ptr; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v287); + ++*(_DWORD *)(v2 + 296); + ptr = v447; + v285 = 0; + v283 = 1; + } + else + { + v285 = v283++; + } + v281 = (FILE *)((char *)v281 + 1); + *(_DWORD *)(v2 + 256) = v283; + *(_BYTE *)(v2 + v285) = ptr; + *(_BYTE *)(v2 + 260) = ptr; + } + while ( v284 != v281 ); + } + d_append_string(v2, "}::"); + v8 = (int *)v280[3]; + } + else + { + v8 = (int *)v5[4]; + } + return d_print_comp(v8, 17); + case 3: + result = *(_DWORD *)(result + 276); + v6 = *(unsigned int **)(a2 + 12); + *(_DWORD *)(v2 + 276) = 0; + v465 = result; + if ( !v6 ) + goto LABEL_7; + v41 = 0; + v461 = *(_DWORD *)(v2 + 272); + v7 = Str; + result = 0; + while ( 2 ) + { + v7->_ptr = (char *)result; + ++v41; + v7->_base = 0; + v7->_flag = v461; + result = *v6; + v464 = v7; + v7->_cnt = (int)v6; + if ( result == 77 ) + goto LABEL_4; + if ( result > 0x4D ) + { + v274 = result == 79; + result -= 79; + if ( !v274 && result != 1 ) + { + *(_DWORD *)(v2 + 276) = v7; + goto LABEL_85; + } + } + else if ( result - 28 > 4 ) + { + *(_DWORD *)(v2 + 276) = v7; + if ( result == 2 ) + { + v6 = (unsigned int *)v6[4]; + result = *v6; + if ( *v6 == 71 ) + { + v6 = (unsigned int *)v6[3]; + if ( !v6 ) + goto LABEL_7; + result = *v6; + } + v42 = &Str[0]._ptr + 4 * v41; + while ( 1 ) + { + if ( result != 77 ) + { + if ( result > 0x4D ) + { + v274 = result == 79; + result -= 79; + if ( !v274 && result != 1 ) + goto LABEL_85; + } + else if ( result - 28 > 4 ) + { + break; + } + } + if ( v41 == 4 ) + goto LABEL_7; + v351 = *(v42 - 3); + *(v42 - 3) = (char *)v6; + ++v41; + *(_DWORD *)(v2 + 276) = v42; + v42[1] = v351; + v352 = *(v42 - 2); + *(v42 - 2) = 0; + v6 = (unsigned int *)v6[3]; + v42[2] = v352; + v42[3] = *(v42 - 1); + v353 = (char *)(v42 - 4); + v42 += 4; + *(v42 - 4) = v353; + result = v461; + *(v42 - 5) = (char *)v461; + if ( !v6 ) + goto LABEL_7; + result = *v6; + } + } + if ( result == 4 ) + { + v466[1] = (int)v6; + v466[0] = v461; + *(_DWORD *)(v2 + 272) = v466; + } +LABEL_85: + d_print_comp(*(_DWORD *)(a2 + 16), 17); + if ( *v6 == 4 ) + *(_DWORD *)(v2 + 272) = v466[0]; + v43 = (FILE *)((char *)Str + 16 * v41); + do + { + if ( !v43[-1]._bufsiz ) + { + v322 = *(_DWORD *)(v2 + 256); + if ( v322 == 255 ) + { + v381 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v381); + ++*(_DWORD *)(v2 + 296); + v323 = 1; + v322 = 0; + } + else + { + v323 = v322 + 1; + } + *(_DWORD *)(v2 + 256) = v323; + charbuf = (_DWORD *)v43[-1]._charbuf; + *(_BYTE *)(v2 + v322) = 32; + *(_BYTE *)(v2 + 260) = 32; + d_print_mod(v2, charbuf); + } + v43 = (FILE *)((char *)v43 - 16); + } + while ( Str != v43 ); + result = v465; + *(_DWORD *)(v2 + 276) = v465; + return result; + } +LABEL_4: + v6 = (unsigned int *)v6[3]; + if ( v6 ) + { + result = (unsigned int)v7; + v7 = (FILE *)((char *)v7 + 16); + if ( v41 == 4 ) + { + *(_DWORD *)(v2 + 276) = v464; + goto LABEL_7; + } + continue; + } + break; + } + *(_DWORD *)(v2 + 276) = v7; + goto LABEL_7; + case 4: + v183 = *(_DWORD *)(result + 328); + v184 = *(_DWORD *)(result + 276); + *(_DWORD *)(result + 328) = a2; + *(_DWORD *)(result + 276) = 0; + d_print_comp(*(_DWORD *)(a2 + 12), 17); + if ( *(_BYTE *)(v2 + 260) == 60 ) + d_append_char(v2, 32); + v185 = *(_DWORD *)(v2 + 256); + if ( v185 == 255 ) + { + v371 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v371); + ++*(_DWORD *)(v2 + 296); + v186 = 1; + v185 = 0; + } + else + { + v186 = v185 + 1; + } + *(_DWORD *)(v2 + 256) = v186; + *(_BYTE *)(v2 + v185) = 60; + *(_BYTE *)(v2 + 260) = 60; + d_print_comp(v5[4], 17); + if ( *(_BYTE *)(v2 + 260) == 62 ) + d_append_char(v2, 32); + result = *(_DWORD *)(v2 + 256); + if ( result == 255 ) + { + v370 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v370); + ++*(_DWORD *)(v2 + 296); + v187 = 1; + result = 0; + } + else + { + v187 = result + 1; + } + *(_DWORD *)(v2 + 256) = v187; + *(_BYTE *)(v2 + result) = 62; + *(_BYTE *)(v2 + 260) = 62; + *(_DWORD *)(v2 + 276) = v184; + *(_DWORD *)(v2 + 328) = v183; + return result; + case 5: + if ( *(_DWORD *)(result + 288) ) + { + v178 = *(_DWORD *)(result + 256); + v179 = "auto:"; + for ( j = 97; ; j = *v179 ) + { + if ( v178 == 255 ) + { + v182 = *(_DWORD *)(v2 + 268); + v431 = j; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v182); + ++*(_DWORD *)(v2 + 296); + j = v431; + v181 = 0; + v178 = 1; + } + else + { + v181 = v178++; + } + ++v179; + *(_DWORD *)(v2 + 256) = v178; + *(_BYTE *)(v2 + v181) = j; + *(_BYTE *)(v2 + 260) = j; + if ( v179 == "" ) + break; + } + v333 = v5[3]; + v334 = Str; + sprintf_constprop_0(Str, (int)"%d", v333 + 1); + result = strlen((const char *)Str); + v335 = result; + if ( result ) + { + result = *(_DWORD *)(v2 + 256); + v336 = (FILE *)((char *)Str + v335); + do + { + v338 = (char)v334->_ptr; + if ( result == 255 ) + { + v339 = *(_DWORD *)(v2 + 268); + v454 = (char)v334->_ptr; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v339); + ++*(_DWORD *)(v2 + 296); + v338 = v454; + v337 = 0; + result = 1; + } + else + { + v337 = result++; + } + v334 = (FILE *)((char *)v334 + 1); + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v337) = v338; + *(_BYTE *)(v2 + 260) = v338; + } + while ( v334 != v336 ); + } + return result; + } + result = (unsigned int)d_lookup_template_argument(result, a2); + v331 = result; + if ( result ) + { + if ( *(_DWORD *)result != 47 + || (v382 = *(_DWORD *)(v2 + 292), v382 < 0) + || (result = (unsigned int)d_index_template_argument_part_0((_DWORD *)result, v382), (v331 = result) != 0) ) + { + v332 = *(_DWORD **)(v2 + 272); + *(_DWORD *)(v2 + 272) = *v332; + result = d_print_comp(v331, 17); + *(_DWORD *)(v2 + 272) = v332; + return result; + } + } + goto LABEL_7; + case 6: + v149 = *(_DWORD *)(a2 + 12); + result = *(_DWORD *)(result + 256); + if ( v149 ) + { + v150 = "parm#"; + for ( k = 123; ; k = *v150++ ) + { + if ( result == 255 ) + { + v153 = *(_DWORD *)(v2 + 268); + v426 = k; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v153); + ++*(_DWORD *)(v2 + 296); + k = v426; + v152 = 0; + result = 1; + } + else + { + v152 = result++; + } + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v152) = k; + *(_BYTE *)(v2 + 260) = k; + if ( v150 == "" ) + break; + } + v340 = Str; + sprintf_constprop_0(Str, (int)"%d", v149); + v341 = strlen((const char *)Str); + result = *(_DWORD *)(v2 + 256); + if ( v341 ) + { + v342 = (FILE *)((char *)Str + v341); + do + { + v344 = (char)v340->_ptr; + if ( result == 255 ) + { + v345 = *(_DWORD *)(v2 + 268); + v455 = (char)v340->_ptr; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v345); + ++*(_DWORD *)(v2 + 296); + v344 = v455; + v343 = 0; + result = 1; + } + else + { + v343 = result++; + } + v340 = (FILE *)((char *)v340 + 1); + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v343) = v344; + *(_BYTE *)(v2 + 260) = v344; + } + while ( v342 != v340 ); + } + if ( result == 255 ) + { + v390 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v390); + ++*(_DWORD *)(v2 + 296); + result = 0; + } + *(_DWORD *)(v2 + 256) = result + 1; + *(_BYTE *)(v2 + result) = 125; + *(_BYTE *)(v2 + 260) = 125; + } + else + { + v346 = "this"; + for ( m = 116; ; m = *v346 ) + { + if ( result == 255 ) + { + v349 = *(_DWORD *)(v2 + 268); + v456 = m; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v349); + ++*(_DWORD *)(v2 + 296); + m = v456; + v348 = 0; + result = 1; + } + else + { + v348 = result++; + } + ++v346; + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v348) = m; + *(_BYTE *)(v2 + 260) = m; + if ( v346 == "" ) + break; + } + } + return result; + case 7: + goto LABEL_14; + case 8: + v9 = *(_DWORD *)(result + 256); + if ( v9 == 255 ) + { + v367 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v367); + ++*(_DWORD *)(v2 + 296); + v10 = 1; + v9 = 0; + } + else + { + v10 = v9 + 1; + } + *(_DWORD *)(v2 + 256) = v10; + *(_BYTE *)(v2 + v9) = 126; + *(_BYTE *)(v2 + 260) = 126; + goto LABEL_14; + case 9: + v194 = *(_DWORD *)(result + 256); + v195 = "table for "; + for ( n = 118; ; n = *v195++ ) + { + if ( v194 == 255 ) + { + v198 = *(_DWORD *)(v2 + 268); + v433 = n; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v198); + ++*(_DWORD *)(v2 + 296); + n = v433; + v197 = 0; + v194 = 1; + } + else + { + v197 = v194++; + } + *(_DWORD *)(v2 + 256) = v194; + *(_BYTE *)(v2 + v197) = n; + *(_BYTE *)(v2 + 260) = n; + if ( v195 == "" ) + break; + } + goto LABEL_9; + case 0xA: + v49 = *(_DWORD *)(result + 256); + v50 = "TT for "; + for ( ii = 86; ; ii = *v50++ ) + { + if ( v49 == 255 ) + { + v53 = *(_DWORD *)(v2 + 268); + v410 = ii; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v53); + ++*(_DWORD *)(v2 + 296); + ii = v410; + v52 = 0; + v49 = 1; + } + else + { + v52 = v49++; + } + *(_DWORD *)(v2 + 256) = v49; + *(_BYTE *)(v2 + v52) = ii; + *(_BYTE *)(v2 + 260) = ii; + if ( v50 == "" ) + break; + } + goto LABEL_9; + case 0xB: + v44 = *(_DWORD *)(result + 256); + v45 = "onstruction vtable for "; + for ( jj = 99; ; jj = *v45++ ) + { + if ( v44 == 255 ) + { + v48 = *(_DWORD *)(v2 + 268); + v409 = jj; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v48); + ++*(_DWORD *)(v2 + 296); + jj = v409; + v47 = 0; + v44 = 1; + } + else + { + v47 = v44++; + } + *(_DWORD *)(v2 + 256) = v44; + *(_BYTE *)(v2 + v47) = jj; + *(_BYTE *)(v2 + 260) = jj; + if ( v45 == "" ) + break; + } + v275 = "-in-"; + d_print_comp(v5[3], 17); + v276 = *(_DWORD *)(v2 + 256); + for ( kk = 45; ; kk = *v275 ) + { + if ( v276 == 255 ) + { + v279 = *(_DWORD *)(v2 + 268); + v446 = kk; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v279); + ++*(_DWORD *)(v2 + 296); + kk = v446; + v278 = 0; + v276 = 1; + } + else + { + v278 = v276++; + } + ++v275; + *(_DWORD *)(v2 + 256) = v276; + *(_BYTE *)(v2 + v278) = kk; + *(_BYTE *)(v2 + 260) = kk; + if ( v275 == "" ) + break; + } + goto LABEL_14; + case 0xC: + v110 = *(_DWORD *)(result + 256); + v111 = "ypeinfo for "; + for ( mm = 116; ; mm = *v111++ ) + { + if ( v110 == 255 ) + { + v114 = *(_DWORD *)(v2 + 268); + v422 = mm; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v114); + ++*(_DWORD *)(v2 + 296); + mm = v422; + v113 = 0; + v110 = 1; + } + else + { + v113 = v110++; + } + *(_DWORD *)(v2 + 256) = v110; + *(_BYTE *)(v2 + v113) = mm; + *(_BYTE *)(v2 + 260) = mm; + if ( v111 == "" ) + break; + } + goto LABEL_9; + case 0xD: + v105 = *(_DWORD *)(result + 256); + v106 = "ypeinfo name for "; + for ( nn = 116; ; nn = *v106++ ) + { + if ( v105 == 255 ) + { + v109 = *(_DWORD *)(v2 + 268); + v421 = nn; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v109); + ++*(_DWORD *)(v2 + 296); + nn = v421; + v108 = 0; + v105 = 1; + } + else + { + v108 = v105++; + } + *(_DWORD *)(v2 + 256) = v105; + *(_BYTE *)(v2 + v108) = nn; + *(_BYTE *)(v2 + 260) = nn; + if ( v106 == "" ) + break; + } + goto LABEL_9; + case 0xE: + v100 = *(_DWORD *)(result + 256); + v101 = "ypeinfo fn for "; + for ( i1 = 116; ; i1 = *v101++ ) + { + if ( v100 == 255 ) + { + v104 = *(_DWORD *)(v2 + 268); + v420 = i1; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v104); + ++*(_DWORD *)(v2 + 296); + i1 = v420; + v103 = 0; + v100 = 1; + } + else + { + v103 = v100++; + } + *(_DWORD *)(v2 + 256) = v100; + *(_BYTE *)(v2 + v103) = i1; + *(_BYTE *)(v2 + 260) = i1; + if ( v101 == "" ) + break; + } + goto LABEL_9; + case 0xF: + v95 = *(_DWORD *)(result + 256); + v96 = "on-virtual thunk to "; + for ( i2 = 110; ; i2 = *v96++ ) + { + if ( v95 == 255 ) + { + v99 = *(_DWORD *)(v2 + 268); + v419 = i2; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v99); + ++*(_DWORD *)(v2 + 296); + i2 = v419; + v98 = 0; + v95 = 1; + } + else + { + v98 = v95++; + } + *(_DWORD *)(v2 + 256) = v95; + *(_BYTE *)(v2 + v98) = i2; + *(_BYTE *)(v2 + 260) = i2; + if ( v96 == "" ) + break; + } + goto LABEL_9; + case 0x10: + v115 = *(_DWORD *)(result + 256); + v116 = "irtual thunk to "; + for ( i3 = 118; ; i3 = *v116++ ) + { + if ( v115 == 255 ) + { + v119 = *(_DWORD *)(v2 + 268); + v423 = i3; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v119); + ++*(_DWORD *)(v2 + 296); + i3 = v423; + v118 = 0; + v115 = 1; + } + else + { + v118 = v115++; + } + *(_DWORD *)(v2 + 256) = v115; + *(_BYTE *)(v2 + v118) = i3; + *(_BYTE *)(v2 + 260) = i3; + if ( v116 == "" ) + break; + } + goto LABEL_9; + case 0x11: + v64 = *(_DWORD *)(result + 256); + v65 = "ovariant return thunk to "; + for ( i4 = 99; ; i4 = *v65++ ) + { + if ( v64 == 255 ) + { + v68 = *(_DWORD *)(v2 + 268); + v413 = i4; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v68); + ++*(_DWORD *)(v2 + 296); + i4 = v413; + v67 = 0; + v64 = 1; + } + else + { + v67 = v64++; + } + *(_DWORD *)(v2 + 256) = v64; + *(_BYTE *)(v2 + v67) = i4; + *(_BYTE *)(v2 + 260) = i4; + if ( v65 == "" ) + break; + } + goto LABEL_9; + case 0x12: + v59 = *(_DWORD *)(result + 256); + v60 = "ava Class for "; + for ( i5 = 106; ; i5 = *v60++ ) + { + if ( v59 == 255 ) + { + v63 = *(_DWORD *)(v2 + 268); + v412 = i5; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v63); + ++*(_DWORD *)(v2 + 296); + i5 = v412; + v62 = 0; + v59 = 1; + } + else + { + v62 = v59++; + } + *(_DWORD *)(v2 + 256) = v59; + *(_BYTE *)(v2 + v62) = i5; + *(_BYTE *)(v2 + 260) = i5; + if ( v60 == "" ) + break; + } + goto LABEL_9; + case 0x13: + v54 = *(_DWORD *)(result + 256); + v55 = "uard variable for "; + for ( i6 = 103; ; i6 = *v55++ ) + { + if ( v54 == 255 ) + { + v58 = *(_DWORD *)(v2 + 268); + v411 = i6; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v58); + ++*(_DWORD *)(v2 + 296); + i6 = v411; + v57 = 0; + v54 = 1; + } + else + { + v57 = v54++; + } + *(_DWORD *)(v2 + 256) = v54; + *(_BYTE *)(v2 + v57) = i6; + *(_BYTE *)(v2 + 260) = i6; + if ( v55 == "" ) + break; + } + goto LABEL_9; + case 0x14: + v169 = *(_DWORD *)(result + 256); + v170 = "LS init function for "; + for ( i7 = 84; ; i7 = *v170++ ) + { + if ( v169 == 255 ) + { + v173 = *(_DWORD *)(v2 + 268); + v430 = i7; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v173); + ++*(_DWORD *)(v2 + 296); + i7 = v430; + v172 = 0; + v169 = 1; + } + else + { + v172 = v169++; + } + *(_DWORD *)(v2 + 256) = v169; + *(_BYTE *)(v2 + v172) = i7; + *(_BYTE *)(v2 + 260) = i7; + if ( v170 == "" ) + break; + } + goto LABEL_9; + case 0x15: + v164 = *(_DWORD *)(result + 256); + v165 = "LS wrapper function for "; + for ( i8 = 84; ; i8 = *v165++ ) + { + if ( v164 == 255 ) + { + v168 = *(_DWORD *)(v2 + 268); + v429 = i8; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v168); + ++*(_DWORD *)(v2 + 296); + i8 = v429; + v167 = 0; + v164 = 1; + } + else + { + v167 = v164++; + } + *(_DWORD *)(v2 + 256) = v164; + *(_BYTE *)(v2 + v167) = i8; + *(_BYTE *)(v2 + 260) = i8; + if ( v165 == "" ) + break; + } + goto LABEL_9; + case 0x16: + v159 = *(_DWORD *)(result + 256); + v160 = "eference temporary #"; + for ( i9 = 114; ; i9 = *v160++ ) + { + if ( v159 == 255 ) + { + v163 = *(_DWORD *)(v2 + 268); + v428 = i9; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v163); + ++*(_DWORD *)(v2 + 296); + i9 = v428; + v162 = 0; + v159 = 1; + } + else + { + v162 = v159++; + } + *(_DWORD *)(v2 + 256) = v159; + *(_BYTE *)(v2 + v162) = i9; + *(_BYTE *)(v2 + 260) = i9; + if ( v160 == "" ) + break; + } + v309 = " for "; + d_print_comp(v5[4], 17); + v310 = *(_DWORD *)(v2 + 256); + for ( i10 = 32; ; i10 = *v309 ) + { + if ( v310 == 255 ) + { + v313 = *(_DWORD *)(v2 + 268); + v451 = i10; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v313); + ++*(_DWORD *)(v2 + 296); + i10 = v451; + v312 = 0; + v310 = 1; + } + else + { + v312 = v310++; + } + ++v309; + *(_DWORD *)(v2 + 256) = v310; + *(_BYTE *)(v2 + v312) = i10; + *(_BYTE *)(v2 + 260) = i10; + if ( v309 == "" ) + break; + } + goto LABEL_9; + case 0x17: + v154 = *(_DWORD *)(result + 256); + v155 = "idden alias for "; + for ( i11 = 104; ; i11 = *v155++ ) + { + if ( v154 == 255 ) + { + v158 = *(_DWORD *)(v2 + 268); + v427 = i11; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v158); + ++*(_DWORD *)(v2 + 296); + i11 = v427; + v157 = 0; + v154 = 1; + } + else + { + v157 = v154++; + } + *(_DWORD *)(v2 + 256) = v154; + *(_BYTE *)(v2 + v157) = i11; + *(_BYTE *)(v2 + 260) = i11; + if ( v155 == "" ) + break; + } + goto LABEL_9; + case 0x18: + v134 = *(_DWORD *)(a2 + 16); + v135 = *(char **)(a2 + 12); + if ( v134 ) + { + result = *(_DWORD *)(result + 256); + v136 = &v135[v134]; + do + { + v138 = *v135; + if ( result == 255 ) + { + v139 = *(_DWORD *)(v2 + 268); + v425 = *v135; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v139); + ++*(_DWORD *)(v2 + 296); + v138 = v425; + v137 = 0; + result = 1; + } + else + { + v137 = result++; + } + ++v135; + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v137) = v138; + *(_BYTE *)(v2 + 260) = v138; + } + while ( v136 != v135 ); + } + return result; + case 0x19: + case 0x1A: + case 0x1B: + v14 = *(char **)(result + 276); + v405 = v14; + if ( !v14 ) + goto LABEL_36; + while ( 2 ) + { + if ( *((_DWORD *)v14 + 2) ) + goto LABEL_26; + v15 = **((_DWORD **)v14 + 1); + if ( (unsigned int)(v15 - 25) > 2 ) + { + v3 = 0; + goto LABEL_36; + } + if ( v4 != v15 ) + { +LABEL_26: + v14 = *(char **)v14; + if ( !v14 ) + goto LABEL_36; + continue; + } + break; + } +LABEL_9: + v8 = (int *)v5[3]; + return d_print_comp(v8, 17); + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + case 0x20: + case 0x21: + case 0x22: + case 0x25: + case 0x26: + case 0x4D: + case 0x4F: + case 0x50: + v11 = *(char **)(result + 276); + goto LABEL_16; + case 0x23: + case 0x24: + result = *(_DWORD *)(a2 + 12); + v18 = *(char **)result; + if ( *(_DWORD *)(v2 + 288) ) + goto LABEL_33; + v3 = 0; + if ( v18 != (char *)5 ) + goto LABEL_33; + v374 = *(_DWORD *)(v2 + 308); + if ( v374 <= 0 ) + goto LABEL_621; + v375 = *(_DWORD **)(v2 + 304); + v376 = 0; + break; + case 0x27: + result = *(_DWORD *)(a2 + 12); + v267 = *(_DWORD *)(result + 4); + v268 = *(char **)result; + if ( v267 ) + { + result = *(_DWORD *)(v2 + 256); + v269 = &v268[v267]; + do + { + v271 = *v268; + if ( result == 255 ) + { + v272 = *(_DWORD *)(v2 + 268); + v445 = *v268; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v272); + ++*(_DWORD *)(v2 + 296); + v271 = v445; + v270 = 0; + result = 1; + } + else + { + v270 = result++; + } + ++v268; + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v270) = v271; + *(_BYTE *)(v2 + 260) = v271; + } + while ( v268 != v269 ); + } + return result; + case 0x28: + goto LABEL_9; + case 0x29: + v174 = *(_DWORD *)(a2 + 12); + v175 = *(char **)(result + 276); + if ( !v174 ) + return d_print_function_type(v2, (int)v5, v175); + Str[0]._ptr = v175; + *(_DWORD *)(v2 + 276) = Str; + v176 = *(_DWORD *)(v2 + 272); + Str[0]._cnt = (int)v5; + Str[0]._flag = v176; + Str[0]._base = 0; + d_print_comp(v174, 17); + result = (unsigned int)Str[0]._ptr; + base = Str[0]._base; + *(_DWORD *)(v2 + 276) = Str[0]._ptr; + if ( !base ) + { + d_append_char(v2, 32); + v175 = *(char **)(v2 + 276); + return d_print_function_type(v2, (int)v5, v175); + } + return result; + case 0x2A: + v127 = *(char **)(result + 276); + Str[0]._cnt = a2; + v128 = 1; + v129 = v127; + v463 = v127; + Str[0]._ptr = v127; + v130 = (char *)Str; + *(_DWORD *)(result + 276) = Str; + v131 = *(_DWORD *)(result + 272); + Str[0]._base = 0; + Str[0]._flag = v131; + result = (unsigned int)v129; + if ( v129 ) + { + do + { + if ( (unsigned int)(**(_DWORD **)(result + 4) - 25) > 2 ) + break; + if ( !*(_DWORD *)(result + 8) ) + { + if ( v128 > 3 ) + goto LABEL_7; + v132 = v128++; + v132 *= 16; + *(char **)((char *)&Str[0]._ptr + v132) = *(char **)result; + v133 = (char **)((char *)&Str[0]._ptr + v132); + v133[1] = *(_DWORD *)(result + 4); + v133[2] = *(_DWORD *)(result + 8); + v133[3] = *(_DWORD *)(result + 12); + *(char **)((char *)&Str[0]._ptr + v132) = v130; + v130 = (char *)Str + v132; + *(_DWORD *)(v2 + 276) = (char *)Str + v132; + *(_DWORD *)(result + 8) = 1; + } + result = *(_DWORD *)result; + } + while ( result ); + d_print_comp(v5[4], 17); + *(_DWORD *)(v2 + 276) = v463; + result = (unsigned int)Str[0]._base; + if ( Str[0]._base ) + return result; + while ( v128 != 1 ) + { + --v128; + d_print_mod(v2, *((_DWORD **)&Str[0]._cnt + 4 * v128)); + } + } + else + { + result = d_print_comp(v5[4], 17); + v397 = Str[0]._base == 0; + *(_DWORD *)(v2 + 276) = 0; + if ( !v397 ) + return result; + } + return d_print_array_type(v2, (int)v5, *(int ***)(v2 + 276)); + case 0x2B: + case 0x2D: + v16 = *(char **)(result + 276); + Str[0]._cnt = a2; + v17 = *(_DWORD *)(a2 + 16); + Str[0]._base = 0; + Str[0]._ptr = v16; + *(_DWORD *)(v2 + 276) = Str; + Str[0]._flag = *(_DWORD *)(v2 + 272); + d_print_comp(v17, 17); + if ( !Str[0]._base ) + d_print_mod(v2, v5); + result = (unsigned int)Str[0]._ptr; + *(_DWORD *)(v2 + 276) = Str[0]._ptr; + return result; + case 0x2C: + if ( *(_WORD *)(a2 + 18) ) + d_append_string(result, "_Sat "); + v188 = v5[3]; + if ( *(void ****)(v188 + 12) == &off_559B20 ) + { + result = *(_DWORD *)(v2 + 256); + } + else + { + d_print_comp(v188, 17); + v189 = *(_DWORD *)(v2 + 256); + if ( v189 == 255 ) + { + v389 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v389); + ++*(_DWORD *)(v2 + 296); + v189 = 0; + } + result = v189 + 1; + *(_DWORD *)(v2 + 256) = v189 + 1; + *(_BYTE *)(v2 + v189) = 32; + *(_BYTE *)(v2 + 260) = 32; + } + if ( *((_WORD *)v5 + 8) ) + { + v327 = "Accum"; + for ( i12 = 95; ; i12 = *v327++ ) + { + if ( result == 255 ) + { + v330 = *(_DWORD *)(v2 + 268); + v453 = i12; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v330); + ++*(_DWORD *)(v2 + 296); + i12 = v453; + v329 = 0; + result = 1; + } + else + { + v329 = result++; + } + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v329) = i12; + *(_BYTE *)(v2 + 260) = i12; + if ( v327 == "" ) + break; + } + } + else + { + v190 = "Fract"; + for ( i13 = 95; ; i13 = *v190++ ) + { + if ( result == 255 ) + { + v193 = *(_DWORD *)(v2 + 268); + v432 = i13; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v193); + ++*(_DWORD *)(v2 + 296); + i13 = v432; + v192 = 0; + result = 1; + } + else + { + v192 = result++; + } + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v192) = i13; + *(_BYTE *)(v2 + 260) = i13; + if ( v190 == "" ) + break; + } + } + return result; + case 0x2E: + case 0x2F: + v26 = *(_DWORD *)(a2 + 12); + if ( v26 ) + d_print_comp(v26, 17); + result = v5[4]; + if ( result ) + { + v27 = *(_DWORD *)(v2 + 256); + if ( v27 > 0xFD ) + { + *(_BYTE *)(v2 + v27) = 0; + Str2 = (char *)v27; + v27 = 0; + (*(void (__cdecl **)(unsigned int, char *, _DWORD))(v2 + 264))(v2, Str2, *(_DWORD *)(v2 + 268)); + ++*(_DWORD *)(v2 + 296); + *(_DWORD *)(v2 + 256) = 0; + } + v28 = ", "; + for ( i14 = 44; ; i14 = *v28 ) + { + if ( v27 == 255 ) + { + v27 = 1; + v406 = i14; + v404 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v404); + ++*(_DWORD *)(v2 + 296); + i14 = v406; + v30 = 0; + } + else + { + v30 = v27++; + } + ++v28; + *(_DWORD *)(v2 + 256) = v27; + *(_BYTE *)(v2 + v30) = i14; + *(_BYTE *)(v2 + 260) = i14; + if ( v28 == "" ) + break; + } + v321 = *(_DWORD *)(v2 + 296); + result = d_print_comp(v5[4], 17); + if ( *(_DWORD *)(v2 + 296) == v321 && *(_DWORD *)(v2 + 256) == v27 ) + *(_DWORD *)(v2 + 256) = v27 - 2; + } + return result; + case 0x30: + v36 = *(_DWORD *)(result + 256); + v37 = "emplate parameter object for "; + for ( i15 = 116; ; i15 = *v37++ ) + { + if ( v36 == 255 ) + { + v40 = *(_DWORD *)(v2 + 268); + v408 = i15; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v40); + ++*(_DWORD *)(v2 + 296); + i15 = v408; + v39 = 0; + v36 = 1; + } + else + { + v39 = v36++; + } + *(_DWORD *)(v2 + 256) = v36; + *(_BYTE *)(v2 + v39) = i15; + *(_BYTE *)(v2 + 260) = i15; + if ( v37 == "" ) + break; + } + goto LABEL_9; + case 0x31: + v247 = *(_DWORD *)(a2 + 12); + v248 = v5[4]; + if ( v247 ) + d_print_comp(v247, 17); + v249 = *(_DWORD *)(v2 + 256); + if ( v249 == 255 ) + { + v365 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v365); + ++*(_DWORD *)(v2 + 296); + v250 = 1; + v249 = 0; + } + else + { + v250 = v249 + 1; + } + *(_DWORD *)(v2 + 256) = v250; + *(_BYTE *)(v2 + v249) = 123; + *(_BYTE *)(v2 + 260) = 123; + d_print_comp(v248, 17); + result = *(_DWORD *)(v2 + 256); + if ( result != 255 ) + goto LABEL_365; + goto LABEL_437; + case 0x32: + v241 = *(_DWORD *)(a2 + 12); + result = *(_DWORD *)(result + 256); + v242 = "perator"; + v243 = 111; + v244 = *(_DWORD *)(v241 + 8); + while ( 1 ) + { + if ( result == 255 ) + { + v246 = *(_DWORD *)(v2 + 268); + v442 = v243; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v246); + ++*(_DWORD *)(v2 + 296); + v243 = v442; + v245 = 0; + result = 1; + } + else + { + v245 = result++; + } + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v245) = v243; + *(_BYTE *)(v2 + 260) = v243; + if ( v242 == "" ) + break; + v243 = *v242++; + } + v288 = *(char **)(v241 + 4); + if ( (unsigned __int8)(*v288 - 97) <= 0x19u ) + { + if ( result == 255 ) + { + v393 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v393); + ++*(_DWORD *)(v2 + 296); + v288 = *(char **)(v241 + 4); + result = 0; + } + *(_DWORD *)(v2 + 256) = result + 1; + *(_BYTE *)(v2 + result) = 32; + *(_BYTE *)(v2 + 260) = 32; + } + v289 = v244 - 1; + if ( v288[v244 - 1] != 32 ) + v289 = v244; + if ( v289 ) + { + result = *(_DWORD *)(v2 + 256); + v290 = &v288[v289]; + do + { + v292 = *v288; + if ( result == 255 ) + { + v293 = *(_DWORD *)(v2 + 268); + v448 = *v288; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v293); + ++*(_DWORD *)(v2 + 296); + v292 = v448; + v291 = 0; + result = 1; + } + else + { + v291 = result++; + } + ++v288; + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v291) = v292; + *(_BYTE *)(v2 + 260) = v292; + } + while ( v290 != v288 ); + } + return result; + case 0x33: + v236 = *(_DWORD *)(result + 256); + v237 = "perator "; + for ( i16 = 111; ; i16 = *v237++ ) + { + if ( v236 == 255 ) + { + v240 = *(_DWORD *)(v2 + 268); + v441 = i16; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v240); + ++*(_DWORD *)(v2 + 296); + i16 = v441; + v239 = 0; + v236 = 1; + } + else + { + v239 = v236++; + } + *(_DWORD *)(v2 + 256) = v236; + *(_BYTE *)(v2 + v239) = i16; + *(_BYTE *)(v2 + 260) = i16; + if ( v237 == "" ) + break; + } + goto LABEL_14; + case 0x35: + v231 = *(_DWORD *)(result + 256); + v232 = "perator "; + for ( i17 = 111; ; i17 = *v232++ ) + { + if ( v231 == 255 ) + { + v235 = *(_DWORD *)(v2 + 268); + v440 = i17; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v235); + ++*(_DWORD *)(v2 + 296); + i17 = v440; + v234 = 0; + v231 = 1; + } + else + { + v234 = v231++; + } + *(_DWORD *)(v2 + 256) = v231; + *(_BYTE *)(v2 + v234) = i17; + *(_BYTE *)(v2 + 260) = i17; + if ( v232 == "" ) + break; + } + return d_print_conversion(v2, (int)v5); + case 0x36: + v255 = *(_DWORD **)(a2 + 12); + return d_print_expr_op(v2, v255); + case 0x37: + v252 = *(_DWORD **)(a2 + 12); + v214 = *(int **)(a2 + 16); + if ( *v252 != 50 ) + { + if ( *v252 == 52 ) + { + v253 = *(_DWORD *)(result + 256); + if ( v253 == 255 ) + { + v396 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v396); + ++*(_DWORD *)(v2 + 296); + v253 = 0; + } + *(_DWORD *)(v2 + 256) = v253 + 1; + *(_BYTE *)(v2 + v253) = 40; + *(_BYTE *)(v2 + 260) = 40; + d_print_comp(v252[3], 17); + v254 = *(_DWORD *)(v2 + 256); + if ( v254 == 255 ) + { + v395 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v395); + ++*(_DWORD *)(v2 + 296); + v254 = 0; + } + *(_DWORD *)(v2 + 256) = v254 + 1; + *(_BYTE *)(v2 + v254) = 41; + *(_BYTE *)(v2 + 260) = 41; + } + else + { + d_print_expr_op(result, v252); + } + return d_print_subexpr(v2, v214); + } + v354 = *(unsigned __int8 **)v252[3]; + v355 = *v354 - 97; + if ( *v354 == 97 ) + { + v355 = v354[1] - 100; + if ( v354[1] == 100 ) + v355 = v354[2]; + } + v356 = *v214; + if ( !v355 && v356 == 3 ) + { + if ( *(_DWORD *)v214[3] == 1 && *(_DWORD *)v214[4] == 41 ) + v214 = (int *)v214[3]; + } + else if ( v356 == 57 ) + { + d_print_subexpr(result, (_DWORD *)v214[3]); + v255 = v252; + return d_print_expr_op(v2, v255); + } + if ( *v354 == 115 ) + { + if ( v354[1] == 90 && !v354[2] ) + { + for ( i18 = d_find_pack(result, v214, v354[2]); i18; ++v358 ) + { + if ( *i18 != 47 ) + break; + if ( !i18[3] ) + break; + i18 = (_DWORD *)i18[4]; + } + return d_append_num(v2, v358); + } + if ( v354[1] == 80 ) + { + v360 = 0; + if ( !v354[2] ) + { + do + { + if ( *v214 != 47 ) + break; + v361 = v214[3]; + if ( !v361 ) + break; + if ( *(_DWORD *)v361 == 75 ) + { + pack = d_find_pack(v2, *(_DWORD **)(v361 + 12), v360); + for ( i19 = 0; pack; ++i19 ) + { + if ( *pack != 47 ) + break; + if ( !pack[3] ) + break; + pack = (_DWORD *)pack[4]; + } + v360 = i19 + v363; + } + else + { + ++v360; + } + v214 = (int *)v214[4]; + } + while ( v214 ); + v383 = Str; + sprintf_constprop_0(Str, (int)"%d", v360); + result = strlen((const char *)Str); + v384 = result; + if ( result ) + { + result = *(_DWORD *)(v2 + 256); + v385 = (FILE *)((char *)Str + v384); + do + { + v387 = (char)v383->_ptr; + if ( result == 255 ) + { + v388 = *(_DWORD *)(v2 + 268); + v458 = (char)v383->_ptr; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v388); + ++*(_DWORD *)(v2 + 296); + v387 = v458; + v386 = 0; + result = 1; + } + else + { + v386 = result++; + } + v383 = (FILE *)((char *)v383 + 1); + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v386) = v387; + *(_BYTE *)(v2 + 260) = v387; + } + while ( v383 != v385 ); + } + return result; + } + } + } + d_print_expr_op(result, v252); + v359 = *v354; + if ( v359 == 103 && v354[1] == 115 ) + { + v8 = v214; + if ( !v354[2] ) + return d_print_comp(v8, 17); + } + if ( v359 == 115 && v354[1] == 116 && !v354[2] ) + { + d_append_char(v2, 40); + d_print_comp(v214, 17); + v25 = 41; + return d_append_char(v2, v25); + } + return d_print_subexpr(v2, v214); + case 0x38: + result = *(_DWORD *)(a2 + 16); + if ( *(_DWORD *)result != 57 ) + goto LABEL_7; + v140 = *(_DWORD *)(a2 + 12); + v141 = **(char ***)(v140 + 12); + if ( v141[1] == 99 ) + { + v380 = *v141; + if ( (unsigned __int8)(v380 - 99) <= 1u || (unsigned __int8)(v380 - 114) <= 1u ) + { + d_print_expr_op(v2, (_DWORD *)v140); + d_append_char(v2, 60); + d_print_comp(*(_DWORD *)(v5[4] + 12), 17); + d_append_string(v2, ">("); + d_print_comp(*(_DWORD *)(v5[4] + 16), 17); + v25 = 41; + return d_append_char(v2, v25); + } + } + result = d_maybe_print_fold_expression(v2, (int)v5); + if ( !result ) + { + v142 = (_DWORD *)v5[3]; + if ( *v142 == 50 ) + { + v392 = v142[3]; + if ( *(_DWORD *)(v392 + 8) == 1 && **(_BYTE **)(v392 + 4) == 62 ) + { + d_append_char(v2, 40); + v142 = (_DWORD *)v5[3]; + } + } + v143 = *(unsigned __int8 **)v142[3]; + v144 = *v143 - 99; + if ( *v143 == 99 ) + { + v144 = v143[1] - 108; + if ( v143[1] == 108 ) + v144 = v143[2]; + } + v145 = *(_DWORD *)(v5[4] + 12); + if ( !v144 && *(_DWORD *)v145 == 3 ) + { + if ( **(_DWORD **)(v145 + 16) != 41 ) + *(_DWORD *)(v2 + 280) = 1; + d_print_subexpr(v2, *(_DWORD **)(v145 + 12)); + } + else + { + d_print_subexpr(v2, (_DWORD *)v145); + } + v146 = v5[3]; + v147 = **(unsigned __int8 ***)(v146 + 12); + v148 = *v147; + if ( v148 == 105 && v147[1] == 120 && !v147[2] ) + { + d_append_char(v2, 91); + d_print_comp(*(_DWORD *)(v5[4] + 16), 17); + d_append_char(v2, 93); + } + else + { + if ( v148 != 99 || v147[1] != 108 || v147[2] ) + d_print_expr_op(v2, (_DWORD *)v146); + d_print_subexpr(v2, *(_DWORD **)(v5[4] + 16)); + } + result = v5[3]; + if ( *(_DWORD *)result == 50 ) + { + result = *(_DWORD *)(result + 12); + if ( *(_DWORD *)(result + 8) == 1 ) + { + result = *(_DWORD *)(result + 4); + v25 = 41; + if ( *(_BYTE *)result == 62 ) + return d_append_char(v2, v25); + } + } + } + return result; + case 0x3A: + result = *(_DWORD *)(a2 + 16); + if ( *(_DWORD *)result != 59 ) + goto LABEL_7; + result = *(_DWORD *)(result + 16); + if ( *(_DWORD *)result != 60 ) + goto LABEL_7; + result = d_maybe_print_fold_expression(v2, a2); + if ( result ) + return result; + v209 = v5[4]; + v210 = v5[3]; + v211 = *(_DWORD **)(v209 + 12); + v212 = *(_DWORD *)(v209 + 16); + v213 = *(_DWORD **)(v212 + 12); + v214 = *(int **)(v212 + 16); + v436 = v211; + if ( !strcmp(**(const char ***)(v210 + 12), "qu") ) + { + d_print_subexpr(v2, v436); + d_print_expr_op(v2, (_DWORD *)v210); + d_print_subexpr(v2, v213); + d_append_string(v2, " : "); + } + else + { + d_append_string(v2, "new "); + if ( v436[3] ) + { + d_print_subexpr(v2, v436); + d_append_char(v2, 32); + } + result = d_print_comp(v213, 17); + if ( !v214 ) + return result; + } + return d_print_subexpr(v2, v214); + case 0x3D: + case 0x3E: + v19 = *(_DWORD **)(a2 + 12); + if ( *v19 == 39 ) + { + v20 = *(_DWORD *)(v19[3] + 16); + if ( v20 > 6 ) + { + if ( v20 == 7 ) + { + v325 = v5[4]; + if ( !*(_DWORD *)v325 && *(_DWORD *)(v325 + 16) == 1 && v4 == 61 ) + { + v326 = **(_BYTE **)(v325 + 12); + if ( v326 == 48 ) + { + v391 = "false"; + return d_append_string(v2, v391); + } + if ( v326 == 49 ) + { + v391 = "true"; + return d_append_string(v2, v391); + } + } + } + } + else if ( v20 ) + { + v373 = (_DWORD *)v5[4]; + if ( !*v373 ) + { + if ( v4 == 62 ) + { + d_append_char(v2, 45); + v373 = (_DWORD *)v5[4]; + } + result = d_print_comp(v373, 17); + switch ( v20 ) + { + case 2u: + v25 = 117; + return d_append_char(v2, v25); + case 3u: + v25 = 108; + return d_append_char(v2, v25); + case 4u: + v391 = "ul"; + return d_append_string(v2, v391); + case 5u: + v391 = "ll"; + return d_append_string(v2, v391); + case 6u: + v391 = (const char *)&off_558CF7; + return d_append_string(v2, v391); + default: + return result; + } + return result; + } + } + } + else + { + v20 = 0; + } + v21 = *(_DWORD *)(v2 + 256); + if ( v21 == 255 ) + { + v372 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v372); + v19 = (_DWORD *)v5[3]; + v22 = 1; + v21 = 0; + ++*(_DWORD *)(v2 + 296); + } + else + { + v22 = v21 + 1; + } + *(_DWORD *)(v2 + 256) = v22; + *(_BYTE *)(v2 + v21) = 40; + *(_BYTE *)(v2 + 260) = 40; + d_print_comp(v19, 17); + v23 = *(_DWORD *)(v2 + 256); + if ( v23 == 255 ) + { + v369 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v369); + ++*(_DWORD *)(v2 + 296); + v24 = 1; + v23 = 0; + } + else + { + v24 = v23 + 1; + } + *(_DWORD *)(v2 + 256) = v24; + *(_BYTE *)(v2 + v23) = 41; + *(_BYTE *)(v2 + 260) = 41; + if ( *v5 == 62 ) + d_append_char(v2, 45); + if ( v20 != 8 ) + { +LABEL_14: + v8 = (int *)v5[4]; + return d_print_comp(v8, 17); + } + d_append_char(v2, 91); + d_print_comp(v5[4], 17); + v25 = 93; + return d_append_char(v2, v25); + case 0x3F: + v199 = *(_DWORD *)(result + 256); + v200 = "ava resource "; + for ( i20 = 106; ; i20 = *v200++ ) + { + if ( v199 == 255 ) + { + v203 = *(_DWORD *)(v2 + 268); + v434 = i20; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v203); + ++*(_DWORD *)(v2 + 296); + i20 = v434; + v202 = 0; + v199 = 1; + } + else + { + v202 = v199++; + } + *(_DWORD *)(v2 + 256) = v199; + *(_BYTE *)(v2 + v202) = i20; + *(_BYTE *)(v2 + 260) = i20; + if ( v200 == "" ) + break; + } + goto LABEL_9; + case 0x40: + d_print_comp(*(_DWORD *)(a2 + 12), 17); + goto LABEL_14; + case 0x41: + result = *(_DWORD *)(result + 256); + v120 = *(_DWORD *)(a2 + 12); + if ( result == 255 ) + { + v366 = *(_DWORD *)(v2 + 268); + v457 = *(_DWORD *)(a2 + 12); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v366); + ++*(_DWORD *)(v2 + 296); + LOBYTE(v120) = v457; + result = 0; + v121 = 1; + } + else + { + v121 = result + 1; + } + *(_DWORD *)(v2 + 256) = v121; + *(_BYTE *)(v2 + result) = v120; + *(_BYTE *)(v2 + 260) = v120; + return result; + case 0x42: + v220 = Str; + sprintf_constprop_0(Str, (int)"%d", *(_DWORD *)(a2 + 12)); + result = strlen((const char *)Str); + v221 = result; + if ( result ) + { + result = *(_DWORD *)(v2 + 256); + v222 = (FILE *)((char *)Str + v221); + do + { + v224 = (char)v220->_ptr; + if ( result == 255 ) + { + v225 = *(_DWORD *)(v2 + 268); + v438 = (char)v220->_ptr; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v225); + ++*(_DWORD *)(v2 + 296); + v224 = v438; + v223 = 0; + result = 1; + } + else + { + v223 = result++; + } + v220 = (FILE *)((char *)v220 + 1); + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v223) = v224; + *(_BYTE *)(v2 + 260) = v224; + } + while ( v222 != v220 ); + } + return result; + case 0x43: + v215 = *(_DWORD *)(result + 256); + v216 = "ecltype ("; + for ( i21 = 100; ; i21 = *v216++ ) + { + if ( v215 == 255 ) + { + v219 = *(_DWORD *)(v2 + 268); + v437 = i21; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v219); + ++*(_DWORD *)(v2 + 296); + i21 = v437; + v218 = 0; + v215 = 1; + } + else + { + v218 = v215++; + } + *(_DWORD *)(v2 + 256) = v215; + *(_BYTE *)(v2 + v218) = i21; + *(_BYTE *)(v2 + 260) = i21; + if ( v216 == "" ) + break; + } + d_print_comp(v5[3], 17); + result = *(_DWORD *)(v2 + 256); + if ( result == 255 ) + { + v368 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v368); + ++*(_DWORD *)(v2 + 296); + v308 = 1; + result = 0; + } + else + { + v308 = result + 1; + } + *(_DWORD *)(v2 + 256) = v308; + *(_BYTE *)(v2 + result) = 41; + *(_BYTE *)(v2 + 260) = 41; + return result; + case 0x44: + v226 = *(_DWORD *)(result + 256); + v227 = "lobal constructors keyed to "; + for ( i22 = 103; ; i22 = *v227++ ) + { + if ( v226 == 255 ) + { + v230 = *(_DWORD *)(v2 + 268); + v439 = i22; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v230); + ++*(_DWORD *)(v2 + 296); + i22 = v439; + v229 = 0; + v226 = 1; + } + else + { + v229 = v226++; + } + *(_DWORD *)(v2 + 256) = v226; + *(_BYTE *)(v2 + v229) = i22; + *(_BYTE *)(v2 + 260) = i22; + if ( v227 == "" ) + break; + } + goto LABEL_9; + case 0x45: + v256 = *(_DWORD *)(result + 256); + v257 = "lobal destructors keyed to "; + for ( i23 = 103; ; i23 = *v257++ ) + { + if ( v256 == 255 ) + { + v260 = *(_DWORD *)(v2 + 268); + v443 = i23; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v260); + ++*(_DWORD *)(v2 + 296); + i23 = v443; + v259 = 0; + v256 = 1; + } + else + { + v259 = v256++; + } + *(_DWORD *)(v2 + 256) = v256; + *(_BYTE *)(v2 + v259) = i23; + *(_BYTE *)(v2 + 260) = i23; + if ( v257 == "" ) + break; + } + goto LABEL_9; + case 0x46: + v204 = *(_DWORD *)(result + 256); + v205 = "lambda("; + for ( i24 = 123; ; i24 = *v205++ ) + { + if ( v204 == 255 ) + { + v208 = *(_DWORD *)(v2 + 268); + v435 = i24; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v208); + ++*(_DWORD *)(v2 + 296); + i24 = v435; + v207 = 0; + v204 = 1; + } + else + { + v207 = v204++; + } + *(_DWORD *)(v2 + 256) = v204; + *(_BYTE *)(v2 + v207) = i24; + *(_BYTE *)(v2 + 260) = i24; + if ( v205 == "" ) + break; + } + v294 = v5[3]; + v295 = ")#"; + ++*(_DWORD *)(v2 + 288); + d_print_comp(v294, 17); + v296 = *(_DWORD *)(v2 + 256); + v297 = 41; + --*(_DWORD *)(v2 + 288); + while ( 1 ) + { + if ( v296 == 255 ) + { + v299 = *(_DWORD *)(v2 + 268); + v449 = v297; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v299); + ++*(_DWORD *)(v2 + 296); + v297 = v449; + v298 = 0; + v296 = 1; + } + else + { + v298 = v296++; + } + ++v295; + *(_DWORD *)(v2 + 256) = v296; + *(_BYTE *)(v2 + v298) = v297; + *(_BYTE *)(v2 + 260) = v297; + if ( v295 == "" ) + break; + v297 = *v295; + } + v300 = v5[4]; + v301 = Str; + sprintf_constprop_0(Str, (int)"%d", v300 + 1); + v302 = strlen((const char *)Str); + result = *(_DWORD *)(v2 + 256); + if ( v302 ) + { + v303 = (FILE *)((char *)Str + v302); + do + { + v305 = (char)v301->_ptr; + if ( result == 255 ) + { + v306 = *(_DWORD *)(v2 + 268); + v450 = (char)v301->_ptr; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v306); + ++*(_DWORD *)(v2 + 296); + v305 = v450; + v304 = 0; + result = 1; + } + else + { + v304 = result++; + } + v301 = (FILE *)((char *)v301 + 1); + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v304) = v305; + *(_BYTE *)(v2 + 260) = v305; + } + while ( v303 != v301 ); + } + goto LABEL_436; + case 0x48: + v90 = *(_DWORD *)(result + 256); + v91 = "unnamed type#"; + for ( i25 = 123; ; i25 = *v91++ ) + { + if ( v90 == 255 ) + { + v94 = *(_DWORD *)(v2 + 268); + v418 = i25; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v94); + ++*(_DWORD *)(v2 + 296); + i25 = v418; + v93 = 0; + v90 = 1; + } + else + { + v93 = v90++; + } + *(_DWORD *)(v2 + 256) = v90; + *(_BYTE *)(v2 + v93) = i25; + *(_BYTE *)(v2 + 260) = i25; + if ( v91 == "" ) + break; + } + v314 = v5[3]; + v315 = Str; + sprintf_constprop_0(Str, (int)"%d", v314 + 1); + v316 = strlen((const char *)Str); + result = *(_DWORD *)(v2 + 256); + if ( v316 ) + { + v317 = (FILE *)((char *)Str + v316); + do + { + v319 = (char)v315->_ptr; + if ( result == 255 ) + { + v320 = *(_DWORD *)(v2 + 268); + v452 = (char)v315->_ptr; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v320); + ++*(_DWORD *)(v2 + 296); + v319 = v452; + v318 = 0; + result = 1; + } + else + { + v318 = result++; + } + v315 = (FILE *)((char *)v315 + 1); + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v318) = v319; + *(_BYTE *)(v2 + 260) = v319; + } + while ( v317 != v315 ); + } +LABEL_436: + if ( result == 255 ) + { +LABEL_437: + v307 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v307); + ++*(_DWORD *)(v2 + 296); + v251 = 1; + result = 0; + } + else + { +LABEL_365: + v251 = result + 1; + } + *(_DWORD *)(v2 + 256) = v251; + *(_BYTE *)(v2 + result) = 125; + *(_BYTE *)(v2 + 260) = 125; + return result; + case 0x49: + v85 = *(_DWORD *)(result + 256); + v86 = "ransaction clone for "; + for ( i26 = 116; ; i26 = *v86++ ) + { + if ( v85 == 255 ) + { + v89 = *(_DWORD *)(v2 + 268); + v417 = i26; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v89); + ++*(_DWORD *)(v2 + 296); + i26 = v417; + v88 = 0; + v85 = 1; + } + else + { + v88 = v85++; + } + *(_DWORD *)(v2 + 256) = v85; + *(_BYTE *)(v2 + v88) = i26; + *(_BYTE *)(v2 + 260) = i26; + if ( v86 == "" ) + break; + } + goto LABEL_9; + case 0x4A: + v80 = *(_DWORD *)(result + 256); + v81 = "on-transaction clone for "; + for ( i27 = 110; ; i27 = *v81++ ) + { + if ( v80 == 255 ) + { + v84 = *(_DWORD *)(v2 + 268); + v416 = i27; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v84); + ++*(_DWORD *)(v2 + 296); + i27 = v416; + v83 = 0; + v80 = 1; + } + else + { + v83 = v80++; + } + *(_DWORD *)(v2 + 256) = v80; + *(_BYTE *)(v2 + v83) = i27; + *(_BYTE *)(v2 + 260) = i27; + if ( v81 == "" ) + break; + } + goto LABEL_9; + case 0x4B: + v74 = d_find_pack(result, *(_DWORD **)(a2 + 12), 0); + if ( !v74 ) + { + d_print_subexpr(v2, (_DWORD *)v5[3]); + v391 = "..."; + return d_append_string(v2, v391); + } + while ( *v74 == 47 && v74[3] ) + { + v74 = (_DWORD *)v74[4]; + if ( !v74 ) + { + v465 = v75; + v462 = v75 + 1; + v464 = (FILE *)v5[3]; + do + { +LABEL_135: + *(_DWORD *)(v2 + 292) = v3; + result = d_print_comp(v464, 17); + if ( v465 > v3 ) + { + result = *(_DWORD *)(v2 + 256); + v76 = ", "; + for ( i28 = 44; ; i28 = *v76 ) + { + if ( result == 255 ) + { + v79 = *(_DWORD *)(v2 + 268); + v415 = i28; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v79); + ++*(_DWORD *)(v2 + 296); + i28 = v415; + v78 = 0; + result = 1; + } + else + { + v78 = result++; + } + ++v76; + *(_DWORD *)(v2 + 256) = result; + *(_BYTE *)(v2 + v78) = i28; + *(_BYTE *)(v2 + 260) = i28; + if ( "" == v76 ) + break; + } + } + ++v3; + } + while ( v3 < v462 ); + return result; + } + ++v75; + } + result = v5[3]; + v462 = v75; + v464 = (FILE *)result; + if ( !v75 ) + return result; + v465 = v75 - 1; + goto LABEL_135; + case 0x4C: + v69 = "[abi:"; + d_print_comp(*(_DWORD *)(a2 + 12), 17); + v70 = *(_DWORD *)(v2 + 256); + for ( i29 = 91; ; i29 = *v69 ) + { + if ( v70 == 255 ) + { + v73 = *(_DWORD *)(v2 + 268); + v414 = i29; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v73); + ++*(_DWORD *)(v2 + 296); + i29 = v414; + v72 = 0; + v70 = 1; + } + else + { + v72 = v70++; + } + ++v69; + *(_DWORD *)(v2 + 256) = v70; + *(_BYTE *)(v2 + v72) = i29; + *(_BYTE *)(v2 + 260) = i29; + if ( v69 == "" ) + break; + } + goto LABEL_394; + case 0x4E: + v122 = "[clone "; + d_print_comp(*(_DWORD *)(a2 + 12), 17); + v123 = *(_DWORD *)(v2 + 256); + for ( i30 = 32; ; i30 = *v122++ ) + { + if ( v123 == 255 ) + { + v126 = *(_DWORD *)(v2 + 268); + v424 = i30; + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v126); + ++*(_DWORD *)(v2 + 296); + i30 = v424; + v125 = 0; + v123 = 1; + } + else + { + v125 = v123++; + } + *(_DWORD *)(v2 + 256) = v123; + *(_BYTE *)(v2 + v125) = i30; + *(_BYTE *)(v2 + 260) = i30; + if ( v122 == "" ) + break; + } +LABEL_394: + d_print_comp(v5[4], 17); + result = *(_DWORD *)(v2 + 256); + if ( result == 255 ) + { + v350 = *(_DWORD *)(v2 + 268); + *(_BYTE *)(v2 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(v2 + 264))(v2, 255, v350); + ++*(_DWORD *)(v2 + 296); + v273 = 1; + result = 0; + } + else + { + v273 = result + 1; + } + *(_DWORD *)(v2 + 256) = v273; + *(_BYTE *)(v2 + result) = 93; + *(_BYTE *)(v2 + 260) = 93; + return result; + default: + goto LABEL_7; + } + do + { + if ( result == *v375 ) + { + v377 = *(_DWORD **)(v2 + 300); + v378 = v377; + if ( !v377 ) + { +LABEL_606: + v394 = *(_DWORD *)(v2 + 272); + *(_DWORD *)(v2 + 272) = v375[1]; + v460 = v394; + v3 = 1; + result = (unsigned int)d_lookup_template_argument(v2, result); + if ( !result ) + goto LABEL_607; +LABEL_578: + v18 = *(char **)result; + if ( *(_DWORD *)result == 47 ) + { + v379 = *(_DWORD *)(v2 + 292); + if ( v379 < 0 ) + { + v405 = *(char **)(v2 + 276); + if ( *v5 != 47 ) + goto LABEL_36; + goto LABEL_463; + } + result = (unsigned int)d_index_template_argument_part_0((_DWORD *)result, v379); + if ( !result ) + { + if ( !v3 ) + goto LABEL_7; +LABEL_607: + result = v460; + *(_DWORD *)(v2 + 272) = v460; + goto LABEL_7; + } + v18 = *(char **)result; + } +LABEL_33: + v405 = *(char **)(v2 + 276); + if ( v18 != (char *)35 && (char *)*v5 != v18 ) + { + if ( v18 == (char *)36 ) + { + v13 = *(_DWORD *)(result + 12); + Str[0]._cnt = (int)v5; + Str[0]._base = 0; + Str[0]._ptr = v405; + *(_DWORD *)(v2 + 276) = Str; + Str[0]._flag = *(_DWORD *)(v2 + 272); + if ( v13 ) + goto LABEL_18; + goto LABEL_17; + } +LABEL_36: + v11 = v405; +LABEL_16: + Str[0]._ptr = v11; + *(_DWORD *)(v2 + 276) = Str; + v12 = *(_DWORD *)(v2 + 272); + Str[0]._cnt = (int)v5; + Str[0]._base = 0; + Str[0]._flag = v12; +LABEL_17: + v13 = v5[3]; +LABEL_18: + d_print_comp(v13, 17); + if ( !Str[0]._base ) + d_print_mod(v2, v5); + result = (unsigned int)Str[0]._ptr; + *(_DWORD *)(v2 + 276) = Str[0]._ptr; + if ( v3 ) + { + result = v460; + *(_DWORD *)(v2 + 272) = v460; + } + return result; + } +LABEL_463: + v5 = (_DWORD *)result; + goto LABEL_36; + } + while ( *v378 != result && (v377 == v378 || (_DWORD *)*v378 != v5) ) + { + v378 = (_DWORD *)v378[1]; + if ( !v378 ) + goto LABEL_606; + } +LABEL_577: + v3 = 0; + result = (unsigned int)d_lookup_template_argument(v2, result); + if ( !result ) + goto LABEL_7; + goto LABEL_578; + } + ++v376; + v375 += 2; + } + while ( v376 != v374 ); +LABEL_621: + if ( *(_DWORD *)(v2 + 312) <= v374 ) + goto LABEL_7; + v398 = *(_DWORD **)(v2 + 272); + v399 = *(_DWORD *)(v2 + 304) + 8 * v374; + *(_DWORD *)(v2 + 308) = v374 + 1; + v400 = (int *)(v399 + 4); + *(v400 - 1) = result; + if ( !v398 ) + { +LABEL_630: + *v400 = 0; + goto LABEL_577; + } + v401 = *(_DWORD *)(v2 + 320); + v464 = (FILE *)result; + v459 = *(_DWORD *)(v2 + 324); + while ( v459 > v401 ) + { + result = v398[1]; + v402 = *(_DWORD *)(v2 + 316) + 8 * v401++; + *(_DWORD *)(v2 + 320) = v401; + *(_DWORD *)(v402 + 4) = result; + *v400 = v402; + v398 = (_DWORD *)*v398; + v400 = (int *)v402; + if ( !v398 ) + { + result = (unsigned int)v464; + goto LABEL_630; + } + } +LABEL_7: + *(_DWORD *)(v2 + 280) = 1; + return result; +} +// 45CF43: conditional instruction was optimized away because eax.4==73 +// 45A7BF: variable 'v460' is possibly undefined +// 45AF70: variable 'v75' is possibly undefined +// 45CEBA: variable 'v358' is possibly undefined +// 45CFAE: variable 'v363' is possibly undefined +// 45D800: using guessed type int __fastcall d_print_comp(_DWORD, _DWORD); +// 558CF7: using guessed type void *off_558CF7; +// 559B20: using guessed type void **off_559B20; + +//----- (0045D800) -------------------------------------------------------- +int __usercall d_print_comp@(int result@, int a2@) +{ + _DWORD *v2; // esi + int v4; // edx + int v5; // eax + int v6; // [esp+8h] [ebp-14h] BYREF + int v7; // [esp+Ch] [ebp-10h] + + v2 = (_DWORD *)result; + if ( a2 && (result = *(_DWORD *)(a2 + 4), result <= 1) && (v4 = v2[71], v4 <= 1024) ) + { + v6 = a2; + *(_DWORD *)(a2 + 4) = result + 1; + v5 = v2[75]; + v2[71] = v4 + 1; + v7 = v5; + v2[75] = &v6; + d_print_comp_inner((unsigned int)v2, a2); + result = v7; + v2[75] = v7; + --*(_DWORD *)(a2 + 4); + --v2[71]; + } + else + { + v2[70] = 1; + } + return result; +} + +//----- (0045D890) -------------------------------------------------------- +int __usercall d_print_mod@(int a1@, _DWORD *a2@) +{ + _DWORD *v2; // esi + int result; // eax + const char *v5; // esi + char i; // dl + int v7; // ecx + int v8; // eax + const char *v9; // esi + char j; // dl + int v11; // ecx + int v12; // eax + const char *v13; // esi + char k; // dl + int v15; // ecx + int v16; // eax + const char *v17; // edi + char i1; // dl + int v19; // ecx + int v20; // eax + int v21; // edx + int v22; // edx + int v23; // eax + int v24; // edx + int v25; // edx + const char *v26; // esi + char m; // dl + int v28; // ecx + int v29; // eax + const char *v30; // esi + char n; // dl + int v32; // ecx + int v33; // eax + const char *v34; // esi + char ii; // dl + int v36; // ecx + int v37; // eax + int v38; // ecx + const char *v39; // esi + char jj; // dl + int v41; // ecx + int v42; // eax + int v43; // eax + const char *v44; // edi + char kk; // dl + int v46; // ecx + int v47; // eax + const char *v48; // esi + char mm; // dl + int v50; // ecx + int v51; // eax + const char *v52; // edi + char nn; // dl + int v54; // ecx + int v55; // eax + int v56; // ecx + int v57; // edx + int v58; // edx + int v59; // eax + int v60; // edx + int v61; // edx + int v62; // eax + int v63; // eax + int v64; // eax + int v65; // eax + int v66; // eax + int v67; // eax + int v68; // eax + int v69; // eax + char v70; // [esp+1Fh] [ebp-1Dh] + char v71; // [esp+1Fh] [ebp-1Dh] + char v72; // [esp+1Fh] [ebp-1Dh] + char v73; // [esp+1Fh] [ebp-1Dh] + char v74; // [esp+1Fh] [ebp-1Dh] + char v75; // [esp+1Fh] [ebp-1Dh] + char v76; // [esp+1Fh] [ebp-1Dh] + char v77; // [esp+1Fh] [ebp-1Dh] + char v78; // [esp+1Fh] [ebp-1Dh] + char v79; // [esp+1Fh] [ebp-1Dh] + char v80; // [esp+1Fh] [ebp-1Dh] + + v2 = a2; + switch ( *a2 ) + { + case 3: + a2 = (_DWORD *)a2[3]; + return d_print_comp(a2, 17); + case 0x19: + case 0x1C: + result = *(_DWORD *)(a1 + 256); + v5 = "restrict"; + for ( i = 32; ; i = *v5++ ) + { + if ( result == 255 ) + { + v8 = *(_DWORD *)(a1 + 268); + v70 = i; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v8); + ++*(_DWORD *)(a1 + 296); + i = v70; + v7 = 0; + result = 1; + } + else + { + v7 = result++; + } + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v7) = i; + *(_BYTE *)(a1 + 260) = i; + if ( v5 == "" ) + break; + } + return result; + case 0x1A: + case 0x1D: + result = *(_DWORD *)(a1 + 256); + v9 = "volatile"; + for ( j = 32; ; j = *v9++ ) + { + if ( result == 255 ) + { + v12 = *(_DWORD *)(a1 + 268); + v71 = j; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v12); + ++*(_DWORD *)(a1 + 296); + j = v71; + v11 = 0; + result = 1; + } + else + { + v11 = result++; + } + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v11) = j; + *(_BYTE *)(a1 + 260) = j; + if ( v9 == "" ) + break; + } + return result; + case 0x1B: + case 0x1E: + result = *(_DWORD *)(a1 + 256); + v13 = "const"; + for ( k = 32; ; k = *v13++ ) + { + if ( result == 255 ) + { + v16 = *(_DWORD *)(a1 + 268); + v72 = k; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v16); + ++*(_DWORD *)(a1 + 296); + k = v72; + v15 = 0; + result = 1; + } + else + { + v15 = result++; + } + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v15) = k; + *(_BYTE *)(a1 + 260) = k; + if ( v13 == "" ) + break; + } + return result; + case 0x1F: + v21 = *(_DWORD *)(a1 + 256); + if ( v21 == 255 ) + { + v65 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v65); + *(_BYTE *)a1 = 32; + result = 1; + ++*(_DWORD *)(a1 + 296); +LABEL_38: + v25 = result + 1; + goto LABEL_39; + } + result = v21 + 1; + *(_DWORD *)(a1 + 256) = v21 + 1; + *(_BYTE *)(a1 + v21) = 32; + *(_BYTE *)(a1 + 260) = 32; +LABEL_37: + if ( result != 255 ) + goto LABEL_38; + v67 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v67); + ++*(_DWORD *)(a1 + 296); + v25 = 1; + result = 0; +LABEL_39: + *(_DWORD *)(a1 + 256) = v25; + *(_BYTE *)(a1 + result) = 38; + *(_BYTE *)(a1 + 260) = 38; + return result; + case 0x20: + v22 = *(_DWORD *)(a1 + 256); + if ( v22 == 255 ) + { + v64 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v64); + ++*(_DWORD *)(a1 + 296); + result = 1; + v22 = 0; + } + else + { + result = v22 + 1; + } + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v22) = 32; + *(_BYTE *)(a1 + 260) = 32; + goto LABEL_42; + case 0x21: + v23 = *(_DWORD *)(a1 + 256); + if ( v23 == 255 ) + { + v63 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v63); + ++*(_DWORD *)(a1 + 296); + v24 = 1; + v23 = 0; + } + else + { + v24 = v23 + 1; + } + *(_DWORD *)(a1 + 256) = v24; + *(_BYTE *)(a1 + v23) = 32; + *(_BYTE *)(a1 + 260) = 32; + a2 = (_DWORD *)v2[4]; + return d_print_comp(a2, 17); + case 0x22: + result = *(_DWORD *)(a1 + 256); + if ( result == 255 ) + { + v69 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v69); + ++*(_DWORD *)(a1 + 296); + v61 = 1; + result = 0; + } + else + { + v61 = result + 1; + } + *(_DWORD *)(a1 + 256) = v61; + *(_BYTE *)(a1 + result) = 42; + *(_BYTE *)(a1 + 260) = 42; + return result; + case 0x23: + result = *(_DWORD *)(a1 + 256); + goto LABEL_37; + case 0x24: + result = *(_DWORD *)(a1 + 256); +LABEL_42: + v26 = "&&"; + for ( m = 38; ; m = *v26 ) + { + if ( result == 255 ) + { + v29 = *(_DWORD *)(a1 + 268); + v74 = m; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v29); + ++*(_DWORD *)(a1 + 296); + m = v74; + v28 = 0; + result = 1; + } + else + { + v28 = result++; + } + ++v26; + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v28) = m; + *(_BYTE *)(a1 + 260) = m; + if ( v26 == "" ) + break; + } + return result; + case 0x25: + result = *(_DWORD *)(a1 + 256); + v30 = "_Complex"; + for ( n = 32; ; n = *v30++ ) + { + if ( result == 255 ) + { + v33 = *(_DWORD *)(a1 + 268); + v75 = n; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v33); + ++*(_DWORD *)(a1 + 296); + n = v75; + v32 = 0; + result = 1; + } + else + { + v32 = result++; + } + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v32) = n; + *(_BYTE *)(a1 + 260) = n; + if ( v30 == "" ) + break; + } + return result; + case 0x26: + result = *(_DWORD *)(a1 + 256); + v34 = "_Imaginary"; + for ( ii = 32; ; ii = *v34++ ) + { + if ( result == 255 ) + { + v37 = *(_DWORD *)(a1 + 268); + v76 = ii; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v37); + ++*(_DWORD *)(a1 + 296); + ii = v76; + v36 = 0; + result = 1; + } + else + { + v36 = result++; + } + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v36) = ii; + *(_BYTE *)(a1 + 260) = ii; + if ( v34 == "" ) + break; + } + return result; + case 0x2B: + if ( *(_BYTE *)(a1 + 260) != 40 ) + { + v59 = *(_DWORD *)(a1 + 256); + if ( v59 == 255 ) + { + v68 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v68); + ++*(_DWORD *)(a1 + 296); + v60 = 1; + v59 = 0; + } + else + { + v60 = v59 + 1; + } + *(_DWORD *)(a1 + 256) = v60; + *(_BYTE *)(a1 + v59) = 32; + *(_BYTE *)(a1 + 260) = 32; + } + v38 = v2[3]; + v39 = "::*"; + d_print_comp(v38, 17); + result = *(_DWORD *)(a1 + 256); + for ( jj = 58; ; jj = *v39 ) + { + if ( result == 255 ) + { + v42 = *(_DWORD *)(a1 + 268); + v77 = jj; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v42); + ++*(_DWORD *)(a1 + 296); + jj = v77; + v41 = 0; + result = 1; + } + else + { + v41 = result++; + } + ++v39; + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v41) = jj; + *(_BYTE *)(a1 + 260) = jj; + if ( v39 == "" ) + break; + } + return result; + case 0x2D: + v43 = *(_DWORD *)(a1 + 256); + v44 = "__vector("; + for ( kk = 32; ; kk = *v44++ ) + { + if ( v43 == 255 ) + { + v47 = *(_DWORD *)(a1 + 268); + v78 = kk; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v47); + ++*(_DWORD *)(a1 + 296); + kk = v78; + v46 = 0; + v43 = 1; + } + else + { + v46 = v43++; + } + *(_DWORD *)(a1 + 256) = v43; + *(_BYTE *)(a1 + v46) = kk; + *(_BYTE *)(a1 + 260) = kk; + if ( v44 == "" ) + break; + } + v56 = v2[3]; + goto LABEL_90; + case 0x4D: + result = *(_DWORD *)(a1 + 256); + v48 = "transaction_safe"; + for ( mm = 32; ; mm = *v48++ ) + { + if ( result == 255 ) + { + v51 = *(_DWORD *)(a1 + 268); + v79 = mm; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v51); + ++*(_DWORD *)(a1 + 296); + mm = v79; + v50 = 0; + result = 1; + } + else + { + v50 = result++; + } + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v50) = mm; + *(_BYTE *)(a1 + 260) = mm; + if ( v48 == "" ) + break; + } + return result; + case 0x4F: + result = *(_DWORD *)(a1 + 256); + v52 = "noexcept"; + for ( nn = 32; ; nn = *v52++ ) + { + if ( result == 255 ) + { + v55 = *(_DWORD *)(a1 + 268); + v80 = nn; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v55); + ++*(_DWORD *)(a1 + 296); + nn = v80; + v54 = 0; + result = 1; + } + else + { + v54 = result++; + } + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v54) = nn; + *(_BYTE *)(a1 + 260) = nn; + if ( v52 == "" ) + break; + } + goto LABEL_85; + case 0x50: + result = *(_DWORD *)(a1 + 256); + v17 = "throw"; + for ( i1 = 32; ; i1 = *v17++ ) + { + if ( result == 255 ) + { + v20 = *(_DWORD *)(a1 + 268); + v73 = i1; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v20); + ++*(_DWORD *)(a1 + 296); + i1 = v73; + v19 = 0; + result = 1; + } + else + { + v19 = result++; + } + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v19) = i1; + *(_BYTE *)(a1 + 260) = i1; + if ( v17 == "" ) + break; + } +LABEL_85: + v56 = v2[4]; + if ( v56 ) + { + if ( result == 255 ) + { + v62 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v62); + v56 = v2[4]; + v57 = 1; + result = 0; + ++*(_DWORD *)(a1 + 296); + } + else + { + v57 = result + 1; + } + *(_DWORD *)(a1 + 256) = v57; + *(_BYTE *)(a1 + result) = 40; + *(_BYTE *)(a1 + 260) = 40; +LABEL_90: + d_print_comp(v56, 17); + result = *(_DWORD *)(a1 + 256); + if ( result == 255 ) + { + v66 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v66); + ++*(_DWORD *)(a1 + 296); + v58 = 1; + result = 0; + } + else + { + v58 = result + 1; + } + *(_DWORD *)(a1 + 256) = v58; + *(_BYTE *)(a1 + result) = 41; + *(_BYTE *)(a1 + 260) = 41; + } + return result; + default: + return d_print_comp(a2, 17); + } +} +// 45D800: using guessed type int __fastcall d_print_comp(_DWORD, _DWORD); + +//----- (0045E1F0) -------------------------------------------------------- +unsigned int __usercall d_print_function_type@(unsigned int a1@, int a2@, _DWORD *a3) +{ + _DWORD *v5; // edx + char v6; // dl + int v7; // eax + int v8; // edx + int v9; // ebp + int v10; // eax + int v11; // edx + int v12; // eax + int v13; // ecx + int v14; // edx + unsigned int result; // eax + int v16; // eax + int v17; // eax + int v18; // eax + int v19; // eax + int v20; // eax + + if ( !a3 ) + goto LABEL_17; + v5 = a3; + while ( 2 ) + { + if ( v5[2] ) + { +LABEL_17: + v9 = *(_DWORD *)(a1 + 276); + *(_DWORD *)(a1 + 276) = 0; + d_print_mod_list(a1, a3, 0); + v11 = *(_DWORD *)(a1 + 256); + if ( v11 != 255 ) + { +LABEL_11: + v12 = v11 + 1; + *(_DWORD *)(a1 + 256) = v11 + 1; + *(_BYTE *)(a1 + v11) = 40; + *(_BYTE *)(a1 + 260) = 40; + v13 = *(_DWORD *)(a2 + 16); + if ( !v13 ) + goto LABEL_13; + goto LABEL_12; + } + goto LABEL_18; + } + switch ( *(_DWORD *)v5[1] ) + { + case 0x19: + case 0x1A: + case 0x1B: + case 0x21: + case 0x25: + case 0x26: + case 0x2B: + v6 = *(_BYTE *)(a1 + 260); + v7 = *(_DWORD *)(a1 + 256); + goto LABEL_6; + case 0x22: + case 0x23: + case 0x24: + v6 = *(_BYTE *)(a1 + 260); + v7 = *(_DWORD *)(a1 + 256); + if ( (*(_BYTE *)(a1 + 260) & 0xFD) == 40 ) + { + if ( v7 == 255 ) + goto LABEL_22; + goto LABEL_8; + } +LABEL_6: + if ( v6 != 32 ) + { + if ( v7 == 255 ) + { + v20 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(a1 + 264))(a1, 255, v20); + *(_BYTE *)a1 = 32; + v7 = 1; + ++*(_DWORD *)(a1 + 296); + goto LABEL_8; + } + *(_DWORD *)(a1 + 256) = v7 + 1; + *(_BYTE *)(a1 + v7++) = 32; + *(_BYTE *)(a1 + 260) = 32; + } + if ( v7 != 255 ) + { +LABEL_8: + v8 = v7 + 1; + goto LABEL_9; + } +LABEL_22: + v17 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(a1 + 264))(a1, 255, v17); + ++*(_DWORD *)(a1 + 296); + v8 = 1; + v7 = 0; +LABEL_9: + *(_DWORD *)(a1 + 256) = v8; + *(_BYTE *)(a1 + v7) = 40; + v9 = *(_DWORD *)(a1 + 276); + *(_BYTE *)(a1 + 260) = 40; + *(_DWORD *)(a1 + 276) = 0; + d_print_mod_list(a1, a3, 0); + v10 = *(_DWORD *)(a1 + 256); + if ( v10 != 255 ) + { + v11 = v10 + 1; + *(_DWORD *)(a1 + 256) = v10 + 1; + *(_BYTE *)(a1 + v10) = 41; + *(_BYTE *)(a1 + 260) = 41; + if ( v10 != 254 ) + goto LABEL_11; +LABEL_18: + v16 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(a1 + 264))(a1, 255, v16); + *(_BYTE *)a1 = 40; + *(_BYTE *)(a1 + 260) = 40; + v13 = *(_DWORD *)(a2 + 16); + ++*(_DWORD *)(a1 + 296); + *(_DWORD *)(a1 + 256) = 1; + if ( !v13 ) + { + v12 = 1; + goto LABEL_14; + } + goto LABEL_12; + } + v19 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(a1 + 264))(a1, 255, v19); + *(_BYTE *)(a1 + 260) = 40; + *(_WORD *)a1 = 10281; + v13 = *(_DWORD *)(a2 + 16); + v12 = 2; + ++*(_DWORD *)(a1 + 296); + *(_DWORD *)(a1 + 256) = 2; + if ( !v13 ) + goto LABEL_14; +LABEL_12: + d_print_comp(v13, 17); + v12 = *(_DWORD *)(a1 + 256); +LABEL_13: + if ( v12 == 255 ) + { + v18 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(unsigned int, int, int))(a1 + 264))(a1, 255, v18); + ++*(_DWORD *)(a1 + 296); + v14 = 1; + v12 = 0; + goto LABEL_15; + } +LABEL_14: + v14 = v12 + 1; +LABEL_15: + *(_DWORD *)(a1 + 256) = v14; + *(_BYTE *)(a1 + v12) = 41; + *(_BYTE *)(a1 + 260) = 41; + result = d_print_mod_list(a1, a3, 1); + *(_DWORD *)(a1 + 276) = v9; + return result; + default: + v5 = (_DWORD *)*v5; + if ( !v5 ) + goto LABEL_17; + continue; + } + } +} +// 45D800: using guessed type int __fastcall d_print_comp(_DWORD, _DWORD); + +//----- (0045E530) -------------------------------------------------------- +unsigned int __usercall d_print_mod_list@(unsigned int result@, _DWORD *a2@, int a3) +{ + _DWORD *v3; // edi + int v4; // ebx + int v5; // edx + int v6; // esi + unsigned int *v7; // ecx + bool v8; // cf + int v9; // eax + int v10; // ebp + unsigned int v11; // ecx + int v12; // eax + const char *v13; // ebp + char i; // dl + int v15; // ecx + int v16; // eax + unsigned int *v17; // ebp + unsigned int v18; // edx + char *v19; // edi + char j; // dl + int v21; // ecx + int v22; // eax + FILE *p_Str; // edi + size_t v24; // edx + int v25; // eax + FILE *v26; // esi + int v27; // ecx + char ptr; // dl + int v29; // eax + const char *v30; // edi + char k; // dl + int v32; // ecx + int v33; // eax + char v34; // [esp+1Bh] [ebp-41h] + char v35; // [esp+1Bh] [ebp-41h] + char v36; // [esp+1Bh] [ebp-41h] + char v37; // [esp+1Bh] [ebp-41h] + int v38; // [esp+1Ch] [ebp-40h] + FILE Str; // [esp+27h] [ebp-35h] BYREF + + v3 = a2; + v4 = result; + if ( a2 ) + { + while ( 1 ) + { + if ( *(_DWORD *)(v4 + 280) ) + return result; + result = v3[2]; + if ( !result ) + break; +LABEL_7: + v3 = (_DWORD *)*v3; + if ( !v3 ) + return result; + } + v7 = (unsigned int *)v3[1]; + result = *v7; + if ( !a3 ) + { + if ( result == 77 ) + goto LABEL_7; + if ( result > 0x4D ) + { + v8 = result == 79; + result -= 79; + if ( v8 || result == 1 ) + goto LABEL_7; + v9 = v3[3]; + v6 = *(_DWORD *)(v4 + 272); + v3[2] = 1; + *(_DWORD *)(v4 + 272) = v9; + goto LABEL_6; + } + if ( result - 28 <= 4 ) + goto LABEL_7; + } + v5 = v3[3]; + v6 = *(_DWORD *)(v4 + 272); + v3[2] = 1; + *(_DWORD *)(v4 + 272) = v5; + switch ( result ) + { + case 0x29u: + result = d_print_function_type(*v3); + *(_DWORD *)(v4 + 272) = v6; + return result; + case 0x2Au: + result = d_print_array_type(v4, (int)v7, (int **)*v3); + *(_DWORD *)(v4 + 272) = v6; + return result; + case 2u: + v10 = *(_DWORD *)(v4 + 276); + v11 = v7[3]; + *(_DWORD *)(v4 + 276) = 0; + d_print_comp(v11, 17); + *(_DWORD *)(v4 + 276) = v10; + v12 = *(_DWORD *)(v4 + 256); + v13 = "::"; + for ( i = 58; ; i = *v13 ) + { + if ( v12 == 255 ) + { + v16 = *(_DWORD *)(v4 + 268); + *(_BYTE *)(v4 + 255) = 0; + v34 = i; + (*(void (__cdecl **)(int, int, int))(v4 + 264))(v4, 255, v16); + ++*(_DWORD *)(v4 + 296); + i = v34; + v15 = 0; + v12 = 1; + } + else + { + v15 = v12++; + } + ++v13; + *(_DWORD *)(v4 + 256) = v12; + *(_BYTE *)(v4 + v15) = i; + *(_BYTE *)(v4 + 260) = i; + if ( v13 == "" ) + break; + } + v17 = *(unsigned int **)(v3[1] + 16); + v18 = *v17; + if ( *v17 == 71 ) + { + v19 = "{default arg#" + 1; + for ( j = 123; ; j = *v19++ ) + { + if ( v12 == 255 ) + { + v22 = *(_DWORD *)(v4 + 268); + *(_BYTE *)(v4 + 255) = 0; + v35 = j; + (*(void (__cdecl **)(int, int, int))(v4 + 264))(v4, 255, v22); + ++*(_DWORD *)(v4 + 296); + j = v35; + v21 = 0; + v12 = 1; + } + else + { + v21 = v12++; + } + *(_DWORD *)(v4 + 256) = v12; + *(_BYTE *)(v4 + v21) = j; + *(_BYTE *)(v4 + 260) = j; + if ( v19 == "" ) + break; + } + p_Str = &Str; + sprintf_constprop_0(&Str, (int)"%d", v17[4] + 1); + v24 = strlen((const char *)&Str); + v25 = *(_DWORD *)(v4 + 256); + if ( v24 ) + { + v38 = v6; + v26 = (FILE *)((char *)&Str + v24); + do + { + ptr = (char)p_Str->_ptr; + if ( v25 == 255 ) + { + v29 = *(_DWORD *)(v4 + 268); + *(_BYTE *)(v4 + 255) = 0; + v36 = ptr; + (*(void (__cdecl **)(int, int, int))(v4 + 264))(v4, 255, v29); + ++*(_DWORD *)(v4 + 296); + ptr = v36; + v27 = 0; + v25 = 1; + } + else + { + v27 = v25++; + } + p_Str = (FILE *)((char *)p_Str + 1); + *(_DWORD *)(v4 + 256) = v25; + *(_BYTE *)(v4 + v27) = ptr; + *(_BYTE *)(v4 + 260) = ptr; + } + while ( p_Str != v26 ); + v6 = v38; + } + v30 = "}::"; + for ( k = 125; ; k = *v30 ) + { + if ( v25 == 255 ) + { + v33 = *(_DWORD *)(v4 + 268); + *(_BYTE *)(v4 + 255) = 0; + v37 = k; + (*(void (__cdecl **)(int, int, int))(v4 + 264))(v4, 255, v33); + ++*(_DWORD *)(v4 + 296); + k = v37; + v32 = 0; + v25 = 1; + } + else + { + v32 = v25++; + } + *(_DWORD *)(v4 + 256) = v25; + ++v30; + *(_BYTE *)(v4 + v32) = k; + *(_BYTE *)(v4 + 260) = k; + if ( v30 == "" ) + break; + } + goto LABEL_32; + } + while ( 1 ) + { + if ( v18 != 77 ) + { + if ( v18 > 0x4D ) + { + if ( v18 - 79 > 1 ) + { +LABEL_30: + result = d_print_comp(v17, 17); + *(_DWORD *)(v4 + 272) = v6; + return result; + } + } + else if ( v18 - 28 > 4 ) + { + goto LABEL_30; + } + } +LABEL_32: + v17 = (unsigned int *)v17[3]; + v18 = *v17; + } + } +LABEL_6: + result = d_print_mod(v4, v7); + *(_DWORD *)(v4 + 272) = v6; + goto LABEL_7; + } + return result; +} +// 45D800: using guessed type int __fastcall d_print_comp(_DWORD, _DWORD); +// 45E1F0: using guessed type _DWORD __cdecl d_print_function_type(_DWORD); +// 45E530: using guessed type FILE var_35; + +//----- (0045E890) -------------------------------------------------------- +int __usercall d_print_array_type@(int a1@, int a2@, int **a3) +{ + int **v5; // eax + int v6; // eax + int v7; // edx + int result; // eax + int v9; // ecx + int v10; // edx + int v11; // eax + int v12; // eax + int v13; // eax + char *v14; // esi + char i; // dl + int v16; // ecx + int v17; // eax + int v18; // edx + int v19; // eax + int v20; // eax + char v21; // [esp+1Fh] [ebp-1Dh] + + v5 = a3; + if ( !a3 ) + { +LABEL_5: + v6 = *(_DWORD *)(a1 + 256); + if ( v6 == 255 ) + goto LABEL_25; +LABEL_6: + v7 = v6 + 1; + *(_DWORD *)(a1 + 256) = v6 + 1; + *(_BYTE *)(a1 + v6) = 32; + *(_BYTE *)(a1 + 260) = 32; + if ( v6 == 254 ) + goto LABEL_14; + goto LABEL_7; + } + while ( v5[2] ) + { + v5 = (int **)*v5; + if ( !v5 ) + { + d_print_mod_list(0); + goto LABEL_5; + } + } + if ( *v5[1] == 42 ) + { + d_print_mod_list(0); + v7 = *(_DWORD *)(a1 + 256); + if ( v7 == 255 ) + { +LABEL_14: + v11 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v11); + *(_BYTE *)a1 = 91; + *(_BYTE *)(a1 + 260) = 91; + v9 = *(_DWORD *)(a2 + 12); + ++*(_DWORD *)(a1 + 296); + *(_DWORD *)(a1 + 256) = 1; + if ( !v9 ) + { + result = 1; + goto LABEL_10; + } + goto LABEL_8; + } +LABEL_7: + result = v7 + 1; + *(_DWORD *)(a1 + 256) = v7 + 1; + *(_BYTE *)(a1 + v7) = 91; + *(_BYTE *)(a1 + 260) = 91; + v9 = *(_DWORD *)(a2 + 12); + if ( !v9 ) + goto LABEL_9; + goto LABEL_8; + } + v13 = *(_DWORD *)(a1 + 256); + v14 = (char *)&unk_5590D4; + for ( i = 32; ; i = *v14 ) + { + if ( v13 == 255 ) + { + v17 = *(_DWORD *)(a1 + 268); + v21 = i; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v17); + ++*(_DWORD *)(a1 + 296); + i = v21; + v16 = 0; + v13 = 1; + } + else + { + v16 = v13++; + } + *(_DWORD *)(a1 + 256) = v13; + ++v14; + *(_BYTE *)(a1 + v16) = i; + *(_BYTE *)(a1 + 260) = i; + if ( &unk_5590D6 == (_UNKNOWN *)v14 ) + break; + } + d_print_mod_list(0); + v18 = *(_DWORD *)(a1 + 256); + if ( v18 == 255 ) + { + v20 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v20); + *(_BYTE *)a1 = 41; + v6 = 1; + ++*(_DWORD *)(a1 + 296); + goto LABEL_6; + } + v6 = v18 + 1; + *(_DWORD *)(a1 + 256) = v18 + 1; + *(_BYTE *)(a1 + v18) = 41; + *(_BYTE *)(a1 + 260) = 41; + if ( v18 != 254 ) + goto LABEL_6; +LABEL_25: + v19 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v19); + *(_BYTE *)(a1 + 260) = 91; + *(_WORD *)a1 = 23328; + v9 = *(_DWORD *)(a2 + 12); + result = 2; + ++*(_DWORD *)(a1 + 296); + *(_DWORD *)(a1 + 256) = 2; + if ( !v9 ) + goto LABEL_10; +LABEL_8: + d_print_comp(v9, 17); + result = *(_DWORD *)(a1 + 256); +LABEL_9: + if ( result == 255 ) + { + v12 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v12); + ++*(_DWORD *)(a1 + 296); + v10 = 1; + result = 0; + goto LABEL_11; + } +LABEL_10: + v10 = result + 1; +LABEL_11: + *(_DWORD *)(a1 + 256) = v10; + *(_BYTE *)(a1 + result) = 93; + *(_BYTE *)(a1 + 260) = 93; + return result; +} +// 45D800: using guessed type int __fastcall d_print_comp(_DWORD, _DWORD); +// 45E530: using guessed type _DWORD __cdecl d_print_mod_list(_DWORD); + +//----- (0045EB70) -------------------------------------------------------- +int __usercall d_print_conversion@(int a1@, int a2@) +{ + int v4; // eax + int v5; // edx + _DWORD *v6; // ecx + int result; // eax + int v8; // eax + int v9; // edx + int v10; // edx + int v11; // eax + int v12; // edx + int v13; // eax + int v14; // eax + int v15; // eax + int v16[5]; // [esp+18h] [ebp-14h] BYREF + + v4 = *(_DWORD *)(a1 + 328); + if ( v4 ) + { + v5 = *(_DWORD *)(a1 + 272); + v16[1] = v4; + v16[0] = v5; + *(_DWORD *)(a1 + 272) = v16; + } + v6 = *(_DWORD **)(a2 + 12); + if ( *v6 == 4 ) + { + d_print_comp(v6[3], 17); + if ( *(_DWORD *)(a1 + 328) ) + *(_DWORD *)(a1 + 272) = v16[0]; + v8 = *(_DWORD *)(a1 + 256); + if ( *(_BYTE *)(a1 + 260) == 60 ) + { + if ( v8 == 255 ) + { + v14 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v14); + *(_BYTE *)a1 = 32; + v8 = 1; + ++*(_DWORD *)(a1 + 296); + goto LABEL_11; + } + *(_DWORD *)(a1 + 256) = v8 + 1; + *(_BYTE *)(a1 + v8++) = 32; + *(_BYTE *)(a1 + 260) = 32; + } + if ( v8 == 255 ) + { + v13 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v13); + ++*(_DWORD *)(a1 + 296); + v9 = 1; + v8 = 0; +LABEL_12: + *(_DWORD *)(a1 + 256) = v9; + *(_BYTE *)(a1 + v8) = 60; + *(_BYTE *)(a1 + 260) = 60; + d_print_comp(*(_DWORD *)(*(_DWORD *)(a2 + 12) + 16), 17); + if ( *(_BYTE *)(a1 + 260) == 62 ) + { + v12 = *(_DWORD *)(a1 + 256); + if ( v12 == 255 ) + { + v15 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v15); + *(_BYTE *)a1 = 32; + result = 1; + ++*(_DWORD *)(a1 + 296); + goto LABEL_15; + } + result = v12 + 1; + *(_DWORD *)(a1 + 256) = v12 + 1; + *(_BYTE *)(a1 + v12) = 32; + *(_BYTE *)(a1 + 260) = 32; + } + else + { + result = *(_DWORD *)(a1 + 256); + } + if ( result == 255 ) + { + v11 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v11); + ++*(_DWORD *)(a1 + 296); + v10 = 1; + result = 0; + goto LABEL_16; + } +LABEL_15: + v10 = result + 1; +LABEL_16: + *(_DWORD *)(a1 + 256) = v10; + *(_BYTE *)(a1 + result) = 62; + *(_BYTE *)(a1 + 260) = 62; + return result; + } +LABEL_11: + v9 = v8 + 1; + goto LABEL_12; + } + result = d_print_comp(v6, 17); + if ( *(_DWORD *)(a1 + 328) ) + { + result = v16[0]; + *(_DWORD *)(a1 + 272) = v16[0]; + } + return result; +} +// 45D800: using guessed type int __fastcall d_print_comp(_DWORD, _DWORD); + +//----- (0045EDC0) -------------------------------------------------------- +int __usercall d_print_expr_op@(int a1@, _DWORD *a2@) +{ + int result; // eax + int v4; // edi + char *v5; // esi + char *v6; // edi + int v7; // ecx + char v8; // dl + int v9; // eax + char v10; // [esp+1Fh] [ebp-Dh] + + if ( *a2 != 50 ) + return d_print_comp(a2, 17); + result = a2[3]; + v4 = *(_DWORD *)(result + 8); + v5 = *(char **)(result + 4); + if ( v4 ) + { + result = *(_DWORD *)(a1 + 256); + v6 = &v5[v4]; + do + { + v8 = *v5; + if ( result == 255 ) + { + v9 = *(_DWORD *)(a1 + 268); + v10 = *v5; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v9); + ++*(_DWORD *)(a1 + 296); + v8 = v10; + v7 = 0; + result = 1; + } + else + { + v7 = result++; + } + ++v5; + *(_DWORD *)(a1 + 256) = result; + *(_BYTE *)(a1 + v7) = v8; + *(_BYTE *)(a1 + 260) = v8; + } + while ( v5 != v6 ); + } + return result; +} +// 45D800: using guessed type int __fastcall d_print_comp(_DWORD, _DWORD); + +//----- (0045EE70) -------------------------------------------------------- +BOOL __usercall d_demangle_callback_constprop_0@( + char *a1@, + void (__cdecl *a2)(char *, int, int)@, + int a3@) +{ + char v4; // al + bool v5; // zf + int v6; // esi + char v7; // al + char v8; // al + size_t v9; // eax + int v10; // edx + int v11; // ecx + int v12; // ecx + int v13; // eax + void *v14; // esp + void *v15; // esp + int *v16; // edi + int v17; // eax + void *v18; // esp + void *v19; // esp + size_t v20; // eax + int v21; // edx + int *comp; // edi + int v23; // ecx + char v24; // al + int v25; // eax + int v26; // edx + int v27; // eax + void *v28; // esp + void *v29; // esp + int v30; // eax + void *v31; // esp + void *v32; // esp + int v33; // eax + int v34; // edx + char v36; // al + char *v37; // edx + int v38; // eax + char v39; // al + char *v40; // ecx + int *v41; // esi + _DWORD *name; // eax + int *v43; // eax + char v44; // al + int v45[3]; // [esp+0h] [ebp-1D8h] BYREF + int v46[3]; // [esp+Ch] [ebp-1CCh] BYREF + int v47; // [esp+18h] [ebp-1C0h] + int v48; // [esp+1Ch] [ebp-1BCh] + int *v49; // [esp+20h] [ebp-1B8h] + int *v50; // [esp+24h] [ebp-1B4h] + int v51; // [esp+28h] [ebp-1B0h] + void (__cdecl *v52)(char *, int, int); // [esp+2Ch] [ebp-1ACh] + int v53[2]; // [esp+38h] [ebp-1A0h] BYREF + int v54; // [esp+40h] [ebp-198h] + char *Str; // [esp+44h] [ebp-194h] + int *v56; // [esp+48h] [ebp-190h] + int v57; // [esp+4Ch] [ebp-18Ch] + size_t v58; // [esp+50h] [ebp-188h] + int *v59; // [esp+54h] [ebp-184h] + int v60; // [esp+58h] [ebp-180h] + size_t v61; // [esp+5Ch] [ebp-17Ch] + int v62; // [esp+60h] [ebp-178h] + int v63; // [esp+64h] [ebp-174h] + int v64; // [esp+68h] [ebp-170h] + int v65; // [esp+6Ch] [ebp-16Ch] + int v66; // [esp+70h] [ebp-168h] + char v67[256]; // [esp+74h] [ebp-164h] BYREF + int v68; // [esp+174h] [ebp-64h] + char v69; // [esp+178h] [ebp-60h] + void (__cdecl *v70)(char *, int, int); // [esp+17Ch] [ebp-5Ch] + int v71; // [esp+180h] [ebp-58h] + int v72; // [esp+184h] [ebp-54h] + int v73; // [esp+188h] [ebp-50h] + int v74; // [esp+18Ch] [ebp-4Ch] + int v75; // [esp+190h] [ebp-48h] + int v76; // [esp+194h] [ebp-44h] + int v77; // [esp+198h] [ebp-40h] + int v78; // [esp+19Ch] [ebp-3Ch] + int v79; // [esp+1A0h] [ebp-38h] + int *v80; // [esp+1A4h] [ebp-34h] + int v81; // [esp+1A8h] [ebp-30h] + int v82; // [esp+1ACh] [ebp-2Ch] + int *v83; // [esp+1B0h] [ebp-28h] + int v84; // [esp+1B4h] [ebp-24h] + int v85; // [esp+1B8h] [ebp-20h] + int v86; // [esp+1BCh] [ebp-1Ch] + + v4 = *a1; + v52 = a2; + v51 = a3; + LOBYTE(v50) = v4; + if ( v4 != 95 || (v6 = 1, a1[1] != 90) ) + { + v5 = memcmp(a1, "_GLOBAL_", 8u) == 0; + v6 = 0; + if ( v5 ) + { + v7 = a1[8]; + if ( v7 == 95 || v7 == 46 || v7 == 36 ) + { + v8 = a1[9]; + if ( v8 == 68 || (v6 = 0, v8 == 73) ) + { + v6 = 0; + if ( a1[10] == 95 ) + v6 = (v8 != 73) + 2; + } + } + } + } + v9 = strlen(a1); + v53[0] = (int)a1; + v10 = 2 * v9; + v54 = 17; + v53[1] = (int)&a1[v9]; + v11 = 0; + Str = a1; + v58 = 2 * v9; + v57 = 0; + v61 = v9; + v60 = 0; + v62 = 0; + v63 = 0; + v64 = 0; + v65 = 0; + v66 = 0; + if ( 2 * v9 <= 0x800 ) + { + v12 = 4 * v9; + v49 = v45; + v13 = 16 * ((40 * v9 + 15) >> 4); + v14 = alloca(v13); + v15 = alloca(v13); + v16 = v46; + v48 = ((unsigned int)v46 + 3) >> 2; + v17 = 16 * ((unsigned int)(v12 + 15) >> 4); + v18 = alloca(v17); + v19 = alloca(v17); + v56 = v46; + v59 = v46; + if ( v6 != 1 ) + { + if ( (unsigned int)(v6 - 2) > 1 ) + { + comp = d_type(v53, v45[0], v45[1], v45[2], v46[0], v46[1], v46[2], v47, v48, (int)v49, (int)v50, v51); + v24 = *Str; + } + else + { + v5 = a1[11] == 95; + Str = a1 + 11; + if ( v5 && a1[12] == 90 ) + { + Str = a1 + 13; + v44 = a1[13]; + if ( v44 == 71 || v44 == 84 ) + v16 = d_special_name(v53); + else + v16 = (int *)d_encoding_part_0((int)v53, 0); + } + else + { + v47 = v10; + v50 = (int *)(a1 + 11); + v20 = strlen(a1 + 11); + if ( v47 > 0 && (v57 = 1, v21 = v48, *(_DWORD *)(4 * v48 + 4) = 0, *(_DWORD *)(4 * v21 + 8) = 0, v20) ) + { + *(_DWORD *)(4 * v21 + 0xC) = a1 + 11; + *(_DWORD *)(4 * v21) = 0; + *(_DWORD *)(4 * v21 + 0x10) = v20; + } + else + { + v16 = 0; + } + } + comp = d_make_comp(v53, (v6 != 2) + 68, (int)v16, 0); + Str += strlen(Str); + v24 = *Str; + } + goto LABEL_16; + } + if ( (_BYTE)v50 != 95 || a1[1] != 90 ) + return 0; + Str = a1 + 2; + v36 = a1[2]; + if ( v36 == 71 || v36 == 84 ) + comp = d_special_name(v53); + else + comp = (int *)d_encoding_part_0((int)v53, 1); + v24 = *Str; + if ( (v54 & 1) == 0 || v24 != 46 ) + { +LABEL_16: + if ( !v24 && comp ) + { + v68 = 0; + v69 = 0; + v70 = v52; + v72 = 0; + v71 = v51; + v73 = 0; + v77 = 0; + v78 = 0; + v74 = 0; + v75 = 0; + v76 = 0; + v79 = 0; + v80 = 0; + v81 = 0; + v82 = 0; + v83 = 0; + v84 = 0; + v85 = 0; + d_count_templates_scopes((int)v67, comp, v23); + if ( v75 <= 2047 ) + v75 = 0; + v25 = v82; + v86 = 0; + v26 = v82 * v85; + if ( v82 <= 0 ) + v25 = 1; + v85 *= v82; + v27 = 16 * ((unsigned int)(8 * v25 + 15) >> 4); + v28 = alloca(v27); + v29 = alloca(v27); + v80 = v46; + if ( v26 <= 0 ) + v26 = 1; + v30 = 16 * ((unsigned int)(8 * v26 + 15) >> 4); + v31 = alloca(v30); + v32 = alloca(v30); + v83 = v46; + d_print_comp((int)v67, (int)comp); + v33 = v68; + v34 = v71; + v67[v68] = 0; + v70(v67, v33, v34); + return v74 == 0; + } + return 0; + } + v50 = v53; + v37 = Str; + while ( 1 ) + { + v38 = (unsigned __int8)v37[1]; + v23 = v38 - 97; + if ( (unsigned __int8)(v38 - 97) <= 0x19u || (_BYTE)v38 == 95 ) + break; + if ( (unsigned __int8)(v38 - 48) > 9u ) + { + v24 = *v37; + goto LABEL_16; + } + v39 = *v37; + v40 = v37; +LABEL_44: + while ( v39 == 46 && (unsigned __int8)(v40[1] - 48) <= 9u ) + { + v39 = v40[2]; + for ( v40 += 2; (unsigned __int8)(v39 - 48) <= 9u; ++v40 ) + v39 = v40[1]; + } + v41 = v50; + Str = v40; + name = d_make_name(v50, (int)v37, v40 - v37); + v43 = d_make_comp(v41, 78, (int)comp, (int)name); + v37 = Str; + comp = v43; + v24 = *Str; + if ( *Str != 46 ) + goto LABEL_16; + } + v39 = v37[2]; + v40 = v37 + 2; + if ( (unsigned __int8)(v39 - 97) > 0x19u ) + goto LABEL_57; + while ( 1 ) + { + do + v39 = *++v40; + while ( (unsigned __int8)(v39 - 97) <= 0x19u ); +LABEL_57: + if ( v39 != 95 ) + goto LABEL_44; + } + } + return v11; +} +// 45F131: variable 'v23' is possibly undefined +// 45EE70: using guessed type char var_164[256]; + +//----- (0045F3E0) -------------------------------------------------------- +int __usercall d_print_subexpr@(int a1@, _DWORD *a2@) +{ + int v4; // edi + int result; // eax + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + int v10; // edx + int v11; // eax + int v12; // eax + _DWORD *v13; // [esp+18h] [ebp-14h] BYREF + int v14; // [esp+1Ch] [ebp-10h] + + if ( *a2 == 49 || *a2 <= 1u || *a2 == 6 ) + { + v4 = 1; + } + else + { + v9 = *(_DWORD *)(a1 + 256); + if ( v9 == 255 ) + { + v12 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v12); + ++*(_DWORD *)(a1 + 296); + v10 = 1; + v9 = 0; + } + else + { + v10 = v9 + 1; + } + *(_DWORD *)(a1 + 256) = v10; + v4 = 0; + *(_BYTE *)(a1 + v9) = 40; + *(_BYTE *)(a1 + 260) = 40; + } + result = a2[1]; + if ( result > 1 || (v6 = *(_DWORD *)(a1 + 284), v6 > 1024) ) + { + *(_DWORD *)(a1 + 280) = 1; + if ( v4 ) + return result; + } + else + { + v13 = a2; + a2[1] = result + 1; + v7 = *(_DWORD *)(a1 + 300); + *(_DWORD *)(a1 + 284) = v6 + 1; + v14 = v7; + *(_DWORD *)(a1 + 300) = &v13; + d_print_comp_inner(a2, 17); + result = v14; + *(_DWORD *)(a1 + 300) = v14; + --a2[1]; + --*(_DWORD *)(a1 + 284); + if ( v4 ) + return result; + } + result = *(_DWORD *)(a1 + 256); + if ( result == 255 ) + { + v11 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v11); + ++*(_DWORD *)(a1 + 296); + v8 = 1; + result = 0; + } + else + { + v8 = result + 1; + } + *(_DWORD *)(a1 + 256) = v8; + *(_BYTE *)(a1 + result) = 41; + *(_BYTE *)(a1 + 260) = 41; + return result; +} +// 45A6B0: using guessed type int __fastcall d_print_comp_inner(_DWORD, _DWORD); + +//----- (0045F550) -------------------------------------------------------- +int __usercall d_maybe_print_fold_expression@(int a1@, int a2@) +{ + _BYTE *v3; // eax + int v4; // edx + _DWORD *v5; // esi + _DWORD *v6; // edi + _DWORD *v7; // ebp + int v8; // edx + char v9; // al + int v10; // eax + int v11; // edx + _DWORD *v12; // ecx + const char *v13; // edi + int v14; // eax + char k; // dl + int v16; // ecx + int v17; // eax + _DWORD *v19; // ecx + int v20; // eax + int v21; // edx + int v22; // eax + int v23; // edx + const char *v24; // esi + int v25; // eax + char j; // dl + int v27; // ecx + int v28; // eax + int v29; // eax + const char *v30; // esi + char i; // dl + int v32; // ecx + int v33; // eax + int v34; // eax + int v35; // eax + int v36; // eax + int v37; // [esp+18h] [ebp-24h] + char v38; // [esp+1Fh] [ebp-1Dh] + char v39; // [esp+1Fh] [ebp-1Dh] + char v40; // [esp+1Fh] [ebp-1Dh] + + v3 = **(_BYTE ***)(*(_DWORD *)(a2 + 12) + 12); + if ( *v3 != 102 ) + return 0; + v4 = *(_DWORD *)(a2 + 16); + v5 = 0; + v6 = *(_DWORD **)(v4 + 16); + v7 = *(_DWORD **)(v4 + 12); + if ( *v6 == 60 ) + { + v5 = (_DWORD *)v6[4]; + v6 = (_DWORD *)v6[3]; + } + v8 = *(_DWORD *)(a1 + 292); + *(_DWORD *)(a1 + 292) = -1; + v9 = v3[1]; + v37 = v8; + if ( v9 == 108 ) + { + v29 = *(_DWORD *)(a1 + 256); + v30 = "(..."; + for ( i = 40; ; i = *v30 ) + { + if ( v29 == 255 ) + { + v33 = *(_DWORD *)(a1 + 268); + v40 = i; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v33); + ++*(_DWORD *)(a1 + 296); + i = v40; + v32 = 0; + v29 = 1; + } + else + { + v32 = v29++; + } + *(_DWORD *)(a1 + 256) = v29; + ++v30; + *(_BYTE *)(a1 + v32) = i; + *(_BYTE *)(a1 + 260) = i; + if ( v30 == "" ) + break; + } + d_print_expr_op(a1, v7); + v19 = v6; + goto LABEL_18; + } + if ( v9 > 108 ) + { + if ( v9 == 114 ) + { + v22 = *(_DWORD *)(a1 + 256); + if ( v22 == 255 ) + { + v35 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v35); + ++*(_DWORD *)(a1 + 296); + v23 = 1; + v22 = 0; + } + else + { + v23 = v22 + 1; + } + *(_DWORD *)(a1 + 256) = v23; + v24 = "...)"; + *(_BYTE *)(a1 + v22) = 40; + *(_BYTE *)(a1 + 260) = 40; + d_print_subexpr(a1, v6); + d_print_expr_op(a1, v7); + v25 = *(_DWORD *)(a1 + 256); + for ( j = 46; ; j = *v24 ) + { + if ( v25 == 255 ) + { + v28 = *(_DWORD *)(a1 + 268); + v39 = j; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v28); + ++*(_DWORD *)(a1 + 296); + j = v39; + v27 = 0; + v25 = 1; + } + else + { + v27 = v25++; + } + ++v24; + *(_DWORD *)(a1 + 256) = v25; + *(_BYTE *)(a1 + v27) = j; + *(_BYTE *)(a1 + 260) = j; + if ( v24 == "" ) + break; + } + } + goto LABEL_21; + } + if ( v9 == 76 || v9 == 82 ) + { + v10 = *(_DWORD *)(a1 + 256); + if ( v10 == 255 ) + { + v36 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v36); + ++*(_DWORD *)(a1 + 296); + v11 = 1; + v10 = 0; + } + else + { + v11 = v10 + 1; + } + *(_DWORD *)(a1 + 256) = v11; + v12 = v6; + v13 = "..."; + *(_BYTE *)(a1 + v10) = 40; + *(_BYTE *)(a1 + 260) = 40; + d_print_subexpr(a1, v12); + d_print_expr_op(a1, v7); + v14 = *(_DWORD *)(a1 + 256); + for ( k = 46; ; k = *v13 ) + { + if ( v14 == 255 ) + { + v17 = *(_DWORD *)(a1 + 268); + v38 = k; + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v17); + ++*(_DWORD *)(a1 + 296); + k = v38; + v16 = 0; + v14 = 1; + } + else + { + v16 = v14++; + } + ++v13; + *(_DWORD *)(a1 + 256) = v14; + *(_BYTE *)(a1 + v16) = k; + *(_BYTE *)(a1 + 260) = k; + if ( v13 == "" ) + break; + } + d_print_expr_op(a1, v7); + v19 = v5; +LABEL_18: + d_print_subexpr(a1, v19); + v20 = *(_DWORD *)(a1 + 256); + if ( v20 == 255 ) + { + v34 = *(_DWORD *)(a1 + 268); + *(_BYTE *)(a1 + 255) = 0; + (*(void (__cdecl **)(int, int, int))(a1 + 264))(a1, 255, v34); + ++*(_DWORD *)(a1 + 296); + v21 = 1; + v20 = 0; + } + else + { + v21 = v20 + 1; + } + *(_DWORD *)(a1 + 256) = v21; + *(_BYTE *)(a1 + v20) = 41; + *(_BYTE *)(a1 + 260) = 41; + } +LABEL_21: + *(_DWORD *)(a1 + 292) = v37; + return 1; +} + +//----- (0045F900) -------------------------------------------------------- +char *__cdecl __cxa_demangle(const char *lpmangled, char *lpout, size_t *lpoutlen, int *lpstatus) +{ + char *v4; // edi + size_t v5; // ebp + size_t v6; // eax + char *Str; // [esp+0h] [ebp-3Ch] + char *Src[2]; // [esp+10h] [ebp-2Ch] BYREF + size_t v10; // [esp+18h] [ebp-24h] + int v11; // [esp+1Ch] [ebp-20h] + + if ( !lpmangled || lpout && !lpoutlen ) + { + if ( lpstatus ) + *lpstatus = -3; + return 0; + } + Src[0] = 0; + Src[1] = 0; + v10 = 0; + v11 = 0; + if ( !d_demangle_callback_constprop_0( + (char *)lpmangled, + (void (__cdecl *)(char *, int, int))d_growable_string_callback_adapter, + (int)Src) ) + { + free(Src[0]); + if ( !lpstatus ) + return 0; + goto LABEL_25; + } + v4 = Src[0]; + if ( v11 ) + { + v5 = 1; + if ( Src[0] ) + goto LABEL_7; + if ( !lpstatus ) + return 0; + goto LABEL_16; + } + v5 = v10; + if ( Src[0] ) + { +LABEL_7: + if ( lpout ) + { + v6 = strlen(Src[0]); + if ( v6 < *lpoutlen ) + { + memcpy(lpout, Src[0], v6 + 1); + Str = v4; + v4 = lpout; + free(Str); + goto LABEL_10; + } + free(lpout); + } + else if ( !lpoutlen ) + { +LABEL_10: + if ( lpstatus ) + *lpstatus = 0; + return v4; + } + *lpoutlen = v5; + goto LABEL_10; + } + if ( lpstatus ) + { + if ( v10 == 1 ) + { +LABEL_16: + *lpstatus = -1; + return 0; + } +LABEL_25: + *lpstatus = -2; + return 0; + } + return 0; +} + +//----- (0045FA50) -------------------------------------------------------- +unsigned int __cdecl __gcclibcxx_demangle_callback(char *a1, void (__cdecl *a2)(char *, int, int), int a3) +{ + if ( a1 && a2 ) + return !d_demangle_callback_constprop_0(a1, a2, a3) ? 0xFFFFFFFE : 0; + else + return -3; +} + +//----- (0045FA90) -------------------------------------------------------- +void __do_global_dtors(void) +{ + void (*v0)(void); // eax + + v0 = (void (*)(void))*data_1; + if ( *data_1 ) + { + do + { + v0(); + v0 = (void (*)(void))data_1[1]; + ++data_1; + } + while ( v0 ); + } +} +// 53E1D4: using guessed type int *data_1; + +//----- (0045FAD0) -------------------------------------------------------- +int __do_global_ctors() +{ + int v0; // ebx + int v2; // eax + + v0 = __CTOR_LIST__[0]; + if ( __CTOR_LIST__[0] == -1 ) + { + v2 = 0; + do + v0 = v2++; + while ( __CTOR_LIST__[v2] ); + } + for ( ; v0; --v0 ) + ((void (*)(void))__CTOR_LIST__[v0])(); + return atexit(__do_global_dtors); +} +// 538950: using guessed type int __CTOR_LIST__[]; + +//----- (0045FB30) -------------------------------------------------------- +int __main() +{ + int result; // eax + + result = bss_0; + if ( !bss_0 ) + { + bss_0 = 1; + return __do_global_ctors(); + } + return result; +} +// 7695C8: using guessed type int bss_0; + +//----- (0045FB60) -------------------------------------------------------- +int _setargv() +{ + return 0; +} + +//----- (0045FB70) -------------------------------------------------------- +int __stdcall __dyn_tls_dtor(int a1, unsigned int a2, int a3) +{ + if ( a2 != 3 && a2 ) + return 1; + __mingw_TLScallback(a1, a2); + return 1; +} + +//----- (0045FBC0) -------------------------------------------------------- +int __stdcall __dyn_tls_init(int a1, int a2, int a3) +{ + if ( _CRT_MT != 2 ) + _CRT_MT = 2; + if ( a2 == 2 || a2 != 1 ) + return 1; + __mingw_TLScallback(a1, 1u); + return 1; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (0045FC60) -------------------------------------------------------- +int __tlregdtor() +{ + return 0; +} + +//----- (0045FC70) -------------------------------------------------------- +int __cdecl _matherr(struct _exception *Except) +{ + const char *v1; // ebx + unsigned int v2; // edx + char *name; // esi + FILE *v4; // eax + double arg1; // [esp+38h] [ebp-24h] + double arg2; // [esp+40h] [ebp-1Ch] + double retval; // [esp+48h] [ebp-14h] + + v1 = "Unknown error"; + v2 = Except->type - 1; + if ( v2 <= 5 ) + v1 = CSWTCH_1[v2]; + name = Except->name; + retval = Except->retval; + arg2 = Except->arg2; + arg1 = Except->arg1; + v4 = __acrt_iob_func(2u); + fprintf(v4, "_matherr(): %s in %s(%g, %g) (retval=%g)\n", v1, name, arg1, arg2, retval); + return 0; +} +// 55A578: using guessed type char *CSWTCH_1[6]; + +//----- (0045FCF0) -------------------------------------------------------- +void __cdecl fpreset() +{ + __asm { fninit } +} + +//----- (0045FD00) -------------------------------------------------------- +void __noreturn __report_error(char *Format, ...) +{ + FILE *Stream; // eax + FILE *v2; // eax + va_list va; // [esp+24h] [ebp+8h] BYREF + + va_start(va, Format); + Stream = __acrt_iob_func(2u); + fwrite("Mingw-w64 runtime failure:\n", 1u, 0x1Bu, Stream); + v2 = __acrt_iob_func(2u); + vfprintf(v2, Format, va); + abort(); +} + +//----- (0045FD60) -------------------------------------------------------- +_DWORD *__usercall mark_section_writable@(const void *a1@) +{ + int v2; // esi + int v3; // ecx + _DWORD *result; // eax + int SectionForAddress; // edi + int v6; // ebx + _DWORD *v7; // eax + const void *lpAddress; // eax + DWORD v9; // eax + SIZE_T RegionSize; // ecx + PVOID BaseAddress; // edx + DWORD *lpflOldProtect; // ebx + DWORD LastError; // eax + struct _MEMORY_BASIC_INFORMATION Buffer; // [esp+14h] [ebp-28h] BYREF + + v2 = maxSections; + if ( maxSections <= 0 ) + { + v2 = 0; +LABEL_6: + SectionForAddress = __mingw_GetSectionForAddress((int)a1); + if ( !SectionForAddress ) + __report_error("Address %p has no image-section", a1); + v6 = 20 * v2; + v7 = (_DWORD *)(20 * v2 + the_secs); + v7[4] = SectionForAddress; + *v7 = 0; + lpAddress = (const void *)(*(_DWORD *)(SectionForAddress + 12) + _GetPEImageBase()); + *(_DWORD *)(the_secs + 20 * v2 + 12) = lpAddress; + if ( !VirtualQuery(lpAddress, &Buffer, 0x1Cu) ) + __report_error( + " VirtualQuery failed for %d bytes at address %p", + *(_DWORD *)(SectionForAddress + 8), + *(const void **)(the_secs + v6 + 12)); + result = (_DWORD *)Buffer.Protect; + if ( ((Buffer.Protect - 64) & 0xFFFFFFBF) != 0 && ((Buffer.Protect - 4) & 0xFFFFFFFB) != 0 ) + { + v9 = 4; + RegionSize = Buffer.RegionSize; + if ( Buffer.Protect != 2 ) + v9 = 64; + BaseAddress = Buffer.BaseAddress; + lpflOldProtect = (DWORD *)(the_secs + v6); + lpflOldProtect[2] = Buffer.RegionSize; + lpflOldProtect[1] = (DWORD)BaseAddress; + result = (_DWORD *)VirtualProtect(BaseAddress, RegionSize, v9, lpflOldProtect); + if ( !result ) + { + LastError = GetLastError(); + __report_error(" VirtualProtect failed with code 0x%x", LastError); + } + } + ++maxSections; + } + else + { + v3 = 0; + result = (_DWORD *)(the_secs + 12); + while ( *result > (unsigned int)a1 || (unsigned int)a1 >= *(_DWORD *)(result[1] + 8) + *result ) + { + ++v3; + result += 5; + if ( v3 == maxSections ) + goto LABEL_6; + } + } + return result; +} +// 7695FC: using guessed type int maxSections; +// 769600: using guessed type int the_secs; + +//----- (0045FEC0) -------------------------------------------------------- +void _pei386_runtime_relocator() +{ + int v0; // eax + void *v1; // esp + void *v2; // esp + int v3; // [esp+10h] [ebp-38h] BYREF + + if ( !was_init_0 ) + { + was_init_0 = 1; + v0 = 16 * ((unsigned int)(20 * __mingw_GetSectionCount() + 27) >> 4); + v1 = alloca(v0); + maxSections = 0; + v2 = alloca(v0); + the_secs = (int)&v3; + } +} +// 7695F8: using guessed type int was_init_0; +// 7695FC: using guessed type int maxSections; +// 769600: using guessed type int the_secs; + +//----- (00460140) -------------------------------------------------------- +int (__cdecl *__cdecl __mingw_raise_matherr(int a1, int a2, double a3, double a4, double a5))(_DWORD) +{ + int (__cdecl *result)(_DWORD); // eax + int v6[2]; // [esp+10h] [ebp-2Ch] BYREF + double v7; // [esp+18h] [ebp-24h] + double v8; // [esp+20h] [ebp-1Ch] + double v9; // [esp+28h] [ebp-14h] + + result = stUserMathErr; + if ( stUserMathErr ) + { + v7 = a3; + v8 = a4; + v6[0] = a1; + v9 = a5; + v6[1] = a2; + return (int (__cdecl *)(_DWORD))stUserMathErr(v6); + } + return result; +} +// 769604: using guessed type int (__cdecl *stUserMathErr)(_DWORD); + +//----- (004601A0) -------------------------------------------------------- +void __cdecl __mingw_setusermatherr(_UserMathErrorFunctionPointer UserMathErrorFunction) +{ + stUserMathErr = (int (__cdecl *)(_DWORD))UserMathErrorFunction; + __setusermatherr(UserMathErrorFunction); +} +// 769604: using guessed type int (__cdecl *stUserMathErr)(_DWORD); + +//----- (004601B0) -------------------------------------------------------- +LONG __stdcall _gnu_exception_handler(_EXCEPTION_POINTERS *a1) +{ + DWORD ExceptionCode; // eax + _crt_signal_t v2; // eax + _crt_signal_t v4; // eax + _crt_signal_t v5; // eax + + ExceptionCode = a1->ExceptionRecord->ExceptionCode; + if ( ExceptionCode == -1073741677 ) + { +LABEL_6: + v2 = signal(8, 0); + if ( v2 == (_crt_signal_t)1 ) + { + signal(8, (_crt_signal_t)1); + fpreset(); + return -1; + } +LABEL_7: + if ( v2 ) + { + v2(8); + return -1; + } + goto LABEL_8; + } + if ( ExceptionCode > 0xC0000093 ) + { + if ( ExceptionCode == -1073741676 ) + { + v2 = signal(8, 0); + if ( v2 == (_crt_signal_t)1 ) + { + signal(8, (_crt_signal_t)1); + return -1; + } + goto LABEL_7; + } + if ( ExceptionCode != -1073741674 ) + goto LABEL_8; +LABEL_18: + v5 = signal(4, 0); + if ( v5 == (_crt_signal_t)1 ) + { + signal(4, (_crt_signal_t)1); + return -1; + } + if ( v5 ) + { + v5(4); + return -1; + } + goto LABEL_8; + } + if ( ExceptionCode == -1073741795 ) + goto LABEL_18; + if ( ExceptionCode <= 0xC000001D ) + { + if ( ExceptionCode == -1073741819 ) + { + v4 = signal(11, 0); + if ( v4 == (_crt_signal_t)1 ) + { + signal(11, (_crt_signal_t)1); + return -1; + } + if ( v4 ) + { + v4(11); + return -1; + } + } + goto LABEL_8; + } + if ( ExceptionCode + 1073741683 <= 4 ) + goto LABEL_6; +LABEL_8: + if ( __mingw_oldexcpt_handler ) + return __mingw_oldexcpt_handler(a1); + else + return 0; +} +// 76960C: using guessed type int (__stdcall *__mingw_oldexcpt_handler)(_DWORD); + +//----- (00460360) -------------------------------------------------------- +void __mingwthr_run_key_dtors_part_0() +{ + DWORD *v0; // ebx + LPVOID Value; // esi + + EnterCriticalSection(&__mingwthr_cs); + v0 = (DWORD *)key_dtor_list; + if ( key_dtor_list ) + { + do + { + Value = TlsGetValue(*v0); + if ( !GetLastError() && Value ) + ((void (__cdecl *)(LPVOID))v0[1])(Value); + v0 = (DWORD *)v0[2]; + } + while ( v0 ); + } + LeaveCriticalSection(&__mingwthr_cs); +} + +//----- (004603D0) -------------------------------------------------------- +int __cdecl ___w64_mingwthr_add_key_dtor(int a1, int a2) +{ + int result; // eax + _DWORD *v3; // eax + _DWORD *v4; // ebx + void *v5; // eax + + result = __mingwthr_cs_init; + if ( __mingwthr_cs_init ) + { + v3 = calloc(1u, 0xCu); + v4 = v3; + if ( v3 ) + { + *v3 = a1; + v3[1] = a2; + EnterCriticalSection(&__mingwthr_cs); + v5 = key_dtor_list; + key_dtor_list = v4; + v4[2] = v5; + LeaveCriticalSection(&__mingwthr_cs); + return 0; + } + else + { + return -1; + } + } + return result; +} +// 769614: using guessed type int __mingwthr_cs_init; + +//----- (00460450) -------------------------------------------------------- +int __cdecl ___w64_mingwthr_remove_key_dtor(int a1) +{ + _DWORD *v2; // eax + _DWORD *v3; // ecx + int v4; // edx + + if ( !__mingwthr_cs_init ) + return 0; + EnterCriticalSection(&__mingwthr_cs); + v2 = key_dtor_list; + if ( key_dtor_list ) + { + v3 = 0; + while ( 1 ) + { + v4 = v2[2]; + if ( *v2 == a1 ) + break; + v3 = v2; + if ( !v4 ) + goto LABEL_11; + v2 = (_DWORD *)v2[2]; + } + if ( v3 ) + v3[2] = v4; + else + key_dtor_list = (void *)v2[2]; + free(v2); + } +LABEL_11: + LeaveCriticalSection(&__mingwthr_cs); + return 0; +} +// 769614: using guessed type int __mingwthr_cs_init; + +//----- (004604E0) -------------------------------------------------------- +int __cdecl __mingw_TLScallback(int a1, unsigned int a2) +{ + void *v3; // ebx + void *Block; // eax + + if ( a2 == 2 ) + { + fpreset(); + return 1; + } + else + { + if ( a2 > 2 ) + { + if ( a2 == 3 && __mingwthr_cs_init ) + __mingwthr_run_key_dtors_part_0(); + } + else if ( a2 ) + { + if ( !__mingwthr_cs_init ) + InitializeCriticalSection(&__mingwthr_cs); + __mingwthr_cs_init = 1; + } + else + { + if ( __mingwthr_cs_init ) + __mingwthr_run_key_dtors_part_0(); + if ( __mingwthr_cs_init == 1 ) + { + v3 = key_dtor_list; + while ( v3 ) + { + Block = v3; + v3 = (void *)*((_DWORD *)v3 + 2); + free(Block); + } + key_dtor_list = 0; + __mingwthr_cs_init = 0; + DeleteCriticalSection(&__mingwthr_cs); + } + } + return 1; + } +} +// 769614: using guessed type int __mingwthr_cs_init; + +//----- (004605D0) -------------------------------------------------------- +BOOL __cdecl _ValidateImageBase(int a1) +{ + int v1; // eax + + if ( *(_WORD *)a1 == 23117 && (v1 = *(_DWORD *)(a1 + 60) + a1, *(_DWORD *)v1 == 17744) ) + return *(_WORD *)(v1 + 24) == 267; + else + return 0; +} + +//----- (00460600) -------------------------------------------------------- +int __cdecl _FindPESection(int a1, unsigned int a2) +{ + int v2; // edx + int v3; // esi + int result; // eax + int v5; // ecx + unsigned int v6; // edx + + v2 = *(_DWORD *)(a1 + 60) + a1; + v3 = *(unsigned __int16 *)(v2 + 6); + result = v2 + *(unsigned __int16 *)(v2 + 20) + 24; + if ( !*(_WORD *)(v2 + 6) ) + return 0; + v5 = 0; + while ( 1 ) + { + v6 = *(_DWORD *)(result + 12); + if ( v6 <= a2 && *(_DWORD *)(result + 8) + v6 > a2 ) + break; + ++v5; + result += 40; + if ( v5 == v3 ) + return 0; + } + return result; +} + +//----- (00460640) -------------------------------------------------------- +const char *__cdecl _FindPESectionByName(char *Str) +{ + const char *v1; // ebx + int v2; // ebp + int v3; // esi + + v1 = 0; + if ( strlen(Str) > 8 + || MEMORY[0x400000] != 23117 + || *(_DWORD *)(MEMORY[0x40003C] + 0x400000) != 17744 + || *(_WORD *)(MEMORY[0x40003C] + 4194328) != 267 ) + { + return v1; + } + v2 = *(unsigned __int16 *)(MEMORY[0x40003C] + 4194310); + v1 = (const char *)(MEMORY[0x40003C] + 0x400000 + *(unsigned __int16 *)(MEMORY[0x40003C] + 4194324) + 24); + if ( *(_WORD *)(MEMORY[0x40003C] + 4194310) ) + { + v3 = 0; + while ( strncmp(v1, Str, 8u) ) + { + ++v3; + v1 += 40; + if ( v2 == v3 ) + return 0; + } + return v1; + } + return 0; +} + +//----- (004606E0) -------------------------------------------------------- +int __cdecl __mingw_GetSectionForAddress(int a1) +{ + int result; // eax + unsigned int v2; // ebx + int v3; // ecx + unsigned int v4; // edx + + result = 0; + if ( MEMORY[0x400000] == 23117 + && *(_DWORD *)(MEMORY[0x40003C] + 0x400000) == 17744 + && *(_WORD *)(MEMORY[0x40003C] + 4194328) == 267 ) + { + result = MEMORY[0x40003C] + 0x400000 + *(unsigned __int16 *)(MEMORY[0x40003C] + 4194324) + 24; + v2 = a1 - 0x400000; + if ( *(_WORD *)(MEMORY[0x40003C] + 4194310) ) + { + v3 = 0; + while ( 1 ) + { + v4 = *(_DWORD *)(result + 12); + if ( v2 >= v4 && v2 < *(_DWORD *)(result + 8) + v4 ) + break; + ++v3; + result += 40; + if ( v3 == *(unsigned __int16 *)(MEMORY[0x40003C] + 4194310) ) + return 0; + } + } + else + { + return 0; + } + } + return result; +} + +//----- (00460760) -------------------------------------------------------- +int __mingw_GetSectionCount() +{ + int result; // eax + + result = 0; + if ( MEMORY[0x400000] == 23117 + && *(_DWORD *)(MEMORY[0x40003C] + 0x400000) == 17744 + && *(_WORD *)(MEMORY[0x40003C] + 4194328) == 267 ) + { + return *(unsigned __int16 *)(MEMORY[0x40003C] + 4194310); + } + return result; +} + +//----- (004607A0) -------------------------------------------------------- +int __cdecl _FindPESectionExec(int a1) +{ + int result; // eax + int v3; // edx + + result = 0; + if ( MEMORY[0x400000] == 23117 + && *(_DWORD *)(MEMORY[0x40003C] + 0x400000) == 17744 + && *(_WORD *)(MEMORY[0x40003C] + 4194328) == 267 ) + { + result = MEMORY[0x40003C] + 0x400000 + *(unsigned __int16 *)(MEMORY[0x40003C] + 4194324) + 24; + if ( *(_WORD *)(MEMORY[0x40003C] + 4194310) ) + { + v3 = 0; + do + { + if ( (*(_BYTE *)(result + 39) & 0x20) != 0 ) + { + if ( !a1 ) + return result; + --a1; + } + ++v3; + result += 40; + } + while ( *(unsigned __int16 *)(MEMORY[0x40003C] + 4194310) != v3 ); + } + return 0; + } + return result; +} + +//----- (00460820) -------------------------------------------------------- +int _GetPEImageBase() +{ + int result; // eax + + result = 0; + if ( MEMORY[0x400000] == 23117 + && *(_DWORD *)(MEMORY[0x40003C] + 0x400000) == 17744 + && *(_WORD *)(MEMORY[0x40003C] + 4194328) == 267 ) + { + return 0x400000; + } + return result; +} + +//----- (00460860) -------------------------------------------------------- +BOOL __cdecl _IsNonwritableInCurrentImage(int a1) +{ + _DWORD *v2; // eax + unsigned int v3; // ebx + int v4; // ecx + unsigned int v5; // edx + + if ( MEMORY[0x400000] != 23117 + || *(_DWORD *)(MEMORY[0x40003C] + 0x400000) != 17744 + || *(_WORD *)(MEMORY[0x40003C] + 4194328) != 267 ) + { + return 0; + } + v2 = (_DWORD *)(MEMORY[0x40003C] + 0x400000 + *(unsigned __int16 *)(MEMORY[0x40003C] + 4194324) + 24); + v3 = a1 - 0x400000; + if ( !*(_WORD *)(MEMORY[0x40003C] + 4194310) ) + return 0; + v4 = 0; + while ( 1 ) + { + v5 = v2[3]; + if ( v3 >= v5 && v3 < v2[2] + v5 ) + break; + ++v4; + v2 += 10; + if ( *(unsigned __int16 *)(MEMORY[0x40003C] + 4194310) == v4 ) + return 0; + } + return v2[9] >= 0; +} + +//----- (004608F0) -------------------------------------------------------- +int __cdecl __mingw_enum_import_library_names(int a1) +{ + unsigned int v3; // eax + int v4; // edx + int v5; // esi + unsigned int v6; // ecx + unsigned int i; // eax + + if ( MEMORY[0x400000] != 23117 ) + return 0; + if ( *(_DWORD *)(MEMORY[0x40003C] + 0x400000) != 17744 ) + return 0; + if ( *(_WORD *)(MEMORY[0x40003C] + 4194328) != 267 ) + return 0; + v3 = *(_DWORD *)(MEMORY[0x40003C] + 4194432); + if ( !v3 ) + return 0; + v4 = MEMORY[0x40003C] + 0x400000 + *(unsigned __int16 *)(MEMORY[0x40003C] + 4194324) + 24; + if ( !*(_WORD *)(MEMORY[0x40003C] + 4194310) ) + return 0; + v5 = 0; + while ( 1 ) + { + v6 = *(_DWORD *)(v4 + 12); + if ( v3 >= v6 && v3 < *(_DWORD *)(v4 + 8) + v6 ) + break; + ++v5; + v4 += 40; + if ( v5 == *(unsigned __int16 *)(MEMORY[0x40003C] + 4194310) ) + return 0; + } + for ( i = v3 + 0x400000; *(_DWORD *)(i + 4) || *(_DWORD *)(i + 12); i += 20 ) + { + if ( a1 <= 0 ) + return *(_DWORD *)(i + 12) + 0x400000; + --a1; + } + return 0; +} + +//----- (00460C40) -------------------------------------------------------- +int __cdecl __gthr_win32_once(int a1, void (*a2)(void)) +{ + if ( !a1 || !a2 ) + return 22; + if ( *(_DWORD *)a1 ) + return 0; + if ( _InterlockedAdd((volatile signed __int32 *)(a1 + 4), 1u) ) + { + while ( !*(_DWORD *)a1 ) + Sleep(0); + return 0; + } + a2(); + *(_DWORD *)a1 = 1; + return 0; +} + +//----- (00460CC0) -------------------------------------------------------- +int __cdecl __gthr_win32_key_create(int *a1, int a2) +{ + int v2; // eax + + v2 = TlsAlloc(); + if ( v2 == -1 ) + return GetLastError(); + *a1 = v2; + return __mingwthr_key_dtor(v2, a2); +} + +//----- (00460D00) -------------------------------------------------------- +DWORD __cdecl __gthr_win32_key_delete(DWORD dwTlsIndex) +{ + if ( TlsFree(dwTlsIndex) ) + return 0; + else + return GetLastError(); +} + +//----- (00460D30) -------------------------------------------------------- +LPVOID __cdecl __gthr_win32_getspecific(DWORD dwTlsIndex) +{ + DWORD LastError; // esi + LPVOID Value; // ebx + + LastError = GetLastError(); + Value = TlsGetValue(dwTlsIndex); + SetLastError(LastError); + return Value; +} + +//----- (00460D70) -------------------------------------------------------- +DWORD __cdecl __gthr_win32_setspecific(DWORD dwTlsIndex, LPVOID lpTlsValue) +{ + if ( TlsSetValue(dwTlsIndex, lpTlsValue) ) + return 0; + else + return GetLastError(); +} + +//----- (00460DB0) -------------------------------------------------------- +HANDLE __cdecl __gthr_win32_mutex_init_function(_DWORD *a1) +{ + HANDLE result; // eax + + *a1 = -1; + result = CreateSemaphoreW(0, 0, 0xFFFF, 0); + a1[1] = result; + return result; +} + +//----- (00460DF0) -------------------------------------------------------- +int __cdecl __gthr_win32_mutex_destroy(int a1) +{ + return _IAT_start__(*(_DWORD *)(a1 + 4)); +} +// 76B1F0: using guessed type int __stdcall _IAT_start__(_DWORD); + +//----- (00460E10) -------------------------------------------------------- +int __cdecl __gthr_win32_mutex_lock(int a1) +{ + if ( !_InterlockedAdd((volatile signed __int32 *)a1, 1u) || !WaitForSingleObject(*(HANDLE *)(a1 + 4), 0xFFFFFFFF) ) + return 0; + _InterlockedSub((volatile signed __int32 *)a1, 1u); + return 1; +} + +//----- (00460E60) -------------------------------------------------------- +BOOL __cdecl __gthr_win32_mutex_trylock(volatile signed __int32 *a1) +{ + return _InterlockedCompareExchange(a1, 0, -1) >= 0; +} + +//----- (00460E80) -------------------------------------------------------- +BOOL __cdecl __gthr_win32_mutex_unlock(int a1) +{ + return _InterlockedDecrement((volatile signed __int32 *)a1) >= 0 && !ReleaseSemaphore(*(HANDLE *)(a1 + 4), 1, 0); +} + +//----- (00460ED0) -------------------------------------------------------- +HANDLE __cdecl __gthr_win32_recursive_mutex_init_function(_DWORD *a1) +{ + HANDLE result; // eax + + *a1 = -1; + a1[1] = 0; + a1[2] = 0; + result = CreateSemaphoreW(0, 0, 0xFFFF, 0); + a1[3] = result; + return result; +} + +//----- (00460F20) -------------------------------------------------------- +DWORD __cdecl __gthr_win32_recursive_mutex_lock(int a1) +{ + DWORD CurrentThreadId; // eax + DWORD v2; // esi + DWORD result; // eax + + CurrentThreadId = GetCurrentThreadId(); + v2 = CurrentThreadId; + if ( _InterlockedAdd((volatile signed __int32 *)a1, 1u) ) + { + if ( *(_DWORD *)(a1 + 8) == CurrentThreadId ) + { + _InterlockedSub((volatile signed __int32 *)a1, 1u); + result = 0; + ++*(_DWORD *)(a1 + 4); + } + else + { + result = WaitForSingleObject(*(HANDLE *)(a1 + 12), 0xFFFFFFFF); + if ( result ) + { + _InterlockedSub((volatile signed __int32 *)a1, 1u); + return 1; + } + else + { + *(_DWORD *)(a1 + 4) = 1; + *(_DWORD *)(a1 + 8) = v2; + } + } + } + else + { + *(_DWORD *)(a1 + 4) = 1; + *(_DWORD *)(a1 + 8) = CurrentThreadId; + return 0; + } + return result; +} + +//----- (00460FA0) -------------------------------------------------------- +int __cdecl __gthr_win32_recursive_mutex_trylock(int a1) +{ + DWORD CurrentThreadId; // edx + int result; // eax + + CurrentThreadId = GetCurrentThreadId(); + if ( _InterlockedCompareExchange((volatile signed __int32 *)a1, 0, -1) < 0 ) + { + *(_DWORD *)(a1 + 4) = 1; + result = 0; + *(_DWORD *)(a1 + 8) = CurrentThreadId; + } + else + { + result = 1; + if ( *(_DWORD *)(a1 + 8) == CurrentThreadId ) + { + ++*(_DWORD *)(a1 + 4); + return 0; + } + } + return result; +} + +//----- (00460FF0) -------------------------------------------------------- +BOOL __cdecl __gthr_win32_recursive_mutex_unlock(int a1) +{ + bool v1; // zf + + v1 = (*(_DWORD *)(a1 + 4))-- == 1; + if ( v1 && (*(_DWORD *)(a1 + 8) = 0, _InterlockedDecrement((volatile signed __int32 *)a1) >= 0) ) + return !ReleaseSemaphore(*(HANDLE *)(a1 + 12), 1, 0); + else + return 0; +} + +//----- (00461050) -------------------------------------------------------- +int __cdecl __gthr_win32_recursive_mutex_destroy(int a1) +{ + _IAT_start__(*(_DWORD *)(a1 + 12)); + return 0; +} +// 76B1F0: using guessed type int __stdcall _IAT_start__(_DWORD); + +//----- (00461070) -------------------------------------------------------- +int __usercall _Unwind_RaiseException_Phase2@(_DWORD *a1@, _DWORD *a2@, int *a3@) +{ + int v3; // edi + _DWORD *v6; // eax + int v7; // ecx + int v8; // ebp + int result; // eax + int (__cdecl *v10)(int, int, _DWORD, _DWORD, _DWORD *, _DWORD *); // [esp+28h] [ebp-24h] + + v3 = 1; + v6 = (_DWORD *)*a2; + if ( !*a2 ) + return 2; + while ( 1 ) + { + v10 = (int (__cdecl *)(int, int, _DWORD, _DWORD, _DWORD *, _DWORD *))v6[6]; + if ( v6 == (_DWORD *)a1[4] ) + { + if ( !v10 ) + goto LABEL_14; + v7 = 6; + v8 = 4; + } + else + { + v7 = 2; + v8 = 0; + if ( !v10 ) + goto LABEL_8; + } + result = v10(1, v7, *a1, a1[1], a1, a2); + if ( result == 7 ) + break; + if ( result != 8 ) + return 2; + if ( v8 ) +LABEL_14: + abort(); + v6 = (_DWORD *)*a2; +LABEL_8: + v6 = (_DWORD *)*v6; + ++v3; + *a2 = v6; + if ( !v6 ) + return 2; + } + *a3 = v3; + return result; +} + +//----- (00461130) -------------------------------------------------------- +BOOL fc_key_init() +{ + int v0; // eax + DWORD LastError; // eax + BOOL result; // eax + + v0 = TlsAlloc(); + if ( v0 == -1 ) + { + LastError = GetLastError(); + } + else + { + fc_key = v0; + LastError = __mingwthr_key_dtor(v0, 0); + } + result = LastError == 0; + use_fc_key = result; + return result; +} +// 53E1F0: using guessed type int use_fc_key; + +//----- (00461170) -------------------------------------------------------- +void fc_key_init_once() +{ + int v0; // eax + DWORD LastError; // eax + + if ( !_CRT_MT ) + goto LABEL_4; + if ( once_0 ) + { + if ( use_fc_key < 0 ) +LABEL_4: + use_fc_key = 0; + } + else if ( _InterlockedAdd(&dword_53E1EC, 1u) ) + { + while ( !once_0 ) + Sleep(0); + if ( use_fc_key < 0 ) + use_fc_key = 0; + } + else + { + v0 = TlsAlloc(); + if ( v0 == -1 ) + { + LastError = GetLastError(); + } + else + { + fc_key = v0; + LastError = __mingwthr_key_dtor(v0, 0); + } + once_0 = 1; + use_fc_key = LastError == 0; + } +} +// 53E1E4: using guessed type int _CRT_MT; +// 53E1E8: using guessed type int once_0; +// 53E1EC: using guessed type int dword_53E1EC; +// 53E1F0: using guessed type int use_fc_key; + +//----- (00461250) -------------------------------------------------------- +LPVOID _Unwind_SjLj_GetContext() +{ + int v0; // ebx + DWORD dwTlsIndex; // ebx + DWORD LastError; // esi + LPVOID Value; // ebx + + if ( use_fc_key < 0 ) + { + fc_key_init_once(); + v0 = fc_static; + if ( !use_fc_key ) + return (LPVOID)v0; + } + else + { + v0 = fc_static; + if ( !use_fc_key ) + return (LPVOID)v0; + } + dwTlsIndex = fc_key; + LastError = GetLastError(); + Value = TlsGetValue(dwTlsIndex); + SetLastError(LastError); + return Value; +} +// 53E1F0: using guessed type int use_fc_key; +// 769648: using guessed type int fc_static; + +//----- (004612C0) -------------------------------------------------------- +int __usercall uw_install_context_constprop_0@(int a1@) +{ + void *v2; // esi + int v3; // eax + + v2 = *(void **)a1; + v3 = use_fc_key; + if ( use_fc_key < 0 ) + { + fc_key_init_once(); + v3 = use_fc_key; + } + if ( v3 ) + { + if ( !TlsSetValue(fc_key, v2) ) + GetLastError(); + } + else + { + fc_static = (int)v2; + } + return (*(int (**)(void))(*(_DWORD *)a1 + 36))(); +} +// 53E1F0: using guessed type int use_fc_key; +// 769648: using guessed type int fc_static; + +//----- (00461320) -------------------------------------------------------- +int __usercall _Unwind_ForcedUnwind_Phase2@(_DWORD *a1@, void ***a2@, int *a3@) +{ + int v4; // esi + void **i; // eax + int (__cdecl *v7)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // ebp + int result; // eax + void *lpTlsValue; // ecx + int v10; // eax + int (__cdecl *v11)(int, int, _DWORD, _DWORD, _DWORD *, void ***, int); // [esp+20h] [ebp-2Ch] + int v12; // [esp+24h] [ebp-28h] + void *v13; // [esp+28h] [ebp-24h] + + v4 = 1; + v11 = (int (__cdecl *)(int, int, _DWORD, _DWORD, _DWORD *, void ***, int))a1[3]; + v12 = a1[4]; + for ( i = *a2; i; *a2 = i ) + { + while ( 1 ) + { + v7 = (int (__cdecl *)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD))i[6]; + if ( v11(1, 10, *a1, a1[1], a1, a2, v12) ) + return 2; + if ( v7 ) + { + result = v7(1, 10, *a1, a1[1], a1, a2); + if ( result == 7 ) + goto LABEL_17; + if ( result != 8 ) + return 2; + } + lpTlsValue = **a2; + v10 = use_fc_key; + if ( use_fc_key < 0 ) + { + v13 = **a2; + fc_key_init_once(); + v10 = use_fc_key; + lpTlsValue = v13; + } + if ( v10 ) + break; + fc_static = (int)lpTlsValue; +LABEL_4: + ++v4; + i = (void **)**a2; + *a2 = i; + if ( !i ) + goto LABEL_14; + } + if ( TlsSetValue(fc_key, lpTlsValue) ) + goto LABEL_4; + GetLastError(); + ++v4; + i = (void **)**a2; + } +LABEL_14: + if ( v11(1, 26, *a1, a1[1], a1, a2, v12) ) + return 2; + result = 5; +LABEL_17: + *a3 = v4; + return result; +} +// 53E1F0: using guessed type int use_fc_key; +// 769648: using guessed type int fc_static; + +//----- (004614B0) -------------------------------------------------------- +void __cdecl _Unwind_SjLj_Register(struct SjLj_Function_Context *lpfctx) +{ + int v1; // eax + struct SjLj_Function_Context *v2; // eax + DWORD dwTlsIndex; // esi + DWORD LastError; // edi + struct SjLj_Function_Context *Value; // esi + DWORD v6; // eax + + v1 = use_fc_key; + if ( use_fc_key < 0 ) + { + fc_key_init_once(); + v1 = use_fc_key; + } + if ( v1 ) + { + dwTlsIndex = fc_key; + LastError = GetLastError(); + Value = (struct SjLj_Function_Context *)TlsGetValue(dwTlsIndex); + SetLastError(LastError); + v6 = fc_key; + lpfctx->prev = Value; + if ( !TlsSetValue(v6, lpfctx) ) + GetLastError(); + } + else + { + v2 = (struct SjLj_Function_Context *)fc_static; + fc_static = (int)lpfctx; + lpfctx->prev = v2; + } +} +// 53E1F0: using guessed type int use_fc_key; +// 769648: using guessed type int fc_static; + +//----- (00461540) -------------------------------------------------------- +void __cdecl _Unwind_SjLj_Unregister(struct SjLj_Function_Context *lpfctx) +{ + struct SjLj_Function_Context *lpTlsValue; // ebx + int v2; // eax + + lpTlsValue = lpfctx->prev; + v2 = use_fc_key; + if ( use_fc_key < 0 ) + { + fc_key_init_once(); + v2 = use_fc_key; + } + if ( v2 ) + { + if ( !TlsSetValue(fc_key, lpTlsValue) ) + GetLastError(); + } + else + { + fc_static = (int)lpTlsValue; + } +} +// 53E1F0: using guessed type int use_fc_key; +// 769648: using guessed type int fc_static; + +//----- (004615A0) -------------------------------------------------------- +_Unwind_Word __cdecl _Unwind_GetGR(struct _Unwind_Context *lpuctx, int r) +{ + return *(_DWORD *)(*(_DWORD *)lpuctx + 4 * r + 8); +} + +//----- (004615B0) -------------------------------------------------------- +int __cdecl _Unwind_GetCFA(int a1) +{ + int result; // eax + + result = 0; + if ( *(_DWORD *)a1 ) + return *(_DWORD *)(*(_DWORD *)a1 + 40); + return result; +} + +//----- (004615C0) -------------------------------------------------------- +void __cdecl _Unwind_SetGR(struct _Unwind_Context *lpuctx, int r, _Unwind_Word v) +{ + *(_DWORD *)(*(_DWORD *)lpuctx + 4 * r + 8) = v; +} + +//----- (004615E0) -------------------------------------------------------- +int __cdecl _Unwind_GetIP(int a1) +{ + return *(_DWORD *)(*(_DWORD *)a1 + 4) + 1; +} + +//----- (004615F0) -------------------------------------------------------- +int __cdecl _Unwind_GetIPInfo(int a1, _DWORD *a2) +{ + int result; // eax + + *a2 = 0; + result = 0; + if ( *(_DWORD *)a1 ) + return *(_DWORD *)(*(_DWORD *)a1 + 4) + 1; + return result; +} + +//----- (00461610) -------------------------------------------------------- +int __cdecl _Unwind_SetIP(int a1, int a2) +{ + int result; // eax + + result = a2 - 1; + *(_DWORD *)(*(_DWORD *)a1 + 4) = a2 - 1; + return result; +} + +//----- (00461630) -------------------------------------------------------- +int __cdecl _Unwind_GetLanguageSpecificData(int a1) +{ + return *(_DWORD *)(*(_DWORD *)a1 + 28); +} + +//----- (00461640) -------------------------------------------------------- +int _Unwind_GetRegionStart() +{ + return 0; +} + +//----- (00461650) -------------------------------------------------------- +int _Unwind_FindEnclosingFunction() +{ + return 0; +} + +//----- (00461660) -------------------------------------------------------- +int _Unwind_GetDataRelBase() +{ + return 0; +} + +//----- (00461670) -------------------------------------------------------- +int _Unwind_GetTextRelBase() +{ + return 0; +} + +//----- (00461680) -------------------------------------------------------- +_Unwind_Reason_Code __cdecl _Unwind_SjLj_RaiseException(struct _Unwind_Exception *lpuexcpt) +{ + _DWORD *Value; // esi + _DWORD *v2; // eax + int (__cdecl *v3)(int, int, _DWORD, _DWORD, struct _Unwind_Exception *, _DWORD **); // ecx + int v4; // eax + _Unwind_Reason_Code result; // eax + DWORD dwTlsIndex; // esi + DWORD LastError; // edi + _DWORD *v8; // eax + _DWORD *v9; // [esp+28h] [ebp-14h] BYREF + int v10[4]; // [esp+2Ch] [ebp-10h] BYREF + + if ( use_fc_key < 0 ) + { + fc_key_init_once(); + Value = (_DWORD *)fc_static; + if ( !use_fc_key ) + goto LABEL_3; +LABEL_12: + dwTlsIndex = fc_key; + LastError = GetLastError(); + Value = TlsGetValue(dwTlsIndex); + SetLastError(LastError); + goto LABEL_3; + } + Value = (_DWORD *)fc_static; + if ( use_fc_key ) + goto LABEL_12; +LABEL_3: + v9 = Value; + if ( !Value ) + return 5; + v2 = Value; + while ( 1 ) + { + v3 = (int (__cdecl *)(int, int, _DWORD, _DWORD, struct _Unwind_Exception *, _DWORD **))v2[6]; + if ( !v3 ) + goto LABEL_8; + v4 = v3(1, 1, *(_DWORD *)lpuexcpt, *((_DWORD *)lpuexcpt + 1), lpuexcpt, &v9); + if ( v4 == 6 ) + break; + if ( v4 != 8 ) + return 3; +LABEL_8: + v2 = (_DWORD *)*v9; + v9 = v2; + if ( !v2 ) + return 5; + } + v8 = v9; + *((_DWORD *)lpuexcpt + 3) = 0; + v9 = Value; + *((_DWORD *)lpuexcpt + 4) = v8; + result = _Unwind_RaiseException_Phase2(lpuexcpt, &v9, v10); + if ( result != _URC_INSTALL_CONTEXT ) + return result; + uw_install_context_constprop_0((int)&v9); + return 3; +} +// 53E1F0: using guessed type int use_fc_key; +// 769648: using guessed type int fc_static; +// 461680: using guessed type int var_10[4]; + +//----- (00461790) -------------------------------------------------------- +_Unwind_Reason_Code __cdecl _Unwind_SjLj_ForcedUnwind( + struct _Unwind_Exception *lpuexcpt, + _Unwind_Stop_Fn pfnstop, + void *pdata) +{ + void **Value; // esi + _Unwind_Reason_Code result; // eax + DWORD dwTlsIndex; // esi + DWORD LastError; // edi + void **v7; // [esp+18h] [ebp-14h] BYREF + int v8[4]; // [esp+1Ch] [ebp-10h] BYREF + + if ( use_fc_key < 0 ) + { + fc_key_init_once(); + Value = (void **)fc_static; + if ( !use_fc_key ) + goto LABEL_3; + } + else + { + Value = (void **)fc_static; + if ( !use_fc_key ) + goto LABEL_3; + } + dwTlsIndex = fc_key; + LastError = GetLastError(); + Value = (void **)TlsGetValue(dwTlsIndex); + SetLastError(LastError); +LABEL_3: + v7 = Value; + *((_DWORD *)lpuexcpt + 3) = pfnstop; + *((_DWORD *)lpuexcpt + 4) = pdata; + result = _Unwind_ForcedUnwind_Phase2(lpuexcpt, &v7, v8); + if ( result == _URC_INSTALL_CONTEXT ) + { + uw_install_context_constprop_0((int)&v7); + _Unwind_SjLj_Resume(lpuexcpt); + } + return result; +} +// 53E1F0: using guessed type int use_fc_key; +// 769648: using guessed type int fc_static; +// 461790: using guessed type int var_10[4]; + +//----- (00461830) -------------------------------------------------------- +void __cdecl __noreturn _Unwind_SjLj_Resume(struct _Unwind_Exception *lpuexcpt) +{ + LPVOID Context; // eax + int *v2; // ecx + void ***v3; // edx + struct _Unwind_Exception *v4; // eax + int i; // eax + LPVOID v6; // [esp+8h] [ebp-14h] BYREF + int v7[4]; // [esp+Ch] [ebp-10h] BYREF + + Context = _Unwind_SjLj_GetContext(); + v2 = v7; + v3 = (void ***)&v6; + v6 = Context; + v4 = lpuexcpt; + if ( *((_DWORD *)lpuexcpt + 3) ) + goto LABEL_5; + for ( i = _Unwind_RaiseException_Phase2(lpuexcpt, &v6, v7); ; i = _Unwind_ForcedUnwind_Phase2(v4, v3, v2) ) + { + if ( i != 7 ) + abort(); + v4 = (struct _Unwind_Exception *)uw_install_context_constprop_0((int)&v6); +LABEL_5: + ; + } +} +// 461866: variable 'v3' is possibly undefined +// 461866: variable 'v2' is possibly undefined +// 461830: using guessed type int var_10[4]; + +//----- (00461880) -------------------------------------------------------- +_Unwind_Reason_Code __cdecl __noreturn _Unwind_SjLj_Resume_or_Rethrow(struct _Unwind_Exception *lpuexcpt) +{ + void **Context; // [esp+8h] [ebp-14h] BYREF + int v3[4]; // [esp+Ch] [ebp-10h] BYREF + + if ( *((_DWORD *)lpuexcpt + 3) ) + { + Context = (void **)_Unwind_SjLj_GetContext(); + if ( _Unwind_ForcedUnwind_Phase2(lpuexcpt, &Context, v3) == 7 ) + uw_install_context_constprop_0((int)&Context); + abort(); + } + return _Unwind_SjLj_RaiseException(lpuexcpt); +} +// 461880: using guessed type int var_10[4]; + +//----- (004618D0) -------------------------------------------------------- +void __cdecl _Unwind_DeleteException(struct _Unwind_Exception *lpuexcpt) +{ + void (__cdecl *v1)(int, struct _Unwind_Exception *); // eax + + v1 = (void (__cdecl *)(int, struct _Unwind_Exception *))*((_DWORD *)lpuexcpt + 2); + if ( v1 ) + v1(1, lpuexcpt); +} + +//----- (004618F0) -------------------------------------------------------- +_Unwind_Reason_Code __cdecl _Unwind_Backtrace(_Unwind_Trace_Fn pfntrace, void *lpdata) +{ + LPVOID Value; // ebx + DWORD dwTlsIndex; // ebx + DWORD LastError; // ebp + int v6[8]; // [esp+1Ch] [ebp-20h] BYREF + + if ( use_fc_key < 0 ) + { + fc_key_init_once(); + Value = (LPVOID)fc_static; + if ( !use_fc_key ) + goto LABEL_3; +LABEL_11: + dwTlsIndex = fc_key; + LastError = GetLastError(); + Value = TlsGetValue(dwTlsIndex); + SetLastError(LastError); + goto LABEL_3; + } + Value = (LPVOID)fc_static; + if ( use_fc_key ) + goto LABEL_11; +LABEL_3: + v6[0] = (int)Value; + while ( Value ) + { + if ( pfntrace((struct _Unwind_Context *)v6, lpdata) ) + return 3; + Value = *(LPVOID *)v6[0]; + v6[0] = *(_DWORD *)v6[0]; + } + if ( pfntrace((struct _Unwind_Context *)v6, lpdata) == _URC_NO_REASON ) + return 5; + return 3; +} +// 53E1F0: using guessed type int use_fc_key; +// 769648: using guessed type int fc_static; + +//----- (004619B0) -------------------------------------------------------- +void __cdecl emutls_destroy(int *a1) +{ + int v1; // edi + int v2; // ebx + int v3; // eax + + v1 = *a1; + if ( *a1 ) + { + v2 = 0; + do + { + v3 = a1[v2 + 1]; + if ( v3 ) + free(*(void **)(v3 - 4)); + ++v2; + } + while ( v1 != v2 ); + } + free(a1); +} + +//----- (00461A00) -------------------------------------------------------- +_DWORD *__usercall emutls_alloc@(size_t *a1@) +{ + unsigned int v2; // ebp + size_t v3; // edi + _DWORD *v4; // eax + _DWORD *v5; // ebx + const void *Src; // eax + void *v8; // eax + size_t v9; // [esp+8h] [ebp-24h] + + v2 = a1[1]; + v3 = *a1; + if ( v2 > 4 ) + { + v8 = malloc(v2 + v3 + 3); + if ( v8 ) + { + v5 = (_DWORD *)(-v2 & ((unsigned int)v8 + v2 + 3)); + *(v5 - 1) = v8; + Src = (const void *)a1[3]; + v9 = v3; + if ( Src ) + goto LABEL_4; + goto LABEL_7; + } +LABEL_8: + abort(); + } + v4 = malloc(v3 + 4); + if ( !v4 ) + goto LABEL_8; + *v4 = v4; + v5 = v4 + 1; + Src = (const void *)a1[3]; + v9 = v3; + if ( Src ) + { +LABEL_4: + memcpy(v5, Src, v9); + return v5; + } +LABEL_7: + memset(v5, 0, v9); + return v5; +} + +//----- (00461AA0) -------------------------------------------------------- +DWORD emutls_init() +{ + int v0; // eax + DWORD result; // eax + + emutls_mutex = -1; + hHandle = CreateSemaphoreW(0, 0, 0xFFFF, 0); + v0 = TlsAlloc(); + if ( v0 == -1 ) + { + result = GetLastError(); + } + else + { + emutls_key = v0; + result = __mingwthr_key_dtor(v0, (int)emutls_destroy); + } + if ( result ) + abort(); + return result; +} +// 769654: using guessed type int emutls_mutex; + +//----- (00461B20) -------------------------------------------------------- +_DWORD *__cdecl __emutls_get_address(size_t *a1) +{ + _DWORD *result; // eax + unsigned int v2; // edi + DWORD dwTlsIndex; // ebx + DWORD LastError; // esi + unsigned int *Value; // ebx + unsigned int v6; // edx + unsigned int v7; // edi + unsigned int *v8; // eax + int v9; // ecx + unsigned int *v10; // eax + int v11; // [esp+18h] [ebp-24h] + unsigned int v12; // [esp+1Ch] [ebp-20h] + + if ( !_CRT_MT ) + { + result = (_DWORD *)a1[2]; + if ( !result ) + { + result = emutls_alloc(a1); + a1[2] = (size_t)result; + } + return result; + } + v2 = a1[2]; + if ( !v2 ) + { + if ( !_CRT_MT ) + goto LABEL_27; + if ( once_0_0 ) + goto LABEL_38; + if ( _InterlockedAdd(&dword_53E1F8, 1u) ) + { + while ( !once_0_0 ) + Sleep(0); + } + else + { + emutls_init(); + once_0_0 = 1; + } + if ( _CRT_MT ) + { +LABEL_38: + if ( _InterlockedAdd(&emutls_mutex, 1u) && WaitForSingleObject(hHandle, 0xFFFFFFFF) ) + _InterlockedSub(&emutls_mutex, 1u); + v2 = a1[2]; + if ( v2 ) + goto LABEL_14; + } + else + { +LABEL_27: + v2 = a1[2]; + if ( v2 ) + goto LABEL_5; + } + v2 = emutls_size + 1; + emutls_size = v2; + a1[2] = v2; +LABEL_14: + if ( _CRT_MT && _InterlockedDecrement(&emutls_mutex) >= 0 ) + ReleaseSemaphore(hHandle, 1, 0); + } +LABEL_5: + dwTlsIndex = emutls_key; + LastError = GetLastError(); + Value = (unsigned int *)TlsGetValue(dwTlsIndex); + SetLastError(LastError); + if ( !Value ) + { + v8 = (unsigned int *)calloc(v2 + 33, 4u); + Value = v8; + if ( v8 ) + { + *v8 = v2 + 32; + goto LABEL_19; + } +LABEL_35: + abort(); + } + v6 = *Value; + if ( *Value < v2 ) + { + v9 = 2 * v6; + v12 = *Value; + if ( v2 > 2 * v6 ) + v9 = v2 + 32; + v11 = v9; + v10 = (unsigned int *)realloc(Value, 4 * v9 + 4); + Value = v10; + if ( v10 ) + { + *v10 = v11; + memset(&v10[v12 + 1], 0, 4 * (v11 - v12)); +LABEL_19: + if ( !TlsSetValue(emutls_key, Value) ) + GetLastError(); + goto LABEL_7; + } + goto LABEL_35; + } +LABEL_7: + v7 = v2 - 1; + result = (_DWORD *)Value[v7 + 1]; + if ( !result ) + { + result = emutls_alloc(a1); + Value[v7 + 1] = (unsigned int)result; + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53E1F4: using guessed type int once_0_0; +// 53E1F8: using guessed type int dword_53E1F8; +// 76964C: using guessed type int emutls_size; +// 769654: using guessed type int emutls_mutex; + +//----- (00461DC0) -------------------------------------------------------- +unsigned int *__cdecl __emutls_register_common(unsigned int *a1, unsigned int a2, unsigned int a3, unsigned int a4) +{ + unsigned int *result; // eax + + result = a1; + if ( *a1 < a2 ) + { + *a1 = a2; + a1[3] = 0; + } + if ( a1[1] < a3 ) + a1[1] = a3; + if ( a4 ) + { + if ( *a1 == a2 ) + a1[3] = a4; + } + return result; +} + +//----- (00461E00) -------------------------------------------------------- +long double __cdecl __mingw_strtod(unsigned __int8 *a1, unsigned __int8 **a2) +{ + char v2; // al + double v4; // [esp+28h] [ebp-24h] + int v5; // [esp+34h] [ebp-18h] BYREF + double v6; // [esp+38h] [ebp-14h] BYREF + + v2 = __strtodg(a1, a2, fpi_0, &v5, &v6); + switch ( v2 & 7 ) + { + case 0: + case 6: + v4 = 0.0; + if ( (v2 & 8) != 0 ) + goto LABEL_4; + break; + case 1: + LODWORD(v4) = LODWORD(v6); + HIDWORD(v4) = HIDWORD(v6) & 0xFFEFFFFF | ((v5 + 1075) << 20); + if ( (v2 & 8) != 0 ) + goto LABEL_4; + break; + case 2: + v4 = v6; + if ( (v2 & 8) != 0 ) + goto LABEL_4; + break; + case 3: + v4 = INFINITY; + if ( (v2 & 8) != 0 ) + goto LABEL_4; + break; + case 4: + v4 = NAN; + if ( (v2 & 8) != 0 ) + goto LABEL_4; + break; + case 5: + *(_QWORD *)&v4 = *(_QWORD *)&v6 | 0x7FF0000000000000LL; + goto LABEL_3; + default: +LABEL_3: + if ( (v2 & 8) != 0 ) +LABEL_4: + HIDWORD(v4) |= 0x80000000; + break; + } + return v4; +} +// 461E5A: variable 'v4' is possibly undefined +// 53E1FC: using guessed type int fpi_0[6]; + +//----- (00461F20) -------------------------------------------------------- +long double __cdecl __mingw_strtof(unsigned __int8 *a1, unsigned __int8 **a2) +{ + char v2; // al + float v3; // edx + float v5; // [esp+38h] [ebp-14h] BYREF + int v6[4]; // [esp+3Ch] [ebp-10h] BYREF + + v2 = __strtodg(a1, a2, fpi0_0, v6, &v5); + switch ( v2 & 7 ) + { + case 1: + case 5: + LODWORD(v3) = LODWORD(v5) & 0x7FFFFF | ((v6[0] + 150) << 23); + break; + case 2: + v3 = v5; + break; + case 3: + v3 = INFINITY; + break; + case 4: + v3 = NAN; + break; + default: + v3 = 0.0; + break; + } + if ( (v2 & 8) != 0 ) + LODWORD(v3) |= 0x80000000; + return v3; +} +// 53E214: using guessed type int fpi0_0[6]; +// 461F20: using guessed type int var_10[4]; + +//----- (00461FC0) -------------------------------------------------------- +wint_t __cdecl btowc(int Ch) +{ + wint_t result; // ax + unsigned int CodePage; // eax + CHAR MultiByteStr; // [esp+2Dh] [ebp-Fh] BYREF + WCHAR WideCharStr[7]; // [esp+2Eh] [ebp-Eh] BYREF + + result = -1; + if ( Ch != -1 ) + { + MultiByteStr = Ch; + WideCharStr[0] = -1; + CodePage = ___lc_codepage_func(); + MultiByteToWideChar(CodePage, 8u, &MultiByteStr, 1, WideCharStr, 1); + return WideCharStr[0]; + } + return result; +} +// 461FC0: using guessed type WCHAR WideCharStr[7]; + +//----- (00462030) -------------------------------------------------------- +int __cdecl __asctoe64(char *Str, long double *a2) +{ + char *v2; // edi + size_t v3; // eax + char *v4; // esi + int v5; // eax + void *v6; // esp + void *v7; // esp + int i; // esi + int v9; // ebx + int v10; // eax + int *v11; // edx + char *v12; // esi + char *v13; // eax + char v14; // al + char *v15; // esi + char *v16; // ebx + char *v18; // edx + char v19; // al + int v20; // edx + __int16 *v21; // ebx + int v22; // ecx + __int16 v23; // ax + int v24; // ecx + __int16 *v25; // ebx + __int16 j; // ax + __int16 v27; // ax + __int16 *v28; // ecx + __int16 v29; // ax + int v30; // esi + char *v31; // esi + int v32; // eax + char v33; // al + int v34; // ecx + int v35; // edx + int v36; // ebx + int v37; // edx + __int16 *v38; // ecx + __int16 k; // ax + __int16 v40; // ax + int v41; // edx + __int16 *v42; // ecx + __int16 v43; // ax + __int16 *v44; // edx + __int16 v45; // ax + bool v46; // zf + int v47; // eax + long double v48; // fst6 + __int16 v49; // fps + int v54; // eax + char *v55; // ebx + int v56; // esi + __int64 *v57; // eax + int v58; // edi + int v59; // ebx + int v60; // ebx + int v61; // eax + int v62; // ebx + int v63; // [esp+0h] [ebp-B8h] + int v64; // [esp+20h] [ebp-98h] BYREF + int v65; // [esp+28h] [ebp-90h] + int v66; // [esp+2Ch] [ebp-8Ch] + int v67; // [esp+30h] [ebp-88h] + int v68; // [esp+34h] [ebp-84h] + __int64 *v69; // [esp+38h] [ebp-80h] + int v70; // [esp+3Ch] [ebp-7Ch] + char *v71; // [esp+40h] [ebp-78h] + unsigned __int16 v72; // [esp+46h] [ebp-72h] + int v73; // [esp+48h] [ebp-70h] + int v74; // [esp+4Ch] [ebp-6Ch] + int *v75; // [esp+50h] [ebp-68h] + int v76; // [esp+54h] [ebp-64h] + int v77; // [esp+58h] [ebp-60h] + char *String2; // [esp+5Ch] [ebp-5Ch] + __int64 v79; // [esp+6Ah] [ebp-4Eh] BYREF + int v80; // [esp+72h] [ebp-46h] + int v81; // [esp+76h] [ebp-42h] + __int16 v82; // [esp+7Ah] [ebp-3Eh] BYREF + __int64 v83; // [esp+7Ch] [ebp-3Ch] BYREF + int v84; // [esp+84h] [ebp-34h] + int v85; // [esp+88h] [ebp-30h] + __int16 v86; // [esp+8Ch] [ebp-2Ch] BYREF + char v87[2]; // [esp+8Eh] [ebp-2Ah] BYREF + unsigned __int16 v88; // [esp+90h] [ebp-28h] + + v2 = Str; + LOBYTE(v74) = *localeconv()->decimal_point; + v3 = strlen(Str); + v4 = (char *)(v3 + 2); + v5 = 16 * ((v3 + 29) >> 4); + v6 = alloca(v5); + v7 = alloca(v5); + String2 = v4; + v75 = &v64; + for ( i = 0; ; ++i ) + { + v9 = (unsigned __int8)*v2; + v10 = isspace(v9); + if ( !v10 ) + break; + ++v2; + } + v67 = i; + v11 = v75; + v68 = 0; + v12 = String2; + while ( 1 ) + { + v11 = (int *)((char *)v11 + 1); + *((_BYTE *)v11 - 1) = v9; + if ( !(_BYTE)v9 ) + break; + if ( (int)v12 <= ++v10 ) + break; + LOBYTE(v9) = v2[v10]; + } + v13 = (char *)v75; + *(_BYTE *)v11 = 0; + v14 = *v13; + if ( v14 == 45 ) + { + String2 = (char *)v75 + 1; + v72 = -1; + } + else + { + v72 = 0; + String2 = (char *)v75 + (v14 == 43); + } + if ( !_strnicmp(String1, String2, 3u) ) + { + v31 = String2; + v16 = String2 + 3; + v32 = _strnicmp("INITY", String2 + 3, 5u); + HIDWORD(v79) = 0; + v80 = 0; + if ( !v32 ) + v16 = v31 + 8; + v81 = 0; + v82 = 0; + WORD1(v79) = 0x7FFF; + goto LABEL_13; + } + v15 = String2; + if ( !_strnicmp(off_55A6CA, String2, 3u) ) + { + *(_DWORD *)((char *)&v79 + 2) = 0x7FFF; + v80 = 0; + v16 = v15 + 3; + HIWORD(v79) = -16384; + v81 = 0; + v82 = 0; +LABEL_13: + LOWORD(v79) = v72; + __toe64(&v79, (int)a2); + return v67 + v16 - (char *)v75; + } + v18 = String2; + v79 = 0LL; + v19 = *String2; + v80 = 0; + v81 = 0; + v82 = 0; + if ( v19 == 48 ) + { + do + v19 = *++v18; + while ( v19 == 48 ); + String2 = v18; + v65 = 1; + } + else + { + v65 = 0; + } + v70 = 0; + v73 = 0; + v66 = 0; + v71 = 0; + v76 = 0; + while ( 1 ) + { + v77 = v19 - 48; + if ( (unsigned int)v77 <= 9 ) + { + v20 = WORD2(v79); + if ( WORD2(v79) ) + { + v66 |= v77; + v71 = (char *)((__PAIR64__((unsigned int)v71, v76) - 1) >> 32); + } + else + { + v21 = &v82; + v71 += -(v76 == 0) + 1; + v22 = 0; + do + { + if ( *v21 < 0 ) + v22 |= 1u; + v23 = 2 * *v21; + if ( (v22 & 2) != 0 ) + v23 |= 1u; + --v21; + v22 *= 2; + v21[1] = v23; + } + while ( v21 != (__int16 *)((char *)&v79 + 2) ); + v24 = 0; + v69 = &v83; + v86 = 0; + v25 = &v86; + v83 = v79; + v84 = v80; + v85 = v81; + for ( j = 0; ; j = *v25 ) + { + if ( j < 0 ) + v24 |= 1u; + v27 = 2 * j; + if ( (v24 & 2) != 0 ) + v27 |= 1u; + --v25; + v24 *= 2; + v25[1] = v27; + if ( v25 == (__int16 *)((char *)&v83 + 2) ) + break; + } + v28 = &v86; + do + { + if ( *v28 < 0 ) + v20 |= 1u; + v29 = 2 * *v28; + if ( (v20 & 2) != 0 ) + v29 |= 1u; + --v28; + v20 *= 2; + v28[1] = v29; + } + while ( v28 != (__int16 *)((char *)&v83 + 2) ); + v30 = (int)v69; + __eaddm((int)v69, (int)&v79); + *(_DWORD *)v30 = 0; + *(_DWORD *)(v30 + 4) = 0; + *(_DWORD *)(v30 + 8) = 0; + *(_DWORD *)(v30 + 12) = 0; + *(_WORD *)(v30 + 16) = 0; + HIWORD(v85) = v77; + __eaddm(v30, (int)&v79); + } + ++v70; + v73 |= v77; + goto LABEL_23; + } + if ( (_BYTE)v74 != v19 ) + break; + if ( v76 ) + { + v76 = v65 | v70; + goto LABEL_66; + } + v76 = 1; +LABEL_23: + v19 = *++String2; + } + v76 = v65 | v70; + if ( (v19 & 0xDF) == 69 ) + { + if ( v65 | v70 ) + { + v33 = String2[1]; + if ( v33 == 45 ) + { + v34 = -1; + v16 = String2 + 2; + v33 = String2[2]; + } + else + { + v16 = String2 + 1; + v34 = 1; + } + if ( v33 == 43 ) + v33 = *++v16; + if ( (unsigned __int8)(v33 - 48) <= 9u ) + { + v35 = v68; + do + { + if ( v35 <= 4977 ) + v35 = (char)(v33 - 48) + 10 * v35; + v33 = *++v16; + } + while ( (unsigned __int8)(v33 - 48) <= 9u ); + v68 = v35; + if ( v34 == -1 ) + { + if ( v35 > 4977 ) + { + v82 = 0; + v79 = v72; + v80 = 0; + v81 = 0; + __toe64(&v79, (int)a2); + if ( !v73 ) + return v67 + v16 - (char *)v75; + String2 = v16; + goto LABEL_93; + } + String2 = v16; + v68 = -v35; + } + else + { + if ( v68 > 4977 ) + { + v79 = 0LL; + v82 = 0; + v80 = 0; + v81 = 0; + if ( !v73 ) + goto LABEL_13; + WORD1(v79) = 0x7FFF; + LOWORD(v79) = v72; + __toe64(&v79, (int)a2); + String2 = v16; + goto LABEL_93; + } + String2 = v16; + } + } + } + else + { + v68 = 0; + } + } +LABEL_66: + v77 = v68 - (_DWORD)v71; + if ( v68 - (int)v71 > 0 ) + { + while ( 1 ) + { + v36 = WORD2(v79); + if ( WORD2(v79) ) + break; + v37 = 0; + v38 = &v86; + v86 = 0; + v83 = v79; + v84 = v80; + v85 = v81; + for ( k = 0; ; k = *v38 ) + { + if ( k < 0 ) + v37 |= 1u; + v40 = 2 * k; + if ( (v37 & 2) != 0 ) + v40 |= 1u; + --v38; + v37 *= 2; + v38[1] = v40; + if ( v38 == (__int16 *)((char *)&v83 + 2) ) + break; + } + v41 = 0; + v42 = &v86; + do + { + if ( *v42 < 0 ) + v41 |= 1u; + v43 = 2 * *v42; + if ( (v41 & 2) != 0 ) + v43 |= 1u; + --v42; + v41 *= 2; + v42[1] = v43; + } + while ( v42 != (__int16 *)((char *)&v83 + 2) ); + __eaddm((int)&v79, (int)&v83); + v44 = &v86; + do + { + if ( *v44 < 0 ) + v36 |= 1u; + v45 = 2 * *v44; + if ( (v36 & 2) != 0 ) + v45 |= 1u; + --v44; + v36 *= 2; + v44[1] = v45; + } + while ( v44 != (__int16 *)((char *)&v83 + 2) ); + if ( WORD2(v83) ) + break; + v46 = v77-- == 1; + v82 = 0; + v79 = v83; + v80 = v84; + v81 = v85; + if ( v46 ) + { + v47 = __enormlz(&v79); + if ( v47 > 80 ) + goto LABEL_108; + __emdnorm((int)&v79, v66, 0, 16462 - v47, 64, 80); + v74 = WORD1(v79); + goto LABEL_91; + } + } + v54 = __enormlz(&v79); + if ( v54 > 80 ) + goto LABEL_108; + __emdnorm((int)&v79, v66, 0, 16462 - v54, 64, 80); + v70 = 1; + v74 = WORD1(v79); + v71 = v87; +LABEL_101: + v55 = (char *)&unk_55A770; + v56 = 1; + v83 = (unsigned int)__eone; + v84 = 1073709056; + v57 = &v83; + v58 = v77; + do + { + while ( (v56 & v58) == 0 ) + { + v55 -= 12; + v56 *= 2; + if ( v55 == (char *)&unk_55A6D4 ) + goto LABEL_105; + } + v56 *= 2; + v63 = (int)v55; + v55 -= 12; + v77 = (int)v57; + __emul(v63, (int)v57, (int)v57); + v57 = (__int64 *)v77; + } + while ( v55 != (char *)&unk_55A6D4 ); +LABEL_105: + __emovi((int)v57, (int)v71); + if ( v70 == -1 ) + { + v60 = v74 - v88; + v77 = __edivm((int)v71, (int *)&v79); + v74 = v60 + 0x3FFF; + } + else + { + v59 = v74 + v88; + v77 = __emulm((int)v71, (int)&v79); + v74 = v59 - 16382; + } + goto LABEL_91; + } + v61 = __enormlz(&v79); + if ( v61 > 80 ) + { +LABEL_108: + v79 = 0LL; + v80 = 0; + v81 = 0; + v82 = 0; + } + else + { + __emdnorm((int)&v79, v66, 0, 16462 - v61, 64, 80); + v74 = WORD1(v79); + if ( v77 ) + { + if ( v77 < -4096 ) + { + v71 = v87; + __emovi((int)&__etens, (int)v87); + v62 = v74 - v88; + __edivm((int)v87, (int *)&v79); + v70 = -1; + v74 = v62 + 0x3FFF; + v77 = -4096 - v77; + } + else + { + v70 = -1; + v77 = (int)&v71[-v68]; + v71 = v87; + } + goto LABEL_101; + } +LABEL_91: + __emdnorm((int)&v79, v77, 0, v74, 64, 64); + } + LOWORD(v79) = v72; + __toe64(&v79, (int)a2); + if ( !v73 ) + goto LABEL_95; +LABEL_93: + v48 = *a2; + _FST7 = v48; + if ( v48 == 0.0 ) + goto LABEL_98; + __asm { fxam } + if ( (v49 & 0x4500) == 1280 ) +LABEL_98: + *_errno() = 34; +LABEL_95: + if ( !v76 ) + return v76; + v16 = String2; + return v67 + v16 - (char *)v75; +} +// 55A77C: using guessed type int __eone; + +//----- (00462A00) -------------------------------------------------------- +long double __cdecl strtold(const char *String, char **EndPtr) +{ + int v2; // eax + long double v4[2]; // [esp+14h] [ebp-18h] BYREF + + v4[0] = 0.0; + v2 = __asctoe64((char *)String, v4); + if ( EndPtr ) + *EndPtr = (char *)&String[v2]; + return v4[0]; +} +// 462A00: using guessed type long double var_18[2]; + +//----- (00462A50) -------------------------------------------------------- +unsigned __int64 __cdecl strtoull(const char *String, char **EndPtr, int Radix) +{ + const char *v3; // esi + int C; // ebx + char v5; // al + int v6; // edi + unsigned int v7; // eax + int v8; // eax + int v9; // edx + int v10; // ecx + int v11; // edi + char *v12; // ebp + int v13; // esi + int v14; // edi + unsigned int v15; // ebx + unsigned __int64 v16; // rax + int v17; // ebx + int *v18; // eax + int *v20; // eax + unsigned int v21; // [esp+24h] [ebp-28h] + int v22; // [esp+28h] [ebp-24h] + char v23; // [esp+2Fh] [ebp-1Dh] + + v3 = String; + if ( EndPtr ) + *EndPtr = (char *)String; + if ( Radix == 1 || (unsigned int)Radix > 0x24 ) + { + v18 = _errno(); + v9 = 0; + v10 = 0; + *v18 = 33; + return __PAIR64__(v10, v9); + } + while ( 1 ) + { + C = *v3; + if ( !isspace(C) ) + break; + ++v3; + } + v23 = C; + v5 = C; + if ( (((_BYTE)C - 43) & 0xFD) == 0 ) + v5 = *++v3; + if ( Radix ) + { + if ( Radix != 16 || v5 != 48 ) + { +LABEL_12: + v6 = v5; + v7 = v5 - 48; + if ( v7 <= 9 ) + { + v21 = Radix; + v11 = v7; + } + else if ( isupper(v6) ) + { + v11 = v6 - 55; + v21 = Radix; + } + else + { + v8 = islower(v6); + v9 = 0; + v10 = 0; + if ( !v8 ) + return __PAIR64__(v10, v9); + v11 = v6 - 87; + v21 = Radix; + } + goto LABEL_16; + } + if ( (v3[1] & 0xDF) == 88 ) + { +LABEL_36: + v5 = v3[2]; + Radix = 16; + v3 += 2; + goto LABEL_12; + } + v21 = 16; + } + else + { + Radix = 10; + if ( v5 != 48 ) + goto LABEL_12; + if ( (v3[1] & 0xDF) == 88 ) + goto LABEL_36; + v21 = 8; + Radix = 8; + } + v11 = 0; +LABEL_16: + v12 = (char *)(v3 + 1); + v9 = 0; + v10 = 0; + if ( v11 >= v21 ) + return __PAIR64__(v10, v9); + v13 = v11; + v22 = 0; + v14 = v11 >> 31; + while ( 1 ) + { + v17 = *v12; + if ( (unsigned int)(v17 - 48) <= 9 ) + { + v15 = v17 - 48; + goto LABEL_19; + } + if ( isupper(*v12) ) + { + v15 = v17 - 55; + goto LABEL_19; + } + if ( !islower(v17) ) + break; + v15 = v17 - 87; +LABEL_19: + if ( v15 >= v21 ) + break; + if ( 0xFFFFFFFFFFFFFFFFLL / Radix + 1 < __PAIR64__(v14, v13) + || (v16 = (int)v15 + Radix * __PAIR64__(v14, v13), v16 < __PAIR64__(v14, v13)) ) + { + v22 = 1; + } + else + { + v14 = HIDWORD(v16); + v13 = v16; + } + ++v12; + } + v9 = v13; + v10 = v14; + if ( EndPtr ) + *EndPtr = v12; + if ( v22 ) + { + v20 = _errno(); + v9 = -1; + v10 = -1; + *v20 = 34; + } + else if ( v23 == 45 ) + { + v10 = (unsigned __int64)-__SPAIR64__(v14, v13) >> 32; + v9 = -v13; + } + return __PAIR64__(v10, v9); +} + +//----- (00462D20) -------------------------------------------------------- +int __cdecl wctob(wint_t WCh) +{ + unsigned int CodePage; // eax + CHAR MultiByteStr; // [esp+29h] [ebp-13h] BYREF + WCHAR WideCharStr; // [esp+2Ah] [ebp-12h] BYREF + BOOL UsedDefaultChar; // [esp+2Ch] [ebp-10h] BYREF + + UsedDefaultChar = 0; + WideCharStr = WCh; + CodePage = ___lc_codepage_func(); + if ( !WideCharToMultiByte(CodePage, 0, &WideCharStr, 1, &MultiByteStr, 1, 0, &UsedDefaultChar) || UsedDefaultChar ) + return -1; + else + return MultiByteStr; +} + +//----- (00462DA0) -------------------------------------------------------- +wctype_t __cdecl wctype(const char *name) +{ + const char *Str2; // eax + int v2; // ebx + + Str2 = "alnum"; + v2 = 0; + while ( strcmp(name, Str2) ) + { + if ( ++v2 == 11 ) + return 0; + Str2 = (&cmap)[2 * v2]; + } + return word_55A804[4 * v2]; +} +// 55A800: using guessed type char *cmap; +// 55A804: using guessed type __int16 word_55A804[]; + +//----- (00462E00) -------------------------------------------------------- +int __cdecl fseeko64(FILE *Stream, fpos_t a2, int a3) +{ + int v4; // eax + fpos_t Position[4]; // [esp+18h] [ebp-24h] BYREF + + switch ( a3 ) + { + case 1: + if ( !fgetpos(Stream, Position) ) + { + Position[0] += a2; + return fsetpos(Stream, Position); + } + return -1; + case 2: + fflush(Stream); + v4 = _fileno(Stream); + Position[0] = _filelengthi64(v4) + a2; + return fsetpos(Stream, Position); + case 0: + Position[0] = a2; + return fsetpos(Stream, Position); + default: + *_errno() = 22; + return -1; + } +} + +//----- (00462EC0) -------------------------------------------------------- +fpos_t __cdecl ftello64(FILE *Stream) +{ + fpos_t Position[2]; // [esp+18h] [ebp-14h] BYREF + + if ( fgetpos(Stream, Position) ) + return -1LL; + else + return Position[0]; +} +// 462EC0: using guessed type fpos_t var_14[2]; + +//----- (00462F10) -------------------------------------------------------- +int __cdecl __mingw_vfprintf(FILE *Stream, char *a2, int *a3) +{ + int v3; // ebx + + _lock_file(Stream); + v3 = __mingw_pformat(24576, Stream, 0, a2, a3); + _unlock_file(Stream); + return v3; +} + +//----- (00462F60) -------------------------------------------------------- +int __cdecl __mingw_vsnprintf(FILE *a1, int a2, char *a3, int *a4) +{ + int v4; // eax + bool v5; // cc + int v6; // edx + int v7; // eax + + if ( !a2 ) + return __mingw_pformat(0, a1, 0, a3, a4); + v4 = __mingw_pformat(0, a1, a2 - 1, a3, a4); + v5 = a2 - 1 <= v4; + v6 = v4; + v7 = a2 - 1; + if ( !v5 ) + v7 = v6; + *((_BYTE *)&a1->_ptr + v7) = 0; + return v6; +} + +//----- (00462FE0) -------------------------------------------------------- +int __cdecl __mingw_vsprintf(FILE *a1, char *a2, int *a3) +{ + int result; // eax + + result = __mingw_pformat(0x4000, a1, 0, a2, a3); + *((_BYTE *)&a1->_ptr + result) = 0; + return result; +} + +//----- (00463020) -------------------------------------------------------- +int *__cdecl __increment_D2A(int *a1) +{ + int *v1; // ebx + int v2; // esi + int *v3; // eax + int *result; // eax + int *v5; // edi + + v1 = a1; + v2 = a1[4]; + v3 = a1 + 5; + do + { + if ( *v3 != -1 ) + { + ++*v3; + return a1; + } + *v3++ = 0; + } + while ( &a1[v2 + 5] > v3 ); + if ( v2 >= a1[2] ) + { + v5 = __Balloc_D2A(a1[1] + 1); + memcpy(v5 + 3, a1 + 3, 4 * a1[4] + 8); + v1 = v5; + __Bfree_D2A(a1); + v2 = v5[4]; + } + v1[4] = v2 + 1; + result = v1; + v1[v2 + 5] = 1; + return result; +} + +//----- (004630C0) -------------------------------------------------------- +int __usercall rvOK_constprop_0_isra_0@( + int *a1@, + int *a2@, + char *a3@, + double a4, + int a5, + int a6, + _DWORD *a7) +{ + int *v8; // eax + int v9; // ecx + int v10; // edi + int *Size; // ebx + int v12; // eax + int v13; // edx + int v14; // eax + unsigned int v15; // edx + int v16; // ebp + int v18; // eax + int v19; // esi + int v20; // eax + int v21; // eax + int v22; // edx + int *v23; // eax + int v26; // [esp+24h] [ebp-38h] + int v27; // [esp+28h] [ebp-34h] + int v28; // [esp+2Ch] [ebp-30h] + int v29; // [esp+2Ch] [ebp-30h] + int v30; // [esp+38h] [ebp-24h] BYREF + int v31[8]; // [esp+3Ch] [ebp-20h] BYREF + + v8 = __d2b_D2A(a4, v31, &v30); + v9 = v30; + v10 = *a1; + Size = v8; + v12 = v30 - *a1; + v13 = v12 + v31[0]; + v30 = v12; + v31[0] += v12; + if ( v12 <= 0 ) + { + if ( !a5 ) + { + v16 = 0; + goto LABEL_14; + } + v27 = 0; + v26 = 0; + if ( !v12 ) + goto LABEL_18; + Size = __lshift_D2A(Size, v10 - v9); + goto LABEL_37; + } + if ( v10 == 53 ) + { + v16 = 0; + if ( !a5 || a1[3] != 1 ) + goto LABEL_14; + v27 = __any_on_D2A((int)Size, v12); + if ( !v27 ) + { + __rshift_D2A((int)Size, v30); + v26 = 0; + v13 = v31[0]; + goto LABEL_18; + } + } + else + { + if ( a6 != 1 ) + { + if ( a6 == 2 ) + { + v27 = __any_on_D2A((int)Size, v12); + __rshift_D2A((int)Size, v30); +LABEL_6: + Size = __increment_D2A(Size); + v14 = v10 & 0x1F; + if ( (v10 & 0x1F) != 0 ) + v14 = 32 - v14; + _BitScanReverse(&v15, Size[Size[4] + 4]); + if ( (v15 ^ 0x1F) == v14 ) + { + v26 = 32; + v13 = v31[0]; + } + else + { + if ( !v27 ) + v27 = Size[5] & 1; + __rshift_D2A((int)Size, 1); + v26 = 32; + v13 = ++v31[0]; + } + goto LABEL_18; + } + if ( v12 == 1 ) + { + v16 = 0; + if ( !a5 ) + goto LABEL_14; + v22 = ((unsigned int)Size[5] >> 1) & 1; + } + else + { + v22 = ((unsigned int)Size[((v12 - 1) >> 5) + 5] >> (v12 - 1)) & 1; + } + v29 = v22; + v27 = __any_on_D2A((int)Size, v12); + v26 = v27 != 0 ? 0x10 : 0; + __rshift_D2A((int)Size, v30); + if ( v29 ) + goto LABEL_6; + goto LABEL_37; + } + v27 = __any_on_D2A((int)Size, v12); + if ( !v27 ) + { + __rshift_D2A((int)Size, v30); + v26 = 0; + goto LABEL_37; + } + } + __rshift_D2A((int)Size, v30); + v26 = 16; +LABEL_37: + v13 = v31[0]; +LABEL_18: + v18 = a1[1]; + if ( v18 <= v13 ) + { + v21 = a1[2]; + if ( v21 < v13 ) + { + v31[0] = v21 + 1; + *a7 = 163; + v26 = 0; + *_errno() = 34; + v13 = v31[0]; + Size[4] = 0; + } + goto LABEL_30; + } + v31[0] = a1[1]; + v28 = v18 - v13; + if ( v10 < v18 - v13 || (v16 = a1[4]) != 0 ) + { + Size[4] = 0; + v13 = v18; + v26 = 0; + *a7 = 80; +LABEL_30: + v16 = 1; + *a2 = v13; + __copybits_D2A(a3, v10, (size_t)Size); + *a7 |= v26; + goto LABEL_14; + } + if ( v28 - 1 > 0 && !v27 ) + v27 = __any_on_D2A((int)Size, v28 - 1); + if ( a5 | v27 ) + { + v19 = Size[((v28 - 1) >> 5) + 5] & (1 << (v28 - 1)); + __rshift_D2A((int)Size, v28); + *a7 = 2; + if ( v19 ) + { + v23 = __increment_D2A(Size); + v26 = 96; + v13 = v31[0]; + Size = v23; + } + else + { + v13 = v31[0]; + v20 = 80; + if ( !v27 ) + v20 = v26; + v26 = v20; + } + goto LABEL_30; + } +LABEL_14: + __Bfree_D2A(Size); + return v16; +} +// 4630C0: using guessed type int var_20[8]; + +//----- (004634A0) -------------------------------------------------------- +_DWORD *__cdecl __decrement_D2A(int a1) +{ + _DWORD *result; // eax + unsigned int v2; // ecx + + result = (_DWORD *)(a1 + 20); + v2 = a1 + 20 + 4 * *(_DWORD *)(a1 + 16); + while ( !*result ) + { + *result++ = -1; + if ( v2 <= (unsigned int)result ) + return result; + } + --*result; + return result; +} + +//----- (004634E0) -------------------------------------------------------- +int *__cdecl __set_ones_D2A(int *a1, int a2) +{ + int *v2; // ebx + int v3; // edi + int *v4; // edi + int v5; // eax + int v6; // eax + unsigned int v7; // eax + size_t Size; // ebp + unsigned int v10; // eax + size_t v11; // edx + + v2 = a1; + v3 = (a2 + 31) >> 5; + if ( a1[1] < v3 ) + { + __Bfree_D2A(a1); + v2 = __Balloc_D2A(v3); + } + v4 = v2 + 5; + v5 = a2 >> 5; + if ( (a2 & 0x1F) != 0 ) + { + v6 = v5 + 1; + v2[4] = v6; + v7 = (unsigned int)&v4[v6]; + if ( v7 > (unsigned int)v4 ) + { + Size = 4 * ((v7 - (unsigned int)v2 - 21) >> 2) + 4; + if ( (unsigned int)v2 + 21 > v7 ) + Size = 4; + v4 = (int *)((char *)v4 + Size); + memset(v2 + 5, 255, Size); + } + *(v4 - 1) = (unsigned int)*(v4 - 1) >> (32 - (a2 & 0x1F)); + return v2; + } + v2[4] = v5; + v10 = (unsigned int)&v4[v5]; + if ( (unsigned int)v4 >= v10 ) + return v2; + v11 = 4 * ((v10 - (unsigned int)v2 - 21) >> 2) + 4; + if ( v10 < (unsigned int)v2 + 21 ) + v11 = 4; + memset(v2 + 5, 255, v11); + return v2; +} + +//----- (004635D0) -------------------------------------------------------- +int __cdecl __strtodg(unsigned __int8 *a1, unsigned __int8 **a2, int *a3, int *a4, void *a5) +{ + char *decimal_point; // edi + unsigned __int8 *v6; // ebp + signed __int8 v7; // cl + int v8; // eax + int v9; // ebx + int v10; // edi + unsigned __int8 *v11; // edx + int result; // eax + unsigned __int8 *v13; // edi + size_t v14; // eax + unsigned __int8 *v15; // edx + unsigned __int8 *v16; // esi + int v17; // ecx + unsigned __int8 *v18; // edx + unsigned __int8 *v19; // esi + int v20; // esi + int v21; // edx + unsigned __int8 *v22; // eax + int v23; // eax + int v24; // eax + int v25; // esi + char *v26; // ebx + int v27; // esi + int v28; // edx + int v29; // ecx + int v30; // eax + int v31; // edi + long double v32; // fst7 + int v36; // eax + int v37; // eax + int v38; // ecx + char v39; // al + signed int v40; // esi + long double v41; // fst7 + int *v42; // eax + int v43; // esi + int v44; // edx + int v45; // eax + int v46; // edi + int v47; // edi + int v48; // edx + int v49; // edi + int v50; // edi + int v51; // eax + int *v52; // eax + int v53; // edx + int *v54; // ebx + int v55; // eax + int *v56; // edi + int v57; // esi + int v58; // ebp + int v59; // ebx + int v60; // eax + int v61; // ebx + int v62; // esi + int v63; // edx + int v64; // esi + int v65; // ebp + bool v66; // cc + int v67; // eax + int *v68; // eax + int *v69; // ebp + int v70; // ebx + int v71; // eax + int v72; // eax + int v73; // eax + int *v74; // edx + int *v75; // ebx + _DWORD *v76; // esi + int *v77; // eax + int v78; // edx + unsigned int v79; // ecx + long double v80; // fst7 + long double v81; // fst5 + int v82; // eax + unsigned __int8 *v83; // edx + int v84; // esi + int v85; // esi + int v86; // edi + int v87; // edx + int v88; // esi + int v89; // ecx + int v90; // ecx + int v91; // edx + char v92; // dl + int v93; // eax + long double v94; // fst6 + int v95; // edx + int v96; // ecx + int v97; // edi + int v98; // esi + int v99; // esi + int v100; // ecx + long double v101; // fst6 + char v102; // cl + int v103; // eax + int v104; // ecx + int *v105; // eax + long double v106; // fst7 + int *v107; // eax + int v108; // edx + unsigned int v109; // ecx + bool v110; // zf + int *v111; // eax + long double v112; // fst6 + long double v113; // fst5 + long double v114; // fst6 + int v115; // ebx + int *v116; // eax + int *v117; // esi + int v120; // eax + int v121; // edx + size_t v122; // esi + _DWORD *v123; // eax + int v124; // eax + int v125; // edi + int v126; // ebx + int v127; // esi + int v128; // ecx + int v129; // edx + unsigned int v130; // edi + size_t v131; // edx + int v133; // eax + size_t v134; // eax + int v135; // ecx + double Str; // [esp+0h] [ebp-CCh] + int Size; // [esp+8h] [ebp-C4h] + int v138; // [esp+Ch] [ebp-C0h] + int v139; // [esp+20h] [ebp-ACh] + double v140; // [esp+20h] [ebp-ACh] + int *v141; // [esp+20h] [ebp-ACh] + int v142; // [esp+2Ch] [ebp-A0h] + void *v143; // [esp+2Ch] [ebp-A0h] + int *v144; // [esp+2Ch] [ebp-A0h] + int Val; // [esp+30h] [ebp-9Ch] + char *v146; // [esp+34h] [ebp-98h] + int v147; // [esp+34h] [ebp-98h] + int v148; // [esp+34h] [ebp-98h] + int v149; // [esp+34h] [ebp-98h] + int v150; // [esp+38h] [ebp-94h] + int v151; // [esp+38h] [ebp-94h] + unsigned __int8 *v152; // [esp+38h] [ebp-94h] + int v153; // [esp+40h] [ebp-8Ch] + int v154; // [esp+40h] [ebp-8Ch] + double v155; // [esp+40h] [ebp-8Ch] + int v156; // [esp+48h] [ebp-84h] + int v157; // [esp+48h] [ebp-84h] + int v158; // [esp+4Ch] [ebp-80h] + unsigned __int8 *v159; // [esp+4Ch] [ebp-80h] + int v160; // [esp+4Ch] [ebp-80h] + int *v161; // [esp+4Ch] [ebp-80h] + BOOL v162; // [esp+4Ch] [ebp-80h] + int v163; // [esp+4Ch] [ebp-80h] + int v164; // [esp+50h] [ebp-7Ch] + double v165; // [esp+50h] [ebp-7Ch] + int v166; // [esp+50h] [ebp-7Ch] + unsigned __int8 *i; // [esp+58h] [ebp-74h] + int v168; // [esp+58h] [ebp-74h] + int v169; // [esp+5Ch] [ebp-70h] + int v170; // [esp+5Ch] [ebp-70h] + int v171; // [esp+60h] [ebp-6Ch] + int v172; // [esp+64h] [ebp-68h] + int v173; // [esp+68h] [ebp-64h] + int v174; // [esp+6Ch] [ebp-60h] + int v175; // [esp+70h] [ebp-5Ch] + int *v176; // [esp+74h] [ebp-58h] + int v177; // [esp+78h] [ebp-54h] + void *Src; // [esp+7Ch] [ebp-50h] + int v179; // [esp+80h] [ebp-4Ch] + int v180; // [esp+84h] [ebp-48h] + int v181; // [esp+88h] [ebp-44h] + int v182; // [esp+94h] [ebp-38h] BYREF + int v183; // [esp+98h] [ebp-34h] BYREF + int v184; // [esp+9Ch] [ebp-30h] BYREF + int v185; // [esp+A0h] [ebp-2Ch] BYREF + int v186; // [esp+A4h] [ebp-28h] BYREF + unsigned __int8 *v187; // [esp+A8h] [ebp-24h] BYREF + size_t v188; // [esp+ACh] [ebp-20h] BYREF + + decimal_point = localeconv()->decimal_point; + v184 = 0; + v153 = strlen(decimal_point); + v188 = 0; + Val = *a3; + v187 = a1; + v6 = a1; + while ( 2 ) + { + v7 = *v6; + switch ( *v6 ) + { + case 0u: + goto LABEL_12; + case 9u: + case 0xAu: + case 0xBu: + case 0xCu: + case 0xDu: + case 0x20u: + v187 = ++v6; + continue; + case 0x2Bu: + v173 = 0; + goto LABEL_225; + case 0x2Du: + v173 = 1; +LABEL_225: + v187 = v6 + 1; + v7 = v6[1]; + if ( v7 ) + { + ++v6; +LABEL_4: + v139 = 0; + if ( v7 == 48 ) + { + v22 = v6 + 1; + if ( (v6[1] & 0xDF) == 88 ) + { + v184 = __gethex_D2A(&v187, a3, a4, (int **)&v188, v173); + if ( v184 != 6 ) + goto LABEL_79; + v187 = a1; + v14 = v188; + if ( a2 ) + *a2 = a1; + goto LABEL_35; + } + do + { + v187 = v22; + v6 = v22; + v7 = *v22++; + } + while ( v7 == 48 ); + v14 = 0; + if ( !v7 ) + goto LABEL_31; + v139 = 1; + } + v180 = a3[4]; + v8 = v7; + if ( (unsigned int)(v7 - 48) > 9 ) + { + v142 = 0; + v11 = v6; + v9 = 0; + v156 = 0; + } + else + { + v146 = decimal_point; + v9 = 0; + v142 = 0; + v10 = 0; + do + { + if ( v9 <= 8 ) + { + v10 = v8 + 10 * v10 - 48; + } + else if ( v9 <= 15 ) + { + v142 = v8 + 10 * v142 - 48; + } + v11 = &v6[++v9]; + v187 = &v6[v9]; + v8 = (char)v6[v9]; + v7 = v6[v9]; + } + while ( (unsigned int)(v8 - 48) <= 9 ); + v156 = v10; + decimal_point = v146; + } + if ( *decimal_point == v7 ) + { + if ( !decimal_point[1] ) + { + v82 = 1; +LABEL_182: + v83 = &v11[v82]; + v187 = v83; + v8 = (char)*v83; + if ( v9 ) + { + v84 = v8 - 48; + v147 = v9; + v13 = 0; + for ( i = 0; (unsigned int)(v8 - 48) <= 9; v84 = v8 - 48 ) + { + v163 = v84; + ++v13; + v152 = v187; + if ( v84 ) + { + i = &i[(_DWORD)v13]; + v124 = v147 + 1; + if ( v13 == (unsigned __int8 *)1 ) + { + v128 = v147++; + } + else + { + v125 = (int)&v13[v147]; + v166 = v9; + v170 = v84; + v126 = v147; + v127 = v142; + v128 = v125 - 1; + v147 = v125; + v129 = v156; + while ( 1 ) + { + v130 = v126; + v126 = v124; + if ( v130 <= 8 ) + { + v129 *= 10; + } + else if ( v124 <= 16 ) + { + v127 *= 10; + } + if ( v124 == v128 ) + break; + ++v124; + } + v156 = v129; + v9 = v166; + v142 = v127; + v84 = v170; + } + if ( v128 <= 8 ) + { +LABEL_223: + v13 = 0; + v156 = v163 + 10 * v156; + } + else + { + v13 = 0; + if ( v147 <= 16 ) + v142 = v84 + 10 * v142; + } + } + v187 = v152 + 1; + v8 = (char)v152[1]; + } + } + else + { + if ( v8 == 48 ) + { + v104 = 1 - (_DWORD)v83; + do + { + v13 = &v83[v104]; + v187 = ++v83; + v8 = (char)*v83; + } + while ( v8 == 48 ); + } + else + { + v13 = 0; + } + if ( (unsigned int)(v8 - 49) <= 8 ) + { + v6 = v187; + v147 = 1; + v163 = v8 - 48; + v152 = v187; + i = v13 + 1; + goto LABEL_223; + } + i = 0; + v147 = 0; + } + v150 = 1; +LABEL_20: + if ( (v8 & 0xFFFFFFDF) != 69 ) + { + v158 = 0; + goto LABEL_22; + } + if ( !(v139 | (unsigned int)v13 | v147) ) + goto LABEL_30; + a1 = v187++; + v8 = (char)a1[1]; + if ( (_BYTE)v8 == 43 ) + { + v164 = 0; + } + else + { + if ( (_BYTE)v8 != 45 ) + { + v164 = 0; + goto LABEL_41; + } + v164 = 1; + } + v187 = a1 + 2; + v8 = (char)a1[2]; +LABEL_41: + if ( (unsigned int)(v8 - 48) > 9 ) + { + v158 = 0; + v187 = a1; + } + else + { + if ( v8 == 48 ) + { + v15 = v187 + 1; + do + { + v187 = v15; + v8 = (char)*v15++; + } + while ( v8 == 48 ); + } + v158 = 0; + if ( (unsigned int)(v8 - 49) <= 8 ) + { + v16 = v187; + v17 = v8 - 48; + v159 = v187++; + v8 = (char)v159[1]; + if ( (unsigned int)(v8 - 48) > 9 ) + goto LABEL_289; + v18 = v16 + 2; + do + { + v187 = v18; + v19 = v18++; + v17 = v8 + 10 * v17 - 48; + v8 = (char)*(v18 - 1); + } + while ( (unsigned int)(v8 - 48) <= 9 ); + v20 = v19 - v159; + v160 = 19999; + if ( v20 <= 8 ) + { +LABEL_289: + v121 = 19999; + if ( v17 <= 19999 ) + v121 = v17; + v160 = v121; + } + v21 = -v160; + if ( !v164 ) + v21 = v160; + v158 = v21; + } + } +LABEL_22: + if ( !v147 ) + { + if ( (unsigned int)v13 | v139 ) + goto LABEL_79; + if ( v150 ) + goto LABEL_30; + if ( v8 != 105 ) + { + if ( v8 > 105 ) + { + if ( v8 != 110 ) + goto LABEL_30; +LABEL_29: + if ( !__match_D2A((char **)&v187, "an") ) + goto LABEL_30; + v184 = 4; + *a4 = a3[2] + 1; + if ( *v187 != 40 ) + goto LABEL_79; + v184 = __hexnan_D2A(&v187, a3, (int *)a5); +LABEL_233: + *a4 = a3[2] + 1; + v14 = v188; + goto LABEL_31; + } + if ( v8 != 73 ) + { + if ( v8 != 78 ) + { +LABEL_30: + v184 = 6; + v187 = a1; + v14 = v188; + goto LABEL_31; + } + goto LABEL_29; + } + } + if ( !__match_D2A((char **)&v187, "nf") ) + goto LABEL_30; + --v187; + if ( !__match_D2A((char **)&v187, "inity") ) + ++v187; + v184 = 3; + goto LABEL_233; + } + v184 = 1; + v175 = v158 - (_DWORD)i; + v30 = a3[3] & 3; + v172 = v30 - v173; + if ( v30 != 2 ) + { + v172 = v173 + 1; + if ( v30 != 3 ) + v172 = v30 == 0; + } + v31 = 16; + v32 = (long double)(unsigned int)v156; + if ( !v9 ) + v9 = v147; + if ( v147 <= 16 ) + v31 = v147; + v140 = v32; + if ( v147 > 9 ) + v140 = v32 * dbl_55ABB8[v31] + (long double)(unsigned int)v142; + if ( Val > 53 || v147 > 15 ) + { + v37 = v158 - (_DWORD)i; + goto LABEL_106; + } + if ( !v175 ) + { + v36 = rvOK_constprop_0_isra_0(a3, a4, (char *)a5, v140, 1, v172, &v184); + goto LABEL_98; + } + if ( v175 <= 0 ) + { + v37 = v158 - (_DWORD)i; + if ( v175 < -22 ) + goto LABEL_106; + Str = v140 / __tens_D2A[(_DWORD)&i[-v158]]; + } + else + { + if ( v175 <= 22 ) + { + _EDX = LODWORD(v140); + if ( LODWORD(v140) ) + { + __asm { tzcnt ecx, edx } + v143 = (void *)(53 - _ECX); + } + else + { + _ECX = HIDWORD(v140) | 0x100000; + __asm { tzcnt ecx, ecx } + v143 = (void *)(21 - _ECX); + } + v138 = v172; + Size = (int)v143 + fivesbits[v175] <= 53; + Str = v140 * __tens_D2A[v175]; + v140 = Str; + goto LABEL_97; + } + v40 = v175 + v147 - v31; + if ( 37 - v147 < v175 ) + goto LABEL_107; + Str = v140 * __tens_D2A[15 - v147] * __tens_D2A[v175 - (15 - v147)]; + } + Size = 0; + v140 = Str; + v138 = v172; +LABEL_97: + v36 = rvOK_constprop_0_isra_0(a3, a4, (char *)a5, Str, Size, v138, &v184); +LABEL_98: + if ( v36 ) + goto LABEL_79; + v37 = 0; +LABEL_106: + v40 = v37 + v147 - v31; + if ( v40 <= 0 ) + { + if ( v40 ) + { + v85 = -v40; + if ( (v85 & 0xF) != 0 ) + v140 = v140 / __tens_D2A[v85 & 0xF]; + v40 = v85 & 0xFFFFFFF0; + if ( v40 ) + { + v86 = v40 >> 4; + if ( v40 <= 255 ) + { + v90 = 0; + } + else + { + v87 = v40 >> 4; + v88 = 0; + do + { + v87 -= 16; + v89 = HIDWORD(v140) >> 20; + HIDWORD(v140) = HIDWORD(v140) & 0x800FFFFF | 0x3FF00000; + v90 = v88 + (v89 & 0x7FF) - 1023; + v88 = v90; + v140 = v140 * 1.0e-256; + } + while ( v87 > 15 ); + v86 &= 0xFu; + } + v91 = (HIDWORD(v140) >> 20) & 0x7FF; + HIDWORD(v140) = HIDWORD(v140) & 0x800FFFFF | 0x3FF00000; + v40 = v90 + v91 - 1023; + if ( v86 ) + { + v92 = 0; + v93 = 0; + v94 = v140; + do + { + if ( (v86 & 1) != 0 ) + { + v94 = v94 * __tinytens_D2A[v93]; + v92 = 1; + } + ++v93; + v86 >>= 1; + } + while ( v86 ); + if ( !v92 ) + v94 = v140; + v41 = v94; + goto LABEL_111; + } + } + } + goto LABEL_110; + } +LABEL_107: + if ( (v40 & 0xF) != 0 ) + v140 = v140 * __tens_D2A[v40 & 0xF]; + v40 &= 0xFFFFFFF0; + if ( v40 ) + { + v95 = v40 >> 4; + if ( v40 <= 255 ) + { + v99 = 0; + } + else + { + v96 = v40 >> 4; + v97 = 0; + do + { + v96 -= 16; + v98 = HIDWORD(v140) >> 20; + HIDWORD(v140) = HIDWORD(v140) & 0x800FFFFF | 0x3FF00000; + v99 = v97 + (v98 & 0x7FF) - 1023; + v97 = v99; + v140 = v140 * 1.0e256; + } + while ( v96 > 15 ); + v95 &= 0xFu; + } + v100 = (HIDWORD(v140) >> 20) & 0x7FF; + HIDWORD(v140) = HIDWORD(v140) & 0x800FFFFF | 0x3FF00000; + v41 = v140; + v40 = v99 + v100 - 1023; + if ( v95 ) + { + v101 = v140; + v102 = 0; + v103 = 0; + do + { + if ( (v95 & 1) != 0 ) + { + v101 = v101 * __bigtens_D2A[v103]; + v102 = 1; + } + ++v103; + v95 >>= 1; + } + while ( v95 ); + if ( !v102 ) + v101 = v140; + v41 = v101; + } + goto LABEL_111; + } +LABEL_110: + v41 = v140; +LABEL_111: + v42 = __d2b_D2A(v41, &v186, &v185); + v43 = v186 + v40; + v188 = (size_t)v42; + v44 = (int)v42; + v45 = v185; + v186 = v43; + v46 = v185 - Val; + if ( v185 - Val > 0 ) + { + __rshift_D2A(v44, v185 - Val); + v45 = Val; + v186 += v46; + v43 = v186; + v185 = Val; + } + v47 = v45 + v43 - Val; + v181 = v47; + if ( a3[2] + 1 < v47 ) + { + v151 = 0; + goto LABEL_264; + } + v48 = a3[1]; + v171 = v48; + if ( v47 >= v48 ) + { + v151 = 0; + } + else + { + v49 = v43 - v48; + if ( v43 - v48 > 0 ) + { + v105 = __lshift_D2A((int *)v188, v43 - v48); + v185 += v49; + v188 = (size_t)v105; + } + else if ( v43 != v48 ) + { + v50 = v45 + v49; + v14 = v188; + v185 = v50; + if ( v50 > 0 ) + { + __rshift_D2A(v188, v48 - v43); + } + else + { + if ( v50 < -1 ) + { + *(_DWORD *)(v188 + 16) = 0; + *(_DWORD *)(v14 + 20) = 0; + *a4 = v48; + if ( !v180 ) + { + v29 = 80; + goto LABEL_78; + } + goto LABEL_260; + } + v185 = 1; + *(_DWORD *)(v188 + 16) = 1; + *(_DWORD *)(v14 + 20) = 1; + } + } + v186 = v171; + if ( v180 ) + { + v51 = v181; + v151 = 1; + v181 = v171; + if ( v51 + 1 < v171 ) + { + v14 = v188; + *(_DWORD *)(v188 + 16) = 0; + *(_DWORD *)(v14 + 20) = 0; + *a4 = v171; + goto LABEL_260; + } + } + else + { + v151 = 1; + v181 = v171; + } + } + v52 = __s2b_D2A((int)v6, v9, v147, v156, v153); + v53 = 0; + v149 = 0; + v54 = v52; + v176 = v52; + v55 = (int)&i[-v158]; + if ( v175 >= 0 ) + v55 = 0; + if ( v175 >= 0 ) + v53 = v158 - (_DWORD)i; + v157 = v55; + Src = v54 + 3; + v174 = v53; + v177 = Val + 1; + while ( 1 ) + { + v144 = __Balloc_D2A(v176[1]); + memcpy(v144 + 3, Src, 4 * v176[4] + 8); + v56 = __Balloc_D2A(*(_DWORD *)(v188 + 4)); + memcpy(v56 + 3, (const void *)(v188 + 12), 4 * *(_DWORD *)(v188 + 16) + 8); + v57 = v185; + v58 = v186; + v59 = v186 + v149; + v154 = v185 - v149; + v141 = __i2b_D2A(1); + if ( v59 < 0 ) + { + v60 = v174 - v59; + v61 = v157; + } + else + { + v60 = v174; + v61 = v157 + v59; + } + v62 = v58 + v57 - Val; + v63 = v177 - v154; + if ( v171 > v62 ) + v63 = v177 - v154 + v62 - v171; + v64 = v61 + v63; + v65 = v60 + v63; + v66 = v61 + v63 <= v60 + v63; + v67 = v60 + v63; + if ( v66 ) + v67 = v61 + v63; + if ( v61 <= v67 ) + v67 = v61; + if ( v67 > 0 ) + { + v64 -= v67; + v65 -= v67; + v61 -= v67; + } + if ( v157 > 0 ) + { + v141 = __pow5mult_D2A(v141, v157); + v161 = __mult_D2A((int)v141, (int)v56); + __Bfree_D2A(v56); + v56 = v161; + } + if ( v64 - v149 > 0 ) + { + v56 = __lshift_D2A(v56, v64 - v149); + } + else if ( v64 != v149 ) + { + __rshift_D2A((int)v56, v149 - v64); + } + if ( v175 > 0 ) + v144 = __pow5mult_D2A(v144, v174); + if ( v65 > 0 ) + v144 = __lshift_D2A(v144, v65); + if ( v61 > 0 ) + v141 = __lshift_D2A(v141, v61); + v68 = __diff_D2A((int)v56, (int)v144); + v69 = v68; + if ( v68[4] <= 1 && !v68[5] ) + goto LABEL_62; + v70 = v68[3]; + v68[3] = 0; + v71 = __cmp_D2A((int)v68, (int)v141); + if ( v172 && v71 <= 0 ) + { + v72 = v172 & 1; + v149 = v70 ^ v72; + if ( v72 == v70 ) + { + v184 = v72 == 0 ? 33 : 17; + goto LABEL_62; + } + if ( v70 ) + { + v184 = 33; + v155 = 1.0; + v168 = 0; + v165 = 1.0; + v179 = 32; + v162 = 0; + goto LABEL_162; + } + v184 = 17; + if ( v181 != v171 ) + { + v73 = Val; + v74 = (int *)v188; + if ( Val > 31 ) + { + while ( !*(_DWORD *)(v188 + 4 * v70 + 20) ) + { + v73 -= 32; + ++v70; + if ( v73 <= 31 ) + goto LABEL_266; + } + } + else + { + v73 = Val; +LABEL_266: + if ( v73 <= 1 ) + goto LABEL_268; + v117 = (int *)(v188 + 4 * v70 + 20); + _EBX = *v117; + __asm { tzcnt ecx, ebx } + *v117 = (unsigned int)*v117 >> _ECX; + if ( v73 - 1 <= _ECX ) + { +LABEL_268: + v186 = v181 - 1; + v185 = Val; + v188 = (size_t)__set_ones_D2A(v74, Val); + goto LABEL_62; + } + } + } + } + else + { + if ( v71 < 0 ) + { + if ( v70 ) + { + v184 = 17; + goto LABEL_62; + } + v184 = 33; + if ( v154 > 1 || v181 == v171 || (v151 & 1) != 0 ) + { +LABEL_62: + if ( v151 ) + goto LABEL_63; + goto LABEL_277; + } + v69 = __lshift_D2A(v69, 1); + if ( __cmp_D2A((int)v69, (int)v141) <= 0 ) + goto LABEL_277; + v184 = 17; + v151 = 0; +LABEL_303: + v186 -= Val; + v185 = Val; + v188 = (size_t)__set_ones_D2A((int *)v188, Val); + goto LABEL_62; + } + if ( !v71 ) + { + if ( v70 ) + { + if ( !v151 ) + goto LABEL_344; + v122 = v188; + v123 = (_DWORD *)(v188 + 20); + while ( v188 + 20 + 4 * (v185 >> 5) > (unsigned int)v123 ) + { + if ( *v123++ != -1 ) + goto LABEL_344; + } + if ( (v185 & 0x1F) != 0 && (*v123 | (-1 << (v185 & 0x1F))) != -1 ) + { +LABEL_344: + v184 = 17; + goto LABEL_335; + } + *(_DWORD *)(v188 + 16) = 1; + *(_DWORD *)(v122 + 20) = 1; + v185 = 1; + v186 = Val + v171 - 1; + v120 = v151; + v184 = 33; +LABEL_278: + v151 = Val - v120; + if ( Val != v120 ) + { + if ( Val - v120 <= 0 ) + __rshift_D2A(v188, v120 - Val); + else + v188 = (size_t)__lshift_D2A((int *)v188, v151); + v23 = v186 - v151; + v151 = 0; + v186 = v23; +LABEL_64: + *a4 = v23; + __Bfree_D2A(v56); + __Bfree_D2A(v144); + __Bfree_D2A(v141); + __Bfree_D2A(v176); + __Bfree_D2A(v69); + if ( a3[2] >= v186 ) + goto LABEL_265; + v24 = a3[3] & 3; + switch ( v24 ) + { + case 2: + if ( !v173 ) + goto LABEL_264; + break; + case 3: + if ( v173 ) + goto LABEL_264; + break; + case 1: +LABEL_264: + v184 = 163; + *(_DWORD *)(v188 + 16) = 0; + *_errno() = 34; + *a4 = a3[2] + 1; +LABEL_265: + v14 = v188; +LABEL_73: + if ( !v151 ) + goto LABEL_31; + if ( !v180 ) + { + v28 = v184 & 0x30; + v29 = v184 & 0xFFFFFFF8; + if ( *(int *)(v14 + 16) > 0 ) + v29 |= 2u; + v184 = v29; + if ( v28 ) + { +LABEL_78: + v184 = v29 | 0x40; + *_errno() = 34; + } +LABEL_79: + v14 = v188; +LABEL_31: + if ( a2 ) + *a2 = v187; + if ( v173 ) + v184 |= 8u; +LABEL_35: + if ( v14 ) + { + __copybits_D2A((char *)a5, Val, v14); + __Bfree_D2A((void *)v188); + } + return v184; + } +LABEL_260: + *(_DWORD *)(v14 + 16) = 0; + v184 = 80; + *_errno() = 34; + v14 = v188; + goto LABEL_31; + default: + break; + } + __Bfree_D2A((void *)v188); + v188 = 0; + v184 = 17; + *a4 = a3[2]; + v25 = *a3; + v26 = (char *)a5 + 4 * ((*a3 + 31) >> 5); + if ( a5 < v26 ) + memset(a5, 255, 4 * ((unsigned int)&v26[~(unsigned int)a5] >> 2) + 4); + v27 = v25 & 0x1F; + if ( v27 ) + *((_DWORD *)v26 - 1) >>= 32 - v27; + v14 = 0; + goto LABEL_73; + } +LABEL_63: + v23 = v186; + goto LABEL_64; + } + if ( v154 != 1 ) + { + v184 = 33; +LABEL_335: + if ( Val <= v154 || (v151 & 1) != 0 ) + { + v131 = v188; + if ( (*(_BYTE *)(v188 + 20) & 1) != 0 ) + { + if ( v70 ) + { + v134 = (size_t)__increment_D2A((int *)v188); + v135 = *(_DWORD *)(v134 + 16); + v188 = v134; + _BitScanReverse(&v134, *(_DWORD *)(v134 + 4 * v135 + 16)); + if ( (-v185 & 0x1F) != (v134 ^ 0x1F) ) + ++v185; + v184 = 33; + } + else if ( v154 == 1 ) + { +LABEL_330: + *(_DWORD *)(v131 + 16) = 0; + v184 = 80; + v186 = v171; + } + else + { + __decrement_D2A(v188); + v184 = 17; + } + } + goto LABEL_62; + } +LABEL_277: + v120 = v185; + goto LABEL_278; + } + v184 = 1; + if ( v181 == v171 ) + { + v184 = 33; + if ( *(_DWORD *)(v188 + 16) == 1 ) + { + v133 = 1; + if ( *(_DWORD *)(v188 + 20) != 1 ) + v133 = v180; + v180 = v133; + } + goto LABEL_62; + } + goto LABEL_303; + } + v106 = __ratio_D2A((int)v69, (int)v141); + if ( v106 > 2.0 ) + { + v112 = v106 * 0.5; + v179 = v70 == 0 ? 32 : 16; + v162 = v70 == 0; + v165 = v112; + if ( v112 >= 2147483647.0 ) + { + v168 = 0; + v155 = v112; + goto LABEL_257; + } + v168 = (int)v112; + v113 = (long double)(int)v112; + v155 = v113; + v114 = v112 - v113; + v165 = v114; + if ( v172 == 1 ) + { + if ( v70 ) + goto LABEL_257; + } + else + { + if ( v172 != 2 ) + { + if ( v114 < 0.5 ) + { +LABEL_257: + v149 = 0; + goto LABEL_162; + } +LABEL_274: + ++v168; + v179 = 48 - v179; + v155 = (double)v168; + goto LABEL_257; + } + if ( !v70 ) + goto LABEL_257; + } + if ( v165 <= 0.0 ) + goto LABEL_257; + goto LABEL_274; + } + if ( v70 ) + { + v168 = 0; + v155 = 1.0; + v179 = 32; + v165 = 1.0; + v149 = 0; + v162 = 0; + goto LABEL_162; + } + v149 = 0; + } + if ( v154 <= 1 && (v151 & 1) != 0 ) + { + v151 = 1; + v131 = v188; + goto LABEL_330; + } + v168 = 0; + v155 = 1.0; + v179 = 16; + v165 = 1.0; + v162 = 1; +LABEL_162: + v169 = v185 + v186; + if ( v185 < Val && (v151 & 1) == 0 ) + { + v115 = Val - v185; + v116 = __lshift_D2A((int *)v188, Val - v185); + v186 -= v115; + v188 = (size_t)v116; + v185 = Val; + } + v75 = __d2b_D2A(v155, &v182, &v183); + if ( v182 < 0 ) + { + __rshift_D2A((int)v75, -v182); + } + else if ( v182 ) + { + v75 = __lshift_D2A(v75, v182); + } + v76 = (_DWORD *)v188; + if ( v162 ) + { + v77 = __diff_D2A(v188, (int)v75); + v188 = (size_t)v77; + if ( !v151 ) + { + v78 = v76[4]; + if ( v77[4] <= v78 - 1 + || (_BitScanReverse(&v79, v77[v78 + 4]), + _BitScanReverse((unsigned int *)&v78, v76[v78 + 4]), + (v78 ^ 0x1F) < (int)(v79 ^ 0x1F)) ) + { + if ( v181 != v171 ) + { + v111 = __lshift_D2A(v77, 1); + --v186; + --v181; + v188 = (size_t)v111; + __Bfree_D2A(v75); + __Bfree_D2A(v76); +LABEL_251: + v151 = 0; + v149 = __trailz_D2A(v188); + goto LABEL_180; + } + --v185; + v151 = v162; + } + } + } + else + { + v107 = __sum_D2A((int *)v188, v75); + v108 = v107[4]; + v188 = (size_t)v107; + if ( v76[4] <= v108 - 1 + || (_BitScanReverse(&v109, v107[v108 + 4]), + _BitScanReverse((unsigned int *)&v108, v76[v108 + 4]), + (v108 ^ 0x1F) > (int)(v109 ^ 0x1F)) ) + { + if ( v151 ) + { + v110 = ++v185 == Val; + v151 = !v110; + } + else + { + __rshift_D2A((int)v107, 1); + ++v186; + ++v181; + v168 = 0; + } + } + } + __Bfree_D2A(v75); + __Bfree_D2A(v76); + if ( v149 ) + goto LABEL_62; + if ( v186 + v185 == v169 && v168 ) + { + v80 = v155 * 5.0e-16; + v81 = v165 - 0.5; + if ( -v80 <= v81 ) + { + if ( v81 > v80 && 1.0 - v80 > v165 ) + { +LABEL_61: + v184 |= v179; + goto LABEL_62; + } + } + else if ( v165 > v80 ) + { + goto LABEL_61; + } + } + if ( !v151 ) + goto LABEL_251; +LABEL_180: + __Bfree_D2A(v56); + __Bfree_D2A(v144); + __Bfree_D2A(v141); + __Bfree_D2A(v69); + } + } + v148 = v8; + v38 = 1; + v39 = decimal_point[1]; + while ( v11[v38] == v39 ) + { + v39 = decimal_point[++v38]; + if ( !v39 ) + { + v82 = v38; + goto LABEL_182; + } + } + v8 = v148; + } + v147 = v9; + v13 = 0; + i = 0; + v150 = 0; + goto LABEL_20; + } +LABEL_12: + result = 6; + v184 = 6; + if ( !a2 ) + return result; + *a2 = a1; + return v184; + default: + v173 = 0; + goto LABEL_4; + } + } +} +// 55A940: using guessed type int fivesbits[23]; +// 55ABB8: using guessed type double dbl_55ABB8[4]; +// 55AC00: using guessed type double __tens_D2A[24]; +// 55ACC0: using guessed type double __tinytens_D2A[4]; +// 55AD00: using guessed type double __bigtens_D2A[4]; + +//----- (004651A0) -------------------------------------------------------- +int *__cdecl __sum_D2A(int *a1, int *a2) +{ + int *v2; // esi + int *v3; // ebx + unsigned int *v4; // ebp + int *v5; // eax + int v6; // edi + int *v7; // ecx + unsigned int *v8; // edi + unsigned int v9; // esi + unsigned int v10; // eax + unsigned int v11; // ebx + unsigned int v12; // edx + unsigned int v13; // eax + unsigned int v14; // edx + unsigned int v15; // edi + unsigned int *v16; // ebx + char *i; // edx + unsigned int v18; // ecx + unsigned int v19; // eax + unsigned int v20; // ecx + int *v22; // ebx + unsigned int v23; // [esp+18h] [ebp-34h] + int *v24; // [esp+1Ch] [ebp-30h] + int v25; // [esp+20h] [ebp-2Ch] + int v26; // [esp+24h] [ebp-28h] + int *v27; // [esp+28h] [ebp-24h] + int *v28; // [esp+2Ch] [ebp-20h] + + v2 = a2; + v3 = a1; + if ( a1[4] < a2[4] ) + { + v3 = a2; + v2 = a1; + } + v4 = (unsigned int *)(v3 + 5); + v5 = __Balloc_D2A(v3[1]); + v6 = v3[4]; + v27 = v3 + 5; + v7 = v5 + 5; + v24 = v5; + v5[4] = v6; + v28 = v5 + 5; + v26 = v2[4]; + v23 = (unsigned int)&v5[v26 + 5]; + v25 = v6; + v8 = (unsigned int *)(v2 + 5); + v9 = 0; + do + { + v10 = *v4; + v11 = *v8; + ++v4; + ++v8; + ++v7; + v12 = v9 + (unsigned __int16)v10 + (unsigned __int16)v11; + *((_WORD *)v7 - 2) = v12; + v13 = HIWORD(v12) + HIWORD(v11) + HIWORD(v10); + *((_WORD *)v7 - 1) = v13; + v9 = HIWORD(v13); + } + while ( v23 > (unsigned int)v7 ); + v14 = 4 * ((v23 - (unsigned int)v24 - 21) >> 2) + 4; + if ( v23 < (unsigned int)v24 + 21 ) + v14 = 4; + v15 = v23 + 4 * (v25 - v26); + v16 = (unsigned int *)((char *)v27 + v14); + for ( i = (char *)v28 + v14; v15 > (unsigned int)i; v9 = HIWORD(v20) ) + { + v18 = *v16; + i += 4; + ++v16; + v19 = v9 + (unsigned __int16)v18; + *((_WORD *)i - 2) = v19; + v20 = HIWORD(v19) + HIWORD(v18); + *((_WORD *)i - 1) = v20; + } + if ( v9 ) + { + if ( v25 == v24[2] ) + { + v22 = __Balloc_D2A(v24[1] + 1); + memcpy(v22 + 3, v24 + 3, 4 * v24[4] + 8); + __Bfree_D2A(v24); + v24 = v22; + v25 = v22[4]; + } + v24[4] = v25 + 1; + v24[v25 + 5] = 1; + } + return v24; +} + +//----- (00465330) -------------------------------------------------------- +unsigned int __usercall __m16m@(unsigned __int16 a1@, int a2@, int a3@) +{ + int v3; // edi + unsigned __int16 *v4; // ecx + char *v5; // edx + unsigned int result; // eax + int v7; // eax + unsigned int v8; // eax + unsigned int v9; // ebx + int v10; // ebp + unsigned int v11; // eax + char v13[10]; // [esp+16h] [ebp-1Eh] BYREF + int v14; // [esp+20h] [ebp-14h] BYREF + + v3 = a1; + v4 = (unsigned __int16 *)(a2 + 16); + v14 = 0; + v5 = (char *)&v14 + 2; + do + { + while ( 1 ) + { + v7 = *v4; + v5 -= 2; + --v4; + if ( (_WORD)v7 ) + break; + result = 0; + *((_WORD *)v5 - 1) = 0; + if ( v5 == v13 ) + goto LABEL_5; + } + v8 = v3 * v7; + v9 = *((unsigned __int16 *)v5 + 1) + (unsigned __int16)v8; + v10 = *(unsigned __int16 *)v5; + *((_WORD *)v5 + 1) = v9; + v11 = HIWORD(v9) + v10 + HIWORD(v8); + *(_WORD *)v5 = v11; + result = HIWORD(v11); + *((_WORD *)v5 - 1) = result; + } + while ( v5 != v13 ); +LABEL_5: + *(_DWORD *)(a3 + 4) = *(_DWORD *)v5; + *(_DWORD *)(a3 + 8) = *((_DWORD *)v5 + 1); + *(_DWORD *)(a3 + 12) = *((_DWORD *)v5 + 2); + *(_WORD *)(a3 + 16) = *((_WORD *)v5 + 6); + return result; +} + +//----- (004653C0) -------------------------------------------------------- +BOOL __usercall __eshift_part_0@(__int16 *a1@, int a2@) +{ + int v2; // esi + void *v4; // ebp + const void *v5; // eax + int v6; // esi + const void *Src; // edi + __int16 *v8; // edi + __int16 *i; // ecx + __int16 *v10; // ebx + int v11; // edx + __int16 v12; // ax + __int16 *v14; // edx + __int16 v15; // di + unsigned __int16 v16; // ax + __int16 v17; // bp + int v18; // ecx + _WORD *v19; // edx + unsigned __int16 v20; // bp + __int16 *v21; // edi + __int16 *v22; // eax + __int16 v23; // dx + unsigned int v24; // eax + int v25; // esi + unsigned __int16 v26; // ax + int v27; // edi + __int16 *v28; // ecx + int v29; // edx + __int16 v30; // ax + __int16 v31; // cx + __int16 *v32; // edx + unsigned __int16 v33; // ax + __int16 v34; // bp + char v35; // [esp+14h] [ebp-28h] + int v36; // [esp+14h] [ebp-28h] + _WORD *v37; // [esp+14h] [ebp-28h] + unsigned __int16 v38; // [esp+1Ah] [ebp-22h] + __int16 *v39; // [esp+1Ch] [ebp-20h] + + v2 = a2; + if ( a2 < 0 ) + { + v18 = -a2; + v36 = -a2; + if ( a2 >= -15 ) + { + if ( a2 >= -7 ) + { + v21 = a1 + 2; + v38 = 0; + goto LABEL_28; + } + v26 = 0; + v21 = a1 + 2; + } + else + { + v19 = a1 + 8; + v20 = 0; + v21 = a1 + 2; + do + { + v37 = v19; + v20 |= a1[8]; + v22 = v19; + do + { + v23 = *--v22; + v22[1] = v23; + } + while ( v22 != v21 ); + v18 -= 16; + v19 = v37; + a1[2] = 0; + } + while ( v18 > 15 ); + v38 = v20; + v24 = -((-16 - v2) & 0xFFFFFFF0); + if ( v2 >= -15 ) + v24 = 0; + v25 = -16 - v2 + v24; + v26 = v20; + v36 = v25; + if ( v25 <= 7 ) + { +LABEL_27: + if ( !v36 ) + return v38 != 0; +LABEL_28: + v39 = v21; + v27 = v38; + do + { + v28 = v39; + v29 = 0; + v38 = v27 | a1[8] & 1; + v27 |= a1[8] & 1; + do + { + if ( (*v28 & 1) != 0 ) + v29 |= 1u; + v30 = (unsigned __int16)*v28 >> 1; + if ( (v29 & 2) != 0 ) + v30 |= 0x8000u; + ++v28; + v29 *= 2; + *(v28 - 1) = v30; + } + while ( v28 != a1 + 9 ); + --v36; + } + while ( v36 ); + return v38 != 0; + } + } + v31 = 0; + v38 = v26 | *((unsigned __int8 *)a1 + 16); + v32 = v21; + do + { + v33 = *v32; + v34 = v31; + ++v32; + v31 = v33 << 8; + *(v32 - 1) = v34 | HIBYTE(v33); + } + while ( v32 != a1 + 9 ); + v36 -= 8; + goto LABEL_27; + } + v4 = a1 + 2; + v5 = a1 + 3; + if ( a2 > 15 ) + { + v35 = a2; + v6 = a2; + Src = v5; + do + { + v6 -= 16; + memmove(v4, Src, 0xCu); + a1[8] = 0; + } + while ( v6 > 15 ); + v2 = v35 & 0xF; + } + if ( v2 > 7 ) + { + v14 = a1 + 8; + v15 = 0; + do + { + v16 = *v14; + v17 = v15; + --v14; + v15 = HIBYTE(v16); + v14[1] = v17 | (v16 << 8); + } + while ( v14 != a1 + 1 ); + v2 -= 8; + } + v8 = a1 + 8; + for ( i = a1 + 1; v2; --v2 ) + { + v10 = v8; + v11 = 0; + do + { + if ( *v10 < 0 ) + v11 |= 1u; + v12 = 2 * *v10; + if ( (v11 & 2) != 0 ) + v12 |= 1u; + --v10; + v11 *= 2; + v10[1] = v12; + } + while ( v10 != i ); + } + return 0; +} + +//----- (00465600) -------------------------------------------------------- +__int16 *__cdecl __emovi(int a1, int a2) +{ + __int16 *result; // eax + __int16 v3; // dx + int v4; // edx + __int16 v5; // di + int v6; // edx + int v7; // edx + __int16 v8; // bx + + *(_WORD *)a2 = *(__int16 *)(a1 + 10) >> 15; + result = (__int16 *)(a1 + 8); + v3 = *(_WORD *)(a1 + 10) & 0x7FFF; + *(_WORD *)(a2 + 2) = v3; + if ( v3 == 0x7FFF ) + { + if ( (*(_WORD *)(a1 + 10) & 0x7FFF) == 0x7FFF ) + { + v6 = a1; + while ( 1 ) + { + v6 += 2; + if ( *(_WORD *)(v6 - 2) ) + break; + if ( a1 + 10 == v6 ) + goto LABEL_6; + } + v7 = a2 + 6; + *(_WORD *)(a2 + 4) = 0; + do + { + v8 = *result--; + v7 += 2; + *(_WORD *)(v7 - 2) = v8; + } + while ( (__int16 *)(a1 - 4) != result ); + } + else + { +LABEL_6: + *(_DWORD *)(a2 + 4) = 0; + *(_DWORD *)(a2 + 8) = 0; + *(_DWORD *)(a2 + 12) = 0; + *(_WORD *)(a2 + 16) = 0; + } + } + else + { + v4 = a2 + 6; + *(_WORD *)(a2 + 4) = 0; + do + { + v5 = *result--; + v4 += 2; + *(_WORD *)(v4 - 2) = v5; + } + while ( result != (__int16 *)(a1 - 2) ); + *(_WORD *)(a2 + 16) = 0; + } + return result; +} + +//----- (004656D0) -------------------------------------------------------- +unsigned int __cdecl __eaddm(int a1, int a2) +{ + int v2; // edx + int v3; // ecx + unsigned int result; // eax + + v2 = 7; + v3 = 0; + do + { + result = v3 + *(unsigned __int16 *)(a2 + 2 * v2 + 2) + *(unsigned __int16 *)(a1 + 2 * v2 + 2); + *(_WORD *)(a2 + 2 * v2 + 2) = result; + v3 = HIWORD(result) & 1; + --v2; + } + while ( v2 ); + return result; +} + +//----- (00465710) -------------------------------------------------------- +unsigned int __cdecl __esubm(int a1, int a2) +{ + int v2; // edx + int v3; // ecx + unsigned int result; // eax + + v2 = 7; + v3 = 0; + do + { + result = *(unsigned __int16 *)(a2 + 2 * v2 + 2) - v3 - *(unsigned __int16 *)(a1 + 2 * v2 + 2); + *(_WORD *)(a2 + 2 * v2 + 2) = result; + v3 = HIWORD(result) & 1; + --v2; + } + while ( v2 ); + return result; +} + +//----- (00465750) -------------------------------------------------------- +BOOL __cdecl __edivm(int a1, int *a2) +{ + int v2; // edx + int v3; // eax + _WORD *v4; // ecx + __int16 v5; // ax + unsigned int v6; // eax + unsigned __int16 v7; // ax + int v8; // eax + unsigned __int16 v9; // bx + int v10; // edx + int v11; // ecx + unsigned int v12; // eax + int *v13; // esi + __int16 v14; // ax + int v16; // ecx + char *v17; // edx + int v18; // esi + int v19; // ebx + int v20; // eax + unsigned int v21; // ecx + int v22; // eax + unsigned __int16 v23; // bx + int v24; // ecx + char *v25; // edx + int v26; // eax + unsigned int v27; // ecx + char *v28; // [esp+14h] [ebp-68h] + __int16 v29; // [esp+24h] [ebp-58h] + unsigned int v30; // [esp+28h] [ebp-54h] + int v31; // [esp+3Ah] [ebp-42h] + int v32; // [esp+3Eh] [ebp-3Eh] BYREF + int v33; // [esp+42h] [ebp-3Ah] + int v34; // [esp+46h] [ebp-36h] + __int16 v35; // [esp+4Ah] [ebp-32h] + _WORD v36[1]; // [esp+4Ch] [ebp-30h] BYREF + char v37[14]; // [esp+4Eh] [ebp-2Eh] BYREF + char v38[32]; // [esp+5Ch] [ebp-20h] BYREF + + v2 = 0; + v32 = 0; + v33 = 0; + v3 = *a2; + v34 = 0; + v35 = 0; + v4 = a2 + 1; + v31 = v3; + do + { + if ( (*v4 & 1) != 0 ) + v2 |= 1u; + v5 = *v4 >> 1; + if ( (v2 & 2) != 0 ) + v5 |= 0x8000u; + ++v4; + v2 *= 2; + *(v4 - 1) = v5; + } + while ( (_WORD *)((char *)a2 + 18) != v4 ); + v30 = *(unsigned __int16 *)(a1 + 6); + v28 = (char *)&v32; + do + { + v6 = *((unsigned __int16 *)a2 + 3) + (*((unsigned __int16 *)a2 + 2) << 16); + if ( 0xFFFF * v30 < v6 ) + { + v7 = -1; + v29 = -1; + } + else + { + v29 = v6 / v30; + v7 = v29; + } + __m16m(v7, a1, (int)v36); + v8 = 2; + while ( 1 ) + { + v9 = *((_WORD *)a2 + v8); + if ( v36[v8] != v9 ) + break; + if ( ++v8 == 9 ) + goto LABEL_13; + } + if ( v36[v8] > v9 ) + { + v16 = 0; + v17 = v38; + v18 = a1 + 16; + v19 = a1 + 16; + do + { + v20 = *(unsigned __int16 *)v17; + v17 -= 2; + v19 -= 2; + v21 = v20 - v16 - *(unsigned __int16 *)(v19 + 2); + *((_WORD *)v17 + 1) = v21; + v16 = HIWORD(v21) & 1; + } + while ( v17 != v37 ); + v22 = 2; + while ( 1 ) + { + v23 = *((_WORD *)a2 + v22); + if ( v36[v22] != v23 ) + break; + if ( ++v22 == 9 ) + goto LABEL_26; + } + if ( v36[v22] <= v23 ) + { +LABEL_26: + --v29; + goto LABEL_13; + } + v29 -= 2; + v24 = 0; + v25 = v38; + do + { + v26 = *(unsigned __int16 *)v25; + v25 -= 2; + v18 -= 2; + v27 = v26 - v24 - *(unsigned __int16 *)(v18 + 2); + *((_WORD *)v25 + 1) = v27; + v24 = HIWORD(v27) & 1; + } + while ( v25 != v37 ); + } +LABEL_13: + v10 = 7; + v11 = 0; + do + { + v12 = *((unsigned __int16 *)a2 + v10 + 1) - v11 - (unsigned __int16)v36[v10 + 1]; + *((_WORD *)a2 + v10 + 1) = v12; + v11 = HIWORD(v12) & 1; + --v10; + } + while ( v10 ); + *(_WORD *)v28 = v29; + memmove(a2 + 1, (char *)a2 + 6, 0xCu); + v28 += 2; + *((_WORD *)a2 + 8) = 0; + } + while ( v28 != (char *)v36 ); + v13 = a2 + 1; + v14 = 0; + do + { + v13 = (int *)((char *)v13 + 2); + v14 |= *((_WORD *)v13 - 1); + } + while ( (int *)((char *)a2 + 18) != v13 ); + *a2 = v31; + a2[1] = v32; + a2[2] = v33; + a2[3] = v34; + *((_WORD *)a2 + 8) = v35; + return v14 != 0; +} +// 465750: using guessed type _WORD var_30[1]; + +//----- (004659F0) -------------------------------------------------------- +int __cdecl __emulm(int a1, int a2) +{ + unsigned __int16 v2; // bp + int v3; // edx + unsigned __int16 *v4; // ebx + unsigned __int16 v5; // ax + int v6; // esi + __int16 *v7; // ecx + char *v8; // edx + int v9; // edi + int v10; // eax + unsigned int v11; // esi + char v13[2]; // [esp+2Ch] [ebp-40h] BYREF + char v14; // [esp+2Eh] [ebp-3Eh] BYREF + char v15; // [esp+3Ch] [ebp-30h] BYREF + int v16; // [esp+3Eh] [ebp-2Eh] + int Src; // [esp+42h] [ebp-2Ah] BYREF + int v18; // [esp+46h] [ebp-26h] + int v19; // [esp+4Ah] [ebp-22h] + __int16 v20; // [esp+4Eh] [ebp-1Eh] BYREF + + v2 = 0; + Src = 0; + v18 = 0; + v3 = *(_DWORD *)a2; + v4 = (unsigned __int16 *)(a1 + 16); + v19 = 0; + v16 = v3; + v20 = 0; + do + { + v5 = *v4--; + if ( v5 ) + { + v6 = 0; + __m16m(v5, a2, (int)v13); + v7 = &v20; + v8 = &v15; + do + { + v9 = (unsigned __int16)*v7; + v10 = *(unsigned __int16 *)v8; + v8 -= 2; + --v7; + v11 = v6 + v9 + v10; + v7[1] = v11; + v6 = HIWORD(v11) & 1; + } + while ( v8 != &v14 ); + } + v2 |= v20; + memmove((char *)&Src + 2, &Src, 0xCu); + LOWORD(Src) = 0; + } + while ( v4 != (unsigned __int16 *)(a1 + 4) ); + *(_DWORD *)a2 = v16; + *(_DWORD *)(a2 + 4) = Src; + *(_DWORD *)(a2 + 8) = v18; + *(_DWORD *)(a2 + 12) = v19; + *(_WORD *)(a2 + 16) = v20; + return v2; +} +// 4659F0: using guessed type char var_40[2]; + +//----- (00465B00) -------------------------------------------------------- +__int16 *__cdecl __toe64(_WORD *a1, int a2) +{ + int v2; // edx + __int16 *result; // eax + int v4; // edx + __int16 v5; // bx + __int16 v6; // bx + _WORD *v7; // ebx + __int16 v8; // ax + _WORD *v9; // edx + __int16 *v10; // ebx + + v2 = (unsigned __int16)a1[1]; + result = a1 + 3; + if ( (a1[1] & 0x7FFF) == 0x7FFF ) + { + v9 = a1 + 3; + do + { + if ( *v9 ) + { + *(_DWORD *)a2 = 0; + *(_DWORD *)(a2 + 4) = -1073741824; + *(_DWORD *)(a2 + 8) = 0x7FFF; + return result; + } + ++v9; + } + while ( a1 + 9 != v9 ); + *(_WORD *)(a2 + 10) = 0; + v4 = a2 + 6; + if ( *a1 ) + goto LABEL_8; + goto LABEL_4; + } + if ( !(_WORD)v2 ) + { + v7 = a1 + 2; + do + { + if ( (*v7 & 1) != 0 ) + v2 |= 1u; + v8 = *v7 >> 1; + if ( (v2 & 2) != 0 ) + v8 |= 0x8000u; + ++v7; + v2 *= 2; + *(v7 - 1) = v8; + } + while ( a1 + 9 != v7 ); + result = a1 + 3; + *(_WORD *)(a2 + 10) = 0; + v4 = a2 + 6; + if ( !*a1 ) + goto LABEL_4; +LABEL_8: + v5 = a1[1] | 0x8000; + goto LABEL_5; + } + *(_WORD *)(a2 + 10) = 0; + v4 = a2 + 6; + if ( *a1 ) + goto LABEL_8; +LABEL_4: + v5 = a1[1]; +LABEL_5: + *(_WORD *)(a2 + 8) = v5; + if ( (a1[1] & 0x7FFF) == 0x7FFF ) + { + v10 = result; + while ( !*v10 ) + { + if ( a1 + 9 == ++v10 ) + { + *(_DWORD *)a2 = 0; + *(_DWORD *)(a2 + 4) = 0x80000000; + return result; + } + } + } + do + { + v6 = *result++; + v4 -= 2; + *(_WORD *)(v4 + 2) = v6; + } + while ( result != a1 + 7 ); + return result; +} + +//----- (00465C50) -------------------------------------------------------- +int __cdecl __ecmp(int a1, int a2) +{ + int v2; // eax + int v4; // eax + int v5; // eax + int v6; // eax + int v7; // edx + unsigned __int16 v8; // si + unsigned __int16 v9; // cx + __int16 v10[9]; // [esp+14h] [ebp-30h] BYREF + __int16 v11[15]; // [esp+26h] [ebp-1Eh] BYREF + + if ( (*(_WORD *)(a1 + 10) & 0x7FFF) == 0x7FFF ) + { + v4 = a1; + while ( 1 ) + { + v4 += 2; + if ( *(_WORD *)(v4 - 2) ) + return -2; + if ( a1 + 10 == v4 ) + { + if ( (*(_WORD *)(a2 + 10) & 0x7FFF) != 0x7FFF ) + goto LABEL_3; + goto LABEL_13; + } + } + } + if ( (*(_WORD *)(a2 + 10) & 0x7FFF) == 0x7FFF ) + { +LABEL_13: + v5 = a2; + do + { + v5 += 2; + if ( *(_WORD *)(v5 - 2) ) + return -2; + } + while ( a2 + 10 != v5 ); + } +LABEL_3: + __emovi(a1, (int)v10); + __emovi(a2, (int)v11); + if ( v10[0] == v11[0] ) + { + v6 = 1; + v7 = v10[0] == 0 ? 1 : -1; + while ( 1 ) + { + v8 = v10[v6++]; + v9 = v10[v6 + 8]; + if ( v8 != v9 ) + break; + if ( v6 == 8 ) + return 0; + } + if ( v8 <= v9 ) + return v10[0] == 0 ? 1 : -1; + return v7; + } + else + { + v2 = 1; + while ( !v10[v2] && !v11[v2] ) + { + if ( ++v2 == 8 ) + return 0; + } + return v10[0] == 0 ? 1 : -1; + } +} +// 465C50: using guessed type __int16 var_1E[15]; + +//----- (00465D90) -------------------------------------------------------- +BOOL __cdecl __eshift(__int16 *a1, int a2) +{ + return a2 && __eshift_part_0(a1, a2); +} + +//----- (00465DB0) -------------------------------------------------------- +int __cdecl __enormlz(_WORD *a1) +{ + unsigned __int16 v1; // ax + __int16 v2; // dx + int v3; // ecx + __int16 *j; // eax + unsigned __int16 *v5; // edx + __int16 v6; // si + unsigned __int16 v7; // ax + __int16 v8; // di + __int16 *v9; // esi + int v10; // edx + __int16 v11; // ax + unsigned __int16 *v13; // esi + int v14; // edx + unsigned __int16 v15; // ax + unsigned __int16 *v16; // ecx + __int16 i; // dx + __int16 v18; // si + + v1 = a1[2]; + if ( v1 ) + { + v3 = 0; + if ( (v1 & 0xFF00) != 0 ) + { + v16 = a1 + 2; + for ( i = 0; ; i = v18 ) + { + ++v16; + v18 = v1 << 8; + *(v16 - 1) = i | HIBYTE(v1); + if ( a1 + 9 == v16 ) + break; + v1 = *v16; + } + v1 = a1[2]; + v3 = -8; + } + while ( v1 ) + { + v13 = a1 + 2; + v14 = 0; + while ( 1 ) + { + if ( (v1 & 1) != 0 ) + v14 |= 1u; + v15 = v1 >> 1; + if ( (v14 & 2) != 0 ) + v15 |= 0x8000u; + ++v13; + v14 *= 2; + *(v13 - 1) = v15; + if ( a1 + 9 == v13 ) + break; + v1 = *v13; + } + if ( --v3 == -81 ) + break; + v1 = a1[2]; + } + } + else + { + v2 = a1[3]; + v3 = 0; + if ( v2 >= 0 ) + { + if ( v2 ) + { +LABEL_9: + while ( (v2 & 0xFF00) == 0 ) + { + v5 = a1 + 8; + v6 = 0; + do + { + v7 = *v5; + v8 = v6; + --v5; + v6 = HIBYTE(v7); + v5[1] = v8 | (v7 << 8); + } + while ( v5 != a1 + 1 ); + v2 = a1[3]; + v3 += 8; + } + while ( v2 >= 0 ) + { + v9 = a1 + 8; + v10 = 0; + do + { + if ( *v9 < 0 ) + v10 |= 1u; + v11 = 2 * *v9; + if ( (v10 & 2) != 0 ) + v11 |= 1u; + --v9; + v10 *= 2; + v9[1] = v11; + } + while ( a1 + 1 != v9 ); + if ( ++v3 > 96 ) + break; + v2 = a1[3]; + } + } + else + { + while ( 1 ) + { + for ( j = a1 + 3; ; v2 = *j ) + { + *(++j - 2) = v2; + if ( a1 + 9 == j ) + break; + } + v3 += 16; + a1[8] = 0; + if ( v3 == 96 ) + break; + v2 = a1[3]; + if ( v2 ) + goto LABEL_9; + } + } + } + } + return v3; +} + +//----- (00465F60) -------------------------------------------------------- +__int16 __cdecl __emdnorm(int a1, int a2, int a3, int a4, int a5, int a6) +{ + int v6; // eax + int v7; // esi + bool v8; // dl + __int16 v9; // ax + bool v10; // zf + int v11; // eax + int v12; // edx + int v13; // ecx + unsigned int v14; // eax + __int16 *v15; // ecx + int v16; // edx + __int16 v17; // ax + _WORD *v18; // ecx + int v19; // edx + _WORD *v20; // ecx + int v21; // edx + __int16 v22; // ax + bool v24; // [esp+13h] [ebp-49h] + __int16 *v25; // [esp+14h] [ebp-48h] + int v26; // [esp+18h] [ebp-44h] + int v27; // [esp+1Ch] [ebp-40h] + int v28[3]; // [esp+2Eh] [ebp-2Eh] + int v29; // [esp+3Ah] [ebp-22h] + __int16 v30; // [esp+3Eh] [ebp-1Eh] + + v30 = 0; + v29 = 0x10000; + HIWORD(v28[0]) = 0; + v28[1] = 0; + v28[2] = 0; + v6 = __enormlz((_WORD *)a1); + v7 = a4 - v6; + if ( v6 > 80 && v7 <= 32766 ) + goto LABEL_19; + if ( v7 >= 0 ) + { + if ( !a5 ) + goto LABEL_9; + v8 = v7 <= 0 && a6 != 80; + v24 = v8; + if ( a6 != 64 ) + goto LABEL_6; + v29 = 1; + v25 = (__int16 *)(a1 + 14); + if ( !v8 ) + { + v26 = 6; + v9 = *(_WORD *)(a1 + 14); + goto LABEL_46; + } + v26 = 6; + v27 = 7; +LABEL_52: + v20 = (_WORD *)(a1 + 4); + v21 = 0; + a2 |= *(_WORD *)(a1 + 16) & 1; + do + { + if ( (*v20 & 1) != 0 ) + v21 |= 1u; + v22 = *v20 >> 1; + if ( (v21 & 2) != 0 ) + v22 |= 0x8000u; + ++v20; + v21 *= 2; + *(v20 - 1) = v22; + } + while ( v20 != (_WORD *)(a1 + 18) ); + v9 = *v25; + if ( a6 > 79 || v27 != 7 ) + { +LABEL_49: + *v25 = 0; + if ( v9 >= 0 ) + goto LABEL_27; + goto LABEL_22; + } +LABEL_46: + if ( *(_WORD *)(a1 + 16) ) + v9 |= 1u; + *(_WORD *)(a1 + 16) = 0; + goto LABEL_49; + } + if ( v7 < -80 ) + { +LABEL_19: + *(_DWORD *)(a1 + 2) = 0; + *(_DWORD *)(a1 + 6) = 0; + *(_DWORD *)(a1 + 10) = 0; + *(_DWORD *)(a1 + 14) = 0; + return v6; + } + v10 = !__eshift_part_0((__int16 *)a1, a4 - v6); + v11 = 1; + if ( v10 ) + v11 = a2; + a2 = v11; + if ( !a5 ) + goto LABEL_35; + v24 = a6 != 80; + if ( a6 == 64 ) + { + v29 = 1; + v25 = (__int16 *)(a1 + 14); + v26 = 6; + v27 = 7; + goto LABEL_52; + } +LABEL_6: + v25 = (__int16 *)(a1 + 16); + if ( v24 ) + { + v26 = 7; + v27 = 8; + goto LABEL_52; + } + v9 = *(_WORD *)(a1 + 16); + *(_WORD *)(a1 + 16) = 0; + if ( v9 >= 0 ) + goto LABEL_8; + v26 = 7; +LABEL_22: + if ( v9 != (__int16)0x8000 ) + goto LABEL_25; + if ( a2 ) + { + if ( !a3 ) + { +LABEL_25: + v12 = 7; + v13 = 0; + do + { + v14 = v13 + *(unsigned __int16 *)(a1 + 2 * v12 + 2) + *((unsigned __int16 *)v28 + v12 + 1); + *(_WORD *)(a1 + 2 * v12 + 2) = v14; + v13 = HIWORD(v14) & 1; + --v12; + } + while ( v12 ); + } + } + else if ( (*(_BYTE *)(a1 + 2 * v26) & 1) != 0 ) + { + goto LABEL_25; + } +LABEL_27: + if ( !v24 ) + { +LABEL_8: + LOWORD(v6) = *(_WORD *)(a1 + 4); + if ( !(_WORD)v6 ) + goto LABEL_9; + goto LABEL_36; + } + v15 = (__int16 *)(a1 + 16); + v16 = 0; + do + { + if ( *v15 < 0 ) + v16 |= 1u; + v17 = 2 * *v15; + if ( (v16 & 2) != 0 ) + v17 |= 1u; + --v15; + v16 *= 2; + v15[1] = v17; + } + while ( v15 != (__int16 *)(a1 + 2) ); + LOWORD(v6) = *(_WORD *)(a1 + 4); + if ( (_WORD)v6 ) + { +LABEL_36: + v18 = (_WORD *)(a1 + 4); + v19 = 0; + while ( 1 ) + { + if ( (v6 & 1) != 0 ) + v19 |= 1u; + LOWORD(v6) = (unsigned __int16)v6 >> 1; + if ( (v19 & 2) != 0 ) + LOWORD(v6) = v6 | 0x8000; + ++v18; + v19 *= 2; + *(v18 - 1) = v6; + if ( (_WORD *)(a1 + 18) == v18 ) + break; + LOWORD(v6) = *v18; + } + ++v7; +LABEL_9: + *(_WORD *)(a1 + 16) = 0; + if ( v7 > 32766 ) + { + *(_DWORD *)(a1 + 4) = 0; + *(_WORD *)(a1 + 2) = 0x7FFF; + *(_DWORD *)(a1 + 8) = 0; + *(_DWORD *)(a1 + 12) = 0; + return v6; + } + goto LABEL_10; + } +LABEL_35: + *(_WORD *)(a1 + 16) = 0; +LABEL_10: + LOWORD(v6) = 0; + if ( v7 < 0 ) + LOWORD(v7) = 0; + *(_WORD *)(a1 + 2) = v7; + return v6; +} + +//----- (004662E0) -------------------------------------------------------- +int __cdecl __emovo(_WORD *a1, int a2) +{ + int result; // eax + __int16 v3; // dx + __int16 *v4; // edx + __int16 v5; // bx + _WORD *v6; // ebx + + result = a2; + v3 = a1[1]; + if ( *a1 ) + v3 = a1[1] | 0x8000; + *(_WORD *)(a2 + 10) = v3; + if ( a1[1] == 0x7FFF ) + { + v6 = a1 + 3; + while ( !*v6 ) + { + if ( a1 + 9 == ++v6 ) + { + *(_DWORD *)a2 = 0; + *(_DWORD *)(a2 + 4) = 0; + *(_WORD *)(a2 + 8) = 0; + *(_WORD *)(a2 + 10) = v3 | 0x7FFF; + return result; + } + } + *(_DWORD *)a2 = 0; + *(_DWORD *)(a2 + 4) = 0; + *(_DWORD *)(a2 + 8) = 2147467264; + } + else + { + v4 = a1 + 3; + result = a2 + 8; + do + { + v5 = *v4++; + result -= 2; + *(_WORD *)(result + 2) = v5; + } + while ( v4 != a1 + 8 ); + } + return result; +} + +//----- (00466370) -------------------------------------------------------- +__int16 __cdecl __emul(int a1, int a2, int a3) +{ + int v3; // edx + int v4; // ebx + __int16 v5; // bp + int v6; // ecx + int v7; // eax + int v8; // esi + int v9; // eax + _WORD *v10; // eax + int v11; // eax + int v12; // ecx + int v13; // eax + int v14; // eax + _WORD *v15; // eax + int v16; // ebx + int v17; // ebp + char *v18; // eax + int v19; // eax + unsigned __int16 v20; // cx + unsigned int v21; // eax + unsigned int v22; // edx + bool v23; // zf + __int16 v24; // ax + char *v25; // eax + int v26; // eax + __int16 v28; // [esp+2Ch] [ebp-50h] + __int16 v29; // [esp+2Eh] [ebp-4Eh] + __int16 v30; // [esp+3Ch] [ebp-40h] BYREF + unsigned __int16 v31; // [esp+3Eh] [ebp-3Eh] + char v32; // [esp+40h] [ebp-3Ch] BYREF + char v33; // [esp+4Ch] [ebp-30h] BYREF + __int16 v34; // [esp+4Eh] [ebp-2Eh] BYREF + unsigned __int16 v35; // [esp+50h] [ebp-2Ch] + char v36; // [esp+52h] [ebp-2Ah] BYREF + char v37; // [esp+5Eh] [ebp-1Eh] BYREF + + v3 = a1; + v4 = a2; + v5 = *(_WORD *)(a1 + 10) & 0x7FFF; + if ( v5 == 0x7FFF ) + { + v12 = a1 + 10; + v13 = a1; + do + { + v13 += 2; + if ( *(_WORD *)(v13 - 2) ) + { + *(_DWORD *)a3 = *(_DWORD *)a1; + *(_DWORD *)(a3 + 4) = *(_DWORD *)(a1 + 4); + v11 = *(_DWORD *)(a1 + 8); + *(_DWORD *)(a3 + 8) = v11; + return v11; + } + } + while ( v13 != v12 ); + v29 = *(_WORD *)(a2 + 10); + v28 = v29 & 0x7FFF; + if ( (v29 & 0x7FFF) == 0x7FFF ) + goto LABEL_3; + goto LABEL_18; + } + v29 = *(_WORD *)(a2 + 10); + if ( (v29 & 0x7FFF) == 0x7FFF ) + { +LABEL_3: + v6 = a2 + 10; + v7 = a2; + do + { + v7 += 2; + if ( *(_WORD *)(v7 - 2) ) + { + *(_DWORD *)a3 = *(_DWORD *)a2; + *(_DWORD *)(a3 + 4) = *(_DWORD *)(a2 + 4); + v11 = *(_DWORD *)(a2 + 8); + *(_DWORD *)(a3 + 8) = v11; + return v11; + } + } + while ( v7 != v6 ); + v8 = 0; + if ( v5 != 0x7FFF ) + goto LABEL_7; + v12 = a1 + 10; + v28 = 0x7FFF; +LABEL_18: + v14 = a1; + while ( 1 ) + { + v14 += 2; + if ( *(_WORD *)(v14 - 2) ) + break; + if ( v14 == v12 ) + { + v15 = (_WORD *)(a2 + 2); + while ( !*v15 ) + { + if ( ++v15 == (_WORD *)(a2 + 16) ) + { +LABEL_13: + LOWORD(v11) = a3; + *(_DWORD *)a3 = 0; + *(_DWORD *)(a3 + 4) = 0; + *(_DWORD *)(a3 + 8) = 2147467264; + return v11; + } + } + if ( v28 != 0x7FFF ) + goto LABEL_41; + v8 = 1; + v6 = a2 + 10; + goto LABEL_7; + } + } + if ( v28 != 0x7FFF ) + goto LABEL_27; + v8 = 0; + v6 = a2 + 10; +LABEL_7: + v9 = a2; + while ( 1 ) + { + v9 += 2; + if ( *(_WORD *)(v9 - 2) ) + break; + if ( v9 == v6 ) + { + v10 = (_WORD *)(a1 + 2); + while ( !*v10 ) + { + if ( (_WORD *)(a1 + 16) == ++v10 ) + goto LABEL_13; + } + goto LABEL_33; + } + } + if ( !v8 ) + goto LABEL_27; +LABEL_33: + v28 = 0x7FFF; + if ( v5 == 0x7FFF ) + { + v12 = a1 + 10; +LABEL_41: + while ( 1 ) + { + v3 += 2; + if ( *(_WORD *)(v3 - 2) ) + break; + if ( v3 == v12 ) + goto LABEL_34; + } + v21 = 0; + } + else + { +LABEL_34: + v21 = (unsigned int)*(__int16 *)(a1 + 10) >> 31; + } + if ( v28 == 0x7FFF ) + { + while ( 1 ) + { + v4 += 2; + if ( *(_WORD *)(v4 - 2) ) + break; + if ( v4 == a2 + 10 ) + goto LABEL_36; + } + v22 = 0; + } + else + { +LABEL_36: + v22 = (unsigned int)v29 >> 31; + } + v23 = v22 == v21; + v24 = 0x8000; + if ( v23 ) + v24 = 0; + *(_DWORD *)a3 = 0; + LOWORD(v11) = v24 | 0x7FFF; + *(_DWORD *)(a3 + 4) = 0; + *(_WORD *)(a3 + 8) = 0; + *(_WORD *)(a3 + 10) = v11; + return v11; + } +LABEL_27: + __emovi(a1, (int)&v30); + __emovi(a2, (int)&v34); + v16 = v31; + v17 = v35; + if ( v31 ) + { + v20 = v35; +LABEL_52: + v25 = &v36; + if ( v20 ) + { +LABEL_56: + v26 = __emulm((int)&v30, (int)&v34); + __emdnorm((int)&v34, v26, 0, v16 + v17 - 16382, 64, 80); + v34 = -(v30 != v34); + LOWORD(v11) = __emovo(&v34, a3); + return v11; + } + while ( v25 != &v37 ) + { + v25 += 2; + if ( *((_WORD *)v25 - 1) ) + { + v17 -= __enormlz(&v34); + goto LABEL_56; + } + } + } + else + { + v18 = &v32; + while ( v18 != &v33 ) + { + v18 += 2; + if ( *((_WORD *)v18 - 1) ) + { + v19 = __enormlz(&v30); + v20 = v35; + v16 = -v19; + goto LABEL_52; + } + } + } + LOWORD(v11) = a3; + *(_DWORD *)a3 = 0; + *(_DWORD *)(a3 + 4) = 0; + *(_DWORD *)(a3 + 8) = 0; + return v11; +} + +//----- (00466720) -------------------------------------------------------- +int *__usercall __pformat_cvt@(int a1@, __int64 a2, int a3, int a4, int a5, int *a6, int *a7) +{ + char v10; // c2 + char v11; // c3 + char v12; // c0 + __int16 v13; // cx + int v14; // ebx + int v15; // eax + long double v17; // [esp+20h] [ebp-2Ch] BYREF + int v18; // [esp+2Ch] [ebp-20h] + int v19; // [esp+38h] [ebp-14h] BYREF + int *v20; // [esp+3Ch] [ebp-10h] BYREF + + *(_QWORD *)&v17 = a2; + HIDWORD(v17) = a3; + _FST7 = v17; + v18 = a4; + __asm { fxam } + if ( v12 ) + { + if ( !v10 ) + { + v19 = 4; + v14 = 0; + v15 = 0; + goto LABEL_7; + } + v19 = 3; + v13 = WORD4(v17); + v14 = 0; + } + else + { + v13 = WORD4(v17); + if ( v10 ) + { + if ( v11 ) + { + v19 = 2; + v14 = -16445; + } + else + { + v19 = 1; + v14 = (__int16)((WORD4(v17) & 0x7FFF) - 16446); + } + } + else + { + v19 = 0; + v14 = 0; + } + } + v15 = v13 & 0x8000; +LABEL_7: + *a7 = v15; + return __gdtoa(fpi_0_0, v14, (int *)&v17, &v19, a1, a5, a6, &v20); +} +// 466754: variable 'v12' is possibly undefined +// 466759: variable 'v10' is possibly undefined +// 4667DB: variable 'v11' is possibly undefined +// 53E230: using guessed type int fpi_0_0[6]; + +//----- (00466820) -------------------------------------------------------- +int __usercall __pformat_putc@(int a1@, int a2@) +{ + int v4; // edx + int v5; // eax + int result; // eax + + v4 = *(_DWORD *)(a2 + 4); + if ( (v4 & 0x4000) == 0 ) + { + v5 = *(_DWORD *)(a2 + 32); + if ( *(_DWORD *)(a2 + 36) <= v5 ) + goto LABEL_5; + } + if ( (v4 & 0x2000) == 0 ) + { + *(_BYTE *)(*(_DWORD *)a2 + *(_DWORD *)(a2 + 32)) = a1; + v5 = *(_DWORD *)(a2 + 32); +LABEL_5: + result = v5 + 1; + *(_DWORD *)(a2 + 32) = result; + return result; + } + fputc(a1, *(FILE **)a2); + result = *(_DWORD *)(a2 + 32) + 1; + *(_DWORD *)(a2 + 32) = result; + return result; +} + +//----- (00466880) -------------------------------------------------------- +int __usercall __pformat_wputchars@(int a1@, int a2@, int a3@) +{ + int v5; // eax + int result; // eax + signed int v7; // eax + char *v8; // ebp + char *v9; // esi + int v10; // eax + int v11; // edx + int v12; // eax + int v13; // eax + int v15; // [esp+1Ch] [ebp-40h] + mbstate_t State; // [esp+28h] [ebp-34h] BYREF + char Dest[44]; // [esp+30h] [ebp-2Ch] BYREF + + wcrtomb(Dest, 0, &State); + v5 = *(_DWORD *)(a3 + 12); + if ( v5 >= 0 && a2 > v5 ) + a2 = *(_DWORD *)(a3 + 12); + result = *(_DWORD *)(a3 + 8); + if ( result <= a2 ) + { + *(_DWORD *)(a3 + 8) = -1; + goto LABEL_6; + } + v13 = result - a2; + *(_DWORD *)(a3 + 8) = v13; + if ( (*(_BYTE *)(a3 + 5) & 4) == 0 ) + { + *(_DWORD *)(a3 + 8) = v13 - 1; + do + { + __pformat_putc(32, a3); + result = *(_DWORD *)(a3 + 8); + *(_DWORD *)(a3 + 8) = result - 1; + } + while ( result ); +LABEL_6: + if ( a2 <= 0 ) + { + *(_DWORD *)(a3 + 8) = -2; + return result; + } + goto LABEL_7; + } + if ( a2 > 0 ) + { +LABEL_7: + v15 = a2; + while ( 1 ) + { + a1 += 2; + v7 = wcrtomb(Dest, *(_WORD *)(a1 - 2), &State); + if ( v7 <= 0 ) + goto LABEL_19; + v8 = &Dest[v7]; + v9 = Dest; + do + { + while ( 1 ) + { + v11 = *(_DWORD *)(a3 + 4); + ++v9; + if ( (v11 & 0x4000) == 0 ) + { + v10 = *(_DWORD *)(a3 + 32); + if ( *(_DWORD *)(a3 + 36) <= v10 ) + goto LABEL_11; + } + v12 = *(v9 - 1); + if ( (v11 & 0x2000) != 0 ) + break; + *(_BYTE *)(*(_DWORD *)a3 + *(_DWORD *)(a3 + 32)) = v12; + v10 = *(_DWORD *)(a3 + 32); +LABEL_11: + *(_DWORD *)(a3 + 32) = v10 + 1; + if ( v9 == v8 ) + goto LABEL_16; + } + fputc(v12, *(FILE **)a3); + ++*(_DWORD *)(a3 + 32); + } + while ( v9 != v8 ); +LABEL_16: + if ( !--v15 ) + { + result = *(_DWORD *)(a3 + 8); + *(_DWORD *)(a3 + 8) = result - 1; + if ( result > 0 ) + goto LABEL_18; + return result; + } + } + } + *(_DWORD *)(a3 + 8) = v13 - 1; + do + { +LABEL_18: + __pformat_putc(32, a3); +LABEL_19: + result = *(_DWORD *)(a3 + 8); + *(_DWORD *)(a3 + 8) = result - 1; + } + while ( result > 0 ); + return result; +} +// 466880: using guessed type char var_2C[44]; + +//----- (004669E0) -------------------------------------------------------- +int __usercall __pformat_putchars@(_BYTE *a1@, int a2@, int a3@) +{ + int v3; // edi + int v6; // eax + int result; // eax + int v8; // eax + int v9; // edi + int v10; // edx + FILE *Stream; // ecx + int v12; // edx + int v13; // eax + int v14; // edx + + v3 = a2; + v6 = *(_DWORD *)(a3 + 12); + if ( v6 >= 0 && a2 > v6 ) + v3 = *(_DWORD *)(a3 + 12); + result = *(_DWORD *)(a3 + 8); + if ( result > v3 ) + { + v13 = result - v3; + *(_DWORD *)(a3 + 8) = v13; + v14 = v13; + v8 = *(_DWORD *)(a3 + 4); + if ( (v8 & 0x400) != 0 ) + { + if ( !v3 ) + { + *(_DWORD *)(a3 + 8) = v14 - 1; + goto LABEL_21; + } + goto LABEL_8; + } + *(_DWORD *)(a3 + 8) = v14 - 1; + do + { + __pformat_putc(32, a3); + result = *(_DWORD *)(a3 + 8); + *(_DWORD *)(a3 + 8) = result - 1; + } + while ( result ); + } + else + { + *(_DWORD *)(a3 + 8) = -1; + } + if ( !v3 ) + { + *(_DWORD *)(a3 + 8) = -2; + return result; + } + v8 = *(_DWORD *)(a3 + 4); +LABEL_8: + v9 = (int)&a1[v3 - 1]; + while ( 1 ) + { + if ( (v8 & 0x4000) != 0 || (v10 = *(_DWORD *)(a3 + 32), *(_DWORD *)(a3 + 36) > v10) ) + { + Stream = *(FILE **)a3; + if ( (v8 & 0x2000) != 0 ) + fputc((char)*a1, Stream); + else + *((_BYTE *)&Stream->_ptr + *(_DWORD *)(a3 + 32)) = *a1; + v10 = *(_DWORD *)(a3 + 32); + } + *(_DWORD *)(a3 + 32) = v10 + 1; + if ( (_BYTE *)v9 == a1 ) + break; + v8 = *(_DWORD *)(a3 + 4); + ++a1; + } + while ( 1 ) + { + result = *(_DWORD *)(a3 + 8); + *(_DWORD *)(a3 + 8) = result - 1; + if ( result <= 0 ) + break; + v8 = *(_DWORD *)(a3 + 4); +LABEL_21: + if ( (v8 & 0x4000) != 0 || (v12 = *(_DWORD *)(a3 + 32), *(_DWORD *)(a3 + 36) > v12) ) + { + if ( (v8 & 0x2000) != 0 ) + fputc(32, *(FILE **)a3); + else + *(_BYTE *)(*(_DWORD *)a3 + *(_DWORD *)(a3 + 32)) = 32; + v12 = *(_DWORD *)(a3 + 32); + } + *(_DWORD *)(a3 + 32) = v12 + 1; + } + return result; +} + +//----- (00466B20) -------------------------------------------------------- +int __usercall __pformat_puts@(char *a1@, int a2@) +{ + char *String; // ebx + signed int MaxCount; // eax + int v5; // eax + + String = a1; + if ( !a1 ) + String = "(null)"; + MaxCount = *(_DWORD *)(a2 + 12); + if ( MaxCount < 0 ) + v5 = strlen(String); + else + v5 = strnlen(String, MaxCount); + return __pformat_putchars(String, v5, a2); +} + +//----- (00466B80) -------------------------------------------------------- +int __usercall __pformat_emit_inf_or_nan@(int a1@, int a2@, int a3@) +{ + int v5; // ebx + char *v6; // ecx + char v7; // bl + int i; // edx + char v10; // [esp+Ch] [ebp-20h] BYREF + char v11[31]; // [esp+Dh] [ebp-1Fh] BYREF + + *(_DWORD *)(a3 + 12) = -1; + v5 = *(_DWORD *)(a3 + 4); + if ( a1 ) + { + v10 = 45; + v6 = v11; + } + else if ( (v5 & 0x100) != 0 ) + { + v10 = 43; + v6 = v11; + } + else if ( (v5 & 0x40) != 0 ) + { + v10 = 32; + v6 = v11; + } + else + { + v6 = &v10; + } + v7 = v5 & 0x20; + for ( i = 0; i != 3; ++i ) + v6[i] = v7 | *(_BYTE *)(a2 + i) & 0xDF; + return __pformat_putchars(&v10, v6 + 3 - &v10, a3); +} + +//----- (00466C10) -------------------------------------------------------- +int __usercall __pformat_xint@(int a1@, __int64 a2, int a3, int a4, int a5) +{ + int v5; // ebx + int v6; // ecx + int v7; // edi + int v8; // ecx + int v9; // eax + void *v10; // esp + char v11; // cl + void *v12; // esp + int v13; // ebx + unsigned __int64 v14; // rdi + char v15; // al + char v16; // cl + char *v17; // esi + int v18; // eax + int result; // eax + int v20; // edi + bool v21; // zf + unsigned int v22; // edx + int v23; // edi + int v24; // eax + int v25; // eax + int v26; // esi + int v27; // eax + int v28; // eax + int v29; // eax + void *v30; // esp + void *v31; // esp + int v32; // ecx + int v33; // eax + int v34; // edx + size_t v35; // edi + size_t v36; // eax + size_t v37; // ecx + size_t v38; // edi + int v39; // ecx + unsigned int v40; // eax + int v41; // eax + void *v42; // esp + void *v43; // esp + int v44; // eax + int v45; // eax + void *v46; // esp + void *v47; // esp + int v48; // eax + void *v49; // [esp+0h] [ebp-68h] + FILE *v50; // [esp+4h] [ebp-64h] + _BYTE v51[8]; // [esp+10h] [ebp-58h] BYREF + int v52; // [esp+18h] [ebp-50h] + int v53; // [esp+1Ch] [ebp-4Ch] + __int64 v54; // [esp+20h] [ebp-48h] + int v55; // [esp+28h] [ebp-40h] + int v56; // [esp+2Ch] [ebp-3Ch] + char *v57; // [esp+30h] [ebp-38h] + size_t v58; // [esp+34h] [ebp-34h] + size_t Size; // [esp+38h] [ebp-30h] + size_t v60; // [esp+3Ch] [ebp-2Ch] + __int64 v61; // [esp+40h] [ebp-28h] + int v62; // [esp+48h] [ebp-20h] + int v63; // [esp+4Ch] [ebp-1Ch] + + v56 = a1; + v5 = a5; + v61 = a2; + v54 = a2; + v62 = a3; + v63 = a4; + if ( a1 == 111 ) + { + v39 = 0; + v7 = *(_DWORD *)(a5 + 4); + v55 = *(_DWORD *)(a5 + 12); + if ( v55 >= 0 ) + v39 = v55; + v8 = v39 + 24; + if ( (v7 & 0x1000) != 0 ) + { + if ( *(_WORD *)(a5 + 28) ) + { + v60 = 3; +LABEL_46: + v53 = *(_DWORD *)(a5 + 8); + v28 = v8 / 3u + v8; + if ( v28 < v53 ) + v28 = v53; + v29 = 16 * ((unsigned int)(v28 + 27) >> 4); + v30 = alloca(v29); + v31 = alloca(v29); + v57 = v51; + if ( v56 != 111 ) + { + v11 = 15; + goto LABEL_50; + } +LABEL_75: + v11 = 7; + goto LABEL_8; + } + v48 = v8; + v53 = *(_DWORD *)(a5 + 8); + if ( v8 < v53 ) + v48 = v53; + v40 = v48 + 27; + } + else + { + v53 = *(_DWORD *)(a5 + 8); + if ( v53 >= v8 ) + v8 = v53; + v40 = v8 + 27; + } + v41 = 16 * (v40 >> 4); + v42 = alloca(v41); + v43 = alloca(v41); + v60 = 3; + v57 = v51; + goto LABEL_75; + } + v6 = 0; + v7 = *(_DWORD *)(a5 + 4); + v55 = *(_DWORD *)(a5 + 12); + if ( v55 >= 0 ) + v6 = v55; + v8 = v6 + 18; + if ( (v7 & 0x1000) != 0 ) + { + v21 = *(_WORD *)(a5 + 28) == 0; + v60 = 4; + if ( v21 ) + { + v44 = v8; + v53 = *(_DWORD *)(a5 + 8); + if ( v8 < v53 ) + v44 = v53; + v45 = 16 * ((unsigned int)(v44 + 27) >> 4); + v46 = alloca(v45); + v11 = 15; + v47 = alloca(v45); + v57 = v51; +LABEL_50: + if ( v54 ) + goto LABEL_9; +LABEL_51: + v17 = v57; + goto LABEL_52; + } + goto LABEL_46; + } + v53 = *(_DWORD *)(a5 + 8); + if ( v53 >= v8 ) + v8 = v53; + v9 = 16 * ((unsigned int)(v8 + 27) >> 4); + v10 = alloca(v9); + v11 = 15; + v12 = alloca(v9); + v60 = 4; + v57 = v51; +LABEL_8: + if ( !v54 ) + goto LABEL_51; +LABEL_9: + LOBYTE(Size) = v11; + v52 = v7; + v13 = (int)v57; + v14 = __PAIR64__(v54, HIDWORD(v54)); + LOBYTE(v58) = v56 & 0x20; + do + { + ++v13; + v15 = v58 | ((BYTE4(v14) & Size) + 55); + v16 = v60; + if ( (unsigned __int8)((BYTE4(v14) & Size) + 48) < 0x3Au ) + v15 = (BYTE4(v14) & Size) + 48; + HIDWORD(v14) = __PAIR64__(v14, HIDWORD(v14)) >> v60; + *(_BYTE *)(v13 - 1) = v15; + LODWORD(v14) = (unsigned int)v14 >> v16; + if ( (v16 & 0x20) != 0 ) + HIDWORD(v14) = v14; + if ( (v16 & 0x20) != 0 ) + LODWORD(v14) = 0; + } + while ( v14 ); + v17 = (char *)v13; + v7 = v52; + v5 = a5; + if ( v17 == v57 ) + { +LABEL_52: + v32 = v55; + v33 = v7; + v34 = v17 - v57; + BYTE1(v33) = BYTE1(v7) & 0xF7; + *(_DWORD *)(v5 + 4) = v33; + v18 = v32 - v34; + if ( v32 <= 0 ) + goto LABEL_78; + goto LABEL_53; + } + if ( v55 <= 0 || (v18 = v55 - (v17 - v57), v18 <= 0) ) + { + if ( v56 != 111 || (v52 & 0x800) == 0 ) + goto LABEL_21; + *v17++ = 48; +LABEL_78: + if ( v17 == v57 ) + { + result = 0; + if ( v55 ) + goto LABEL_56; +LABEL_22: + v20 = v53; + if ( result < v53 ) + goto LABEL_57; + goto LABEL_23; + } +LABEL_21: + result = v17 - v57; + goto LABEL_22; + } +LABEL_53: + v35 = 1; + v49 = v17; + if ( v18 > 0 ) + v35 = v18; + v17 += v35; + memset(v49, 48, v35); + if ( v17 != v57 ) + goto LABEL_21; +LABEL_56: + v20 = v53; + *v17 = 48; + result = ++v17 - v57; + if ( result < v20 ) + { +LABEL_57: + v21 = v56 == 111; + v36 = v20 - result; + Size = v36; + *(_DWORD *)(v5 + 8) = v36; + v23 = *(_DWORD *)(v5 + 4); + if ( v21 ) + { + if ( v55 >= 0 || (*(_DWORD *)(v5 + 4) & 0x600) != 512 ) + { + v37 = Size - 1; + if ( (v23 & 0x400) != 0 ) + { + if ( v17 > v57 ) + { +LABEL_88: + v58 = v37; + v22 = (unsigned int)v57; + goto LABEL_31; + } +LABEL_84: + v26 = v37; + goto LABEL_40; + } + goto LABEL_64; + } + } + else + { + if ( (v23 & 0x800) != 0 ) + { + Size = v36 - 2; + if ( (int)(v36 - 2) <= 0 || v55 >= 0 ) + goto LABEL_61; + } + else if ( v55 >= 0 ) + { + goto LABEL_86; + } + if ( (v23 & 0x600) != 512 ) + { + if ( (v23 & 0x800) == 0 ) + { +LABEL_86: + v37 = Size - 1; + if ( (v23 & 0x400) != 0 ) + goto LABEL_87; +LABEL_64: + v38 = v37; + do + { + __pformat_putc(32, v5); + result = v38--; + } + while ( result > 0 ); +LABEL_66: + if ( v17 > v57 ) + { + v23 = *(_DWORD *)(v5 + 4); + v22 = (unsigned int)v57; + Size = -1; + v58 = -2; + goto LABEL_31; + } + return result; + } +LABEL_61: + result = (unsigned __int8)v56; + v17[1] = 48; + v17 += 2; + *(v17 - 2) = result; + goto LABEL_62; + } + } + v58 = Size - 1; + v60 = Size; + result = (int)memset(v17, 48, Size); + v17 += v60; + Size = v58 - Size; + if ( v56 == 111 || (v23 & 0x800) == 0 ) + { +LABEL_62: + if ( (int)Size > 0 ) + { + v23 = *(_DWORD *)(v5 + 4); + v37 = Size - 1; + if ( (v23 & 0x400) == 0 ) + goto LABEL_64; +LABEL_87: + if ( v57 < v17 ) + goto LABEL_88; + goto LABEL_84; + } + goto LABEL_26; + } + goto LABEL_61; + } +LABEL_23: + v21 = v56 == 111; + *(_DWORD *)(v5 + 8) = -1; + if ( v21 ) + goto LABEL_66; + Size = -1; + if ( (*(_BYTE *)(v5 + 5) & 8) != 0 ) + { + result = (unsigned __int8)v56; + v17[1] = 48; + v17 += 2; + *(v17 - 2) = result; + } +LABEL_26: + v22 = (unsigned int)v57; + if ( v17 <= v57 ) + return result; + v23 = *(_DWORD *)(v5 + 4); + v58 = Size - 1; +LABEL_31: + while ( 1 ) + { + --v17; + if ( (v23 & 0x4000) != 0 ) + break; + v24 = *(_DWORD *)(v5 + 32); + if ( *(_DWORD *)(v5 + 36) > v24 ) + break; +LABEL_29: + result = v24 + 1; + *(_DWORD *)(v5 + 32) = result; + if ( (unsigned int)v17 <= v22 ) + goto LABEL_35; +LABEL_30: + v23 = *(_DWORD *)(v5 + 4); + } + v25 = *v17; + if ( (v23 & 0x2000) == 0 ) + { + *(_BYTE *)(*(_DWORD *)v5 + *(_DWORD *)(v5 + 32)) = v25; + v24 = *(_DWORD *)(v5 + 32); + goto LABEL_29; + } + v50 = *(FILE **)v5; + v60 = v22; + fputc(v25, v50); + v22 = v60; + result = *(_DWORD *)(v5 + 32) + 1; + *(_DWORD *)(v5 + 32) = result; + if ( (unsigned int)v17 > v22 ) + goto LABEL_30; +LABEL_35: + if ( (int)Size > 0 ) + { + v23 = *(_DWORD *)(v5 + 4); + v26 = v58; +LABEL_40: + while ( 2 ) + { + if ( (v23 & 0x4000) != 0 || (v27 = *(_DWORD *)(v5 + 32), *(_DWORD *)(v5 + 36) > v27) ) + { + if ( (v23 & 0x2000) != 0 ) + { + fputc(32, *(FILE **)v5); + ++*(_DWORD *)(v5 + 32); + result = v26 - 1; + if ( v26 <= 0 ) + return result; + goto LABEL_39; + } + *(_BYTE *)(*(_DWORD *)v5 + *(_DWORD *)(v5 + 32)) = 32; + v27 = *(_DWORD *)(v5 + 32); + } + *(_DWORD *)(v5 + 32) = v27 + 1; + result = v26 - 1; + if ( v26 <= 0 ) + return result; +LABEL_39: + v23 = *(_DWORD *)(v5 + 4); + v26 = result; + continue; + } + } + return result; +} + +//----- (004671C0) -------------------------------------------------------- +int __cdecl __pformat_int(__int64 a1, int a2, int a3, int a4) +{ + int v4; // ecx + int v5; // ebx + int v6; // esi + int v7; // ecx + int v8; // eax + void *v9; // esp + void *v10; // esp + unsigned int v11; // edi + int v12; // esi + char *v13; // ebx + char *v14; // ecx + unsigned __int64 v15; // kr08_8 + char *v16; // edi + char *v17; // esi + int v18; // eax + size_t v19; // edx + int v20; // eax + int v21; // edx + unsigned int v22; // ecx + int v23; // edi + char *v24; // esi + int v25; // eax + int v26; // eax + int result; // eax + int v28; // edx + int v29; // ecx + int v30; // edx + int v31; // eax + int v32; // eax + signed int v33; // ecx + int v34; // ecx + int v36; // [esp+10h] [ebp-48h] BYREF + int v37; // [esp+18h] [ebp-40h] + char *v38; // [esp+1Ch] [ebp-3Ch] + __int64 v39; // [esp+20h] [ebp-38h] + int v40; // [esp+28h] [ebp-30h] + char *v41; // [esp+2Ch] [ebp-2Ch] + __int64 v42; // [esp+30h] [ebp-28h] + int v43; // [esp+38h] [ebp-20h] + int v44; // [esp+3Ch] [ebp-1Ch] + + v4 = 0; + v5 = a4; + v42 = a1; + v6 = *(_DWORD *)(a4 + 4); + v43 = a2; + v44 = a3; + v39 = a1; + v37 = *(_DWORD *)(a4 + 12); + if ( v37 >= 0 ) + v4 = v37; + v7 = v4 + 23; + if ( (v6 & 0x1000) != 0 && *(_WORD *)(a4 + 28) ) + v7 += v7 / 3u; + v40 = *(_DWORD *)(a4 + 8); + if ( v40 >= v7 ) + v7 = v40; + v8 = 16 * ((unsigned int)(v7 + 27) >> 4); + v9 = alloca(v8); + v10 = alloca(v8); + v41 = (char *)&v36; + if ( (v6 & 0x80) != 0 ) + { + if ( v39 < 0 ) + { + v12 = -(int)v39; + v11 = (unsigned __int64)-v39 >> 32; +LABEL_12: + v38 = v41 + 1; + v13 = v41; + while ( 1 ) + { + if ( v41 == v13 ) + { + v14 = v41; + v13 = v38; + } + else + { + v14 = v13 + 1; + if ( (*(_BYTE *)(a4 + 5) & 0x10) != 0 && *(_WORD *)(a4 + 28) && ((v13 - v41) & 0x80000003) == 3 ) + { + *v13 = 44; + v13 += 2; + } + else + { + v14 = v13++; + } + } + LODWORD(v39) = v14; + *v14 = __PAIR64__(v11, v12) % 0xA + 48; + if ( __PAIR64__(v11, v12) <= 9 ) + break; + v15 = __PAIR64__(v11, v12) / 0xA; + v11 = (__PAIR64__(v11, v12) / 0xA) >> 32; + v12 = v15; + } + v16 = v13; + v17 = v13; + v5 = a4; + if ( v37 > 0 ) + { + v18 = v37 - (v16 - v41); + if ( v18 <= 0 ) + goto LABEL_26; + goto LABEL_23; + } + if ( v41 != v16 ) + goto LABEL_27; + goto LABEL_64; + } + *(_DWORD *)(a4 + 4) = v6 & 0xFFFFFF7F; + } + v11 = HIDWORD(v39); + v12 = v39; + if ( v39 ) + goto LABEL_12; + v17 = v41; + v18 = v37; + if ( v37 > 0 ) + { +LABEL_23: + v19 = 1; + if ( v18 > 0 ) + v19 = v18; + LODWORD(v39) = v19; + memset(v17, 48, v19); + v17 += v39; +LABEL_26: + if ( v41 != v17 ) + goto LABEL_27; + goto LABEL_68; + } +LABEL_64: + if ( !v37 ) + { + v21 = *(_DWORD *)(v5 + 4); + if ( v40 <= 0 ) + goto LABEL_33; + if ( (v21 & 0x1C0) == 0 ) + goto LABEL_32; + goto LABEL_30; + } +LABEL_68: + *v17++ = 48; +LABEL_27: + if ( v40 <= 0 ) + goto LABEL_61; + v40 -= v17 - v41; + v20 = v40; + v21 = *(_DWORD *)(v5 + 4); + *(_DWORD *)(v5 + 8) = v40; + if ( v20 <= 0 ) + goto LABEL_33; + if ( (v21 & 0x1C0) != 0 ) +LABEL_30: + *(_DWORD *)(v5 + 8) = v40 - 1; + if ( v37 >= 0 || (v21 & 0x600) != 512 ) + { +LABEL_32: + if ( (v21 & 0x400) != 0 ) + goto LABEL_33; + v31 = *(_DWORD *)(v5 + 8); + *(_DWORD *)(v5 + 8) = v31 - 1; + if ( v31 <= 0 ) + goto LABEL_33; + do + { + __pformat_putc(32, v5); + v32 = *(_DWORD *)(v5 + 8); + *(_DWORD *)(v5 + 8) = v32 - 1; + } + while ( v32 > 0 ); +LABEL_61: + v21 = *(_DWORD *)(v5 + 4); + goto LABEL_33; + } + v33 = *(_DWORD *)(v5 + 8); + *(_DWORD *)(v5 + 8) = v33 - 1; + if ( v33 > 0 ) + { + v40 = v21; + LODWORD(v39) = v33; + memset(v17, 48, v33); + v34 = v39; + LOWORD(v21) = v40; + *(_DWORD *)(v5 + 8) = -1; + v17 += v34; + } +LABEL_33: + if ( (v21 & 0x80u) == 0 ) + { + if ( (v21 & 0x100) != 0 ) + { + *v17 = 43; + v22 = (unsigned int)(v17 + 1); + } + else + { + v22 = (unsigned int)v17; + if ( (v21 & 0x40) != 0 ) + { + *v17 = 32; + v22 = (unsigned int)(v17 + 1); + } + } + } + else + { + *v17 = 45; + v22 = (unsigned int)(v17 + 1); + } + v23 = (int)v41; + if ( v22 > (unsigned int)v41 ) + { + v24 = (char *)v22; + while ( 1 ) + { + --v24; + if ( (v21 & 0x4000) == 0 ) + { + v25 = *(_DWORD *)(v5 + 32); + if ( *(_DWORD *)(v5 + 36) <= v25 ) + goto LABEL_38; + } + v26 = *v24; + if ( (v21 & 0x2000) == 0 ) + break; + fputc(v26, *(FILE **)v5); + ++*(_DWORD *)(v5 + 32); + if ( (char *)v23 == v24 ) + goto LABEL_44; +LABEL_39: + v21 = *(_DWORD *)(v5 + 4); + } + *(_BYTE *)(*(_DWORD *)v5 + *(_DWORD *)(v5 + 32)) = v26; + v25 = *(_DWORD *)(v5 + 32); +LABEL_38: + *(_DWORD *)(v5 + 32) = v25 + 1; + if ( (char *)v23 == v24 ) + goto LABEL_44; + goto LABEL_39; + } +LABEL_44: + result = *(_DWORD *)(v5 + 8); + while ( 1 ) + { + v28 = result--; + *(_DWORD *)(v5 + 8) = result; + if ( v28 <= 0 ) + break; + v29 = *(_DWORD *)(v5 + 4); + if ( (v29 & 0x4000) != 0 || (v30 = *(_DWORD *)(v5 + 32), *(_DWORD *)(v5 + 36) > v30) ) + { + if ( (v29 & 0x2000) != 0 ) + fputc(32, *(FILE **)v5); + else + *(_BYTE *)(*(_DWORD *)v5 + *(_DWORD *)(v5 + 32)) = 32; + v30 = *(_DWORD *)(v5 + 32); + result = *(_DWORD *)(v5 + 8); + } + *(_DWORD *)(v5 + 32) = v30 + 1; + } + return result; +} + +//----- (004675E0) -------------------------------------------------------- +int __usercall __pformat_emit_radix_point@(int a1@) +{ + wchar_t v2; // dx + int v3; // eax + int v4; // eax + void *v5; // esp + void *v6; // esp + char *v7; // esi + signed int v8; // eax + char *v9; // edi + int result; // eax + int v11; // edx + FILE *v12; // ecx + struct lconv *v13; // eax + signed int v14; // eax + int v15; // [esp+0h] [ebp-48h] BYREF + char Dest[12]; // [esp+10h] [ebp-38h] BYREF + int *v17; // [esp+1Ch] [ebp-2Ch] + wchar_t DstCh; // [esp+26h] [ebp-22h] BYREF + mbstate_t State; // [esp+28h] [ebp-20h] BYREF + + if ( *(_DWORD *)(a1 + 16) == -3 ) + { + State._Wchar = 0; + *(_DWORD *)&State._Byte = 0; + v13 = localeconv(); + v14 = mbrtowc(&DstCh, v13->decimal_point, 0x10u, &State); + if ( v14 <= 0 ) + { + v2 = *(_WORD *)(a1 + 20); + } + else + { + v2 = DstCh; + *(_WORD *)(a1 + 20) = DstCh; + } + *(_DWORD *)(a1 + 16) = v14; + } + else + { + v2 = *(_WORD *)(a1 + 20); + } + if ( !v2 ) + return __pformat_putc(46, a1); + v3 = *(_DWORD *)(a1 + 16); + v17 = &v15; + v4 = 16 * ((unsigned int)(v3 + 15) >> 4); + v5 = alloca(v4); + v6 = alloca(v4); + State._Wchar = 0; + v7 = Dest; + *(_DWORD *)&State._Byte = 0; + v8 = wcrtomb(Dest, v2, &State); + if ( v8 > 0 ) + { + v9 = &Dest[v8]; + while ( 1 ) + { + result = *(_DWORD *)(a1 + 4); + ++v7; + if ( (result & 0x4000) == 0 ) + { + v11 = *(_DWORD *)(a1 + 32); + if ( *(_DWORD *)(a1 + 36) <= v11 ) + goto LABEL_7; + } + v12 = *(FILE **)a1; + if ( (result & 0x2000) != 0 ) + { + result = fputc(*(v7 - 1), v12); + ++*(_DWORD *)(a1 + 32); + if ( v7 == v9 ) + return result; + } + else + { + result = *(_DWORD *)(a1 + 32); + *((_BYTE *)&v12->_ptr + result) = *(v7 - 1); + v11 = *(_DWORD *)(a1 + 32); +LABEL_7: + *(_DWORD *)(a1 + 32) = v11 + 1; + if ( v7 == v9 ) + return result; + } + } + } + return __pformat_putc(46, a1); +} +// 4675E0: using guessed type char Dest[12]; + +//----- (00467730) -------------------------------------------------------- +int __usercall __pformat_emit_float@(int a1@, char *a2@, int a3@, int a4) +{ + int v7; // ecx + int v8; // ecx + int v9; // eax + int v10; // eax + int v11; // eax + char v12; // dl + int v13; // eax + int v14; // eax + int v15; // ecx + int v16; // eax + int v17; // eax + int result; // eax + char v19; // dl + int v20; // eax + int v21; // eax + int v22; // eax + int v23; // edx + unsigned int v24; // [esp+Ch] [ebp-20h] + + v7 = *(_DWORD *)(a4 + 8); + if ( a3 <= 0 ) + { + if ( v7 <= 0 ) + { + if ( v7 ) + { + *(_DWORD *)(a4 + 8) = -1; + goto LABEL_9; + } + } + else + { + --v7; + } + v14 = *(_DWORD *)(a4 + 12); + if ( v7 <= v14 ) + { + *(_DWORD *)(a4 + 8) = -1; + goto LABEL_9; + } + } + else if ( a3 > v7 || (v14 = *(_DWORD *)(a4 + 12), v7 -= a3, v7 <= v14) ) + { + *(_DWORD *)(a4 + 8) = -1; + v8 = -1; + if ( (*(_BYTE *)(a4 + 5) & 0x10) == 0 ) + goto LABEL_9; +LABEL_4: + if ( !*(_WORD *)(a4 + 28) ) + goto LABEL_28; + goto LABEL_5; + } + v8 = v7 - v14; + *(_DWORD *)(a4 + 8) = v8; + if ( v14 > 0 || (v21 = *(_DWORD *)(a4 + 4), (v21 & 0x800) != 0) ) + { + *(_DWORD *)(a4 + 8) = --v8; + if ( a3 <= 0 || (*(_BYTE *)(a4 + 5) & 0x10) == 0 ) + goto LABEL_28; + goto LABEL_4; + } + if ( a3 > 0 && (v21 & 0x1000) != 0 && *(_WORD *)(a4 + 28) ) + { +LABEL_5: + v9 = v8; + v24 = (a3 + 2) / 3u; + if ( v24 != 1 ) + { + while ( v9 > 0 ) + { + *(_DWORD *)(a4 + 8) = --v9; + if ( !(v9 + v24 - 1 - v8) ) + { + v8 = v9; + goto LABEL_28; + } + } + goto LABEL_9; + } +LABEL_28: + if ( v8 > 0 ) + goto LABEL_29; +LABEL_9: + if ( !a1 ) + { +LABEL_10: + v10 = *(_DWORD *)(a4 + 4); + goto LABEL_11; + } + goto LABEL_52; + } +LABEL_29: + if ( a1 ) + { + v15 = v8 - 1; + *(_DWORD *)(a4 + 8) = v15; + if ( v15 && (*(_DWORD *)(a4 + 4) & 0x600) == 0 ) + goto LABEL_33; +LABEL_52: + __pformat_putc(45, a4); + goto LABEL_14; + } + v10 = *(_DWORD *)(a4 + 4); + if ( (v10 & 0x1C0) != 0 ) + { + v15 = v8 - 1; + *(_DWORD *)(a4 + 8) = v15; + if ( v15 && (v10 & 0x600) == 0 ) + { +LABEL_33: + *(_DWORD *)(a4 + 8) = v15 - 1; + do + { +LABEL_34: + __pformat_putc(32, a4); + v16 = *(_DWORD *)(a4 + 8); + *(_DWORD *)(a4 + 8) = v16 - 1; + } + while ( v16 > 0 ); + if ( a1 ) + goto LABEL_52; + goto LABEL_10; + } + } + else if ( (v10 & 0x600) == 0 ) + { + v23 = *(_DWORD *)(a4 + 8); + *(_DWORD *)(a4 + 8) = v23 - 1; + if ( v23 > 0 ) + goto LABEL_34; + } +LABEL_11: + if ( (v10 & 0x100) != 0 ) + { + __pformat_putc(43, a4); + } + else if ( (v10 & 0x40) != 0 ) + { + __pformat_putc(32, a4); + } +LABEL_14: + v11 = *(_DWORD *)(a4 + 8); + if ( v11 > 0 && (*(_DWORD *)(a4 + 4) & 0x600) == 512 ) + { + *(_DWORD *)(a4 + 8) = v11 - 1; + do + { + __pformat_putc(48, a4); + v22 = *(_DWORD *)(a4 + 8); + *(_DWORD *)(a4 + 8) = v22 - 1; + } + while ( v22 > 0 ); + } + if ( a3 <= 0 ) + { + __pformat_putc(48, a4); + v17 = *(_DWORD *)(a4 + 12); + if ( v17 > 0 || (*(_BYTE *)(a4 + 5) & 8) != 0 ) + { + __pformat_emit_radix_point(a4); + if ( !a3 ) + goto LABEL_44; + v17 = *(_DWORD *)(a4 + 12); + } + else if ( !a3 ) + { +LABEL_39: + result = v17 - 1; + *(_DWORD *)(a4 + 12) = result; + return result; + } + *(_DWORD *)(a4 + 12) = a3 + v17; + do + { + __pformat_putc(48, a4); + ++a3; + } + while ( a3 ); + } + else + { + while ( 1 ) + { + v12 = *a2; + v13 = 48; + if ( *a2 ) + { + ++a2; + v13 = v12; + } + __pformat_putc(v13, a4); + if ( !--a3 ) + break; + if ( (*(_BYTE *)(a4 + 5) & 0x10) != 0 && *(_WORD *)(a4 + 28) && (unsigned int)(-1431655765 * a3) <= 0x55555555 ) + __pformat_wputchars(a4 + 28, 1, a4); + } + v17 = *(_DWORD *)(a4 + 12); + if ( v17 <= 0 && (*(_BYTE *)(a4 + 5) & 8) == 0 ) + goto LABEL_39; + __pformat_emit_radix_point(a4); + } +LABEL_44: + while ( 1 ) + { + result = *(_DWORD *)(a4 + 12); + *(_DWORD *)(a4 + 12) = result - 1; + if ( result <= 0 ) + break; + v19 = *a2; + v20 = 48; + if ( *a2 ) + { + ++a2; + v20 = v19; + } + __pformat_putc(v20, a4); + } + return result; +} + +//----- (00467AE0) -------------------------------------------------------- +int __usercall __pformat_emit_efloat@(int a1@, char *a2@, int a3@, _DWORD *a4) +{ + int v4; // ecx + int i; // ebx + int v6; // eax + int v7; // ecx + int v8; // eax + int v9; // edx + __int64 v12; // [esp+30h] [ebp-2Ch] + int v13; // [esp+38h] [ebp-24h] + int v14; // [esp+3Ch] [ebp-20h] + + v12 = a3 - 1; + v4 = (int)v12 / 10; + for ( i = 1; v4; v4 /= 10 ) + ++i; + v6 = a4[10]; + if ( v6 == -1 ) + { + a4[10] = 2; + v6 = 2; + } + v7 = a4[2]; + if ( i < v6 ) + i = v6; + v8 = v7 - (i + 2); + if ( v7 <= i + 2 ) + v8 = -1; + a4[2] = v8; + __pformat_emit_float(a1, a2, 1, (int)a4); + a4[3] = a4[10]; + v9 = a4[1]; + a4[1] = v9 | 0x1C0; + __pformat_putc(v9 & 0x20 | 0x45, (int)a4); + a4[2] += i + 1; + return __pformat_int(v12, v13, v14, (int)a4); +} +// 467BC2: variable 'v13' is possibly undefined +// 467BC2: variable 'v14' is possibly undefined + +//----- (00467BD0) -------------------------------------------------------- +void __usercall __pformat_efloat(_DWORD *a1@, long double a2) +{ + int v3; // eax + int v4; // eax + int *v5; // eax + int *v6; // esi + int v7; // [esp+28h] [ebp-24h] BYREF + int v8; // [esp+2Ch] [ebp-20h] BYREF + long double v9; // [esp+30h] [ebp-1Ch] + int v10; // [esp+3Ch] [ebp-10h] + + v3 = a1[3]; + if ( v3 < 0 ) + { + a1[3] = 6; + v4 = 7; + } + else + { + v4 = v3 + 1; + } + v9 = a2; + v5 = __pformat_cvt(2, *(__int64 *)&v9, SHIDWORD(v9), v10, v4, &v8, &v7); + v6 = v5; + if ( v8 == -32768 ) + __pformat_emit_inf_or_nan(v7, (int)v5, (int)a1); + else + __pformat_emit_efloat(v7, (char *)v5, v8, a1); + __freedtoa(v6); +} + +//----- (00467C80) -------------------------------------------------------- +void __usercall __pformat_float(int a1@, long double a2) +{ + int v3; // eax + int *v4; // eax + int *v5; // esi + int v6; // eax + int v7; // edx + int v8; // ecx + int v9; // edx + int v10; // [esp+28h] [ebp-24h] BYREF + int v11; // [esp+2Ch] [ebp-20h] BYREF + long double v12; // [esp+30h] [ebp-1Ch] + int v13; // [esp+3Ch] [ebp-10h] + + v3 = *(_DWORD *)(a1 + 12); + if ( v3 < 0 ) + { + *(_DWORD *)(a1 + 12) = 6; + v3 = 6; + } + v12 = a2; + v4 = __pformat_cvt(3, *(__int64 *)&v12, SHIDWORD(v12), v13, v3, &v11, &v10); + v5 = v4; + if ( v11 == -32768 ) + { + __pformat_emit_inf_or_nan(v10, (int)v4, a1); + } + else + { + __pformat_emit_float(v10, (char *)v4, v11, a1); + v6 = *(_DWORD *)(a1 + 8); + while ( 1 ) + { + v7 = v6--; + *(_DWORD *)(a1 + 8) = v6; + if ( v7 <= 0 ) + break; + v8 = *(_DWORD *)(a1 + 4); + if ( (v8 & 0x4000) != 0 || (v9 = *(_DWORD *)(a1 + 32), *(_DWORD *)(a1 + 36) > v9) ) + { + if ( (v8 & 0x2000) != 0 ) + fputc(32, *(FILE **)a1); + else + *(_BYTE *)(*(_DWORD *)a1 + *(_DWORD *)(a1 + 32)) = 32; + v9 = *(_DWORD *)(a1 + 32); + v6 = *(_DWORD *)(a1 + 8); + } + *(_DWORD *)(a1 + 32) = v9 + 1; + } + } + __freedtoa(v5); +} + +//----- (00467D70) -------------------------------------------------------- +void __usercall __pformat_gfloat(_DWORD *a1@, long double a2) +{ + int v3; // eax + int *v4; // eax + int v5; // edi + int *Str; // esi + int v7; // eax + int v8; // edx + int v9; // eax + int v10; // eax + int v11; // eax + int v12; // edx + int v13; // [esp+28h] [ebp-24h] BYREF + int v14; // [esp+2Ch] [ebp-20h] BYREF + long double v15; // [esp+30h] [ebp-1Ch] + int v16; // [esp+3Ch] [ebp-10h] + + v3 = a1[3]; + if ( v3 < 0 ) + { + a1[3] = 6; + v3 = 6; + } + else if ( !v3 ) + { + a1[3] = 1; + v3 = 1; + } + v15 = a2; + v4 = __pformat_cvt(2, *(__int64 *)&v15, SHIDWORD(v15), v16, v3, &v14, &v13); + v5 = v14; + Str = v4; + if ( v14 == -32768 ) + { + __pformat_emit_inf_or_nan(v13, (int)v4, (int)a1); + __freedtoa(Str); + } + else + { + v7 = a1[1] & 0x800; + if ( v14 < -3 || (v8 = a1[3], v14 > v8) ) + { + if ( v7 ) + v10 = a1[3] - 1; + else + v10 = strlen((const char *)Str) - 1; + a1[3] = v10; + __pformat_emit_efloat(v13, (char *)Str, v5, a1); + __freedtoa(Str); + } + else + { + if ( v7 ) + { + a1[3] = v8 - v14; + } + else + { + v11 = strlen((const char *)Str) - v14; + a1[3] = v11; + if ( v11 < 0 ) + { + v12 = a1[2]; + if ( v12 > 0 ) + a1[2] = v12 + v11; + } + } + __pformat_emit_float(v13, (char *)Str, v5, (int)a1); + while ( 1 ) + { + v9 = a1[2]; + a1[2] = v9 - 1; + if ( v9 <= 0 ) + break; + __pformat_putc(32, (int)a1); + } + __freedtoa(Str); + } + } +} + +//----- (00467F00) -------------------------------------------------------- +int __usercall __pformat_xldouble@(int a1@, long double a2) +{ + __int16 v3; // fps + __int16 v5; // fps + int v9; // ebp + unsigned int v10; // edi + char *v11; // eax + char *v12; // esi + int v13; // edx + int v14; // eax + int v15; // edi + int v16; // ecx + int v17; // ebp + int v18; // eax + int v19; // eax + int v20; // eax + int v21; // eax + char v22; // cl + __int64 v23; // rax + unsigned int v24; // edi + unsigned int v25; // esi + unsigned __int64 v26; // kr08_8 + char v27; // cl + unsigned int v28; // esi + int v29; // edi + int v30; // ecx + __int16 v31; // dx + char v32; // cl + char v33; // al + unsigned int v34; // eax + int v35; // ecx + int v37; // eax + int v38; // eax + __int16 v39; // dx + int v40; // ecx + int v41; // esi + int v42; // eax + unsigned int v43; // [esp+24h] [ebp-88h] + int v44; // [esp+24h] [ebp-88h] + int v45; // [esp+2Ch] [ebp-80h] + __int16 v46; // [esp+30h] [ebp-7Ch] + char *v47; // [esp+30h] [ebp-7Ch] + int v48; // [esp+34h] [ebp-78h] + __int64 v51[2]; // [esp+68h] [ebp-44h] BYREF + char v52; // [esp+78h] [ebp-34h] BYREF + char v53; // [esp+79h] [ebp-33h] BYREF + + _FST7 = a2; + __asm { fxam } + if ( (v3 & 0x4500) == 256 ) + return __pformat_emit_inf_or_nan(0, (int)&off_55A9C7, a1); + if ( (SWORD4(a2) & 0x8000u) != 0 ) + *(_DWORD *)(a1 + 4) |= 0x80u; + __asm { fxam } + if ( (v5 & 0x4500) == 1280 ) + return __pformat_emit_inf_or_nan(WORD4(a2) & 0x8000, (int)&off_55A9CB, a1); + v9 = DWORD1(a2); + v10 = LODWORD(a2); + v46 = WORD4(a2) & 0x7FFF; + if ( (WORD4(a2) & 0x7FFF) != 0 ) + { + v46 -= 0x3FFF; + v43 = *(_DWORD *)(a1 + 12); + if ( v43 <= 0xE ) + goto LABEL_40; + v45 = *(_DWORD *)(a1 + 4); + if ( !*(_QWORD *)&a2 ) + goto LABEL_9; + goto LABEL_53; + } + if ( !*(_QWORD *)&a2 ) + { + v43 = *(_DWORD *)(a1 + 12); + if ( v43 > 0xE ) + { + v45 = *(_DWORD *)(a1 + 4); +LABEL_9: + if ( *(int *)(a1 + 12) > 0 || (v11 = &v52, (v45 & 0x800) != 0) ) + { + v52 = 46; + v11 = &v53; + } + *v11 = 48; + v12 = v11 + 1; + v48 = *(_DWORD *)(a1 + 8); + if ( v48 > 0 ) + goto LABEL_12; +LABEL_87: + v17 = 2; + v44 = v46; + if ( (v45 & 0x80u) == 0 ) + goto LABEL_21; + goto LABEL_88; + } + do + { + v9 = __PAIR64__(v9, v10) >> 31; + v10 *= 2; +LABEL_40: + ; + } + while ( v9 >= 0 ); + goto LABEL_41; + } + if ( (SDWORD1(a2) & 0x80000000) != 0 ) + { + v46 = -16382; + } + else + { + v38 = -16383; + do + { + v9 = __PAIR64__(v9, v10) >> 31; + v39 = v38; + v10 *= 2; + --v38; + } + while ( v9 >= 0 ); + v46 = v39; + } + v43 = *(_DWORD *)(a1 + 12); + if ( v43 <= 0xE ) + { +LABEL_41: + v22 = 4 * (14 - v43); + v23 = 4LL << (v22 & 0x1F); + if ( (v22 & 0x20) != 0 ) + HIDWORD(v23) = 4LL << (v22 & 0x1F); + if ( (v22 & 0x20) != 0 ) + LODWORD(v23) = 0; + v26 = v23 + (__PAIR64__(v9, v10) >> 1); + v24 = HIDWORD(v26); + v25 = v26; + if ( (v26 & 0x8000000000000000LL) != 0LL ) + { + ++v46; + } + else + { + v24 = v26 >> 31; + v25 = 2 * v26; + } + v27 = 4 * (15 - v43); + v28 = __PAIR64__(v24, v25) >> v27; + v29 = v24 >> v27; + v30 = v27 & 0x20; + if ( v30 ) + v28 = v29; + if ( v30 ) + v29 = 0; + v9 = v29; + v10 = v28; + } + v45 = *(_DWORD *)(a1 + 4); +LABEL_53: + v12 = &v52; + v31 = v46; + do + { + v34 = v10 & 0xF; + if ( v10 & 0xFFFFFFF0 | v9 ) + { + v10 = __PAIR64__(v9, v10) >> 4; + v9 = (unsigned int)v9 >> 4; + v35 = *(_DWORD *)(a1 + 12); + if ( v35 > 0 ) + *(_DWORD *)(a1 + 12) = v35 - 1; + } + else + { + if ( v12 > &v52 || (v45 & 0x800) != 0 || *(int *)(a1 + 12) > 0 ) + *v12++ = 46; + if ( v9 | v10 ^ 1 ) + { + v40 = (unsigned __int16)(v31 - 1); + v47 = v12; + v41 = v10 & 0xF; + do + { + v10 = __PAIR64__(v9, v10) >> 1; + v9 = (unsigned int)v9 >> 1; + v31 = v40--; + } + while ( v10 ^ 1 | v9 ); + v34 = v41; + v10 = 0; + v12 = v47; + v9 = 0; + } + else + { + v10 = 0; + v9 = 0; + } + } + if ( v34 ) + { + v32 = v34; + if ( v34 <= 9 ) +LABEL_56: + v33 = v32 + 48; + else + v33 = v45 & 0x20 | (v34 + 55); + *v12++ = v33; + continue; + } + v32 = 0; + if ( v12 > &v52 || *(int *)(a1 + 12) >= 0 ) + goto LABEL_56; + } + while ( v10 | v9 ); + v46 = v31; + if ( v12 == &v52 ) + goto LABEL_9; + v48 = *(_DWORD *)(a1 + 8); + if ( v48 <= 0 ) + goto LABEL_87; +LABEL_12: + v13 = *(_DWORD *)(a1 + 12); + v14 = v12 - &v52; + if ( v13 > 0 ) + v14 = v12 - &v52 + v13; + v44 = v46; + v15 = v14 - (((v45 & 0x1C0) == 0) - 6); + v16 = v46 / 10; + if ( v16 ) + { + do + { + ++v15; + v16 /= 10; + } + while ( v16 ); + v17 = (__int16)(v15 + 2 - (v14 - (((v45 & 0x1C0) == 0) - 6))); + } + else + { + v17 = 2; + } + if ( v48 <= v15 ) + { + *(_DWORD *)(a1 + 8) = -1; + } + else + { + v18 = v48 - v15; + if ( (v45 & 0x600) != 0 ) + { + *(_DWORD *)(a1 + 8) = v18; + } + else + { + *(_DWORD *)(a1 + 8) = v18 - 1; + if ( v18 > 0 ) + { + do + { + __pformat_putc(32, a1); + v42 = *(_DWORD *)(a1 + 8); + *(_DWORD *)(a1 + 8) = v42 - 1; + } + while ( v42 > 0 ); + v45 = *(_DWORD *)(a1 + 4); + } + } + } + if ( (v45 & 0x80u) != 0 ) + { +LABEL_88: + __pformat_putc(45, a1); + goto LABEL_24; + } +LABEL_21: + if ( (v45 & 0x100) != 0 ) + { + __pformat_putc(43, a1); + } + else if ( (v45 & 0x40) != 0 ) + { + __pformat_putc(32, a1); + } +LABEL_24: + __pformat_putc(48, a1); + __pformat_putc(*(_DWORD *)(a1 + 4) & 0x20 | 0x58, a1); + v19 = *(_DWORD *)(a1 + 8); + if ( v19 > 0 && (*(_BYTE *)(a1 + 5) & 2) != 0 ) + { + *(_DWORD *)(a1 + 8) = v19 - 1; + do + { + __pformat_putc(48, a1); + v20 = *(_DWORD *)(a1 + 8); + *(_DWORD *)(a1 + 8) = v20 - 1; + } + while ( v20 > 0 ); + } + if ( v12 > &v52 ) + { + do + { + v21 = *--v12; + if ( v21 == 46 ) + { + __pformat_emit_radix_point(a1); + } + else if ( v21 == 44 ) + { + LOWORD(v51[0]) = *(_WORD *)(a1 + 28); + if ( LOWORD(v51[0]) ) + __pformat_wputchars((int)v51, 1, a1); + } + else + { + __pformat_putc(v21, a1); + } + } + while ( v12 != &v52 ); + } + while ( 1 ) + { + v37 = *(_DWORD *)(a1 + 12); + *(_DWORD *)(a1 + 12) = v37 - 1; + if ( v37 <= 0 ) + break; + __pformat_putc(48, a1); + } + __pformat_putc(*(_DWORD *)(a1 + 4) & 0x20 | 0x50, a1); + *(_DWORD *)(a1 + 8) += v17; + *(_DWORD *)(a1 + 4) |= 0x1C0u; + v51[0] = v44; + v51[1] = v44 >> 31; + return __pformat_int(v44, v44 >> 31, v44 >> 31, a1); +} +// 55A9C7: using guessed type void *off_55A9C7; +// 55A9CB: using guessed type void *off_55A9CB; + +//----- (00468520) -------------------------------------------------------- +int __cdecl __mingw_pformat(__int16 a1, FILE *a2, int a3, char *a4, int *a5) +{ + int v6; // eax + int result; // eax + char *v8; // ebp + char v9; // cl + int v10; // edx + char v11; // al + char *v12; // esi + unsigned int v13; // ecx + char *v14; // ebx + int v15; // ebp + int *v16; // eax + unsigned int v17; // edx + int v18; // eax + __int64 v19; // rax + mbstate_t v20; // rax + char *v21; // eax + int *v22; // esi + int *v23; // esi + int v24; // eax + long double v25; // fst7 + char *v26; // eax + long double v27; // fst7 + long double v28; // fst7 + int v29; // eax + int v30; // edx + long double v31; // fst7 + int v32; // eax + unsigned int v33; // eax + int v34; // eax + long double v35; // fst7 + long double v36; // fst7 + long double v37; // fst7 + long double v38; // fst7 + int v39; // eax + const wchar_t *v40; // edi + int v41; // eax + unsigned int v42; // eax + int v43; // edx + struct lconv *v44; // eax + signed int v45; // eax + unsigned int v46; // edi + __int64 v47; // [esp+0h] [ebp-ACh] + __int64 v48; // [esp+8h] [ebp-A4h] + int v49; // [esp+28h] [ebp-84h] + int v50; // [esp+2Ch] [ebp-80h] + size_t *v51; // [esp+30h] [ebp-7Ch] + char *v52; // [esp+34h] [ebp-78h] + int ErrorMessage; // [esp+38h] [ebp-74h] + wchar_t DstCh; // [esp+4Eh] [ebp-5Eh] BYREF + mbstate_t v55; // [esp+50h] [ebp-5Ch] BYREF + __int64 v56; // [esp+58h] [ebp-54h] + FILE *Stream; // [esp+64h] [ebp-48h] BYREF + int v58; // [esp+68h] [ebp-44h] + int v59; // [esp+6Ch] [ebp-40h] BYREF + size_t MaxCount[2]; // [esp+70h] [ebp-3Ch] BYREF + __int16 v61; // [esp+78h] [ebp-34h] + int v62; // [esp+7Ch] [ebp-30h] + wchar_t v63; // [esp+80h] [ebp-2Ch] + int v64; // [esp+84h] [ebp-28h] + int v65; // [esp+88h] [ebp-24h] + int v66; // [esp+8Ch] [ebp-20h] + + v6 = *_errno(); + v59 = -1; + MaxCount[0] = -1; + ErrorMessage = v6; + MaxCount[1] = -3; + Stream = a2; + v61 = 0; + v62 = 0; + v50 = a1 & 0x6000; + v58 = v50; + v63 = 0; + v65 = a3; + result = *a4; + v64 = 0; + v66 = -1; + if ( result ) + { + v8 = a4 + 1; + v9 = result; + while ( 1 ) + { + if ( result == 37 ) + { + MaxCount[0] = -1; + v59 = -1; + v58 = a1 & 0x6000; + v11 = *v8; + if ( !*v8 ) + return v64; + v49 = 0; + v12 = v8; + v13 = 0; + v51 = (size_t *)&v59; + v52 = v8; + while ( 2 ) + { + v14 = v12 + 1; + v15 = v11; + switch ( v11 ) + { + case ' ': + if ( v13 ) + goto LABEL_104; + v11 = v12[1]; + v58 |= 0x40u; + ++v12; + goto LABEL_16; + case '#': + if ( v13 ) + goto LABEL_104; + v11 = v12[1]; + v58 |= 0x800u; + ++v12; + goto LABEL_16; + case '%': + v8 = v12 + 1; + __pformat_putc(37, (int)&Stream); + break; + case '\'': + if ( v13 ) + goto LABEL_104; + v58 |= 0x1000u; + v55._Wchar = 0; + v44 = localeconv(); + v45 = mbrtowc(&DstCh, v44->thousands_sep, 0x10u, &v55); + v13 = 0; + if ( v45 > 0 ) + v63 = DstCh; + v62 = v45; + v11 = *++v12; + goto LABEL_16; + case '*': + if ( !v51 ) + goto LABEL_92; + if ( (v13 & 0xFFFFFFFD) != 0 ) + { + v11 = v12[1]; + v51 = 0; + ++v12; + v13 = 4; + } + else + { + v39 = *a5; + *v51 = *a5; + if ( v39 >= 0 ) + goto LABEL_100; + if ( v13 ) + { + MaxCount[0] = -1; +LABEL_100: + v11 = v12[1]; + v51 = 0; + ++a5; + ++v12; + goto LABEL_16; + } + v11 = v12[1]; + v59 = -v59; + ++a5; + ++v12; + v58 |= 0x400u; + v51 = 0; + } + goto LABEL_16; + case '+': + if ( v13 ) + goto LABEL_104; + v11 = v12[1]; + v58 |= 0x100u; + ++v12; + goto LABEL_16; + case '-': + if ( v13 ) + goto LABEL_104; + v11 = v12[1]; + v58 |= 0x400u; + ++v12; + goto LABEL_16; + case '.': + if ( v13 <= 1 ) + { + v11 = v12[1]; + MaxCount[0] = 0; + ++v12; + v51 = MaxCount; + v13 = 2; + } + else + { +LABEL_92: + v11 = v12[1]; + v13 = 4; + ++v12; + } + goto LABEL_16; + case '0': + if ( v13 ) + { + if ( v13 > 3 ) + goto LABEL_116; + v15 = 48; +LABEL_113: + if ( v13 == 2 ) + v13 = 3; +LABEL_23: + if ( v51 ) + { + if ( (*v51 & 0x80000000) == 0 ) + { + *v51 = v15 + 10 * *v51 - 48; + v11 = *++v12; + goto LABEL_16; + } + *v51 = v15 - 48; + } +LABEL_104: + v11 = *++v12; + } + else + { + v11 = v12[1]; + v58 |= 0x200u; + ++v12; + } + goto LABEL_16; + case 'A': + if ( (v58 & 4) == 0 ) + goto LABEL_90; + goto LABEL_48; + case 'C': + MaxCount[0] = -1; + v23 = a5 + 1; + goto LABEL_80; + case 'E': + if ( (v58 & 4) == 0 ) + goto LABEL_82; + goto LABEL_73; + case 'F': + if ( (v58 & 4) == 0 ) + goto LABEL_84; + goto LABEL_64; + case 'G': + if ( (v58 & 4) == 0 ) + goto LABEL_86; + goto LABEL_66; + case 'I': + v11 = v12[1]; + if ( v11 == 54 ) + { + if ( v12[2] != 52 ) + { +LABEL_116: + v8 = v52; + __pformat_putc(37, (int)&Stream); + break; + } + v11 = v12[3]; + v49 = 3; + v12 += 3; + v13 = 4; + } + else if ( v11 == 51 ) + { + if ( v12[2] != 50 ) + goto LABEL_116; + v11 = v12[3]; + v49 = 2; + v12 += 3; + v13 = 4; + } + else + { + v49 = 0; + ++v12; + v13 = 4; + } +LABEL_16: + if ( !v11 ) + return v64; + continue; + case 'L': + v11 = v12[1]; + v58 |= 4u; + ++v12; + v13 = 4; + goto LABEL_16; + case 'S': + v22 = a5 + 1; + goto LABEL_106; + case 'X': + case 'o': + case 'u': + case 'x': + if ( v49 == 3 ) + { + v42 = *a5; + v43 = a5[1]; + a5 += 2; + v55._Wchar = v42; + *(_DWORD *)&v55._Byte = v43; + } + else + { + v16 = a5 + 1; + if ( v49 == 2 ) + { + v46 = *a5; + *(_DWORD *)&v55._Byte = 0; + v55._Wchar = v46; + a5 = v16; + } + else + { + v17 = *a5; + if ( v49 == 1 ) + { + *(_DWORD *)&v55._Byte = 0; + ++a5; + v55._Wchar = (unsigned __int16)v17; + } + else + { + if ( v49 == 5 ) + v17 = (unsigned __int8)v17; + v55._Wchar = v17; + ++a5; + *(_DWORD *)&v55._Byte = 0; + } + } + } + v47 = (__int64)v55; + v48 = v56; + if ( v15 == 117 ) + goto LABEL_41; + v18 = v15; + v8 = v12 + 1; + __pformat_xint(v18, *(_QWORD *)&v55, v56, SHIDWORD(v56), (int)&Stream); + goto LABEL_9; + case 'a': + v58 |= 0x20u; + if ( (v58 & 4) != 0 ) + { +LABEL_48: + v25 = *(long double *)a5; + v8 = v12 + 1; + a5 += 3; + __pformat_xldouble((int)&Stream, v25); + } + else + { +LABEL_90: + v38 = *(double *)a5; + v8 = v12 + 1; + a5 += 2; + __pformat_xldouble((int)&Stream, v38); + } + goto LABEL_9; + case 'c': + MaxCount[0] = -1; + v23 = a5 + 1; + if ( (unsigned int)(v49 - 2) <= 1 ) + { +LABEL_80: + v34 = *a5; + a5 = v23; + v8 = v14; + LOWORD(v55._Wchar) = v34; + __pformat_wputchars((int)&v55, 1, (int)&Stream); + } + else + { + v24 = *a5++; + v8 = v14; + LOBYTE(v55._Wchar) = v24; + __pformat_putchars(&v55, 1, (int)&Stream); + } + goto LABEL_9; + case 'd': + case 'i': + v58 |= 0x80u; + if ( v49 == 3 ) + { + v20 = *(mbstate_t *)a5; + a5 += 2; + v55 = v20; + } + else + { + LODWORD(v19) = *a5; + if ( v49 == 2 ) + goto LABEL_39; + if ( v49 != 1 ) + { + if ( v49 == 5 ) + LODWORD(v19) = (char)v19; +LABEL_39: + v19 = (int)v19; + v55 = (mbstate_t)(int)v19; + ++a5; + goto LABEL_40; + } + ++a5; + v19 = (__int16)v19; + v55 = (mbstate_t)(__int16)v19; + } +LABEL_40: + v56 = *(int *)&v20._Byte >> 31; + v47 = (__int64)v55; + v48 = v56; +LABEL_41: + __pformat_int(v47, v48, SHIDWORD(v48), (int)&Stream); +LABEL_42: + v8 = v12 + 1; + break; + case 'e': + v58 |= 0x20u; + if ( (v58 & 4) != 0 ) + { +LABEL_73: + v31 = *(long double *)a5; + v8 = v12 + 1; + a5 += 3; + __pformat_efloat(&Stream, v31); + } + else + { +LABEL_82: + v35 = *(double *)a5; + v8 = v12 + 1; + a5 += 2; + __pformat_efloat(&Stream, v35); + } + goto LABEL_9; + case 'f': + v58 |= 0x20u; + if ( (v58 & 4) != 0 ) + { +LABEL_64: + v27 = *(long double *)a5; + v8 = v12 + 1; + a5 += 3; + __pformat_float((int)&Stream, v27); + } + else + { +LABEL_84: + v36 = *(double *)a5; + v8 = v12 + 1; + a5 += 2; + __pformat_float((int)&Stream, v36); + } + goto LABEL_9; + case 'g': + v58 |= 0x20u; + if ( (v58 & 4) != 0 ) + { +LABEL_66: + v28 = *(long double *)a5; + v8 = v12 + 1; + a5 += 3; + __pformat_gfloat(&Stream, v28); + } + else + { +LABEL_86: + v37 = *(double *)a5; + v8 = v12 + 1; + a5 += 2; + __pformat_gfloat(&Stream, v37); + } + goto LABEL_9; + case 'h': + v11 = v12[1]; + if ( v11 == 104 ) + { + v11 = v12[2]; + v49 = 5; + v12 += 2; + } + else + { + v49 = 1; + ++v12; + } + v13 = 4; + goto LABEL_16; + case 'j': + v11 = v12[1]; + v49 = 3; + ++v12; + v13 = 4; + goto LABEL_16; + case 'l': + v11 = v12[1]; + if ( v11 == 108 ) + { + v11 = v12[2]; + v49 = 3; + v12 += 2; + } + else + { + v49 = 2; + ++v12; + } + v13 = 4; + goto LABEL_16; + case 'm': + v8 = v12 + 1; + v26 = strerror(ErrorMessage); + __pformat_puts(v26, (int)&Stream); + goto LABEL_9; + case 'n': + v29 = *a5++; + v30 = v64; + switch ( v49 ) + { + case 5: + *(_BYTE *)v29 = v64; + v8 = v12 + 1; + break; + case 1: + *(_WORD *)v29 = v64; + v8 = v12 + 1; + break; + case 2: + *(_DWORD *)v29 = v64; + v8 = v12 + 1; + break; + default: + *(_DWORD *)v29 = v64; + if ( v49 != 3 ) + goto LABEL_42; + v8 = v12 + 1; + *(_DWORD *)(v29 + 4) = v30 >> 31; + break; + } + goto LABEL_9; + case 'p': + if ( !v13 ) + { + v32 = a1 & 0x6000; + if ( v58 == v50 ) + { + BYTE1(v32) = BYTE1(v50) | 2; + MaxCount[0] = 8; + v58 = v32; + } + } + v33 = *a5; + *(_DWORD *)&v55._Byte = 0; + v8 = v12 + 1; + ++a5; + v55._Wchar = v33; + v56 = 0LL; + __pformat_xint(120, v33, 0, 0, (int)&Stream); + goto LABEL_9; + case 's': + v21 = (char *)*a5; + v22 = a5 + 1; + if ( (unsigned int)(v49 - 2) <= 1 ) + { +LABEL_106: + v40 = (const wchar_t *)*a5; + if ( !v40 ) + v40 = &String; + if ( (MaxCount[0] & 0x80000000) != 0 ) + v41 = wcslen(v40); + else + v41 = wcsnlen(v40, MaxCount[0]); + v8 = v14; + __pformat_wputchars((int)v40, v41, (int)&Stream); + a5 = v22; + } + else + { + ++a5; + v8 = v14; + __pformat_puts(v21, (int)&Stream); + } + goto LABEL_9; + case 't': + case 'z': + v49 = 0; + v11 = v12[1]; + v13 = 4; + ++v12; + goto LABEL_16; + default: + if ( (unsigned __int8)(v11 - 48) > 9u || v13 > 3 ) + goto LABEL_116; + if ( v13 ) + goto LABEL_113; + v13 = 1; + goto LABEL_23; + } + break; + } + } + else + { + if ( (v58 & 0x4000) != 0 || (v10 = v64, v65 > v64) ) + { + if ( (v58 & 0x2000) != 0 ) + fputc(result, Stream); + else + *((_BYTE *)&Stream->_ptr + v64) = v9; + v10 = v64; + } + v64 = v10 + 1; + } +LABEL_9: + v9 = *v8++; + result = v9; + if ( !v9 ) + return v64; + } + } + return result; +} + +//----- (00468EC0) -------------------------------------------------------- +int *__cdecl __rv_alloc_D2A(int a1) +{ + int v1; // ebx + int v2; // eax + int *v3; // eax + + v1 = 0; + if ( a1 > 19 ) + { + v2 = 4; + do + { + v2 *= 2; + ++v1; + } + while ( v2 + 15 < a1 ); + } + v3 = __Balloc_D2A(v1); + *v3 = v1; + return v3 + 1; +} + +//----- (00468F00) -------------------------------------------------------- +int *__cdecl __nrv_alloc_D2A(char *a1, _DWORD *a2, int a3) +{ + int v3; // eax + int v4; // edi + int *v5; // eax + char *v6; // edx + char v7; // cl + int *v8; // edi + _BYTE *v9; // eax + char v10; // cl + + if ( a3 <= 19 ) + { + v4 = 0; + } + else + { + v3 = 4; + v4 = 0; + do + { + v3 *= 2; + ++v4; + } + while ( a3 > v3 + 15 ); + } + v5 = __Balloc_D2A(v4); + v6 = a1 + 1; + *v5 = v4; + v7 = *a1; + v8 = v5 + 1; + *((_BYTE *)v5 + 4) = *a1; + v9 = v5 + 1; + if ( v7 ) + { + do + { + v10 = *v6; + ++v9; + ++v6; + *v9 = v10; + } + while ( v10 ); + } + if ( a2 ) + *a2 = v9; + return v8; +} + +//----- (00468F80) -------------------------------------------------------- +void __cdecl __freedtoa(_DWORD *a1) +{ + int v1; // ecx + + v1 = *(a1 - 1); + *a1 = v1; + a1[1] = 1 << v1; + __Bfree_D2A(a1 - 1); +} + +//----- (00468FA0) -------------------------------------------------------- +unsigned int __cdecl __quorem_D2A(int a1, int a2) +{ + int v2; // ebx + unsigned int result; // eax + int v4; // eax + unsigned int v5; // ebx + _DWORD *v6; // ecx + unsigned int v7; // esi + __int64 v8; // kr00_8 + bool v9; // cf + int v10; // eax + int v11; // ecx + _DWORD *v12; // esi + unsigned int v13; // ebp + __int64 v14; // rcx + int v15; // eax + _DWORD *v16; // edx + unsigned int v17; // eax + int v18; // edx + __int64 v19; // [esp+18h] [ebp-54h] + __int64 v20; // [esp+18h] [ebp-54h] + _DWORD *v21; // [esp+2Ch] [ebp-40h] + unsigned __int64 v22; // [esp+30h] [ebp-3Ch] + int v23; // [esp+38h] [ebp-34h] + unsigned int v24; // [esp+3Ch] [ebp-30h] + unsigned int v25; // [esp+40h] [ebp-2Ch] + int v26; // [esp+44h] [ebp-28h] + _DWORD *v27; // [esp+4Ch] [ebp-20h] + + v2 = *(_DWORD *)(a2 + 16); + result = 0; + v26 = v2; + if ( *(_DWORD *)(a1 + 16) >= v2 ) + { + v23 = v2 - 1; + v4 = 4 * (v2 - 1); + v21 = (_DWORD *)(a2 + 20 + v4); + v27 = (_DWORD *)(a1 + 20 + v4); + v25 = a1 + 20; + v24 = *v27 / (unsigned int)(*v21 + 1); + if ( *v27 >= (unsigned int)(*v21 + 1) ) + { + v22 = 0LL; + v5 = a2 + 20; + v6 = (_DWORD *)(a1 + 20); + v19 = 0LL; + do + { + v5 += 4; + v7 = *(_DWORD *)(v5 - 4) * v24 + v22; + v22 = (*(unsigned int *)(v5 - 4) * (unsigned __int64)v24 + v22) >> 32; + v8 = v19 + v7; + v9 = *v6 < (unsigned int)v8; + v10 = *v6++ - v8; + *(v6 - 1) = v10; + v19 = -(char)(v9 + BYTE4(v8)) & 1; + } + while ( (unsigned int)v21 >= v5 ); + if ( !*v27 ) + { + if ( v25 < (unsigned int)(v27 - 1) ) + { + v11 = v23; + do + { + if ( v27[v11 - v26] ) + break; + --v11; + } + while ( v26 - 2 - (((unsigned int)v27 - a1 - 25) >> 2) != v11 ); + v23 = v11; + } + *(_DWORD *)(a1 + 16) = v23; + } + } + if ( __cmp_D2A(a1, a2) >= 0 ) + { + v12 = (_DWORD *)(a1 + 20); + ++v24; + v20 = 0LL; + v13 = a2 + 20; + do + { + v13 += 4; + v14 = v20 + *(unsigned int *)(v13 - 4); + v9 = *v12 < (unsigned int)v14; + v15 = *v12++ - v14; + *(v12 - 1) = v15; + v20 = -(char)(v9 + BYTE4(v14)) & 1; + } + while ( (unsigned int)v21 >= v13 ); + v16 = (_DWORD *)(v25 + 4 * v23); + if ( !*v16 ) + { + if ( v25 < (unsigned int)(v16 - 1) ) + { + v17 = v23 - 1 - (((unsigned int)v16 - a1 - 25) >> 2); + v18 = v23; + do + { + if ( *(_DWORD *)(v25 + 4 * v18 - 4) ) + break; + --v18; + } + while ( v18 != v17 ); + v23 = v18; + } + *(_DWORD *)(a1 + 16) = v23; + } + } + return v24; + } + return result; +} + +//----- (004691C0) -------------------------------------------------------- +int *__cdecl __gdtoa(int *a1, int a2, int *a3, int *a4, int a5, int a6, int *a7, int **a8) +{ + int v8; // esi + int v9; // eax + int v11; // edi + int v12; // edx + int i; // eax + int *v14; // ebp + int *v15; // eax + int *v16; // edx + int *v17; // ecx + int v18; // ebx + int v19; // ebx + int v20; // ebx + int v21; // eax + unsigned int v22; // edx + int v23; // eax + double v24; // rax + int v25; // ecx + int v26; // eax + signed int v27; // edx + long double v28; // fst7 + int v29; // eax + int v30; // eax + int v31; // eax + long double v32; // fst7 + double v33; // rax + int v34; // esi + long double v35; // fst6 + long double v36; // fst5 + int *v37; // eax + long double v38; // fst6 + long double v39; // fst7 + long double v40; // fst6 + char v41; // dl + long double v42; // rt0 + long double v43; // fst5 + char v44; // dl + int *v45; // ebx + int *n; // ecx + int v47; // edi + int v48; // ecx + int v49; // eax + int v50; // edi + int *v51; // esi + int v52; // eax + int v53; // eax + bool v54; // bl + int v55; // edi + char v56; // bl + int v57; // ebx + int v58; // eax + int v59; // eax + bool v60; // dl + double v61; // rax + long double v62; // fst6 + long double v63; // fst7 + unsigned int v64; // ebx + int v65; // ebx + int *v66; // ebx + int v67; // eax + int *v68; // edi + unsigned int v69; // eax + int v70; // edi + int *v71; // edx + int v72; // ecx + int *v73; // ecx + int v74; // eax + int v75; // eax + int *v76; // eax + unsigned int v77; // eax + int v78; // edx + char v79; // al + int *v80; // ebx + int *v81; // edx + int v82; // ecx + long double v83; // fst5 + bool v84; // zf + long double m; // fst6 + long double v86; // fst6 + long double v87; // fst5 + int v88; // edx + int v89; // eax + bool v90; // zf + bool v91; // cc + long double v92; // fst6 + bool v93; // di + long double v94; // fst5 + int v95; // edx + bool v96; // cl + int *v97; // edx + int *v98; // edi + int *k; // esi + int *v100; // eax + int v101; // eax + int *v102; // ecx + double v103; // rax + int *v104; // ebx + char v105; // dl + int v106; // edi + int v107; // eax + long double v108; // fst6 + int v109; // edx + int v110; // [esp+18h] [ebp-A4h] + int *v111; // [esp+18h] [ebp-A4h] + int v112; // [esp+18h] [ebp-A4h] + int *v113; // [esp+18h] [ebp-A4h] + int *v114; // [esp+18h] [ebp-A4h] + unsigned int v115; // [esp+28h] [ebp-94h] + bool v116; // [esp+28h] [ebp-94h] + int v117; // [esp+2Ch] [ebp-90h] + int *j; // [esp+30h] [ebp-8Ch] + int v119; // [esp+34h] [ebp-88h] + int v120; // [esp+34h] [ebp-88h] + int v121; // [esp+34h] [ebp-88h] + int v122; // [esp+38h] [ebp-84h] + double v123; // [esp+38h] [ebp-84h] + int *v124; // [esp+38h] [ebp-84h] + int *v125; // [esp+38h] [ebp-84h] + int v126; // [esp+40h] [ebp-7Ch] + int v127; // [esp+4Ch] [ebp-70h] + char v128; // [esp+4Ch] [ebp-70h] + int v129; // [esp+50h] [ebp-6Ch] + int v130; // [esp+50h] [ebp-6Ch] + double v131; // [esp+50h] [ebp-6Ch] + int v132; // [esp+58h] [ebp-64h] + int v133; // [esp+58h] [ebp-64h] + int *v134; // [esp+5Ch] [ebp-60h] + int v135; // [esp+60h] [ebp-5Ch] + int v136; // [esp+60h] [ebp-5Ch] + int *v137; // [esp+60h] [ebp-5Ch] + int v138; // [esp+64h] [ebp-58h] + int v139; // [esp+68h] [ebp-54h] + int v140; // [esp+6Ch] [ebp-50h] + int v141; // [esp+70h] [ebp-4Ch] + int v142; // [esp+74h] [ebp-48h] + bool v143; // [esp+78h] [ebp-44h] + bool v144; // [esp+78h] [ebp-44h] + int v145; // [esp+7Ch] [ebp-40h] + int v146; // [esp+80h] [ebp-3Ch] + int v147; // [esp+88h] [ebp-34h] + int v148[8]; // [esp+9Ch] [ebp-20h] BYREF + + v110 = a5; + v119 = a6; + v8 = *a4; + *a4 &= 0xFFFFFFCF; + v9 = v8 & 7; + if ( v9 == 3 ) + { + *a7 = -32768; + return __nrv_alloc_D2A("Infinity", a8, 8); + } + v117 = v8 & 4; + if ( (v8 & 4) == 0 ) + { + if ( (v8 & 7) != 0 ) + { + if ( (unsigned int)(v9 - 1) > 1 ) + return 0; + v11 = *a1; + v12 = 0; + for ( i = 32; v11 > i; ++v12 ) + i *= 2; + v122 = (v11 - 1) >> 5; + v14 = __Balloc_D2A(v12); + v15 = a3; + v16 = v14 + 5; + v17 = &a3[v122]; + do + { + v18 = *v15++; + *v16++ = v18; + } + while ( v17 >= v15 ); + v19 = v122 * 4 + 4; + if ( (char *)v17 + 1 < (char *)a3 + 1 ) + v19 = 4; + v20 = v19 >> 2; + do + { + v21 = v20--; + if ( v14[v20 + 5] ) + { + _BitScanReverse(&v22, v14[v20 + 5]); + v14[4] = v21; + v20 = 32 * v21 - (v22 ^ 0x1F); + goto LABEL_18; + } + } + while ( v20 ); + v14[4] = 0; +LABEL_18: + v23 = __trailz_D2A((int)v14); + v148[0] = v23; + v135 = a2; + if ( v23 ) + { + __rshift_D2A((int)v14, v23); + v135 = v148[0] + a2; + v20 -= v148[0]; + } + if ( v14[4] ) + { + v24 = __b2d_D2A((int)v14, v148); + LODWORD(v123) = LODWORD(v24); + v25 = v20 + v135 - 1; + v26 = HIDWORD(v24) & 0xFFFFF | 0x3FF00000; + HIDWORD(v123) = v26; + v27 = abs32(v25) - 1077; + v28 = (v123 - 1.5) * 0.289529654602168 + 0.1760912590558 + (long double)v25 * 0.301029995663981; + if ( v27 > 0 ) + v28 = v28 + (long double)v27 * 7.0e-17; + v127 = (int)v28; + if ( v28 < 0.0 && (long double)v127 != v28 ) + --v127; + HIDWORD(v123) = (v25 << 20) + v26; + v132 = -v135; + if ( (unsigned int)v127 > 0x16 ) + { + v142 = 1; + } + else + { + if ( __tens_D2A[v127] <= (long double)v123 ) + { + v142 = 0; + v138 = 0; + if ( v135 <= 0 ) + goto LABEL_69; +LABEL_110: + v132 = 0; + v138 = v135; +LABEL_33: + if ( v127 < 0 ) + { + v29 = v127; + v138 -= v127; + v127 = 0; + v140 = v29; + v141 = -v29; + goto LABEL_35; + } +LABEL_69: + v141 = 0; + v132 += v127; + v140 = v127; +LABEL_35: + if ( (unsigned int)a5 > 9 ) + { + v110 = 0; + } + else + { + if ( a5 > 5 ) + { + v143 = 0; + v110 = a5 - 4; + } + else + { + v143 = (unsigned int)(v20 + v135 + 1021) <= 0x7F7; + } + switch ( v110 ) + { + case 4: + v139 = 1; + goto LABEL_42; + case 5: + v139 = 1; +LABEL_128: + v145 = v140 + a6; + v30 = v140 + a6 + 1; + v126 = v30; + if ( v30 <= 0 ) + { + v148[0] = 1; + v30 = 1; + } + else + { + v148[0] = v140 + a6 + 1; + } + goto LABEL_45; + case 2: + v139 = 0; +LABEL_42: + v30 = 1; + if ( a6 > 0 ) + v30 = a6; + v148[0] = v30; + v145 = v30; + v126 = v30; + v119 = v30; +LABEL_45: + v134 = __rv_alloc_D2A(v30); + v129 = a1[3]; + v84 = v129 == 1; + v130 = v129 - 1; + v144 = v143 && (unsigned int)v126 <= 0xE; + if ( v84 ) + goto LABEL_50; + goto LABEL_46; + case 3: + v139 = 0; + goto LABEL_128; + } + } + v148[0] = (int)((long double)v11 * 0.30103) + 3; + v134 = __rv_alloc_D2A(v148[0]); + v121 = a1[3]; + v130 = v121 - 1; + if ( v121 == 1 ) + { + if ( v135 < 0 ) + { + v106 = v11 - v20; + v119 = 0; + v48 = v106 + 1; + v126 = -1; + v49 = a1[1]; + v148[0] = v106 + 1; + v145 = -1; + if ( v49 <= v135 - v106 ) + goto LABEL_79; + goto LABEL_76; + } + if ( a1[5] >= v140 ) + { + v126 = -1; + v63 = __tens_D2A[v140]; + goto LABEL_198; + } + v119 = 0; + v145 = -1; + v126 = -1; +LABEL_75: + v47 = v11 - v20; + v48 = v47 + 1; + v49 = a1[1]; + v148[0] = v47 + 1; + if ( v135 - v47 >= v49 ) + { +LABEL_168: + if ( v110 > 1 ) + goto LABEL_169; +LABEL_79: + v132 += v48; + v50 = v141; + v136 = v138; + v138 += v48; +LABEL_80: + v139 = 1; + v51 = __i2b_D2A(1); +LABEL_81: + if ( v136 > 0 && v132 > 0 ) + { + v52 = v132; + if ( v136 <= v132 ) + v52 = v136; + v138 -= v52; + v148[0] = v52; + v136 -= v52; + v132 -= v52; + } + if ( v141 ) + { + if ( v139 ) + { + if ( v50 > 0 ) + { + v51 = __pow5mult_D2A(v51, v50); + v124 = __mult_D2A((int)v51, (int)v14); + __Bfree_D2A(v14); + v14 = v124; + } + v53 = v141 - v50; + if ( v141 == v50 ) + goto LABEL_91; + } + else + { + v53 = v141; + } + v14 = __pow5mult_D2A(v14, v53); + } +LABEL_91: + v125 = __i2b_D2A(1); + v54 = v110 <= 1 && v20 == 1; + if ( v127 > 0 ) + { + v125 = __pow5mult_D2A(v125, v127); + if ( !v54 || a2 <= a1[1] + 1 ) + { + v55 = 0; +LABEL_136: + _BitScanReverse(&v64, v125[v125[4] + 4]); + v56 = v64 ^ 0x1F; +LABEL_94: + v57 = (v56 - (_BYTE)v132 - 4) & 0x1F; + v148[0] = v57; + v58 = v57; + if ( v57 + v138 > 0 ) + { + v14 = __lshift_D2A(v14, v57 + v138); + v58 = v148[0]; + } + v59 = v132 + v58; + if ( v59 > 0 ) + v125 = __lshift_D2A(v125, v59); + v60 = v110 > 2; + if ( v142 && (v116 = v110 > 2, v75 = __cmp_D2A((int)v14, (int)v125), v60 = v110 > 2, v75 < 0) ) + { + v14 = __multadd_D2A(v14, 10, 0); + if ( !v139 ) + { + if ( v145 > 0 || !v116 ) + { + v120 = v140; + v126 = v145; +LABEL_177: + v68 = v134; + v148[0] = 1; + while ( 1 ) + { + v68 = (int *)((char *)v68 + 1); + v77 = __quorem_D2A((int)v14, (int)v125) + 48; + *((_BYTE *)v68 - 1) = v77; + if ( v148[0] >= v126 ) + break; + v76 = __multadd_D2A(v14, 10, 0); + ++v148[0]; + v14 = v76; + } + LOBYTE(v115) = v77; + v73 = 0; +LABEL_181: + if ( v130 ) + { + v78 = v14[4]; + v79 = *((_BYTE *)v68 - 1); + if ( v130 != 2 ) + { + if ( v78 > 1 || v14[5] ) + { +LABEL_185: + v80 = v134; + goto LABEL_188; + } +LABEL_191: + while ( v79 == 48 ) + { + v79 = *((_BYTE *)v68 - 2); + v68 = (int *)((char *)v68 - 1); + } + goto LABEL_160; + } + } + else + { + v113 = v73; + v14 = __lshift_D2A(v14, 1); + v89 = __cmp_D2A((int)v14, (int)v125); + v73 = v113; + v90 = v89 == 0; + v91 = v89 <= 0; + v79 = *((_BYTE *)v68 - 1); + if ( !v91 || v90 && (v115 & 1) != 0 ) + goto LABEL_185; + v78 = v14[4]; + } + if ( v78 <= 1 ) + { + v109 = 16; + if ( !v14[5] ) + v109 = v117; + v117 = v109; + } + else + { + v117 = 16; + } + goto LABEL_191; + } + goto LABEL_263; + } + v51 = __multadd_D2A(v51, 10, 0); + if ( v145 <= 0 && v116 ) + { +LABEL_263: + --v140; + v126 = v145; + goto LABEL_101; + } + v120 = v140; + v126 = v145; + } + else + { + if ( v126 <= 0 && v60 ) + { +LABEL_101: + if ( !v126 ) + { + v125 = __multadd_D2A(v125, 5, 0); + if ( __cmp_D2A((int)v14, (int)v125) > 0 ) + { + v45 = v134; + v120 = v140 + 2; +LABEL_104: + v134 = (int *)((char *)v134 + 1); + *(_BYTE *)v45 = 49; + v117 = 32; + goto LABEL_105; + } + } +LABEL_133: + v45 = v134; + v117 = 16; + v120 = -v119; +LABEL_105: + __Bfree_D2A(v125); + if ( !v51 ) + { +LABEL_107: + __Bfree_D2A(v14); + *(_BYTE *)v134 = 0; + *a7 = v120; + if ( a8 ) + *a8 = v134; + *a4 |= v117; + return v45; + } +LABEL_106: + __Bfree_D2A(v51); + goto LABEL_107; + } + v120 = v140 + 1; + if ( !v139 ) + goto LABEL_177; + } + v65 = v136 + v57; + if ( v65 > 0 ) + v51 = __lshift_D2A(v51, v65); + v66 = v51; + if ( v55 ) + { + v104 = __Balloc_D2A(v51[1]); + memcpy(v104 + 3, v51 + 3, 4 * v51[4] + 8); + v66 = __lshift_D2A(v104, 1); + } + v148[0] = 1; + for ( j = v134; ; j = (int *)((char *)j + 1) ) + { + v69 = __quorem_D2A((int)v14, (int)v125); + v115 = v69 + 48; + v128 = v69; + v70 = __cmp_D2A((int)v14, (int)v51); + v71 = __diff_D2A((int)v125, (int)v66); + if ( v71[3] ) + { + __Bfree_D2A(v71); + v67 = 1; + } + else + { + v137 = v71; + v133 = __cmp_D2A((int)v14, (int)v71); + __Bfree_D2A(v137); + v67 = v133 | v110; + if ( v133 | v110 ) + { + v67 = v133; + } + else if ( !(v130 | *a3 & 1) ) + { + v72 = v70; + v68 = (int *)((char *)j + 1); + if ( v115 == 57 ) + goto LABEL_262; + if ( v72 <= 0 ) + { + if ( v14[4] <= 1 ) + { + if ( v14[5] ) + v67 = 16; + } + else + { + v67 = 16; + } + } + else + { + LOBYTE(v115) = v128 + 49; + v67 = 32; + } + v117 = v67; + *(_BYTE *)j = v115; + v73 = v51; + v51 = v66; + goto LABEL_160; + } + } + if ( v70 < 0 || !(v110 | v70) && (*(_BYTE *)a3 & 1) == 0 ) + break; + v68 = (int *)((char *)j + 1); + if ( v67 > 0 && v130 != 2 ) + { + if ( v115 == 57 ) + goto LABEL_262; + v73 = v51; + v117 = 32; + v51 = v66; + *(_BYTE *)j = v115 + 1; + goto LABEL_160; + } + *(_BYTE *)j = v115; + if ( v148[0] == v126 ) + { + v73 = v51; + v51 = v66; + goto LABEL_181; + } + v14 = __multadd_D2A(v14, 10, 0); + if ( v51 == v66 ) + { + v51 = __multadd_D2A(v51, 10, 0); + v66 = v51; + } + else + { + v51 = __multadd_D2A(v51, 10, 0); + v66 = __multadd_D2A(v66, 10, 0); + } + ++v148[0]; + } + v68 = (int *)((char *)j + 1); + if ( v130 ) + { + if ( v14[4] <= 1 && !v14[5] ) + { + if ( v67 <= 0 ) + { + v73 = v51; + v51 = v66; + goto LABEL_240; + } +LABEL_257: + v14 = __lshift_D2A(v14, 1); + v107 = __cmp_D2A((int)v14, (int)v125); + if ( v107 <= 0 && (v107 || (v115 & 1) == 0) ) + { + v130 = 32; + goto LABEL_260; + } + if ( v115 != 57 ) + { + v130 = 32; + LOBYTE(v115) = v128 + 49; + goto LABEL_260; + } +LABEL_262: + v73 = v51; + v51 = v66; + v80 = v134; + *(_BYTE *)j = 57; + v79 = 57; + while ( 1 ) + { +LABEL_188: + v81 = (int *)((char *)v68 - 1); + if ( v79 != 57 ) + { + v117 = 32; + *(_BYTE *)v81 = v79 + 1; + goto LABEL_160; + } + if ( v81 == v80 ) + break; + v79 = *((_BYTE *)v68 - 2); + v68 = (int *)((char *)v68 - 1); + } + ++v120; + v117 = 32; + *(_BYTE *)v134 = 49; +LABEL_160: + v111 = v73; + __Bfree_D2A(v125); + if ( !v51 ) + { + v45 = v134; + v134 = v68; + goto LABEL_107; + } + if ( !v111 || v111 == v51 ) + { + v45 = v134; + v134 = v68; + } + else + { + __Bfree_D2A(v111); + v45 = v134; + v134 = v68; + } + goto LABEL_106; + } + if ( v130 != 2 ) + { + v98 = v51; + for ( k = (int *)((char *)j + 1); ; k = (int *)((char *)k + 1) ) + { + v101 = __cmp_D2A((int)v125, (int)v66); + v102 = k; + if ( v101 <= 0 ) + break; + *((_BYTE *)k - 1) = v115; + v100 = __multadd_D2A(v66, 10, 0); + if ( v98 == v66 ) + v98 = v100; + v114 = v100; + v14 = __multadd_D2A(v14, 10, 0); + j = k; + v115 = __quorem_D2A((int)v14, (int)v125) + 48; + v66 = v114; + } + v51 = v98; + v68 = v102; + if ( v115 != 57 ) + { + v117 = 32; + v73 = v51; + v51 = v66; + LOBYTE(v115) = v115 + 1; + goto LABEL_240; + } + goto LABEL_262; + } + } + else + { + if ( v67 > 0 ) + goto LABEL_257; +LABEL_260: + if ( v14[4] <= 1 ) + { + v73 = v51; + v51 = v66; + if ( v14[5] ) + v117 = 16; + else + v117 = v130; +LABEL_240: + *(_BYTE *)j = v115; + goto LABEL_160; + } + } + v73 = v51; + v117 = 16; + v51 = v66; + goto LABEL_240; + } + } + else + { + v55 = 0; + if ( !v54 || a1[1] + 1 >= a2 ) + { +LABEL_93: + v56 = 31; + if ( !v127 ) + goto LABEL_94; + goto LABEL_136; + } + } + ++v138; + v55 = 1; + ++v132; + goto LABEL_93; + } +LABEL_76: + if ( ((v110 - 3) & 0xFFFFFFFD) != 0 ) + { + v48 = v135 - v49 + 1; + v148[0] = v48; + if ( v126 <= 0 || v110 <= 1 || v48 <= v126 ) + goto LABEL_79; +LABEL_169: + v74 = v126 - 1; + if ( v141 < v126 - 1 ) + { + v50 = 0; + v88 = v74 - v141; + v141 = v126 - 1; + v127 += v88; + } + else + { + v50 = v141 - v74; + } + if ( v126 < 0 ) + { + v148[0] = 0; + v136 = v138 - v126; + } + else + { + v132 += v126; + v148[0] = v126; + v136 = v138; + v138 += v126; + } + goto LABEL_80; + } + goto LABEL_168; + } + v119 = 0; + v144 = 0; + v139 = 1; + v145 = -1; + v126 = -1; +LABEL_46: + v31 = 2; + if ( v130 >= 0 ) + v31 = v130; + v130 = v31; + if ( (v8 & 8) == 0 ) + goto LABEL_119; + v130 = 3 - v31; +LABEL_50: + if ( v144 && !(v140 | v130) ) + { + v32 = v123; + v148[0] = 0; + if ( v142 && v32 < 1.0 ) + { + if ( v126 ) + { + v34 = v145; + if ( v145 <= 0 ) + { +LABEL_118: + v130 = 0; + goto LABEL_119; + } + v32 = v32 * 10.0; + v146 = -1; + v103 = v32 * 3.0 + 7.0; + LODWORD(v131) = LODWORD(v103); + HIDWORD(v131) = HIDWORD(v103) - 54525952; +LABEL_56: + v35 = v131; + v36 = dbl_55ABF8[v34]; + if ( v139 ) + { + v37 = (int *)((char *)v134 + 1); + *(_BYTE *)v134 = (int)v32 + 48; + v38 = 0.5 / v36 - v35; + v39 = v32 - (long double)(int)v32; + if ( v38 > v39 ) + { +LABEL_265: + v45 = v134; + v134 = v37; + v120 = v146 + 1; + if ( 0.0 == v39 ) + { + v117 = 0; + goto LABEL_107; + } + goto LABEL_215; + } + while ( 1 ) + { + v43 = v38; + if ( v38 > 1.0 - v39 ) + break; + if ( ++v148[0] >= v34 ) + goto LABEL_118; + v37 = (int *)((char *)v37 + 1); + v40 = v39 * 10.0; + v41 = (int)v40; + v42 = v40 - (long double)(int)v40; + v38 = v43 * 10.0; + v39 = v42; + *((_BYTE *)v37 - 1) = v41 + 48; + if ( v38 > v42 ) + goto LABEL_265; + } + v44 = *((_BYTE *)v37 - 1); +LABEL_63: + v45 = v134; + n = v37; + v120 = v146 + 1; + goto LABEL_64; + } + v92 = v35 * v36; + v37 = v134; + v147 = v11; + v93 = 0; + v148[0] = 1; + v94 = v32; + while ( 1 ) + { + v95 = (int)v94; + if ( (int)v94 ) + { + v93 = v144; + v94 = v94 - (long double)(int)v94; + } + v37 = (int *)((char *)v37 + 1); + v44 = v95 + 48; + *((_BYTE *)v37 - 1) = v44; + if ( v148[0] == v34 ) + break; + v94 = v94 * 10.0; + v93 = v144; + ++v148[0]; + } + v96 = v93; + v11 = v147; + if ( !v96 ) + v94 = v32; + if ( v94 > v92 + 0.5 ) + goto LABEL_63; + if ( 0.5 - v92 > v94 ) + { + v45 = v134; + if ( 0.0 == v94 ) + v117 = 0; + else + v117 = 16; + v82 = v146 + 1; + goto LABEL_228; + } + goto LABEL_118; + } + v61 = v32 + v32 + 7.0; + LODWORD(v131) = LODWORD(v61); + HIDWORD(v131) = HIDWORD(v61) - 54525952; + } + else + { + v33 = v32 + v32 + 7.0; + LODWORD(v131) = LODWORD(v33); + HIDWORD(v131) = HIDWORD(v33) - 54525952; + if ( v126 ) + { + v146 = 0; + v34 = v126; + goto LABEL_56; + } + } + v62 = v32 - 5.0; + if ( v62 > v131 ) + { + v120 = 2; + v45 = v134; + v51 = 0; + v125 = 0; + goto LABEL_104; + } + if ( -v131 > v62 ) + { +LABEL_132: + v125 = 0; + v51 = 0; + goto LABEL_133; + } + goto LABEL_118; + } +LABEL_119: + if ( v135 >= 0 && a1[5] >= v140 ) + { + v63 = __tens_D2A[v140]; + if ( v119 < 0 ) + { + v51 = (int *)v126; + if ( v126 <= 0 ) + { + if ( !v126 && v63 * 5.0 < v123 ) + { + v125 = 0; + v45 = v134; + v120 = v140 + 2; + goto LABEL_104; + } + goto LABEL_132; + } + } +LABEL_198: + v148[0] = 1; + v82 = v140 + 1; + v120 = v140 + 1; + v37 = (int *)((char *)v134 + 1); + v112 = (int)(v123 / v63); + *(_BYTE *)v134 = v112 + 48; + v83 = v123 - (long double)v112 * v63; + v84 = v83 == 0.0; + for ( m = v83; ; m = v87 ) + { + if ( v84 ) + { + v45 = v134; + v134 = v37; + goto LABEL_107; + } + if ( v148[0] == v126 ) + break; + v86 = m * 10.0; + v37 = (int *)((char *)v37 + 1); + ++v148[0]; + v112 = (int)(v86 / v63); + *((_BYTE *)v37 - 1) = v112 + 48; + v87 = v86 - (long double)v112 * v63; + v84 = v87 == 0.0; + } + if ( v130 ) + { + if ( v130 == 1 ) + { + v44 = *((_BYTE *)v37 - 1); + v45 = v134; + n = v37; + goto LABEL_64; + } + v45 = v134; + v134 = v37; +LABEL_215: + v117 = 16; + goto LABEL_107; + } + v108 = m + m; + v44 = *((_BYTE *)v37 - 1); + if ( v108 > v63 ) + { + v45 = v134; + for ( n = v37; ; n = v37 ) + { +LABEL_64: + v37 = (int *)((char *)n - 1); + if ( v44 != 57 ) + { + v134 = n; + v105 = v44 + 1; + goto LABEL_252; + } + if ( v37 == v45 ) + break; + v44 = *((_BYTE *)n - 2); +LABEL_67: + ; + } + ++v120; + v105 = 49; + v134 = n; + *(_BYTE *)v45 = 48; +LABEL_252: + *(_BYTE *)v37 = v105; + v117 = 32; + goto LABEL_107; + } + v45 = v134; + if ( v108 == v63 && (v112 & 1) != 0 ) + goto LABEL_67; + v117 = 16; + do + { +LABEL_228: + v97 = v37; + v37 = (int *)((char *)v37 - 1); + } + while ( *((_BYTE *)v97 - 1) == 48 ); + v134 = v97; + v120 = v82; + goto LABEL_107; + } + if ( !v139 ) + { + v50 = v141; + v51 = 0; + v136 = v138; + goto LABEL_81; + } + goto LABEL_75; + } + v142 = 0; + --v127; + } + v138 = 0; + if ( v135 <= 0 ) + goto LABEL_33; + goto LABEL_110; + } + __Bfree_D2A(v14); + } + *a7 = 1; + return __nrv_alloc_D2A("0", a8, 1); + } + if ( v9 != 4 ) + return 0; + *a7 = -32768; + return __nrv_alloc_D2A((char *)&off_55AB59, a8, 3); +} +// 55AB59: using guessed type void *off_55AB59; +// 55ABF8: using guessed type double dbl_55ABF8[]; +// 55AC00: using guessed type double __tens_D2A[24]; +// 4691C0: using guessed type int var_20[8]; + +//----- (0046A910) -------------------------------------------------------- +int __cdecl __gethex_D2A(unsigned __int8 **a1, int *a2, int *a3, int **a4, int a5) +{ + char *decimal_point; // edi + unsigned __int8 *v6; // ebx + unsigned __int8 v7; // cl + unsigned __int8 *v8; // eax + int v9; // edx + int v10; // ebp + unsigned __int8 *v11; // ebx + char v12; // al + int v13; // edx + unsigned __int8 v14; // bp + unsigned __int8 *v15; // esi + unsigned __int8 *v16; // eax + int v17; // esi + int v18; // eax + int v19; // ebx + int v20; // ebp + int v21; // esi + int v22; // edx + int j; // eax + int *v24; // edi + int v25; // ebx + int v26; // ecx + unsigned __int8 v27; // dl + unsigned __int8 v28; // dl + int v29; // ecx + bool v30; // zf + int v31; // eax + int v32; // edx + int i; // eax + int v34; // eax + int v35; // edx + unsigned __int8 *v36; // ecx + unsigned int *v37; // edi + char v38; // cl + int v39; // eax + int v40; // eax + unsigned int v41; // ebp + int *v42; // ebx + unsigned int v43; // eax + int *v44; // edx + int v45; // eax + int v46; // edx + int v47; // edx + int v48; // edi + int v49; // edx + int v50; // edx + int v51; // ecx + int v52; // ecx + unsigned int v53; // esi + unsigned int v54; // eax + unsigned int v55; // eax + int v56; // ebx + signed int v57; // ebx + int v58; // edi + int v59; // esi + int v60; // eax + int v61; // ebx + int v62; // eax + int v64; // ebx + int v65; // edx + char v66; // dl + int v67; // eax + int v68; // ecx + int v69; // ebx + int v70; // ecx + int v71; // esi + unsigned int v72; // eax + int v73; // edi + unsigned __int8 *v74; // ecx + int v75; // eax + int v76; // eax + int Val; // [esp+4h] [ebp-48h] + int v78; // [esp+14h] [ebp-38h] + unsigned int v79; // [esp+14h] [ebp-38h] + int v80; // [esp+18h] [ebp-34h] + BOOL v81; // [esp+18h] [ebp-34h] + unsigned int v82; // [esp+18h] [ebp-34h] + unsigned __int8 *v83; // [esp+1Ch] [ebp-30h] + char *v84; // [esp+1Ch] [ebp-30h] + int v85; // [esp+20h] [ebp-2Ch] + int *v86; // [esp+24h] [ebp-28h] + _BYTE *v87; // [esp+24h] [ebp-28h] + char *v88; // [esp+24h] [ebp-28h] + _DWORD *v89; // [esp+28h] [ebp-24h] + int v90; // [esp+28h] [ebp-24h] + int v91; // [esp+2Ch] [ebp-20h] + + decimal_point = localeconv()->decimal_point; + if ( !byte_769690 ) + __mingw_hexdig_init_D2A(); + *a4 = 0; + v6 = *a1; + v7 = (*a1)[2]; + if ( v7 == 48 ) + { + v8 = v6 + 3; + v9 = -2 - (_DWORD)v6; + do + { + v10 = (int)&v8[v9]; + v11 = v8; + v7 = *v8++; + } + while ( v7 == 48 ); + } + else + { + v11 = v6 + 2; + v10 = 0; + } + if ( __hexdig_D2A[v7] ) + { + v79 = (unsigned int)v11; + ++v10; + v16 = 0; + v81 = 0; + goto LABEL_31; + } + v12 = *decimal_point; + v13 = 0; + if ( *decimal_point ) + { + v80 = v10; + v14 = v7; + do + { + if ( v12 != v7 ) + { + v7 = v14; + v10 = v80; + goto LABEL_12; + } + v12 = decimal_point[++v13]; + v7 = v11[v13]; + v15 = &v11[v13]; + } + while ( v12 ); + v10 = v80; + v16 = &v11[v13]; + if ( __hexdig_D2A[v7] ) + { + if ( v7 == 48 ) + { + v11 += v13; + do + v27 = *++v11; + while ( v27 == 48 ); + v79 = (unsigned int)v11; + v10 = 1; + v81 = __hexdig_D2A[v27] == 0; + if ( !__hexdig_D2A[v27] ) + { +LABEL_32: + if ( v27 != *decimal_point ) + { + v28 = *v11; + v29 = 4 * (v16 - v11); + v30 = v16 == 0; + v31 = 0; + if ( !v30 ) + v31 = v29; + v85 = v31; +LABEL_36: + if ( (v28 & 0xDF) != 80 ) + goto LABEL_37; +LABEL_53: + v83 = v11; + v11 = (unsigned __int8 *)v79; + goto LABEL_54; + } + if ( v16 ) + { + v85 = 4 * (v16 - v11); + if ( (*v11 & 0xDF) != 80 ) + { +LABEL_37: + *a1 = v11; + if ( !v81 ) + { +LABEL_38: + v32 = 0; + for ( i = (int)&v11[-v79 - 1]; i > 7; ++v32 ) + i >>= 1; + v86 = __Balloc_D2A(v32); + v89 = v86 + 5; + if ( decimal_point[1] ) + { + v34 = 0; + do + ++v34; + while ( decimal_point[v34 + 1] ); + v91 = v34; + } + else + { + v91 = 0; + } + if ( (unsigned int)v11 <= v79 ) + { + v37 = (unsigned int *)(v86 + 5); + v53 = 0; + v42 = v86 + 6; + v55 = 32; + } + else + { + v35 = 0; + v36 = v11; + v84 = &decimal_point[v91]; + v37 = (unsigned int *)(v86 + 5); + v82 = 0; + do + { + while ( 1 ) + { + v40 = *(v36 - 1); + v41 = (unsigned int)(v36 - 1); + v42 = (int *)(v37 + 1); + if ( (_BYTE)v40 != *v84 ) + break; + v36 = (unsigned __int8 *)(v41 - v91); + if ( v41 - v91 <= v79 ) + goto LABEL_68; + } + if ( v35 == 32 ) + { + v43 = v82; + v44 = (int *)(v37 + 2); + v82 = 0; + *v37++ = v43; + v40 = *(v36 - 1); + v42 = v44; + v38 = 0; + v35 = 4; + } + else + { + v38 = v35; + v35 += 4; + } + v39 = (__hexdig_D2A[v40] & 0xF) << v38; + v36 = (unsigned __int8 *)v41; + v82 |= v39; + } + while ( v41 > v79 ); +LABEL_68: + v53 = v82; + _BitScanReverse(&v54, v82); + v55 = v54 ^ 0x1F; + } + *v37 = v53; + v56 = v42 - v89; + v86[4] = v56; + v57 = 32 * v56 - v55; + v58 = *a2; + if ( v57 > *a2 ) + { + v69 = v57 - v58; + v59 = __any_on_D2A((int)v86, v69); + if ( v59 ) + { + v59 = 1; + if ( (v89[(v69 - 1) >> 5] & (1 << (v69 - 1))) != 0 ) + { + if ( v69 == 1 || (v59 = 3, !__any_on_D2A((int)v86, v69 - 1)) ) + v59 = 2; + } + } + __rshift_D2A((int)v86, v69); + v85 += v69; + } + else + { + v59 = 0; + if ( v57 < *a2 ) + { + v85 -= v58 - v57; + v86 = __lshift_D2A(v86, v58 - v57); + v89 = v86 + 5; + } + } + if ( a2[2] < v85 ) + { +LABEL_110: + __Bfree_D2A(v86); + goto LABEL_111; + } + v60 = a2[1]; + if ( v60 <= v85 ) + { + v61 = 1; + goto LABEL_75; + } + v64 = v60 - v85; + if ( v58 > v60 - v85 ) + { + v70 = v64 - 1; + if ( v59 ) + { + v59 = 1; + } + else if ( v64 != 1 ) + { + v76 = __any_on_D2A((int)v86, v64 - 1); + v70 = v64 - 1; + v59 = v76; + } + Val = v64; + if ( (v89[v70 >> 5] & (1 << v70)) != 0 ) + v59 |= 2u; + v58 -= v64; + v61 = 2; + __rshift_D2A((int)v86, Val); + v85 = a2[1]; +LABEL_75: + if ( !v59 ) + { +LABEL_80: + *a4 = v86; + *a3 = v85; + return v61; + } + v62 = a2[3]; + if ( v62 == 2 ) + { + a5 = 1 - a5; + } + else if ( v62 != 3 ) + { + if ( v62 != 1 || (v59 & 2) == 0 || ((*v89 | v59) & 1) == 0 ) + goto LABEL_79; +LABEL_128: + v71 = v86[4]; + v86 = __increment_D2A(v86); + v72 = (unsigned int)(v86 + 5); + if ( v61 == 2 ) + { + v61 = 34; + if ( *a2 - 1 == v58 ) + v61 = ((*(_DWORD *)(v72 + 4 * (v58 >> 5)) & (1 << v58)) == 0) + 33; + goto LABEL_80; + } + if ( v86[4] <= v71 + && ((v73 = v58 & 0x1F) == 0 + || (_BitScanReverse(&v72, *(_DWORD *)(v72 + 4 * v71 - 4)), 32 - v73 <= (int)(v72 ^ 0x1F))) + || (__rshift_D2A((int)v86, 1), ++v85, a2[2] >= v85) ) + { + v61 = 33; + goto LABEL_80; + } + goto LABEL_110; + } + if ( !a5 ) + { +LABEL_79: + v61 |= 0x10u; + goto LABEL_80; + } + goto LABEL_128; + } + v65 = a2[3]; + if ( v65 == 2 ) + { + if ( !a5 ) + goto LABEL_141; + } + else if ( v65 == 3 ) + { + if ( a5 ) + goto LABEL_141; + } + else if ( v65 == 1 && v58 == v64 ) + { + if ( v58 == 1 ) + { +LABEL_141: + v86[4] = 1; + *v89 = 1; + goto LABEL_93; + } + if ( __any_on_D2A((int)v86, v58 - 1) ) + { + v60 = a2[1]; + goto LABEL_141; + } + } + __Bfree_D2A(v86); +LABEL_99: + *_errno() = 34; + return 80; + } + return 0; + } + goto LABEL_53; + } + v66 = decimal_point[1]; + if ( v66 ) + { + v67 = 1; + while ( v11[v67] == v66 ) + { + v66 = decimal_point[++v67]; + v68 = v67; + if ( !v66 ) + goto LABEL_151; + } + v28 = *v11; + } + else + { + v68 = 1; +LABEL_151: + v74 = &v11[v68]; + v11 = v74; + v28 = *v74; + if ( __hexdig_D2A[*v74] ) + { + do + { + v75 = *++v11; + v28 = v75; + } + while ( __hexdig_D2A[v75] ); + v85 = 4 * (v74 - v11); + goto LABEL_36; + } + } + v85 = 0; + goto LABEL_36; + } + } + else + { + v81 = 0; + v11 += v13; + v10 = 1; + v79 = (unsigned int)v15; + } + do + { +LABEL_31: + v26 = *++v11; + v27 = v26; + } + while ( __hexdig_D2A[v26] ); + goto LABEL_32; + } + } + else + { +LABEL_12: + v16 = v11; + } + v83 = v16; + if ( (v7 & 0xDF) != 80 ) + { + v81 = 1; + v17 = 0; + v85 = 0; + v78 = 0; + goto LABEL_15; + } + v85 = 0; + v81 = 1; +LABEL_54: + v45 = v83[1]; + if ( (_BYTE)v45 == 43 ) + { + v78 = 0; + } + else + { + if ( (_BYTE)v45 != 45 ) + { + v78 = 0; + v87 = v83 + 1; + goto LABEL_57; + } + v78 = 1; + } + v45 = v83[2]; + v87 = v83 + 2; +LABEL_57: + v46 = (unsigned __int8)__hexdig_D2A[v45]; + v17 = 0; + v16 = v83; + if ( (unsigned __int8)(v46 - 1) <= 0x18u ) + { + v90 = v46 - 16; + v16 = v87 + 1; + v47 = (unsigned __int8)__hexdig_D2A[(unsigned __int8)v87[1]]; + if ( (unsigned __int8)(__hexdig_D2A[(unsigned __int8)v87[1]] - 1) <= 0x18u ) + { + v88 = decimal_point; + v48 = v47; + v49 = v90; + do + { + v30 = (v49 & 0xF8000000) == 0; + v50 = 5 * v49; + if ( !v30 ) + v17 = 1; + v51 = v16[1]; + v49 = v48 + 2 * v50 - 16; + ++v16; + v48 = (unsigned __int8)__hexdig_D2A[v51]; + } + while ( (unsigned __int8)(__hexdig_D2A[v51] - 1) <= 0x18u ); + v90 = v49; + decimal_point = v88; + } + v52 = -v90; + if ( !v78 ) + v52 = v90; + v85 += v52; + } +LABEL_15: + if ( !v10 ) + v16 = v11 - 1; + *a1 = v16; + if ( v81 ) + return 0; + if ( !v17 ) + { + v79 = (unsigned int)v11; + v11 = v83; + goto LABEL_38; + } + v18 = a2[3]; + if ( v78 ) + { + if ( v18 == 2 ) + { + if ( a5 ) + goto LABEL_99; + } + else if ( v18 != 3 || !a5 ) + { + goto LABEL_99; + } + v86 = __Balloc_D2A(0); + v86[4] = 1; + v86[5] = 1; + v60 = a2[1]; +LABEL_93: + v25 = 98; + *a4 = v86; + *a3 = v60; + *_errno() = 34; + return v25; + } + if ( v18 == 2 ) + { + if ( !a5 ) + goto LABEL_111; + goto LABEL_23; + } + if ( v18 == 3 ) + { + if ( a5 ) + goto LABEL_111; + goto LABEL_23; + } + if ( v18 != 1 ) + { +LABEL_23: + v19 = *a2 & 0x1F; + v20 = *a2 >> 5; + v21 = v20 - ((v19 == 0) - 1); + v22 = 0; + for ( j = v21 >> 1; j; j >>= 1 ) + ++v22; + v24 = __Balloc_D2A(v22); + *a4 = v24; + v24[4] = v21; + if ( v20 > 0 ) + { + memset(v24 + 5, 255, 4 * v20); + v78 = v20; + } + if ( v21 > v20 ) + v24[v78 + 5] = 32 >> (32 - v19); + v25 = 17; + *a3 = a2[1]; + return v25; + } +LABEL_111: + *_errno() = 34; + return 163; +} +// 769690: using guessed type char byte_769690; + +//----- (0046B2F0) -------------------------------------------------------- +int __cdecl __rshift_D2A(int a1, int a2) +{ + int v2; // ebx + _DWORD *v3; // ebp + unsigned int v4; // ebx + _DWORD *v5; // esi + char v6; // di + int *v7; // edx + int v8; // eax + int v9; // esi + int v10; // ebx + _DWORD *v11; // edx + int result; // eax + _DWORD *v13; // edi + unsigned int v14; // [esp+0h] [ebp-24h] + int v15; // [esp+4h] [ebp-20h] + int v16; // [esp+8h] [ebp-1Ch] + + v2 = *(_DWORD *)(a1 + 16); + v16 = a2 >> 5; + v15 = v2; + if ( v2 <= a2 >> 5 ) + goto LABEL_8; + v3 = (_DWORD *)(a1 + 20); + v4 = a1 + 20 + 4 * v2; + v5 = (_DWORD *)(a1 + 20 + 4 * (a2 >> 5)); + v6 = a2 & 0x1F; + if ( (a2 & 0x1F) == 0 ) + { + v13 = (_DWORD *)(a1 + 20); + if ( v4 > (unsigned int)v5 ) + { + do + *v13++ = *v5++; + while ( v4 > (unsigned int)v5 ); + v11 = &v3[v15 - v16]; + goto LABEL_13; + } +LABEL_8: + *(_DWORD *)(a1 + 16) = 0; +LABEL_9: + result = a1; + *(_DWORD *)(a1 + 20) = 0; + return result; + } + v7 = v5 + 1; + v8 = *v5 >> v6; + if ( v4 <= (unsigned int)(v5 + 1) ) + { + *(_DWORD *)(a1 + 20) = v8; + if ( v8 ) + { + v11 = (_DWORD *)(a1 + 20); +LABEL_7: + ++v11; + goto LABEL_13; + } + goto LABEL_8; + } + v14 = v4; + v9 = a1 + 20; + do + { + v10 = *v7; + v9 += 4; + ++v7; + *(_DWORD *)(v9 - 4) = (v10 << (32 - v6)) | v8; + v8 = (unsigned int)*(v7 - 1) >> v6; + } + while ( v14 > (unsigned int)v7 ); + v3 = (_DWORD *)(a1 + 20); + v11 = (_DWORD *)(a1 + 20 + 4 * (v15 - v16) - 4); + *v11 = v8; + if ( v8 ) + goto LABEL_7; +LABEL_13: + result = v11 - v3; + *(_DWORD *)(a1 + 16) = result; + if ( v11 == v3 ) + goto LABEL_9; + return result; +} + +//----- (0046B400) -------------------------------------------------------- +int __cdecl __trailz_D2A(int a1) +{ + int *v1; // eax + unsigned int v2; // ebx + int v3; // edx + + v1 = (int *)(a1 + 20); + v2 = a1 + 20 + 4 * *(_DWORD *)(a1 + 16); + v3 = 0; + if ( a1 + 20 < v2 ) + { + while ( 1 ) + { + _ECX = *v1; + if ( *v1 ) + break; + ++v1; + v3 += 32; + if ( v2 <= (unsigned int)v1 ) + return v3; + } + if ( v2 > (unsigned int)v1 ) + { + __asm { tzcnt ecx, ecx } + v3 += _ECX; + } + } + return v3; +} + +//----- (0046B440) -------------------------------------------------------- +int __mingw_hexdig_init_D2A() +{ + const char *v0; // edx + int v1; // eax + int v2; // ecx + char *v3; // edx + int v4; // eax + int v5; // ecx + int v6; // edx + int result; // eax + char v8; // cl + + v0 = "123456789"; + v1 = 48; + do + { + v2 = (int)&(v0++)[16 - (_DWORD)"123456789"]; + __hexdig_D2A[v1] = v2; + v1 = *((unsigned __int8 *)v0 - 1); + } + while ( (_BYTE)v1 ); + v3 = (char *)&unk_55ABB4; + v4 = 97; + do + { + v5 = (int)&(v3++)[26 - (_DWORD)&unk_55ABB4]; + __hexdig_D2A[v4] = v5; + v4 = (unsigned __int8)*(v3 - 1); + } + while ( (_BYTE)v4 ); + v6 = 5614523; + result = 65; + do + { + v8 = v6++ + 95; + __hexdig_D2A[result] = v8; + result = *(unsigned __int8 *)(v6 - 1); + } + while ( (_BYTE)result ); + return result; +} + +//----- (0046B4C0) -------------------------------------------------------- +int __cdecl __hexnan_D2A(unsigned __int8 **a1, int *a2, int *a3) +{ + int *v3; // edx + unsigned __int8 *v4; // ebx + unsigned int v5; // eax + unsigned __int8 v6; // dl + unsigned int v7; // edx + unsigned __int8 *v8; // eax + int *v9; // ebp + int v10; // esi + int *v11; // edi + char v12; // cl + int *v13; // ebx + int v14; // edx + unsigned int v15; // eax + int v16; // edx + int v17; // eax + int *v18; // eax + unsigned int v19; // edi + int *v20; // ebp + int *v21; // edi + int *v22; // esi + unsigned int v23; // eax + size_t Size; // edx + int v25; // eax + int *v26; // eax + int v29; // edx + char i; // dl + int *v31; // ecx + _DWORD *v32; // edx + unsigned int v33; // eax + unsigned int v34; // ebx + char v35; // [esp+10h] [ebp-3Ch] + char v36; // [esp+10h] [ebp-3Ch] + int v37; // [esp+14h] [ebp-38h] + int v38; // [esp+18h] [ebp-34h] + int *v39; // [esp+1Ch] [ebp-30h] + unsigned __int8 *v40; // [esp+20h] [ebp-2Ch] + int *v41; // [esp+28h] [ebp-24h] + int v42; // [esp+2Ch] [ebp-20h] + + if ( !byte_769690 ) + __mingw_hexdig_init_D2A(); + v42 = *a2 & 0x1F; + v3 = &a3[*a2 >> 5]; + if ( v42 ) + { + v39 = &a3[*a2 >> 5]; + v41 = v3 + 1; + } + else + { + v41 = &a3[*a2 >> 5]; + v39 = v3 - 1; + } + *(v41 - 1) = 0; + v4 = *a1; + v5 = (*a1)[1]; + v6 = (*a1)[1]; + if ( !v6 ) + return 4; + while ( v5 <= 0x20 ) + { + v5 = v4[2]; + ++v4; + v6 = v5; + if ( !v5 ) + return 4; + } + if ( v6 == 48 && (v4[2] & 0xDF) == 88 && (v7 = v4[3], (unsigned __int8)v7 > 0x20u) ) + { + v8 = v4 + 3; + v4 += 2; + } + else + { + v7 = v4[1]; + v8 = v4 + 1; + if ( !v4[1] ) + return 4; + } + v9 = v39; + v38 = 0; + v10 = 0; + v37 = 0; + v11 = v39; + do + { + while ( 1 ) + { + v12 = __hexdig_D2A[v7]; + if ( v12 ) + break; + if ( v7 > 0x20 ) + { + v31 = v11; + v19 = (unsigned int)v9; + v20 = v31; + if ( v7 == 41 && v37 ) + { + *a1 = v4 + 2; + goto LABEL_25; + } + while ( 1 ) + { + ++v8; + if ( v7 == 41 ) + break; + v7 = (char)*v8; + if ( !*v8 ) + return 4; + } + *a1 = v8; + return 4; + } + if ( v37 > v38 ) + { + if ( v11 < v9 && v10 <= 7 ) + { + v40 = v8; + v13 = v11; + v35 = 4 * (8 - v10); + v14 = *v11; + do + { + v15 = v13[1]; + ++v13; + v16 = (v15 << (32 - v35)) | v14; + v17 = v15 >> v35; + *(v13 - 1) = v16; + *v13 = v17; + v14 = v17; + } + while ( v13 < v9 ); + v8 = v40; + } + if ( v11 <= a3 ) + { + v7 = v8[1]; + v4 = v8; + v10 = 8; + goto LABEL_23; + } + v9 = v11 - 1; + *(v11 - 1) = 0; + v10 = 0; + v38 = v37; + --v11; + } + for ( i = v8[1]; (unsigned __int8)i <= 0x20u; ++v8 ) + i = v8[2]; + if ( i != 48 ) + goto LABEL_49; + if ( (v8[2] & 0xDF) != 88 ) + goto LABEL_49; + v7 = v8[3]; + if ( (unsigned __int8)v7 <= 0x20u ) + goto LABEL_49; + v4 = v8 + 2; + v8 += 3; + } + ++v10; + ++v37; + if ( v10 > 8 ) + { + if ( v11 <= a3 ) + goto LABEL_49; + *(v11 - 1) = 0; + v29 = 0; + --v11; + v10 = 1; + } + else + { + v29 = 16 * *v11; + } + *v11 = v29 | v12 & 0xF; +LABEL_49: + v7 = v8[1]; + v4 = v8; +LABEL_23: + ++v8; + } + while ( v7 ); + v18 = v11; + v19 = (unsigned int)v9; + v20 = v18; + if ( !v37 ) + return 4; +LABEL_25: + if ( v19 > (unsigned int)v20 && v10 <= 7 ) + { + v32 = v20; + v36 = 4 * (8 - v10); + v33 = *v20; + do + { + v34 = v32[1]; + *v32++ = (v34 << (32 - v36)) | v33; + v33 = v34 >> v36; + *v32 = v34 >> v36; + } + while ( (unsigned int)v32 < v19 ); + } + if ( a3 >= v20 ) + { + v25 = *(v41 - 1); + if ( v42 ) + { + v25 &= 0xFFFFFFFF >> (32 - v42); + *(v41 - 1) = v25; + } + } + else + { + v21 = a3; + v22 = v20; + do + *v21++ = *v22++; + while ( v39 >= v22 ); + v23 = 4 * ((unsigned int)((char *)v39 - (char *)v20) >> 2) + 4; + if ( (char *)v39 + 1 < (char *)v20 + 1 ) + v23 = 4; + Size = 4 * ((unsigned int)((char *)v39 - ((char *)a3 + v23)) >> 2) + 4; + if ( (char *)a3 + v23 + 1 > (char *)v39 + 1 ) + Size = 4; + memset((char *)a3 + v23, 0, Size); + v25 = *(v41 - 1); + } + if ( v25 ) + return 5; + if ( v39 != a3 ) + { + v26 = v39; + while ( 1 ) + { + if ( *--v26 ) + return 5; + if ( a3 == v26 ) + { + v39 = v26; + break; + } + } + } + *v39 = 1; + return 5; +} +// 769690: using guessed type char byte_769690; + +//----- (0046B8E0) -------------------------------------------------------- +void __usercall dtoa_lock(int a1@) +{ + int v2; // eax + __int32 v3; // eax + + if ( dtoa_CS_init == 2 ) + goto LABEL_9; + if ( dtoa_CS_init ) + { + if ( dtoa_CS_init != 1 ) + return; + do + { +LABEL_4: + Sleep(1u); + v2 = dtoa_CS_init; + } + while ( dtoa_CS_init == 1 ); + goto LABEL_5; + } + v3 = _InterlockedExchange(&dtoa_CS_init, 1); + if ( !v3 ) + { + InitializeCriticalSection(&dtoa_CritSec); + InitializeCriticalSection(&CriticalSection); + atexit(dtoa_lock_cleanup); + dtoa_CS_init = 2; + goto LABEL_9; + } + if ( v3 == 2 ) + { + dtoa_CS_init = 2; + goto LABEL_9; + } + v2 = dtoa_CS_init; + if ( dtoa_CS_init == 1 ) + goto LABEL_4; +LABEL_5: + if ( v2 == 2 ) +LABEL_9: + EnterCriticalSection((LPCRITICAL_SECTION)(24 * a1 + 7774400)); +} +// 76A0A8: using guessed type int dtoa_CS_init; + +//----- (0046B9C0) -------------------------------------------------------- +void dtoa_lock_cleanup(void) +{ + if ( _InterlockedExchange(&dtoa_CS_init, 3) == 2 ) + { + DeleteCriticalSection(&dtoa_CritSec); + DeleteCriticalSection(&CriticalSection); + } +} +// 76A0A8: using guessed type int dtoa_CS_init; + +//----- (0046BA00) -------------------------------------------------------- +int *__cdecl __Balloc_D2A(int a1) +{ + int v1; // esi + int *result; // eax + bool v3; // zf + int *v4; // [esp+1Ch] [ebp-10h] + + dtoa_lock(0); + if ( a1 > 9 ) + goto LABEL_2; + result = (int *)freelist[a1]; + if ( result ) + { + v3 = dtoa_CS_init == 2; + freelist[a1] = *result; + if ( !v3 ) + goto LABEL_4; +LABEL_8: + v4 = result; + LeaveCriticalSection(&dtoa_CritSec); + result = v4; + goto LABEL_4; + } + result = (int *)pmem_next; + v1 = 1 << a1; + if ( ((unsigned int)(4 * (1 << a1) + 27) >> 3) + (((_BYTE *)pmem_next - (_BYTE *)&private_mem) >> 3) > 0x120 ) + { +LABEL_2: + v1 = 1 << a1; + result = (int *)malloc((4 * (1 << a1) + 27) & 0xFFFFFFF8); + if ( !result ) + return result; + } + else + { + pmem_next = (char *)pmem_next + ((4 * (1 << a1) + 27) & 0xFFFFFFF8); + } + v3 = dtoa_CS_init == 2; + result[1] = a1; + result[2] = v1; + if ( v3 ) + goto LABEL_8; +LABEL_4: + result[4] = 0; + result[3] = 0; + return result; +} +// 53E248: using guessed type void *pmem_next; +// 76A080: using guessed type int freelist[]; +// 76A0A8: using guessed type int dtoa_CS_init; + +//----- (0046BAF0) -------------------------------------------------------- +void __cdecl __Bfree_D2A(void *Block) +{ + int v1; // eax + bool v2; // zf + int v3; // edx + + if ( Block ) + { + if ( *((int *)Block + 1) <= 9 ) + { + dtoa_lock(0); + v1 = *((_DWORD *)Block + 1); + v2 = dtoa_CS_init == 2; + v3 = freelist[v1]; + freelist[v1] = (int)Block; + *(_DWORD *)Block = v3; + if ( v2 ) + LeaveCriticalSection(&dtoa_CritSec); + } + else + { + free(Block); + } + } +} +// 76A080: using guessed type int freelist[]; +// 76A0A8: using guessed type int dtoa_CS_init; + +//----- (0046BB60) -------------------------------------------------------- +int *__cdecl __multadd_D2A(int *a1, int a2, int a3) +{ + int v3; // ecx + __int64 v4; // rdi + unsigned __int64 v5; // rax + int *v6; // ebp + int *v8; // eax + __int64 v9; // [esp+10h] [ebp-2Ch] + int v10; // [esp+1Ch] [ebp-20h] + + v3 = 0; + HIDWORD(v4) = a3; + LODWORD(v4) = a3 >> 31; + v10 = a1[4]; + LODWORD(v9) = a2; + do + { + HIDWORD(v9) = a2 >> 31; + v5 = __PAIR64__(v4, HIDWORD(v4)) + v9 * (unsigned int)a1[v3 + 5]; + a1[v3 + 5] = v5; + LODWORD(v4) = 0; + ++v3; + HIDWORD(v4) = HIDWORD(v5); + } + while ( v10 > v3 ); + v6 = a1; + if ( v4 ) + { + if ( a1[2] <= v10 ) + { + v8 = __Balloc_D2A(a1[1] + 1); + v6 = v8; + if ( v8 ) + { + memcpy(v8 + 3, a1 + 3, 4 * a1[4] + 8); + __Bfree_D2A(a1); + v6[v10 + 5] = HIDWORD(v4); + v6[4] = v10 + 1; + } + } + else + { + v6 = a1; + a1[v10 + 5] = HIDWORD(v5); + a1[4] = v10 + 1; + } + } + return v6; +} + +//----- (0046BC40) -------------------------------------------------------- +_DWORD *__cdecl __i2b_D2A(int a1) +{ + _DWORD *result; // eax + bool v2; // zf + _DWORD *v3; // [esp+1Ch] [ebp-10h] + + dtoa_lock(0); + result = (_DWORD *)dword_76A084; + if ( dword_76A084 ) + { + dword_76A084 = *(_DWORD *)dword_76A084; + if ( dtoa_CS_init != 2 ) + { +LABEL_3: + result[3] = 0; + result[4] = 1; + result[5] = a1; + return result; + } +LABEL_8: + v3 = result; + LeaveCriticalSection(&dtoa_CritSec); + result = v3; + goto LABEL_3; + } + result = pmem_next; + if ( (unsigned int)((((_BYTE *)pmem_next - (_BYTE *)&private_mem) >> 3) + 4) <= 0x120 ) + { + pmem_next = (char *)pmem_next + 32; +LABEL_7: + v2 = dtoa_CS_init == 2; + result[1] = 1; + result[2] = 2; + if ( !v2 ) + goto LABEL_3; + goto LABEL_8; + } + result = malloc(0x20u); + if ( result ) + goto LABEL_7; + return result; +} +// 53E248: using guessed type void *pmem_next; +// 76A084: using guessed type int dword_76A084; +// 76A0A8: using guessed type int dtoa_CS_init; + +//----- (0046BCF0) -------------------------------------------------------- +int *__cdecl __mult_D2A(int a1, int a2) +{ + int v2; // edi + int v3; // ebx + int v4; // esi + int v5; // ebp + int *v6; // eax + unsigned int v7; // eax + unsigned int v8; // edx + unsigned int v9; // esi + unsigned int *v10; // ebp + unsigned __int64 v11; // rax + int v12; // eax + unsigned int v14; // [esp+14h] [ebp-48h] + unsigned int v15; // [esp+18h] [ebp-44h] + unsigned int v16; // [esp+1Ch] [ebp-40h] + unsigned int v17; // [esp+20h] [ebp-3Ch] + unsigned int *v18; // [esp+24h] [ebp-38h] + unsigned int v19; // [esp+28h] [ebp-34h] + int v20; // [esp+2Ch] [ebp-30h] + int *v21; // [esp+30h] [ebp-2Ch] + unsigned int *v22; // [esp+34h] [ebp-28h] + unsigned int v23; // [esp+3Ch] [ebp-20h] + + v2 = a1; + v3 = a2; + v4 = *(_DWORD *)(a1 + 16); + v5 = *(_DWORD *)(a2 + 16); + if ( v4 >= v5 ) + { + v5 = *(_DWORD *)(a1 + 16); + v4 = *(_DWORD *)(a2 + 16); + v3 = a1; + v2 = a2; + } + v20 = v5 + v4; + v6 = __Balloc_D2A(*(_DWORD *)(v3 + 4) + (*(_DWORD *)(v3 + 8) < v5 + v4)); + v21 = v6; + if ( v6 ) + { + v22 = (unsigned int *)(v6 + 5); + v7 = (unsigned int)&v6[v20 + 5]; + if ( (unsigned int)v22 < v7 ) + memset(v22, 0, 4 * ((v7 - (unsigned int)v21 - 21) >> 2) + 4); + v17 = v3 + 20 + 4 * v5; + v15 = v2 + 20; + v19 = v2 + 20 + 4 * v4; + if ( v2 + 20 < v19 ) + { + v8 = 4; + if ( v17 >= v3 + 21 ) + v8 = 4 * ((unsigned int)(4 * v5 - 1) >> 2) + 4; + v23 = v8; + v18 = v22; + do + { + while ( 1 ) + { + v15 += 4; + if ( *(_DWORD *)(v15 - 4) ) + break; + ++v18; + if ( v19 <= v15 ) + goto LABEL_15; + } + v16 = *(_DWORD *)(v15 - 4); + v9 = 0; + v14 = v3 + 20; + v10 = v18; + do + { + v14 += 4; + v11 = v9 + *v10++ + *(unsigned int *)(v14 - 4) * (unsigned __int64)v16; + v9 = HIDWORD(v11); + *(v10 - 1) = v11; + } + while ( v17 > v14 ); + LODWORD(v11) = v18++; + *(_DWORD *)(v11 + v23) = HIDWORD(v11); + } + while ( v19 > v15 ); + } +LABEL_15: + if ( v20 > 0 ) + { + v12 = v20; + do + { + if ( v22[v12 - 1] ) + break; + --v12; + } + while ( v12 ); + v20 = v12; + } + v21[4] = v20; + } + return v21; +} + +//----- (0046BEA0) -------------------------------------------------------- +int *__cdecl __pow5mult_D2A(int *a1, int a2) +{ + int *v2; // edi + int v3; // ebx + int *v4; // ebp + int **v5; // esi + int *v6; // edi + int *v7; // eax + int *v8; // edi + int v10; // eax + bool v11; // zf + int v12; // edx + int *v13; // eax + int *v14; // eax + int *Block; // [esp+0h] [ebp-3Ch] + + v2 = a1; + if ( (a2 & 3) == 0 || (v2 = __multadd_D2A(a1, dword_55ABDC[a2 & 3], 0)) != 0 ) + { + v3 = a2 >> 2; + v4 = v2; + if ( a2 >> 2 ) + { + v5 = (int **)p5s; + if ( !p5s ) + { + dtoa_lock(1); + v5 = (int **)p5s; + if ( !p5s ) + { + v14 = __Balloc_D2A(1); + v5 = (int **)v14; + if ( !v14 ) + { + p5s = 0; + return 0; + } + v14[5] = 625; + v14[4] = 1; + p5s = (int)v14; + *v14 = 0; + } + if ( dtoa_CS_init == 2 ) + LeaveCriticalSection(&CriticalSection); + } + v4 = v2; + if ( (v3 & 1) != 0 ) + goto LABEL_9; +LABEL_5: + v3 >>= 1; + if ( v3 ) + { + while ( 1 ) + { + v6 = *v5; + if ( *v5 ) + goto LABEL_7; + dtoa_lock(1); + v6 = *v5; + if ( !*v5 ) + { + v13 = __mult_D2A((int)v5, (int)v5); + *v5 = v13; + v6 = v13; + if ( !v13 ) + return 0; + *v13 = 0; + } + if ( dtoa_CS_init != 2 ) + { +LABEL_7: + v5 = (int **)v6; + } + else + { + v5 = (int **)v6; + LeaveCriticalSection(&CriticalSection); + } + if ( (v3 & 1) == 0 ) + goto LABEL_5; +LABEL_9: + v7 = __mult_D2A((int)v4, (int)v5); + v8 = v7; + if ( !v7 ) + return 0; + if ( !v4 ) + { + v4 = v7; + goto LABEL_5; + } + if ( v4[1] <= 9 ) + { + dtoa_lock(0); + v10 = v4[1]; + v11 = dtoa_CS_init == 2; + v12 = freelist[v10]; + freelist[v10] = (int)v4; + *v4 = v12; + v4 = v8; + if ( v11 ) + LeaveCriticalSection(&dtoa_CritSec); + goto LABEL_5; + } + Block = v4; + v4 = v7; + free(Block); + v3 >>= 1; + if ( !v3 ) + return v4; + } + } + } + return v4; + } + return 0; +} +// 55ABDC: using guessed type int dword_55ABDC[]; +// 769760: using guessed type int p5s; +// 76A080: using guessed type int freelist[]; +// 76A0A8: using guessed type int dtoa_CS_init; + +//----- (0046C080) -------------------------------------------------------- +int *__cdecl __lshift_D2A(int *a1, int a2) +{ + int v2; // edx + int v3; // esi + int i; // eax + int *v5; // eax + int *v6; // edi + int *v7; // esi + unsigned int v8; // edx + char v9; // cl + int *v10; // ebp + unsigned int v11; // eax + int v12; // ebx + int v13; // ebx + unsigned int v14; // ecx + _DWORD *v16; // edi + _DWORD *v17; // esi + int *v18; // [esp+1Ch] [ebp-30h] + int v19; // [esp+20h] [ebp-2Ch] + + v2 = a1[1]; + v3 = a2 >> 5; + v19 = (a2 >> 5) + a1[4]; + for ( i = a1[2]; v19 + 1 > i; ++v2 ) + i *= 2; + v5 = __Balloc_D2A(v2); + v18 = v5; + if ( v5 ) + { + v6 = v5 + 5; + if ( v3 > 0 ) + { + v6 += v3; + memset(v5 + 5, 0, 4 * v3); + } + v7 = a1 + 5; + v8 = (unsigned int)&a1[a1[4] + 5]; + v9 = a2 & 0x1F; + if ( (a2 & 0x1F) != 0 ) + { + v10 = v6; + v11 = 0; + do + { + v12 = *v7; + ++v10; + ++v7; + *(v10 - 1) = (v12 << v9) | v11; + v11 = (unsigned int)*(v7 - 1) >> (32 - v9); + } + while ( v8 > (unsigned int)v7 ); + v13 = v19 + 1; + v14 = 4 * ((v8 - (unsigned int)a1 - 21) >> 2) + 4; + if ( v8 < (unsigned int)a1 + 21 ) + v14 = 4; + if ( !v11 ) + v13 = v19; + *(int *)((char *)v6 + v14) = v11; + v19 = v13; + } + else + { + do + { + *v6 = *v7; + v17 = v7 + 1; + v16 = v6 + 1; + if ( v8 <= (unsigned int)v17 ) + break; + *v16 = *v17; + v7 = v17 + 1; + v6 = v16 + 1; + } + while ( v8 > (unsigned int)v7 ); + } + v18[4] = v19; + __Bfree_D2A(a1); + } + return v18; +} + +//----- (0046C1C0) -------------------------------------------------------- +int __cdecl __cmp_D2A(int a1, int a2) +{ + int v2; // eax + int v3; // ebx + int v4; // edx + _DWORD *v5; // eax + _DWORD *v6; // edx + + v2 = *(_DWORD *)(a2 + 16); + v3 = *(_DWORD *)(a1 + 16) - v2; + if ( !v3 ) + { + v4 = 4 * v2; + v5 = (_DWORD *)(a1 + 20 + 4 * v2); + v6 = (_DWORD *)(a2 + v4 + 20); + while ( *--v5 == *--v6 ) + { + if ( a1 + 20 >= (unsigned int)v5 ) + return v3; + } + return *v5 < *v6 ? -1 : 1; + } + return v3; +} + +//----- (0046C210) -------------------------------------------------------- +int *__cdecl __diff_D2A(int a1, int a2) +{ + int v2; // esi + int v3; // eax + int v4; // ebx + int v5; // edx + _DWORD *v6; // eax + _DWORD *v7; // edx + int *v8; // eax + int *v9; // edi + int v10; // eax + int v11; // ebx + int v12; // esi + unsigned int v13; // ebp + __int64 v14; // rcx + __int64 v15; // rax + unsigned __int64 v16; // rax + int v17; // edx + unsigned int v18; // ebx + unsigned int v19; // eax + unsigned int v20; // ebx + int v21; // ebx + int v22; // eax + unsigned int *v23; // ecx + int v24; // ebp + int v25; // ebx + unsigned int v26; // eax + unsigned __int64 v27; // rax + int v28; // eax + int v29; // edx + int v31; // [esp+18h] [ebp-44h] + int *v32; // [esp+24h] [ebp-38h] + int v33; // [esp+24h] [ebp-38h] + unsigned int v34; // [esp+28h] [ebp-34h] + int *v35; // [esp+2Ch] [ebp-30h] + unsigned int v36; // [esp+30h] [ebp-2Ch] + int v37; // [esp+34h] [ebp-28h] + int v38; // [esp+38h] [ebp-24h] + int *v39; // [esp+3Ch] [ebp-20h] + + v2 = a1; + v3 = *(_DWORD *)(a2 + 16); + v4 = *(_DWORD *)(a1 + 16) - v3; + if ( v4 ) + { + v4 = 0; + if ( *(_DWORD *)(a1 + 16) - v3 < 0 ) + { +LABEL_24: + v4 = 1; + v2 = a2; + a2 = a1; + } +LABEL_6: + v8 = __Balloc_D2A(*(_DWORD *)(v2 + 4)); + v35 = v8; + v9 = v8; + if ( v8 ) + { + v8[3] = v4; + v10 = *(_DWORD *)(v2 + 16); + v11 = v2 + 20; + v12 = 0; + v38 = v11; + v37 = v10; + v36 = v11 + 4 * v10; + v31 = v11; + v13 = a2 + 20; + v34 = a2 + 20 + 4 * *(_DWORD *)(a2 + 16); + v39 = v9 + 5; + v32 = v9 + 5; + do + { + v31 += 4; + v13 += 4; + v14 = *(unsigned int *)(v13 - 4); + v15 = *(unsigned int *)(v31 - 4) - (unsigned __int64)(unsigned int)v12 - v14; + LODWORD(v14) = *(_DWORD *)(v31 - 4) - v12 - v14; + v16 = __PAIR64__(HIDWORD(v15), (unsigned int)++v32) & 0x1FFFFFFFFLL; + v12 = HIDWORD(v16); + *(_DWORD *)(v16 - 4) = v14; + v17 = v14; + } + while ( v34 > v13 ); + v18 = v34 - a2 - 21; + v19 = v18 & 0xFFFFFFFC; + v20 = v18 >> 2; + if ( v34 < a2 + 21 ) + v19 = 0; + v21 = 4 * v20 + 4; + v22 = (int)v39 + v19; + if ( v34 < a2 + 21 ) + v21 = 4; + v23 = (unsigned int *)(v21 + v38); + v33 = v21 + v38; + if ( v36 > v21 + v38 ) + { + v24 = (int)v39 + v21; + v25 = (int)v39 + v21; + do + { + v26 = *v23++; + v27 = v26 - (unsigned __int64)(unsigned int)v12; + v25 += 4; + v12 = BYTE4(v27) & 1; + v17 = v27; + *(_DWORD *)(v25 - 4) = v27; + } + while ( v36 > (unsigned int)v23 ); + v22 = v24 + ((v36 - 1 - v33) & 0xFFFFFFFC); + } + if ( !v17 ) + { + v28 = v22 - 4 * v37; + v29 = v37; + do + --v29; + while ( !*(_DWORD *)(v28 + 4 * v29) ); + v37 = v29; + } + v35[4] = v37; + } + return v35; + } + else + { + v5 = 4 * v3; + v6 = (_DWORD *)(a1 + 20 + 4 * v3); + v7 = (_DWORD *)(a2 + v5 + 20); + do + { + if ( *--v6 != *--v7 ) + { + if ( *v6 < *v7 ) + goto LABEL_24; + goto LABEL_6; + } + } + while ( a1 + 20 < (unsigned int)v6 ); + v35 = __Balloc_D2A(0); + if ( !v35 ) + return v35; + v35[4] = 1; + v35[5] = 0; + return v35; + } +} + +//----- (0046C440) -------------------------------------------------------- +long double __cdecl __b2d_D2A(int a1, _DWORD *a2) +{ + unsigned int v2; // esi + int v3; // ebx + unsigned int v4; // edx + unsigned int v5; // ebp + unsigned int v6; // eax + signed int v7; // eax + int v8; // eax + unsigned int v9; // edi + int v11; // edi + int v12; // edx + double v13; // [esp+0h] [ebp-1Ch] + double v14; // [esp+0h] [ebp-1Ch] + + v2 = a1 + 20; + v3 = a1 + 20 + 4 * *(_DWORD *)(a1 + 16); + v4 = *(_DWORD *)(v3 - 4); + v5 = v3 - 4; + _BitScanReverse(&v6, v4); + v7 = v6 ^ 0x1F; + *a2 = 32 - v7; + if ( v7 > 10 ) + { + v8 = v7 - 11; + if ( v2 >= v5 ) + { + v9 = 0; + if ( v8 ) + { + v9 = 0; + HIDWORD(v13) = (v4 << v8) | 0x3FF00000; + goto LABEL_5; + } + } + else + { + v9 = *(_DWORD *)(v3 - 8); + if ( v8 ) + { + v12 = (v9 >> (32 - v8)) | (v4 << v8); + v9 <<= v8; + HIDWORD(v13) = v12 | 0x3FF00000; + if ( v2 < v3 - 8 ) + v9 |= *(_DWORD *)(v3 - 12) >> (32 - v8); + goto LABEL_5; + } + } + HIDWORD(v13) = v4 | 0x3FF00000; +LABEL_5: + LODWORD(v13) = v9; + return v13; + } + v11 = 0; + if ( v2 < v5 ) + v11 = *(_DWORD *)(v3 - 8) >> (11 - v7); + LODWORD(v14) = v11 | (v4 << (v7 + 21)); + HIDWORD(v14) = (v4 >> (11 - v7)) | 0x3FF00000; + return v14; +} + +//----- (0046C550) -------------------------------------------------------- +int *__cdecl __d2b_D2A(double a1, _DWORD *a2, _DWORD *a3) +{ + int *v3; // edx + int v6; // eax + int v8; // esi + int v9; // ebx + unsigned int v10; // eax + + v3 = __Balloc_D2A(1); + if ( !v3 ) + return v3; + _ESI = LODWORD(a1); + _EBX = HIDWORD(a1) & 0xFFFFF; + v6 = (HIDWORD(a1) >> 20) & 0x7FF; + if ( v6 ) + _EBX = HIDWORD(a1) & 0xFFFFF | 0x100000; + if ( LODWORD(a1) ) + { + __asm { tzcnt edi, esi } + v8 = LODWORD(a1) >> _EDI; + if ( _EDI ) + { + v8 |= _EBX << (32 - _EDI); + _EBX >>= _EDI; + } + v3[6] = _EBX; + v9 = 1 - ((_EBX == 0) - 1); + v3[5] = v8; + v3[4] = v9; + if ( !v6 ) + goto LABEL_8; + } + else + { + v3[4] = 1; + __asm { tzcnt ecx, ebx } + _EDI = _ECX + 32; + v3[5] = _EBX >> _ECX; + v9 = 1; + if ( !v6 ) + { +LABEL_8: + *a2 = _EDI - 1074; + _BitScanReverse(&v10, v3[v9 + 4]); + *a3 = 32 * v9 - (v10 ^ 0x1F); + return v3; + } + } + *a2 = v6 + _EDI - 1075; + *a3 = 53 - _EDI; + return v3; +} + +//----- (0046C650) -------------------------------------------------------- +int __cdecl __strcp_D2A(__int64 a1) +{ + __int64 v1; // rax + char v2; // cl + char v3; // cl + + v1 = a1 + 0x100000000LL; + v2 = *(_BYTE *)HIDWORD(a1); + *(_BYTE *)a1 = *(_BYTE *)HIDWORD(a1); + if ( v2 ) + { + do + { + v3 = *(_BYTE *)HIDWORD(v1); + LODWORD(v1) = v1 + 1; + ++HIDWORD(v1); + *(_BYTE *)v1 = v3; + } + while ( v3 ); + } + return v1; +} + +//----- (0046C680) -------------------------------------------------------- +int *__cdecl __s2b_D2A(int a1, int a2, int a3, int a4, int a5) +{ + int v5; // edi + int v6; // eax + int v7; // edx + int *result; // eax + char *v9; // ebx + int v10; // edx + char *v11; // ebx + char *v12; // esi + int v13; // edx + + v5 = a2; + if ( a3 <= 9 ) + { + v7 = 0; + } + else + { + v6 = 1; + v7 = 0; + do + { + v6 *= 2; + ++v7; + } + while ( (a3 + 8) / 9 > v6 ); + } + result = __Balloc_D2A(v7); + result[4] = 1; + result[5] = a4; + if ( a2 <= 9 ) + { + v11 = (char *)(a1 + a5 + 9); + v5 = 9; + } + else + { + v9 = (char *)(a1 + 9); + do + { + v10 = *v9++; + result = __multadd_D2A(result, 10, v10 - 48); + } + while ( v9 != (char *)(a2 + a1) ); + v11 = &v9[a5]; + } + if ( a3 > v5 ) + { + v12 = &v11[a3 - v5]; + do + { + v13 = *v11++; + result = __multadd_D2A(result, 10, v13 - 48); + } + while ( v12 != v11 ); + } + return result; +} + +//----- (0046C770) -------------------------------------------------------- +long double __cdecl __ratio_D2A(int a1, int a2) +{ + int v2; // eax + double v4; // [esp+10h] [ebp-3Ch] + double v5; // [esp+18h] [ebp-34h] + double v6; // [esp+20h] [ebp-2Ch] + double v7; // [esp+28h] [ebp-24h] + int v8; // [esp+38h] [ebp-14h] BYREF + int v9[4]; // [esp+3Ch] [ebp-10h] BYREF + + v4 = __b2d_D2A(a1, &v8); + v6 = v4; + v5 = __b2d_D2A(a2, v9); + v7 = v5; + v2 = v8 + 32 * (*(_DWORD *)(a1 + 16) - *(_DWORD *)(a2 + 16)) - v9[0]; + if ( v2 <= 0 ) + { + HIDWORD(v7) = HIDWORD(v5) - (v2 << 20); + return v4 / v7; + } + else + { + HIDWORD(v6) = HIDWORD(v4) + (v2 << 20); + return v6 / v5; + } +} +// 46C770: using guessed type int var_10[4]; + +//----- (0046C830) -------------------------------------------------------- +int __cdecl __match_D2A(char **a1, char *a2) +{ + char *v3; // edx + int v4; // eax + int v5; // ebx + + v3 = *a1; + do + { + v5 = *a2++; + ++v3; + if ( !v5 ) + { + *a1 = v3; + return 1; + } + v4 = *v3; + if ( (unsigned int)(v4 - 65) < 0x1A ) + v4 += 32; + } + while ( v4 == v5 ); + return 0; +} + +//----- (0046C880) -------------------------------------------------------- +size_t __cdecl __copybits_D2A(char *a1, int Val, size_t Size) +{ + char *v3; // ecx + _DWORD *v4; // esi + size_t result; // eax + char *v6; // edi + + v3 = a1; + v4 = (_DWORD *)(Size + 20); + result = Size + 20 + 4 * *(_DWORD *)(Size + 16); + if ( Size + 20 < result ) + { + v6 = a1; + do + { + *(_DWORD *)v6 = *v4++; + v6 += 4; + } + while ( result > (unsigned int)v4 ); + result = (result - Size - 21) >> 2; + v3 = &a1[4 * result + 4]; + } + if ( &a1[4 * ((Val - 1) >> 5) + 4] > v3 ) + return (size_t)memset(v3, 0, 4 * ((unsigned int)(&a1[4 * ((Val - 1) >> 5) + 3] - v3) >> 2) + 4); + return result; +} + +//----- (0046C900) -------------------------------------------------------- +int __cdecl __any_on_D2A(int a1, int a2) +{ + int v2; // esi + unsigned int v3; // edx + _DWORD *v4; // eax + int v6; // ecx + + v2 = *(_DWORD *)(a1 + 16); + v3 = a1 + 20; + if ( v2 < a2 >> 5 ) + { + v4 = (_DWORD *)(v3 + 4 * v2); + goto LABEL_4; + } + v4 = (_DWORD *)(v3 + 4 * (a2 >> 5)); + if ( v2 > a2 >> 5 && (a2 & 0x1F) != 0 ) + { + v6 = 1; + if ( *v4 != *v4 >> (a2 & 0x1F) << (a2 & 0x1F) ) + return v6; + } + do + { +LABEL_4: + if ( (unsigned int)v4 <= v3 ) + return 0; + } + while ( !*--v4 ); + return 1; +} + +//----- (0046C970) -------------------------------------------------------- +size_t __cdecl strnlen(const char *String, size_t MaxCount) +{ + size_t v2; // edx + const char *v3; // eax + + v2 = 0; + v3 = String; + if ( MaxCount ) + { + do + { + if ( !*v3 ) + break; + v2 = ++v3 - String; + } + while ( v3 - String < MaxCount ); + } + return v2; +} + +//----- (0046C9A0) -------------------------------------------------------- +size_t __cdecl wcsnlen(const wchar_t *Source, size_t MaxCount) +{ + size_t v2; // edx + size_t v3; // eax + + v2 = MaxCount; + v3 = 0; + if ( MaxCount ) + { + while ( Source[v3] ) + { + if ( MaxCount == ++v3 ) + return v2; + } + return v3; + } + return v2; +} + +//----- (0046CC00) -------------------------------------------------------- +int __cdecl __mbrtowc_cp(LPWSTR lpWideCharStr, BYTE *lpMultiByteStr, int a3, int *a4, UINT CodePage, unsigned int a6) +{ + int v6; // edx + BYTE TestChar; // al + int v8; // eax + int v10; // [esp+2Ch] [ebp-10h] BYREF + + if ( !lpMultiByteStr ) + return 0; + if ( !a3 ) + return -2; + v6 = *a4; + TestChar = *lpMultiByteStr; + *a4 = 0; + v10 = v6; + if ( !TestChar ) + { + *lpWideCharStr = 0; + return 0; + } + if ( a6 <= 1 ) + goto LABEL_11; + if ( (_BYTE)v6 ) + { + BYTE1(v10) = TestChar; + v8 = MultiByteToWideChar(CodePage, 8u, (LPCCH)&v10, 2, lpWideCharStr, 1); +LABEL_9: + if ( v8 ) + return 2; +LABEL_19: + *_errno() = 42; + return -1; + } + if ( !IsDBCSLeadByteEx(CodePage, TestChar) ) + { +LABEL_11: + if ( !CodePage ) + { + *lpWideCharStr = *lpMultiByteStr; + return 1; + } + if ( MultiByteToWideChar(CodePage, 8u, (LPCCH)lpMultiByteStr, 1, lpWideCharStr, 1) ) + return 1; + goto LABEL_19; + } + if ( a3 != 1 ) + { + v8 = MultiByteToWideChar(CodePage, 8u, (LPCCH)lpMultiByteStr, 2, lpWideCharStr, 1); + goto LABEL_9; + } + *(_BYTE *)a4 = *lpMultiByteStr; + return -2; +} + +//----- (0046CDA0) -------------------------------------------------------- +size_t __cdecl mbrtowc(wchar_t *DstCh, const char *SrcCh, size_t SizeInBytes, mbstate_t *State) +{ + wchar_t *v4; // ebx + mbstate_t *v5; // esi + unsigned int v7; // [esp+10h] [ebp-2Ch] + unsigned int v8; // [esp+14h] [ebp-28h] + WCHAR v9; // [esp+2Eh] [ebp-Eh] BYREF + + v4 = DstCh; + v5 = State; + v9 = 0; + if ( !DstCh ) + v4 = &v9; + v8 = ___mb_cur_max_func(); + v7 = ___lc_codepage_func(); + if ( !State ) + v5 = (mbstate_t *)&internal_mbstate_2; + return __mbrtowc_cp(v4, (BYTE *)SrcCh, SizeInBytes, (int *)v5, v7, v8); +} + +//----- (0046CE00) -------------------------------------------------------- +size_t __cdecl mbsrtowcs(wchar_t *Dest, const char **PSrc, size_t Count, mbstate_t *State) +{ + mbstate_t *v4; // eax + int v5; // eax + unsigned int v6; // esi + BYTE *v7; // eax + unsigned int v8; // edi + wchar_t *v9; // ebx + int i; // eax + BYTE *v11; // ecx + unsigned int v13; // ebx + size_t v14; // esi + int v15; // eax + unsigned int v16; // [esp+28h] [ebp-34h] + WCHAR v17[15]; // [esp+3Eh] [ebp-1Eh] BYREF + mbstate_t *Statea; // [esp+6Ch] [ebp+10h] + + v4 = (mbstate_t *)&internal_mbstate_1; + if ( State ) + v4 = State; + Statea = v4; + v16 = ___lc_codepage_func(); + v5 = ___mb_cur_max_func(); + if ( !PSrc ) + return 0; + v6 = v5; + v7 = (BYTE *)*PSrc; + if ( !*PSrc ) + return 0; + if ( Dest ) + { + v8 = 0; + if ( Count ) + { + v9 = Dest; + for ( i = __mbrtowc_cp(Dest, v7, Count, (int *)Statea, v16, v6); + i > 0; + i = __mbrtowc_cp(v9, v11, Count - v8, (int *)Statea, v16, v6) ) + { + v8 += i; + ++v9; + v11 = (BYTE *)&(*PSrc)[i]; + *PSrc = (const char *)v11; + if ( Count <= v8 ) + return v8; + } + if ( Count > v8 && !i ) + *PSrc = 0; + } + return v8; + } + else + { + v13 = v6; + v17[0] = 0; + v14 = 0; + while ( 1 ) + { + v15 = __mbrtowc_cp(v17, &v7[v14], v13, (int *)Statea, v16, v13); + if ( v15 <= 0 ) + break; + v14 += v15; + v7 = (BYTE *)*PSrc; + } + return v14; + } +} +// 46CE00: using guessed type WCHAR var_1E[15]; + +//----- (0046CF40) -------------------------------------------------------- +size_t __cdecl mbrlen(const char *Ch, size_t SizeInBytes, mbstate_t *State) +{ + mbstate_t *v3; // ebx + unsigned int v5; // [esp+10h] [ebp-2Ch] + unsigned int v6; // [esp+14h] [ebp-28h] + WCHAR v7[7]; // [esp+2Eh] [ebp-Eh] BYREF + + v3 = State; + v7[0] = 0; + v6 = ___mb_cur_max_func(); + v5 = ___lc_codepage_func(); + if ( !State ) + v3 = (mbstate_t *)&bss_1; + return __mbrtowc_cp(v7, (BYTE *)Ch, SizeInBytes, (int *)v3, v5, v6); +} +// 46CF40: using guessed type WCHAR var_E[7]; + +//----- (0046CFA0) -------------------------------------------------------- +int __cdecl __wcrtomb_cp(LPSTR lpMultiByteStr, WCHAR a2, UINT CodePage, int cbMultiByte) +{ + int result; // eax + WCHAR WideCharStr[8]; // [esp+2Ch] [ebp-20h] BYREF + BOOL UsedDefaultChar; // [esp+3Ch] [ebp-10h] BYREF + + WideCharStr[0] = a2; + if ( !CodePage ) + { + if ( a2 <= 0xFFu ) + { + *lpMultiByteStr = a2; + return 1; + } +LABEL_7: + *_errno() = 42; + return -1; + } + UsedDefaultChar = 0; + result = WideCharToMultiByte(CodePage, 0, WideCharStr, 1, lpMultiByteStr, cbMultiByte, 0, &UsedDefaultChar); + if ( !result || UsedDefaultChar ) + goto LABEL_7; + return result; +} +// 46CFA0: using guessed type WCHAR WideCharStr[8]; + +//----- (0046D040) -------------------------------------------------------- +size_t __cdecl wcrtomb(char *Dest, wchar_t Source, mbstate_t *State) +{ + char *v3; // ebx + int v4; // edi + unsigned int v5; // eax + CHAR v7; // [esp+1Bh] [ebp-11h] BYREF + + v3 = Dest; + if ( !Dest ) + v3 = &v7; + v4 = ___mb_cur_max_func(); + v5 = ___lc_codepage_func(); + return __wcrtomb_cp(v3, Source, v5, v4); +} + +//----- (0046D090) -------------------------------------------------------- +size_t __cdecl wcsrtombs(char *Dest, const wchar_t **PSource, size_t Count, mbstate_t *State) +{ + size_t v4; // ebx + char *v5; // esi + int v6; // edi + const wchar_t *v7; // ebp + WCHAR *v8; // ebx + int v9; // ebp + size_t v10; // edi + int v11; // eax + int v13; // ebp + WCHAR *i; // edi + int v15; // eax + unsigned int v16; // [esp+1Ch] [ebp-30h] + CHAR v18[33]; // [esp+2Bh] [ebp-21h] BYREF + + v4 = 0; + v5 = Dest; + v16 = ___lc_codepage_func(); + v6 = ___mb_cur_max_func(); + v7 = *PSource; + if ( !*PSource ) + return v4; + if ( !Dest ) + { + v13 = v6; + for ( i = (WCHAR *)*PSource; ; ++i ) + { + v15 = __wcrtomb_cp(v18, *i, v16, v13); + if ( v15 <= 0 ) + break; + v4 += v15; + if ( !v18[v15 - 1] ) + return v4 - 1; + } + return -1; + } + if ( Count ) + { + v8 = (WCHAR *)*PSource; + v9 = v6; + v10 = 0; + while ( 1 ) + { + v11 = __wcrtomb_cp(v5, *v8, v16, v9); + if ( v11 <= 0 ) + return -1; + v5 += v11; + v10 += v11; + if ( !*(v5 - 1) ) + { + *PSource = 0; + return v10 - 1; + } + ++v8; + if ( Count <= v10 ) + { + v7 = v8; + v4 = v10; + break; + } + } + } + *PSource = v7; + return v4; +} +// 46D090: using guessed type CHAR var_21[33]; + +//----- (0046D1B0) -------------------------------------------------------- +FILE *__cdecl __acrt_iob_func(unsigned int Ix) +{ + return &__iob[Ix]; +} + +//----- (0046D1C0) -------------------------------------------------------- +_invalid_parameter_handler __cdecl _get_invalid_parameter_handler() +{ + return (_invalid_parameter_handler)handler; +} +// 76A10C: using guessed type int handler; + +//----- (0046D1D0) -------------------------------------------------------- +_invalid_parameter_handler __cdecl _set_invalid_parameter_handler(_invalid_parameter_handler Handler) +{ + return (_invalid_parameter_handler)_InterlockedExchange(&handler, (__int32)Handler); +} +// 76A10C: using guessed type int handler; + +//----- (0046D1E0) -------------------------------------------------------- +int __cdecl mingw_rand_s(int a1) +{ + char v1; // dl + int result; // eax + + if ( !a1 ) + return 22; + if ( !pRtlGenRandom ) + return 22; + v1 = pRtlGenRandom(a1, 4); + result = 0; + if ( !v1 ) + return 22; + return result; +} +// 76A110: using guessed type int (__stdcall *pRtlGenRandom)(_DWORD, _DWORD); + +//----- (0046D230) -------------------------------------------------------- +int __cdecl init_rand_s(int a1) +{ + HMODULE ModuleHandleW; // eax + int (__cdecl *rand_s)(int); // eax + HMODULE LibraryW; // eax + + ModuleHandleW = GetModuleHandleW(&ModuleName); + rand_s = (int (__cdecl *)(int))GetProcAddress(ModuleHandleW, "rand_s"); + if ( !rand_s ) + { + LibraryW = LoadLibraryW(&LibFileName); + pRtlGenRandom = (int (__stdcall *)(_DWORD, _DWORD))GetProcAddress(LibraryW, "SystemFunction036"); + rand_s = mingw_rand_s; + } + _rand_s = rand_s; + return rand_s(a1); +} +// 53E258: using guessed type int (__cdecl *_rand_s)(int); +// 76A110: using guessed type int (__stdcall *pRtlGenRandom)(_DWORD, _DWORD); + +//----- (0046D2B0) -------------------------------------------------------- +void __cdecl _lock_file(FILE *Stream) +{ + FILE *v1; // eax + + if ( Stream >= __acrt_iob_func(0) && Stream <= __acrt_iob_func(0x13u) ) + { + v1 = __acrt_iob_func(0); + _lock(Stream - v1 + 16); + Stream->_flag |= 0x8000u; + } + else + { + EnterCriticalSection((LPCRITICAL_SECTION)&Stream[1]); + } +} +// 46D498: using guessed type int __cdecl _lock(_DWORD); + +//----- (0046D320) -------------------------------------------------------- +void __cdecl _unlock_file(FILE *Stream) +{ + FILE *v1; // eax + + if ( Stream >= __acrt_iob_func(0) && Stream <= __acrt_iob_func(0x13u) ) + { + Stream->_flag &= ~0x8000u; + v1 = __acrt_iob_func(0); + _unlock((FILE *)(Stream - v1 + 16)); + } + else + { + LeaveCriticalSection((LPCRITICAL_SECTION)&Stream[1]); + } +} +// 46D490: using guessed type void __cdecl _unlock(FILE *Stream); + +//----- (0046D390) -------------------------------------------------------- +int __cdecl ___mb_cur_max_func() +{ + return ___mb_cur_max; +} + +//----- (0046D3A0) -------------------------------------------------------- +int msvcrt___lc_codepage_func() +{ + return *(_DWORD *)msvcrt__lc_codepage; +} +// 76A114: using guessed type int msvcrt__lc_codepage; + +//----- (0046D3B0) -------------------------------------------------------- +int setlocale_codepage_hack() +{ + char *v0; // eax + char *v1; // eax + int v2; // edx + + v0 = setlocale(2, 0); + v1 = strchr(v0, 46); + v2 = 0; + if ( v1 ) + return atoi(v1 + 1); + return v2; +} + +//----- (0046D3F0) -------------------------------------------------------- +int init_codepage_func() +{ + HMODULE ModuleHandleW; // eax + HMODULE v1; // ebx + unsigned int (__cdecl *___lc_codepage_func)(); // eax + + ModuleHandleW = GetModuleHandleW(&off_55AD8C); + if ( ModuleHandleW ) + { + v1 = ModuleHandleW; + ___lc_codepage_func = (unsigned int (__cdecl *)())GetProcAddress(ModuleHandleW, "___lc_codepage_func"); + if ( ___lc_codepage_func ) + { +LABEL_3: + *(_DWORD *)____lc_codepage_func = ___lc_codepage_func; + return ___lc_codepage_func(); + } + msvcrt__lc_codepage = (int)GetProcAddress(v1, "__lc_codepage"); + if ( msvcrt__lc_codepage ) + { + ___lc_codepage_func = (unsigned int (__cdecl *)())msvcrt___lc_codepage_func; + goto LABEL_3; + } + } + *(_DWORD *)____lc_codepage_func = setlocale_codepage_hack; + return setlocale_codepage_hack(); +} +// 76A114: using guessed type int msvcrt__lc_codepage; + +//----- (0046D4B0) -------------------------------------------------------- +int __cdecl __mingwthr_key_dtor(int a1, int a2) +{ + if ( a2 ) + return ___w64_mingwthr_add_key_dtor(a1, a2); + else + return 0; +} + +//----- (0046D4D0) -------------------------------------------------------- +int __cdecl _txnal_cow_string_D1() +{ + int v0; // eax + + v0 = MEMORY[0](); + return MEMORY[0](1, 0, v0 - 12); +} + +//----- (0046D500) -------------------------------------------------------- +void __cdecl __noreturn _txnal_cow_string_c_str() +{ + JUMPOUT(0); +} +// 46D504: control flows out of bounds to 0 + +//----- (0046D510) -------------------------------------------------------- +void __cdecl __noreturn _txnal_sso_string_c_str() +{ + JUMPOUT(0); +} +// 46D514: control flows out of bounds to 0 + +//----- (0046D520) -------------------------------------------------------- +char *__cdecl _txnal_logic_error_get_msg(char *a1) +{ + return a1 + 4; +} + +//----- (0046D530) -------------------------------------------------------- +void __cdecl _txnal_cow_string_D1_commit(volatile signed __int32 *Block) +{ + int v1; // eax + int v2[3]; // [esp+1Fh] [ebp-Dh] BYREF + + if ( !_CRT_MT ) + { + v1 = *((_DWORD *)Block + 2); + *((_DWORD *)Block + 2) = v1 - 1; + if ( v1 > 0 ) + return; +LABEL_5: + std::string::_Rep::_M_destroy((void *)Block, (int)v2); + return; + } + if ( _InterlockedExchangeAdd(Block + 2, 0xFFFFFFFF) <= 0 ) + goto LABEL_5; +} +// 53E1E4: using guessed type int _CRT_MT; +// 46D530: using guessed type int var_D[3]; + +//----- (0046D580) -------------------------------------------------------- +char *__cdecl _txnal_runtime_error_get_msg(char *a1) +{ + return a1 + 4; +} + +//----- (0046D590) -------------------------------------------------------- +void __cdecl _txnal_cow_string_C1_for_exceptions(struct _Unwind_Exception **a1) +{ + int v1; // eax + int v2; // ecx + int lpuexcpt; // [esp+14h] [ebp-48h] + struct _Unwind_Exception *lpuexcpta; // [esp+14h] [ebp-48h] + + lpuexcpt = 1; + while ( (unsigned __int8)MEMORY[0]() ) + ++lpuexcpt; + v1 = MEMORY[0](lpuexcpt + 12); + v2 = lpuexcpt; + *(_DWORD *)(v1 + 8) = 0; + v1 += 12; + *(_DWORD *)(v1 - 8) = lpuexcpt - 1; + *(_DWORD *)(v1 - 12) = lpuexcpt - 1; + lpuexcpta = (struct _Unwind_Exception *)v1; + MEMORY[0](v2); + *a1 = lpuexcpta; +} + +//----- (0046D6B0) -------------------------------------------------------- +int printf(char *a1, ...) +{ + FILE *v1; // eax + va_list va; // [esp+24h] [ebp+Ch] BYREF + + va_start(va, a1); + v1 = ___acrt_iob_func(1u); + return __mingw_vfprintf(v1, a1, (int *)va); +} + +//----- (0046D6E0) -------------------------------------------------------- +int sprintf(char *a1, char *a2, ...) +{ + va_list va; // [esp+28h] [ebp+10h] BYREF + + va_start(va, a2); + return __mingw_vsprintf((FILE *)a1, a2, (int *)va); +} + +//----- (0046D710) -------------------------------------------------------- +void __cdecl __noreturn _ZGTtNKSt11logic_error4whatEv(int a1) +{ + JUMPOUT(0); +} +// 46D717: control flows out of bounds to 0 + +//----- (0046D730) -------------------------------------------------------- +void __cdecl __noreturn _ZGTtNKSt13runtime_error4whatEv(int a1) +{ + JUMPOUT(0); +} +// 46D737: control flows out of bounds to 0 + +//----- (0046D750) -------------------------------------------------------- +void __cdecl _ZGTtNSt11logic_errorC2EPKc(struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + _BYTE v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_55FF90; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + MEMORY[0](8); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::logic_error::~logic_error(v1); +} +// 46D7E2: variable 'v1' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 46D750: using guessed type int var_C[3]; + +//----- (0046D840) -------------------------------------------------------- +void __cdecl _ZGTtNSt11logic_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( + struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + _BYTE v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_55FF90; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + MEMORY[0](8); + MEMORY[0](); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::logic_error::~logic_error(v1); +} +// 46D8D6: variable 'v1' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 46D840: using guessed type int var_C[3]; + +//----- (0046D930) -------------------------------------------------------- +void __cdecl __noreturn _ZGTtNSt11logic_errorD0Ev(int a1) +{ + int v1; // eax + + v1 = MEMORY[0](); + MEMORY[0](1, 0, v1 - 12); + JUMPOUT(0); +} +// 46D968: control flows out of bounds to 0 + +//----- (0046D970) -------------------------------------------------------- +int _ZGTtNSt11logic_errorD2Ev() +{ + int v0; // eax + + v0 = MEMORY[0](); + return MEMORY[0](1, 0, v0 - 12); +} + +//----- (0046D9B0) -------------------------------------------------------- +void __cdecl _ZGTtNSt11range_errorC2EPKc(struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_5601E8; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_55FFA4; + MEMORY[0](8); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::range_error::~range_error(v1); +} +// 46DA49: variable 'v1' is possibly undefined +// 55FFA4: using guessed type void (__cdecl *off_55FFA4)(std::range_error *__hidden this); +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 46D9B0: using guessed type int var_C[3]; + +//----- (0046DAB0) -------------------------------------------------------- +void __cdecl _ZGTtNSt11range_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( + struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_5601E8; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_55FFA4; + MEMORY[0](8); + MEMORY[0](); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::range_error::~range_error(v1); +} +// 46DB4D: variable 'v1' is possibly undefined +// 55FFA4: using guessed type void (__cdecl *off_55FFA4)(std::range_error *__hidden this); +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 46DAB0: using guessed type int var_C[3]; + +//----- (0046DBB0) -------------------------------------------------------- +void __cdecl __noreturn _ZGTtNSt11range_errorD0Ev(int a1) +{ + int v1; // eax + + v1 = MEMORY[0](); + MEMORY[0](1, 0, v1 - 12); + JUMPOUT(0); +} +// 46DBE8: control flows out of bounds to 0 + +//----- (0046DBF0) -------------------------------------------------------- +int _ZGTtNSt11range_errorD2Ev() +{ + int v0; // eax + + v0 = MEMORY[0](); + return MEMORY[0](1, 0, v0 - 12); +} + +//----- (0046DC30) -------------------------------------------------------- +void __cdecl _ZGTtNSt12domain_errorC2EPKc(struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_55FF90; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_560028; + MEMORY[0](8); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::domain_error::~domain_error(v1); +} +// 46DCC9: variable 'v1' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 560028: using guessed type void (__cdecl *off_560028)(std::domain_error *__hidden this); +// 46DC30: using guessed type int var_C[3]; + +//----- (0046DD30) -------------------------------------------------------- +void __cdecl _ZGTtNSt12domain_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( + struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_55FF90; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_560028; + MEMORY[0](8); + MEMORY[0](); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::domain_error::~domain_error(v1); +} +// 46DDCD: variable 'v1' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 560028: using guessed type void (__cdecl *off_560028)(std::domain_error *__hidden this); +// 46DD30: using guessed type int var_C[3]; + +//----- (0046DE30) -------------------------------------------------------- +void __cdecl __noreturn _ZGTtNSt12domain_errorD0Ev(int a1) +{ + int v1; // eax + + v1 = MEMORY[0](); + MEMORY[0](1, 0, v1 - 12); + JUMPOUT(0); +} +// 46DE68: control flows out of bounds to 0 + +//----- (0046DE70) -------------------------------------------------------- +int _ZGTtNSt12domain_errorD2Ev() +{ + int v0; // eax + + v0 = MEMORY[0](); + return MEMORY[0](1, 0, v0 - 12); +} + +//----- (0046DEB0) -------------------------------------------------------- +void __cdecl _ZGTtNSt12length_errorC2EPKc(struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_55FF90; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_56003C; + MEMORY[0](8); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::length_error::~length_error(v1); +} +// 46DF49: variable 'v1' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 56003C: using guessed type void (__cdecl *off_56003C)(std::length_error *__hidden this); +// 46DEB0: using guessed type int var_C[3]; + +//----- (0046DFB0) -------------------------------------------------------- +void __cdecl _ZGTtNSt12length_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( + struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_55FF90; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_56003C; + MEMORY[0](8); + MEMORY[0](); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::length_error::~length_error(v1); +} +// 46E04D: variable 'v1' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 56003C: using guessed type void (__cdecl *off_56003C)(std::length_error *__hidden this); +// 46DFB0: using guessed type int var_C[3]; + +//----- (0046E0B0) -------------------------------------------------------- +void __cdecl __noreturn _ZGTtNSt12length_errorD0Ev(int a1) +{ + int v1; // eax + + v1 = MEMORY[0](); + MEMORY[0](1, 0, v1 - 12); + JUMPOUT(0); +} +// 46E0E8: control flows out of bounds to 0 + +//----- (0046E0F0) -------------------------------------------------------- +int _ZGTtNSt12length_errorD2Ev() +{ + int v0; // eax + + v0 = MEMORY[0](); + return MEMORY[0](1, 0, v0 - 12); +} + +//----- (0046E130) -------------------------------------------------------- +void __cdecl _ZGTtNSt12out_of_rangeC2EPKc(struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_55FF90; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_560050; + MEMORY[0](8); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::out_of_range::~out_of_range(v1); +} +// 46E1C9: variable 'v1' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 560050: using guessed type void (__cdecl *off_560050)(std::out_of_range *__hidden this); +// 46E130: using guessed type int var_C[3]; + +//----- (0046E230) -------------------------------------------------------- +void __cdecl _ZGTtNSt12out_of_rangeC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( + struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_55FF90; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_560050; + MEMORY[0](8); + MEMORY[0](); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::out_of_range::~out_of_range(v1); +} +// 46E2CD: variable 'v1' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 560050: using guessed type void (__cdecl *off_560050)(std::out_of_range *__hidden this); +// 46E230: using guessed type int var_C[3]; + +//----- (0046E330) -------------------------------------------------------- +void __cdecl __noreturn _ZGTtNSt12out_of_rangeD0Ev(int a1) +{ + int v1; // eax + + v1 = MEMORY[0](); + MEMORY[0](1, 0, v1 - 12); + JUMPOUT(0); +} +// 46E368: control flows out of bounds to 0 + +//----- (0046E370) -------------------------------------------------------- +int _ZGTtNSt12out_of_rangeD2Ev() +{ + int v0; // eax + + v0 = MEMORY[0](); + return MEMORY[0](1, 0, v0 - 12); +} + +//----- (0046E3B0) -------------------------------------------------------- +void __cdecl _ZGTtNSt13runtime_errorC2EPKc(struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + _BYTE v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_5601E8; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + MEMORY[0](8); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::runtime_error::~runtime_error(v1); +} +// 46E442: variable 'v1' is possibly undefined +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 46E3B0: using guessed type int var_C[3]; + +//----- (0046E4A0) -------------------------------------------------------- +void __cdecl _ZGTtNSt13runtime_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( + struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + _BYTE v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_5601E8; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + MEMORY[0](8); + MEMORY[0](); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::runtime_error::~runtime_error(v1); +} +// 46E536: variable 'v1' is possibly undefined +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 46E4A0: using guessed type int var_C[3]; + +//----- (0046E590) -------------------------------------------------------- +void __cdecl __noreturn _ZGTtNSt13runtime_errorD0Ev(int a1) +{ + int v1; // eax + + v1 = MEMORY[0](); + MEMORY[0](1, 0, v1 - 12); + JUMPOUT(0); +} +// 46E5C8: control flows out of bounds to 0 + +//----- (0046E5D0) -------------------------------------------------------- +int _ZGTtNSt13runtime_errorD2Ev() +{ + int v0; // eax + + v0 = MEMORY[0](); + return MEMORY[0](1, 0, v0 - 12); +} + +//----- (0046E610) -------------------------------------------------------- +void __cdecl _ZGTtNSt14overflow_errorC2EPKc(struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_5601E8; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_560368; + MEMORY[0](8); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::overflow_error::~overflow_error(v1); +} +// 46E6A9: variable 'v1' is possibly undefined +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 560368: using guessed type void (__cdecl *off_560368)(std::overflow_error *__hidden this); +// 46E610: using guessed type int var_C[3]; + +//----- (0046E710) -------------------------------------------------------- +void __cdecl _ZGTtNSt14overflow_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( + struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_5601E8; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_560368; + MEMORY[0](8); + MEMORY[0](); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::overflow_error::~overflow_error(v1); +} +// 46E7AD: variable 'v1' is possibly undefined +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 560368: using guessed type void (__cdecl *off_560368)(std::overflow_error *__hidden this); +// 46E710: using guessed type int var_C[3]; + +//----- (0046E810) -------------------------------------------------------- +void __cdecl __noreturn _ZGTtNSt14overflow_errorD0Ev(int a1) +{ + int v1; // eax + + v1 = MEMORY[0](); + MEMORY[0](1, 0, v1 - 12); + JUMPOUT(0); +} +// 46E848: control flows out of bounds to 0 + +//----- (0046E850) -------------------------------------------------------- +int _ZGTtNSt14overflow_errorD2Ev() +{ + int v0; // eax + + v0 = MEMORY[0](); + return MEMORY[0](1, 0, v0 - 12); +} + +//----- (0046E890) -------------------------------------------------------- +void __cdecl _ZGTtNSt15underflow_errorC2EPKc(struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_5601E8; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_56059C; + MEMORY[0](8); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::underflow_error::~underflow_error(v1); +} +// 46E929: variable 'v1' is possibly undefined +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 56059C: using guessed type void (__cdecl *off_56059C)(std::underflow_error *__hidden this); +// 46E890: using guessed type int var_C[3]; + +//----- (0046E990) -------------------------------------------------------- +void __cdecl _ZGTtNSt15underflow_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( + struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_5601E8; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_56059C; + MEMORY[0](8); + MEMORY[0](); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::underflow_error::~underflow_error(v1); +} +// 46EA2D: variable 'v1' is possibly undefined +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 56059C: using guessed type void (__cdecl *off_56059C)(std::underflow_error *__hidden this); +// 46E990: using guessed type int var_C[3]; + +//----- (0046EA90) -------------------------------------------------------- +void __cdecl __noreturn _ZGTtNSt15underflow_errorD0Ev(int a1) +{ + int v1; // eax + + v1 = MEMORY[0](); + MEMORY[0](1, 0, v1 - 12); + JUMPOUT(0); +} +// 46EAC8: control flows out of bounds to 0 + +//----- (0046EAD0) -------------------------------------------------------- +int _ZGTtNSt15underflow_errorD2Ev() +{ + int v0; // eax + + v0 = MEMORY[0](); + return MEMORY[0](1, 0, v0 - 12); +} + +//----- (0046EB10) -------------------------------------------------------- +void __cdecl _ZGTtNSt16invalid_argumentC2EPKc(struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_55FF90; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_5605D0; + MEMORY[0](8); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::invalid_argument::~invalid_argument(v1); +} +// 46EBA9: variable 'v1' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 5605D0: using guessed type void (__cdecl *off_5605D0)(std::invalid_argument *__hidden this); +// 46EB10: using guessed type int var_C[3]; + +//----- (0046EC10) -------------------------------------------------------- +void __cdecl _ZGTtNSt16invalid_argumentC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE( + struct _Unwind_Exception **a1) +{ + std::exception *v1; // [esp+0h] [ebp-68h] + char v2[5]; // [esp+57h] [ebp-11h] BYREF + int v3[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_DWORD *)&v2[1] = &off_55FF90; + std::string::string(v3, (char *)byte_55A2A0, (int)v2); + *(_DWORD *)&v2[1] = &off_5605D0; + MEMORY[0](8); + MEMORY[0](); + _txnal_cow_string_C1_for_exceptions(a1 + 1); + std::invalid_argument::~invalid_argument(v1); +} +// 46ECAD: variable 'v1' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 5605D0: using guessed type void (__cdecl *off_5605D0)(std::invalid_argument *__hidden this); +// 46EC10: using guessed type int var_C[3]; + +//----- (0046ED10) -------------------------------------------------------- +void __cdecl __noreturn _ZGTtNSt16invalid_argumentD0Ev(int a1) +{ + int v1; // eax + + v1 = MEMORY[0](); + MEMORY[0](1, 0, v1 - 12); + JUMPOUT(0); +} +// 46ED48: control flows out of bounds to 0 + +//----- (0046ED50) -------------------------------------------------------- +int _ZGTtNSt16invalid_argumentD2Ev() +{ + int v0; // eax + + v0 = MEMORY[0](); + return MEMORY[0](1, 0, v0 - 12); +} + +//----- (0046ED90) -------------------------------------------------------- +int __usercall get_adjusted_ptr@(int a1@, int a2@, int **a3@) +{ + int result; // eax + int *v7; // [esp+1Ch] [ebp-10h] BYREF + + v7 = *a3; + if ( (*(unsigned __int8 (__fastcall **)(int))(*(_DWORD *)a2 + 8))(a2) ) + v7 = (int *)*v7; + result = (*(int (__thiscall **)(int, int, int **, int))(*(_DWORD *)a1 + 16))(a1, a2, &v7, 1); + if ( (_BYTE)result ) + *a3 = v7; + return result; +} + +//----- (0046EDF0) -------------------------------------------------------- +char *__usercall parse_lsda_header@(int a1@, char *a2@, int a3@) +{ + int RegionStart; // eax + char v7; // dl + int *v8; // ebp + char v9; // al + char *v10; // esi + int v11; // edi + int v12; // ecx + char v13; // dl + int v14; // eax + char *v15; // edx + int v16; // edi + int v17; // ecx + char v18; // si + int v19; // eax + char *result; // eax + char v21; // di + int *v22; // eax + char *encoded_value_with_base; // ebp + char v24; // al + + RegionStart = 0; + if ( a1 ) + RegionStart = _Unwind_GetRegionStart(); + *(_DWORD *)a3 = RegionStart; + v7 = *a2; + v8 = (int *)(a2 + 1); + if ( *a2 == -1 ) + { + *(_DWORD *)(a3 + 4) = RegionStart; + v9 = *(_BYTE *)v8; + v10 = a2 + 2; + *(_BYTE *)(a3 + 20) = *(_BYTE *)v8; + if ( v9 != -1 ) + goto LABEL_5; +LABEL_12: + *(_DWORD *)(a3 + 12) = 0; + goto LABEL_8; + } + v21 = *a2; + v22 = (int *)base_of_encoded_value(v7); + encoded_value_with_base = read_encoded_value_with_base(v21, v22, v8, (int *)(a3 + 4)); + v24 = *encoded_value_with_base; + v10 = encoded_value_with_base + 1; + *(_BYTE *)(a3 + 20) = *encoded_value_with_base; + if ( v24 == -1 ) + goto LABEL_12; +LABEL_5: + v11 = 0; + v12 = 0; + do + { + v13 = *v10++; + v14 = (v13 & 0x7F) << v12; + v12 += 7; + v11 |= v14; + } + while ( v13 < 0 ); + *(_DWORD *)(a3 + 12) = &v10[v11]; +LABEL_8: + v15 = v10 + 1; + v16 = 0; + v17 = 0; + *(_BYTE *)(a3 + 21) = *v10; + do + { + v18 = *v15++; + v19 = (v18 & 0x7F) << v17; + v17 += 7; + v16 |= v19; + } + while ( v18 < 0 ); + result = v15; + *(_DWORD *)(a3 + 16) = &v15[v16]; + return result; +} + +//----- (0046EED0) -------------------------------------------------------- +int __usercall check_exception_spec@(int a1@, int a2@, int *a3@, int a4) +{ + char *v6; // ebx + int v7; // ebp + int v8; // ecx + char v9; // dl + int v10; // eax + char v11; // al + unsigned __int8 v12; // dl + int v13; // ecx + int result; // eax + int *v15; // [esp+1Ch] [ebp-30h] BYREF + int v16[8]; // [esp+2Ch] [ebp-20h] BYREF + + v15 = a3; + v6 = (char *)(*(_DWORD *)(a1 + 12) + ~a4); + while ( 1 ) + { + v7 = 0; + v8 = 0; + do + { + v9 = *v6++; + v10 = (v9 & 0x7F) << v8; + v8 += 7; + v7 |= v10; + } + while ( v9 < 0 ); + if ( !v7 ) + return 0; + v11 = *(_BYTE *)(a1 + 20); + if ( v11 == -1 ) + { + v13 = 0; + } + else + { + v12 = v11 & 7; + if ( (v11 & 7) == 2 ) + { + v13 = -2 * v7; + } + else + { + if ( v12 <= 2u ) + { + if ( v12 ) +LABEL_18: + abort(); + } + else if ( v12 != 3 ) + { + if ( v12 != 4 ) + goto LABEL_18; + v13 = -8 * v7; + goto LABEL_11; + } + v13 = -4 * v7; + } + } +LABEL_11: + read_encoded_value_with_base(v11, *(int **)(a1 + 8), (int *)(*(_DWORD *)(a1 + 12) + v13), v16); + result = get_adjusted_ptr(v16[0], a2, &v15); + if ( (_BYTE)result ) + return result; + } +} +// 46EED0: using guessed type int var_20[8]; + +//----- (0046EFB0) -------------------------------------------------------- +int __usercall base_of_encoded_value@(char a1@) +{ + unsigned __int8 v1; // dl + + if ( a1 == -1 ) + return 0; + v1 = a1 & 0x70; + if ( (a1 & 0x70) == 48 ) + return _Unwind_GetDataRelBase(); + if ( v1 <= 0x30u ) + { + if ( v1 == 32 ) + return _Unwind_GetTextRelBase(); + if ( v1 > 0x20u || (a1 & 0x60) != 0 ) +LABEL_11: + abort(); + return 0; + } + if ( v1 != 64 ) + { + if ( v1 != 80 ) + goto LABEL_11; + return 0; + } + return _Unwind_GetRegionStart(); +} + +//----- (0046F030) -------------------------------------------------------- +void __cdecl __gxx_exception_cleanup(_Unwind_Reason_Code a1, void (**a2)(void)) +{ + void (*v2)(void); // edx + + if ( (unsigned int)a1 > _URC_FOREIGN_EXCEPTION_CAUGHT ) + __cxxabiv1::__terminate(*(a2 - 9)); + if ( !_InterlockedSub((volatile signed __int32 *)a2 - 16, 1u) ) + { + v2 = *(a2 - 11); + if ( v2 ) + v2(); + __cxa_free_exception(a2 + 8); + } +} + +//----- (0046F080) -------------------------------------------------------- +char *__usercall read_encoded_value_with_base@(char a1@, int *a2@, int *a3@, int *a4) +{ + int *v4; // esi + int v6; // edx + char *result; // eax + _DWORD *v8; // eax + int v9; // edx + int v10; // ecx + int v11; // ebp + char v12; // dl + int v13; // edi + unsigned int v14; // ecx + int v15; // ebp + char v16; // dl + int v17; // edi + char v18; // di + + v4 = a3; + if ( a1 == 80 ) + { + v8 = (_DWORD *)(((unsigned int)a3 + 3) & 0xFFFFFFFC); + v9 = *v8; + result = (char *)(v8 + 1); + *a4 = v9; + } + else + { + switch ( a1 & 0xF ) + { + case 0: + case 3: + case 0xB: + v6 = *a3; + result = (char *)(a3 + 1); + goto LABEL_4; + case 1: + result = (char *)a3; + v10 = 0; + v11 = 0; + do + { + v12 = *result++; + v13 = (v12 & 0x7F) << v10; + v10 += 7; + v11 |= v13; + } + while ( v12 < 0 ); + v6 = v11; + goto LABEL_4; + case 2: + v6 = *(unsigned __int16 *)a3; + result = (char *)a3 + 2; + goto LABEL_4; + case 4: + case 0xC: + v6 = *a3; + result = (char *)(a3 + 2); + goto LABEL_4; + case 9: + result = (char *)a3; + v14 = 0; + v15 = 0; + do + { + v16 = *result++; + v17 = (v16 & 0x7F) << v14; + v14 += 7; + v15 |= v17; + } + while ( v16 < 0 ); + v18 = v16; + v6 = v15; + if ( v14 > 0x1F || (v18 & 0x40) == 0 ) + goto LABEL_4; + v6 = (-1 << v14) | v15; + goto LABEL_5; + case 0xA: + v6 = *(__int16 *)a3; + result = (char *)a3 + 2; +LABEL_4: + if ( !v6 ) + goto LABEL_8; +LABEL_5: + if ( (a1 & 0x70) != 16 ) + v4 = a2; + v6 += (int)v4; + if ( a1 < 0 ) + *a4 = *(_DWORD *)v6; + else +LABEL_8: + *a4 = v6; + break; + default: + abort(); + } + } + return result; +} + +//----- (0046F1D0) -------------------------------------------------------- +void __cdecl __noreturn __cxxabiv1::__terminate(void (*a1)(void)) +{ + a1(); + abort(); +} + +//----- (0046F280) -------------------------------------------------------- +void __cdecl __noreturn __cxxabiv1::__unexpected(void (*a1)(void)) +{ + a1(); + std::terminate(); +} + +//----- (0046F290) -------------------------------------------------------- +void __fastcall __cxxabiv1::__forced_unwind::~__forced_unwind(void *Block) +{ + operator delete(Block); +} + +//----- (0046F2C0) -------------------------------------------------------- +void __fastcall __cxxabiv1::__class_type_info::~__class_type_info(_DWORD *a1) +{ + std::type_info *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_55F0D4; + std::type_info::~type_info(Block); + operator delete(a1); +} +// 46F2CC: variable 'Block' is possibly undefined +// 55F0D4: using guessed type void (__cdecl *off_55F0D4)(__cxxabiv1::__class_type_info *__hidden this); + +//----- (0046F2F0) -------------------------------------------------------- +void __cdecl __cxxabiv1::__class_type_info::~__class_type_info(__cxxabiv1::__class_type_info *this) +{ + _DWORD *v1; // ecx + + *v1 = &off_55F0D4; + std::type_info::~type_info(this); +} +// 46F2F0: variable 'v1' is possibly undefined +// 55F0D4: using guessed type void (__cdecl *off_55F0D4)(__cxxabiv1::__class_type_info *__hidden this); + +//----- (0046F300) -------------------------------------------------------- +void __fastcall __cxxabiv1::__foreign_exception::~__foreign_exception(void *Block) +{ + operator delete(Block); +} + +//----- (0046F330) -------------------------------------------------------- +void __fastcall __cxxabiv1::__si_class_type_info::~__si_class_type_info(_DWORD *a1) +{ + __cxxabiv1::__class_type_info *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_55F114; + __cxxabiv1::__class_type_info::~__class_type_info(Block); + operator delete(a1); +} +// 46F33C: variable 'Block' is possibly undefined +// 55F114: using guessed type void (__cdecl *off_55F114)(__cxxabiv1::__si_class_type_info *__hidden this); + +//----- (0046F360) -------------------------------------------------------- +void __cdecl __cxxabiv1::__si_class_type_info::~__si_class_type_info(__cxxabiv1::__si_class_type_info *this) +{ + _DWORD *v1; // ecx + + *v1 = &off_55F114; + __cxxabiv1::__class_type_info::~__class_type_info(this); +} +// 46F360: variable 'v1' is possibly undefined +// 55F114: using guessed type void (__cdecl *off_55F114)(__cxxabiv1::__si_class_type_info *__hidden this); + +//----- (0046F370) -------------------------------------------------------- +void __fastcall __cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info(_DWORD *a1) +{ + __cxxabiv1::__class_type_info *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_55F140; + __cxxabiv1::__class_type_info::~__class_type_info(Block); + operator delete(a1); +} +// 46F37C: variable 'Block' is possibly undefined +// 55F140: using guessed type void (__cdecl *off_55F140)(__cxxabiv1::__vmi_class_type_info *__hidden this); + +//----- (0046F3A0) -------------------------------------------------------- +void __cdecl __cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info(__cxxabiv1::__vmi_class_type_info *this) +{ + _DWORD *v1; // ecx + + *v1 = &off_55F140; + __cxxabiv1::__class_type_info::~__class_type_info(this); +} +// 46F3A0: variable 'v1' is possibly undefined +// 55F140: using guessed type void (__cdecl *off_55F140)(__cxxabiv1::__vmi_class_type_info *__hidden this); + +//----- (0046F3B0) -------------------------------------------------------- +_DWORD *__cdecl `anonymous namespace'::get_locale_mutex() +{ + if ( !(_BYTE)`guard variable for'`anonymous namespace'::get_locale_mutex(void)::locale_mutex + && __cxa_guard_acquire(&`guard variable for'`anonymous namespace'::get_locale_mutex(void)::locale_mutex) ) + { + if ( _CRT_MT ) + __gthr_win32_mutex_init_function(`anonymous namespace'::get_locale_mutex(void)::locale_mutex); + __cxa_guard_release(&`guard variable for'`anonymous namespace'::get_locale_mutex(void)::locale_mutex); + atexit(__tcf_0_6); + } + return `anonymous namespace'::get_locale_mutex(void)::locale_mutex; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53FCC0: using guessed type _DWORD `anonymous namespace'::get_locale_mutex(void)::locale_mutex[2]; + +//----- (0046F480) -------------------------------------------------------- +void __fastcall `anonymous namespace'::io_error_category::~io_error_category(_DWORD *a1) +{ + std::_V2::error_category *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_55F16C; + std::_V2::error_category::~error_category(Block); + operator delete(a1); +} +// 46F48C: variable 'Block' is possibly undefined +// 55F16C: using guessed type void (__cdecl *off_55F16C)(_anonymous_namespace_::io_error_category *__hidden this); + +//----- (0046F4A0) -------------------------------------------------------- +void __cdecl `anonymous namespace'::io_error_category::~io_error_category( + _anonymous_namespace_::io_error_category *this) +{ + _DWORD *v1; // ecx + + *v1 = &off_55F16C; + std::_V2::error_category::~error_category(this); +} +// 46F4A0: variable 'v1' is possibly undefined +// 55F16C: using guessed type void (__cdecl *off_55F16C)(_anonymous_namespace_::io_error_category *__hidden this); + +//----- (0046F4B0) -------------------------------------------------------- +void __fastcall `anonymous namespace'::system_error_category::~system_error_category(void *Block) +{ + operator delete(Block); +} + +//----- (0046F4D0) -------------------------------------------------------- +void __fastcall `anonymous namespace'::generic_error_category::~generic_error_category(void *Block) +{ + operator delete(Block); +} + +//----- (0046F4F0) -------------------------------------------------------- +void __usercall `anonymous namespace'::pool::free(int a1@) +{ + int v1; // esi + int *v2; // eax + _DWORD *v3; // edi + int v4; // ecx + int *v5; // ebx + int *v6; // edx + int *v7; // ebp + int v8; // edx + int v9; // eax + _DWORD *exception; // eax + int v12; // [esp+18h] [ebp-54h] + + v1 = _CRT_MT; + if ( _CRT_MT ) + { + if ( __gthr_win32_mutex_lock((int)&`anonymous namespace'::emergency_pool) ) + __gnu_cxx::__throw_concurrence_lock_error(); + v1 = _CRT_MT; + } + v2 = (int *)dword_53E4F8; + v3 = (_DWORD *)(a1 - 16); + if ( !dword_53E4F8 + || (v4 = *(_DWORD *)(a1 - 16), v5 = (_DWORD *)((char *)v3 + v4), v12 = v4, dword_53E4F8 > (unsigned int)v3 + v4) ) + { + *(_DWORD *)(a1 - 12) = dword_53E4F8; + dword_53E4F8 = a1 - 16; + goto LABEL_18; + } + v6 = *(int **)(dword_53E4F8 + 4); + if ( (_DWORD *)dword_53E4F8 == (_DWORD *)((char *)v3 + v4) ) + { + *(_DWORD *)(a1 - 16) = *(_DWORD *)dword_53E4F8 + v4; + *(_DWORD *)(a1 - 12) = v6; + dword_53E4F8 = a1 - 16; +LABEL_18: + if ( !v1 ) + return; + goto LABEL_15; + } + v7 = &dword_53E4F8; + if ( v6 ) + { + while ( 1 ) + { + if ( v5 >= v6 ) + { + if ( v5 == v6 ) + { + v12 = *v5 + v4; + v2[1] = v5[1]; + } + v2 = (int *)*v7; + goto LABEL_13; + } + v7 = v2 + 1; + if ( !v6[1] ) + break; + v2 = v6; + v6 = (int *)v6[1]; + } + v2 = (int *)v2[1]; + v8 = *v2; + if ( v3 != (int *)((char *)v2 + *v2) ) + goto LABEL_14; + goto LABEL_22; + } +LABEL_13: + v8 = *v2; + if ( v3 == (int *)((char *)v2 + *v2) ) + { +LABEL_22: + *v2 = v12 + v8; + goto LABEL_18; + } +LABEL_14: + *(_DWORD *)(a1 - 12) = v2[1]; + v9 = *v7; + *(_DWORD *)(a1 - 16) = v12; + *(_DWORD *)(v9 + 4) = v3; + if ( !v1 ) + return; +LABEL_15: + if ( __gthr_win32_mutex_unlock((int)&`anonymous namespace'::emergency_pool) ) + { + exception = __cxa_allocate_exception(4u); + *exception = &off_55F35C; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'__gnu_cxx::__concurrence_unlock_error, + (void (__cdecl *)(void *))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error); + } +} +// 53E1E4: using guessed type int _CRT_MT; +// 53E4F8: using guessed type int dword_53E4F8; +// 55B6F4: using guessed type int *`typeinfo for'__gnu_cxx::__concurrence_unlock_error; +// 55F35C: using guessed type void (__cdecl *off_55F35C)(__gnu_cxx::__concurrence_unlock_error *__hidden this); + +//----- (0046F6C0) -------------------------------------------------------- +void __spoils `anonymous namespace'::pool::allocate() +{ + unsigned int v0; // eax + unsigned int v1; // eax + int *v2; // ebx + unsigned int v3; // ecx + unsigned int *v4; // edx + unsigned int *v5; // esi + unsigned int v6; // esi + unsigned int *v7; // ecx + unsigned int v8; // eax + _DWORD *exception; // eax + int v10; // [esp+18h] [ebp-44h] + unsigned int *v11; // [esp+18h] [ebp-44h] + + if ( _CRT_MT ) + { + if ( __gthr_win32_mutex_lock((int)&`anonymous namespace'::emergency_pool) ) + __gnu_cxx::__throw_concurrence_lock_error(); + v8 = v10 + 16; + v11 = (unsigned int *)dword_53E4F8; + if ( v8 < 8 ) + v8 = 8; + v1 = (v8 + 15) & 0xFFFFFFF0; + if ( !dword_53E4F8 ) + { +LABEL_10: + if ( _CRT_MT ) + { + if ( __gthr_win32_mutex_unlock((int)&`anonymous namespace'::emergency_pool) ) + { + exception = __cxa_allocate_exception(4u); + *exception = &off_55F35C; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'__gnu_cxx::__concurrence_unlock_error, + (void (__cdecl *)(void *))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error); + } + } + return; + } +LABEL_5: + v2 = &dword_53E4F8; + while ( 1 ) + { + v3 = *v11; + v4 = v11; + v5 = (unsigned int *)v11[1]; + v11 = v5; + if ( v3 >= v1 ) + break; + v2 = (int *)(v4 + 1); + if ( !v5 ) + goto LABEL_10; + } + v6 = v3 - v1; + if ( v3 - v1 > 7 ) + { + v7 = (unsigned int *)((char *)v4 + v1); + *v7 = v6; + v7[1] = (unsigned int)v11; + *(_DWORD *)*v2 = v1; + *v2 = (int)v4 + v1; + } + else + { + *v4 = v3; + *v2 = (int)v11; + } + goto LABEL_10; + } + v0 = v10 + 16; + v11 = (unsigned int *)dword_53E4F8; + if ( v0 < 8 ) + v0 = 8; + v1 = (v0 + 15) & 0xFFFFFFF0; + if ( dword_53E4F8 ) + goto LABEL_5; +} +// 46F713: variable 'v10' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53E4F8: using guessed type int dword_53E4F8; +// 55B6F4: using guessed type int *`typeinfo for'__gnu_cxx::__concurrence_unlock_error; +// 55F35C: using guessed type void (__cdecl *off_55F35C)(__gnu_cxx::__concurrence_unlock_error *__hidden this); + +//----- (0046F870) -------------------------------------------------------- +HANDLE `anonymous namespace'::init() +{ + HANDLE result; // eax + + result = (HANDLE)_CRT_MT; + if ( _CRT_MT ) + result = __gthr_win32_recursive_mutex_init_function(`anonymous namespace'::fake_mutex); + `anonymous namespace'::static_mutex = (int)`anonymous namespace'::fake_mutex; + return result; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53E3D8: using guessed type _DWORD `anonymous namespace'::fake_mutex[4]; +// 53F0C0: using guessed type int `anonymous namespace'::static_mutex; + +//----- (0046F8B0) -------------------------------------------------------- +#error "46F9B2: call analysis failed (funcsize=68)" + +//----- (0046F9B8) -------------------------------------------------------- +#error "46FAC5: call analysis failed (funcsize=71)" + +//----- (0046FACC) -------------------------------------------------------- +#error "46FBCE: call analysis failed (funcsize=68)" + +//----- (0046FBD4) -------------------------------------------------------- +void __thiscall zcc::shared_ptr::shared_ptr(_DWORD *this, int a2) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // edx + volatile signed __int32 *v5; // [esp+5Ch] [ebp-Ch] BYREF + + v5 = 0; + *this = 0; + this[1] = 0; + v2 = operator new(0x10u); + v2[1] = 1; + v2[2] = 1; + v2[3] = a2; + *v2 = &off_5603D0; + *this = a2; + v3 = (volatile signed __int32 *)this[1]; + this[1] = v2; + v5 = v3; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v5); +} +// 5603D0: using guessed type int (*off_5603D0)(); + +//----- (0046FCD4) -------------------------------------------------------- +void __thiscall zcc::shared_ptr::shared_ptr(_DWORD *this, int a2) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // edx + volatile signed __int32 *v5; // [esp+5Ch] [ebp-Ch] BYREF + + v5 = 0; + *this = 0; + this[1] = 0; + v2 = operator new(0x10u); + v2[1] = 1; + v2[2] = 1; + v2[3] = a2; + *v2 = &off_5603D0; + *this = a2; + v3 = (volatile signed __int32 *)this[1]; + this[1] = v2; + v5 = v3; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v5); +} +// 5603D0: using guessed type int (*off_5603D0)(); + +//----- (0046FDD4) -------------------------------------------------------- +void __thiscall zcc::shared_ptr,std::allocator>>::shared_ptr( + _DWORD *this, + int a2) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // edx + volatile signed __int32 *v5; // [esp+5Ch] [ebp-Ch] BYREF + + v5 = 0; + *this = 0; + this[1] = 0; + v2 = operator new(0x10u); + v2[1] = 1; + v2[2] = 1; + v2[3] = a2; + *v2 = &off_560408; + *this = a2; + v3 = (volatile signed __int32 *)this[1]; + this[1] = v2; + v5 = v3; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v5); +} +// 560408: using guessed type int (*off_560408)(); + +//----- (0046FED4) -------------------------------------------------------- +void __fastcall WXML::NameAllocator::~NameAllocator(int a1) +{ + std::string::_M_dispose((void **)(a1 + 28)); + std::string::_M_dispose((void **)(a1 + 4)); +} + +//----- (0046FF00) -------------------------------------------------------- +int __fastcall WXML::DOMLib::Token::ToAttrContent[abi:cxx11](int a1) +{ + char v1; // al + char v2; // cl + int v3; // eax + unsigned __int8 v4; // dl + _BYTE *v6; // [esp+1Ch] [ebp-8Ch] + int v7; // [esp+20h] [ebp-88h] + int v8; // [esp+24h] [ebp-84h] + void *v10[2]; // [esp+68h] [ebp-40h] BYREF + char v11[16]; // [esp+70h] [ebp-38h] BYREF + unsigned __int8 Src[30]; // [esp+80h] [ebp-28h] BYREF + size_t Size; // [esp+9Eh] [ebp-Ah] BYREF + + if ( !*(_DWORD *)a1 || *(_BYTE *)(a1 + 84) ) + return a1 + 88; + v6 = (_BYTE *)(**(_DWORD **)a1 + *(_DWORD *)(a1 + 16)); + v8 = *(_DWORD *)(a1 + 20); + v7 = *v6 == 39 || *v6 == 34; + if ( v8 > 0 ) + { + v1 = v6[v8 - 1]; + if ( v1 == 34 || v1 == 39 ) + --v8; + } + v2 = 0; + v3 = 0; + while ( v8 > v7 ) + { + v4 = v6[v7]; + if ( v4 == 92 ) + { + if ( !v2 ) + { + v2 = 1; + goto LABEL_22; + } + } + else if ( v2 ) + { + switch ( v4 ) + { + case 'n': + Src[v3] = 10; + goto LABEL_20; + case 't': + Src[v3] = 9; + goto LABEL_20; + case 'r': + Src[v3] = 13; + goto LABEL_20; + } + } + Src[v3] = v4; +LABEL_20: + ++v3; + v2 = 0; + Src[v3] = 0; + if ( v3 == 30 ) + { + v10[0] = v11; + std::string::_M_construct(v10, Src, (size_t)&Size); + std::string::append((_DWORD *)(a1 + 88), (int)v10); + std::string::_M_dispose(v10); + Src[0] = 0; + v2 = 0; + v3 = 0; + } +LABEL_22: + ++v7; + } + if ( v3 ) + { + v10[0] = v11; + std::string::_M_construct(v10, Src, (size_t)&Src[v3]); + std::string::append((_DWORD *)(a1 + 88), (int)v10); + std::string::_M_dispose(v10); + } + *(_BYTE *)(a1 + 84) = 1; + return a1 + 88; +} +// 46FF00: using guessed type unsigned __int8 Src[30]; + +//----- (00470100) -------------------------------------------------------- +int __cdecl WXML::DOMLib::Token::GetTemplateContent(int *a1, unsigned __int8 **a2) +{ + int v2; // edi + int v3; // eax + signed int v4; // edx + int v5; // ebx + int v6; // ecx + signed int v7; // eax + int v10; // [esp+1Ch] [ebp-3Ch] + void *v11[12]; // [esp+28h] [ebp-30h] BYREF + + v2 = 0; + v10 = a1[1]; + v3 = v10 - 1; + while ( v2 < v10 && *(_BYTE *)(*a1 + v2) == 32 ) + ++v2; + while ( v3 >= 0 && *(_BYTE *)(*a1 + v3) == 32 ) + --v3; + v4 = v2 + 2; + if ( v2 + 2 >= v10 ) + return -1; + v5 = *a1; + v6 = -1; + if ( *(_BYTE *)(*a1 + v2) != 123 ) + return v6; + if ( *(_BYTE *)(v5 + v2 + 1) != 123 || v3 <= 1 ) + return -1; + if ( *(_BYTE *)(v5 + v3) == 125 && *(_BYTE *)(v5 + v3 - 1) == 125 ) + { + v7 = v3 - 2; + do + { + if ( *(_BYTE *)(v5 + v4) != 32 ) + break; + ++v4; + } + while ( v10 != v4 ); + do + { + if ( *(_BYTE *)(v5 + v7) != 32 ) + break; + } + while ( v7-- != 0 ); + v6 = -1; + if ( v4 < v7 ) + { + std::string::substr(v11, a1, v4, v7 - v4 + 1); + std::string::operator=(a2, (int)v11); + std::string::_M_dispose(v11); + return 0; + } + } + return v6; +} + +//----- (004701C0) -------------------------------------------------------- +char __cdecl WXML::DOMLib::Token::IsValidVariableName(char **a1) +{ + char v1; // al + unsigned __int8 v2; // dl + char result; // al + unsigned int i; // edx + char v5; // al + bool v6; // cc + bool v7; // zf + + v1 = **a1; + if ( v1 == 95 || v1 == 36 || (v2 = (v1 & 0xDF) - 65, result = 0, v2 <= 0x19u) ) + { + for ( i = 1; ; ++i ) + { + if ( (unsigned int)a1[1] <= i ) + return 1; + v5 = (*a1)[i]; + if ( v5 <= 96 ) + { + if ( v5 > 64 ) + { + if ( v5 <= 90 ) + continue; + v7 = v5 == 95; + goto LABEL_13; + } + if ( v5 <= 47 ) + { + v7 = v5 == 36; +LABEL_13: + if ( !v7 ) + return 0; + continue; + } + v6 = v5 <= 57; + } + else + { + v6 = v5 <= 122; + } + if ( !v6 ) + return 0; + } + } + return result; +} + +//----- (0047021C) -------------------------------------------------------- +bool __userpurge WXML::DOMLib::Token::IsMatch@(int a1@, WXML::DOMLib::Token *this, const char *a3) +{ + bool result; // al + int v4; // edi + int i; // eax + + result = 0; + if ( *(_DWORD *)a1 ) + { + v4 = *(_DWORD *)(a1 + 20); + for ( i = 0; ; ++i ) + { + if ( v4 <= i ) + return *((_BYTE *)this + v4) == 0; + if ( *(_BYTE *)(**(_DWORD **)a1 + *(_DWORD *)(a1 + 16) + i) != *((_BYTE *)this + i) ) + break; + } + return 0; + } + return result; +} + +//----- (00470258) -------------------------------------------------------- +unsigned __int8 **__fastcall WXML::DOMLib::Token::ToString[abi:cxx11](int a1) +{ + unsigned __int8 **v1; // edi + void *v4[12]; // [esp+18h] [ebp-30h] BYREF + + v1 = (unsigned __int8 **)(a1 + 32); + if ( *(_DWORD *)a1 && !*(_BYTE *)(a1 + 28) ) + { + std::string::substr(v4, *(_DWORD **)a1, *(_DWORD *)(a1 + 16), *(_DWORD *)(a1 + 20)); + std::string::operator=(v1, (int)v4); + std::string::_M_dispose(v4); + *(_BYTE *)(a1 + 28) = 1; + } + return v1; +} + +//----- (004702B0) -------------------------------------------------------- +_DWORD *__thiscall WXML::DOMLib::Token::Token(_DWORD *this, int a2) +{ + int v3; // ecx + + *this = *(_DWORD *)a2; + v3 = *(_DWORD *)(a2 + 4); + this[1] = v3; + if ( v3 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy(v3); + this[2] = *(_DWORD *)(a2 + 8); + this[3] = *(_DWORD *)(a2 + 12); + this[4] = *(_DWORD *)(a2 + 16); + this[5] = *(_DWORD *)(a2 + 20); + this[6] = *(_DWORD *)(a2 + 24); + *((_BYTE *)this + 28) = *(_BYTE *)(a2 + 28); + std::string::basic_string(this + 8, (_DWORD *)(a2 + 32)); + this[14] = *(_DWORD *)(a2 + 56); + std::string::basic_string(this + 15, (_DWORD *)(a2 + 60)); + *((_BYTE *)this + 84) = *(_BYTE *)(a2 + 84); + return std::string::basic_string(this + 22, (_DWORD *)(a2 + 88)); +} + +//----- (00470334) -------------------------------------------------------- +void __userpurge WXML::DOMLib::Token::Token(int a1@, WXML::DOMLib::Token *this, const WXML::DOMLib::Token *a3) +{ + int v4; // ecx + + *(_DWORD *)a1 = *(_DWORD *)this; + v4 = *((_DWORD *)this + 1); + *(_DWORD *)(a1 + 4) = v4; + if ( v4 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy(v4); + *(_DWORD *)(a1 + 8) = *((_DWORD *)this + 2); + *(_DWORD *)(a1 + 12) = *((_DWORD *)this + 3); + *(_DWORD *)(a1 + 16) = *((_DWORD *)this + 4); + *(_DWORD *)(a1 + 20) = *((_DWORD *)this + 5); + *(_DWORD *)(a1 + 24) = *((_DWORD *)this + 6); + *(_BYTE *)(a1 + 28) = *((_BYTE *)this + 28); + std::string::basic_string((char *)(a1 + 32), (int)this + 32); + *(_DWORD *)(a1 + 56) = *((_DWORD *)this + 14); + std::string::basic_string((char *)(a1 + 60), (int)this + 60); + *(_BYTE *)(a1 + 84) = *((_BYTE *)this + 84); + std::string::basic_string((char *)(a1 + 88), (int)this + 88); +} + +//----- (00470480) -------------------------------------------------------- +void __userpurge WXML::DOMLib::Token::Token(int a1@, WXML::DOMLib::Token *this, const WXML::DOMLib::Token *a3) +{ + int v4; // ecx + + *(_DWORD *)a1 = *(_DWORD *)this; + v4 = *((_DWORD *)this + 1); + *(_DWORD *)(a1 + 4) = v4; + if ( v4 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy(v4); + *(_DWORD *)(a1 + 8) = *((_DWORD *)this + 2); + *(_DWORD *)(a1 + 12) = *((_DWORD *)this + 3); + *(_DWORD *)(a1 + 16) = *((_DWORD *)this + 4); + *(_DWORD *)(a1 + 20) = *((_DWORD *)this + 5); + *(_DWORD *)(a1 + 24) = *((_DWORD *)this + 6); + *(_BYTE *)(a1 + 28) = *((_BYTE *)this + 28); + std::string::basic_string((char *)(a1 + 32), (int)this + 32); + *(_DWORD *)(a1 + 56) = *((_DWORD *)this + 14); + std::string::basic_string((char *)(a1 + 60), (int)this + 60); + *(_BYTE *)(a1 + 84) = *((_BYTE *)this + 84); + std::string::basic_string((char *)(a1 + 88), (int)this + 88); +} + +//----- (004705CC) -------------------------------------------------------- +void __fastcall WXML::DOMLib::Token::~Token(int a1) +{ + std::string::_M_dispose((void **)(a1 + 88)); + std::string::_M_dispose((void **)(a1 + 60)); + std::string::_M_dispose((void **)(a1 + 32)); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)(a1 + 4)); +} + +//----- (004705F8) -------------------------------------------------------- +#error "4709CA: call analysis failed (funcsize=214)" + +//----- (00470A34) -------------------------------------------------------- +void __fastcall WXML::DOMLib::Parser::~Parser(int a1) +{ + int v2; // edi + int *v3; // esi + int v4; // eax + int v5; // edx + int v6; // edx + void **v7; // esi + unsigned int v8; // edi + void *v9; // eax + int v10; // [esp+1Ch] [ebp-2Ch] + int v11; // [esp+20h] [ebp-28h] + int v12; // [esp+24h] [ebp-24h] + unsigned int v13; // [esp+28h] [ebp-20h] + int v14; // [esp+2Ch] [ebp-1Ch] + + std::string::_M_dispose((void **)(a1 + 328)); + WXML::DOMLib::Token::~Token(a1 + 216); + WXML::DOMLib::Token::~Token(a1 + 104); + std::vector::~vector((void **)(a1 + 88)); + v2 = *(_DWORD *)(a1 + 72); + v12 = *(_DWORD *)(a1 + 64); + v11 = *(_DWORD *)(a1 + 76); + v14 = *(_DWORD *)(a1 + 68); + v3 = (int *)(v14 + 4); + v13 = *(_DWORD *)(a1 + 84); + v4 = *(_DWORD *)(a1 + 56); + while ( v13 > (unsigned int)v3 ) + { + v5 = *v3; + v10 = v4; + ++v3; + std::_Destroy_aux::__destroy *>(v5, v5, v5 + 512); + v4 = v10; + } + if ( v14 == v13 ) + { + std::_Destroy_aux::__destroy *>(v13, v4, v2); + } + else + { + std::_Destroy_aux::__destroy *>(v13, v4, v12); + std::_Destroy_aux::__destroy *>(v6, v11, v2); + } + if ( *(_DWORD *)(a1 + 48) ) + { + v7 = *(void ***)(a1 + 68); + v8 = *(_DWORD *)(a1 + 84) + 4; + while ( v8 > (unsigned int)v7 ) + { + v9 = *v7++; + operator delete(v9); + } + operator delete(*(void **)(a1 + 48)); + } + std::deque::~deque(a1 + 8); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)(a1 + 4)); +} +// 470AC8: variable 'v6' is possibly undefined + +//----- (00470B1C) -------------------------------------------------------- +char __thiscall WXML::DOMLib::WXMLDom::IfHasItsElse(_DWORD *this, signed int a2, int *a3) +{ + BOOL v3; // eax + BOOL v4; // eax + int v5; // eax + unsigned int i; // eax + int v7; // edx + BOOL v8; // eax + int v10; // [esp+18h] [ebp-80h] + signed int v11; // [esp+1Ch] [ebp-7Ch] + int v12; // [esp+1Ch] [ebp-7Ch] + _DWORD *v13; // [esp+20h] [ebp-78h] + bool v14; // [esp+20h] [ebp-78h] + _DWORD *v15; // [esp+20h] [ebp-78h] + unsigned int v16; // [esp+20h] [ebp-78h] + _DWORD *v17; // [esp+24h] [ebp-74h] + bool v18; // [esp+24h] [ebp-74h] + _DWORD *v19; // [esp+24h] [ebp-74h] + _DWORD *v20; // [esp+24h] [ebp-74h] + _DWORD *v21; // [esp+24h] [ebp-74h] + void *v23[6]; // [esp+60h] [ebp-38h] BYREF + void *v24[8]; // [esp+78h] [ebp-20h] BYREF + + v17 = (_DWORD *)(*(_DWORD *)(this[18] + 8 * a2) + 48); + std::string::basic_string(v23, "wx:else"); + v3 = std::map::count(v17, (int)v23); + v18 = 1; + if ( !v3 ) + { + v19 = (_DWORD *)(*(_DWORD *)(this[18] + 8 * a2) + 48); + std::string::basic_string(v24, "wx:elif"); + v18 = std::map::count(v19, (int)v24); + std::string::_M_dispose(v24); + } + std::string::_M_dispose(v23); + if ( v18 ) + return 1; + v13 = (_DWORD *)(*(_DWORD *)(this[18] + 8 * a2) + 48); + std::string::basic_string(v23, "wx:if"); + v4 = std::map::count(v13, (int)v23); + v14 = 0; + if ( !v4 ) + { + v15 = (_DWORD *)(*(_DWORD *)(this[18] + 8 * a2) + 48); + std::string::basic_string(v24, "wx-if"); + v14 = !std::map::count(v15, (int)v24); + std::string::_M_dispose(v24); + } + std::string::_M_dispose(v23); + if ( !v14 ) + { + v11 = a2 - 1; + v5 = *(_DWORD *)(this[18] + 8 * a2); + if ( *(_DWORD *)(v5 + 72) == *(_DWORD *)(v5 + 76) ) + { + for ( i = a2 + 1; ; i = v16 + 1 ) + { + v16 = i; + v7 = this[18]; + if ( (this[19] - v7) >> 3 <= i ) + break; + v10 = 8 * i; + v20 = (_DWORD *)(*(_DWORD *)(v7 + 8 * i) + 48); + std::string::basic_string(v23, "wx:else"); + v8 = std::map::count(v20, (int)v23); + v18 = 1; + if ( !v8 ) + { + v21 = (_DWORD *)(*(_DWORD *)(this[18] + v10) + 48); + std::string::basic_string(v24, "wx:elif"); + v18 = std::map::count(v21, (int)v24); + std::string::_M_dispose(v24); + } + std::string::_M_dispose(v23); + if ( !v18 ) + break; + v12 = a3[1]; + if ( v12 != std::find<__gnu_cxx::__normal_iterator>,std::string>( + *a3, + v12, + *(_DWORD *)(this[18] + v10)) + || *(_DWORD *)(*(_DWORD *)(this[18] + v10) + 76) != *(_DWORD *)(*(_DWORD *)(this[18] + v10) + 72) ) + { + return v18; + } + v11 = v16; + } + } + while ( v11 >= a2 ) + std::vector>::_M_erase(this + 18, this[18] + 8 * v11--); + return 1; + } + return v18; +} + +//----- (00470E20) -------------------------------------------------------- +int __cdecl WXML::DOMLib::WXMLDom::ToCamelStyle(int a1, int a2) +{ + char v2; // al + char *i; // [esp+14h] [ebp-44h] + char lpuexcpt; // [esp+18h] [ebp-40h] + + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)a1 = a1 + 8; + *(_BYTE *)(a1 + 8) = 0; + std::string::reserve((_DWORD *)a1, *(_DWORD *)(a2 + 4)); + lpuexcpt = 0; + for ( i = *(char **)a2; ; ++i ) + { + v2 = *i; + if ( !*i ) + break; + if ( v2 > 46 ) + { + if ( v2 == 58 ) + { +LABEL_11: + lpuexcpt = 1; + continue; + } + } + else if ( v2 > 44 ) + { + goto LABEL_11; + } + if ( (unsigned __int8)(v2 - 97) <= 0x19u && lpuexcpt ) + { + std::string::push_back((_DWORD *)a1, v2 - 32); + lpuexcpt = 0; + } + else + { + std::string::push_back((_DWORD *)a1, *i); + } + } + return a1; +} + +//----- (00470F1C) -------------------------------------------------------- +char __fastcall WXML::DOMLib::WXMLDom::HasSpAttrPrefix(int a1) +{ + int i; // ebx + const char *v3; // edi + const char *v5; // edi + + for ( i = *(_DWORD *)(a1 + 60); i != a1 + 52; i = std::_Rb_tree_increment(i) ) + { + v3 = *(const char **)(i + 16); + if ( strncmp(v3, "bind", 4u) ) + { + if ( strncmp(v3, "catch", 5u) ) + { + if ( strncmp(v3, "capture-bind", 0xCu) ) + { + if ( strncmp(v3, "capture-catch", 0xDu) ) + { + if ( !std::operator==(i + 16, "slot") ) + { + v5 = *(const char **)(i + 16); + if ( strncmp(v5, "wx:", 3u) ) + { + if ( strncmp(v5, "mark:", 5u) ) + continue; + } + } + } + } + } + } + return 1; + } + return 0; +} + +//----- (00471024) -------------------------------------------------------- +int __thiscall WXML::DOMLib::WXMLDom::MarkIfHasDescendant(int this, int *a2) +{ + int result; // eax + int v4; // ebx + int v5; // ecx + int v6; // eax + int v7; // [esp+1Ch] [ebp-1Ch] + + result = a2[1]; + if ( *a2 != result ) + { + v4 = (*(_DWORD *)(this + 76) - *(_DWORD *)(this + 72)) >> 3; + while ( --v4 >= 0 ) + { + WXML::DOMLib::WXMLDom::MarkIfHasDescendant(a2); + v5 = *a2; + v6 = *(_DWORD *)(*(_DWORD *)(this + 72) + 8 * v4); + *(_BYTE *)(this + 256) |= *(_BYTE *)(v6 + 256); + v7 = a2[1]; + result = std::find<__gnu_cxx::__normal_iterator>,std::string>( + v5, + v7, + v6); + if ( v7 != result ) + *(_BYTE *)(this + 256) = 1; + } + } + return result; +} + +//----- (0047109C) -------------------------------------------------------- +void __thiscall WXML::DOMLib::WXMLDom::CutDomsForCustomComponent(_DWORD *this, int *a2) +{ + int v3; // ebx + int v4; // esi + int *v5; // eax + volatile signed __int32 **v6; // esi + volatile signed __int32 **v7; // eax + volatile signed __int32 *v8; // ecx + volatile signed __int32 *v9; // eax + int v10; // [esp+1Ch] [ebp-1Ch] + + v3 = (this[19] - this[18]) >> 3; + while ( --v3 >= 0 ) + { + v4 = 8 * v3; + WXML::DOMLib::WXMLDom::CutDomsForCustomComponent(a2); + if ( !std::operator==(*(_DWORD *)(this[18] + 8 * v3), "include") + && !std::operator==(*(_DWORD *)(this[18] + 8 * v3), "import") + && !std::operator==(*(_DWORD *)(this[18] + 8 * v3), "wx-template") + && !std::operator==(*(_DWORD *)(this[18] + 8 * v3), "wx-define") + && !std::operator==(*(_DWORD *)(this[18] + 8 * v3), "template") + && !std::operator==(*(_DWORD *)(this[18] + 8 * v3), "slot") + && !std::operator==(*(_DWORD *)(this[18] + 8 * v3), "wx-import") ) + { + v10 = a2[1]; + if ( v10 == std::find<__gnu_cxx::__normal_iterator>,std::string>( + *a2, + v10, + *(_DWORD *)(this[18] + 8 * v3)) + && !WXML::DOMLib::WXMLDom::IfHasItsElse(this, v3, a2) ) + { + v5 = (int *)(v4 + this[18]); + if ( *(_DWORD *)(*v5 + 76) == *(_DWORD *)(*v5 + 72) ) + { + std::vector>::_M_erase(this + 18, (int)v5); + } + else if ( *(_DWORD *)(*v5 + 76) - *(_DWORD *)(*v5 + 72) == 8 && !WXML::DOMLib::WXMLDom::HasSpAttrPrefix(*v5) ) + { + v6 = (volatile signed __int32 **)(this[18] + v4); + v7 = (volatile signed __int32 **)*((_DWORD *)*v6 + 18); + v8 = *v7; + v9 = v7[1]; + *v6 = v8; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(v6 + 1, v9); + } + } + } + } +} + +//----- (00471248) -------------------------------------------------------- +unsigned int __thiscall WXML::DOMLib::WXMLDom::Print(_DWORD *this, int a2, char *a3, char *a4) +{ + unsigned int v4; // esi + unsigned int result; // eax + + v4 = 0; + WXML::DOMLib::WXMLDom::PrintMe((int)this, a2, a3, a4); + while ( 1 ) + { + result = (this[19] - this[18]) >> 3; + if ( result <= v4 ) + break; + ++v4; + WXML::DOMLib::WXMLDom::Print(a2 + 1, a3, a4); + } + return result; +} + +//----- (004712AC) -------------------------------------------------------- +void __thiscall WXML::DOMLib::WXMLDom::PrintMe(int this, int a2, char *a3, char *a4) +{ + char *v4; // eax + int v5; // eax + std::ostream::sentry *v6; // eax + std::ostream::sentry *v7; // eax + std::ostream::sentry *v8; // eax + std::ostream::sentry *v9; // eax + bool v10; // zf + int v11; // eax + int j; // eax + unsigned __int8 **v13; // eax + std::ostream::sentry *v14; // eax + int *v15; // eax + std::ostream::sentry *v16; // eax + std::ostream::sentry *v17; // eax + unsigned __int8 **v18; // eax + std::ostream::sentry *v19; // eax + std::ostream::sentry *v20; // eax + std::ostream::sentry *v21; // eax + int *v22; // eax + std::ostream::sentry *v23; // eax + std::ostream::sentry *v24; // eax + std::ostream::sentry *v25; // eax + std::ostream::sentry *v26; // eax + std::ostream::sentry *v27; // eax + std::ostream::sentry *v28; // eax + std::ostream::sentry *v29; // [esp+2Ch] [ebp-11Ch] + std::ostream::sentry *v30; // [esp+30h] [ebp-118h] + int i; // [esp+34h] [ebp-114h] + int v32; // [esp+34h] [ebp-114h] + char v34[216]; // [esp+70h] [ebp-D8h] BYREF + _DWORD *v35; // [esp+158h] [ebp+10h] + + std::basic_stringstream,std::allocator>::basic_stringstream((int)v34); + v4 = v34; + if ( a4 ) + v4 = a4; + v35 = v4; + if ( (v4[*(_DWORD *)(*(_DWORD *)v4 - 12) + 20] & 5) != 0 ) + printf("%s", a3); + else + std::operator<<>((std::ostream::sentry *)(v4 + 8), a3); + for ( i = 0; ; ++i ) + { + v5 = *(_DWORD *)((char *)v35 + *(_DWORD *)(*v35 - 12) + 20) & 5; + if ( i >= a2 ) + break; + if ( v5 ) + printf(" "); + else + std::operator<<>((std::ostream::sentry *)(v35 + 2), " "); + } + if ( v5 ) + { + printf("pos: %d, %d, tag: %s, ", *(_DWORD *)(this + 92), *(_DWORD *)(this + 96), *(const char **)this); + } + else + { + std::operator<<>((std::ostream::sentry *)(v35 + 2), "pos: "); + v6 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 92)); + std::operator<<>(v6, ", "); + v7 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 96)); + v8 = std::operator<<>(v7, " tag: "); + v9 = std::operator<<(v8, (int *)this); + std::operator<<>(v9, ", "); + } + v10 = !std::operator==(this, "TEXTNODE"); + v11 = *(_DWORD *)(*v35 - 12); + if ( v10 ) + { + if ( (*((_BYTE *)v35 + v11 + 20) & 5) != 0 ) + printf("attr: "); + else + std::operator<<>((std::ostream::sentry *)(v35 + 2), "attr: "); + for ( j = *(_DWORD *)(this + 60); ; j = std::_Rb_tree_increment(v32) ) + { + v32 = j; + if ( j == this + 52 ) + break; + if ( (*(_DWORD *)((char *)v35 + *(_DWORD *)(*v35 - 12) + 20) & 5) != 0 ) + { + v13 = WXML::DOMLib::Token::ToString[abi:cxx11](j + 40); + printf("%s->%s,", *(const char **)(v32 + 16), (const char *)*v13); + } + else + { + v14 = std::operator<<((std::ostream::sentry *)(v35 + 2), (int *)(j + 16)); + v29 = std::operator<<>(v14, "->"); + v15 = (int *)WXML::DOMLib::Token::ToString[abi:cxx11](v32 + 40); + v16 = std::operator<<(v29, v15); + std::operator<<>(v16, " "); + v17 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(v32 + 96)); + std::operator<<>(v17, " "); + } + } + } + else if ( (*((_BYTE *)v35 + v11 + 20) & 5) != 0 ) + { + v18 = WXML::DOMLib::Token::ToString[abi:cxx11](this + 84); + printf( + "pos: %d, %d, len: %d, %s", + *(_DWORD *)(this + 92), + *(_DWORD *)(this + 96), + *(_DWORD *)(this + 104), + (const char *)*v18); + } + else + { + std::operator<<>((std::ostream::sentry *)(v35 + 2), "pos: "); + v19 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 92)); + std::operator<<>(v19, ", "); + v20 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 96)); + std::operator<<>(v20, ", len: "); + v21 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 104)); + v30 = std::operator<<>(v21, ", "); + v22 = (int *)WXML::DOMLib::Token::ToString[abi:cxx11](this + 84); + std::operator<<(v30, v22); + } + if ( (*((_BYTE *)v35 + *(_DWORD *)(*v35 - 12) + 20) & 5) != 0 ) + { + printf( + "icn: %s, icc: %u, ivwn: %s", + *(const char **)(this + 196), + *(_DWORD *)(this + 244), + *(const char **)(this + 220)); + } + else + { + v23 = std::operator<<>((std::ostream::sentry *)(v35 + 2), "icn:"); + v24 = std::operator<<(v23, (int *)(this + 196)); + v25 = std::operator<<>(v24, ", "); + std::operator<<>(v25, "icc: "); + v26 = (std::ostream::sentry *)std::ostream::operator<<(*(_DWORD *)(this + 244)); + v27 = std::operator<<>(v26, ", ivwn: "); + std::operator<<(v27, (int *)(this + 220)); + } + if ( (*((_BYTE *)v35 + *(_DWORD *)(*v35 - 12) + 20) & 5) != 0 ) + { + printf(", hasXComponentDescendant %d", *(unsigned __int8 *)(this + 256)); + } + else + { + v28 = std::operator<<>((std::ostream::sentry *)(v35 + 2), ", hasXComponentDescendant"); + std::ostream::_M_insert(v28, *(_BYTE *)(this + 256)); + } + if ( (*((_BYTE *)v35 + *(_DWORD *)(*v35 - 12) + 20) & 5) != 0 ) + printf("\n"); + else + std::operator<<>((std::ostream::sentry *)(v35 + 2), "\n"); + std::basic_stringstream,std::allocator>::~basic_stringstream((int)v34); +} +// 4D03A0: using guessed type _DWORD __stdcall std::ostream::operator<<(_DWORD); + +//----- (00471934) -------------------------------------------------------- +int __fastcall WXML::DOMLib::WXMLDom::WXMLDom(int a1) +{ + int result; // eax + + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)a1 = a1 + 8; + *(_DWORD *)(a1 + 24) = a1 + 32; + *(_DWORD *)(a1 + 60) = a1 + 52; + *(_DWORD *)(a1 + 64) = a1 + 52; + *(_DWORD *)(a1 + 116) = a1 + 124; + *(_DWORD *)(a1 + 144) = a1 + 152; + *(_DWORD *)(a1 + 172) = a1 + 180; + *(_BYTE *)(a1 + 8) = 0; + *(_DWORD *)(a1 + 28) = 0; + *(_BYTE *)(a1 + 32) = 0; + *(_DWORD *)(a1 + 52) = 0; + *(_DWORD *)(a1 + 56) = 0; + *(_DWORD *)(a1 + 68) = 0; + *(_DWORD *)(a1 + 72) = 0; + *(_DWORD *)(a1 + 76) = 0; + *(_DWORD *)(a1 + 80) = 0; + *(_DWORD *)(a1 + 84) = 0; + *(_DWORD *)(a1 + 88) = 0; + *(_DWORD *)(a1 + 120) = 0; + *(_BYTE *)(a1 + 124) = 0; + *(_DWORD *)(a1 + 148) = 0; + *(_BYTE *)(a1 + 152) = 0; + *(_DWORD *)(a1 + 176) = 0; + *(_BYTE *)(a1 + 180) = 0; + *(_BYTE *)(a1 + 112) = 0; + *(_BYTE *)(a1 + 168) = 0; + *(_DWORD *)(a1 + 104) = 0; + *(_DWORD *)(a1 + 92) = 0; + *(_DWORD *)(a1 + 96) = 0; + *(_DWORD *)(a1 + 100) = 0; + *(_DWORD *)(a1 + 140) = -1; + *(_DWORD *)(a1 + 196) = a1 + 204; + *(_DWORD *)(a1 + 220) = a1 + 228; + result = a1 + 276; + *(_DWORD *)(a1 + 200) = 0; + *(_BYTE *)(a1 + 204) = 0; + *(_DWORD *)(a1 + 224) = 0; + *(_BYTE *)(a1 + 228) = 0; + *(_DWORD *)(a1 + 248) = 0; + *(_DWORD *)(a1 + 252) = 0; + *(_DWORD *)(a1 + 276) = 0; + *(_DWORD *)(a1 + 280) = 0; + *(_DWORD *)(a1 + 284) = a1 + 276; + *(_DWORD *)(a1 + 288) = a1 + 276; + *(_DWORD *)(a1 + 292) = 0; + *(_DWORD *)(a1 + 244) = 0; + *(_BYTE *)(a1 + 256) = 0; + *(_DWORD *)(a1 + 264) = 0; + *(_DWORD *)(a1 + 268) = 0; + return result; +} + +//----- (00471AB8) -------------------------------------------------------- +std::ostream::sentry *__thiscall WXML::DOMLib::StrCache::RenderPathDefine(_DWORD *this, int a2) +{ + unsigned int v3; // esi + std::ostream::sentry *v4; // ebx + int *v5; // eax + + v3 = 0; + v4 = (std::ostream::sentry *)(a2 + 8); + std::operator<<>((std::ostream::sentry *)(a2 + 8), "var x=["); + while ( v3 < -1431655765 * ((this[7] - this[6]) >> 3) ) + { + if ( v3 ) + std::operator<<>(v4, ","); + std::operator<<>(v4, "'"); + v5 = (int *)(this[6] + 24 * v3++); + WXML::Rewrite::ToStringCode(v5, a2); + std::operator<<>(v4, "'"); + } + return std::operator<<>(v4, "];"); +} + +//----- (00471B54) -------------------------------------------------------- +void __thiscall WXML::DOMLib::StrCache::Insert(_DWORD *this, int a2) +{ + int v3; // edi + + if ( !std::map::count(this, a2) ) + { + v3 = this[5]; + *(_DWORD *)std::map::operator[](this, a2) = v3; + std::vector::push_back((int)(this + 6), a2); + } +} + +//----- (00471B9C) -------------------------------------------------------- +int __thiscall WXML::DOMLib::StrCache::GetStrID(_DWORD *this, int a2) +{ + BOOL v2; // edx + int result; // eax + + v2 = std::map::count(this, a2); + result = -1; + if ( v2 ) + return *(_DWORD *)std::map::operator[](this, a2); + return result; +} + +//----- (00471BD0) -------------------------------------------------------- +void __fastcall WXML::EXPRLib::NonTerminal::~NonTerminal(void *a1) +{ + operator delete(a1); +} + +//----- (00471BE4) -------------------------------------------------------- +void __fastcall WXML::EXPRLib::EPS::~EPS(void *a1) +{ + operator delete(a1); +} + +//----- (00471BF8) -------------------------------------------------------- +int __userpurge WXML::EXPRLib::Token::Token@( + int *a1@, + WXML::EXPRLib::Token *this, + const WXML::EXPRLib::Token *a3) +{ + int *v4; // ecx + int v5; // edx + int v6; // eax + int result; // eax + + v4 = a1 + 4; + v5 = *((_DWORD *)this + 2); + *(v4 - 4) = *(_DWORD *)this; + v6 = *((_DWORD *)this + 1); + *(v4 - 2) = v5; + *(v4 - 3) = v6; + *(v4 - 1) = *((_DWORD *)this + 3); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count(v4, *((_DWORD *)this + 4)); + a1[5] = *((_DWORD *)this + 5); + result = *((_DWORD *)this + 6); + a1[6] = result; + return result; +} + +//----- (00471C40) -------------------------------------------------------- +int __fastcall WXML::EXPRLib::Token::Token(_DWORD *a1) +{ + int result; // eax + + result = 0; + a1[3] = 0; + a1[4] = 0; + memset(a1 + 1, 0, 8u); + a1[5] = 0; + a1[6] = 0; + return result; +} + +//----- (00471C78) -------------------------------------------------------- +int __fastcall WXML::EXPRLib::Action::Action(int a1) +{ + int result; // eax + + *(_DWORD *)a1 = &off_55F20C; + *(_DWORD *)(a1 + 4) = a1 + 12; + result = a1 + 44; + *(_DWORD *)(a1 + 8) = 0; + *(_BYTE *)(a1 + 12) = 0; + *(_DWORD *)(a1 + 36) = a1 + 44; + *(_DWORD *)(a1 + 40) = 0; + *(_BYTE *)(a1 + 44) = 0; + *(_DWORD *)(a1 + 28) = 0; + return result; +} +// 55F20C: using guessed type void (__cdecl *off_55F20C)(WXML::EXPRLib::Action *__hidden this); + +//----- (00471CA8) -------------------------------------------------------- +void __fastcall WXML::EXPRLib::Action::~Action(void **a1) +{ + WXML::EXPRLib::Action::~Action(a1); + operator delete(a1); +} + +//----- (00471CC4) -------------------------------------------------------- +void __fastcall WXML::EXPRLib::Action::~Action(void **a1) +{ + WXML::EXPRLib::Action::~Action(a1, (WXML::EXPRLib::Action *)2); +} + +//----- (00471CDC) -------------------------------------------------------- +void __thiscall WXML::EXPRLib::Action::~Action(void **ecx0, WXML::EXPRLib::Action *this) +{ + void **v3; // ecx + + v3 = ecx0 + 9; + *(v3 - 9) = &off_55F20C; + std::string::_M_dispose(v3); + std::string::_M_dispose(ecx0 + 1); +} +// 55F20C: using guessed type void (__cdecl *off_55F20C)(WXML::EXPRLib::Action *__hidden this); + +//----- (00471D00) -------------------------------------------------------- +void __fastcall WXML::EXPRLib::Parser::~Parser(int a1) +{ + int v2; // edi + int v3; // edx + int *v4; // esi + int v5; // eax + int v6; // edx + int v7; // edx + void **v8; // esi + unsigned int v9; // edi + void *v10; // eax + int v11; // [esp+1Ch] [ebp-2Ch] + int v12; // [esp+20h] [ebp-28h] + int v13; // [esp+24h] [ebp-24h] + unsigned int v14; // [esp+28h] [ebp-20h] + int v15; // [esp+2Ch] [ebp-1Ch] + + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)(a1 + 84)); + v2 = *(_DWORD *)(a1 + 64); + v13 = *(_DWORD *)(a1 + 56); + v3 = *(_DWORD *)(a1 + 60); + v12 = *(_DWORD *)(a1 + 68); + v15 = v3; + v4 = (int *)(v3 + 4); + v14 = *(_DWORD *)(a1 + 76); + v5 = *(_DWORD *)(a1 + 48); + while ( v14 > (unsigned int)v4 ) + { + v6 = *v4; + v11 = v5; + ++v4; + std::_Destroy_aux::__destroy *>(v6, v6, v6 + 512); + v5 = v11; + } + if ( v15 == v14 ) + { + std::_Destroy_aux::__destroy *>(v3, v5, v2); + } + else + { + std::_Destroy_aux::__destroy *>(v3, v5, v13); + std::_Destroy_aux::__destroy *>(v7, v12, v2); + } + if ( *(_DWORD *)(a1 + 40) ) + { + v8 = *(void ***)(a1 + 60); + v9 = *(_DWORD *)(a1 + 76) + 4; + while ( v9 > (unsigned int)v8 ) + { + v10 = *v8++; + operator delete(v10); + } + operator delete(*(void **)(a1 + 40)); + } + std::deque>::~deque(a1); +} +// 471D6A: variable 'v3' is possibly undefined +// 471D76: variable 'v7' is possibly undefined + +//----- (00471DC0) -------------------------------------------------------- +int __fastcall WXML::EXPRLib::Terminal::Terminal(int a1) +{ + int result; // eax + + *(_DWORD *)(a1 + 4) = a1 + 12; + result = 0; + *(_DWORD *)a1 = &off_55F220; + *(_DWORD *)(a1 + 8) = 0; + *(_BYTE *)(a1 + 12) = 0; + *(_DWORD *)(a1 + 40) = 0; + *(_DWORD *)(a1 + 44) = 0; + memset((void *)(a1 + 32), 0, 8u); + *(_DWORD *)(a1 + 48) = 0; + *(_DWORD *)(a1 + 52) = 0; + return result; +} +// 55F220: using guessed type void (__cdecl *off_55F220)(WXML::EXPRLib::Terminal *__hidden this); + +//----- (00471E0C) -------------------------------------------------------- +void __fastcall WXML::EXPRLib::Terminal::~Terminal(void **a1) +{ + WXML::EXPRLib::Terminal::~Terminal(a1); + operator delete(a1); +} + +//----- (00471E28) -------------------------------------------------------- +void __fastcall WXML::EXPRLib::Terminal::~Terminal(void **a1) +{ + WXML::EXPRLib::Terminal::~Terminal(a1, (WXML::EXPRLib::Terminal *)2); +} + +//----- (00471E40) -------------------------------------------------------- +void __thiscall WXML::EXPRLib::Terminal::~Terminal(void **ecx0, WXML::EXPRLib::Terminal *this) +{ + volatile signed __int32 **v3; // ecx + + v3 = (volatile signed __int32 **)(ecx0 + 11); + *(v3 - 11) = (volatile signed __int32 *)&off_55F220; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v3); + std::string::_M_dispose(ecx0 + 1); +} +// 55F220: using guessed type void (__cdecl *off_55F220)(WXML::EXPRLib::Terminal *__hidden this); + +//----- (00471E64) -------------------------------------------------------- +void __thiscall WXML::EXPRLib::Terminal::~Terminal(void **ecx0, WXML::EXPRLib::Terminal *this) +{ + volatile signed __int32 **v3; // ecx + + v3 = (volatile signed __int32 **)(ecx0 + 11); + *(v3 - 11) = (volatile signed __int32 *)&off_55F220; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v3); + std::string::_M_dispose(ecx0 + 1); +} +// 55F220: using guessed type void (__cdecl *off_55F220)(WXML::EXPRLib::Terminal *__hidden this); + +//----- (00471E88) -------------------------------------------------------- +void __thiscall night::NSASTParse::NSASTParse(int this, int a2, int a3, int a4) +{ + std::string::basic_string((char *)this, a2); + *(_DWORD *)(this + 48) = 0; + *(_BYTE *)(this + 52) = 0; + *(_DWORD *)(this + 44) = this + 52; + *(_DWORD *)(this + 32) = 0; + *(_DWORD *)(this + 28) = a3; + *(_DWORD *)(this + 36) = 0; + *(_DWORD *)(this + 24) = a4; + *(_DWORD *)(this + 40) = 0; + std::string::operator=((unsigned int *)(this + 44), (char *)&byte_551F04); +} + +//----- (00471F5C) -------------------------------------------------------- +void __fastcall night::NSASTParse::~NSASTParse(void **a1) +{ + std::string::_M_dispose(a1 + 11); + std::string::_M_dispose(a1); +} + +//----- (00471F78) -------------------------------------------------------- +void __fastcall night::NSCompileJs::~NSCompileJs(int a1, int a2) +{ + std::vector::~vector((void ***)(a1 + 36), a2); + std::string::_M_dispose((void **)a1); +} + +//----- (00471F94) -------------------------------------------------------- +void __userpurge night::ns_sourcemap::ns_sourcemap( + int a1@, + night::ns_sourcemap *this, + const night::ns_sourcemap *a3) +{ + std::string::basic_string((char *)a1, (int)this); + *(_DWORD *)(a1 + 24) = *((_DWORD *)this + 6); + *(_DWORD *)(a1 + 28) = *((_DWORD *)this + 7); + std::string::basic_string((char *)(a1 + 32), (int)this + 32); + *(_DWORD *)(a1 + 56) = *((_DWORD *)this + 14); + *(_DWORD *)(a1 + 60) = *((_DWORD *)this + 15); +} + +//----- (0047204C) -------------------------------------------------------- +void __fastcall night::ns_sourcemap::~ns_sourcemap(void **a1) +{ + std::string::_M_dispose(a1 + 8); + std::string::_M_dispose(a1); +} + +//----- (00472068) -------------------------------------------------------- +bool __cdecl night::NSToken::rw_cb_number(night::NSToken *this, _BYTE *a2) +{ + bool result; // al + + if ( (_BYTE)this != 46 ) + return (unsigned __int8)((_BYTE)this - 48) <= 9u; + result = 0; + if ( !*a2 ) + { + *a2 = 1; + return 1; + } + return result; +} + +//----- (00472090) -------------------------------------------------------- +char __cdecl night::NSToken::tk_is_comment2(night::NSToken *this, night::NSStream *a2) +{ + int v3[3]; // [esp+1Ch] [ebp-2Ch] BYREF + int v4[3]; // [esp+28h] [ebp-20h] BYREF + int v5[4]; // [esp+34h] [ebp-14h] BYREF + + night::NSStream::peek(v3, a2); + if ( LOBYTE(v3[0]) != 42 ) + return 1; + night::NSStream::peek_2(v4, a2); + if ( LOBYTE(v4[0]) != 47 ) + return 1; + night::NSStream::next(v5, a2); + return 0; +} +// 472090: using guessed type int var_2C[3]; +// 472090: using guessed type int var_20[3]; +// 472090: using guessed type int var_14[4]; + +//----- (004720D8) -------------------------------------------------------- +bool __cdecl night::NSToken::tk_is_whitespace(night::NSToken *this) +{ + unsigned int v1; // ebx + void *v3[2]; // [esp+18h] [ebp-20h] BYREF + char v4; // [esp+20h] [ebp-18h] BYREF + + v3[0] = &v4; + std::string::_M_construct(v3, 1u, (char)this); + v1 = std::string::find(night::NS_BUILTIN_SPACE, (int)v3, 0); + std::string::_M_dispose(v3); + return v1 != -1; +} +// 565A90: using guessed type int night::NS_BUILTIN_SPACE[6]; + +//----- (0047212C) -------------------------------------------------------- +char __cdecl night::NSToken::tk_is_valid_op_str(night::NSToken *this, int a2) +{ + char lpuexcpt; // [esp+18h] [ebp-70h] + void *v4[2]; // [esp+50h] [ebp-38h] BYREF + char v5; // [esp+58h] [ebp-30h] BYREF + void *v6[8]; // [esp+68h] [ebp-20h] BYREF + + v4[0] = &v5; + std::string::_M_construct(v4, 1u, (char)this); + if ( std::string::find(night::NS_BUILTIN_OP, (int)v4, 0) == -1 + || (std::string::basic_string((char *)v6, a2), + std::string::_M_replace_aux(v6, (size_t)v6[1], 0, 1u, (char)this), + std::string::operator=((unsigned __int8 **)v4, (int)v6), + std::string::_M_dispose(v6), + std::string::find(night::NS_BUILTIN_ALL_OP, (int)v4, 0) == -1) ) + { + lpuexcpt = 0; + } + else + { + std::string::_M_assign(a2, (int)v4); + lpuexcpt = 1; + } + std::string::_M_dispose(v4); + return lpuexcpt; +} +// 565AC0: using guessed type int night::NS_BUILTIN_ALL_OP[6]; +// 565AF0: using guessed type int night::NS_BUILTIN_OP[6]; + +//----- (0047229C) -------------------------------------------------------- +bool __cdecl night::NSToken::tk_is_not_line_break(night::NSToken *this) +{ + void *v2[2]; // [esp+18h] [ebp-20h] BYREF + char v3; // [esp+20h] [ebp-18h] BYREF + + v2[0] = &v3; + std::string::_M_construct(v2, 1u, (char)this); + std::string::_M_dispose(v2); + return (_BYTE)this != 10; +} + +//----- (004722D8) -------------------------------------------------------- +_DWORD *__thiscall night::NSToken::get_tokens_for_sourcemap(_DWORD *this, void **a2, _DWORD *a3) +{ + int i; // esi + _DWORD *result; // eax + void **v5; // eax + void *v6; // edx + _DWORD *v7; // ebx + _DWORD *j; // eax + _DWORD *v9; // ecx + unsigned int v10; // eax + _DWORD *v11; // edx + bool v12; // al + _DWORD *v13; // [esp+20h] [ebp-28h] + int insert_hint_unique_pos; // [esp+20h] [ebp-28h] + unsigned int v16; // [esp+28h] [ebp-20h] + _DWORD *v17; // [esp+2Ch] [ebp-1Ch] + + for ( i = this[9]; ; i = std::_Rb_tree_increment(i) ) + { + result = this + 7; + if ( (_DWORD *)i == this + 7 ) + break; + v5 = std::map::operator[](a2, i + 16); + v6 = *(void **)(i + 40); + v7 = a3 + 1; + *v5 = v6; + v17 = a3 + 1; + for ( j = (_DWORD *)a3[2]; j; j = v9 ) + { + v9 = (_DWORD *)j[3]; + if ( (unsigned int)v6 <= j[4] ) + v9 = (_DWORD *)j[2]; + if ( (unsigned int)v6 <= j[4] ) + v7 = j; + } + if ( v17 == v7 || (unsigned int)v6 < v7[4] ) + { + v13 = v7; + v7 = operator new(0x2Cu); + v10 = *(_DWORD *)(i + 40); + v7[6] = 0; + v7[4] = v10; + v16 = v10; + v7[5] = v7 + 7; + *((_BYTE *)v7 + 28) = 0; + insert_hint_unique_pos = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + a3, + v13, + v7 + 4); + if ( v11 ) + { + v12 = insert_hint_unique_pos != 0 || v17 == v11; + if ( !v12 ) + v12 = v16 < v11[4]; + std::_Rb_tree_insert_and_rebalance(v12, v7, v11, v17); + ++a3[5]; + } + else + { + std::string::_M_dispose((void **)v7 + 5); + operator delete(v7); + v7 = (_DWORD *)insert_hint_unique_pos; + } + } + std::string::_M_assign((int)(v7 + 5), i + 16); + } + return result; +} +// 47238A: variable 'v11' is possibly undefined + +//----- (00472400) -------------------------------------------------------- +int __cdecl night::NSToken::tk_is_var(night::NSToken *this) +{ + int result; // eax + int v2; // edx + int v3; // ecx + int v4; // eax + + result = night::NSToken::tk_is_var_start((char)this); + if ( !(_BYTE)result ) + { + v4 = v3 - 48; + LOBYTE(v4) = (unsigned __int8)(v3 - 48) <= 9u; + LOBYTE(v2) = (_BYTE)v3 == 95; + return v2 | v4; + } + return result; +} +// 472415: variable 'v3' is possibly undefined +// 472423: variable 'v2' is possibly undefined + +//----- (00472428) -------------------------------------------------------- +void __fastcall night::NSToken::~NSToken(int a1) +{ + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree(a1 + 24); + if ( *(_DWORD *)(a1 + 12) ) + operator delete(*(void **)(a1 + 12)); +} + +//----- (00472450) -------------------------------------------------------- +void **__thiscall night::ns_node::debug_no_space[abi:cxx11](void **this, const char **a2) +{ + const char *v2; // ecx + const char *v3; // ecx + const char *v4; // ebx + const char *v5; // ecx + const char *v6; // edx + const char *v7; // ecx + _DWORD *v8; // eax + const char *v9; // esi + const char *v10; // ebx + const char *v11; // eax + const char *v12; // edx + const char *v13; // ecx + _DWORD *v14; // eax + _DWORD *v15; // eax + const char *v16; // esi + int v17; // eax + _DWORD *v18; // eax + char *v19; // ecx + _DWORD *v20; // eax + _DWORD *v21; // eax + int *v22; // ecx + const char *v23; // edx + const char *v24; // ebx + const char *v25; // ecx + _DWORD *v26; // eax + _DWORD *v27; // eax + _DWORD *v28; // eax + const char *v29; // esi + int v30; // eax + char *v31; // ecx + _DWORD *v32; // eax + _DWORD *v33; // eax + const char *v34; // edx + const char *v35; // ecx + _DWORD *v36; // eax + _DWORD *v37; // eax + const char *v38; // esi + int v39; // eax + _DWORD *v40; // eax + char *v41; // ecx + _DWORD *v42; // eax + _DWORD *v43; // eax + _DWORD *v44; // eax + int v45; // eax + _DWORD *v46; // eax + _DWORD *v47; // eax + _DWORD **v48; // eax + _DWORD *v49; // eax + _DWORD *v50; // eax + char *v51; // ecx + _DWORD *v52; // eax + const char *v53; // edx + const char *v54; // ecx + const char *v55; // edi + const char *v56; // ebx + int v57; // eax + char *v58; // ecx + _DWORD *v59; // eax + const char *v60; // esi + int v61; // eax + _DWORD *v62; // eax + int v63; // eax + _DWORD *v64; // eax + _DWORD *v65; // eax + _DWORD **v66; // eax + _DWORD *v67; // eax + _DWORD *v68; // eax + const char *v69; // edx + const char *v70; // ebx + const char *v71; // esi + int v72; // eax + char *v73; // ecx + _DWORD *v74; // eax + _DWORD *v75; // eax + _DWORD *v76; // eax + unsigned int m; // [esp+30h] [ebp-508h] + unsigned int mm; // [esp+30h] [ebp-508h] + unsigned int i; // [esp+34h] [ebp-504h] + unsigned int j; // [esp+34h] [ebp-504h] + unsigned int k; // [esp+34h] [ebp-504h] + unsigned int n; // [esp+34h] [ebp-504h] + unsigned int ii; // [esp+34h] [ebp-504h] + unsigned int kk; // [esp+34h] [ebp-504h] + const char *v86; // [esp+34h] [ebp-504h] + unsigned int jj; // [esp+34h] [ebp-504h] + char *v89; // [esp+78h] [ebp-4C0h] BYREF + int v90; // [esp+7Ch] [ebp-4BCh] + char v91[16]; // [esp+80h] [ebp-4B8h] BYREF + int v92[2]; // [esp+90h] [ebp-4A8h] BYREF + char v93[16]; // [esp+98h] [ebp-4A0h] BYREF + int v94[2]; // [esp+A8h] [ebp-490h] BYREF + char v95; // [esp+B0h] [ebp-488h] BYREF + int v96; // [esp+C0h] [ebp-478h] BYREF + int v97; // [esp+C4h] [ebp-474h] + char v98[16]; // [esp+C8h] [ebp-470h] BYREF + int v99[2]; // [esp+D8h] [ebp-460h] BYREF + char v100[16]; // [esp+E0h] [ebp-458h] BYREF + int v101[2]; // [esp+F0h] [ebp-448h] BYREF + char v102; // [esp+F8h] [ebp-440h] BYREF + int v103[6]; // [esp+108h] [ebp-430h] BYREF + char Str[4]; // [esp+120h] [ebp-418h] BYREF + char v105[1020]; // [esp+124h] [ebp-414h] BYREF + + *(_DWORD *)Str = 0; + memset(v105, 0, sizeof(v105)); + if ( std::operator==("skip", (int)a2) ) + sprintf(Str, "type[%s]", *a2); + if ( std::operator==("bool", (int)a2) ) + { + v2 = *a2; + if ( *((_QWORD *)a2 + 6) ) + sprintf(Str, "(%d,%d)type[%s] value[%s]", a2[12], a2[13], v2, a2[15]); + else + sprintf(Str, "type[%s] value[%s]", v2, a2[15]); + } + if ( std::operator==((char *)off_551FEA, (int)a2) + || std::operator==("builtin_type", (int)a2) + || std::operator==("kw", (int)a2) + || std::operator==((char *)off_551FFE, (int)a2) + || std::operator==("punc", (int)a2) + || std::operator==("op", (int)a2) ) + { + v3 = *a2; + if ( *((_QWORD *)a2 + 6) ) + sprintf(Str, "(%d,%d)type[%s] value[%s]", a2[12], a2[13], v3, a2[15]); + else + sprintf(Str, "type[%s] value[%s]", v3, a2[15]); + } + if ( std::operator==((char *)off_551FFE, (int)a2) ) + { + v4 = a2[15]; + v5 = *a2; + if ( *((_QWORD *)a2 + 6) ) + sprintf(Str, "(%d,%d)type[%s] value[%s] flag[%d]", a2[12], a2[13], v5, v4, *((unsigned __int8 *)a2 + 56)); + else + sprintf(Str, "type[%s] value[%s] flag[%d]", v5, v4, *((unsigned __int8 *)a2 + 56)); + } + if ( std::operator==("op_self", (int)a2) ) + { + v97 = 0; + v96 = (int)v98; + v6 = a2[13]; + v7 = *a2; + v98[0] = 0; + if ( __PAIR64__((unsigned int)v6, a2[12]) ) + sprintf(Str, "(%d,%d)type[%s] op[%s]", a2[12], v6, v7, a2[39]); + else + sprintf(Str, "type[%s] op[%s]", v7, a2[39]); + std::string::operator=((unsigned int *)&v96, Str); + night::ns_node::debug_no_space[abi:cxx11](a2[48]); + std::operator+(v101, "\nobj=>", (unsigned int *)v99); + v8 = std::string::append(v101, "\nobj<="); + std::string::basic_string(v103, v8); + std::string::operator+=(v103); + goto LABEL_73; + } + if ( std::operator==((char *)off_552086, (int)a2) ) + { + v9 = a2[15]; + v10 = *a2; + v11 = a2[27]; + if ( *((_QWORD *)a2 + 6) ) + sprintf(Str, "(%d,%d)type[%s] value[%s%s%s]", a2[12], a2[13], v10, v11, v9, a2[27]); + else + sprintf(Str, "type[%s] value[%s%s%s]", v10, v11, v9, a2[27]); + } + if ( std::operator==((char *)off_5520BF, (int)a2) ) + { + v97 = 0; + v96 = (int)v98; + v12 = a2[13]; + v13 = *a2; + v98[0] = 0; + if ( __PAIR64__((unsigned int)v12, a2[12]) ) + sprintf(Str, "(%d,%d)type[%s]", a2[12], v12, v13); + else + sprintf(Str, "type[%s]", v13); + std::string::operator=((unsigned int *)&v96, Str); + night::ns_node::debug_no_space[abi:cxx11](a2[47]); + std::operator+(v101, " key[", (unsigned int *)v99); + v14 = std::string::append(v101, "]"); + std::string::basic_string(v103, v14); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + std::string::_M_dispose((void **)v99); + night::ns_node::debug_no_space[abi:cxx11](a2[48]); + std::operator+(v101, " value[", (unsigned int *)v99); + v15 = std::string::append(v101, "]"); + std::string::basic_string(v103, v15); + std::string::operator+=(v103); + goto LABEL_73; + } + if ( std::operator==("obj_self_op", (int)a2) ) + { + if ( a2[12] || a2[13] ) + { + night::ns_node::debug_no_space[abi:cxx11](a2[48]); + sprintf( + Str, + "(%d,%d)type[%s] after[%d] op[%s] obj[%s]", + a2[12], + a2[13], + *a2, + *((unsigned __int8 *)a2 + 200), + a2[39], + (const char *)v103[0]); + } + else + { + night::ns_node::debug_no_space[abi:cxx11](a2[48]); + sprintf( + Str, + "type[%s] after[%d] op[%s] obj[%s]", + *a2, + *((unsigned __int8 *)a2 + 200), + a2[39], + (const char *)v103[0]); + } + std::string::_M_dispose((void **)v103); + } + if ( std::operator==("obj_dot", (int)a2) || std::operator==("obj_property", (int)a2) ) + { + v93[0] = 0; + v92[0] = (int)v93; + v92[1] = 0; + v16 = a2[49]; + v17 = *((_DWORD *)v16 + 1); + if ( *((_QWORD *)a2 + 6) ) + sprintf(Str, "(%d,%d)type[%s] propertys[%zu]", a2[12], a2[13], *a2, (v17 - *(_DWORD *)v16) >> 2); + else + sprintf(Str, "type[%s] propertys[%zu]", *a2, (v17 - *(_DWORD *)v16) >> 2); + std::string::operator=((unsigned int *)v92, Str); + night::ns_node::debug_no_space[abi:cxx11](a2[48]); + std::operator+(v101, "\nobj =>", (unsigned int *)v99); + v18 = std::string::append(v101, "\nobj<="); + std::string::basic_string(v103, v18); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + std::string::_M_dispose((void **)v99); + std::string::operator+=("\npropertys =>"); + for ( i = 0; ; ++i ) + { + v19 = (char *)a2[49]; + if ( i >= (*((_DWORD *)v19 + 1) - *(_DWORD *)v19) >> 2 ) + break; + v20 = (_DWORD *)std::vector::at(v19, i); + night::ns_node::debug_no_space[abi:cxx11](*v20); + v94[0] = (int)&v95; + std::string::_M_construct(v94, 1u, i + 48); + std::operator+(&v96, "\n[", (unsigned int *)v94); + v21 = std::string::append(&v96, "] "); + std::string::basic_string(v99, v21); + std::operator+(v103, v99, (unsigned int *)v101); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v99); + std::string::_M_dispose((void **)&v96); + std::string::_M_dispose((void **)v94); + std::string::_M_dispose((void **)v101); + } + std::string::operator+=("\npropertys<="); + std::string::basic_string(this, v92); + v22 = v92; + goto LABEL_131; + } + if ( std::operator==("if", (int)a2) ) + { + v97 = 0; + v96 = (int)v98; + v23 = a2[13]; + v24 = a2[27]; + v98[0] = 0; + v25 = *a2; + if ( __PAIR64__((unsigned int)v23, a2[12]) ) + sprintf(Str, "(%d,%d)type[%s] punc[%s]", a2[12], v23, v25, v24); + else + sprintf(Str, "type[%s] punc[%s]", v25, v24); + std::string::operator=((unsigned int *)&v96, Str); + night::ns_node::debug_no_space[abi:cxx11](a2[51]); + std::operator+(v101, "\ncond =>", (unsigned int *)v99); + v26 = std::string::append(v101, "\ncond<="); + std::string::basic_string(v103, v26); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + std::string::_M_dispose((void **)v99); + night::ns_node::debug_no_space[abi:cxx11](a2[52]); + std::operator+(v101, "\nifd =>", (unsigned int *)v99); + v27 = std::string::append(v101, "\nifd<="); + std::string::basic_string(v103, v27); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + std::string::_M_dispose((void **)v99); + if ( !a2[53] ) + goto LABEL_130; + night::ns_node::debug_no_space[abi:cxx11](a2[53]); + std::operator+(v101, "\nelsed =>", (unsigned int *)v99); + v28 = std::string::append(v101, "\nelsed<="); + std::string::basic_string(v103, v28); + std::string::operator+=(v103); +LABEL_73: + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + std::string::_M_dispose((void **)v99); +LABEL_130: + std::string::basic_string(this, &v96); + v22 = &v96; + goto LABEL_131; + } + if ( std::operator==((char *)off_552210, (int)a2) ) + { + v98[0] = 0; + v96 = (int)v98; + v97 = 0; + v29 = a2[57]; + v30 = *((_DWORD *)v29 + 1); + if ( *((_QWORD *)a2 + 6) ) + sprintf(Str, "(%d,%d)type[%s] progs[%zu]", a2[12], a2[13], *a2, (v30 - *(_DWORD *)v29) >> 2); + else + sprintf(Str, "type[%s] progs[%zu]", *a2, (v30 - *(_DWORD *)v29) >> 2); + std::string::operator=((unsigned int *)&v96, Str); + std::string::operator+=("\nprogs =>"); + for ( j = 0; ; ++j ) + { + v31 = (char *)a2[57]; + if ( j >= (*((_DWORD *)v31 + 1) - *(_DWORD *)v31) >> 2 ) + break; + v32 = (_DWORD *)std::vector::at(v31, j); + night::ns_node::debug_no_space[abi:cxx11](*v32); + std::operator+(v103, "\n", (unsigned int *)v101); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + } + std::string::operator+=("\nprogs<="); + night::ns_node::debug_no_space[abi:cxx11](a2[54]); + std::operator+(v101, "\nbody =>", (unsigned int *)v99); + v33 = std::string::append(v101, "\nbody<="); + std::string::basic_string(v103, v33); + std::string::operator+=(v103); + goto LABEL_73; + } + if ( std::operator==("while", (int)a2) || std::operator==("do_while", (int)a2) ) + { + v97 = 0; + v96 = (int)v98; + v34 = a2[13]; + v35 = *a2; + v98[0] = 0; + if ( __PAIR64__((unsigned int)v34, a2[12]) ) + sprintf(Str, "(%d,%d)type[%s]", a2[12], v34, v35); + else + sprintf(Str, "type[%s]", v35); + std::string::operator=((unsigned int *)&v96, Str); + night::ns_node::debug_no_space[abi:cxx11](a2[51]); + std::operator+(v101, "\ncond =>", (unsigned int *)v99); + v36 = std::string::append(v101, "\ncond<="); + std::string::basic_string(v103, v36); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + std::string::_M_dispose((void **)v99); + night::ns_node::debug_no_space[abi:cxx11](a2[54]); + std::operator+(v101, "\nbody =>", (unsigned int *)v99); + v37 = std::string::append(v101, "\nbody<="); + std::string::basic_string(v103, v37); + std::string::operator+=(v103); + goto LABEL_73; + } + if ( std::operator==("switch", (int)a2) ) + { + v91[0] = 0; + v89 = v91; + v90 = 0; + v38 = a2[58]; + v39 = *((_DWORD *)v38 + 1); + if ( *((_QWORD *)a2 + 6) ) + sprintf(Str, "(%d,%d)type[%s] cases[%zu]", a2[12], a2[13], *a2, (v39 - *(_DWORD *)v38) >> 2); + else + sprintf(Str, "type[%s] cases[%zu]", *a2, (v39 - *(_DWORD *)v38) >> 2); + std::string::operator=((unsigned int *)&v89, Str); + night::ns_node::debug_no_space[abi:cxx11](a2[51]); + std::operator+(v101, "\ncond =>", (unsigned int *)v99); + v40 = std::string::append(v101, "\ncond<="); + std::string::basic_string(v103, v40); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + std::string::_M_dispose((void **)v99); + std::string::operator+=("\ncases=>\n"); + for ( k = 0; ; ++k ) + { + v41 = (char *)a2[58]; + if ( k >= (*((_DWORD *)v41 + 1) - *(_DWORD *)v41) >> 2 ) + break; + v42 = (_DWORD *)std::vector::at(v41, k); + night::ns_node::debug_no_space[abi:cxx11](*v42); + v92[0] = (int)v93; + std::string::_M_construct(v92, 1u, k + 48); + std::operator+(v94, "cases[", (unsigned int *)v92); + v43 = std::string::append(v94, "]=>"); + std::string::basic_string(&v96, v43); + std::operator+(v101, &v96, (unsigned int *)v99); + v44 = std::string::append(v101, "<=cases"); + std::string::basic_string(v103, v44); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + std::string::_M_dispose((void **)&v96); + std::string::_M_dispose((void **)v94); + std::string::_M_dispose((void **)v92); + std::string::_M_dispose((void **)v99); + for ( m = 0; ; ++m ) + { + v45 = std::vector>>::at(a2[59], k); + if ( m >= (*(_DWORD *)(*(_DWORD *)v45 + 4) - **(_DWORD **)v45) >> 2 ) + break; + v99[0] = (int)v100; + std::string::_M_construct(v99, 1u, m + 48); + v92[0] = (int)v93; + std::string::_M_construct(v92, 1u, k + 48); + std::operator+(v94, "\ncase_progs[", (unsigned int *)v92); + v46 = std::string::append(v94, ","); + std::string::basic_string(&v96, v46); + std::operator+(v101, &v96, (unsigned int *)v99); + v47 = std::string::append(v101, "]=>"); + std::string::basic_string(v103, v47); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + std::string::_M_dispose((void **)&v96); + std::string::_M_dispose((void **)v94); + std::string::_M_dispose((void **)v92); + std::string::_M_dispose((void **)v99); + v48 = (_DWORD **)std::vector>>::at(a2[59], k); + v49 = (_DWORD *)std::vector::at(*v48, m); + night::ns_node::debug_no_space[abi:cxx11](*v49); + v50 = std::string::append(v101, "<=case_progs\n"); + std::string::basic_string(v103, v50); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + } + } + std::string::operator+=("cases<="); + std::string::operator+=("\ndefault=>"); + for ( n = 0; ; ++n ) + { + v51 = (char *)a2[60]; + if ( n >= (*((_DWORD *)v51 + 1) - *(_DWORD *)v51) >> 2 ) + break; + v52 = (_DWORD *)std::vector::at(v51, n); + night::ns_node::debug_no_space[abi:cxx11](*v52); + std::operator+(v103, "\n", (unsigned int *)v101); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + } + std::string::operator+=("\ndefault<="); + } + else + { + if ( std::operator==("binary", (int)a2) + || std::operator==("assign", (int)a2) + || std::operator==("ternary", (int)a2) ) + { + v101[1] = 0; + v101[0] = (int)&v102; + v53 = a2[13]; + v54 = *a2; + v102 = 0; + if ( __PAIR64__((unsigned int)v53, a2[12]) ) + sprintf(Str, "(%d,%d)type[%s] op[%s]", a2[12], v53, v54, a2[39]); + else + sprintf(Str, "type[%s] op[%s]", v54, a2[39]); + std::string::operator=((unsigned int *)v101, Str); + std::string::operator+=("\nleft <="); + night::ns_node::debug_no_space[abi:cxx11](a2[45]); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::operator+=("\nright <="); + night::ns_node::debug_no_space[abi:cxx11](a2[46]); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::basic_string(this, v101); + v22 = v101; + goto LABEL_131; + } + if ( std::operator==("prog", (int)a2) + || std::operator==("prog_no_sem", (int)a2) + || std::operator==("prog_no_sem_require", (int)a2) + || std::operator==("obj_block", (int)a2) + || std::operator==("array", (int)a2) + || std::operator==("bracket", (int)a2) ) + { + v100[0] = 0; + v99[0] = (int)v100; + v99[1] = 0; + v55 = a2[57]; + v56 = *a2; + v57 = *((_DWORD *)v55 + 1); + if ( *((_QWORD *)a2 + 6) ) + sprintf(Str, "(%d,%d)type[%s] punc[%s] progs[%zu] =>", a2[12], a2[13], v56, a2[27], (v57 - *(_DWORD *)v55) >> 2); + else + sprintf(Str, "type[%s] punc[%s] progs[%zu] =>", v56, a2[27], (v57 - *(_DWORD *)v55) >> 2); + std::string::operator=((unsigned int *)v99, Str); + for ( ii = 0; ; ++ii ) + { + v58 = (char *)a2[57]; + if ( ii >= (*((_DWORD *)v58 + 1) - *(_DWORD *)v58) >> 2 ) + break; + v59 = (_DWORD *)std::vector::at(v58, ii); + night::ns_node::debug_no_space[abi:cxx11](*v59); + std::operator+(v103, "\n", (unsigned int *)v101); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + } + std::string::operator+=("\nprogs<="); + std::string::basic_string(this, v99); + v22 = v99; + goto LABEL_131; + } + if ( !std::operator==("call", (int)a2) ) + { + if ( !std::operator==("function", (int)a2) ) + { + std::string::basic_string(this, Str); + return this; + } + v98[0] = 0; + v96 = (int)v98; + v97 = 0; + v86 = a2[12]; + v69 = a2[61]; + v70 = a2[13]; + v71 = *a2; + v72 = *((_DWORD *)v69 + 1); + if ( v86 || v70 ) + sprintf(Str, "func (%d,%d)type[%s] name[%s] fargs[%zu] =>", v86, v70, v71, a2[33], (v72 - *(_DWORD *)v69) >> 2); + else + sprintf(Str, "func type[%s] name[%s] fargs[%zu] =>", v71, a2[33], (v72 - *(_DWORD *)v69) >> 2); + std::string::operator=((unsigned int *)&v96, Str); + for ( jj = 0; ; ++jj ) + { + v73 = (char *)a2[61]; + if ( jj >= (*((_DWORD *)v73 + 1) - *(_DWORD *)v73) >> 2 ) + break; + v74 = (_DWORD *)std::vector::at(v73, jj); + night::ns_node::debug_no_space[abi:cxx11](*v74); + std::operator+(v101, "\nfargs[]=>", (unsigned int *)v99); + v75 = std::string::append(v101, "<=[]fargs"); + std::string::basic_string(v103, v75); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + std::string::_M_dispose((void **)v99); + } + std::string::operator+=("\nfargs<="); + night::ns_node::debug_no_space[abi:cxx11](a2[54]); + std::operator+(v101, "\nbody=>", (unsigned int *)v99); + v76 = std::string::append(v101, "\nbody<="); + std::string::basic_string(v103, v76); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + std::string::_M_dispose((void **)v99); + std::string::operator+=("\nfunc<="); + goto LABEL_130; + } + v91[0] = 0; + v89 = v91; + v90 = 0; + v60 = a2[56]; + v61 = *((_DWORD *)v60 + 1); + if ( *((_QWORD *)a2 + 6) ) + sprintf(Str, "call (%d,%d)type[%s] argss[%zu] =>", a2[12], a2[13], *a2, (v61 - *(_DWORD *)v60) >> 2); + else + sprintf(Str, "call type[%s] argss[%zu] =>", *a2, (v61 - *(_DWORD *)v60) >> 2); + std::string::operator=((unsigned int *)&v89, Str); + night::ns_node::debug_no_space[abi:cxx11](a2[55]); + std::operator+(v101, "\nfunc=>", (unsigned int *)v99); + v62 = std::string::append(v101, "\nfunc<="); + std::string::basic_string(v103, v62); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + std::string::_M_dispose((void **)v99); + for ( kk = 0; kk < (*((_DWORD *)a2[56] + 1) - *(_DWORD *)a2[56]) >> 2; ++kk ) + { + for ( mm = 0; ; ++mm ) + { + v63 = std::vector>>::at(a2[56], kk); + if ( mm >= (*(_DWORD *)(*(_DWORD *)v63 + 4) - **(_DWORD **)v63) >> 2 ) + break; + v99[0] = (int)v100; + std::string::_M_construct(v99, 1u, mm + 48); + v92[0] = (int)v93; + std::string::_M_construct(v92, 1u, kk + 48); + std::operator+(v94, "\nargss[", (unsigned int *)v92); + v64 = std::string::append(v94, ","); + std::string::basic_string(&v96, v64); + std::operator+(v101, &v96, (unsigned int *)v99); + v65 = std::string::append(v101, "]=>"); + std::string::basic_string(v103, v65); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + std::string::_M_dispose((void **)&v96); + std::string::_M_dispose((void **)v94); + std::string::_M_dispose((void **)v92); + std::string::_M_dispose((void **)v99); + v66 = (_DWORD **)std::vector>>::at(a2[56], kk); + v67 = (_DWORD *)std::vector::at(*v66, mm); + night::ns_node::debug_no_space[abi:cxx11](*v67); + v68 = std::string::append(v101, "<="); + std::string::basic_string(v103, v68); + std::string::operator+=(v103); + std::string::_M_dispose((void **)v103); + std::string::_M_dispose((void **)v101); + } + } + std::string::operator+=("\ncall<="); + } + std::string::basic_string(this, &v89); + v22 = (int *)&v89; +LABEL_131: + std::string::_M_dispose((void **)v22); + return this; +} +// 40E4F2: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); +// 40E4F8: using guessed type _DWORD __stdcall std::string::operator+=(_DWORD); + +//----- (00474990) -------------------------------------------------------- +void __fastcall night::NSStream::~NSStream(void **a1) +{ + std::string::_M_dispose(a1 + 6); + std::string::_M_dispose(a1); +} + +//----- (004749B0) -------------------------------------------------------- +void __fastcall __gnu_cxx::__scoped_lock::~__scoped_lock(int *a1) +{ + _DWORD *exception; // eax + + if ( _CRT_MT ) + { + if ( __gthr_win32_mutex_unlock(*a1) ) + { + exception = __cxa_allocate_exception(4u); + *exception = &off_55F35C; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'__gnu_cxx::__concurrence_unlock_error, + (void (__cdecl *)(void *))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error); + } + } +} +// 53E1E4: using guessed type int _CRT_MT; +// 55B6F4: using guessed type int *`typeinfo for'__gnu_cxx::__concurrence_unlock_error; +// 55F35C: using guessed type void (__cdecl *off_55F35C)(__gnu_cxx::__concurrence_unlock_error *__hidden this); + +//----- (00474A70) -------------------------------------------------------- +int __fastcall __gnu_cxx::stdio_filebuf::fd(int a1) +{ + return std::__basic_file::fd((FILE **)(a1 + 40)); +} + +//----- (00474A80) -------------------------------------------------------- +int __fastcall __gnu_cxx::stdio_filebuf::file(int a1) +{ + return std::__basic_file::file(a1 + 40); +} + +//----- (00474AA0) -------------------------------------------------------- +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, FILE *a2, int a3, int a4) +{ + int v4; // eax + + std::filebuf::basic_filebuf((int)this); + *(_DWORD *)this = off_55F234; + std::__basic_file::sys_open(this + 40, a2, a3); + if ( std::__basic_file::is_open((_DWORD *)this + 10) ) + { + *((_DWORD *)this + 12) = a3; + *((_DWORD *)this + 17) = a4; + std::filebuf::_M_allocate_internal_buffer((int)this); + *(_WORD *)(this + 73) = 0; + v4 = *((_DWORD *)this + 16); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 1) = v4; + *((_DWORD *)this + 2) = v4; + *((_DWORD *)this + 3) = v4; + *((_DWORD *)this + 4) = 0; + *((_DWORD *)this + 6) = 0; + } +} +// 55F234: using guessed type int (*off_55F234[2])(); + +//----- (00474BA0) -------------------------------------------------------- +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, int FileHandle, int a3, int a4) +{ + int v4; // eax + + std::filebuf::basic_filebuf((int)this); + *(_DWORD *)this = off_55F234; + std::__basic_file::sys_open((FILE **)this + 10, FileHandle, a3); + if ( std::__basic_file::is_open((_DWORD *)this + 10) ) + { + *((_DWORD *)this + 12) = a3; + *((_DWORD *)this + 17) = a4; + std::filebuf::_M_allocate_internal_buffer((int)this); + *(_WORD *)(this + 73) = 0; + v4 = *((_DWORD *)this + 16); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 1) = v4; + *((_DWORD *)this + 2) = v4; + *((_DWORD *)this + 3) = v4; + *((_DWORD *)this + 4) = 0; + *((_DWORD *)this + 6) = 0; + } +} +// 55F234: using guessed type int (*off_55F234[2])(); + +//----- (00474CB0) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_filebuf::stdio_filebuf(_DWORD *a1) +{ + std::filebuf::basic_filebuf((int)a1); + *a1 = off_55F234; +} +// 55F234: using guessed type int (*off_55F234[2])(); + +//----- (00474CD0) -------------------------------------------------------- +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, FILE *a2, int a3, int a4) +{ + int v4; // eax + + std::filebuf::basic_filebuf((int)this); + *(_DWORD *)this = off_55F234; + std::__basic_file::sys_open(this + 40, a2, a3); + if ( std::__basic_file::is_open((_DWORD *)this + 10) ) + { + *((_DWORD *)this + 12) = a3; + *((_DWORD *)this + 17) = a4; + std::filebuf::_M_allocate_internal_buffer((int)this); + *(_WORD *)(this + 73) = 0; + v4 = *((_DWORD *)this + 16); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 1) = v4; + *((_DWORD *)this + 2) = v4; + *((_DWORD *)this + 3) = v4; + *((_DWORD *)this + 4) = 0; + *((_DWORD *)this + 6) = 0; + } +} +// 55F234: using guessed type int (*off_55F234[2])(); + +//----- (00474DD0) -------------------------------------------------------- +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, int FileHandle, int a3, int a4) +{ + int v4; // eax + + std::filebuf::basic_filebuf((int)this); + *(_DWORD *)this = off_55F234; + std::__basic_file::sys_open((FILE **)this + 10, FileHandle, a3); + if ( std::__basic_file::is_open((_DWORD *)this + 10) ) + { + *((_DWORD *)this + 12) = a3; + *((_DWORD *)this + 17) = a4; + std::filebuf::_M_allocate_internal_buffer((int)this); + *(_WORD *)(this + 73) = 0; + v4 = *((_DWORD *)this + 16); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 1) = v4; + *((_DWORD *)this + 2) = v4; + *((_DWORD *)this + 3) = v4; + *((_DWORD *)this + 4) = 0; + *((_DWORD *)this + 6) = 0; + } +} +// 55F234: using guessed type int (*off_55F234[2])(); + +//----- (00474EE0) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_filebuf::stdio_filebuf(_DWORD *a1) +{ + std::filebuf::basic_filebuf((int)a1); + *a1 = off_55F234; +} +// 55F234: using guessed type int (*off_55F234[2])(); + +//----- (00474F00) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_filebuf::~stdio_filebuf(struct _Unwind_Exception *a1) +{ + *(_DWORD *)a1 = off_5600A0; + std::filebuf::close(a1); + std::__basic_file::~__basic_file((int)a1 + 40); + *(_DWORD *)a1 = &off_560424; + std::locale::~locale((_DWORD **)a1 + 7); + operator delete(a1); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00474FB0) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_filebuf::~stdio_filebuf(struct _Unwind_Exception *a1) +{ + *(_DWORD *)a1 = off_5600A0; + std::filebuf::close(a1); + std::__basic_file::~__basic_file((int)a1 + 40); + *(_DWORD *)a1 = &off_560424; + std::locale::~locale((_DWORD **)a1 + 7); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00475050) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_filebuf::~stdio_filebuf(struct _Unwind_Exception *a1) +{ + *(_DWORD *)a1 = off_5600A0; + std::filebuf::close(a1); + std::__basic_file::~__basic_file((int)a1 + 40); + *(_DWORD *)a1 = &off_560424; + std::locale::~locale((_DWORD **)a1 + 7); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (004750F0) -------------------------------------------------------- +int __fastcall __gnu_cxx::stdio_filebuf::fd(int a1) +{ + return std::__basic_file::fd((FILE **)(a1 + 40)); +} + +//----- (00475100) -------------------------------------------------------- +int __fastcall __gnu_cxx::stdio_filebuf::file(int a1) +{ + return std::__basic_file::file(a1 + 40); +} + +//----- (00475120) -------------------------------------------------------- +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, FILE *a2, int a3, int a4) +{ + int v4; // eax + + std::wfilebuf::basic_filebuf((int)this); + *(_DWORD *)this = off_55F274; + std::__basic_file::sys_open(this + 40, a2, a3); + if ( std::__basic_file::is_open((_DWORD *)this + 10) ) + { + *((_DWORD *)this + 12) = a3; + *((_DWORD *)this + 17) = a4; + std::wfilebuf::_M_allocate_internal_buffer((int)this); + *(_WORD *)(this + 73) = 0; + v4 = *((_DWORD *)this + 16); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 1) = v4; + *((_DWORD *)this + 2) = v4; + *((_DWORD *)this + 3) = v4; + *((_DWORD *)this + 4) = 0; + *((_DWORD *)this + 6) = 0; + } +} +// 55F274: using guessed type int (*off_55F274[2])(); + +//----- (00475220) -------------------------------------------------------- +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, int FileHandle, int a3, int a4) +{ + int v4; // eax + + std::wfilebuf::basic_filebuf((int)this); + *(_DWORD *)this = off_55F274; + std::__basic_file::sys_open((FILE **)this + 10, FileHandle, a3); + if ( std::__basic_file::is_open((_DWORD *)this + 10) ) + { + *((_DWORD *)this + 12) = a3; + *((_DWORD *)this + 17) = a4; + std::wfilebuf::_M_allocate_internal_buffer((int)this); + *(_WORD *)(this + 73) = 0; + v4 = *((_DWORD *)this + 16); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 1) = v4; + *((_DWORD *)this + 2) = v4; + *((_DWORD *)this + 3) = v4; + *((_DWORD *)this + 4) = 0; + *((_DWORD *)this + 6) = 0; + } +} +// 55F274: using guessed type int (*off_55F274[2])(); + +//----- (00475330) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_filebuf::stdio_filebuf(_DWORD *a1) +{ + std::wfilebuf::basic_filebuf((int)a1); + *a1 = off_55F274; +} +// 55F274: using guessed type int (*off_55F274[2])(); + +//----- (00475350) -------------------------------------------------------- +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, FILE *a2, int a3, int a4) +{ + int v4; // eax + + std::wfilebuf::basic_filebuf((int)this); + *(_DWORD *)this = off_55F274; + std::__basic_file::sys_open(this + 40, a2, a3); + if ( std::__basic_file::is_open((_DWORD *)this + 10) ) + { + *((_DWORD *)this + 12) = a3; + *((_DWORD *)this + 17) = a4; + std::wfilebuf::_M_allocate_internal_buffer((int)this); + *(_WORD *)(this + 73) = 0; + v4 = *((_DWORD *)this + 16); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 1) = v4; + *((_DWORD *)this + 2) = v4; + *((_DWORD *)this + 3) = v4; + *((_DWORD *)this + 4) = 0; + *((_DWORD *)this + 6) = 0; + } +} +// 55F274: using guessed type int (*off_55F274[2])(); + +//----- (00475450) -------------------------------------------------------- +void __thiscall __gnu_cxx::stdio_filebuf::stdio_filebuf(char *this, int FileHandle, int a3, int a4) +{ + int v4; // eax + + std::wfilebuf::basic_filebuf((int)this); + *(_DWORD *)this = off_55F274; + std::__basic_file::sys_open((FILE **)this + 10, FileHandle, a3); + if ( std::__basic_file::is_open((_DWORD *)this + 10) ) + { + *((_DWORD *)this + 12) = a3; + *((_DWORD *)this + 17) = a4; + std::wfilebuf::_M_allocate_internal_buffer((int)this); + *(_WORD *)(this + 73) = 0; + v4 = *((_DWORD *)this + 16); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 1) = v4; + *((_DWORD *)this + 2) = v4; + *((_DWORD *)this + 3) = v4; + *((_DWORD *)this + 4) = 0; + *((_DWORD *)this + 6) = 0; + } +} +// 55F274: using guessed type int (*off_55F274[2])(); + +//----- (00475560) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_filebuf::stdio_filebuf(_DWORD *a1) +{ + std::wfilebuf::basic_filebuf((int)a1); + *a1 = off_55F274; +} +// 55F274: using guessed type int (*off_55F274[2])(); + +//----- (00475580) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_filebuf::~stdio_filebuf(struct _Unwind_Exception *a1) +{ + *(_DWORD *)a1 = off_5600E0; + std::wfilebuf::close(a1); + std::__basic_file::~__basic_file((int)a1 + 40); + *(_DWORD *)a1 = &off_560464; + std::locale::~locale((_DWORD **)a1 + 7); + operator delete(a1); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (00475630) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_filebuf::~stdio_filebuf(struct _Unwind_Exception *a1) +{ + *(_DWORD *)a1 = off_5600E0; + std::wfilebuf::close(a1); + std::__basic_file::~__basic_file((int)a1 + 40); + *(_DWORD *)a1 = &off_560464; + std::locale::~locale((_DWORD **)a1 + 7); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (004756D0) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_filebuf::~stdio_filebuf(struct _Unwind_Exception *a1) +{ + *(_DWORD *)a1 = off_5600E0; + std::wfilebuf::close(a1); + std::__basic_file::~__basic_file((int)a1 + 40); + *(_DWORD *)a1 = &off_560464; + std::locale::~locale((_DWORD **)a1 + 7); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (00475770) -------------------------------------------------------- +int __cdecl __gnu_cxx::__concat_size_t(char *a1, unsigned int a2, unsigned int a3) +{ + void *v4; // esp + void *v5; // esp + _BYTE *v6; // ebx + unsigned int v7; // eax + int v8; // esi + int v10; // [esp-10h] [ebp-48h] BYREF + _BYTE v11[28]; // [esp-4h] [ebp-3Ch] BYREF + int *v12; // [esp+18h] [ebp-20h] + _BYTE *v13; // [esp+1Ch] [ebp-1Ch] + + v4 = alloca(32); + v5 = alloca(32); + v12 = &v10; + v13 = v11; + v6 = v11; + do + { + *--v6 = byte_557D9D[a3 % 0xA]; + v7 = a3; + a3 /= 0xAu; + } + while ( v7 > 9 ); + v8 = v13 - v6; + if ( v13 - v6 > a2 ) + return -1; + memcpy(a1, (char *)v12 - v8 + 12, v13 - v6); + return v8; +} + +//----- (00475800) -------------------------------------------------------- +int __cdecl __gnu_cxx::__snprintf_lite(char *a1, unsigned int a2, const char *a3, char *a4) +{ + const char *Src; // edx + const char *v5; // esi + const char *v7; // edi + char *v8; // ebx + char v9; // al + char v10; // al + char *v11; // ebp + int v12; // eax + int result; // eax + char *v14; // ebp + char *v15; // ecx + char v16; // al + char *v17; // [esp+30h] [ebp+4h] + + Src = a1; + v5 = a3; + v7 = &a1[a2 - 1]; + v8 = a1; + v9 = *a3; + if ( !*a3 ) + { + result = 0; + goto LABEL_17; + } + if ( a1 >= v7 ) +LABEL_26: + __gnu_cxx::__throw_insufficient_space(Src, v8); + while ( 1 ) + { + if ( v9 != 37 ) + goto LABEL_4; + v10 = v5[1]; + if ( v10 == 115 ) + { + v14 = a4 + 4; + v15 = *(char **)a4; + v16 = *v15; + if ( *v15 ) + { + if ( v7 <= v8 ) + { + v7 = v8; +LABEL_24: + __gnu_cxx::__throw_insufficient_space(Src, v7); + } + while ( 1 ) + { + ++v15; + *v8++ = v16; + v16 = *v15; + if ( !*v15 ) + break; + if ( v7 == v8 ) + goto LABEL_24; + } + } + v5 += 2; + a4 = v14; + goto LABEL_6; + } + if ( v10 != 122 ) + { + if ( v10 == 37 ) + ++v5; + else +LABEL_4: + v10 = *v5; + *v8 = v10; + ++v5; + ++v8; +LABEL_6: + v9 = *v5; + if ( !*v5 ) + break; + goto LABEL_7; + } + if ( v5[2] != 117 ) + goto LABEL_4; + v11 = a4 + 4; + v17 = (char *)Src; + v12 = __gnu_cxx::__concat_size_t(v8, v7 - v8, *(_DWORD *)a4); + Src = v17; + if ( v12 <= 0 ) + goto LABEL_26; + v5 += 3; + v8 += v12; + a4 = v11; + v9 = *v5; + if ( !*v5 ) + break; +LABEL_7: + if ( v8 >= v7 ) + goto LABEL_26; + } + result = v8 - Src; +LABEL_17: + *v8 = 0; + return result; +} + +//----- (00475920) -------------------------------------------------------- +int __fastcall __gnu_cxx::stdio_sync_filebuf::file(int a1) +{ + return *(_DWORD *)(a1 + 32); +} + +//----- (00475930) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::swap(int this, int a2) +{ + int v3; // eax + int v4; // edx + int v5; // eax + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + int v10; // edx + int v11; // eax + int v12; // edx + int v13; // eax + int v14; // eax + int v15; // edx + int result; // eax + const std::locale *v17; // [esp+4h] [ebp-48h] + volatile signed __int32 **v18; // [esp+1Ch] [ebp-30h] + _DWORD *v19[8]; // [esp+2Ch] [ebp-20h] BYREF + + v3 = *(_DWORD *)(this + 4); + *(_DWORD *)(this + 4) = *(_DWORD *)(a2 + 4); + v4 = *(_DWORD *)(a2 + 8); + *(_DWORD *)(a2 + 4) = v3; + v5 = *(_DWORD *)(this + 8); + *(_DWORD *)(this + 8) = v4; + v6 = *(_DWORD *)(a2 + 12); + *(_DWORD *)(a2 + 8) = v5; + v7 = *(_DWORD *)(this + 12); + *(_DWORD *)(this + 12) = v6; + v8 = *(_DWORD *)(a2 + 16); + *(_DWORD *)(a2 + 12) = v7; + v9 = *(_DWORD *)(this + 16); + *(_DWORD *)(this + 16) = v8; + v10 = *(_DWORD *)(a2 + 20); + *(_DWORD *)(a2 + 16) = v9; + v11 = *(_DWORD *)(this + 20); + *(_DWORD *)(this + 20) = v10; + v12 = *(_DWORD *)(a2 + 24); + *(_DWORD *)(a2 + 20) = v11; + v13 = *(_DWORD *)(this + 24); + *(_DWORD *)(this + 24) = v12; + *(_DWORD *)(a2 + 24) = v13; + v18 = (volatile signed __int32 **)(this + 28); + std::locale::locale((volatile signed __int32 **)v19, (volatile signed __int32 **)(this + 28), v17); + std::locale::operator=(v18, (volatile signed __int32 **)(a2 + 28)); + std::locale::operator=((volatile signed __int32 **)(a2 + 28), (volatile signed __int32 **)v19); + std::locale::~locale(v19); + v14 = *(_DWORD *)(this + 32); + *(_DWORD *)(this + 32) = *(_DWORD *)(a2 + 32); + v15 = *(_DWORD *)(a2 + 36); + *(_DWORD *)(a2 + 32) = v14; + result = *(_DWORD *)(this + 36); + *(_DWORD *)(this + 36) = v15; + *(_DWORD *)(a2 + 36) = result; + return result; +} +// 475998: variable 'v17' is possibly undefined + +//----- (004759F0) -------------------------------------------------------- +int __fastcall __gnu_cxx::stdio_sync_filebuf::sync(int a1) +{ + return fflush(*(FILE **)(a1 + 32)); +} + +//----- (00475A10) -------------------------------------------------------- +int __fastcall __gnu_cxx::stdio_sync_filebuf::uflow(int a1) +{ + int result; // eax + + result = getc(*(FILE **)(a1 + 32)); + *(_DWORD *)(a1 + 36) = result; + return result; +} + +//----- (00475A30) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::xsgetn(int this, char *Buffer, size_t ElementCount) +{ + int result; // eax + int v5; // edx + + result = fread(Buffer, 1u, ElementCount, *(FILE **)(this + 32)); + v5 = -1; + if ( result > 0 ) + v5 = (unsigned __int8)Buffer[result - 1]; + *(_DWORD *)(this + 36) = v5; + return result; +} + +//----- (00475A80) -------------------------------------------------------- +size_t __thiscall __gnu_cxx::stdio_sync_filebuf::xsputn(FILE **this, void *Buffer, size_t ElementCount) +{ + return fwrite(Buffer, 1u, ElementCount, this[8]); +} + +//----- (00475AB0) -------------------------------------------------------- +_DWORD *__thiscall __gnu_cxx::stdio_sync_filebuf::seekoff(_DWORD *this, int a2, fpos_t a3, int a4, int a5) +{ + int v6; // ecx + fpos_t v8; // rax + + *this = -1; + this[1] = -1; + this[2] = 0; + v6 = 0; + if ( a4 ) + v6 = (a4 != 1) + 1; + if ( !fseeko64(*(FILE **)(a2 + 32), a3, v6) ) + { + v8 = ftello64((FILE *)*(_DWORD *)(a2 + 32)); + this[2] = 0; + *(_QWORD *)this = v8; + } + return this; +} + +//----- (00475B40) -------------------------------------------------------- +_DWORD *__thiscall __gnu_cxx::stdio_sync_filebuf::seekpos( + _DWORD *this, + FILE **a2, + fpos_t a3, + int a4, + int a5, + int a6) +{ + _DWORD *(__thiscall *file)(_DWORD *, int, fpos_t, int, int); // edi + fpos_t v9; // rax + + file = (_DWORD *(__thiscall *)(_DWORD *, int, fpos_t, int, int))(*a2)->_file; + if ( file == __gnu_cxx::stdio_sync_filebuf::seekoff ) + { + *this = -1; + this[1] = -1; + this[2] = 0; + if ( !fseeko64(a2[8], a3, 0) ) + { + v9 = ftello64(a2[8]); + this[2] = 0; + *(_QWORD *)this = v9; + } + return this; + } + else + { + ((void (__thiscall *)(_DWORD *, FILE **, _DWORD, _DWORD, _DWORD, int))file)(this, a2, a3, HIDWORD(a3), 0, a6); + return this; + } +} + +//----- (00475C20) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::overflow(FILE **this, int Character) +{ + if ( Character == -1 ) + return -(fflush(this[8]) != 0); + else + return putc(Character, this[8]); +} + +//----- (00475C60) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::pbackfail(int this, int a2) +{ + int result; // eax + + result = a2; + if ( a2 != -1 || (result = *(_DWORD *)(this + 36), result != -1) ) + result = ungetc(result, *(FILE **)(this + 32)); + *(_DWORD *)(this + 36) = -1; + return result; +} + +//----- (00475CA0) -------------------------------------------------------- +int __fastcall __gnu_cxx::stdio_sync_filebuf::underflow(int a1) +{ + int v2; // eax + + v2 = getc(*(FILE **)(a1 + 32)); + return ungetc(v2, *(FILE **)(a1 + 32)); +} + +//----- (00475CD0) -------------------------------------------------------- +void __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(_DWORD *this, std::locale *a2) +{ + int v3; // eax + int v4; // eax + const std::locale *v5; // [esp+8h] [ebp-58h] + + std::streambuf::basic_streambuf(this, a2, v5); + v3 = *((_DWORD *)a2 + 8); + *this = &off_55F2B4; + *((_DWORD *)a2 + 8) = 0; + this[8] = v3; + v4 = *((_DWORD *)a2 + 9); + *((_DWORD *)a2 + 9) = -1; + this[9] = v4; +} +// 475D05: variable 'v5' is possibly undefined +// 55F2B4: using guessed type int (*off_55F2B4)(); + +//----- (00475D40) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(_DWORD *this, int a2) +{ + _DWORD *v3; // ecx + int result; // eax + + v3 = this + 7; + *(v3 - 7) = &off_560424; + *(v3 - 6) = 0; + *(v3 - 5) = 0; + *(v3 - 4) = 0; + *(v3 - 3) = 0; + *(v3 - 2) = 0; + *(v3 - 1) = 0; + std::locale::locale(v3); + result = a2; + *this = &off_55F2B4; + this[9] = -1; + this[8] = a2; + return result; +} +// 55F2B4: using guessed type int (*off_55F2B4)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00475DA0) -------------------------------------------------------- +void __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(_DWORD *this, std::locale *a2) +{ + int v3; // eax + int v4; // eax + const std::locale *v5; // [esp+8h] [ebp-58h] + + std::streambuf::basic_streambuf(this, a2, v5); + v3 = *((_DWORD *)a2 + 8); + *this = &off_55F2B4; + *((_DWORD *)a2 + 8) = 0; + this[8] = v3; + v4 = *((_DWORD *)a2 + 9); + *((_DWORD *)a2 + 9) = -1; + this[9] = v4; +} +// 475DD5: variable 'v5' is possibly undefined +// 55F2B4: using guessed type int (*off_55F2B4)(); + +//----- (00475E10) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(_DWORD *this, int a2) +{ + _DWORD *v3; // ecx + int result; // eax + + v3 = this + 7; + *(v3 - 7) = &off_560424; + *(v3 - 6) = 0; + *(v3 - 5) = 0; + *(v3 - 4) = 0; + *(v3 - 3) = 0; + *(v3 - 2) = 0; + *(v3 - 1) = 0; + std::locale::locale(v3); + result = a2; + *this = &off_55F2B4; + this[9] = -1; + this[8] = a2; + return result; +} +// 55F2B4: using guessed type int (*off_55F2B4)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00475E70) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_sync_filebuf::~stdio_sync_filebuf(char *Block) +{ + _DWORD **v2; // ecx + + v2 = (_DWORD **)(Block + 28); + *(v2 - 7) = &off_560424; + std::locale::~locale(v2); + operator delete(Block); +} +// 560424: using guessed type int (*off_560424)(); + +//----- (00475EA0) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_sync_filebuf::~stdio_sync_filebuf(int a1) +{ + *(_DWORD *)a1 = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 28)); +} +// 560424: using guessed type int (*off_560424)(); + +//----- (00475EB0) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::operator=(int this, int a2) +{ + int v3; // eax + int v4; // eax + + std::streambuf::operator=((volatile signed __int32 **)this, a2); + v3 = *(_DWORD *)(a2 + 32); + *(_DWORD *)(a2 + 32) = 0; + *(_DWORD *)(this + 32) = v3; + v4 = *(_DWORD *)(a2 + 36); + *(_DWORD *)(a2 + 36) = -1; + *(_DWORD *)(this + 36) = v4; + return this; +} + +//----- (00475F20) -------------------------------------------------------- +int __fastcall __gnu_cxx::stdio_sync_filebuf::file(int a1) +{ + return *(_DWORD *)(a1 + 32); +} + +//----- (00475F30) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::swap(int this, int a2) +{ + int v3; // eax + int v4; // edx + int v5; // eax + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + int v10; // edx + int v11; // eax + int v12; // edx + int v13; // eax + int v14; // eax + __int16 v15; // dx + int result; // eax + const std::locale *v17; // [esp+4h] [ebp-48h] + volatile signed __int32 **v18; // [esp+1Ch] [ebp-30h] + _DWORD *v19[8]; // [esp+2Ch] [ebp-20h] BYREF + + v3 = *(_DWORD *)(this + 4); + *(_DWORD *)(this + 4) = *(_DWORD *)(a2 + 4); + v4 = *(_DWORD *)(a2 + 8); + *(_DWORD *)(a2 + 4) = v3; + v5 = *(_DWORD *)(this + 8); + *(_DWORD *)(this + 8) = v4; + v6 = *(_DWORD *)(a2 + 12); + *(_DWORD *)(a2 + 8) = v5; + v7 = *(_DWORD *)(this + 12); + *(_DWORD *)(this + 12) = v6; + v8 = *(_DWORD *)(a2 + 16); + *(_DWORD *)(a2 + 12) = v7; + v9 = *(_DWORD *)(this + 16); + *(_DWORD *)(this + 16) = v8; + v10 = *(_DWORD *)(a2 + 20); + *(_DWORD *)(a2 + 16) = v9; + v11 = *(_DWORD *)(this + 20); + *(_DWORD *)(this + 20) = v10; + v12 = *(_DWORD *)(a2 + 24); + *(_DWORD *)(a2 + 20) = v11; + v13 = *(_DWORD *)(this + 24); + *(_DWORD *)(this + 24) = v12; + *(_DWORD *)(a2 + 24) = v13; + v18 = (volatile signed __int32 **)(this + 28); + std::locale::locale((volatile signed __int32 **)v19, (volatile signed __int32 **)(this + 28), v17); + std::locale::operator=(v18, (volatile signed __int32 **)(a2 + 28)); + std::locale::operator=((volatile signed __int32 **)(a2 + 28), (volatile signed __int32 **)v19); + std::locale::~locale(v19); + v14 = *(_DWORD *)(this + 32); + *(_DWORD *)(this + 32) = *(_DWORD *)(a2 + 32); + v15 = *(_WORD *)(a2 + 36); + *(_DWORD *)(a2 + 32) = v14; + result = *(unsigned __int16 *)(this + 36); + *(_WORD *)(this + 36) = v15; + *(_WORD *)(a2 + 36) = result; + return result; +} +// 475F98: variable 'v17' is possibly undefined + +//----- (00475FF0) -------------------------------------------------------- +int __fastcall __gnu_cxx::stdio_sync_filebuf::sync(int a1) +{ + return fflush(*(FILE **)(a1 + 32)); +} + +//----- (00476010) -------------------------------------------------------- +wint_t __fastcall __gnu_cxx::stdio_sync_filebuf::uflow(int a1) +{ + wint_t result; // ax + + result = getwc(*(FILE **)(a1 + 32)); + *(_WORD *)(a1 + 36) = result; + return result; +} + +//----- (00476030) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::xsgetn(int this, int a2, int a3) +{ + int v4; // edi + wint_t v5; // ax + + v4 = 0; + if ( a3 ) + { + while ( 1 ) + { + v5 = getwc(*(FILE **)(this + 32)); + if ( v5 == 0xFFFF ) + break; + *(_WORD *)(a2 + 2 * v4++) = v5; + if ( a3 == v4 ) + goto LABEL_7; + } + if ( !v4 ) + goto LABEL_6; +LABEL_7: + *(_WORD *)(this + 36) = *(_WORD *)(a2 + 2 * v4 - 2); + return v4; + } + else + { +LABEL_6: + *(_WORD *)(this + 36) = -1; + return 0; + } +} + +//----- (004760B0) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::xsputn(FILE **this, int a2, int a3) +{ + int i; // ebx + + if ( !a3 ) + return 0; + for ( i = 0; i != a3; ++i ) + { + if ( putwc(*(_WORD *)(a2 + 2 * i), this[8]) == 0xFFFF ) + break; + } + return i; +} + +//----- (00476100) -------------------------------------------------------- +_DWORD *__thiscall __gnu_cxx::stdio_sync_filebuf::seekoff(_DWORD *this, int a2, fpos_t a3, int a4, int a5) +{ + int v6; // ecx + fpos_t v8; // rax + + *this = -1; + this[1] = -1; + this[2] = 0; + v6 = 0; + if ( a4 ) + v6 = (a4 != 1) + 1; + if ( !fseeko64(*(FILE **)(a2 + 32), a3, v6) ) + { + v8 = ftello64((FILE *)*(_DWORD *)(a2 + 32)); + this[2] = 0; + *(_QWORD *)this = v8; + } + return this; +} + +//----- (00476190) -------------------------------------------------------- +_DWORD *__thiscall __gnu_cxx::stdio_sync_filebuf::seekpos( + _DWORD *this, + FILE **a2, + fpos_t a3, + int a4, + int a5, + int a6) +{ + _DWORD *(__thiscall *file)(_DWORD *, int, fpos_t, int, int); // edi + fpos_t v9; // rax + + file = (_DWORD *(__thiscall *)(_DWORD *, int, fpos_t, int, int))(*a2)->_file; + if ( file == __gnu_cxx::stdio_sync_filebuf::seekoff ) + { + *this = -1; + this[1] = -1; + this[2] = 0; + if ( !fseeko64(a2[8], a3, 0) ) + { + v9 = ftello64(a2[8]); + this[2] = 0; + *(_QWORD *)this = v9; + } + return this; + } + else + { + ((void (__thiscall *)(_DWORD *, FILE **, _DWORD, _DWORD, _DWORD, int))file)(this, a2, a3, HIDWORD(a3), 0, a6); + return this; + } +} + +//----- (00476270) -------------------------------------------------------- +__int16 __thiscall __gnu_cxx::stdio_sync_filebuf::overflow(FILE **this, wchar_t Character) +{ + int v2; // eax + + if ( Character == 0xFFFF ) + return -(fflush(this[8]) != 0); + else + LOWORD(v2) = putwc(Character, this[8]); + return v2; +} + +//----- (004762B0) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::pbackfail(int this, wint_t Character) +{ + int result; // eax + + if ( Character == 0xFFFF ) + { + result = *(unsigned __int16 *)(this + 36); + if ( (_WORD)result != 0xFFFF ) + LOWORD(result) = ungetwc(*(_WORD *)(this + 36), *(FILE **)(this + 32)); + *(_WORD *)(this + 36) = -1; + } + else + { + LOWORD(result) = ungetwc(Character, *(FILE **)(this + 32)); + *(_WORD *)(this + 36) = -1; + } + return result; +} + +//----- (00476320) -------------------------------------------------------- +wint_t __fastcall __gnu_cxx::stdio_sync_filebuf::underflow(int a1) +{ + wint_t v2; // ax + + v2 = getwc(*(FILE **)(a1 + 32)); + return ungetwc(v2, *(FILE **)(a1 + 32)); +} + +//----- (00476350) -------------------------------------------------------- +void __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(int this, std::locale *a2) +{ + int v3; // eax + const std::locale *v4; // [esp+8h] [ebp-58h] + + std::wstreambuf::basic_streambuf((_DWORD *)this, a2, v4); + v3 = *((_DWORD *)a2 + 8); + *(_DWORD *)this = &off_55F2F4; + *((_DWORD *)a2 + 8) = 0; + *(_DWORD *)(this + 32) = v3; + *(_WORD *)(this + 36) = *((_WORD *)a2 + 18); + *((_WORD *)a2 + 18) = -1; +} +// 476385: variable 'v4' is possibly undefined +// 55F2F4: using guessed type int (*off_55F2F4)(); + +//----- (004763D0) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(_DWORD *this, int a2) +{ + _DWORD *v3; // ecx + int result; // eax + + v3 = this + 7; + *(v3 - 7) = &off_560464; + *(v3 - 6) = 0; + *(v3 - 5) = 0; + *(v3 - 4) = 0; + *(v3 - 3) = 0; + *(v3 - 2) = 0; + *(v3 - 1) = 0; + std::locale::locale(v3); + *this = &off_55F2F4; + this[8] = a2; + result = -1; + *((_WORD *)this + 18) = -1; + return result; +} +// 55F2F4: using guessed type int (*off_55F2F4)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (00476430) -------------------------------------------------------- +void __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(int this, std::locale *a2) +{ + int v3; // eax + const std::locale *v4; // [esp+8h] [ebp-58h] + + std::wstreambuf::basic_streambuf((_DWORD *)this, a2, v4); + v3 = *((_DWORD *)a2 + 8); + *(_DWORD *)this = &off_55F2F4; + *((_DWORD *)a2 + 8) = 0; + *(_DWORD *)(this + 32) = v3; + *(_WORD *)(this + 36) = *((_WORD *)a2 + 18); + *((_WORD *)a2 + 18) = -1; +} +// 476465: variable 'v4' is possibly undefined +// 55F2F4: using guessed type int (*off_55F2F4)(); + +//----- (004764B0) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::stdio_sync_filebuf(_DWORD *this, int a2) +{ + _DWORD *v3; // ecx + int result; // eax + + v3 = this + 7; + *(v3 - 7) = &off_560464; + *(v3 - 6) = 0; + *(v3 - 5) = 0; + *(v3 - 4) = 0; + *(v3 - 3) = 0; + *(v3 - 2) = 0; + *(v3 - 1) = 0; + std::locale::locale(v3); + *this = &off_55F2F4; + this[8] = a2; + result = -1; + *((_WORD *)this + 18) = -1; + return result; +} +// 55F2F4: using guessed type int (*off_55F2F4)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (00476510) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_sync_filebuf::~stdio_sync_filebuf(char *Block) +{ + _DWORD **v2; // ecx + + v2 = (_DWORD **)(Block + 28); + *(v2 - 7) = &off_560464; + std::locale::~locale(v2); + operator delete(Block); +} +// 560464: using guessed type int (*off_560464)(); + +//----- (00476540) -------------------------------------------------------- +void __fastcall __gnu_cxx::stdio_sync_filebuf::~stdio_sync_filebuf(int a1) +{ + *(_DWORD *)a1 = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 28)); +} +// 560464: using guessed type int (*off_560464)(); + +//----- (00476550) -------------------------------------------------------- +int __thiscall __gnu_cxx::stdio_sync_filebuf::operator=(int this, int a2) +{ + int v3; // eax + + std::wstreambuf::operator=((volatile signed __int32 **)this, a2); + v3 = *(_DWORD *)(a2 + 32); + *(_DWORD *)(a2 + 32) = 0; + *(_DWORD *)(this + 32) = v3; + LOWORD(v3) = *(_WORD *)(a2 + 36); + *(_WORD *)(a2 + 36) = -1; + *(_WORD *)(this + 36) = v3; + return this; +} + +//----- (004765C0) -------------------------------------------------------- +void __fastcall __gnu_cxx::recursive_init_error::recursive_init_error(_DWORD *a1) +{ + *a1 = &off_55F334; +} +// 55F334: using guessed type void (__cdecl *off_55F334)(__gnu_cxx::recursive_init_error *__hidden this); + +//----- (004765D0) -------------------------------------------------------- +void __fastcall __gnu_cxx::recursive_init_error::~recursive_init_error(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_55F334; + std::exception::~exception(Block); + operator delete(a1); +} +// 4765DC: variable 'Block' is possibly undefined +// 55F334: using guessed type void (__cdecl *off_55F334)(__gnu_cxx::recursive_init_error *__hidden this); + +//----- (00476600) -------------------------------------------------------- +void __cdecl __gnu_cxx::recursive_init_error::~recursive_init_error(std::exception *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55F334; + std::exception::~exception(a1); +} +// 476600: variable 'v1' is possibly undefined +// 55F334: using guessed type void (__cdecl *off_55F334)(__gnu_cxx::recursive_init_error *__hidden this); + +//----- (00476610) -------------------------------------------------------- +void __fastcall __gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_55F348; + std::exception::~exception(Block); + operator delete(a1); +} +// 47661C: variable 'Block' is possibly undefined +// 55F348: using guessed type void (__cdecl *off_55F348)(__gnu_cxx::__concurrence_lock_error *__hidden this); + +//----- (00476640) -------------------------------------------------------- +void __cdecl __gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error(std::exception *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55F348; + std::exception::~exception(a1); +} +// 476640: variable 'v1' is possibly undefined +// 55F348: using guessed type void (__cdecl *off_55F348)(__gnu_cxx::__concurrence_lock_error *__hidden this); + +//----- (00476650) -------------------------------------------------------- +void __fastcall __gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_55F35C; + std::exception::~exception(Block); + operator delete(a1); +} +// 47665C: variable 'Block' is possibly undefined +// 55F35C: using guessed type void (__cdecl *off_55F35C)(__gnu_cxx::__concurrence_unlock_error *__hidden this); + +//----- (00476680) -------------------------------------------------------- +void __cdecl __gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error(std::exception *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55F35C; + std::exception::~exception(a1); +} +// 476680: variable 'v1' is possibly undefined +// 55F35C: using guessed type void (__cdecl *off_55F35C)(__gnu_cxx::__concurrence_unlock_error *__hidden this); + +//----- (00476690) -------------------------------------------------------- +void __cdecl __noreturn __gnu_cxx::__throw_insufficient_space(const char *Src, const char *a2) +{ + void *v2; // esp + void *v3; // esp + int v4[38]; // [esp+10h] [ebp-98h] BYREF + + HIBYTE(v4[5]) = unk_557D34; + strcpy((char *)&v4[31], " "); + strcpy( + (char *)&v4[6], + "ot enough space for format expansion (Please submit full bug report at https://gcc.gnu.org/bugs/):\n "); + v2 = alloca(a2 - Src + 117); + v3 = alloca(a2 - Src + 117); + qmemcpy(v4, (char *)&v4[5] + 3, 0x68u); + memcpy(&v4[26], Src, a2 - Src); + *((_BYTE *)&v4[26] + v4[3]) = 0; + std::__throw_logic_error((std::logic_error *)v4); +} + +//----- (00476720) -------------------------------------------------------- +void __noreturn __gnu_cxx::__verbose_terminate_handler(void) +{ + struct type_info *v0; // eax + _BYTE *v1; // edx + bool v2; // zf + FILE *v3; // eax + FILE *v4; // eax + FILE *v5; // eax + FILE *v6; // eax + FILE *v7; // eax + FILE *v8; // eax + FILE *(__cdecl *v9)(unsigned int); // [esp+10h] [ebp-5Ch] + char *Block; // [esp+14h] [ebp-58h] + char *Buffer; // [esp+18h] [ebp-54h] + int status[4]; // [esp+5Ch] [ebp-10h] BYREF + + if ( !__gnu_cxx::__verbose_terminate_handler(void)::terminating ) + { + __gnu_cxx::__verbose_terminate_handler(void)::terminating = 1; + v0 = __cxa_current_exception_type(); + if ( v0 ) + { + v1 = (_BYTE *)*((_DWORD *)v0 + 1); + v2 = *v1 == 42; + status[0] = -1; + Buffer = &v1[v2]; + Block = __cxa_demangle(Buffer, 0, 0, status); + v9 = ___acrt_iob_func; + v3 = ___acrt_iob_func(2u); + fwrite("terminate called after throwing an instance of '", 1u, 0x30u, v3); + if ( status[0] ) + { + v4 = v9(2u); + fputs(Buffer, v4); + } + else + { + v6 = v9(2u); + fputs(Block, v6); + } + v5 = v9(2u); + fwrite("'\n", 1u, 2u, v5); + if ( !status[0] ) + free(Block); + __cxa_rethrow(); + } + v7 = ___acrt_iob_func(2u); + fwrite("terminate called without an active exception\n", 1u, 0x2Du, v7); + abort(); + } + v8 = ___acrt_iob_func(2u); + fwrite("terminate called recursively\n", 1u, 0x1Du, v8); + abort(); +} +// 53FCF8: using guessed type char __gnu_cxx::__verbose_terminate_handler(void)::terminating; +// 476720: using guessed type int status[4]; + +//----- (004769F0) -------------------------------------------------------- +void __noreturn __gnu_cxx::__throw_concurrence_lock_error(void) +{ + _DWORD *exception; // eax + + exception = __cxa_allocate_exception(4u); + *exception = &off_55F348; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'__gnu_cxx::__concurrence_lock_error, + (void (__cdecl *)(void *))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error); +} +// 55B6E8: using guessed type int *`typeinfo for'__gnu_cxx::__concurrence_lock_error; +// 55F348: using guessed type void (__cdecl *off_55F348)(__gnu_cxx::__concurrence_lock_error *__hidden this); + +//----- (00476A20) -------------------------------------------------------- +void __noreturn __gnu_cxx::__throw_concurrence_unlock_error(void) +{ + _DWORD *exception; // eax + + exception = __cxa_allocate_exception(4u); + *exception = &off_55F35C; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'__gnu_cxx::__concurrence_unlock_error, + (void (__cdecl *)(void *))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error); +} +// 55B6F4: using guessed type int *`typeinfo for'__gnu_cxx::__concurrence_unlock_error; +// 55F35C: using guessed type void (__cdecl *off_55F35C)(__gnu_cxx::__concurrence_unlock_error *__hidden this); + +//----- (00476A50) -------------------------------------------------------- +void __gnu_cxx::__freeres(void) +{ + if ( Block ) + { + free(Block); + Block = 0; + } +} + +//----- (00476A80) -------------------------------------------------------- +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2) +{ + return *a1 == *a2; +} + +//----- (00476A90) -------------------------------------------------------- +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2) +{ + return *a1 == *a2; +} + +//----- (00476AA0) -------------------------------------------------------- +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2) +{ + return *a1 == *a2; +} + +//----- (00476AB0) -------------------------------------------------------- +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2) +{ + return *a1 == *a2; +} + +//----- (00476AC0) -------------------------------------------------------- +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2) +{ + return *a1 == *a2; +} + +//----- (00476AD0) -------------------------------------------------------- +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2) +{ + return *a1 == *a2; +} + +//----- (00476AE0) -------------------------------------------------------- +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2) +{ + return *a1 == *a2; +} + +//----- (00476AF0) -------------------------------------------------------- +bool __cdecl __gnu_cxx::operator==(_DWORD *a1, _DWORD *a2) +{ + return *a1 == *a2; +} + +//----- (00476B00) -------------------------------------------------------- +char __userpurge __cxxabiv1::__class_type_info::__do_catch@( + _DWORD *a1@, + __cxxabiv1::__class_type_info *this, + const std::type_info *a3, + void **a4, + unsigned int a5) +{ + char result; // al + + result = std::type_info::operator==(a1, (int)this); + if ( !result && (unsigned int)a4 <= 3 ) + return (*(int (__thiscall **)(__cxxabiv1::__class_type_info *, _DWORD *, const std::type_info *))(*(_DWORD *)this + 20))( + this, + a1, + a3); + return result; +} + +//----- (00476B40) -------------------------------------------------------- +bool __thiscall __cxxabiv1::__class_type_info::__do_upcast(_DWORD *this, int a2, int a3, _DWORD *a4) +{ + bool result; // al + + result = std::type_info::operator==(this, a2); + if ( result ) + { + a4[3] = 8; + a4[1] = 6; + *a4 = a3; + } + return result; +} + +//----- (00476B80) -------------------------------------------------------- +int __userpurge __cxxabiv1::__class_type_info::__do_upcast@( + int *a1@, + __cxxabiv1::__class_type_info *this, + const __class_type_info *a3, + void **a4) +{ + int v4; // eax + int v5; // edx + int v6; // edx + int v8; // [esp+10h] [ebp-1Ch] BYREF + int v9; // [esp+14h] [ebp-18h] + int v10; // [esp+18h] [ebp-14h] + int v11; // [esp+1Ch] [ebp-10h] + + v4 = *a1; + v8 = 0; + v5 = *(_DWORD *)a3; + v9 = 0; + v10 = 16; + v11 = 0; + (*(void (__thiscall **)(int *, __cxxabiv1::__class_type_info *, int, int *))(v4 + 24))(a1, this, v5, &v8); + v6 = 0; + if ( (v9 & 6) == 6 ) + { + v6 = 1; + *(_DWORD *)a3 = v8; + } + return v6; +} + +//----- (00476BF0) -------------------------------------------------------- +int __thiscall __cxxabiv1::__class_type_info::__do_dyncast( + _DWORD *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + _DWORD *a8) +{ + bool v9; // al + _DWORD *v10; // [esp+1Ch] [ebp-10h] + + if ( a5 == a7 && (v10 = this, v9 = std::type_info::operator==(this, a6), this = v10, v9) ) + { + a8[2] = a3; + return 0; + } + else + { + if ( std::type_info::operator==(this, a4) ) + { + *a8 = a5; + a8[3] = 1; + a8[1] = a3; + } + return 0; + } +} + +//----- (00476C60) -------------------------------------------------------- +int __stdcall __cxxabiv1::__class_type_info::__do_find_public_src( + __cxxabiv1::__class_type_info *this, + const __cxxabiv1::__class_type_info *a2, + const void *a3, + const __cxxabiv1::__class_type_info *a4, + const void *a5) +{ + return 5 * (a4 == a2) + 1; +} + +//----- (00476C80) -------------------------------------------------------- +char __thiscall __cxxabiv1::__si_class_type_info::__do_upcast(int this, int a2, int a3, _DWORD *a4) +{ + char result; // al + + result = __cxxabiv1::__class_type_info::__do_upcast((_DWORD *)this, a2, a3, a4); + if ( !result ) + return (*(int (__thiscall **)(_DWORD, int, int, _DWORD *))(**(_DWORD **)(this + 8) + 24))( + *(_DWORD *)(this + 8), + a2, + a3, + a4); + return result; +} + +//----- (00476CE0) -------------------------------------------------------- +int __thiscall __cxxabiv1::__si_class_type_info::__do_dyncast( + _DWORD *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + _DWORD *a8) +{ + bool v8; // al + _DWORD *v9; // ecx + int v10; // edx + bool v12; // al + + v8 = std::type_info::operator==(this, a4); + v9 = this; + v10 = a7; + if ( v8 ) + { + *a8 = a5; + a8[1] = a3; + if ( a2 < 0 ) + { + if ( a2 == -2 ) + a8[3] = 1; + } + else + { + a8[3] = 5 * (a7 == a2 + a5) + 1; + } + } + else + { + if ( a5 != a7 ) + return (*(int (__thiscall **)(_DWORD, int, int, int, int, int, int, _DWORD *))(*(_DWORD *)v9[2] + 28))( + v9[2], + a2, + a3, + a4, + a5, + a6, + v10, + a8); + v12 = std::type_info::operator==(this, a6); + v9 = this; + v10 = a7; + if ( !v12 ) + return (*(int (__thiscall **)(_DWORD, int, int, int, int, int, int, _DWORD *))(*(_DWORD *)v9[2] + 28))( + v9[2], + a2, + a3, + a4, + a5, + a6, + v10, + a8); + a8[2] = a3; + } + return 0; +} + +//----- (00476DE0) -------------------------------------------------------- +int __userpurge __cxxabiv1::__si_class_type_info::__do_find_public_src@( + int a1@, + __cxxabiv1::__si_class_type_info *this, + const __cxxabiv1::__class_type_info *a3, + const void *a4, + const __cxxabiv1::__class_type_info *a5, + const void *a6) +{ + __cxxabiv1::__si_class_type_info *v7; // edx + bool v9; // al + + v7 = this; + if ( a5 == a3 && (v9 = std::type_info::operator==((_DWORD *)a1, (int)a4), v7 = this, v9) ) + return 6; + else + return (*(int (__thiscall **)(_DWORD, __cxxabiv1::__si_class_type_info *, const __cxxabiv1::__class_type_info *, const void *, const __cxxabiv1::__class_type_info *))(**(_DWORD **)(a1 + 8) + 32))( + *(_DWORD *)(a1 + 8), + v7, + a3, + a4, + a5); +} + +//----- (00476E50) -------------------------------------------------------- +int __thiscall __cxxabiv1::__vmi_class_type_info::__do_upcast(_DWORD *this, int a2, _DWORD *a3, _DWORD *a4) +{ + int v5; // eax + int v6; // edx + int v7; // eax + int v8; // ebx + bool v9; // cf + int v10; // eax + int v11; // esi + char *v12; // edx + int v13; // eax + int v14; // eax + int v15; // ecx + int v16; // eax + _DWORD *v17; // ecx + int result; // eax + bool v19; // al + char v20; // [esp+13h] [ebp-39h] + unsigned __int8 v21; // [esp+13h] [ebp-39h] + int v22; // [esp+18h] [ebp-34h] + int v23; // [esp+20h] [ebp-2Ch] BYREF + int v24; // [esp+24h] [ebp-28h] + int v25; // [esp+28h] [ebp-24h] + _DWORD *v26; // [esp+2Ch] [ebp-20h] + + LOBYTE(v5) = __cxxabiv1::__class_type_info::__do_upcast(this, a2, (int)a3, a4); + v6 = v5; + if ( (_BYTE)v5 ) + return v6; + v22 = a4[2]; + if ( (v22 & 0x10) != 0 ) + v22 = this[2]; + v7 = this[3]; + v8 = v7 - 1; + if ( !v7 ) + { +LABEL_34: + LOBYTE(v6) = a4[1] != 0; + return v6; + } + while ( 1 ) + { + while ( 1 ) + { + v23 = 0; + v24 = 0; + v25 = v22; + v10 = this[2 * v8 + 5]; + v26 = 0; + v11 = v10 & 2; + v6 = v10 & 1; + v20 = v10 & 1; + if ( !(v11 | v22 & 1) ) + goto LABEL_9; + v12 = 0; + if ( a3 ) + { + v13 = v10 >> 8; + if ( v20 ) + v13 = *(_DWORD *)(*a3 + v13); + v12 = (char *)a3 + v13; + } + v6 = (*(int (__thiscall **)(_DWORD, int, char *, int *))(*(_DWORD *)this[2 * v8 + 4] + 24))( + this[2 * v8 + 4], + a2, + v12, + &v23); + if ( !(_BYTE)v6 ) + goto LABEL_9; + if ( v26 == (_DWORD *)8 && v20 ) + v26 = (_DWORD *)this[2 * v8 + 4]; + if ( !v11 && v24 > 3 ) + v24 &= ~2u; + v14 = a4[3]; + if ( v14 ) + break; + v15 = v25; + *a4 = v23; + v16 = v24; + a4[2] = v15; + v17 = v26; + a4[1] = v16; + a4[3] = v17; + if ( v16 <= 3 ) + return v6; + if ( (v16 & 2) != 0 ) + { + if ( (this[2] & 1) == 0 ) + return v6; + goto LABEL_9; + } + if ( (v16 & 1) == 0 || (this[2] & 2) == 0 ) + return v6; + v9 = v8-- == 0; + if ( v9 ) + goto LABEL_34; + } + if ( *a4 != v23 ) + break; + if ( !*a4 ) + { + if ( v26 == (_DWORD *)8 || v14 == 8 || (v21 = v6, v19 = std::type_info::operator==(v26, a4[3]), v6 = v21, !v19) ) + { + a4[1] = 2; + return v6; + } + } + a4[1] |= v24; +LABEL_9: + v9 = v8-- == 0; + if ( v9 ) + goto LABEL_34; + } + *a4 = 0; + result = v6; + a4[1] = 2; + return result; +} +// 476E78: variable 'v5' is possibly undefined + +//----- (00477080) -------------------------------------------------------- +int __thiscall __cxxabiv1::__vmi_class_type_info::__do_dyncast( + _DWORD *this, + int a2, + int a3, + int a4, + _DWORD *a5, + int a6, + _DWORD *a7, + int *a8) +{ + unsigned int v8; // eax + int v9; // eax + int v10; // edi + int v11; // esi + int v12; // ebx + int v13; // edx + int v14; // eax + bool v15; // cf + int v16; // eax + int v17; // ecx + int v18; // eax + int v19; // edx + unsigned __int8 v20; // si + int v21; // eax + int v22; // edx + int v24; // eax + int v25; // eax + int v27; // [esp+40h] [ebp-58h] + int v28; // [esp+44h] [ebp-54h] + char v29; // [esp+44h] [ebp-54h] + unsigned int v30; // [esp+48h] [ebp-50h] + int v31; // [esp+4Ch] [ebp-4Ch] + int v32; // [esp+54h] [ebp-44h] + unsigned __int8 v33; // [esp+59h] [ebp-3Fh] + char v34; // [esp+5Ah] [ebp-3Eh] + char v35; // [esp+5Bh] [ebp-3Dh] + int v36; // [esp+68h] [ebp-30h] BYREF + int v37; // [esp+6Ch] [ebp-2Ch] + int v38; // [esp+70h] [ebp-28h] + int v39; // [esp+74h] [ebp-24h] + int v40; // [esp+78h] [ebp-20h] + + if ( (a8[4] & 0x10) != 0 ) + a8[4] = this[2]; + if ( a5 == a7 && std::type_info::operator==(this, a6) ) + { + a8[2] = a3; + return 0; + } + if ( std::type_info::operator==(this, a4) ) + { + *a8 = (int)a5; + a8[1] = a3; + if ( a2 >= 0 ) + { + a8[3] = 5 * (a7 == (_DWORD *)((char *)a5 + a2)) + 1; + return 0; + } + v33 = 0; + if ( a2 == -2 ) + a8[3] = 1; + return v33; + } + v8 = 0; + v33 = 0; + v35 = 0; + v34 = 1; + if ( a2 >= 0 ) + v8 = (unsigned int)a7 - a2; + v30 = v8; + while ( 1 ) + { + v9 = this[3]; + v10 = v9 - 1; + if ( v9 ) + break; +LABEL_59: + v35 &= v34; + if ( !v35 ) + return v33; + v34 = 0; + } + while ( 1 ) + { + while ( 1 ) + { + v16 = a8[4]; + v36 = 0; + v37 = 0; + v17 = a3; + v29 = v16; + v40 = v16; + v38 = 0; + v18 = this[2 * v10 + 5]; + v39 = 0; + v19 = v18 >> 8; + if ( (v18 & 1) != 0 ) + { + v17 = a3 | 1; + v19 = *(_DWORD *)(*a5 + v19); + } + if ( !v30 || v34 != v30 < (unsigned int)a5 + v19 ) + break; + v35 = 1; +LABEL_30: + v15 = v10-- == 0; + if ( v15 ) + goto LABEL_59; + } + if ( (v18 & 2) != 0 ) + break; + if ( a2 != -2 || (v29 & 3) != 0 ) + { + v17 &= ~2u; + break; + } + v15 = v10-- == 0; + if ( v15 ) + goto LABEL_59; + } + v20 = (*(int (__thiscall **)(_DWORD, int, int, int, int, int, _DWORD *, int *))(*(_DWORD *)this[2 * v10 + 4] + 28))( + this[2 * v10 + 4], + a2, + v17, + a4, + (int)a5 + v19, + a6, + a7, + &v36); + v12 = v39; + v21 = v38 | a8[2]; + v28 = v21; + v22 = v39; + a8[2] = v21; + if ( (v22 & 0xFFFFFFFB) == 2 ) + { + v25 = v36; + a8[3] = v12; + *a8 = v25; + a8[1] = v37; + return v20; + } + v13 = v36; + v27 = *a8; + if ( v33 ) + { + if ( !v27 ) + { + if ( !v36 ) + goto LABEL_29; + v11 = a8[3]; + if ( v21 <= 3 ) + goto LABEL_43; + goto LABEL_15; + } + } + else if ( !*a8 ) + { + v24 = v37; + *a8 = v36; + a8[1] = v24; + if ( v13 && v28 ) + { + v33 = v20; + if ( (this[2] & 1) == 0 ) + return v33; + } + else + { + v33 = v20; + } + goto LABEL_29; + } + if ( v36 == v27 ) + { + a8[1] |= v37; + goto LABEL_29; + } + if ( !v36 && !v20 ) + { +LABEL_29: + if ( v28 == 4 ) + return v33; + goto LABEL_30; + } + v11 = a8[3]; + if ( v21 <= 3 ) + goto LABEL_43; +LABEL_15: + if ( (v21 & 1) == 0 || (a8[4] & 2) == 0 ) + { + if ( !v11 ) + v11 = 1; + if ( !v12 ) + v12 = 1; + v31 = v11; + v32 = v12; + goto LABEL_22; + } +LABEL_43: + v31 = v11; + v32 = v12; + if ( v11 > 0 ) + goto LABEL_44; + if ( v12 <= 3 || (v12 & 1) != 0 && (this[2] & 2) != 0 ) + { + if ( a2 < 0 ) + { + if ( a2 != -2 ) + { + v11 = (*(int (__fastcall **)(int, int, int, int, int, _DWORD *))(*(_DWORD *)a4 + 32))(a4, v36, a2, v27, a6, a7); + v31 = v11; +LABEL_44: + if ( v12 <= 0 ) + { + if ( v11 > 3 && ((v11 & 1) == 0 || (this[2] & 2) == 0) ) + { + if ( (v11 ^ 1) > 3 ) + { +LABEL_80: + v12 = v11; + v14 = v31 & 2; + goto LABEL_26; + } +LABEL_55: + v28 = a8[2]; +LABEL_56: + *a8 = 0; + a8[3] = 1; + v33 = 1; + goto LABEL_29; + } + v13 = v36; + if ( a2 < 0 ) + { + if ( a2 != -2 ) + { + v12 = (*(int (__thiscall **)(int, int, int, int, _DWORD *))(*(_DWORD *)a4 + 32))(a4, a2, v36, a6, a7); + v32 = v12; + if ( (v12 ^ v31) <= 3 ) + goto LABEL_51; +LABEL_23: + v13 = v36; + if ( v12 <= 3 ) + { + v12 = v11; + v14 = v11 & 2; + goto LABEL_26; + } + goto LABEL_24; + } +LABEL_79: + if ( (v31 ^ 1) > 3 ) + goto LABEL_80; + goto LABEL_55; + } + if ( a7 != (_DWORD *)(v36 + a2) ) + goto LABEL_79; + if ( (v11 ^ 6) <= 3 ) + { + v32 = 6; +LABEL_51: + if ( (v31 & v32) > 3 ) + { + *a8 = 0; + a8[3] = 2; + return 1; + } + goto LABEL_55; + } +LABEL_99: + v14 = 2; + v12 = 6; + goto LABEL_25; + } +LABEL_22: + if ( (v12 ^ v31) <= 3 ) + goto LABEL_51; + goto LABEL_23; + } + if ( v12 <= 0 ) + { +LABEL_78: + v31 = 1; + v11 = 1; + goto LABEL_79; + } + } + else + { + if ( a7 == (_DWORD *)(a2 + v27) ) + { + v31 = 6; + v11 = 6; + if ( v12 <= 0 ) + goto LABEL_80; + goto LABEL_22; + } + if ( v12 <= 0 ) + { + if ( a7 == (_DWORD *)(v36 + a2) ) + goto LABEL_99; + goto LABEL_78; + } + } + v11 = 1; + if ( (v12 ^ 1) <= 3 ) + goto LABEL_56; + goto LABEL_23; + } + if ( (v12 ^ 1) <= 3 ) + goto LABEL_56; +LABEL_24: + v14 = v12 & 2; +LABEL_25: + *a8 = v13; + v33 = 0; + a8[1] = v37; +LABEL_26: + a8[3] = v12; + if ( !v14 && (v12 & 1) != 0 ) + { + v28 = a8[2]; + goto LABEL_29; + } + return 0; +} + +//----- (00477730) -------------------------------------------------------- +int __userpurge __cxxabiv1::__vmi_class_type_info::__do_find_public_src@( + _DWORD *a1@, + __cxxabiv1::__vmi_class_type_info *this, + const __cxxabiv1::__class_type_info *a3, + const void *a4, + const __cxxabiv1::__class_type_info *a5, + const void *a6) +{ + int v7; // eax + int v8; // ebx + int v9; // edx + int v10; // eax + int result; // eax + bool v13; // dl + char v14; // [esp+1Fh] [ebp-1Dh] + + if ( a3 != a5 || (v13 = std::type_info::operator==(a1, (int)a4), result = 6, !v13) ) + { + v7 = a1[3]; + v8 = v7 - 1; + if ( !v7 ) + return 1; + while ( 1 ) + { + v9 = a1[2 * v8 + 5]; + if ( (v9 & 2) != 0 ) + { + v10 = v9 >> 8; + v14 = v9 & 1; + if ( (v9 & 1) != 0 ) + { + if ( this == (__cxxabiv1::__vmi_class_type_info *)-3 ) + goto LABEL_8; + v10 = *(_DWORD *)(*(_DWORD *)a3 + v10); + } + result = (*(int (__thiscall **)(_DWORD, __cxxabiv1::__vmi_class_type_info *, int, const void *, const __cxxabiv1::__class_type_info *))(*(_DWORD *)a1[2 * v8 + 4] + 32))( + a1[2 * v8 + 4], + this, + (int)a3 + v10, + a4, + a5); + if ( result > 3 ) + { + if ( v14 ) + return result | 1; + return result; + } + } +LABEL_8: + if ( v8-- == 0 ) + return 1; + } + } + return result; +} + +//----- (00477810) -------------------------------------------------------- +const char *`anonymous namespace'::io_error_category::name() +{ + return "iostream"; +} + +//----- (00477820) -------------------------------------------------------- +int __thiscall `anonymous namespace'::io_error_category::message[abi:cxx11](int this, int a2, int a3) +{ + *(_DWORD *)(this + 4) = 0; + *(_DWORD *)this = this + 8; + *(_BYTE *)(this + 8) = 0; + if ( a3 == 1 ) + std::string::_M_replace((unsigned int *)this, 0, 0, "iostream error", 0xEu); + else + std::string::_M_replace((unsigned int *)this, 0, 0, "Unknown error", 0xDu); + return this; +} + +//----- (00477910) -------------------------------------------------------- +_anonymous_namespace_::system_error_category *__stdcall `anonymous namespace'::system_error_category::default_error_condition( + _anonymous_namespace_::system_error_category *this, + int a2) +{ + return this; +} + +//----- (00477970) -------------------------------------------------------- +const char *`anonymous namespace'::system_error_category::name() +{ + return "system"; +} + +//----- (00477980) -------------------------------------------------------- +const char *`anonymous namespace'::generic_error_category::name() +{ + return "generic"; +} + +//----- (00477990) -------------------------------------------------------- +_DWORD *__thiscall `anonymous namespace'::system_error_category::message[abi:cxx11]( + _DWORD *this, + int a2, + int ErrorMessage) +{ + void *v4; // edi + char *v5; // eax + char *Src; // esi + size_t v7; // eax + size_t Size; // ebp + void *v10; // eax + size_t v11[8]; // [esp+1Ch] [ebp-20h] BYREF + + v4 = this + 2; + v5 = strerror(ErrorMessage); + *this = v4; + if ( !v5 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + Src = v5; + v7 = strlen(v5); + v11[0] = v7; + Size = v7; + if ( v7 > 0xF ) + { + v10 = std::string::_M_create(v11, 0); + *this = v10; + v4 = v10; + this[2] = v11[0]; + goto LABEL_9; + } + if ( v7 != 1 ) + { + if ( !v7 ) + goto LABEL_5; +LABEL_9: + memcpy(v4, Src, Size); + v7 = v11[0]; + v4 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Src; +LABEL_5: + this[1] = v7; + *((_BYTE *)v4 + v7) = 0; + return this; +} +// 477990: using guessed type size_t var_20[8]; + +//----- (00477A40) -------------------------------------------------------- +int WXML::EXPRLib::NonTerminal::GetClass() +{ + return 2; +} + +//----- (00477A48) -------------------------------------------------------- +int WXML::EXPRLib::EPS::GetClass() +{ + return 4; +} + +//----- (00477A50) -------------------------------------------------------- +int WXML::EXPRLib::Action::GetClass() +{ + return 3; +} + +//----- (00477A58) -------------------------------------------------------- +int WXML::EXPRLib::Terminal::GetClass() +{ + return 1; +} + +//----- (00477A60) -------------------------------------------------------- +const char *__gnu_cxx::__concurrence_lock_error::what() +{ + return "__gnu_cxx::__concurrence_lock_error"; +} + +//----- (00477A70) -------------------------------------------------------- +const char *__gnu_cxx::__concurrence_unlock_error::what() +{ + return "__gnu_cxx::__concurrence_unlock_error"; +} + +//----- (00477A80) -------------------------------------------------------- +int __thiscall std::wstring::_M_disjunct(unsigned int *this, unsigned int a2) +{ + unsigned int v2; // eax + int v3; // edx + + v2 = *this; + v3 = 1; + if ( *this <= a2 ) + { + v3 = *(_DWORD *)(v2 - 12); + LOBYTE(v3) = v2 + 2 * v3 < a2; + } + return v3; +} + +//----- (00477AB0) -------------------------------------------------------- +int __thiscall std::wstring::find_last_of(_DWORD *this, wchar_t *String, int a3) +{ + int v4; // eax + + v4 = wcslen(String); + return std::wstring::find_last_of(this, String, a3, v4); +} + +//----- (00477AF0) -------------------------------------------------------- +int __thiscall std::wstring::find_last_of(_DWORD *this, _WORD *a2, unsigned int a3, int a4) +{ + unsigned int v4; // ebx + int v5; // eax + unsigned int v6; // eax + _WORD *v7; // eax + int v8; // edx + + v4 = a3; + v5 = *(_DWORD *)(*this - 12); + if ( !v5 || !a4 ) + return -1; + v6 = v5 - 1; + if ( v6 <= a3 ) + v4 = v6; + while ( !a2 ) + { +LABEL_9: + if ( v4-- == 0 ) + return v4; + } + v7 = a2; + v8 = a4; + while ( *(_WORD *)(*this + 2 * v4) != *v7 ) + { + ++v7; + if ( !--v8 ) + goto LABEL_9; + } + return v4; +} + +//----- (00477B60) -------------------------------------------------------- +int __thiscall std::wstring::find_last_of(_DWORD *this, _WORD **a2, unsigned int a3) +{ + return std::wstring::find_last_of(this, *a2, a3, *((_DWORD *)*a2 - 3)); +} + +//----- (00477B90) -------------------------------------------------------- +int __thiscall std::wstring::find_last_of(_DWORD *this, __int16 a2, unsigned int a3) +{ + int result; // eax + int v4; // ebx + + result = -1; + v4 = *(_DWORD *)(*this - 12); + if ( v4 ) + { + result = v4 - 1; + if ( a3 <= v4 - 1 ) + result = a3; + do + { + if ( a2 == *(_WORD *)(*this + 2 * result) ) + break; + } + while ( result-- != 0 ); + } + return result; +} + +//----- (00477BD0) -------------------------------------------------------- +int __thiscall std::wstring::find_first_of(_DWORD *this, wchar_t *String, int a3) +{ + int v4; // eax + + v4 = wcslen(String); + return std::wstring::find_first_of(this, String, a3, v4); +} + +//----- (00477C10) -------------------------------------------------------- +int __thiscall std::wstring::find_first_of(_DWORD *this, _WORD *a2, unsigned int a3, int a4) +{ + unsigned int v4; // ebx + unsigned int v5; // ebp + int v6; // edx + _WORD *v7; // eax + + if ( !a4 ) + return -1; + v4 = a3; + v5 = *(_DWORD *)(*this - 12); + if ( v5 <= a3 ) + return -1; + while ( !a2 ) + { +LABEL_7: + if ( v5 <= ++v4 ) + return -1; + } + v6 = a4; + v7 = a2; + while ( *(_WORD *)(*this + 2 * v4) != *v7 ) + { + ++v7; + if ( !--v6 ) + goto LABEL_7; + } + return v4; +} + +//----- (00477C70) -------------------------------------------------------- +int __thiscall std::wstring::find_first_of(_DWORD *this, _WORD **a2, unsigned int a3) +{ + return std::wstring::find_first_of(this, *a2, a3, *((_DWORD *)*a2 - 3)); +} + +//----- (00477CA0) -------------------------------------------------------- +int __thiscall std::wstring::find_first_of(int *this, __int16 a2, unsigned int a3) +{ + return std::wstring::find(this, a2, a3); +} + +//----- (00477CB0) -------------------------------------------------------- +void *__thiscall std::wstring::get_allocator(void *this, int a2) +{ + return this; +} + +//----- (00477CC0) -------------------------------------------------------- +unsigned int __thiscall std::wstring::_M_check_length(_DWORD *this, int a2, unsigned int a3, std::length_error *a4) +{ + unsigned int result; // eax + + result = a2 + 536870910 - *(_DWORD *)(*this - 12); + if ( result < a3 ) + std::__throw_length_error(a4); + return result; +} + +//----- (00477CF0) -------------------------------------------------------- +int __thiscall std::wstring::find_last_not_of(_DWORD *this, wchar_t *String, int a3) +{ + int v4; // eax + + v4 = wcslen(String); + return std::wstring::find_last_not_of(this, String, a3, v4); +} + +//----- (00477D30) -------------------------------------------------------- +int __thiscall std::wstring::find_last_not_of(_DWORD *this, _WORD *a2, unsigned int a3, int a4) +{ + int v4; // ebx + int v5; // eax + unsigned int v6; // eax + _WORD *v7; // eax + int v8; // edx + + v4 = -1; + v5 = *(_DWORD *)(*this - 12); + if ( v5 ) + { + v6 = v5 - 1; + v4 = a3; + if ( v6 <= a3 ) + v4 = v6; + while ( a4 && a2 ) + { + v7 = a2; + v8 = a4; + while ( *(_WORD *)(*this + 2 * v4) != *v7 ) + { + ++v7; + if ( !--v8 ) + return v4; + } + if ( v4-- == 0 ) + return v4; + } + } + return v4; +} + +//----- (00477DA0) -------------------------------------------------------- +int __thiscall std::wstring::find_last_not_of(_DWORD *this, _WORD **a2, unsigned int a3) +{ + return std::wstring::find_last_not_of(this, *a2, a3, *((_DWORD *)*a2 - 3)); +} + +//----- (00477DD0) -------------------------------------------------------- +int __thiscall std::wstring::find_last_not_of(_DWORD *this, __int16 a2, unsigned int a3) +{ + int result; // eax + int v4; // ebx + + result = -1; + v4 = *(_DWORD *)(*this - 12); + if ( v4 ) + { + result = v4 - 1; + if ( v4 - 1 > a3 ) + result = a3; + do + { + if ( *(_WORD *)(*this + 2 * result) != a2 ) + break; + } + while ( result-- != 0 ); + } + return result; +} + +//----- (00477E10) -------------------------------------------------------- +int __thiscall std::wstring::find_first_not_of(int *this, wchar_t *String, unsigned int a3) +{ + unsigned int v4; // ebx + size_t v5; // eax + int v6; // esi + unsigned int v7; // edi + size_t v8; // ebp + __int16 v9; // cx + wchar_t *v10; // eax + size_t v11; // edx + + v4 = a3; + v5 = wcslen(String); + v6 = *this; + v7 = *(_DWORD *)(v6 - 12); + if ( a3 < v7 ) + { + v8 = v5; + if ( !v5 ) + return v4; + v9 = *(_WORD *)(v6 + 2 * a3); + if ( !String ) + return v4; + while ( 1 ) + { + v10 = String; + v11 = v8; + while ( v9 != *v10 ) + { + ++v10; + if ( !--v11 ) + return v4; + } + if ( ++v4 == v7 ) + break; + v9 = *(_WORD *)(v6 + 2 * v4); + } + } + return -1; +} + +//----- (00477EA0) -------------------------------------------------------- +int __thiscall std::wstring::find_first_not_of(int *this, _WORD *a2, unsigned int a3, int a4) +{ + int v4; // esi + unsigned int v5; // ebx + unsigned int v6; // edi + __int16 v7; // cx + _WORD *v8; // eax + int v9; // edx + + v4 = *this; + v5 = a3; + v6 = *(_DWORD *)(*this - 12); + if ( a3 < v6 ) + { + if ( !a4 ) + return v5; + v7 = *(_WORD *)(v4 + 2 * a3); + if ( !a2 ) + return v5; + while ( 1 ) + { + v8 = a2; + v9 = a4; + while ( v7 != *v8 ) + { + ++v8; + if ( !--v9 ) + return v5; + } + if ( v6 == ++v5 ) + break; + v7 = *(_WORD *)(v4 + 2 * v5); + } + } + return -1; +} + +//----- (00477F20) -------------------------------------------------------- +int __thiscall std::wstring::find_first_not_of(_DWORD *this, _DWORD *a2, unsigned int a3) +{ + unsigned int v3; // ebx + unsigned int v4; // esi + int v5; // edx + _WORD *i; // eax + + v3 = a3; + v4 = *(_DWORD *)(*this - 12); + if ( a3 < v4 ) + { + if ( !*(_DWORD *)(*a2 - 12) ) + return v3; + do + { + v5 = *(_DWORD *)(*a2 - 12); + for ( i = (_WORD *)*a2; *(_WORD *)(*this + 2 * v3) != *i; ++i ) + { + if ( !--v5 ) + return v3; + } + ++v3; + } + while ( v3 != v4 ); + } + return -1; +} + +//----- (00477F90) -------------------------------------------------------- +int __thiscall std::wstring::find_first_not_of(int *this, __int16 a2, unsigned int a3) +{ + int v3; // edx + int result; // eax + unsigned int v5; // ecx + + v3 = *this; + result = a3; + v5 = *(_DWORD *)(*this - 12); + if ( a3 >= v5 ) + return -1; + while ( *(_WORD *)(v3 + 2 * result) == a2 ) + { + if ( ++result == v5 ) + return -1; + } + return result; +} + +//----- (00477FD0) -------------------------------------------------------- +int __thiscall std::wstring::at(int *this, unsigned int a2) +{ + int v2; // edx + unsigned int v3; // ecx + + v2 = *this; + v3 = *(_DWORD *)(*this - 12); + if ( a2 >= v3 ) + std::__throw_out_of_range_fmt("basic_string::at: __n (which is %zu) >= this->size() (which is %zu)", a2, v3); + return v2 + 2 * a2; +} + +//----- (00478000) -------------------------------------------------------- +int __fastcall std::wstring::end(_DWORD *a1) +{ + return *a1 + 2 * *(_DWORD *)(*a1 - 12); +} + +//----- (00478010) -------------------------------------------------------- +int __fastcall std::wstring::_Rep::_M_is_leaked(int a1) +{ + return *(_DWORD *)(a1 + 8) >> 31; +} + +//----- (00478020) -------------------------------------------------------- +bool __fastcall std::wstring::_Rep::_M_is_shared(int a1) +{ + return *(_DWORD *)(a1 + 8) > 0; +} + +//----- (00478030) -------------------------------------------------------- +int __fastcall std::wstring::back(_DWORD *a1) +{ + return *a1 + 2 * *(_DWORD *)(*a1 - 12) - 2; +} + +//----- (00478040) -------------------------------------------------------- +int __fastcall std::wstring::cend(_DWORD *a1) +{ + return *a1 + 2 * *(_DWORD *)(*a1 - 12); +} + +//----- (00478050) -------------------------------------------------------- +int __thiscall std::wstring::copy(int *this, _WORD *a2, unsigned int a3, unsigned int a4) +{ + int v4; // ecx + unsigned int v5; // ebx + unsigned int v6; // ebx + _WORD *Src; // eax + + v4 = *this; + v5 = *(_DWORD *)(v4 - 12); + if ( a4 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::copy", + a4, + *(_DWORD *)(v4 - 12)); + v6 = v5 - a4; + if ( v6 > a3 ) + v6 = a3; + if ( !v6 ) + return v6; + Src = (_WORD *)(v4 + 2 * a4); + if ( v6 != 1 ) + { + memcpy(a2, Src, 2 * v6); + return v6; + } + *a2 = *Src; + return 1; +} + +//----- (004780D0) -------------------------------------------------------- +int __fastcall std::wstring::data(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (004780E0) -------------------------------------------------------- +int __thiscall std::wstring::find(int *this, wchar_t *String, int a3) +{ + unsigned int v4; // eax + + v4 = wcslen(String); + return std::wstring::find(this, String, a3, v4); +} + +//----- (00478120) -------------------------------------------------------- +int __thiscall std::wstring::find(int *this, _WORD *a2, unsigned int a3, unsigned int a4) +{ + unsigned int v4; // edx + _WORD *v5; // eax + int v6; // edi + unsigned int v7; // edx + unsigned int v8; // edx + int v10; // edx + __int16 v11; // bx + unsigned int v12; // edx + int v13; // ecx + int v14; // [esp+4h] [ebp-14h] + + v14 = *this; + v4 = *(_DWORD *)(*this - 12); + if ( a4 ) + { + if ( v4 > a3 && (v5 = (_WORD *)(v14 + 2 * a3), v6 = v14 + 2 * v4, v7 = v4 - a3, a4 <= v7) && (v8 = 1 - a4 + v7) != 0 ) + { +LABEL_5: + while ( *a2 != *v5 ) + { + ++v5; + if ( !--v8 ) + return -1; + } + if ( a2 != v5 ) + { + v10 = 0; + while ( v10 != a4 - 1 ) + { + v11 = v5[++v10]; + if ( v11 != a2[v10] ) + { + v12 = (v6 - (int)++v5) >> 1; + if ( a4 <= v12 ) + { + v8 = 1 - a4 + v12; + if ( v8 ) + goto LABEL_5; + } + return -1; + } + } + } + return ((int)v5 - v14) >> 1; + } + else + { + return -1; + } + } + else + { + v13 = -1; + if ( v4 >= a3 ) + return a3; + return v13; + } +} + +//----- (00478210) -------------------------------------------------------- +int __thiscall std::wstring::find(int *this, _WORD **a2, unsigned int a3) +{ + return std::wstring::find(this, *a2, a3, *((_DWORD *)*a2 - 3)); +} + +//----- (00478240) -------------------------------------------------------- +int __thiscall std::wstring::find(int *this, __int16 a2, unsigned int a3) +{ + int v3; // ebx + int result; // eax + unsigned int v5; // edx + unsigned int v6; // edx + _WORD *i; // eax + + v3 = *this; + result = -1; + v5 = *(_DWORD *)(*this - 12); + if ( a3 < v5 ) + { + v6 = v5 - a3; + for ( i = (_WORD *)(v3 + 2 * a3); *i != a2; ++i ) + { + if ( !--v6 ) + return -1; + } + return ((int)i - v3) >> 1; + } + return result; +} + +//----- (00478290) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::rend(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2; + return result; +} + +//----- (004782A0) -------------------------------------------------------- +int __fastcall std::wstring::size(_DWORD *a1) +{ + return *(_DWORD *)(*a1 - 12); +} + +//----- (004782B0) -------------------------------------------------------- +int __fastcall std::wstring::begin(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (004782C0) -------------------------------------------------------- +int __fastcall std::wstring::c_str(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (004782D0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::crend(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2; + return result; +} + +//----- (004782E0) -------------------------------------------------------- +bool __fastcall std::wstring::empty(_DWORD *a1) +{ + return *(_DWORD *)(*a1 - 12) == 0; +} + +//----- (004782F0) -------------------------------------------------------- +int __fastcall std::wstring::front(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00478300) -------------------------------------------------------- +int __thiscall std::wstring::rfind(_DWORD *this, wchar_t *String, int a3) +{ + unsigned int v4; // eax + + v4 = wcslen(String); + return std::wstring::rfind(this, String, a3, v4); +} + +//----- (00478340) -------------------------------------------------------- +int __thiscall std::wstring::rfind(_DWORD *this, _WORD *a2, unsigned int a3, unsigned int a4) +{ + int v4; // ebx + int v5; // esi + unsigned int v6; // eax + unsigned int v7; // eax + int v8; // esi + _WORD *v9; // eax + _WORD *v10; // edx + unsigned int v11; // ecx + + v4 = -1; + v5 = a3; + v6 = *(_DWORD *)(*this - 12); + if ( a4 <= v6 ) + { + v7 = v6 - a4; + if ( v7 <= a3 ) + v5 = v7; + v4 = v5; + v8 = *this + 2 * v5; + if ( a4 ) + { + while ( 1 ) + { + v9 = (_WORD *)v8; + if ( (_WORD *)v8 == a2 ) + break; + if ( a2 ) + { + v10 = a2; + v11 = a4; + while ( *v9 == *v10 ) + { + ++v9; + ++v10; + if ( !--v11 ) + return v4; + } + } + v8 -= 2; + if ( !v4 ) + return -1; + --v4; + } + } + } + return v4; +} +// 4783A9: conditional instruction was optimized away because %arg_8.4!=0 + +//----- (004783C0) -------------------------------------------------------- +int __thiscall std::wstring::rfind(_DWORD *this, _WORD **a2, unsigned int a3) +{ + return std::wstring::rfind(this, *a2, a3, *((_DWORD *)*a2 - 3)); +} + +//----- (004783F0) -------------------------------------------------------- +int __thiscall std::wstring::rfind(_DWORD *this, __int16 a2, unsigned int a3) +{ + int result; // eax + int v4; // ebx + + result = -1; + v4 = *(_DWORD *)(*this - 12); + if ( v4 ) + { + result = v4 - 1; + if ( v4 - 1 > a3 ) + result = a3; + do + { + if ( *(_WORD *)(*this + 2 * result) == a2 ) + break; + } + while ( result-- != 0 ); + } + return result; +} + +//----- (00478430) -------------------------------------------------------- +int __fastcall std::wstring::_M_rep(_DWORD *a1) +{ + return *a1 - 12; +} + +//----- (00478440) -------------------------------------------------------- +int __fastcall std::wstring::cbegin(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00478450) -------------------------------------------------------- +int __fastcall std::wstring::length(_DWORD *a1) +{ + return *(_DWORD *)(*a1 - 12); +} + +//----- (00478460) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::rbegin(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2 + 2 * *(_DWORD *)(*a2 - 12); + return result; +} + +//----- (00478480) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::substr(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4) +{ + unsigned int v5; // eax + unsigned int v6; // eax + + v5 = *(_DWORD *)(*a2 - 12); + if ( a3 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::substr", + a3, + *(_DWORD *)(*a2 - 12)); + v6 = v5 - a3; + if ( v6 > a4 ) + v6 = a4; + *this = std::wstring::_S_construct((_WORD *)(*a2 + 2 * a3), *a2 + 2 * (a3 + v6)); + return this; +} + +//----- (004784F0) -------------------------------------------------------- +int __fastcall std::wstring::_M_data(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00478500) -------------------------------------------------------- +int __fastcall std::wstring::_M_iend(_DWORD *a1) +{ + return *a1 + 2 * *(_DWORD *)(*a1 - 12); +} + +//----- (00478510) -------------------------------------------------------- +int __thiscall std::wstring::compare(wchar_t **this, wchar_t *String) +{ + wchar_t *v3; // ebx + size_t v4; // esi + size_t v5; // edx + size_t v6; // eax + wchar_t *v7; // edx + size_t v9; // [esp+18h] [ebp-24h] + size_t v10; // [esp+1Ch] [ebp-20h] + + v3 = String; + v4 = *((_DWORD *)*this - 3); + v5 = wcslen(String); + v10 = v5; + v6 = v4; + if ( v5 <= v4 ) + v6 = v5; + v9 = v6; + if ( !v6 ) + return v4 - v10; + v7 = *this; + if ( String == *this ) + return v4 - v10; + if ( (v7 != 0) != (String != 0) ) + return String == 0 ? 1 : -1; + while ( *v7 == *v3 ) + { + ++v7; + ++v3; + if ( !--v9 ) + return v4 - v10; + } + return *v7 < *v3 ? -1 : 1; +} + +//----- (004785B0) -------------------------------------------------------- +int __thiscall std::wstring::compare(_DWORD *this, _WORD **a2) +{ + _WORD *v2; // eax + _WORD *v3; // edx + unsigned int v4; // ebx + unsigned int v5; // esi + unsigned int v6; // ecx + + v2 = (_WORD *)*this; + v3 = *a2; + v4 = *(_DWORD *)(*this - 12); + v5 = *((_DWORD *)*a2 - 3); + v6 = v4; + if ( v5 <= v4 ) + v6 = *((_DWORD *)*a2 - 3); + if ( !v6 || v3 == v2 ) + return v4 - v5; + while ( *v2 == *v3 ) + { + ++v2; + ++v3; + if ( !--v6 ) + return v4 - v5; + } + return *v2 < *v3 ? -1 : 1; +} + +//----- (00478600) -------------------------------------------------------- +int __thiscall std::wstring::compare(_DWORD *this, unsigned int a2, unsigned int a3, wchar_t *String) +{ + unsigned int v4; // eax + unsigned int v5; // ebx + wchar_t *v6; // esi + unsigned int v7; // ebx + unsigned int v9; // ebx + size_t v10; // ecx + size_t v11; // eax + wchar_t *v12; // edx + unsigned int v14; // [esp+1Ch] [ebp-20h] + + v4 = a3; + v5 = *(_DWORD *)(*this - 12); + v6 = String; + if ( a2 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a2, + *(_DWORD *)(*this - 12)); + v7 = v5 - a2; + if ( v7 <= a3 ) + v4 = v7; + v9 = v4; + v14 = v4; + v10 = wcslen(String); + v11 = v9; + if ( v10 <= v9 ) + v11 = v10; + if ( !v11 ) + return v14 - v10; + v12 = (wchar_t *)(*this + 2 * a2); + if ( v12 == String ) + return v14 - v10; + if ( (v12 != 0) != (String != 0) ) + return String == 0 ? 1 : -1; + while ( *v12 == *v6 ) + { + ++v12; + ++v6; + if ( !--v11 ) + return v14 - v10; + } + return *v12 < *v6 ? -1 : 1; +} + +//----- (004786E0) -------------------------------------------------------- +int __thiscall std::wstring::compare(int *this, unsigned int a2, unsigned int a3, _WORD *a4, unsigned int a5) +{ + int v5; // esi + unsigned int v6; // eax + _WORD *v7; // ecx + unsigned int v8; // eax + unsigned int v9; // edi + _WORD *v10; // edx + int v11; // esi + + v5 = *this; + v6 = *(_DWORD *)(*this - 12); + v7 = a4; + if ( a2 > v6 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a2, + v6); + v8 = v6 - a2; + if ( v8 > a3 ) + v8 = a3; + v9 = a5; + if ( v8 <= a5 ) + v9 = v8; + if ( !v9 ) + return v8 - a5; + v10 = (_WORD *)(v5 + 2 * a2); + if ( v10 == a4 ) + return v8 - a5; + v11 = 1; + if ( !a4 ) + return v11; + while ( *v10 == *v7 ) + { + ++v10; + ++v7; + if ( !--v9 ) + return v8 - a5; + } + return *v10 < *v7 ? -1 : 1; +} + +//----- (00478780) -------------------------------------------------------- +int __thiscall std::wstring::compare(int *this, unsigned int a2, unsigned int a3, _WORD **a4) +{ + int v4; // esi + unsigned int v5; // eax + unsigned int v6; // eax + _WORD *v7; // edx + unsigned int v8; // ecx + unsigned int v9; // edi + _WORD *v10; // ebx + + v4 = *this; + v5 = *(_DWORD *)(*this - 12); + if ( a2 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a2, + *(_DWORD *)(*this - 12)); + v6 = v5 - a2; + if ( v6 > a3 ) + v6 = a3; + v7 = *a4; + v8 = v6; + v9 = *((_DWORD *)*a4 - 3); + if ( v9 <= v6 ) + v8 = *((_DWORD *)*a4 - 3); + if ( !v8 ) + return v6 - v9; + v10 = (_WORD *)(v4 + 2 * a2); + if ( v10 == v7 ) + return v6 - v9; + while ( *v10 == *v7 ) + { + ++v10; + ++v7; + if ( !--v8 ) + return v6 - v9; + } + return *v10 < *v7 ? -1 : 1; +} + +//----- (00478810) -------------------------------------------------------- +int __thiscall std::wstring::compare( + int *this, + unsigned int a2, + unsigned int a3, + _DWORD *a4, + unsigned int a5, + unsigned int a6) +{ + int v6; // edi + unsigned int v7; // eax + unsigned int v8; // edx + unsigned int v9; // eax + unsigned int v10; // edx + unsigned int v11; // esi + _WORD *v12; // ebx + _WORD *v13; // ecx + + v6 = *this; + v7 = *(_DWORD *)(*this - 12); + if ( a2 > v7 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a2, + *(_DWORD *)(v6 - 12)); + v8 = *(_DWORD *)(*a4 - 12); + if ( a5 > v8 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a5, + *(_DWORD *)(*a4 - 12)); + v9 = v7 - a2; + if ( v9 > a3 ) + v9 = a3; + v10 = v8 - a5; + if ( v10 > a6 ) + v10 = a6; + v11 = v9; + if ( v10 <= v9 ) + v11 = v10; + if ( !v11 ) + return v9 - v10; + v12 = (_WORD *)(*a4 + 2 * a5); + v13 = (_WORD *)(v6 + 2 * a2); + if ( v12 == v13 ) + return v9 - v10; + while ( *v13 == *v12 ) + { + ++v13; + ++v12; + if ( !--v11 ) + return v9 - v10; + } + return *v13 < *v12 ? -1 : 1; +} + +//----- (004788D0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::crbegin(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2 + 2 * *(_DWORD *)(*a2 - 12); + return result; +} + +//----- (004788F0) -------------------------------------------------------- +unsigned int __thiscall std::wstring::_M_check(_DWORD *this, unsigned int a2, const char *a3) +{ + unsigned int result; // eax + unsigned int v4; // edx + + result = a2; + v4 = *(_DWORD *)(*this - 12); + if ( v4 < a2 ) + std::__throw_out_of_range_fmt("%s: __pos (which is %zu) > this->size() (which is %zu)", a3, a2, v4); + return result; +} + +//----- (00478930) -------------------------------------------------------- +unsigned int __thiscall std::wstring::_M_limit(_DWORD *this, int a2, unsigned int a3) +{ + unsigned int result; // eax + + result = *(_DWORD *)(*this - 12) - a2; + if ( result > a3 ) + return a3; + return result; +} + +//----- (00478950) -------------------------------------------------------- +int __fastcall std::wstring::capacity(_DWORD *a1) +{ + return *(_DWORD *)(*a1 - 8); +} + +//----- (00478960) -------------------------------------------------------- +int std::wstring::max_size() +{ + return 536870910; +} + +//----- (00478970) -------------------------------------------------------- +int __fastcall std::wstring::_M_ibegin(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00478980) -------------------------------------------------------- +int __thiscall std::wstring::operator[](_DWORD *this, int a2) +{ + return *this + 2 * a2; +} + +//----- (00478990) -------------------------------------------------------- +int __fastcall std::istream::gcount(int a1) +{ + return *(_DWORD *)(a1 + 4); +} + +//----- (004789A0) -------------------------------------------------------- +int __fastcall std::istream::sentry::operator bool(unsigned __int8 *a1) +{ + return *a1; +} + +//----- (004789B0) -------------------------------------------------------- +int __fastcall std::ostream::sentry::operator bool(unsigned __int8 *a1) +{ + return *a1; +} + +//----- (004789C0) -------------------------------------------------------- +int __userpurge std::string::_M_disjunct@(_DWORD *a1@, std::string *this, const char *a3) +{ + int v3; // edx + + v3 = 1; + if ( *a1 <= (unsigned int)this ) + LOBYTE(v3) = *(_DWORD *)(*a1 - 12) + *a1 < (unsigned int)this; + return v3; +} + +//----- (004789E0) -------------------------------------------------------- +int __userpurge std::string::find_last_of@(int *a1@, std::string *this, char *a3, unsigned int a4) +{ + size_t v5; // eax + unsigned int v7; // [esp+Ch] [ebp-10h] + + v5 = strlen((const char *)this); + return std::string::find_last_of(a1, this, a3, v5, v7); +} +// 478A04: variable 'v7' is possibly undefined + +//----- (00478A20) -------------------------------------------------------- +int __userpurge std::string::find_last_of@( + int *a1@, + std::string *this, + const char *a3, + size_t MaxCount, + unsigned int a5) +{ + int v5; // esi + const char *v6; // ebx + int v7; // eax + unsigned int v8; // eax + + v5 = *a1; + v6 = a3; + v7 = *(_DWORD *)(*a1 - 12); + if ( !v7 || !MaxCount ) + return -1; + v8 = v7 - 1; + if ( v8 <= (unsigned int)a3 ) + v6 = (const char *)v8; + do + { + if ( memchr(this, v6[v5], MaxCount) ) + break; + } + while ( v6-- != 0 ); + return (int)v6; +} + +//----- (00478AA0) -------------------------------------------------------- +int __userpurge std::string::find_last_of@( + int *a1@, + std::string **this, + const std::string *a3, + unsigned int a4) +{ + unsigned int v5; // [esp+Ch] [ebp-10h] + + return std::string::find_last_of(a1, *this, (const char *)a3, *((_DWORD *)*this - 3), v5); +} +// 478ABB: variable 'v5' is possibly undefined + +//----- (00478AD0) -------------------------------------------------------- +int __userpurge std::string::find_last_of@(_DWORD *a1@, std::string *this, unsigned int a3, unsigned int a4) +{ + int result; // eax + int v5; // ebx + + result = -1; + v5 = *(_DWORD *)(*a1 - 12); + if ( v5 ) + { + result = v5 - 1; + if ( a3 <= v5 - 1 ) + result = a3; + do + { + if ( (_BYTE)this == *(_BYTE *)(*a1 + result) ) + break; + } + while ( result-- != 0 ); + } + return result; +} + +//----- (00478B10) -------------------------------------------------------- +int __userpurge std::string::find_first_of@(int *a1@, std::string *this, const char *a3, unsigned int a4) +{ + size_t v6; // eax + int v7; // edi + size_t MaxCount; // ebx + unsigned int v10; // [esp+1Ch] [ebp-20h] + + v6 = strlen((const char *)this); + if ( v6 ) + { + v7 = *a1; + MaxCount = v6; + v10 = *(_DWORD *)(v7 - 12); + while ( v10 > (unsigned int)a3 ) + { + if ( memchr(this, a3[v7], MaxCount) ) + return (int)a3; + ++a3; + } + } + return -1; +} + +//----- (00478B80) -------------------------------------------------------- +int __userpurge std::string::find_first_of@( + int *a1@, + std::string *this, + const char *a3, + size_t MaxCount, + unsigned int a5) +{ + int v6; // esi + unsigned int v7; // edi + + if ( MaxCount ) + { + v6 = *a1; + v7 = *(_DWORD *)(*a1 - 12); + while ( v7 > (unsigned int)a3 ) + { + if ( memchr(this, a3[v6], MaxCount) ) + return (int)a3; + ++a3; + } + } + return -1; +} + +//----- (00478BF0) -------------------------------------------------------- +int __userpurge std::string::find_first_of@( + int *a1@, + std::string *this, + const std::string *a3, + unsigned int a4) +{ + const void *Buf; // esi + size_t MaxCount; // ebx + int v7; // edi + unsigned int v9; // [esp+1Ch] [ebp-20h] + + Buf = *(const void **)this; + MaxCount = *(_DWORD *)(*(_DWORD *)this - 12); + if ( MaxCount ) + { + v7 = *a1; + v9 = *(_DWORD *)(*a1 - 12); + while ( v9 > (unsigned int)a3 ) + { + if ( memchr(Buf, *((char *)a3 + v7), MaxCount) ) + return (int)a3; + a3 = (const std::string *)((char *)a3 + 1); + } + } + return -1; +} + +//----- (00478C60) -------------------------------------------------------- +char *__userpurge std::string::find_first_of@(int *a1@, std::string *this, unsigned int a3, unsigned int a4) +{ + int v4; // ebx + int v5; // esi + unsigned int v6; // edx + char *v7; // eax + + v4 = -1; + v5 = *a1; + v6 = *(_DWORD *)(*a1 - 12); + if ( a3 < v6 ) + { + v7 = (char *)memchr((const void *)(v5 + a3), (char)this, v6 - a3); + if ( v7 ) + return &v7[-v5]; + } + return (char *)v4; +} + +//----- (00478CB0) -------------------------------------------------------- +void *__thiscall std::string::get_allocator(void *ecx0, std::string *this) +{ + return ecx0; +} + +//----- (00478CC0) -------------------------------------------------------- +char *__userpurge std::string::_M_check_length@( + _DWORD *a1@, + std::string *this, + unsigned int a3, + std::length_error *a4, + const char *a5) +{ + char *result; // eax + + result = (char *)this - *(_DWORD *)(*a1 - 12) + 1073741820; + if ( (unsigned int)result < a3 ) + std::__throw_length_error(a4); + return result; +} + +//----- (00478CF0) -------------------------------------------------------- +int __userpurge std::string::find_last_not_of@(int *a1@, std::string *this, const char *a3, unsigned int a4) +{ + int v4; // ebx + int v5; // esi + int v6; // ebp + size_t v7; // eax + const char *v8; // ecx + size_t MaxCount; // edi + + v4 = -1; + v5 = *a1; + v6 = *(_DWORD *)(*a1 - 12); + if ( v6 ) + { + v7 = strlen((const char *)this); + v8 = (const char *)(v6 - 1); + if ( (unsigned int)a3 <= v6 - 1 ) + v8 = a3; + MaxCount = v7; + v4 = (int)v8; + do + { + if ( !MaxCount ) + break; + if ( !memchr(this, *(char *)(v5 + v4), MaxCount) ) + break; + } + while ( v4-- != 0 ); + } + return v4; +} + +//----- (00478D60) -------------------------------------------------------- +int __userpurge std::string::find_last_not_of@( + int *a1@, + std::string *this, + const char *a3, + size_t MaxCount, + unsigned int a5) +{ + int v5; // ebx + int v6; // edi + const char *v7; // edx + int v8; // eax + unsigned int v9; // eax + + v5 = -1; + v6 = *a1; + v7 = a3; + v8 = *(_DWORD *)(*a1 - 12); + if ( v8 ) + { + v9 = v8 - 1; + if ( v9 <= (unsigned int)a3 ) + v7 = (const char *)v9; + v5 = (int)v7; + do + { + if ( !MaxCount ) + break; + if ( !memchr(this, *(char *)(v6 + v5), MaxCount) ) + break; + } + while ( v5-- != 0 ); + } + return v5; +} + +//----- (00478DC0) -------------------------------------------------------- +int __userpurge std::string::find_last_not_of@( + int *a1@, + std::string *this, + const std::string *a3, + unsigned int a4) +{ + int v4; // ebx + int v5; // edi + int v6; // eax + const std::string *v7; // eax + _DWORD *Buf; // ebp + size_t MaxCount; // esi + + v4 = -1; + v5 = *a1; + v6 = *(_DWORD *)(*a1 - 12); + if ( v6 ) + { + v7 = (const std::string *)(v6 - 1); + Buf = *(_DWORD **)this; + if ( a3 <= v7 ) + v7 = a3; + MaxCount = *(Buf - 3); + v4 = (int)v7; + do + { + if ( !MaxCount ) + break; + if ( !memchr(Buf, *(char *)(v5 + v4), MaxCount) ) + break; + } + while ( v4-- != 0 ); + } + return v4; +} + +//----- (00478E20) -------------------------------------------------------- +int __userpurge std::string::find_last_not_of@( + _DWORD *a1@, + std::string *this, + unsigned int a3, + unsigned int a4) +{ + int result; // eax + int v5; // ebx + + result = -1; + v5 = *(_DWORD *)(*a1 - 12); + if ( v5 ) + { + result = v5 - 1; + if ( v5 - 1 > a3 ) + result = a3; + do + { + if ( *(_BYTE *)(*a1 + result) != (_BYTE)this ) + break; + } + while ( result-- != 0 ); + } + return result; +} + +//----- (00478E60) -------------------------------------------------------- +int __userpurge std::string::find_first_not_of@(int *a1@, std::string *this, const char *a3, unsigned int a4) +{ + const char *v5; // edi + size_t v6; // eax + int v7; // esi + unsigned int v8; // ebp + size_t MaxCount; // ebx + + v5 = a3; + v6 = strlen((const char *)this); + v7 = *a1; + v8 = *(_DWORD *)(v7 - 12); + if ( (unsigned int)a3 >= v8 ) + return -1; + MaxCount = v6; + if ( v6 ) + { + while ( memchr(this, v5[v7], MaxCount) ) + { + if ( ++v5 == (const char *)v8 ) + return -1; + } + } + return (int)v5; +} + +//----- (00478ED0) -------------------------------------------------------- +int __userpurge std::string::find_first_not_of@( + int *a1@, + std::string *this, + const char *a3, + size_t MaxCount, + unsigned int a5) +{ + int v5; // ebx + const char *v6; // ebp + unsigned int v7; // edi + + v5 = *a1; + v6 = a3; + v7 = *(_DWORD *)(*a1 - 12); + if ( (unsigned int)a3 >= v7 ) + return -1; + if ( MaxCount ) + { + while ( memchr(this, v6[v5], MaxCount) ) + { + if ( ++v6 == (const char *)v7 ) + return -1; + } + } + return (int)v6; +} + +//----- (00478F30) -------------------------------------------------------- +int __userpurge std::string::find_first_not_of@( + int *a1@, + std::string *this, + const std::string *a3, + unsigned int a4) +{ + int v4; // esi + const std::string *v5; // ebp + const void *Buf; // ebx + size_t MaxCount; // edi + unsigned int v9; // [esp+1Ch] [ebp-20h] + + v4 = *a1; + v5 = a3; + Buf = *(const void **)this; + MaxCount = *(_DWORD *)(*(_DWORD *)this - 12); + v9 = *(_DWORD *)(*a1 - 12); + if ( (unsigned int)a3 >= v9 ) + return -1; + if ( MaxCount ) + { + while ( memchr(Buf, *((char *)v5 + v4), MaxCount) ) + { + v5 = (const std::string *)((char *)v5 + 1); + if ( v5 == (const std::string *)v9 ) + return -1; + } + } + return (int)v5; +} + +//----- (00478FA0) -------------------------------------------------------- +int __userpurge std::string::find_first_not_of@( + int *a1@, + std::string *this, + unsigned int a3, + unsigned int a4) +{ + int v4; // edx + int result; // eax + unsigned int v6; // ecx + + v4 = *a1; + result = a3; + v6 = *(_DWORD *)(*a1 - 12); + if ( a3 >= v6 ) + return -1; + while ( *(_BYTE *)(v4 + result) == (_BYTE)this ) + { + if ( ++result == v6 ) + return -1; + } + return result; +} + +//----- (00478FE0) -------------------------------------------------------- +char *__userpurge std::string::at@(int *a1@, std::string *this, unsigned int a3) +{ + int v3; // eax + unsigned int v4; // ecx + + v3 = *a1; + v4 = *(_DWORD *)(*a1 - 12); + if ( (unsigned int)this >= v4 ) + std::__throw_out_of_range_fmt( + "basic_string::at: __n (which is %zu) >= this->size() (which is %zu)", + (size_t)this, + v4); + return (char *)this + v3; +} + +//----- (00479010) -------------------------------------------------------- +int __fastcall std::string::end(_DWORD *a1) +{ + return *(_DWORD *)(*a1 - 12) + *a1; +} + +//----- (00479020) -------------------------------------------------------- +int __fastcall std::string::_Rep::_M_is_leaked(int a1) +{ + return *(_DWORD *)(a1 + 8) >> 31; +} + +//----- (00479030) -------------------------------------------------------- +bool __fastcall std::string::_Rep::_M_is_shared(int a1) +{ + return *(_DWORD *)(a1 + 8) > 0; +} + +//----- (00479040) -------------------------------------------------------- +int __fastcall std::string::back(_DWORD *a1) +{ + return *a1 + *(_DWORD *)(*a1 - 12) - 1; +} + +//----- (00479050) -------------------------------------------------------- +int __fastcall std::string::cend(_DWORD *a1) +{ + return *(_DWORD *)(*a1 - 12) + *a1; +} + +//----- (00479060) -------------------------------------------------------- +int __userpurge std::string::copy@( + _DWORD *a1@, + std::string *this, + size_t a3, + unsigned int a4, + unsigned int a5) +{ + unsigned int v5; // ebx + size_t Size; // ebx + _BYTE *Src; // eax + + v5 = *(_DWORD *)(*a1 - 12); + if ( a4 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::copy", + a4, + *(_DWORD *)(*a1 - 12)); + Size = v5 - a4; + if ( Size > a3 ) + Size = a3; + if ( !Size ) + return Size; + Src = (_BYTE *)(*a1 + a4); + if ( Size != 1 ) + { + memcpy(this, Src, Size); + return Size; + } + *(_BYTE *)this = *Src; + return 1; +} + +//----- (004790E0) -------------------------------------------------------- +int __fastcall std::string::data(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (004790F0) -------------------------------------------------------- +int __userpurge std::string::find@(int *a1@, std::string *this, char *a3, unsigned int a4) +{ + size_t Size; // eax + unsigned int v7; // [esp+Ch] [ebp-10h] + + Size = strlen((const char *)this); + return std::string::find(a1, this, a3, Size, v7); +} +// 479114: variable 'v7' is possibly undefined + +//----- (00479130) -------------------------------------------------------- +int __userpurge std::string::find@(int *a1@, std::string *this, const char *a3, size_t Size, unsigned int a5) +{ + int v5; // edi + unsigned int v6; // edx + int v7; // ecx + int v8; // ebp + size_t v9; // edx + const char *Buf; // eax + size_t MaxCount; // edx + int Val; // ebp + const char *v13; // edi + int v15; // ecx + int v16; // [esp+18h] [ebp-24h] + int v17; // [esp+1Ch] [ebp-20h] + + v5 = *a1; + v6 = *(_DWORD *)(*a1 - 12); + if ( Size ) + { + v7 = -1; + if ( v6 > (unsigned int)a3 ) + { + v8 = v5 + v6; + v9 = v6 - (_DWORD)a3; + Buf = &a3[v5]; + v16 = v8; + if ( Size <= v9 ) + { + MaxCount = 1 - Size + v9; + if ( MaxCount ) + { + v17 = v5; + Val = *(char *)this; + while ( 1 ) + { + v13 = (const char *)memchr(Buf, Val, MaxCount); + if ( !v13 ) + return -1; + if ( !memcmp(v13, this, Size) ) + break; + Buf = v13 + 1; + if ( Size <= v16 - (int)(v13 + 1) ) + { + MaxCount = v16 - (_DWORD)v13 - Size; + if ( MaxCount ) + continue; + } + return -1; + } + return (int)&v13[-v17]; + } + } + } + return v7; + } + else + { + v15 = -1; + if ( v6 >= (unsigned int)a3 ) + return (int)a3; + return v15; + } +} + +//----- (00479200) -------------------------------------------------------- +int __userpurge std::string::find@(int *a1@, std::string **this, const std::string *a3, unsigned int a4) +{ + unsigned int v5; // [esp+Ch] [ebp-10h] + + return std::string::find(a1, *this, (const char *)a3, *((_DWORD *)*this - 3), v5); +} +// 47921B: variable 'v5' is possibly undefined + +//----- (00479230) -------------------------------------------------------- +char *__userpurge std::string::find@(int *a1@, std::string *this, unsigned int a3, unsigned int a4) +{ + int v4; // ebx + int v5; // esi + unsigned int v6; // edx + char *v7; // eax + + v4 = -1; + v5 = *a1; + v6 = *(_DWORD *)(*a1 - 12); + if ( a3 < v6 ) + { + v7 = (char *)memchr((const void *)(v5 + a3), (char)this, v6 - a3); + if ( v7 ) + return &v7[-v5]; + } + return (char *)v4; +} + +//----- (00479280) -------------------------------------------------------- +_DWORD *__thiscall std::string::rend(_DWORD *ecx0, std::string *this) +{ + _DWORD *result; // eax + + result = ecx0; + *ecx0 = *(_DWORD *)this; + return result; +} + +//----- (00479290) -------------------------------------------------------- +int __fastcall std::string::size(_DWORD *a1) +{ + return *(_DWORD *)(*a1 - 12); +} + +//----- (004792A0) -------------------------------------------------------- +int __fastcall std::string::begin(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (004792B0) -------------------------------------------------------- +int __fastcall std::string::c_str(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (004792C0) -------------------------------------------------------- +_DWORD *__thiscall std::string::crend(_DWORD *ecx0, std::string *this) +{ + _DWORD *result; // eax + + result = ecx0; + *ecx0 = *(_DWORD *)this; + return result; +} + +//----- (004792D0) -------------------------------------------------------- +bool __fastcall std::string::empty(_DWORD *a1) +{ + return *(_DWORD *)(*a1 - 12) == 0; +} + +//----- (004792E0) -------------------------------------------------------- +int __fastcall std::string::front(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (004792F0) -------------------------------------------------------- +int __userpurge std::string::rfind@(int *a1@, std::string *this, char *a3, unsigned int a4) +{ + size_t v5; // eax + unsigned int v7; // [esp+Ch] [ebp-10h] + + v5 = strlen((const char *)this); + return std::string::rfind(a1, this, a3, v5, v7); +} +// 479314: variable 'v7' is possibly undefined + +//----- (00479330) -------------------------------------------------------- +int __userpurge std::string::rfind@( + int *a1@, + std::string *this, + const char *a3, + size_t Size, + unsigned int a5) +{ + int v5; // ebx + int v6; // ebp + size_t v7; // eax + const char *v8; // edx + unsigned int v9; // eax + + v5 = -1; + v6 = *a1; + v7 = *(_DWORD *)(*a1 - 12); + v8 = a3; + if ( Size <= v7 ) + { + v9 = v7 - Size; + if ( v9 <= (unsigned int)a3 ) + v8 = (const char *)v9; + v5 = (int)v8; + if ( Size ) + { + while ( memcmp((const void *)(v6 + v5), this, Size) ) + { + if ( !v5 ) + return -1; + --v5; + } + } + } + return v5; +} +// 479381: conditional instruction was optimized away because %arg_8.4!=0 + +//----- (004793A0) -------------------------------------------------------- +int __userpurge std::string::rfind@(int *a1@, std::string *this, const std::string *a3, unsigned int a4) +{ + int v4; // ebx + int v5; // ebp + const std::string *v6; // edx + const void *Buf2; // edi + size_t v8; // eax + size_t Size; // esi + unsigned int v10; // eax + + v4 = -1; + v5 = *a1; + v6 = a3; + Buf2 = *(const void **)this; + v8 = *(_DWORD *)(*a1 - 12); + Size = *(_DWORD *)(*(_DWORD *)this - 12); + if ( Size <= v8 ) + { + v10 = v8 - Size; + if ( v10 <= (unsigned int)a3 ) + v6 = (const std::string *)v10; + v4 = (int)v6; + if ( Size ) + { + while ( memcmp((const void *)(v5 + v4), Buf2, Size) ) + { + if ( !v4 ) + return -1; + --v4; + } + } + } + return v4; +} +// 4793F2: conditional instruction was optimized away because esi.4!=0 + +//----- (00479410) -------------------------------------------------------- +int __userpurge std::string::rfind@(_DWORD *a1@, std::string *this, unsigned int a3, unsigned int a4) +{ + int result; // eax + int v5; // ebx + + result = -1; + v5 = *(_DWORD *)(*a1 - 12); + if ( v5 ) + { + result = v5 - 1; + if ( v5 - 1 > a3 ) + result = a3; + do + { + if ( *(_BYTE *)(*a1 + result) == (_BYTE)this ) + break; + } + while ( result-- != 0 ); + } + return result; +} + +//----- (00479450) -------------------------------------------------------- +int __fastcall std::string::_M_rep(_DWORD *a1) +{ + return *a1 - 12; +} + +//----- (00479460) -------------------------------------------------------- +int __fastcall std::string::cbegin(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00479470) -------------------------------------------------------- +int __fastcall std::string::length(_DWORD *a1) +{ + return *(_DWORD *)(*a1 - 12); +} + +//----- (00479480) -------------------------------------------------------- +_DWORD *__thiscall std::string::rbegin(_DWORD *ecx0, std::string *this) +{ + _DWORD *result; // eax + + result = ecx0; + *ecx0 = *(_DWORD *)(*(_DWORD *)this - 12) + *(_DWORD *)this; + return result; +} + +//----- (00479490) -------------------------------------------------------- +int *__thiscall std::string::substr(int *ecx0, std::string *this, unsigned int a3, unsigned int a4) +{ + unsigned int v5; // eax + unsigned int v6; // eax + + v5 = *(_DWORD *)(*(_DWORD *)this - 12); + if ( a3 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::substr", + a3, + *(_DWORD *)(*(_DWORD *)this - 12)); + v6 = v5 - a3; + if ( v6 > a4 ) + v6 = a4; + *ecx0 = std::string::_S_construct((_BYTE *)(a3 + *(_DWORD *)this), *(_DWORD *)this + a3 + v6); + return ecx0; +} + +//----- (00479500) -------------------------------------------------------- +int __fastcall std::string::_M_data(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00479510) -------------------------------------------------------- +int __fastcall std::string::_M_iend(_DWORD *a1) +{ + return *(_DWORD *)(*a1 - 12) + *a1; +} + +//----- (00479520) -------------------------------------------------------- +int __userpurge std::string::compare@(const void **a1@, std::string *this, const char *a3) +{ + const void *v3; // edi + size_t v4; // esi + size_t v5; // ebx + size_t Size; // eax + int result; // eax + + v3 = *a1; + v4 = *((_DWORD *)*a1 - 3); + v5 = strlen((const char *)this); + Size = v4; + if ( v5 <= v4 ) + Size = v5; + if ( !Size ) + return v4 - v5; + result = memcmp(v3, this, Size); + if ( !result ) + return v4 - v5; + return result; +} + +//----- (00479570) -------------------------------------------------------- +int __userpurge std::string::compare@(const void **a1@, const void **this, const std::string *a3) +{ + const void *Buf1; // eax + size_t v4; // esi + size_t Size; // ecx + size_t v6; // ebx + int result; // eax + + Buf1 = *a1; + v4 = *((_DWORD *)*a1 - 3); + Size = v4; + v6 = *((_DWORD *)*this - 3); + if ( v6 <= v4 ) + Size = *((_DWORD *)*this - 3); + if ( !Size ) + return v4 - v6; + result = memcmp(Buf1, *this, Size); + if ( !result ) + return v4 - v6; + return result; +} + +//----- (004795B0) -------------------------------------------------------- +int __userpurge std::string::compare@( + int *a1@, + std::string *this, + unsigned int a3, + char *Str, + const char *a5) +{ + int v5; // ebp + unsigned int v6; // ebx + unsigned int v7; // ebx + size_t v8; // edi + size_t Size; // eax + int result; // eax + + v5 = *a1; + v6 = *(_DWORD *)(*a1 - 12); + if ( (unsigned int)this > v6 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + (size_t)this, + *(_DWORD *)(*a1 - 12)); + v7 = v6 - (_DWORD)this; + if ( v7 > a3 ) + v7 = a3; + v8 = strlen(Str); + Size = v7; + if ( v8 <= v7 ) + Size = v8; + if ( !Size ) + return v7 - v8; + result = memcmp((char *)this + v5, Str, Size); + if ( !result ) + return v7 - v8; + return result; +} + +//----- (00479630) -------------------------------------------------------- +int __userpurge std::string::compare@( + int *a1@, + std::string *this, + size_t a3, + void *Buf2, + const char *a5, + unsigned int a6) +{ + int v6; // eax + unsigned int v7; // ebx + unsigned int v8; // ebx + const char *Size; // ecx + int result; // eax + + v6 = *a1; + v7 = *(_DWORD *)(*a1 - 12); + if ( (unsigned int)this > v7 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + (size_t)this, + *(_DWORD *)(*a1 - 12)); + v8 = v7 - (_DWORD)this; + Size = a5; + if ( v8 > a3 ) + v8 = a3; + if ( v8 <= (unsigned int)a5 ) + Size = (const char *)v8; + if ( !Size ) + return v8 - (_DWORD)a5; + result = memcmp((char *)this + v6, Buf2, (size_t)Size); + if ( !result ) + return v8 - (_DWORD)a5; + return result; +} + +//----- (004796A0) -------------------------------------------------------- +int __userpurge std::string::compare@( + int *a1@, + std::string *this, + unsigned int a3, + const void **a4, + const std::string *a5) +{ + int v5; // eax + unsigned int v6; // ebx + unsigned int v7; // ebx + _DWORD *Buf2; // ecx + unsigned int v9; // esi + size_t Size; // edi + int result; // eax + + v5 = *a1; + v6 = *(_DWORD *)(*a1 - 12); + if ( (unsigned int)this > v6 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + (size_t)this, + *(_DWORD *)(*a1 - 12)); + v7 = v6 - (_DWORD)this; + Buf2 = *a4; + if ( v7 > a3 ) + v7 = a3; + v9 = *(Buf2 - 3); + Size = v7; + if ( v9 <= v7 ) + Size = *(Buf2 - 3); + if ( !Size ) + return v7 - v9; + result = memcmp((char *)this + v5, Buf2, Size); + if ( !result ) + return v7 - v9; + return result; +} + +//----- (00479720) -------------------------------------------------------- +int __userpurge std::string::compare@( + _DWORD *a1@, + std::string *this, + unsigned int a3, + _DWORD *a4, + const std::string *a5, + unsigned int a6, + unsigned int a7) +{ + unsigned int v7; // ebx + unsigned int v8; // ebp + unsigned int v9; // eax + unsigned int v10; // ebx + unsigned int v11; // eax + size_t Size; // eax + int result; // eax + + v7 = *(_DWORD *)(*a1 - 12); + v8 = a6; + if ( (unsigned int)this > v7 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + (size_t)this, + *(_DWORD *)(*a1 - 12)); + v9 = *(_DWORD *)(*a4 - 12); + if ( (unsigned int)a5 > v9 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + (size_t)a5, + *(_DWORD *)(*a4 - 12)); + v10 = v7 - (_DWORD)this; + if ( v10 > a3 ) + v10 = a3; + v11 = v9 - (_DWORD)a5; + if ( v11 <= a6 ) + v8 = v11; + Size = v10; + if ( v8 <= v10 ) + Size = v8; + if ( !Size ) + return v10 - v8; + result = memcmp((char *)this + *a1, (char *)a5 + *a4, Size); + if ( !result ) + return v10 - v8; + return result; +} + +//----- (004797D0) -------------------------------------------------------- +_DWORD *__thiscall std::string::crbegin(_DWORD *ecx0, std::string *this) +{ + _DWORD *result; // eax + + result = ecx0; + *ecx0 = *(_DWORD *)(*(_DWORD *)this - 12) + *(_DWORD *)this; + return result; +} + +//----- (004797E0) -------------------------------------------------------- +std::string *__userpurge std::string::_M_check@( + _DWORD *a1@, + std::string *this, + const char *a3, + const char *a4) +{ + std::string *result; // eax + unsigned int v5; // edx + + result = this; + v5 = *(_DWORD *)(*a1 - 12); + if ( v5 < (unsigned int)this ) + std::__throw_out_of_range_fmt("%s: __pos (which is %zu) > this->size() (which is %zu)", a3, (size_t)this, v5); + return result; +} + +//----- (00479820) -------------------------------------------------------- +unsigned int __userpurge std::string::_M_limit@( + _DWORD *a1@, + std::string *this, + unsigned int a3, + unsigned int a4) +{ + unsigned int result; // eax + + result = *(_DWORD *)(*a1 - 12) - (_DWORD)this; + if ( result > a3 ) + return a3; + return result; +} + +//----- (00479840) -------------------------------------------------------- +int __fastcall std::string::capacity(_DWORD *a1) +{ + return *(_DWORD *)(*a1 - 8); +} + +//----- (00479850) -------------------------------------------------------- +int std::string::max_size() +{ + return 1073741820; +} + +//----- (00479860) -------------------------------------------------------- +int __fastcall std::string::_M_ibegin(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00479870) -------------------------------------------------------- +int __thiscall std::string::operator[](_DWORD *this, int a2) +{ + return a2 + *this; +} + +//----- (00479880) -------------------------------------------------------- +const char *std::bad_typeid::what() +{ + return "std::bad_typeid"; +} + +//----- (00479890) -------------------------------------------------------- +int __fastcall std::error_code::default_error_condition(int a1) +{ + return (*(int (__thiscall **)(_DWORD, _DWORD))(**(_DWORD **)(a1 + 4) + 20))(*(_DWORD *)(a1 + 4), *(_DWORD *)a1); +} + +//----- (004798B0) -------------------------------------------------------- +int __fastcall std::moneypunct::neg_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 40); + if ( (char *)v1 == (char *)std::moneypunct::do_neg_format ) + return *(_DWORD *)(a1[2] + 52); + else + return v1(); +} + +//----- (004798D0) -------------------------------------------------------- +int __fastcall std::moneypunct::pos_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 36); + if ( (char *)v1 == (char *)std::moneypunct::do_pos_format ) + return *(_DWORD *)(a1[2] + 48); + else + return v1(); +} + +//----- (004798F0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 20); + if ( (char *)v3 == (char *)std::moneypunct::do_curr_symbol ) + std::string::string(this, *(char **)(a2[2] + 20), (int)v5); + else + v3(a2); + return this; +} +// 4798F0: using guessed type int var_D[3]; + +//----- (00479950) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 8), (int)v4); + return this; +} +// 479950: using guessed type int var_D[3]; + +//----- (00479980) -------------------------------------------------------- +int __fastcall std::moneypunct::frac_digits(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 32); + if ( (char *)v1 == (char *)std::moneypunct::do_frac_digits ) + return *(_DWORD *)(a1[2] + 44); + else + return v1(); +} + +//----- (004799A0) -------------------------------------------------------- +int __fastcall std::moneypunct::decimal_point(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 8); + if ( (char *)v1 == (char *)std::moneypunct::do_decimal_point ) + return *(unsigned __int8 *)(a1[2] + 17); + else + return v1(); +} + +//----- (004799C0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_neg_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 52); +} + +//----- (004799D0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_pos_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 48); +} + +//----- (004799E0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 28); + if ( (char *)v3 == (char *)std::moneypunct::do_negative_sign ) + std::string::string(this, *(char **)(a2[2] + 36), (int)v5); + else + v3(a2); + return this; +} +// 4799E0: using guessed type int var_D[3]; + +//----- (00479A40) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 24); + if ( (char *)v3 == (char *)std::moneypunct::do_positive_sign ) + std::string::string(this, *(char **)(a2[2] + 28), (int)v5); + else + v3(a2); + return this; +} +// 479A40: using guessed type int var_D[3]; + +//----- (00479AA0) -------------------------------------------------------- +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 12); + if ( (char *)v1 == (char *)std::moneypunct::do_thousands_sep ) + return *(unsigned __int8 *)(a1[2] + 18); + else + return v1(); +} + +//----- (00479AC0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 20), (int)v4); + return this; +} +// 479AC0: using guessed type int var_D[3]; + +//----- (00479AF0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_frac_digits(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 44); +} + +//----- (00479B00) -------------------------------------------------------- +int __fastcall std::moneypunct::do_decimal_point(int a1) +{ + return *(unsigned __int8 *)(*(_DWORD *)(a1 + 8) + 17); +} + +//----- (00479B10) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 36), (int)v4); + return this; +} +// 479B10: using guessed type int var_D[3]; + +//----- (00479B40) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 28), (int)v4); + return this; +} +// 479B40: using guessed type int var_D[3]; + +//----- (00479B70) -------------------------------------------------------- +int __fastcall std::moneypunct::do_thousands_sep(int a1) +{ + return *(unsigned __int8 *)(*(_DWORD *)(a1 + 8) + 18); +} + +//----- (00479B80) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 16); + if ( (char *)v3 == (char *)std::moneypunct::do_grouping ) + std::string::string(this, *(char **)(a2[2] + 8), (int)v5); + else + v3(a2); + return this; +} +// 479B80: using guessed type int var_D[3]; + +//----- (00479BE0) -------------------------------------------------------- +int __fastcall std::moneypunct::neg_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 40); + if ( (char *)v1 == (char *)std::moneypunct::do_neg_format ) + return *(_DWORD *)(a1[2] + 52); + else + return v1(); +} + +//----- (00479C00) -------------------------------------------------------- +int __fastcall std::moneypunct::pos_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 36); + if ( (char *)v1 == (char *)std::moneypunct::do_pos_format ) + return *(_DWORD *)(a1[2] + 48); + else + return v1(); +} + +//----- (00479C20) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 20); + if ( (char *)v3 == (char *)std::moneypunct::do_curr_symbol ) + std::string::string(this, *(char **)(a2[2] + 20), (int)v5); + else + v3(a2); + return this; +} +// 479C20: using guessed type int var_D[3]; + +//----- (00479C80) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 8), (int)v4); + return this; +} +// 479C80: using guessed type int var_D[3]; + +//----- (00479CB0) -------------------------------------------------------- +int __fastcall std::moneypunct::frac_digits(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 32); + if ( (char *)v1 == (char *)std::moneypunct::do_frac_digits ) + return *(_DWORD *)(a1[2] + 44); + else + return v1(); +} + +//----- (00479CD0) -------------------------------------------------------- +int __fastcall std::moneypunct::decimal_point(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 8); + if ( (char *)v1 == (char *)std::moneypunct::do_decimal_point ) + return *(unsigned __int8 *)(a1[2] + 17); + else + return v1(); +} + +//----- (00479CF0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_neg_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 52); +} + +//----- (00479D00) -------------------------------------------------------- +int __fastcall std::moneypunct::do_pos_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 48); +} + +//----- (00479D10) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 28); + if ( (char *)v3 == (char *)std::moneypunct::do_negative_sign ) + std::string::string(this, *(char **)(a2[2] + 36), (int)v5); + else + v3(a2); + return this; +} +// 479D10: using guessed type int var_D[3]; + +//----- (00479D70) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 24); + if ( (char *)v3 == (char *)std::moneypunct::do_positive_sign ) + std::string::string(this, *(char **)(a2[2] + 28), (int)v5); + else + v3(a2); + return this; +} +// 479D70: using guessed type int var_D[3]; + +//----- (00479DD0) -------------------------------------------------------- +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 12); + if ( (char *)v1 == (char *)std::moneypunct::do_thousands_sep ) + return *(unsigned __int8 *)(a1[2] + 18); + else + return v1(); +} + +//----- (00479DF0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 20), (int)v4); + return this; +} +// 479DF0: using guessed type int var_D[3]; + +//----- (00479E20) -------------------------------------------------------- +int __fastcall std::moneypunct::do_frac_digits(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 44); +} + +//----- (00479E30) -------------------------------------------------------- +int __fastcall std::moneypunct::do_decimal_point(int a1) +{ + return *(unsigned __int8 *)(*(_DWORD *)(a1 + 8) + 17); +} + +//----- (00479E40) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 36), (int)v4); + return this; +} +// 479E40: using guessed type int var_D[3]; + +//----- (00479E70) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 28), (int)v4); + return this; +} +// 479E70: using guessed type int var_D[3]; + +//----- (00479EA0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_thousands_sep(int a1) +{ + return *(unsigned __int8 *)(*(_DWORD *)(a1 + 8) + 18); +} + +//----- (00479EB0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 16); + if ( (char *)v3 == (char *)std::moneypunct::do_grouping ) + std::string::string(this, *(char **)(a2[2] + 8), (int)v5); + else + v3(a2); + return this; +} +// 479EB0: using guessed type int var_D[3]; + +//----- (00479F10) -------------------------------------------------------- +int __fastcall std::moneypunct::neg_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 40); + if ( (char *)v1 == (char *)std::moneypunct::do_neg_format ) + return *(_DWORD *)(a1[2] + 56); + else + return v1(); +} + +//----- (00479F30) -------------------------------------------------------- +int __fastcall std::moneypunct::pos_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 36); + if ( (char *)v1 == (char *)std::moneypunct::do_pos_format ) + return *(_DWORD *)(a1[2] + 52); + else + return v1(); +} + +//----- (00479F50) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 20); + if ( (char *)v3 == (char *)std::moneypunct::do_curr_symbol ) + std::wstring::basic_string(this, *(wchar_t **)(a2[2] + 24), (int)v5); + else + v3(a2); + return this; +} +// 479F50: using guessed type int var_D[3]; + +//----- (00479FB0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 8), (int)v4); + return this; +} +// 479FB0: using guessed type int var_D[3]; + +//----- (00479FE0) -------------------------------------------------------- +int __fastcall std::moneypunct::frac_digits(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 32); + if ( (char *)v1 == (char *)std::moneypunct::do_frac_digits ) + return *(_DWORD *)(a1[2] + 48); + else + return v1(); +} + +//----- (0047A000) -------------------------------------------------------- +int __fastcall std::moneypunct::decimal_point(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 8); + if ( (char *)v1 == (char *)std::moneypunct::do_decimal_point ) + return *(unsigned __int16 *)(a1[2] + 18); + else + return v1(); +} + +//----- (0047A020) -------------------------------------------------------- +int __fastcall std::moneypunct::do_neg_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 56); +} + +//----- (0047A030) -------------------------------------------------------- +int __fastcall std::moneypunct::do_pos_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 52); +} + +//----- (0047A040) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 28); + if ( (char *)v3 == (char *)std::moneypunct::do_negative_sign ) + std::wstring::basic_string(this, *(wchar_t **)(a2[2] + 40), (int)v5); + else + v3(a2); + return this; +} +// 47A040: using guessed type int var_D[3]; + +//----- (0047A0A0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 24); + if ( (char *)v3 == (char *)std::moneypunct::do_positive_sign ) + std::wstring::basic_string(this, *(wchar_t **)(a2[2] + 32), (int)v5); + else + v3(a2); + return this; +} +// 47A0A0: using guessed type int var_D[3]; + +//----- (0047A100) -------------------------------------------------------- +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 12); + if ( (char *)v1 == (char *)std::moneypunct::do_thousands_sep ) + return *(unsigned __int16 *)(a1[2] + 20); + else + return v1(); +} + +//----- (0047A120) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::wstring::basic_string(this, *(wchar_t **)(*(_DWORD *)(a2 + 8) + 24), (int)v4); + return this; +} +// 47A120: using guessed type int var_D[3]; + +//----- (0047A150) -------------------------------------------------------- +int __fastcall std::moneypunct::do_frac_digits(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 48); +} + +//----- (0047A160) -------------------------------------------------------- +int __fastcall std::moneypunct::do_decimal_point(int a1) +{ + return *(unsigned __int16 *)(*(_DWORD *)(a1 + 8) + 18); +} + +//----- (0047A170) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::wstring::basic_string(this, *(wchar_t **)(*(_DWORD *)(a2 + 8) + 40), (int)v4); + return this; +} +// 47A170: using guessed type int var_D[3]; + +//----- (0047A1A0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::wstring::basic_string(this, *(wchar_t **)(*(_DWORD *)(a2 + 8) + 32), (int)v4); + return this; +} +// 47A1A0: using guessed type int var_D[3]; + +//----- (0047A1D0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_thousands_sep(int a1) +{ + return *(unsigned __int16 *)(*(_DWORD *)(a1 + 8) + 20); +} + +//----- (0047A1E0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 16); + if ( (char *)v3 == (char *)std::moneypunct::do_grouping ) + std::string::string(this, *(char **)(a2[2] + 8), (int)v5); + else + v3(a2); + return this; +} +// 47A1E0: using guessed type int var_D[3]; + +//----- (0047A240) -------------------------------------------------------- +int __fastcall std::moneypunct::neg_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 40); + if ( (char *)v1 == (char *)std::moneypunct::do_neg_format ) + return *(_DWORD *)(a1[2] + 56); + else + return v1(); +} + +//----- (0047A260) -------------------------------------------------------- +int __fastcall std::moneypunct::pos_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 36); + if ( (char *)v1 == (char *)std::moneypunct::do_pos_format ) + return *(_DWORD *)(a1[2] + 52); + else + return v1(); +} + +//----- (0047A280) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 20); + if ( (char *)v3 == (char *)std::moneypunct::do_curr_symbol ) + std::wstring::basic_string(this, *(wchar_t **)(a2[2] + 24), (int)v5); + else + v3(a2); + return this; +} +// 47A280: using guessed type int var_D[3]; + +//----- (0047A2E0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 8), (int)v4); + return this; +} +// 47A2E0: using guessed type int var_D[3]; + +//----- (0047A310) -------------------------------------------------------- +int __fastcall std::moneypunct::frac_digits(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 32); + if ( (char *)v1 == (char *)std::moneypunct::do_frac_digits ) + return *(_DWORD *)(a1[2] + 48); + else + return v1(); +} + +//----- (0047A330) -------------------------------------------------------- +int __fastcall std::moneypunct::decimal_point(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 8); + if ( (char *)v1 == (char *)std::moneypunct::do_decimal_point ) + return *(unsigned __int16 *)(a1[2] + 18); + else + return v1(); +} + +//----- (0047A350) -------------------------------------------------------- +int __fastcall std::moneypunct::do_neg_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 56); +} + +//----- (0047A360) -------------------------------------------------------- +int __fastcall std::moneypunct::do_pos_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 52); +} + +//----- (0047A370) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 28); + if ( (char *)v3 == (char *)std::moneypunct::do_negative_sign ) + std::wstring::basic_string(this, *(wchar_t **)(a2[2] + 40), (int)v5); + else + v3(a2); + return this; +} +// 47A370: using guessed type int var_D[3]; + +//----- (0047A3D0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 24); + if ( (char *)v3 == (char *)std::moneypunct::do_positive_sign ) + std::wstring::basic_string(this, *(wchar_t **)(a2[2] + 32), (int)v5); + else + v3(a2); + return this; +} +// 47A3D0: using guessed type int var_D[3]; + +//----- (0047A430) -------------------------------------------------------- +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 12); + if ( (char *)v1 == (char *)std::moneypunct::do_thousands_sep ) + return *(unsigned __int16 *)(a1[2] + 20); + else + return v1(); +} + +//----- (0047A450) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::wstring::basic_string(this, *(wchar_t **)(*(_DWORD *)(a2 + 8) + 24), (int)v4); + return this; +} +// 47A450: using guessed type int var_D[3]; + +//----- (0047A480) -------------------------------------------------------- +int __fastcall std::moneypunct::do_frac_digits(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 48); +} + +//----- (0047A490) -------------------------------------------------------- +int __fastcall std::moneypunct::do_decimal_point(int a1) +{ + return *(unsigned __int16 *)(*(_DWORD *)(a1 + 8) + 18); +} + +//----- (0047A4A0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::wstring::basic_string(this, *(wchar_t **)(*(_DWORD *)(a2 + 8) + 40), (int)v4); + return this; +} +// 47A4A0: using guessed type int var_D[3]; + +//----- (0047A4D0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::wstring::basic_string(this, *(wchar_t **)(*(_DWORD *)(a2 + 8) + 32), (int)v4); + return this; +} +// 47A4D0: using guessed type int var_D[3]; + +//----- (0047A500) -------------------------------------------------------- +int __fastcall std::moneypunct::do_thousands_sep(int a1) +{ + return *(unsigned __int16 *)(*(_DWORD *)(a1 + 8) + 20); +} + +//----- (0047A510) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 16); + if ( (char *)v3 == (char *)std::moneypunct::do_grouping ) + std::string::string(this, *(char **)(a2[2] + 8), (int)v5); + else + v3(a2); + return this; +} +// 47A510: using guessed type int var_D[3]; + +//----- (0047A580) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_date_formats(_DWORD *this, _DWORD *a2) +{ + int v2; // edx + _DWORD *result; // eax + + v2 = this[2]; + result = a2; + *a2 = *(_DWORD *)(v2 + 8); + a2[1] = *(_DWORD *)(v2 + 12); + return result; +} + +//----- (0047A5A0) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_time_formats(_DWORD *this, _DWORD *a2) +{ + int v2; // edx + _DWORD *result; // eax + + v2 = this[2]; + result = a2; + *a2 = *(_DWORD *)(v2 + 16); + a2[1] = *(_DWORD *)(v2 + 20); + return result; +} + +//----- (0047A5C0) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_days_abbreviated(_DWORD *this, _DWORD *a2) +{ + _DWORD *v2; // edx + _DWORD *result; // eax + + v2 = (_DWORD *)this[2]; + result = a2; + *a2 = v2[18]; + a2[1] = v2[19]; + a2[2] = v2[20]; + a2[3] = v2[21]; + a2[4] = v2[22]; + a2[5] = v2[23]; + a2[6] = v2[24]; + return result; +} + +//----- (0047A600) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_date_time_formats(_DWORD *this, _DWORD *a2) +{ + int v2; // edx + _DWORD *result; // eax + + v2 = this[2]; + result = a2; + *a2 = *(_DWORD *)(v2 + 24); + a2[1] = *(_DWORD *)(v2 + 28); + return result; +} + +//----- (0047A620) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_months_abbreviated(_DWORD *this, _DWORD *a2) +{ + _DWORD *v2; // edx + _DWORD *result; // eax + + v2 = (_DWORD *)this[2]; + result = a2; + *a2 = v2[37]; + a2[1] = v2[38]; + a2[2] = v2[39]; + a2[3] = v2[40]; + a2[4] = v2[41]; + a2[5] = v2[42]; + a2[6] = v2[43]; + a2[7] = v2[44]; + a2[8] = v2[45]; + a2[9] = v2[46]; + a2[10] = v2[47]; + a2[11] = v2[48]; + return result; +} + +//----- (0047A6A0) -------------------------------------------------------- +void __thiscall std::__timepunct::_M_put( + const char **this, + char *Buffer, + size_t SizeInBytes, + char *Format, + struct tm *Tm) +{ + char *v5; // eax + char *v6; // edx + char *Src; // [esp+10h] [ebp-4Ch] + char *Srca; // [esp+10h] [ebp-4Ch] + unsigned int Size; // [esp+14h] [ebp-48h] + size_t v10; // [esp+14h] [ebp-48h] + + Src = setlocale(0, 0); + Size = strlen(Src) + 1; + v5 = (char *)operator new[](Size); + v6 = Src; + Srca = v5; + memcpy(v5, v6, Size); + setlocale(0, this[4]); + v10 = strftime(Buffer, SizeInBytes, Format, Tm); + setlocale(0, Srca); + operator delete[](Srca); + if ( !v10 ) + *Buffer = 0; +} + +//----- (0047A7D0) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_days(_DWORD *this, _DWORD *a2) +{ + _DWORD *v2; // edx + _DWORD *result; // eax + + v2 = (_DWORD *)this[2]; + result = a2; + *a2 = v2[11]; + a2[1] = v2[12]; + a2[2] = v2[13]; + a2[3] = v2[14]; + a2[4] = v2[15]; + a2[5] = v2[16]; + a2[6] = v2[17]; + return result; +} + +//----- (0047A810) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_am_pm(_DWORD *this, _DWORD *a2) +{ + int v2; // edx + _DWORD *result; // eax + + v2 = this[2]; + result = a2; + *a2 = *(_DWORD *)(v2 + 32); + a2[1] = *(_DWORD *)(v2 + 36); + return result; +} + +//----- (0047A830) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_months(_DWORD *this, _DWORD *a2) +{ + _DWORD *v2; // edx + _DWORD *result; // eax + + v2 = (_DWORD *)this[2]; + result = a2; + *a2 = v2[25]; + a2[1] = v2[26]; + a2[2] = v2[27]; + a2[3] = v2[28]; + a2[4] = v2[29]; + a2[5] = v2[30]; + a2[6] = v2[31]; + a2[7] = v2[32]; + a2[8] = v2[33]; + a2[9] = v2[34]; + a2[10] = v2[35]; + a2[11] = v2[36]; + return result; +} + +//----- (0047A8A0) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_date_formats(_DWORD *this, _DWORD *a2) +{ + int v2; // edx + _DWORD *result; // eax + + v2 = this[2]; + result = a2; + *a2 = *(_DWORD *)(v2 + 8); + a2[1] = *(_DWORD *)(v2 + 12); + return result; +} + +//----- (0047A8C0) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_time_formats(_DWORD *this, _DWORD *a2) +{ + int v2; // edx + _DWORD *result; // eax + + v2 = this[2]; + result = a2; + *a2 = *(_DWORD *)(v2 + 16); + a2[1] = *(_DWORD *)(v2 + 20); + return result; +} + +//----- (0047A8E0) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_days_abbreviated(_DWORD *this, _DWORD *a2) +{ + _DWORD *v2; // edx + _DWORD *result; // eax + + v2 = (_DWORD *)this[2]; + result = a2; + *a2 = v2[18]; + a2[1] = v2[19]; + a2[2] = v2[20]; + a2[3] = v2[21]; + a2[4] = v2[22]; + a2[5] = v2[23]; + a2[6] = v2[24]; + return result; +} + +//----- (0047A920) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_date_time_formats(_DWORD *this, _DWORD *a2) +{ + int v2; // edx + _DWORD *result; // eax + + v2 = this[2]; + result = a2; + *a2 = *(_DWORD *)(v2 + 24); + a2[1] = *(_DWORD *)(v2 + 28); + return result; +} + +//----- (0047A940) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_months_abbreviated(_DWORD *this, _DWORD *a2) +{ + _DWORD *v2; // edx + _DWORD *result; // eax + + v2 = (_DWORD *)this[2]; + result = a2; + *a2 = v2[37]; + a2[1] = v2[38]; + a2[2] = v2[39]; + a2[3] = v2[40]; + a2[4] = v2[41]; + a2[5] = v2[42]; + a2[6] = v2[43]; + a2[7] = v2[44]; + a2[8] = v2[45]; + a2[9] = v2[46]; + a2[10] = v2[47]; + a2[11] = v2[48]; + return result; +} + +//----- (0047A9C0) -------------------------------------------------------- +void __thiscall std::__timepunct::_M_put( + const char **this, + wchar_t *Buffer, + size_t SizeInWords, + wchar_t *Format, + struct tm *Tm) +{ + char *v5; // eax + char *v6; // edx + char *Src; // [esp+10h] [ebp-4Ch] + char *Srca; // [esp+10h] [ebp-4Ch] + unsigned int Size; // [esp+14h] [ebp-48h] + size_t v10; // [esp+14h] [ebp-48h] + + Src = setlocale(0, 0); + Size = strlen(Src) + 1; + v5 = (char *)operator new[](Size); + v6 = Src; + Srca = v5; + memcpy(v5, v6, Size); + setlocale(0, this[4]); + v10 = wcsftime(Buffer, SizeInWords, Format, Tm); + setlocale(0, Srca); + operator delete[](Srca); + if ( !v10 ) + *Buffer = 0; +} + +//----- (0047AAF0) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_days(_DWORD *this, _DWORD *a2) +{ + _DWORD *v2; // edx + _DWORD *result; // eax + + v2 = (_DWORD *)this[2]; + result = a2; + *a2 = v2[11]; + a2[1] = v2[12]; + a2[2] = v2[13]; + a2[3] = v2[14]; + a2[4] = v2[15]; + a2[5] = v2[16]; + a2[6] = v2[17]; + return result; +} + +//----- (0047AB30) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_am_pm(_DWORD *this, _DWORD *a2) +{ + int v2; // edx + _DWORD *result; // eax + + v2 = this[2]; + result = a2; + *a2 = *(_DWORD *)(v2 + 32); + a2[1] = *(_DWORD *)(v2 + 36); + return result; +} + +//----- (0047AB50) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_months(_DWORD *this, _DWORD *a2) +{ + _DWORD *v2; // edx + _DWORD *result; // eax + + v2 = (_DWORD *)this[2]; + result = a2; + *a2 = v2[25]; + a2[1] = v2[26]; + a2[2] = v2[27]; + a2[3] = v2[28]; + a2[4] = v2[29]; + a2[5] = v2[30]; + a2[6] = v2[31]; + a2[7] = v2[32]; + a2[8] = v2[33]; + a2[9] = v2[34]; + a2[10] = v2[35]; + a2[11] = v2[36]; + return result; +} + +//----- (0047ABB0) -------------------------------------------------------- +struct _Unwind_Exception *__stdcall std::__use_cache>::operator()(int *a1) +{ + unsigned int v2; // [esp+8h] [ebp-60h] + std::locale::_Impl *v3; // [esp+1Ch] [ebp-4Ch] + std::locale::facet *v4; // [esp+20h] [ebp-48h] + int v5; // [esp+24h] [ebp-44h] + struct _Unwind_Exception *lpuexcpt; // [esp+28h] [ebp-40h] + + v4 = (std::locale::facet *)std::locale::id::_M_id(&std::numpunct::id); + v5 = *(_DWORD *)(*a1 + 12) + 4 * (_DWORD)v4; + lpuexcpt = *(struct _Unwind_Exception **)v5; + if ( !*(_DWORD *)v5 ) + { + v3 = (std::locale::_Impl *)operator new(0x68u); + *((_DWORD *)v3 + 1) = 0; + *(_DWORD *)v3 = &off_5605B0; + *((_DWORD *)v3 + 2) = 0; + *((_DWORD *)v3 + 3) = 0; + *((_BYTE *)v3 + 16) = 0; + *((_DWORD *)v3 + 5) = 0; + *((_DWORD *)v3 + 6) = 0; + *((_DWORD *)v3 + 7) = 0; + *((_DWORD *)v3 + 8) = 0; + *((_WORD *)v3 + 18) = 0; + *((_BYTE *)v3 + 100) = 0; + std::__numpunct_cache::_M_cache((int)v3, (int)a1); + std::locale::_Impl::_M_install_cache(*a1, v3, v4, v2); + return *(struct _Unwind_Exception **)v5; + } + return lpuexcpt; +} +// 47ACA3: variable 'v2' is possibly undefined +// 53F788: using guessed type signed __int32 std::numpunct::id; +// 5605B0: using guessed type int (*off_5605B0)(); + +//----- (0047AD20) -------------------------------------------------------- +struct _Unwind_Exception *__stdcall std::__use_cache>::operator()(int *a1) +{ + _DWORD *v2; // eax + unsigned int v3; // [esp+8h] [ebp-60h] + std::locale::_Impl *v4; // [esp+1Ch] [ebp-4Ch] + std::locale::facet *v5; // [esp+20h] [ebp-48h] + int v6; // [esp+24h] [ebp-44h] + struct _Unwind_Exception *lpuexcpt; // [esp+28h] [ebp-40h] + + v5 = (std::locale::facet *)std::locale::id::_M_id(&std::numpunct::id); + v6 = *(_DWORD *)(*a1 + 12) + 4 * (_DWORD)v5; + lpuexcpt = *(struct _Unwind_Exception **)v6; + if ( !*(_DWORD *)v6 ) + { + v2 = operator new(0xA8u); + v2[1] = 0; + *v2 = &off_5605C0; + v2[2] = 0; + v2[3] = 0; + *((_BYTE *)v2 + 16) = 0; + v2[5] = 0; + v2[6] = 0; + v2[7] = 0; + v2[8] = 0; + v2[9] = 0; + *((_BYTE *)v2 + 164) = 0; + v4 = (std::locale::_Impl *)v2; + std::__numpunct_cache::_M_cache((int)v2, (int)a1); + std::locale::_Impl::_M_install_cache(*a1, v4, v5, v3); + return *(struct _Unwind_Exception **)v6; + } + return lpuexcpt; +} +// 47AE17: variable 'v3' is possibly undefined +// 53F78C: using guessed type signed __int32 std::numpunct::id; +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (0047AE90) -------------------------------------------------------- +int __fastcall std::runtime_error::what(int a1) +{ + return *(_DWORD *)(a1 + 4); +} + +//----- (0047AEA0) -------------------------------------------------------- +bool __fastcall std::__basic_file::is_open(_DWORD *a1) +{ + return *a1 != 0; +} + +//----- (0047AEB0) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_compare( + int *this, + int a2, + int a3, + int a4, + int a5) +{ + int v6; // [esp+0h] [ebp-2Ch] + + LOBYTE(v6) = 0; + return std::__facet_shims::__collate_compare(v6, this[3], a2, a3, a4, a5); +} +// 47AEDE: variable 'v6' is possibly undefined + +//----- (0047AEF0) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_compare( + int *this, + int a2, + int a3, + int a4, + int a5) +{ + int v6; // [esp+0h] [ebp-2Ch] + + LOBYTE(v6) = 0; + return std::__facet_shims::__collate_compare(v6, this[3], a2, a3, a4, a5); +} +// 47AF1E: variable 'v6' is possibly undefined + +//----- (0047AF30) -------------------------------------------------------- +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_transform( + _DWORD *this, + int a2, + int a3, + int a4) +{ + int v5; // [esp+0h] [ebp-88h] + void *v7; // [esp+63h] [ebp-25h] BYREF + unsigned __int8 *v8[6]; // [esp+64h] [ebp-24h] BYREF + void (__cdecl *v9)(unsigned __int8 **); // [esp+7Ch] [ebp-Ch] + + v9 = 0; + LOBYTE(v5) = 0; + std::__facet_shims::__collate_transform(v5, *(_DWORD *)(a2 + 12), v8, a3, a4); + if ( !v9 ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + std::string::string(this, v8[0], (size_t)v8[1], (int)&v7); + if ( v9 ) + v9(v8); + return this; +} +// 47AF93: variable 'v5' is possibly undefined + +//----- (0047B030) -------------------------------------------------------- +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_transform( + _DWORD *this, + int a2, + std::string *a3, + int a4) +{ + _BYTE *v4; // eax + int v6; // [esp+0h] [ebp-88h] + void *v8[6]; // [esp+64h] [ebp-24h] BYREF + void (__cdecl *v9)(void **); // [esp+7Ch] [ebp-Ch] + + v9 = 0; + LOBYTE(v6) = 0; + std::__facet_shims::__collate_transform(v6, *(_DWORD *)(a2 + 12), v8, a3, a4); + if ( !v9 ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + v4 = v8[0]; + *this = this + 2; + std::string::_M_construct(this, v4, (int)&v4[(unsigned int)v8[1]]); + if ( v9 ) + v9(v8); + return this; +} +// 47B093: variable 'v6' is possibly undefined + +//----- (0047B130) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_compare( + int *this, + int a2, + int a3, + int a4, + int a5) +{ + int v6; // [esp+0h] [ebp-2Ch] + + LOBYTE(v6) = 0; + return std::__facet_shims::__collate_compare(v6, this[3], a2, a3, a4, a5); +} +// 47B15E: variable 'v6' is possibly undefined + +//----- (0047B170) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_compare( + int *this, + int a2, + int a3, + int a4, + int a5) +{ + int v6; // [esp+0h] [ebp-2Ch] + + LOBYTE(v6) = 0; + return std::__facet_shims::__collate_compare(v6, this[3], a2, a3, a4, a5); +} +// 47B19E: variable 'v6' is possibly undefined + +//----- (0047B1B0) -------------------------------------------------------- +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_transform( + _DWORD *this, + int a2, + int a3, + int a4) +{ + int v5; // [esp+0h] [ebp-88h] + void *v7; // [esp+63h] [ebp-25h] BYREF + _WORD *v8[6]; // [esp+64h] [ebp-24h] BYREF + void (__cdecl *v9)(_WORD **); // [esp+7Ch] [ebp-Ch] + + v9 = 0; + LOBYTE(v5) = 0; + std::__facet_shims::__collate_transform(v5, *(_DWORD *)(a2 + 12), v8, a3, a4); + if ( !v9 ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + std::wstring::basic_string(this, v8[0], (int)v8[1], (int)&v7); + if ( v9 ) + v9(v8); + return this; +} +// 47B213: variable 'v5' is possibly undefined + +//----- (0047B2B0) -------------------------------------------------------- +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::collate_shim::do_transform( + _DWORD *this, + int a2, + int a3, + int a4) +{ + _WORD *v4; // eax + int v6; // [esp+0h] [ebp-88h] + void *v8[6]; // [esp+64h] [ebp-24h] BYREF + void (__cdecl *v9)(void **); // [esp+7Ch] [ebp-Ch] + + v9 = 0; + LOBYTE(v6) = 0; + std::__facet_shims::__collate_transform(v6, *(_DWORD *)(a2 + 12), v8, a3, a4); + if ( !v9 ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + v4 = v8[0]; + *this = this + 2; + std::wstring::_M_construct(this, v4, (int)&v4[(int)v8[1]]); + if ( v9 ) + v9(v8); + return this; +} +// 47B313: variable 'v6' is possibly undefined + +//----- (0047B3B0) -------------------------------------------------------- +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_get( + _DWORD *this, + int a2, + std::string *a3, + int a4, + int a5, + int a6) +{ + _BYTE *v6; // eax + int v8; // [esp+0h] [ebp-88h] + void *v10[6]; // [esp+64h] [ebp-24h] BYREF + void (__cdecl *v11)(void **); // [esp+7Ch] [ebp-Ch] + + v11 = 0; + LOBYTE(v8) = 0; + std::__facet_shims::__messages_get( + v8, + *(_DWORD *)(a2 + 16), + v10, + a3, + a4, + a5, + *(unsigned __int8 **)a6, + *(_DWORD *)(a6 + 4)); + if ( !v11 ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + v6 = v10[0]; + *this = this + 2; + std::string::_M_construct(this, v6, (int)&v6[(unsigned int)v10[1]]); + if ( v11 ) + v11(v10); + return this; +} +// 47B42D: variable 'v8' is possibly undefined + +//----- (0047B4D0) -------------------------------------------------------- +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_get( + _DWORD *this, + int a2, + int a3, + int a4, + int a5, + _BYTE **a6) +{ + int v7; // [esp+0h] [ebp-88h] + void *v9; // [esp+63h] [ebp-25h] BYREF + unsigned __int8 *v10[6]; // [esp+64h] [ebp-24h] BYREF + void (__cdecl *v11)(unsigned __int8 **); // [esp+7Ch] [ebp-Ch] + + v11 = 0; + LOBYTE(v7) = 0; + std::__facet_shims::__messages_get(v7, *(_DWORD *)(a2 + 16), v10, a3, a4, a5, *a6, *((_DWORD *)*a6 - 3)); + if ( !v11 ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + std::string::string(this, v10[0], (size_t)v10[1], (int)&v9); + if ( v11 ) + v11(v10); + return this; +} +// 47B54A: variable 'v7' is possibly undefined + +//----- (0047B5E0) -------------------------------------------------------- +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_open( + int *this, + int a2, + int a3) +{ + int v4; // [esp+0h] [ebp-2Ch] + + LOBYTE(v4) = 0; + return std::__facet_shims::__messages_open(v4, this[4], *(unsigned __int8 **)a2, *(_DWORD *)(a2 + 4), a3); +} +// 47B607: variable 'v4' is possibly undefined + +//----- (0047B620) -------------------------------------------------------- +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_open( + int *this, + _BYTE **a2, + int a3) +{ + int v4; // [esp+0h] [ebp-2Ch] + + LOBYTE(v4) = 0; + return std::__facet_shims::__messages_open(v4, this[4], *a2, *((_DWORD *)*a2 - 3), a3); +} +// 47B647: variable 'v4' is possibly undefined + +//----- (0047B660) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_close(int *this, int a2) +{ + int v3; // [esp+0h] [ebp-1Ch] + + LOBYTE(v3) = 0; + return std::__facet_shims::__messages_close(v3, this[4], a2); +} +// 47B676: variable 'v3' is possibly undefined + +//----- (0047B690) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_close(int *this, int a2) +{ + int v3; // [esp+0h] [ebp-1Ch] + + LOBYTE(v3) = 0; + return std::__facet_shims::__messages_close(v3, this[4], a2); +} +// 47B6A6: variable 'v3' is possibly undefined + +//----- (0047B6C0) -------------------------------------------------------- +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_get( + _DWORD *this, + int a2, + int a3, + int a4, + int a5, + int a6) +{ + _WORD *v6; // eax + int v8; // [esp+0h] [ebp-88h] + void *v10[6]; // [esp+64h] [ebp-24h] BYREF + void (__cdecl *v11)(void **); // [esp+7Ch] [ebp-Ch] + + v11 = 0; + LOBYTE(v8) = 0; + std::__facet_shims::__messages_get( + v8, + *(_DWORD *)(a2 + 16), + v10, + a3, + a4, + a5, + *(_WORD **)a6, + *(_DWORD *)(a6 + 4)); + if ( !v11 ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + v6 = v10[0]; + *this = this + 2; + std::wstring::_M_construct(this, v6, (int)&v6[(int)v10[1]]); + if ( v11 ) + v11(v10); + return this; +} +// 47B73D: variable 'v8' is possibly undefined + +//----- (0047B7E0) -------------------------------------------------------- +_DWORD *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_get( + _DWORD *this, + int a2, + int a3, + int a4, + int a5, + _WORD **a6) +{ + int v7; // [esp+0h] [ebp-88h] + void *v9; // [esp+63h] [ebp-25h] BYREF + _WORD *v10[6]; // [esp+64h] [ebp-24h] BYREF + void (__cdecl *v11)(_WORD **); // [esp+7Ch] [ebp-Ch] + + v11 = 0; + LOBYTE(v7) = 0; + std::__facet_shims::__messages_get(v7, *(_DWORD *)(a2 + 16), v10, a3, a4, a5, *a6, *((_DWORD *)*a6 - 3)); + if ( !v11 ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + std::wstring::basic_string(this, v10[0], (int)v10[1], (int)&v9); + if ( v11 ) + v11(v10); + return this; +} +// 47B85A: variable 'v7' is possibly undefined + +//----- (0047B8F0) -------------------------------------------------------- +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_open( + int *this, + int a2, + int a3) +{ + int v4; // [esp+0h] [ebp-2Ch] + + LOBYTE(v4) = 0; + return std::__facet_shims::__messages_open(v4, this[4], *(unsigned __int8 **)a2, *(_DWORD *)(a2 + 4), a3); +} +// 47B917: variable 'v4' is possibly undefined + +//----- (0047B930) -------------------------------------------------------- +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_open( + int *this, + _BYTE **a2, + int a3) +{ + int v4; // [esp+0h] [ebp-2Ch] + + LOBYTE(v4) = 0; + return std::__facet_shims::__messages_open(v4, this[4], *a2, *((_DWORD *)*a2 - 3), a3); +} +// 47B957: variable 'v4' is possibly undefined + +//----- (0047B970) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_close(int *this, int a2) +{ + int v3; // [esp+0h] [ebp-1Ch] + + LOBYTE(v3) = 0; + return std::__facet_shims::__messages_close(v3, this[4], a2); +} +// 47B986: variable 'v3' is possibly undefined + +//----- (0047B9A0) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::messages_shim::do_close(int *this, int a2) +{ + int v3; // [esp+0h] [ebp-1Ch] + + LOBYTE(v3) = 0; + return std::__facet_shims::__messages_close(v3, this[4], a2); +} +// 47B9B6: variable 'v3' is possibly undefined + +//----- (0047B9D0) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_date( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 100); +} +// 47BA1E: variable 'v9' is possibly undefined + +//----- (0047BA30) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_date( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 100); +} +// 47BA7E: variable 'v9' is possibly undefined + +//----- (0047BA90) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_time( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 116); +} +// 47BADE: variable 'v9' is possibly undefined + +//----- (0047BAF0) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_time( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 116); +} +// 47BB3E: variable 'v9' is possibly undefined + +//----- (0047BB50) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_year( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 121); +} +// 47BB9E: variable 'v9' is possibly undefined + +//----- (0047BBB0) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_year( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 121); +} +// 47BBFE: variable 'v9' is possibly undefined + +//----- (0047BC10) -------------------------------------------------------- +int __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::do_date_order(int a1) +{ + int v2; // [esp+0h] [ebp-1Ch] + + LOBYTE(v2) = 0; + return std::__facet_shims::__time_get_dateorder(v2, *(_DWORD *)(a1 + 8)); +} +// 47BC1E: variable 'v2' is possibly undefined + +//----- (0047BC30) -------------------------------------------------------- +int __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::do_date_order(int a1) +{ + int v2; // [esp+0h] [ebp-1Ch] + + LOBYTE(v2) = 0; + return std::__facet_shims::__time_get_dateorder(v2, *(_DWORD *)(a1 + 8)); +} +// 47BC3E: variable 'v2' is possibly undefined + +//----- (0047BC50) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_weekday( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 119); +} +// 47BC9E: variable 'v9' is possibly undefined + +//----- (0047BCB0) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_weekday( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 119); +} +// 47BCFE: variable 'v9' is possibly undefined + +//----- (0047BD10) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_monthname( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 109); +} +// 47BD5E: variable 'v9' is possibly undefined + +//----- (0047BD70) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_monthname( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 109); +} +// 47BDBE: variable 'v9' is possibly undefined + +//----- (0047BDD0) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_date( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 100); +} +// 47BE1E: variable 'v9' is possibly undefined + +//----- (0047BE30) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_date( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 100); +} +// 47BE7E: variable 'v9' is possibly undefined + +//----- (0047BE90) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_time( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 116); +} +// 47BEDE: variable 'v9' is possibly undefined + +//----- (0047BEF0) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_time( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 116); +} +// 47BF3E: variable 'v9' is possibly undefined + +//----- (0047BF50) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_year( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 121); +} +// 47BF9E: variable 'v9' is possibly undefined + +//----- (0047BFB0) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_year( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 121); +} +// 47BFFE: variable 'v9' is possibly undefined + +//----- (0047C010) -------------------------------------------------------- +int __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::do_date_order(int a1) +{ + int v2; // [esp+0h] [ebp-1Ch] + + LOBYTE(v2) = 0; + return std::__facet_shims::__time_get_dateorder(v2, *(_DWORD *)(a1 + 8)); +} +// 47C01E: variable 'v2' is possibly undefined + +//----- (0047C030) -------------------------------------------------------- +int __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::do_date_order(int a1) +{ + int v2; // [esp+0h] [ebp-1Ch] + + LOBYTE(v2) = 0; + return std::__facet_shims::__time_get_dateorder(v2, *(_DWORD *)(a1 + 8)); +} +// 47C03E: variable 'v2' is possibly undefined + +//----- (0047C050) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_weekday( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 119); +} +// 47C09E: variable 'v9' is possibly undefined + +//----- (0047C0B0) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_weekday( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 119); +} +// 47C0FE: variable 'v9' is possibly undefined + +//----- (0047C110) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_monthname( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 109); +} +// 47C15E: variable 'v9' is possibly undefined + +//----- (0047C170) -------------------------------------------------------- +int __thiscall std::__facet_shims::`anonymous namespace'::time_get_shim::do_get_monthname( + int *this, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8) +{ + int v9; // [esp+0h] [ebp-3Ch] + + LOBYTE(v9) = 0; + return std::__facet_shims::__time_get(v9, this[2], a2, a3, a4, a5, a6, a7, a8, 109); +} +// 47C1BE: variable 'v9' is possibly undefined + +//----- (0047C1D0) -------------------------------------------------------- +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get( + int *this, + __int64 a2, + int a3, + int a4, + unsigned __int8 a5, + int a6, + int *a7, + void **a8) +{ + void (__cdecl *v8)(void **); // eax + size_t v10; // edx + int *v11; // eax + int v12; // ebx + int v13; // esi + int v14; // [esp+0h] [ebp-C8h] + int v15; // [esp+78h] [ebp-50h] BYREF + void *Block; // [esp+7Ch] [ebp-4Ch] BYREF + size_t Size; // [esp+80h] [ebp-48h] + int v18[4]; // [esp+84h] [ebp-44h] BYREF + void *v19[6]; // [esp+94h] [ebp-34h] BYREF + void (__cdecl *v20)(void **); // [esp+ACh] [ebp-1Ch] + __int64 v21; // [esp+D0h] [ebp+8h] + + v20 = 0; + v15 = 0; + LOBYTE(v14) = 0; + v21 = std::__facet_shims::__money_get(v14, this[2], a2, a3, a4, a5, a6, &v15, 0, v19); + v8 = v20; + if ( v15 ) + { + *a7 = v15; + goto LABEL_3; + } + if ( !v20 ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + Block = v18; + std::string::_M_construct(&Block, (_BYTE *)v19[0], (int)v19[0] + (unsigned int)v19[1]); + v10 = Size; + v11 = (int *)*a8; + if ( Block == v18 ) + { + if ( Size ) + { + if ( Size == 1 ) + *(_BYTE *)v11 = v18[0]; + else + memcpy(v11, v18, Size); + v10 = Size; + v11 = (int *)*a8; + } + a8[1] = (void *)v10; + *((_BYTE *)v11 + v10) = 0; + v11 = (int *)Block; + goto LABEL_11; + } + v12 = v18[0]; + if ( v11 == (int *)(a8 + 2) ) + { + *a8 = Block; + a8[1] = (void *)v10; + a8[2] = (void *)v12; + goto LABEL_15; + } + v13 = (int)a8[2]; + *a8 = Block; + a8[1] = (void *)v10; + a8[2] = (void *)v12; + if ( !v11 ) + { +LABEL_15: + Block = v18; + v11 = v18; + goto LABEL_11; + } + Block = v11; + v18[0] = v13; +LABEL_11: + Size = 0; + *(_BYTE *)v11 = 0; + if ( Block != v18 ) + operator delete(Block); + v8 = v20; +LABEL_3: + if ( v8 ) + v8(v19); + return v21; +} +// 47C281: variable 'v14' is possibly undefined + +//----- (0047C430) -------------------------------------------------------- +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get( + _DWORD *this, + __int64 a2, + int a3, + int a4, + unsigned __int8 a5, + int a6, + _DWORD *a7, + int *a8) +{ + void (__cdecl *v8)(void **); // eax + int v10; // ecx + int v11; // eax + int v12; // [esp+0h] [ebp-A8h] + std::string *v13; // [esp+4h] [ebp-A4h] + char v14[5]; // [esp+7Bh] [ebp-2Dh] BYREF + int v15; // [esp+80h] [ebp-28h] BYREF + void *v16[6]; // [esp+84h] [ebp-24h] BYREF + void (__cdecl *v17)(void **); // [esp+9Ch] [ebp-Ch] + __int64 v18; // [esp+B0h] [ebp+8h] + + v17 = 0; + *(_DWORD *)&v14[1] = 0; + LOBYTE(v12) = 0; + v18 = std::__facet_shims::__money_get(v12, (int *)this[2], a2, a3, a4, a5, a6, &v14[1], 0, v16); + v8 = v17; + if ( *(_DWORD *)&v14[1] ) + { + *a7 = *(_DWORD *)&v14[1]; + } + else + { + if ( !v17 ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + std::string::string(&v15, (unsigned __int8 *)v16[0], (size_t)v16[1], (int)v14); + std::string::swap(a8, (std::string *)&v15, v13); + v10 = v15; + if ( _CRT_MT ) + { + v11 = _InterlockedExchangeAdd((volatile signed __int32 *)(v15 - 4), 0xFFFFFFFF); + } + else + { + v11 = *(_DWORD *)(v15 - 4); + *(_DWORD *)(v15 - 4) = v11 - 1; + } + if ( v11 <= 0 ) + std::string::_Rep::_M_destroy((void *)(v10 - 12), (int)v14); + v8 = v17; + } + if ( v8 ) + v8(v16); + return v18; +} +// 47C4CC: variable 'v12' is possibly undefined +// 47C543: variable 'v13' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (0047C5D0) -------------------------------------------------------- +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get( + _DWORD *this, + __int64 a2, + int a3, + int a4, + unsigned __int8 a5, + int a6, + _DWORD *a7, + long double *a8) +{ + __int64 result; // rax + int v9; // [esp+0h] [ebp-5Ch] + int *v10; // [esp+4h] [ebp-58h] + int v11; // [esp+3Ch] [ebp-20h] BYREF + long double v12[2]; // [esp+40h] [ebp-1Ch] BYREF + + LOBYTE(v9) = 0; + v10 = (int *)this[2]; + v11 = 0; + result = std::__facet_shims::__money_get(v9, v10, a2, a3, a4, a5, a6, &v11, (int)v12, 0); + if ( v11 ) + *a7 = v11; + else + *a8 = v12[0]; + return result; +} +// 47C631: variable 'v9' is possibly undefined +// 47C5D0: using guessed type long double var_1C[2]; + +//----- (0047C660) -------------------------------------------------------- +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get( + _DWORD *this, + __int64 a2, + int a3, + int a4, + unsigned __int8 a5, + int a6, + int *a7, + long double *a8) +{ + __int64 result; // rax + int v9; // [esp+0h] [ebp-5Ch] + int v10; // [esp+4h] [ebp-58h] + int v11; // [esp+3Ch] [ebp-20h] BYREF + long double v12[2]; // [esp+40h] [ebp-1Ch] BYREF + + LOBYTE(v9) = 0; + v10 = this[2]; + v11 = 0; + result = std::__facet_shims::__money_get(v9, v10, a2, a3, a4, a5, a6, &v11, (int)v12, 0); + if ( v11 ) + *a7 = v11; + else + *a8 = v12[0]; + return result; +} +// 47C6C1: variable 'v9' is possibly undefined +// 47C660: using guessed type long double var_1C[2]; + +//----- (0047C6F0) -------------------------------------------------------- +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get( + _DWORD *this, + int a2, + int a3, + int a4, + int a5, + unsigned __int8 a6, + int a7, + _DWORD *a8, + int a9) +{ + int v9; // eax + void (__cdecl *v10)(void **); // eax + int *v12; // ebx + int v13; // edx + int *v14; // eax + int v15; // ebx + int v16; // esi + int v17; // ecx + int v18; // [esp+0h] [ebp-D8h] + struct _Unwind_Exception *lpuexcpt; // [esp+40h] [ebp-98h] + int v20; // [esp+88h] [ebp-50h] BYREF + int *v21; // [esp+8Ch] [ebp-4Ch] BYREF + int v22; // [esp+90h] [ebp-48h] + int Src[4]; // [esp+94h] [ebp-44h] BYREF + void *v24[6]; // [esp+A4h] [ebp-34h] BYREF + void (__cdecl *v25)(void **); // [esp+BCh] [ebp-1Ch] + + v9 = this[2]; + LOBYTE(v18) = 0; + v25 = 0; + v20 = 0; + lpuexcpt = std::__facet_shims::__money_get(v18, v9, a2, a3, a4, a5, a6, a7, &v20, 0, v24); + v10 = v25; + if ( v20 ) + { + *a8 = v20; + goto LABEL_3; + } + if ( !v25 ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + v21 = Src; + std::wstring::_M_construct(&v21, (_WORD *)v24[0], (int)v24[0] + 2 * (int)v24[1]); + v12 = Src; + v13 = v22; + v14 = *(int **)a9; + if ( v21 == Src ) + { + v17 = 2 * v22; + if ( v22 ) + { + if ( v22 == 1 ) + { + *(_WORD *)v14 = Src[0]; + v17 = 2; + } + else + { + memcpy(v14, Src, 2 * v22); + v13 = v22; + v12 = v21; + v14 = *(int **)a9; + v17 = 2 * v22; + } + } + *(_DWORD *)(a9 + 4) = v13; + *(_WORD *)((char *)v14 + v17) = 0; + v14 = v12; + goto LABEL_11; + } + v15 = Src[0]; + if ( v14 == (int *)(a9 + 8) ) + { + *(_DWORD *)a9 = v21; + *(_DWORD *)(a9 + 4) = v13; + *(_DWORD *)(a9 + 8) = v15; + } + else + { + v16 = *(_DWORD *)(a9 + 8); + *(_DWORD *)a9 = v21; + *(_DWORD *)(a9 + 4) = v13; + *(_DWORD *)(a9 + 8) = v15; + if ( v14 ) + { + v21 = v14; + Src[0] = v16; +LABEL_11: + v22 = 0; + *(_WORD *)v14 = 0; + if ( v14 != Src ) + operator delete(v14); + } + } + v10 = v25; +LABEL_3: + if ( v10 ) + v10(v24); + return lpuexcpt; +} +// 47C7B9: variable 'v18' is possibly undefined + +//----- (0047C970) -------------------------------------------------------- +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get( + _DWORD *this, + int a2, + int a3, + int a4, + int a5, + unsigned __int8 a6, + int a7, + _DWORD *a8, + int *a9) +{ + int *v9; // eax + void (__cdecl *v10)(void **); // eax + int v12; // ecx + int v13; // eax + int v14; // [esp+0h] [ebp-B8h] + struct _Unwind_Exception *lpuexcpt; // [esp+40h] [ebp-78h] + char v16[5]; // [esp+8Bh] [ebp-2Dh] BYREF + int v17; // [esp+90h] [ebp-28h] BYREF + void *v18[6]; // [esp+94h] [ebp-24h] BYREF + void (__cdecl *v19)(void **); // [esp+ACh] [ebp-Ch] + + v9 = (int *)this[2]; + LOBYTE(v14) = 0; + v19 = 0; + *(_DWORD *)&v16[1] = 0; + lpuexcpt = std::__facet_shims::__money_get(v14, v9, a2, a3, a4, a5, a6, a7, &v16[1], 0, v18); + v10 = v19; + if ( *(_DWORD *)&v16[1] ) + { + *a8 = *(_DWORD *)&v16[1]; + } + else + { + if ( !v19 ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + std::wstring::basic_string(&v17, (_WORD *)v18[0], (int)v18[1], (int)v16); + std::wstring::swap(a9, &v17); + v12 = v17; + if ( _CRT_MT ) + { + v13 = _InterlockedExchangeAdd((volatile signed __int32 *)(v17 - 4), 0xFFFFFFFF); + } + else + { + v13 = *(_DWORD *)(v17 - 4); + *(_DWORD *)(v17 - 4) = v13 - 1; + } + if ( v13 <= 0 ) + std::wstring::_Rep::_M_destroy((void *)(v12 - 12), (int)v16); + v10 = v19; + } + if ( v10 ) + v10(v18); + return lpuexcpt; +} +// 47CA1F: variable 'v14' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (0047CB40) -------------------------------------------------------- +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get( + _DWORD *this, + int a2, + int a3, + int a4, + int a5, + unsigned __int8 a6, + int a7, + _DWORD *a8, + long double *a9) +{ + struct _Unwind_Exception *v9; // ecx + int v11; // [esp+0h] [ebp-6Ch] + int *v12; // [esp+4h] [ebp-68h] + int v13; // [esp+4Ch] [ebp-20h] BYREF + long double v14[2]; // [esp+50h] [ebp-1Ch] BYREF + + LOBYTE(v11) = 0; + v12 = (int *)this[2]; + v13 = 0; + v9 = std::__facet_shims::__money_get(v11, v12, a2, a3, a4, a5, a6, a7, &v13, (int)v14, 0); + if ( v13 ) + *a8 = v13; + else + *a9 = v14[0]; + return v9; +} +// 47CBAD: variable 'v11' is possibly undefined +// 47CB40: using guessed type long double var_1C[2]; + +//----- (0047CC00) -------------------------------------------------------- +struct _Unwind_Exception *__thiscall std::__facet_shims::`anonymous namespace'::money_get_shim::do_get( + _DWORD *this, + int a2, + int a3, + int a4, + int a5, + unsigned __int8 a6, + int a7, + _DWORD *a8, + long double *a9) +{ + struct _Unwind_Exception *v9; // ecx + int v11; // [esp+0h] [ebp-6Ch] + int v12; // [esp+4h] [ebp-68h] + int v13; // [esp+4Ch] [ebp-20h] BYREF + long double v14[2]; // [esp+50h] [ebp-1Ch] BYREF + + LOBYTE(v11) = 0; + v12 = this[2]; + v13 = 0; + v9 = std::__facet_shims::__money_get(v11, v12, a2, a3, a4, a5, a6, a7, &v13, (int)v14, 0); + if ( v13 ) + *a8 = v13; + else + *a9 = v14[0]; + return v9; +} +// 47CC6D: variable 'v11' is possibly undefined +// 47CC00: using guessed type long double var_1C[2]; + +//----- (0047CCC0) -------------------------------------------------------- +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put( + int *this, + int a2, + int a3, + unsigned __int8 a4, + int a5, + char a6, + int a7) +{ + int *v7; // eax + _BYTE *v8; // edx + size_t v9; // ebx + int v11; // [esp+0h] [ebp-A8h] + void *Src; // [esp+30h] [ebp-78h] + int Size; // [esp+40h] [ebp-68h] + __int64 Sizea; // [esp+40h] [ebp-68h] + int v16; // [esp+80h] [ebp-28h] BYREF + int v17[2]; // [esp+84h] [ebp-24h] BYREF + int v18[4]; // [esp+8Ch] [ebp-1Ch] BYREF + void (__cdecl *v19)(void **); // [esp+9Ch] [ebp-Ch] + + v7 = v18; + v19 = 0; + v8 = *(_BYTE **)a7; + v9 = *(_DWORD *)(a7 + 4); + v17[0] = (int)v18; + Src = v8; + Size = v9; + if ( &v8[v9] && !v8 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v16 = v9; + if ( v9 > 0xF ) + { + v7 = (int *)std::string::_M_create((unsigned int *)&v16, 0); + v17[0] = (int)v7; + v18[0] = v16; +LABEL_12: + memcpy(v7, Src, v9); + Size = v16; + v7 = (int *)v17[0]; + goto LABEL_6; + } + if ( v9 == 1 ) + { + LOBYTE(v18[0]) = *v8; + goto LABEL_6; + } + if ( v9 ) + goto LABEL_12; +LABEL_6: + v17[1] = Size; + *((_BYTE *)v7 + Size) = 0; + v19 = std::__facet_shims::`anonymous namespace'::__destroy_string; + LOBYTE(v11) = 0; + Sizea = std::__facet_shims::__money_put(v11, this[2], a2, a3, a4, a5, a6, 0.0, (int)v17); + if ( v19 ) + v19((void **)v17); + return Sizea; +} +// 47CDAB: variable 'v11' is possibly undefined + +//----- (0047CEA0) -------------------------------------------------------- +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put( + int *this, + int a2, + int a3, + unsigned __int8 a4, + int a5, + char a6, + std::string *a7) +{ + int v8; // [esp+0h] [ebp-A8h] + const std::string *v9; // [esp+4h] [ebp-A4h] + __int64 lpuexcpt; // [esp+40h] [ebp-68h] + int v12[6]; // [esp+84h] [ebp-24h] BYREF + void (__cdecl *v13)(int *); // [esp+9Ch] [ebp-Ch] + + v13 = 0; + std::string::string(v12, a7, v9); + v12[1] = *(_DWORD *)(*(_DWORD *)a7 - 12); + v13 = std::__facet_shims::`anonymous namespace'::__destroy_string; + LOBYTE(v8) = 0; + lpuexcpt = std::__facet_shims::__money_put(v8, this[2], a2, a3, a4, a5, a6, 0.0, (int)v12); + if ( v13 ) + v13(v12); + return lpuexcpt; +} +// 47CEF5: variable 'v9' is possibly undefined +// 47CF4F: variable 'v8' is possibly undefined + +//----- (0047CFC0) -------------------------------------------------------- +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put( + int *this, + int a2, + int a3, + unsigned __int8 a4, + int a5, + char a6, + long double a7) +{ + int v8; // [esp+0h] [ebp-3Ch] + + LOBYTE(v8) = 0; + return std::__facet_shims::__money_put(v8, this[2], a2, a3, a4, a5, a6, a7, 0); +} +// 47D008: variable 'v8' is possibly undefined + +//----- (0047D020) -------------------------------------------------------- +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put( + int *this, + int a2, + int a3, + unsigned __int8 a4, + int a5, + char a6, + long double a7) +{ + int v8; // [esp+0h] [ebp-3Ch] + + LOBYTE(v8) = 0; + return std::__facet_shims::__money_put(v8, this[2], a2, a3, a4, a5, a6, a7, 0); +} +// 47D068: variable 'v8' is possibly undefined + +//----- (0047D080) -------------------------------------------------------- +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put( + int *this, + int a2, + int a3, + unsigned __int8 a4, + int a5, + unsigned __int16 a6, + int a7) +{ + int v8; // [esp+0h] [ebp-A8h] + __int64 lpuexcpt; // [esp+40h] [ebp-68h] + int v11[2]; // [esp+84h] [ebp-24h] BYREF + char v12; // [esp+8Ch] [ebp-1Ch] BYREF + void (__cdecl *v13)(void **); // [esp+9Ch] [ebp-Ch] + + v13 = 0; + v11[0] = (int)&v12; + std::wstring::_M_construct(v11, *(_WORD **)a7, *(_DWORD *)a7 + 2 * *(_DWORD *)(a7 + 4)); + v13 = std::__facet_shims::`anonymous namespace'::__destroy_string; + LOBYTE(v8) = 0; + lpuexcpt = std::__facet_shims::__money_put(v8, this[2], a2, a3, a4, a5, a6, 0.0, (int)v11); + if ( v13 ) + v13((void **)v11); + return lpuexcpt; +} +// 47D139: variable 'v8' is possibly undefined + +//----- (0047D1A0) -------------------------------------------------------- +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put( + int *this, + int a2, + int a3, + unsigned __int8 a4, + int a5, + unsigned __int16 a6, + _DWORD *a7) +{ + int v8; // [esp+0h] [ebp-A8h] + __int64 lpuexcpt; // [esp+40h] [ebp-68h] + int v11[6]; // [esp+84h] [ebp-24h] BYREF + void (__cdecl *v12)(int *); // [esp+9Ch] [ebp-Ch] + + v12 = 0; + std::wstring::basic_string(v11, a7); + v11[1] = *(_DWORD *)(*a7 - 12); + v12 = std::__facet_shims::`anonymous namespace'::__destroy_string; + LOBYTE(v8) = 0; + lpuexcpt = std::__facet_shims::__money_put(v8, this[2], a2, a3, a4, a5, a6, 0.0, (int)v11); + if ( v12 ) + v12(v11); + return lpuexcpt; +} +// 47D24F: variable 'v8' is possibly undefined + +//----- (0047D2C0) -------------------------------------------------------- +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put( + int *this, + int a2, + int a3, + unsigned __int8 a4, + int a5, + __int16 a6, + long double a7) +{ + int v8; // [esp+0h] [ebp-3Ch] + + LOBYTE(v8) = 0; + return std::__facet_shims::__money_put(v8, this[2], a2, a3, a4, a5, a6, a7, 0); +} +// 47D308: variable 'v8' is possibly undefined + +//----- (0047D320) -------------------------------------------------------- +__int64 __thiscall std::__facet_shims::`anonymous namespace'::money_put_shim::do_put( + int *this, + int a2, + int a3, + unsigned __int8 a4, + int a5, + __int16 a6, + long double a7) +{ + int v8; // [esp+0h] [ebp-3Ch] + + LOBYTE(v8) = 0; + return std::__facet_shims::__money_put(v8, this[2], a2, a3, a4, a5, a6, a7, 0); +} +// 47D368: variable 'v8' is possibly undefined + +//----- (0047D380) -------------------------------------------------------- +const char *_ZGTtNKSt13bad_exception4whatEv() +{ + return "std::bad_exception"; +} + +//----- (0047D390) -------------------------------------------------------- +bool __fastcall std::filebuf::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 40)); +} + +//----- (0047D3A0) -------------------------------------------------------- +bool __fastcall std::wfilebuf::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 40)); +} + +//----- (0047D3B0) -------------------------------------------------------- +int __fastcall std::fstream::rdbuf(int a1) +{ + return a1 + 12; +} + +//----- (0047D3C0) -------------------------------------------------------- +bool __fastcall std::fstream::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 52)); +} + +//----- (0047D3D0) -------------------------------------------------------- +int __fastcall std::wfstream::rdbuf(int a1) +{ + return a1 + 12; +} + +//----- (0047D3E0) -------------------------------------------------------- +bool __fastcall std::wfstream::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 52)); +} + +//----- (0047D3F0) -------------------------------------------------------- +int __fastcall std::wistream::gcount(int a1) +{ + return *(_DWORD *)(a1 + 4); +} + +//----- (0047D400) -------------------------------------------------------- +int __fastcall std::wistream::sentry::operator bool(unsigned __int8 *a1) +{ + return *a1; +} + +//----- (0047D410) -------------------------------------------------------- +int __fastcall std::wostream::sentry::operator bool(unsigned __int8 *a1) +{ + return *a1; +} + +//----- (0047D420) -------------------------------------------------------- +long double std::random_device::_M_getentropy() +{ + return 0.0; +} + +//----- (0047D430) -------------------------------------------------------- +int __fastcall std::ifstream::rdbuf(int a1) +{ + return a1 + 8; +} + +//----- (0047D440) -------------------------------------------------------- +bool __fastcall std::ifstream::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 48)); +} + +//----- (0047D450) -------------------------------------------------------- +int __fastcall std::wifstream::rdbuf(int a1) +{ + return a1 + 8; +} + +//----- (0047D460) -------------------------------------------------------- +bool __fastcall std::wifstream::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 48)); +} + +//----- (0047D470) -------------------------------------------------------- +int __fastcall std::ofstream::rdbuf(int a1) +{ + return a1 + 4; +} + +//----- (0047D480) -------------------------------------------------------- +bool __fastcall std::ofstream::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 44)); +} + +//----- (0047D490) -------------------------------------------------------- +int __fastcall std::wofstream::rdbuf(int a1) +{ + return a1 + 4; +} + +//----- (0047D4A0) -------------------------------------------------------- +bool __fastcall std::wofstream::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 44)); +} + +//----- (0047D4B0) -------------------------------------------------------- +int __fastcall std::streambuf::gptr(int a1) +{ + return *(_DWORD *)(a1 + 8); +} + +//----- (0047D4C0) -------------------------------------------------------- +int __fastcall std::streambuf::pptr(int a1) +{ + return *(_DWORD *)(a1 + 20); +} + +//----- (0047D4D0) -------------------------------------------------------- +int __fastcall std::streambuf::eback(int a1) +{ + return *(_DWORD *)(a1 + 4); +} + +//----- (0047D4E0) -------------------------------------------------------- +int __fastcall std::streambuf::egptr(int a1) +{ + return *(_DWORD *)(a1 + 12); +} + +//----- (0047D4F0) -------------------------------------------------------- +int __fastcall std::streambuf::epptr(int a1) +{ + return *(_DWORD *)(a1 + 24); +} + +//----- (0047D500) -------------------------------------------------------- +int __fastcall std::streambuf::pbase(int a1) +{ + return *(_DWORD *)(a1 + 16); +} + +//----- (0047D510) -------------------------------------------------------- +volatile signed __int32 **__thiscall std::streambuf::getloc(volatile signed __int32 **this, int a2) +{ + const std::locale *v4; // [esp+4h] [ebp-18h] + + std::locale::locale(this, (volatile signed __int32 **)(a2 + 28), v4); + return this; +} +// 47D520: variable 'v4' is possibly undefined + +//----- (0047D540) -------------------------------------------------------- +int __fastcall std::wstreambuf::gptr(int a1) +{ + return *(_DWORD *)(a1 + 8); +} + +//----- (0047D550) -------------------------------------------------------- +int __fastcall std::wstreambuf::pptr(int a1) +{ + return *(_DWORD *)(a1 + 20); +} + +//----- (0047D560) -------------------------------------------------------- +int __fastcall std::wstreambuf::eback(int a1) +{ + return *(_DWORD *)(a1 + 4); +} + +//----- (0047D570) -------------------------------------------------------- +int __fastcall std::wstreambuf::egptr(int a1) +{ + return *(_DWORD *)(a1 + 12); +} + +//----- (0047D580) -------------------------------------------------------- +int __fastcall std::wstreambuf::epptr(int a1) +{ + return *(_DWORD *)(a1 + 24); +} + +//----- (0047D590) -------------------------------------------------------- +int __fastcall std::wstreambuf::pbase(int a1) +{ + return *(_DWORD *)(a1 + 16); +} + +//----- (0047D5A0) -------------------------------------------------------- +volatile signed __int32 **__thiscall std::wstreambuf::getloc(volatile signed __int32 **this, int a2) +{ + const std::locale *v4; // [esp+4h] [ebp-18h] + + std::locale::locale(this, (volatile signed __int32 **)(a2 + 28), v4); + return this; +} +// 47D5B0: variable 'v4' is possibly undefined + +//----- (0047D5D0) -------------------------------------------------------- +int __stdcall std::__codecvt_utf8_base::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (0047D5F0) -------------------------------------------------------- +int __fastcall std::__codecvt_utf8_base::do_max_length(int a1) +{ + return (*(_DWORD *)(a1 + 12) & 4) == 0 ? 4 : 7; +} + +//----- (0047D610) -------------------------------------------------------- +int __thiscall std::__codecvt_utf8_base::do_in( + int this, + int a2, + unsigned __int8 *a3, + int a4, + unsigned __int8 **a5, + int a6, + int a7, + _DWORD *a8) +{ + unsigned int v8; // edi + unsigned __int8 *v9; // edx + unsigned int v11; // eax + int result; // eax + unsigned __int8 *v13; // [esp+8h] [ebp-14h] BYREF + unsigned __int8 *v14; // [esp+Ch] [ebp-10h] + + v8 = *(_DWORD *)(this + 8); + v9 = a3; + v13 = a3; + v14 = (unsigned __int8 *)a4; + if ( (*(_BYTE *)(this + 12) & 4) != 0 + && (unsigned int)(a4 - (_DWORD)a3) > 2 + && *(_WORD *)a3 == std::`anonymous namespace'::utf8_bom + && a3[2] == 0xBF ) + { + v9 = a3 + 3; + v13 = a3 + 3; + } + if ( (unsigned __int8 *)a4 == v9 ) + { +LABEL_14: + result = 0; + } + else + { + while ( 1 ) + { + if ( a7 == a6 ) + { + v9 = v13; + result = 1; + goto LABEL_9; + } + v11 = std::`anonymous namespace'::read_utf8_code_point(&v13, v8); + v9 = v13; + if ( v11 == -2 ) + { + result = 1; + goto LABEL_9; + } + if ( v8 < v11 ) + break; + a6 += 4; + *(_DWORD *)(a6 - 4) = v11; + if ( v14 == v9 ) + goto LABEL_14; + } + result = 2; + } +LABEL_9: + *a5 = v9; + *a8 = a6; + return result; +} +// 55AF54: using guessed type __int16 std::`anonymous namespace'::utf8_bom; + +//----- (0047D6E0) -------------------------------------------------------- +int __thiscall std::__codecvt_utf8_base::do_out( + int this, + int a2, + unsigned int *a3, + unsigned int *a4, + unsigned int **a5, + _BYTE *a6, + _BYTE *a7, + _DWORD *a8) +{ + unsigned int v8; // edi + _BYTE *v9; // eax + unsigned int *v10; // ebx + int v11; // ecx + _BYTE *v13[5]; // [esp+8h] [ebp-14h] BYREF + + v8 = *(_DWORD *)(this + 8); + v9 = a6; + v10 = a3; + v13[0] = a6; + v13[1] = a7; + if ( (*(_BYTE *)(this + 12) & 2) != 0 ) + { + v11 = 1; + if ( (unsigned int)(a7 - a6) <= 2 ) + goto LABEL_8; + a6[2] = -65; + *(_WORD *)a6 = -17425; + v13[0] = a6 + 3; + } + if ( a3 == a4 ) + { +LABEL_11: + v9 = v13[0]; + v11 = 0; + } + else + { + while ( 1 ) + { + if ( v8 < *v10 ) + { + v9 = v13[0]; + v11 = 2; + goto LABEL_8; + } + if ( !(unsigned __int8)std::`anonymous namespace'::write_utf8_code_point(v13, *v10) ) + break; + if ( a4 == ++v10 ) + goto LABEL_11; + } + v9 = v13[0]; + v11 = 1; + } +LABEL_8: + *a5 = v10; + *a8 = v9; + return v11; +} + +//----- (0047D790) -------------------------------------------------------- +unsigned __int8 *__thiscall std::__codecvt_utf8_base::do_length( + int this, + int a2, + unsigned __int8 *a3, + unsigned __int8 *a4, + int a5) +{ + unsigned int v5; // esi + int v6; // ebx + unsigned int utf8_code; // eax + bool v8; // dl + unsigned __int8 *v10[5]; // [esp+8h] [ebp-14h] BYREF + + v5 = *(_DWORD *)(this + 8); + v10[0] = a3; + v10[1] = a4; + if ( (*(_BYTE *)(this + 12) & 4) != 0 + && (unsigned int)(a4 - a3) > 2 + && *(_WORD *)a3 == std::`anonymous namespace'::utf8_bom + && a3[2] == 0xBF ) + { + v10[0] = a3 + 3; + } + v6 = a5 - 1; + if ( a5 ) + { + do + { + utf8_code = std::`anonymous namespace'::read_utf8_code_point(v10, v5); + v8 = v6-- != 0; + } + while ( v5 >= utf8_code && v8 ); + } + return (unsigned __int8 *)(v10[0] - a3); +} +// 55AF54: using guessed type __int16 std::`anonymous namespace'::utf8_bom; + +//----- (0047D820) -------------------------------------------------------- +int __stdcall std::__codecvt_utf8_base::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (0047D840) -------------------------------------------------------- +int __fastcall std::__codecvt_utf8_base::do_max_length(int a1) +{ + return (*(_DWORD *)(a1 + 12) & 4) == 0 ? 3 : 6; +} + +//----- (0047D860) -------------------------------------------------------- +int __thiscall std::__codecvt_utf8_base::do_in( + _DWORD *this, + int a2, + unsigned __int8 *a3, + unsigned __int8 *a4, + unsigned __int8 **a5, + char *a6, + char *a7, + char **a8) +{ + int v8; // eax + unsigned int v9; // ecx + int result; // eax + unsigned __int8 *v11[2]; // [esp+8h] [ebp-10h] BYREF + char *v12[2]; // [esp+10h] [ebp-8h] BYREF + + v11[0] = a3; + v11[1] = a4; + v12[0] = a6; + v12[1] = a7; + v8 = this[3]; + v9 = this[2]; + if ( v9 >= 0xFFFF ) + v9 = 0xFFFF; + result = std::`anonymous namespace'::utf16_in(v11, v12, v9, v8 & 6 | 1, 1); + *a5 = v11[0]; + *a8 = v12[0]; + return result; +} + +//----- (0047D8D0) -------------------------------------------------------- +int __thiscall std::__codecvt_utf8_base::do_out( + int this, + int a2, + unsigned __int16 *a3, + unsigned __int16 *a4, + unsigned __int16 **a5, + _BYTE *a6, + _BYTE *a7, + _DWORD *a8) +{ + unsigned __int16 *v8; // ebx + _BYTE *v9; // eax + unsigned int v10; // edx + int v11; // eax + int v12; // ecx + unsigned __int16 *v14[2]; // [esp+4h] [ebp-1Ch] BYREF + _BYTE *v15[5]; // [esp+Ch] [ebp-14h] BYREF + + v8 = a3; + v9 = a6; + v14[1] = a4; + v10 = *(_DWORD *)(this + 8); + v14[0] = a3; + v15[0] = a6; + v15[1] = a7; + if ( v10 >= 0xFFFF ) + v10 = 0xFFFF; + if ( (*(_BYTE *)(this + 12) & 2) != 0 ) + { + v12 = 1; + if ( (unsigned int)(a7 - a6) <= 2 ) + goto LABEL_5; + a6[2] = -65; + *(_WORD *)a6 = -17425; + v15[0] = a6 + 3; + } + v11 = std::`anonymous namespace'::utf16_out(v14, v15, v10, 1); + v8 = v14[0]; + v12 = v11; + v9 = v15[0]; +LABEL_5: + *a5 = v8; + *a8 = v9; + return v12; +} + +//----- (0047D970) -------------------------------------------------------- +unsigned __int8 *__thiscall std::__codecvt_utf8_base::do_length( + int this, + int a2, + unsigned __int8 *a3, + unsigned __int8 *a4, + int a5) +{ + unsigned int v5; // esi + int v6; // ebx + unsigned int utf8_code; // eax + bool v8; // dl + unsigned __int8 *v10[5]; // [esp+8h] [ebp-14h] BYREF + + v5 = *(_DWORD *)(this + 8); + v10[0] = a3; + v10[1] = a4; + if ( (*(_BYTE *)(this + 12) & 4) != 0 + && (unsigned int)(a4 - a3) > 2 + && *(_WORD *)a3 == std::`anonymous namespace'::utf8_bom + && a3[2] == 0xBF ) + { + v10[0] = a3 + 3; + } + v6 = a5 - 1; + if ( v5 >= 0xFFFF ) + v5 = 0xFFFF; + if ( a5 ) + { + do + { + utf8_code = std::`anonymous namespace'::read_utf8_code_point(v10, v5); + v8 = v6-- != 0; + } + while ( v5 >= utf8_code && v8 ); + } + return (unsigned __int8 *)(v10[0] - a3); +} +// 55AF54: using guessed type __int16 std::`anonymous namespace'::utf8_bom; + +//----- (0047DA10) -------------------------------------------------------- +int __stdcall std::__codecvt_utf8_base::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (0047DA30) -------------------------------------------------------- +int __fastcall std::__codecvt_utf8_base::do_max_length(int a1) +{ + return (*(_DWORD *)(a1 + 16) & 4) == 0 ? 3 : 6; +} + +//----- (0047DA50) -------------------------------------------------------- +int __thiscall std::__codecvt_utf8_base::do_in( + _DWORD *this, + int a2, + unsigned __int8 *a3, + unsigned __int8 *a4, + unsigned __int8 **a5, + char *a6, + char *a7, + char **a8) +{ + unsigned int v8; // ecx + int result; // eax + unsigned __int8 *v10[2]; // [esp+8h] [ebp-10h] BYREF + char *v11[2]; // [esp+10h] [ebp-8h] BYREF + + v8 = this[3]; + v10[0] = a3; + v10[1] = a4; + v11[0] = a6; + v11[1] = a7; + if ( v8 >= 0xFFFF ) + v8 = 0xFFFF; + result = std::`anonymous namespace'::utf16_in(v10, v11, v8, 1, 1); + *a5 = v10[0]; + *a8 = v11[0]; + return result; +} + +//----- (0047DAC0) -------------------------------------------------------- +int __thiscall std::__codecvt_utf8_base::do_out( + int this, + int a2, + unsigned __int16 *a3, + unsigned __int16 *a4, + unsigned __int16 **a5, + _BYTE *a6, + _BYTE *a7, + _DWORD *a8) +{ + unsigned __int16 *v8; // ebx + _BYTE *v9; // eax + unsigned int v10; // edx + int v11; // eax + int v12; // ecx + _BYTE *v14[2]; // [esp+4h] [ebp-1Ch] BYREF + unsigned __int16 *v15[5]; // [esp+Ch] [ebp-14h] BYREF + + v8 = a3; + v9 = a6; + v15[1] = a4; + v10 = *(_DWORD *)(this + 12); + v14[0] = a6; + v14[1] = a7; + v15[0] = a3; + if ( v10 >= 0xFFFF ) + v10 = 0xFFFF; + if ( (*(_BYTE *)(this + 16) & 2) != 0 ) + { + v12 = 1; + if ( (unsigned int)(a7 - a6) <= 2 ) + goto LABEL_5; + a6[2] = -65; + *(_WORD *)a6 = -17425; + v14[0] = a6 + 3; + } + v11 = std::`anonymous namespace'::utf16_out(v15, v14, v10, 1); + v8 = v15[0]; + v12 = v11; + v9 = v14[0]; +LABEL_5: + *a5 = v8; + *a8 = v9; + return v12; +} + +//----- (0047DB60) -------------------------------------------------------- +unsigned __int8 *__thiscall std::__codecvt_utf8_base::do_length( + int this, + int a2, + unsigned __int8 *a3, + unsigned __int8 *a4, + int a5) +{ + unsigned int v5; // esi + int v6; // ebx + unsigned int utf8_code; // eax + bool v8; // dl + unsigned __int8 *v10[5]; // [esp+8h] [ebp-14h] BYREF + + v5 = *(_DWORD *)(this + 12); + v10[0] = a3; + v10[1] = a4; + if ( (*(_BYTE *)(this + 16) & 4) != 0 + && (unsigned int)(a4 - a3) > 2 + && *(_WORD *)a3 == std::`anonymous namespace'::utf8_bom + && a3[2] == 0xBF ) + { + v10[0] = a3 + 3; + } + v6 = a5 - 1; + if ( v5 >= 0xFFFF ) + v5 = 0xFFFF; + if ( a5 ) + { + do + { + utf8_code = std::`anonymous namespace'::read_utf8_code_point(v10, v5); + v8 = v6-- != 0; + } + while ( v5 >= utf8_code && v8 ); + } + return (unsigned __int8 *)(v10[0] - a3); +} +// 55AF54: using guessed type __int16 std::`anonymous namespace'::utf8_bom; + +//----- (0047DC00) -------------------------------------------------------- +char __userpurge std::__iosfail_type_info::__do_upcast@( + int *a1@, + std::__iosfail_type_info *this, + const __cxxabiv1::__class_type_info *a3, + void **a4) +{ + char result; // al + + result = std::__is_ios_failure_handler(this); + if ( !result ) + return __cxxabiv1::__class_type_info::__do_upcast(a1, this, a3, a4); + *(_DWORD *)a3 += 16; + return result; +} + +//----- (0047DC50) -------------------------------------------------------- +bool __thiscall std::istreambuf_iterator::equal(_DWORD *this, int a2) +{ + _DWORD *v3; // ecx + unsigned __int8 v4; // dl + _DWORD *v5; // ecx + char v6; // bl + char v7; // di + unsigned __int8 v9; // di + int v10; // eax + int v11; // eax + unsigned __int8 v12; // [esp+Fh] [ebp-Dh] + + v3 = (_DWORD *)*this; + v4 = this[1] == -1; + if ( (v4 & (v3 != 0)) != 0 ) + { + v9 = v4 & (v3 != 0); + v4 = 0; + if ( v3[2] >= v3[3] ) + { + v10 = (*(int (__fastcall **)(_DWORD *))(*v3 + 36))(v3); + v4 = 0; + if ( v10 == -1 ) + { + *this = 0; + v4 = v9; + } + } + } + v5 = *(_DWORD **)a2; + v6 = *(_DWORD *)(a2 + 4) == -1; + v7 = v6 & (*(_DWORD *)a2 != 0); + if ( v7 ) + { + v6 = 0; + if ( v5[2] >= v5[3] ) + { + v12 = v4; + v11 = (*(int (__fastcall **)(_DWORD *))(*v5 + 36))(v5); + v4 = v12; + if ( v11 == -1 ) + { + *(_DWORD *)a2 = 0; + v6 = v7; + } + } + } + return v6 == (char)v4; +} + +//----- (0047DCF0) -------------------------------------------------------- +int __fastcall std::istreambuf_iterator::_M_get(int a1) +{ + int result; // eax + _DWORD *v3; // ecx + unsigned __int8 *v4; // eax + + result = *(_DWORD *)(a1 + 4); + v3 = *(_DWORD **)a1; + if ( __PAIR64__(result, (unsigned int)v3) > 0xFFFFFFFF00000000LL ) + { + v4 = (unsigned __int8 *)v3[2]; + if ( (unsigned int)v4 >= v3[3] ) + { + result = (*(int (__fastcall **)(_DWORD *))(*v3 + 36))(v3); + if ( result == -1 ) + *(_DWORD *)a1 = 0; + } + else + { + return *v4; + } + } + return result; +} + +//----- (0047DD40) -------------------------------------------------------- +bool __thiscall std::istreambuf_iterator::equal(_WORD *this, int a2) +{ + _DWORD *v3; // ecx + unsigned __int8 v4; // dl + _DWORD *v5; // edi + unsigned __int8 v6; // al + unsigned __int8 v7; // bl + unsigned __int8 v9; // di + _WORD *v10; // eax + __int16 v11; // ax + __int16 *v12; // eax + __int16 v13; // cx + __int16 v14; // ax + unsigned __int8 v15; // [esp+Fh] [ebp-Dh] + + v3 = *(_DWORD **)this; + v4 = this[2] == 0xFFFF; + if ( (v4 & (v3 != 0)) != 0 ) + { + v9 = v4 & (v3 != 0); + v10 = (_WORD *)v3[2]; + v11 = (unsigned int)v10 >= v3[3] ? (*(int (__fastcall **)(_DWORD *))(*v3 + 36))(v3) : *v10; + v4 = 0; + if ( v11 == -1 ) + { + *(_DWORD *)this = 0; + v4 = v9; + } + } + v5 = *(_DWORD **)a2; + v6 = *(_WORD *)(a2 + 4) == 0xFFFF; + v7 = v6 & (*(_DWORD *)a2 != 0); + if ( v7 ) + { + v12 = (__int16 *)v5[2]; + if ( (unsigned int)v12 >= v5[3] ) + { + v15 = v4; + v14 = (*(int (__fastcall **)(_DWORD *))(*v5 + 36))(v5); + v4 = v15; + v13 = v14; + } + else + { + v13 = *v12; + } + v6 = 0; + if ( v13 == -1 ) + { + *(_DWORD *)a2 = 0; + v6 = v7; + } + } + return v4 == v6; +} + +//----- (0047DDE0) -------------------------------------------------------- +int __fastcall std::istreambuf_iterator::_M_get(int a1) +{ + int result; // eax + _DWORD *v3; // ecx + unsigned __int16 *v4; // eax + + result = *(unsigned __int16 *)(a1 + 4); + v3 = *(_DWORD **)a1; + if ( (_WORD)result == 0xFFFF && v3 ) + { + v4 = (unsigned __int16 *)v3[2]; + if ( (unsigned int)v4 >= v3[3] ) + result = (*(int (__fastcall **)(_DWORD *))(*v3 + 36))(v3); + else + result = *v4; + if ( (_WORD)result == 0xFFFF ) + *(_DWORD *)a1 = 0; + } + return result; +} + +//----- (0047DE30) -------------------------------------------------------- +int __stdcall std::__codecvt_utf16_base::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (0047DE50) -------------------------------------------------------- +int __fastcall std::__codecvt_utf16_base::do_max_length(int a1) +{ + return (*(_DWORD *)(a1 + 12) & 4) == 0 ? 4 : 6; +} + +//----- (0047DE70) -------------------------------------------------------- +int __thiscall std::__codecvt_utf16_base::do_in( + _DWORD *this, + int a2, + int a3, + int a4, + int *a5, + int a6, + int a7, + _DWORD *a8) +{ + unsigned int v8; // esi + _WORD *v10; // ecx + unsigned int v11; // edx + int v12; // edi + unsigned __int16 v13; // dx + unsigned __int16 v14; // bp + unsigned int v15; // eax + int v16; // edx + __int16 v17; // bp + int v18; // eax + int v20; // [esp+0h] [ebp-24h] + int v21; // [esp+8h] [ebp-1Ch] BYREF + _WORD *v22; // [esp+Ch] [ebp-18h] BYREF + int v23; // [esp+10h] [ebp-14h] + + v8 = this[2]; + v22 = (_WORD *)a3; + v23 = a4; + v21 = this[3]; + std::`anonymous namespace'::read_utf16_bom((int)&v22, &v21); + v10 = v22; + v20 = v23; + v11 = (unsigned int)(v23 - (_DWORD)v22) >> 1; + if ( !v11 ) + { +LABEL_20: + *a5 = (int)v10; + *a8 = a6; + return 2 * (a4 != (_DWORD)v10); + } + v12 = v21 & 1; + while ( a7 != a6 ) + { + LOWORD(v15) = *v10; + v17 = __ROL2__(*v10, 8); + if ( !v12 ) + LOWORD(v15) = v17; + v15 = (unsigned __int16)v15; + if ( (unsigned int)(unsigned __int16)v15 - 55296 <= 0x3FF ) + { + if ( v11 == 1 ) + goto LABEL_16; + v13 = v10[1]; + v14 = __ROL2__(v13, 8); + if ( !v12 ) + v13 = v14; + if ( (unsigned int)v13 - 56320 <= 0x3FF ) + { + v15 = v13 + ((unsigned __int16)v15 << 10) - 56613888; + v16 = 2; + if ( v8 < v15 ) + goto LABEL_15; + goto LABEL_8; + } +LABEL_18: + v10 = v22; + v18 = (int)v22; + if ( v8 != -1 ) + { + v11 = 2; + goto LABEL_17; + } + a6 += 4; + *(_DWORD *)(a6 - 4) = -1; + v11 = (unsigned int)(v20 - (_DWORD)v10) >> 1; + if ( !v11 ) + goto LABEL_20; + } + else + { + if ( (unsigned int)(unsigned __int16)v15 - 56320 <= 0x3FF ) + goto LABEL_18; + v16 = 1; + if ( v8 < (unsigned __int16)v15 ) + { +LABEL_15: + v11 = 2; +LABEL_16: + v18 = (int)v22; +LABEL_17: + *a5 = v18; + *a8 = a6; + return v11; + } +LABEL_8: + v10 += v16; + a6 += 4; + *(_DWORD *)(a6 - 4) = v15; + v22 = v10; + v11 = (unsigned int)(v20 - (_DWORD)v10) >> 1; + if ( !v11 ) + goto LABEL_20; + } + } + *a5 = (int)v22; + *a8 = a7; + return 1; +} + +//----- (0047E010) -------------------------------------------------------- +int __thiscall std::__codecvt_utf16_base::do_out( + _DWORD *this, + int a2, + unsigned int *a3, + unsigned int *a4, + unsigned int **a5, + _WORD *a6, + int a7, + _DWORD *a8) +{ + int v8; // edi + unsigned int v9; // ebx + unsigned int *v10; // eax + _WORD *v11; // edx + int v12; // esi + unsigned int v13; // esi + unsigned int v14; // edi + unsigned int v16; // edi + __int16 v17; // si + __int16 v18; // di + __int16 v19; // di + unsigned int v20; // [esp+0h] [ebp-14h] + int v21; // [esp+0h] [ebp-14h] + + v8 = this[3]; + v9 = this[2]; + v10 = a3; + v11 = a6; + if ( (v8 & 2) != 0 ) + { + v20 = a7 - (_DWORD)a6; + v12 = 1; + if ( (v8 & 1) != 0 ) + { + if ( v20 <= 1 ) + goto LABEL_11; + v11 = a6 + 1; + *a6 = -257; + } + else + { + if ( v20 <= 1 ) + goto LABEL_11; + v11 = a6 + 1; + *a6 = -2; + } + } + if ( a3 == a4 ) + { +LABEL_17: + v12 = 0; + } + else + { + v21 = v8 & 1; + while ( 1 ) + { + v13 = *v10; + if ( v9 < *v10 ) + break; + v14 = (unsigned int)(a7 - (_DWORD)v11) >> 1; + if ( v13 > 0xFFFF ) + { + if ( v14 <= 1 ) + { +LABEL_10: + v12 = 1; + goto LABEL_11; + } + v16 = v13 >> 10; + v17 = (v13 & 0x3FF) - 9216; + v18 = v16 - 10304; + if ( !v21 ) + { + v18 = __ROL2__(v18, 8); + v17 = __ROL2__(v17, 8); + } + *v11 = v18; + v11 += 2; + *(v11 - 1) = v17; + } + else + { + if ( !v14 ) + goto LABEL_10; + v19 = __ROL2__(v13, 8); + if ( !v21 ) + LOWORD(v13) = v19; + *v11++ = v13; + } + if ( a4 == ++v10 ) + goto LABEL_17; + } + v12 = 2; + } +LABEL_11: + *a5 = v10; + *a8 = v11; + return v12; +} + +//----- (0047E140) -------------------------------------------------------- +char *__thiscall std::__codecvt_utf16_base::do_length(_DWORD *this, int a2, int a3, int a4, int a5) +{ + unsigned int v5; // ebx + _WORD *v6; // ecx + int v7; // esi + unsigned int v8; // edx + unsigned int v9; // eax + __int16 v10; // bp + unsigned __int16 v11; // dx + unsigned __int16 v12; // bp + int v13; // edx + bool v15; // dl + bool v16; // al + int v17; // [esp+8h] [ebp-1Ch] BYREF + _WORD *v18; // [esp+Ch] [ebp-18h] BYREF + int v19; // [esp+10h] [ebp-14h] + + v5 = this[2]; + v18 = (_WORD *)a3; + v19 = a4; + v17 = this[3]; + std::`anonymous namespace'::read_utf16_bom((int)&v18, &v17); + if ( a5 ) + { + v6 = v18; + v7 = a5 - 1; + v8 = (unsigned int)(v19 - (_DWORD)v18) >> 1; + if ( v8 ) + goto LABEL_3; +LABEL_17: + v9 = -2; + while ( 1 ) + { + v15 = v5 >= v9; + v16 = v7-- != 0; + if ( !v16 || !v15 ) + return (char *)v6 - a3; + v8 = (unsigned int)(v19 - (_DWORD)v6) >> 1; + if ( !v8 ) + goto LABEL_17; +LABEL_3: + LOWORD(v9) = *v6; + v10 = __ROL2__(*v6, 8); + if ( (v17 & 1) == 0 ) + LOWORD(v9) = v10; + v9 = (unsigned __int16)v9; + if ( (unsigned int)(unsigned __int16)v9 - 55296 > 0x3FF ) + { + if ( (unsigned int)(unsigned __int16)v9 - 56320 <= 0x3FF ) + goto LABEL_18; + v13 = 1; + if ( v5 < (unsigned __int16)v9 ) + return (char *)v6 - a3; +LABEL_14: + v6 += v13; + v18 = v6; + } + else + { + if ( v8 == 1 ) + goto LABEL_17; + v11 = v6[1]; + v12 = __ROL2__(v11, 8); + if ( (v17 & 1) == 0 ) + v11 = v12; + if ( (unsigned int)v11 - 56320 <= 0x3FF ) + { + v9 = v11 + ((unsigned __int16)v9 << 10) - 56613888; + v13 = 2; + if ( v5 < v9 ) + return (char *)v6 - a3; + goto LABEL_14; + } +LABEL_18: + v9 = -1; + } + } + } + return (char *)v18 - a3; +} + +//----- (0047E280) -------------------------------------------------------- +int __stdcall std::__codecvt_utf16_base::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (0047E2A0) -------------------------------------------------------- +int __fastcall std::__codecvt_utf16_base::do_max_length(int a1) +{ + return (*(_DWORD *)(a1 + 12) & 4) == 0 ? 2 : 4; +} + +//----- (0047E2C0) -------------------------------------------------------- +int __thiscall std::__codecvt_utf16_base::do_in( + unsigned int *this, + int a2, + unsigned __int16 *a3, + unsigned __int16 *a4, + unsigned __int16 **a5, + int a6, + int a7, + int *a8) +{ + unsigned int v8; // edx + int result; // eax + unsigned __int16 *v10; // edx + int v11; // esi + unsigned __int16 *v12[2]; // [esp+4h] [ebp-18h] BYREF + int v13[4]; // [esp+Ch] [ebp-10h] BYREF + + v8 = this[3]; + v12[0] = a3; + v12[1] = a4; + v13[0] = a6; + v13[1] = a7; + result = std::`anonymous namespace'::ucs2_in(v12, v13, this[2], v8); + v10 = v12[0]; + v11 = v13[0]; + *a5 = v12[0]; + *a8 = v11; + if ( !result && v10 != a4 ) + return 2; + return result; +} + +//----- (0047E330) -------------------------------------------------------- +int __thiscall std::__codecvt_utf16_base::do_out( + _DWORD *this, + int a2, + unsigned __int16 *a3, + unsigned __int16 *a4, + unsigned __int16 **a5, + _WORD *a6, + int a7, + int *a8) +{ + unsigned int v8; // edi + unsigned __int16 *v9; // edx + int v10; // eax + int v11; // esi + unsigned int v12; // ebx + int v13; // ecx + int v14; // eax + unsigned __int16 *v16[2]; // [esp+4h] [ebp-1Ch] BYREF + int v17[5]; // [esp+Ch] [ebp-14h] BYREF + + v8 = this[2]; + v9 = a3; + v10 = (int)a6; + v16[1] = a4; + v11 = this[3]; + v16[0] = a3; + v17[0] = (int)a6; + v17[1] = a7; + if ( (v11 & 2) == 0 ) + goto LABEL_5; + v12 = a7 - (_DWORD)a6; + v13 = 1; + if ( (v11 & 1) == 0 ) + { + if ( v12 <= 1 ) + goto LABEL_6; + *a6 = -2; + v17[0] = (int)(a6 + 1); + goto LABEL_5; + } + if ( v12 > 1 ) + { + *a6 = -257; + v17[0] = (int)(a6 + 1); +LABEL_5: + v14 = std::`anonymous namespace'::ucs2_out(v16, v17, v8, v11); + v9 = v16[0]; + v13 = v14; + v10 = v17[0]; + } +LABEL_6: + *a5 = v9; + *a8 = v10; + return v13; +} + +//----- (0047E3E0) -------------------------------------------------------- +char *__thiscall std::__codecvt_utf16_base::do_length(_DWORD *this, int a2, int a3, int a4, int a5) +{ + unsigned int v5; // esi + unsigned __int16 *v6; // edx + int v7; // ecx + unsigned __int16 v8; // ax + unsigned __int16 v9; // bx + bool v11; // al + int v12; // [esp+4h] [ebp-1Ch] BYREF + unsigned __int16 *v13; // [esp+8h] [ebp-18h] BYREF + int v14; // [esp+Ch] [ebp-14h] + + v5 = this[2]; + v13 = (unsigned __int16 *)a3; + v14 = a4; + v12 = this[3]; + std::`anonymous namespace'::read_utf16_bom((int)&v13, &v12); + v6 = v13; + if ( v5 >= 0xFFFF ) + v5 = 0xFFFF; + if ( a5 ) + { + v7 = a5 - 1; + do + { + if ( !((unsigned int)(v14 - (_DWORD)v6) >> 1) ) + break; + v8 = *v6; + v9 = __ROL2__(*v6, 8); + if ( (v12 & 1) == 0 ) + v8 = v9; + if ( (unsigned __int16)(v8 + 10240) <= 0x7FFu ) + break; + if ( v5 < v8 ) + break; + ++v6; + v11 = v7 != 0; + v13 = v6; + --v7; + } + while ( v11 ); + } + return (char *)v6 - a3; +} + +//----- (0047E4A0) -------------------------------------------------------- +int __stdcall std::__codecvt_utf16_base::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (0047E4C0) -------------------------------------------------------- +int __fastcall std::__codecvt_utf16_base::do_max_length(int a1) +{ + return (*(_DWORD *)(a1 + 16) & 4) == 0 ? 2 : 4; +} + +//----- (0047E4E0) -------------------------------------------------------- +int __thiscall std::__codecvt_utf16_base::do_in( + unsigned int *this, + int a2, + unsigned __int16 *a3, + unsigned __int16 *a4, + unsigned __int16 **a5, + int a6, + int a7, + int *a8) +{ + unsigned int v8; // edx + int result; // eax + unsigned __int16 *v10; // edx + int v11; // esi + unsigned __int16 *v12[2]; // [esp+4h] [ebp-18h] BYREF + int v13[4]; // [esp+Ch] [ebp-10h] BYREF + + v8 = this[4]; + v12[0] = a3; + v12[1] = a4; + v13[0] = a6; + v13[1] = a7; + result = std::`anonymous namespace'::ucs2_in(v12, v13, this[3], v8); + v10 = v12[0]; + v11 = v13[0]; + *a5 = v12[0]; + *a8 = v11; + if ( !result && v10 != a4 ) + return 2; + return result; +} + +//----- (0047E550) -------------------------------------------------------- +int __thiscall std::__codecvt_utf16_base::do_out( + _DWORD *this, + int a2, + unsigned __int16 *a3, + unsigned __int16 *a4, + unsigned __int16 **a5, + _WORD *a6, + int a7, + int *a8) +{ + unsigned int v8; // edi + unsigned __int16 *v9; // edx + int v10; // eax + int v11; // esi + unsigned int v12; // ebx + int v13; // ecx + int v14; // eax + int v16[2]; // [esp+4h] [ebp-1Ch] BYREF + unsigned __int16 *v17[5]; // [esp+Ch] [ebp-14h] BYREF + + v8 = this[3]; + v9 = a3; + v10 = (int)a6; + v17[1] = a4; + v11 = this[4]; + v16[0] = (int)a6; + v16[1] = a7; + v17[0] = a3; + if ( (v11 & 2) == 0 ) + goto LABEL_5; + v12 = a7 - (_DWORD)a6; + v13 = 1; + if ( (v11 & 1) == 0 ) + { + if ( v12 <= 1 ) + goto LABEL_6; + *a6 = -2; + v16[0] = (int)(a6 + 1); + goto LABEL_5; + } + if ( v12 > 1 ) + { + *a6 = -257; + v16[0] = (int)(a6 + 1); +LABEL_5: + v14 = std::`anonymous namespace'::ucs2_out(v17, v16, v8, v11); + v9 = v17[0]; + v13 = v14; + v10 = v16[0]; + } +LABEL_6: + *a5 = v9; + *a8 = v10; + return v13; +} + +//----- (0047E600) -------------------------------------------------------- +char *__thiscall std::__codecvt_utf16_base::do_length(_DWORD *this, int a2, int a3, int a4, int a5) +{ + unsigned int v5; // esi + unsigned __int16 *v6; // edx + int v7; // ecx + unsigned __int16 v8; // ax + unsigned __int16 v9; // bx + bool v11; // al + int v12; // [esp+4h] [ebp-1Ch] BYREF + unsigned __int16 *v13; // [esp+8h] [ebp-18h] BYREF + int v14; // [esp+Ch] [ebp-14h] + + v5 = this[3]; + v13 = (unsigned __int16 *)a3; + v14 = a4; + v12 = this[4]; + std::`anonymous namespace'::read_utf16_bom((int)&v13, &v12); + v6 = v13; + if ( v5 >= 0xFFFF ) + v5 = 0xFFFF; + if ( a5 ) + { + v7 = a5 - 1; + do + { + if ( !((unsigned int)(v14 - (_DWORD)v6) >> 1) ) + break; + v8 = *v6; + v9 = __ROL2__(*v6, 8); + if ( (v12 & 1) == 0 ) + v8 = v9; + if ( (unsigned __int16)(v8 + 10240) <= 0x7FFu ) + break; + if ( v5 < v8 ) + break; + ++v6; + v11 = v7 != 0; + v13 = v6; + --v7; + } + while ( v11 ); + } + return (char *)v6 - a3; +} + +//----- (0047E6C0) -------------------------------------------------------- +const char *std::bad_array_new_length::what() +{ + return "std::bad_array_new_length"; +} + +//----- (0047E6D0) -------------------------------------------------------- +int __stdcall std::__codecvt_utf8_utf16_base::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (0047E6F0) -------------------------------------------------------- +int __fastcall std::__codecvt_utf8_utf16_base::do_max_length(int a1) +{ + return (*(_DWORD *)(a1 + 12) & 4) == 0 ? 4 : 7; +} + +//----- (0047E710) -------------------------------------------------------- +int __thiscall std::__codecvt_utf8_utf16_base::do_in( + int this, + int a2, + unsigned __int8 *a3, + unsigned __int8 *a4, + unsigned __int8 **a5, + unsigned int *a6, + unsigned int *a7, + unsigned int **a8) +{ + unsigned int v8; // edi + unsigned __int8 *v9; // ebp + unsigned int v11; // eax + int result; // eax + unsigned __int8 *v13; // [esp+8h] [ebp-18h] BYREF + unsigned __int8 *v14; // [esp+Ch] [ebp-14h] + + v8 = *(_DWORD *)(this + 8); + v9 = a3; + v13 = a3; + v14 = a4; + if ( (*(_BYTE *)(this + 12) & 4) != 0 + && (unsigned int)(a4 - a3) > 2 + && *(_WORD *)a3 == std::`anonymous namespace'::utf8_bom + && a3[2] == 0xBF ) + { + v9 = a3 + 3; + v13 = a3 + 3; + } + if ( a4 == v9 ) + { +LABEL_13: + result = 0; + } + else + { + while ( 1 ) + { + if ( a7 == a6 ) + { + v9 = v13; + result = 0; + goto LABEL_11; + } + v11 = std::`anonymous namespace'::read_utf8_code_point(&v13, v8); + if ( v11 == -2 ) + { + v9 = v13; + result = 1; + goto LABEL_11; + } + if ( v8 < v11 ) + break; + if ( v11 <= 0xFFFF ) + { + *a6 = v11; + v9 = v13; + ++a6; + if ( v14 == v13 ) + goto LABEL_13; + } + else + { + if ( (unsigned int)((char *)a7 - (char *)a6) <= 4 ) + { + result = 1; + goto LABEL_11; + } + v9 = v13; + a6 += 2; + *(a6 - 1) = (unsigned __int16)((v11 & 0x3FF) - 9216); + *(a6 - 2) = (unsigned __int16)((v11 >> 10) - 10304); + if ( v14 == v9 ) + goto LABEL_13; + } + } + v9 = v13; + result = 2; + } +LABEL_11: + *a5 = v9; + *a8 = a6; + return result; +} +// 55AF54: using guessed type __int16 std::`anonymous namespace'::utf8_bom; + +//----- (0047E860) -------------------------------------------------------- +int __thiscall std::__codecvt_utf8_utf16_base::do_out( + int this, + int a2, + unsigned int *a3, + unsigned int *a4, + unsigned int **a5, + _BYTE *a6, + _BYTE *a7, + _DWORD *a8) +{ + unsigned int v8; // edi + _BYTE *v9; // eax + unsigned int *v10; // ebx + unsigned int v11; // ecx + unsigned int v12; // eax + int v13; // ebp + unsigned int v14; // edx + int v15; // ecx + _BYTE *v17[6]; // [esp+8h] [ebp-18h] BYREF + + v8 = *(_DWORD *)(this + 8); + v9 = a6; + v10 = a3; + v17[0] = a6; + v17[1] = a7; + if ( (*(_BYTE *)(this + 12) & 2) != 0 ) + { + v15 = 1; + if ( (unsigned int)(a7 - a6) <= 2 ) + goto LABEL_13; + a6[2] = -65; + *(_WORD *)a6 = -17425; + v17[0] = a6 + 3; + } + v11 = (char *)a4 - (char *)a3; + if ( a3 == a4 ) + { +LABEL_16: + v9 = v17[0]; + v15 = 0; + } + else + { + while ( 1 ) + { + v14 = *v10; + if ( *v10 - 55296 <= 0x3FF ) + { + if ( v11 <= 4 ) + goto LABEL_16; + v12 = v10[1]; + if ( v12 - 56320 > 0x3FF || (v13 = 2, v14 = v12 + (v14 << 10) - 56613888, v8 < v14) ) + { +LABEL_12: + v9 = v17[0]; + v15 = 2; + goto LABEL_13; + } + } + else + { + if ( v14 - 56320 <= 0x3FF ) + goto LABEL_12; + v13 = 1; + if ( v8 < v14 ) + goto LABEL_12; + } + if ( !(unsigned __int8)std::`anonymous namespace'::write_utf8_code_point(v17, v14) ) + break; + v10 += v13; + v11 = (char *)a4 - (char *)v10; + if ( a4 == v10 ) + goto LABEL_16; + } + v9 = v17[0]; + v15 = 1; + } +LABEL_13: + *a5 = v10; + *a8 = v9; + return v15; +} + +//----- (0047E970) -------------------------------------------------------- +unsigned __int8 *__thiscall std::__codecvt_utf8_utf16_base::do_length( + unsigned int *this, + int a2, + unsigned __int8 *a3, + unsigned __int8 *a4, + unsigned int a5) +{ + return (unsigned __int8 *)(std::`anonymous namespace'::utf16_span(a3, a4, a5, this[2], this[3]) - a3); +} + +//----- (0047E9A0) -------------------------------------------------------- +int __stdcall std::__codecvt_utf8_utf16_base::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (0047E9C0) -------------------------------------------------------- +int __fastcall std::__codecvt_utf8_utf16_base::do_max_length(int a1) +{ + return (*(_DWORD *)(a1 + 12) & 4) == 0 ? 4 : 7; +} + +//----- (0047E9E0) -------------------------------------------------------- +int __thiscall std::__codecvt_utf8_utf16_base::do_in( + _DWORD *this, + int a2, + unsigned __int8 *a3, + unsigned __int8 *a4, + unsigned __int8 **a5, + char *a6, + char *a7, + char **a8) +{ + unsigned int v8; // edx + int result; // eax + unsigned __int8 *v10[2]; // [esp+8h] [ebp-10h] BYREF + char *v11[2]; // [esp+10h] [ebp-8h] BYREF + + v8 = this[2]; + v10[0] = a3; + v10[1] = a4; + v11[0] = a6; + v11[1] = a7; + result = std::`anonymous namespace'::utf16_in(v10, v11, v8, this[3] & 6 | 1, 0); + *a5 = v10[0]; + *a8 = v11[0]; + return result; +} + +//----- (0047EA50) -------------------------------------------------------- +int __thiscall std::__codecvt_utf8_utf16_base::do_out( + int this, + int a2, + unsigned __int16 *a3, + unsigned __int16 *a4, + unsigned __int16 **a5, + _BYTE *a6, + _BYTE *a7, + _DWORD *a8) +{ + unsigned __int16 *v8; // ebx + _BYTE *v9; // eax + unsigned int v10; // esi + int v11; // eax + int v12; // edx + unsigned __int16 *v14[2]; // [esp+4h] [ebp-18h] BYREF + _BYTE *v15[4]; // [esp+Ch] [ebp-10h] BYREF + + v8 = a3; + v9 = a6; + v14[1] = a4; + v10 = *(_DWORD *)(this + 8); + v14[0] = a3; + v15[0] = a6; + v15[1] = a7; + if ( (*(_BYTE *)(this + 12) & 2) != 0 ) + { + v12 = 1; + if ( (unsigned int)(a7 - a6) <= 2 ) + goto LABEL_3; + a6[2] = -65; + *(_WORD *)a6 = -17425; + v15[0] = a6 + 3; + } + v11 = std::`anonymous namespace'::utf16_out(v14, v15, v10, 0); + v8 = v14[0]; + v12 = v11; + v9 = v15[0]; +LABEL_3: + *a5 = v8; + *a8 = v9; + return v12; +} + +//----- (0047EAE0) -------------------------------------------------------- +unsigned __int8 *__thiscall std::__codecvt_utf8_utf16_base::do_length( + unsigned int *this, + int a2, + unsigned __int8 *a3, + unsigned __int8 *a4, + unsigned int a5) +{ + return (unsigned __int8 *)(std::`anonymous namespace'::utf16_span(a3, a4, a5, this[2], this[3]) - a3); +} + +//----- (0047EB10) -------------------------------------------------------- +int __stdcall std::__codecvt_utf8_utf16_base::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (0047EB30) -------------------------------------------------------- +int __fastcall std::__codecvt_utf8_utf16_base::do_max_length(int a1) +{ + return (*(_DWORD *)(a1 + 16) & 4) == 0 ? 4 : 7; +} + +//----- (0047EB50) -------------------------------------------------------- +int __thiscall std::__codecvt_utf8_utf16_base::do_in( + int this, + int a2, + unsigned __int8 *a3, + unsigned __int8 *a4, + unsigned __int8 **a5, + char *a6, + char *a7, + char **a8) +{ + unsigned int v8; // edi + unsigned __int8 *v9; // ebp + unsigned int v11; // eax + int result; // eax + unsigned __int8 *v13; // [esp+8h] [ebp-18h] BYREF + unsigned __int8 *v14; // [esp+Ch] [ebp-14h] + + v8 = *(_DWORD *)(this + 12); + v9 = a3; + v13 = a3; + v14 = a4; + if ( (*(_BYTE *)(this + 16) & 4) != 0 + && (unsigned int)(a4 - a3) > 2 + && *(_WORD *)a3 == std::`anonymous namespace'::utf8_bom + && a3[2] == 0xBF ) + { + v9 = a3 + 3; + v13 = a3 + 3; + } + if ( v9 == a4 ) + { +LABEL_13: + result = 0; + } + else + { + while ( 1 ) + { + if ( a7 == a6 ) + { + v9 = v13; + result = 0; + goto LABEL_11; + } + v11 = std::`anonymous namespace'::read_utf8_code_point(&v13, v8); + if ( v11 == -2 ) + { + v9 = v13; + result = 1; + goto LABEL_11; + } + if ( v8 < v11 ) + break; + if ( v11 <= 0xFFFF ) + { + *(_WORD *)a6 = v11; + v9 = v13; + a6 += 2; + if ( v14 == v13 ) + goto LABEL_13; + } + else + { + if ( (unsigned int)(a7 - a6) <= 2 ) + { + result = 1; + goto LABEL_11; + } + v9 = v13; + a6 += 4; + *((_WORD *)a6 - 1) = (v11 & 0x3FF) - 9216; + *((_WORD *)a6 - 2) = (v11 >> 10) - 10304; + if ( v14 == v9 ) + goto LABEL_13; + } + } + v9 = v13; + result = 2; + } +LABEL_11: + *a5 = v9; + *a8 = a6; + return result; +} +// 55AF54: using guessed type __int16 std::`anonymous namespace'::utf8_bom; + +//----- (0047EC90) -------------------------------------------------------- +int __thiscall std::__codecvt_utf8_utf16_base::do_out( + int this, + int a2, + unsigned __int16 *a3, + unsigned __int16 *a4, + unsigned __int16 **a5, + _BYTE *a6, + _BYTE *a7, + _DWORD *a8) +{ + unsigned int v8; // edi + _BYTE *v9; // eax + unsigned __int16 *v10; // ebx + unsigned int v11; // ecx + int v12; // eax + int v13; // ebp + unsigned int v14; // edx + int v15; // ecx + _BYTE *v17[6]; // [esp+8h] [ebp-18h] BYREF + + v8 = *(_DWORD *)(this + 12); + v9 = a6; + v10 = a3; + v17[0] = a6; + v17[1] = a7; + if ( (*(_BYTE *)(this + 16) & 2) != 0 ) + { + v15 = 1; + if ( (unsigned int)(a7 - a6) <= 2 ) + goto LABEL_13; + a6[2] = -65; + *(_WORD *)a6 = -17425; + v17[0] = a6 + 3; + } + v11 = (char *)a4 - (char *)a3; + if ( a3 == a4 ) + { +LABEL_16: + v9 = v17[0]; + v15 = 0; + } + else + { + while ( 1 ) + { + v14 = *v10; + if ( v14 - 55296 <= 0x3FF ) + { + if ( v11 <= 2 ) + goto LABEL_16; + v12 = v10[1]; + if ( (unsigned int)(v12 - 56320) > 0x3FF || (v13 = 2, v14 = v12 + (v14 << 10) - 56613888, v8 < v14) ) + { +LABEL_12: + v9 = v17[0]; + v15 = 2; + goto LABEL_13; + } + } + else + { + if ( v14 - 56320 <= 0x3FF ) + goto LABEL_12; + v13 = 1; + if ( v8 < v14 ) + goto LABEL_12; + } + if ( !(unsigned __int8)std::`anonymous namespace'::write_utf8_code_point(v17, v14) ) + break; + v10 += v13; + v11 = (char *)a4 - (char *)v10; + if ( a4 == v10 ) + goto LABEL_16; + } + v9 = v17[0]; + v15 = 1; + } +LABEL_13: + *a5 = v10; + *a8 = v9; + return v15; +} + +//----- (0047EDB0) -------------------------------------------------------- +unsigned __int8 *__thiscall std::__codecvt_utf8_utf16_base::do_length( + unsigned int *this, + int a2, + unsigned __int8 *a3, + unsigned __int8 *a4, + unsigned int a5) +{ + return (unsigned __int8 *)(std::`anonymous namespace'::utf16_span(a3, a4, a5, this[3], this[4]) - a3); +} + +//----- (0047EDE0) -------------------------------------------------------- +_DWORD *__thiscall std::_V2::error_category::_M_message[abi:cxx11](_DWORD *this, int a2, int a3) +{ + unsigned int v4; // [esp+8h] [ebp-70h] + void *Block[2]; // [esp+58h] [ebp-20h] BYREF + char v7; // [esp+60h] [ebp-18h] BYREF + + (*(void (__thiscall **)(void **, int, int))(*(_DWORD *)a2 + 16))(Block, a2, a3); + std::__cow_string::__cow_string(this, (std::__cow_string *)Block[0], (size_t)Block[1], v4); + if ( Block[0] != &v7 ) + operator delete(Block[0]); + return this; +} +// 47EE4C: variable 'v4' is possibly undefined + +//----- (0047EEB0) -------------------------------------------------------- +void *__thiscall std::_V2::error_category::_M_message(void *ecx0, std::_V2::error_category *this, int a3) +{ + int v3; // ecx + int v4; // eax + unsigned int v6; // [esp+8h] [ebp-60h] + char v8[13]; // [esp+5Bh] [ebp-Dh] BYREF + + (*(void (__thiscall **)(char *, std::_V2::error_category *, int))(*(_DWORD *)this + 12))(&v8[1], this, a3); + std::__sso_string::__sso_string((int)ecx0, *(std::__sso_string **)&v8[1], *(_DWORD *)(*(_DWORD *)&v8[1] - 12), v6); + v3 = *(_DWORD *)&v8[1]; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(*(_DWORD *)&v8[1] - 4), 0xFFFFFFFF) > 0 ) + return ecx0; +LABEL_5: + std::string::_Rep::_M_destroy((void *)(v3 - 12), (int)v8); + return ecx0; + } + v4 = *(_DWORD *)(*(_DWORD *)&v8[1] - 4); + *(_DWORD *)(*(_DWORD *)&v8[1] - 4) = v4 - 1; + if ( v4 <= 0 ) + goto LABEL_5; + return ecx0; +} +// 47EF1C: variable 'v6' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (0047EFA0) -------------------------------------------------------- +bool __userpurge std::_V2::error_category::equivalent@( + int a1@, + std::_V2::error_category *this, + const std::error_code *a3, + int a4) +{ + bool result; // al + + result = 0; + if ( *((_DWORD *)this + 1) == a1 ) + return *(_DWORD *)this == (_DWORD)a3; + return result; +} + +//----- (0047EFC0) -------------------------------------------------------- +int __thiscall std::_V2::error_category::equivalent(void *this, int a2, _DWORD *a3) +{ + int v3; // eax + int v4; // edx + int v5; // ecx + int v6; // edx + + v3 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)this + 20))(this, a2); + v5 = v4; + v6 = 0; + if ( a3[1] == v5 ) + LOBYTE(v6) = *a3 == v3; + return v6; +} +// 47EFD4: variable 'v4' is possibly undefined + +//----- (0047F000) -------------------------------------------------------- +std::_V2::error_category *__stdcall std::_V2::error_category::default_error_condition( + std::_V2::error_category *this, + int a2) +{ + return this; +} + +//----- (0047F010) -------------------------------------------------------- +BOOL __thiscall std::map::count(_DWORD *this, int a2) +{ + _DWORD *v2; // esi + _DWORD *v3; // ebx + _DWORD *i; // edi + char v5; // al + _DWORD *v6; // edx + + v2 = this + 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v6 ) + { + v5 = std::operator<((int)(i + 4), a2); + v6 = (_DWORD *)i[3]; + if ( !v5 ) + v6 = (_DWORD *)i[2]; + if ( !v5 ) + v3 = i; + } + if ( v2 != v3 && (unsigned __int8)std::operator<(a2, (int)(v3 + 4)) ) + v3 = v2; + return v2 != v3; +} + +//----- (0047F074) -------------------------------------------------------- +BOOL __thiscall std::map::count(_DWORD *this, int a2) +{ + _DWORD *v2; // esi + _DWORD *v3; // ebx + _DWORD *i; // edi + char v5; // al + _DWORD *v6; // edx + + v2 = this + 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v6 ) + { + v5 = std::operator<((int)(i + 4), a2); + v6 = (_DWORD *)i[3]; + if ( !v5 ) + v6 = (_DWORD *)i[2]; + if ( !v5 ) + v3 = i; + } + if ( v2 != v3 && (unsigned __int8)std::operator<(a2, (int)(v3 + 4)) ) + v3 = v2; + return v2 != v3; +} + +//----- (0047F0E0) -------------------------------------------------------- +unsigned __int8 *__thiscall std::ctype::do_tolower(_DWORD *this, unsigned __int8 *a2, unsigned __int8 *a3) +{ + unsigned __int8 *v3; // ebx + unsigned __int8 v5; // al + int (__thiscall *v6)(_DWORD *, int); // edx + + v3 = a2; + if ( a2 < a3 ) + { + do + { + while ( 1 ) + { + v6 = *(int (__thiscall **)(_DWORD *, int))(*this + 16); + v5 = *v3; + if ( v6 == std::ctype::do_tolower ) + break; + *v3++ = v6(this, (char)v5); + if ( a3 == v3 ) + return a3; + } + if ( (*(_BYTE *)(this[6] + 2 * v5) & 1) != 0 ) + v5 += 32; + *v3++ = v5; + } + while ( a3 != v3 ); + } + return a3; +} + +//----- (0047F150) -------------------------------------------------------- +int __thiscall std::ctype::do_tolower(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + if ( (*(_BYTE *)(this[6] + 2 * (unsigned __int8)a2) & 1) != 0 ) + return a2 + 32; + return result; +} + +//----- (0047F170) -------------------------------------------------------- +unsigned __int8 *__thiscall std::ctype::do_toupper(_DWORD *this, unsigned __int8 *a2, unsigned __int8 *a3) +{ + unsigned __int8 *v3; // ebx + unsigned __int8 v5; // al + int (__thiscall *v6)(_DWORD *, int); // edx + + v3 = a2; + if ( a2 < a3 ) + { + do + { + while ( 1 ) + { + v6 = *(int (__thiscall **)(_DWORD *, int))(*this + 8); + v5 = *v3; + if ( v6 == std::ctype::do_toupper ) + break; + *v3++ = v6(this, (char)v5); + if ( a3 == v3 ) + return a3; + } + if ( (*(_BYTE *)(this[6] + 2 * v5) & 2) != 0 ) + v5 -= 32; + *v3++ = v5; + } + while ( a3 != v3 ); + } + return a3; +} + +//----- (0047F1E0) -------------------------------------------------------- +int __thiscall std::ctype::do_toupper(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + if ( (*(_BYTE *)(this[6] + 2 * (unsigned __int8)a2) & 2) != 0 ) + return a2 - 32; + return result; +} + +//----- (0047F200) -------------------------------------------------------- +int __fastcall std::ctype::_M_widen_init(int a1) +{ + int i; // eax + char *Buf2; // edx + void (__thiscall *v4)(int, _DWORD *, char *, int); // eax + int result; // eax + char *v6; // [esp+1Ch] [ebp-120h] + _DWORD Buf1[64]; // [esp+20h] [ebp-11Ch] BYREF + char v8[28]; // [esp+120h] [ebp-1Ch] BYREF + + for ( i = 0; i != 256; ++i ) + *((_BYTE *)Buf1 + i) = i; + Buf2 = (char *)(a1 + 29); + v4 = *(void (__thiscall **)(int, _DWORD *, char *, int))(*(_DWORD *)a1 + 28); + if ( (char *)v4 == (char *)std::ctype::do_widen ) + { + *(_DWORD *)(a1 + 29) = Buf1[0]; + *(_DWORD *)(a1 + 281) = Buf1[63]; + qmemcpy( + (void *)((a1 + 33) & 0xFFFFFFFC), + (const void *)((char *)Buf1 - &Buf2[-((a1 + 33) & 0xFFFFFFFC)]), + 4 * ((unsigned int)&Buf2[-((a1 + 33) & 0xFFFFFFFC) + 256] >> 2)); + } + else + { + v6 = (char *)(a1 + 29); + v4(a1, Buf1, v8, a1 + 29); + Buf2 = v6; + } + *(_BYTE *)(a1 + 28) = 1; + result = memcmp(Buf1, Buf2, 0x100u); + if ( result ) + *(_BYTE *)(a1 + 28) = 2; + return result; +} +// 47F200: using guessed type char var_1C[28]; + +//----- (0047F2B0) -------------------------------------------------------- +int __fastcall std::ctype::_M_narrow_init(int a1) +{ + int i; // eax + char *Buf2; // edx + void (__thiscall *v4)(int, _DWORD *, char *, _DWORD, int); // eax + int result; // eax + int (__thiscall *v6)(int, _DWORD *, char *, int, char *); // eax + char *v7; // [esp+1Ch] [ebp-130h] + char v8; // [esp+2Fh] [ebp-11Dh] BYREF + _DWORD Buf1[64]; // [esp+30h] [ebp-11Ch] BYREF + char v10[28]; // [esp+130h] [ebp-1Ch] BYREF + + for ( i = 0; i != 256; ++i ) + *((_BYTE *)Buf1 + i) = i; + Buf2 = (char *)(a1 + 285); + v4 = *(void (__thiscall **)(int, _DWORD *, char *, _DWORD, int))(*(_DWORD *)a1 + 36); + if ( (char *)v4 == (char *)std::ctype::do_narrow ) + { + *(_DWORD *)(a1 + 285) = Buf1[0]; + *(_DWORD *)(a1 + 537) = Buf1[63]; + qmemcpy( + (void *)((a1 + 289) & 0xFFFFFFFC), + (const void *)((char *)Buf1 - &Buf2[-((a1 + 289) & 0xFFFFFFFC)]), + 4 * ((unsigned int)&Buf2[-((a1 + 289) & 0xFFFFFFFC) + 256] >> 2)); + } + else + { + v7 = (char *)(a1 + 285); + v4(a1, Buf1, v10, 0, a1 + 285); + Buf2 = v7; + } + *(_BYTE *)(a1 + 541) = 1; + result = memcmp(Buf1, Buf2, 0x100u); + if ( result + || ((v6 = *(int (__thiscall **)(int, _DWORD *, char *, int, char *))(*(_DWORD *)a1 + 36), + (char *)v6 != (char *)std::ctype::do_narrow) + ? (result = v6(a1, Buf1, (char *)Buf1 + 1, 1, &v8)) + : (result = LOBYTE(Buf1[0]), v8 = Buf1[0]), + v8 == 1) ) + { + *(_BYTE *)(a1 + 541) = 2; + } + return result; +} +// 47F2B0: using guessed type char var_1C[28]; + +//----- (0047F3C0) -------------------------------------------------------- +_BYTE *__thiscall std::ctype::widen(_BYTE *this, _BYTE *Src, _BYTE *a3, void *a4) +{ + char v4; // al + _BYTE *(__stdcall *v5)(_BYTE *, _BYTE *, void *); // eax + + v4 = this[28]; + if ( v4 == 1 ) + goto LABEL_4; + if ( v4 ) + { + v5 = *(_BYTE *(__stdcall **)(_BYTE *, _BYTE *, void *))(*(_DWORD *)this + 28); + if ( v5 == std::ctype::do_widen ) + goto LABEL_4; + return v5(Src, a3, a4); + } + std::ctype::_M_widen_init((int)this); + v5 = *(_BYTE *(__stdcall **)(_BYTE *, _BYTE *, void *))(*(_DWORD *)this + 28); + if ( v5 != std::ctype::do_widen ) + return v5(Src, a3, a4); +LABEL_4: + if ( Src == a3 ) + return Src; + memcpy(a4, Src, a3 - Src); + return a3; +} + +//----- (0047F450) -------------------------------------------------------- +int __thiscall std::ctype::narrow(_BYTE *this, int a2, int a3) +{ + int result; // eax + int v5; // ecx + int (__stdcall *v6)(unsigned __int8, int); // eax + + result = (unsigned __int8)this[(unsigned __int8)a2 + 285]; + if ( !(_BYTE)result ) + { + v5 = a2; + v6 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)this + 32); + if ( v6 != std::ctype::do_narrow ) + v5 = ((int (__thiscall *)(_BYTE *, _DWORD, _DWORD))v6)(this, (char)a2, (char)a3); + result = a3; + if ( (_BYTE)a3 != (_BYTE)v5 ) + { + this[(unsigned __int8)a2 + 285] = v5; + return v5; + } + } + return result; +} + +//----- (0047F4C0) -------------------------------------------------------- +_BYTE *__stdcall std::ctype::do_widen(_BYTE *Src, _BYTE *a2, void *a3) +{ + if ( a2 != Src ) + memcpy(a3, Src, a2 - Src); + return a2; +} + +//----- (0047F500) -------------------------------------------------------- +int __stdcall std::ctype::do_widen(unsigned __int8 a1) +{ + return a1; +} + +//----- (0047F510) -------------------------------------------------------- +_BYTE *__stdcall std::ctype::do_narrow(_BYTE *Src, _BYTE *a2, int a3, void *a4) +{ + if ( a2 != Src ) + memcpy(a4, Src, a2 - Src); + return a2; +} + +//----- (0047F550) -------------------------------------------------------- +int __stdcall std::ctype::do_narrow(unsigned __int8 a1, int a2) +{ + return a1; +} + +//----- (0047F560) -------------------------------------------------------- +wint_t *__thiscall std::ctype::do_scan_is(_WORD *this, unsigned __int16 a2, wint_t *a3, unsigned int a4) +{ + _WORD *v4; // edi + wint_t C; // si + int (__thiscall *v6)(_WORD *, unsigned __int16, wint_t); // eax + _WORD *v7; // ebp + wint_t *v9; // [esp+14h] [ebp-28h] + + if ( (unsigned int)a3 >= a4 ) + return a3; + v9 = a3; + v4 = this + 343; + while ( 1 ) + { + C = *v9; + v6 = *(int (__thiscall **)(_WORD *, unsigned __int16, wint_t))(*(_DWORD *)this + 8); + if ( v6 == std::ctype::do_is ) + break; + if ( (unsigned __int8)v6(this, a2, *v9) ) + return v9; +LABEL_10: + if ( a4 <= (unsigned int)++v9 ) + return v9; + } + v7 = this + 327; + while ( (*v7 & a2) == 0 || !iswctype(C, v7[16]) ) + { + if ( v4 == ++v7 ) + goto LABEL_10; + } + return v9; +} + +//----- (0047F640) -------------------------------------------------------- +unsigned int __stdcall std::ctype::do_tolower(wint_t *a1, unsigned int a2) +{ + wint_t *v2; // ebx + wint_t C; // ax + + v2 = a1; + if ( (unsigned int)a1 < a2 ) + { + do + { + C = *v2++; + *(v2 - 1) = towlower(C); + } + while ( v2 != &a1[((a2 - 1 - (unsigned int)a1) >> 1) + 1] ); + } + return a2; +} + +//----- (0047F690) -------------------------------------------------------- +wint_t __stdcall std::ctype::do_tolower(wint_t C) +{ + return towlower(C); +} + +//----- (0047F6B0) -------------------------------------------------------- +unsigned int __stdcall std::ctype::do_toupper(wint_t *a1, unsigned int a2) +{ + wint_t *v2; // ebx + wint_t C; // ax + + v2 = a1; + if ( (unsigned int)a1 < a2 ) + { + do + { + C = *v2++; + *(v2 - 1) = towupper(C); + } + while ( v2 != &a1[((a2 - 1 - (unsigned int)a1) >> 1) + 1] ); + } + return a2; +} + +//----- (0047F700) -------------------------------------------------------- +wint_t __stdcall std::ctype::do_toupper(wint_t C) +{ + return towupper(C); +} + +//----- (0047F720) -------------------------------------------------------- +wint_t *__thiscall std::ctype::do_scan_not(_WORD *this, unsigned __int16 a2, wint_t *a3, unsigned int a4) +{ + _WORD *v4; // ebp + wint_t C; // si + int (__thiscall *v6)(_WORD *, unsigned __int16, wint_t); // eax + _WORD *v7; // edi + wint_t *v9; // [esp+14h] [ebp-28h] + + if ( (unsigned int)a3 >= a4 ) + return a3; + v9 = a3; + v4 = this + 343; + do + { + while ( 1 ) + { + C = *v9; + v6 = *(int (__thiscall **)(_WORD *, unsigned __int16, wint_t))(*(_DWORD *)this + 8); + if ( v6 == std::ctype::do_is ) + break; + if ( (unsigned __int8)v6(this, a2, *v9) ) + { + if ( a4 > (unsigned int)++v9 ) + continue; + } + return v9; + } + v7 = this + 327; + while ( (*v7 & a2) == 0 || !iswctype(C, v7[16]) ) + { + if ( v4 == ++v7 ) + return v9; + } + ++v9; + } + while ( a4 > (unsigned int)v9 ); + return v9; +} + +//----- (0047F800) -------------------------------------------------------- +int __stdcall std::ctype::_M_convert_to_wmask(unsigned __int16 a1) +{ + int v1; // edx + int v3; // eax + int v4; // eax + int v5; // eax + int v6; // eax + int v7; // eax + int v8; // eax + int v9; // eax + int v10; // eax + int v11; // eax + int v12; // eax + int v13; // eax + int v14; // eax + + if ( a1 > 0x40u ) + { + switch ( a1 ) + { + case 0x200u: + LOWORD(v13) = wctype("punct"); + return v13; + case 0x20Cu: + LOWORD(v3) = wctype("graph"); + return v3; + case 0x100u: + LOWORD(v4) = wctype("cntrl"); + return v4; + case 0x400u: + LOWORD(v14) = wctype("blank"); + return v14; + default: + return 0; + } + } + else + { + v1 = 0; + if ( a1 ) + { + switch ( a1 ) + { + case 1u: + LOWORD(v6) = wctype("upper"); + v1 = v6; + break; + case 2u: + LOWORD(v7) = wctype("lower"); + v1 = v7; + break; + case 4u: + LOWORD(v8) = wctype("alpha"); + v1 = v8; + break; + case 8u: + LOWORD(v9) = wctype("digit"); + v1 = v9; + break; + case 0xCu: + LOWORD(v10) = wctype("alnum"); + v1 = v10; + break; + case 0x10u: + LOWORD(v11) = wctype("xdigit"); + v1 = v11; + break; + case 0x20u: + LOWORD(v12) = wctype("space"); + v1 = v12; + break; + case 0x40u: + LOWORD(v5) = wctype("print"); + v1 = v5; + break; + default: + return 0; + } + } + } + return v1; +} +// 47F854: variable 'v3' is possibly undefined +// 47F876: variable 'v4' is possibly undefined +// 47F88C: variable 'v5' is possibly undefined +// 47F89C: variable 'v6' is possibly undefined +// 47F8AC: variable 'v7' is possibly undefined +// 47F8C4: variable 'v8' is possibly undefined +// 47F8DC: variable 'v9' is possibly undefined +// 47F8F4: variable 'v10' is possibly undefined +// 47F90C: variable 'v11' is possibly undefined +// 47F924: variable 'v12' is possibly undefined +// 47F93C: variable 'v13' is possibly undefined +// 47F959: variable 'v14' is possibly undefined + +//----- (0047F960) -------------------------------------------------------- +unsigned int __thiscall std::ctype::do_is(char *this, wint_t *a2, unsigned int a3, _WORD *a4) +{ + wint_t *v4; // ebx + _WORD *v5; // edi + _WORD *v6; // ebp + __int16 v7; // si + _WORD *v8; // eax + _WORD *v10; // [esp+1Ch] [ebp-20h] + + v4 = a2; + if ( (unsigned int)a2 < a3 ) + { + v5 = this + 686; + v10 = this + 654; + do + { + v6 = v10; + v7 = 0; + do + { + if ( iswctype(*v4, v6[16]) ) + v7 |= *v6; + ++v6; + } + while ( v6 != v5 ); + v8 = a4; + ++v4; + ++a4; + *v8 = v7; + } + while ( a3 > (unsigned int)v4 ); + } + return a3; +} + +//----- (0047F9E0) -------------------------------------------------------- +int __thiscall std::ctype::do_is(_WORD *this, unsigned __int16 a2, wint_t C) +{ + _WORD *v3; // esi + _WORD *v4; // ebx + + v3 = this + 343; + v4 = this + 327; + do + { + if ( (*v4 & a2) != 0 && iswctype(C, v4[16]) ) + return 1; + ++v4; + } + while ( v4 != v3 ); + return 0; +} + +//----- (0047FA50) -------------------------------------------------------- +unsigned __int8 *__thiscall std::ctype::do_widen( + _WORD *this, + unsigned __int8 *a2, + unsigned __int8 *a3, + int a4) +{ + unsigned __int8 *v4; // eax + int v7; // ecx + + v4 = a2; + if ( a2 < a3 ) + { + do + { + v7 = *v4++; + a4 += 2; + *(_WORD *)(a4 - 2) = this[v7 + 71]; + } + while ( a3 != v4 ); + } + return a3; +} + +//----- (0047FA90) -------------------------------------------------------- +int __thiscall std::ctype::do_widen(unsigned __int16 *this, unsigned __int8 a2) +{ + return this[a2 + 71]; +} + +//----- (0047FAA0) -------------------------------------------------------- +unsigned int __thiscall std::ctype::do_narrow(_BYTE *this, wint_t *a2, unsigned int a3, char a4, int a5) +{ + wint_t *v5; // esi + int v6; // ebx + unsigned int v8; // ebp + int v9; // ecx + int v10; // eax + int v12; // eax + + v5 = a2; + v6 = a5; + if ( this[12] ) + { + if ( (unsigned int)a2 < a3 ) + { + v8 = a5 + ((a3 - 1 - (unsigned int)a2) >> 1) + 1; + do + { + while ( 1 ) + { + v9 = *v5; + if ( (unsigned __int16)v9 > 0x7Fu ) + break; + ++v6; + ++v5; + *(_BYTE *)(v6 - 1) = this[v9 + 13]; + if ( v8 == v6 ) + return a3; + } + v10 = wctob(*v5); + if ( v10 == -1 ) + LOBYTE(v10) = a4; + ++v6; + ++v5; + *(_BYTE *)(v6 - 1) = v10; + } + while ( v8 != v6 ); + } + return a3; + } + if ( (unsigned int)a2 >= a3 ) + return a3; + do + { + v12 = wctob(*v5); + if ( v12 == -1 ) + LOBYTE(v12) = a4; + ++v6; + ++v5; + *(_BYTE *)(v6 - 1) = v12; + } + while ( v6 != a5 + ((a3 - 1 - (unsigned int)a2) >> 1) + 1 ); + return a3; +} + +//----- (0047FB80) -------------------------------------------------------- +int __thiscall std::ctype::do_narrow(_BYTE *this, wint_t WCh, int a3) +{ + int result; // eax + + if ( WCh <= 0x7Fu && this[12] ) + return (unsigned __int8)this[WCh + 13]; + result = wctob(WCh); + if ( result == -1 ) + return a3; + return result; +} + +//----- (0047FBC0) -------------------------------------------------------- +int __fastcall std::locale::id::_M_id(volatile signed __int32 *a1) +{ + int v1; // eax + + v1 = *a1; + if ( *a1 ) + return v1 - 1; + if ( !_CRT_MT ) + { + v1 = std::locale::id::_S_refcount + 1; + std::locale::id::_S_refcount = v1; + *a1 = v1; + return v1 - 1; + } + _InterlockedCompareExchange(a1, _InterlockedIncrement(&std::locale::id::_S_refcount), 0); + return *a1 - 1; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F6EC: using guessed type int std::locale::id::_S_refcount; + +//----- (0047FC10) -------------------------------------------------------- +int __thiscall std::locale::name[abi:cxx11](int this, int a2) +{ + int v2; // eax + unsigned int v3; // eax + int v4; // eax + unsigned int v5; // edx + unsigned int v6; // eax + int v7; // eax + unsigned int v8; // edx + unsigned int v9; // eax + int v10; // eax + unsigned int v11; // edx + unsigned int v12; // eax + size_t v14; // eax + const char *v15; // [esp+0h] [ebp-68h] + char *Str; // [esp+14h] [ebp-54h] + int v17; // [esp+18h] [ebp-50h] + size_t v18; // [esp+1Ch] [ebp-4Ch] + size_t v19; // [esp+1Ch] [ebp-4Ch] + size_t v20; // [esp+1Ch] [ebp-4Ch] + char *Str1; // [esp+20h] [ebp-48h] + char *Str1a; // [esp+20h] [ebp-48h] + char *Str1b; // [esp+20h] [ebp-48h] + char *Str1c; // [esp+20h] [ebp-48h] + char *Str1d; // [esp+20h] [ebp-48h] + char *Str1e; // [esp+20h] [ebp-48h] + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-44h] + struct _Unwind_Exception *lpuexcpta; // [esp+24h] [ebp-44h] + struct _Unwind_Exception *lpuexcptb; // [esp+24h] [ebp-44h] + int lpuexcptc; // [esp+24h] [ebp-44h] + + *(_DWORD *)(this + 4) = 0; + *(_DWORD *)this = this + 8; + *(_BYTE *)(this + 8) = 0; + v17 = this + 8; + v18 = *(_DWORD *)(*(_DWORD *)a2 + 16); + Str = *(char **)v18; + if ( *(_DWORD *)v18 ) + { + if ( *(_DWORD *)(v18 + 4) ) + { + lpuexcpt = 0; + Str1 = *(char **)v18; + while ( 1 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v15 = Str1; + Str1 = *(char **)(v18 + 4 * (_DWORD)lpuexcpt); + v2 = strcmp(v15, Str1); + if ( (unsigned int)lpuexcpt > 4 ) + break; + if ( v2 ) + goto LABEL_6; + } + if ( !v2 ) + goto LABEL_26; +LABEL_6: + std::string::reserve((_DWORD *)this, 0x80u); + v3 = strlen(*std::locale::_S_categories); + if ( v3 > 0x3FFFFFFF - *(_DWORD *)(this + 4) ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append((_DWORD *)this, *std::locale::_S_categories, v3); + Str1a = *(char **)(this + 4); + lpuexcpta = (struct _Unwind_Exception *)(Str1a + 1); + v4 = *(_DWORD *)this; + if ( v17 == *(_DWORD *)this ) + v5 = 15; + else + v5 = *(_DWORD *)(this + 8); + if ( (unsigned int)lpuexcpta > v5 ) + { + std::string::_M_mutate(this, (size_t)Str1a, 0, 0, 1u); + v4 = *(_DWORD *)this; + } + Str1a[v4] = 61; + *(_DWORD *)(this + 4) = lpuexcpta; + Str1a[*(_DWORD *)this + 1] = 0; + lpuexcptb = **(struct _Unwind_Exception ***)(*(_DWORD *)a2 + 16); + v6 = strlen((const char *)lpuexcptb); + if ( v6 > 0x3FFFFFFF - *(_DWORD *)(this + 4) ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append((_DWORD *)this, lpuexcptb, v6); + for ( lpuexcptc = 1; lpuexcptc != 6; ++lpuexcptc ) + { + v19 = *(_DWORD *)(this + 4); + Str1b = (char *)(v19 + 1); + v7 = *(_DWORD *)this; + if ( v17 == *(_DWORD *)this ) + v8 = 15; + else + v8 = *(_DWORD *)(this + 8); + if ( (unsigned int)Str1b > v8 ) + { + std::string::_M_mutate(this, v19, 0, 0, 1u); + v7 = *(_DWORD *)this; + } + *(_BYTE *)(v7 + v19) = 59; + *(_DWORD *)(this + 4) = Str1b; + *(_BYTE *)(*(_DWORD *)this + v19 + 1) = 0; + Str1c = std::locale::_S_categories[lpuexcptc]; + v9 = strlen(Str1c); + if ( v9 > 0x3FFFFFFF - *(_DWORD *)(this + 4) ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append((_DWORD *)this, Str1c, v9); + v10 = *(_DWORD *)this; + v20 = *(_DWORD *)(this + 4); + Str1d = (char *)(v20 + 1); + if ( v17 == *(_DWORD *)this ) + v11 = 15; + else + v11 = *(_DWORD *)(this + 8); + if ( (unsigned int)Str1d > v11 ) + { + std::string::_M_mutate(this, v20, 0, 0, 1u); + v10 = *(_DWORD *)this; + } + *(_BYTE *)(v10 + v20) = 61; + *(_DWORD *)(this + 4) = Str1d; + *(_BYTE *)(*(_DWORD *)this + v20 + 1) = 0; + Str1e = *(char **)(*(_DWORD *)(*(_DWORD *)a2 + 16) + lpuexcptc * 4); + v12 = strlen(Str1e); + if ( v12 > 0x3FFFFFFF - *(_DWORD *)(this + 4) ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append((_DWORD *)this, Str1e, v12); + } + } + else + { +LABEL_26: + v14 = strlen(Str); + std::string::_M_replace((unsigned int *)this, 0, 0, Str, v14); + } + } + else + { + std::string::_M_replace_aux((_DWORD *)this, 0, 0, 1u, 42); + } + return this; +} +// 55AF6C: using guessed type char **std::locale::_S_categories; + +//----- (004800B0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +int *__thiscall std::locale::name(int *ecx0, std::locale *this) +{ + _DWORD *v2; // eax + int v3; // edx + int v4; // eax + size_t v5; // eax + int v6; // eax + size_t v7; // eax + int v8; // eax + size_t v9; // eax + int v10; // eax + size_t v11; // eax + size_t v13; // eax + const char *v14; // [esp-4h] [ebp-7Ch] + unsigned int v15; // [esp+0h] [ebp-78h] + unsigned int v16; // [esp+0h] [ebp-78h] + unsigned int v17; // [esp+0h] [ebp-78h] + unsigned int v18; // [esp+0h] [ebp-78h] + unsigned int v19; // [esp+4h] [ebp-74h] + unsigned int v20; // [esp+4h] [ebp-74h] + unsigned int v21; // [esp+4h] [ebp-74h] + char v22; // [esp+Ch] [ebp-6Ch] + char *Str; // [esp+18h] [ebp-60h] + int v24; // [esp+1Ch] [ebp-5Ch] + int v25; // [esp+1Ch] [ebp-5Ch] + int v26; // [esp+1Ch] [ebp-5Ch] + char *Str1; // [esp+20h] [ebp-58h] + char *Str1a; // [esp+20h] [ebp-58h] + char *Str1b; // [esp+20h] [ebp-58h] + char *Str1d; // [esp+20h] [ebp-58h] + char *Str1c; // [esp+20h] [ebp-58h] + char *Str1e; // [esp+20h] [ebp-58h] + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-54h] + struct _Unwind_Exception *lpuexcpta; // [esp+24h] [ebp-54h] + struct _Unwind_Exception *lpuexcptc; // [esp+24h] [ebp-54h] + int lpuexcptb; // [esp+24h] [ebp-54h] + unsigned int v38[2]; // [esp+6Fh] [ebp-9h] BYREF + + v2 = std::string::_S_construct(0, 0); + v3 = *(_DWORD *)this; + *ecx0 = (int)v2; + v24 = *(_DWORD *)(v3 + 16); + Str = *(char **)v24; + if ( *(_DWORD *)v24 ) + { + if ( *(_DWORD *)(v24 + 4) ) + { + lpuexcpt = 0; + Str1 = *(char **)v24; + while ( 1 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v14 = Str1; + Str1 = *(char **)(v24 + 4 * (_DWORD)lpuexcpt); + v4 = strcmp(v14, Str1); + if ( (unsigned int)lpuexcpt > 4 ) + break; + if ( v4 ) + goto LABEL_6; + } + if ( !v4 ) + goto LABEL_19; +LABEL_6: + std::string::reserve(ecx0, (std::string *)0x80, v15); + v5 = strlen(*std::locale::_S_categories); + std::string::append(ecx0, (std::string *)*std::locale::_S_categories, v5, (unsigned int)v38); + Str1a = *(char **)(*ecx0 - 12); + lpuexcpta = (struct _Unwind_Exception *)(Str1a + 1); + if ( (unsigned int)(Str1a + 1) > *(_DWORD *)(*ecx0 - 8) || *(int *)(*ecx0 - 4) > 0 ) + std::string::reserve(ecx0, lpuexcpta, v16); + *(_BYTE *)(*ecx0 + *(_DWORD *)(*ecx0 - 12)) = 61; + v6 = *ecx0; + *(_DWORD *)(v6 - 12) = lpuexcpta; + *(_DWORD *)(v6 - 4) = 0; + Str1a[v6 + 1] = 0; + lpuexcptc = **(struct _Unwind_Exception ***)(*(_DWORD *)this + 16); + v7 = strlen((const char *)lpuexcptc); + std::string::append(ecx0, lpuexcptc, v7, v19); + for ( lpuexcptb = 1; lpuexcptb != 6; ++lpuexcptb ) + { + v25 = *(_DWORD *)(*ecx0 - 12); + Str1b = (char *)(v25 + 1); + if ( (unsigned int)(v25 + 1) > *(_DWORD *)(*ecx0 - 8) || *(int *)(*ecx0 - 4) > 0 ) + std::string::reserve(ecx0, (std::string *)Str1b, v17); + *(_BYTE *)(*ecx0 + *(_DWORD *)(*ecx0 - 12)) = 59; + v8 = *ecx0; + *(_DWORD *)(v8 - 12) = Str1b; + *(_DWORD *)(v8 - 4) = 0; + *(_BYTE *)(v8 + v25 + 1) = 0; + Str1d = std::locale::_S_categories[lpuexcptb]; + v9 = strlen(Str1d); + std::string::append(ecx0, (std::string *)Str1d, v9, v20); + v26 = *(_DWORD *)(*ecx0 - 12); + Str1c = (char *)(v26 + 1); + if ( (unsigned int)(v26 + 1) > *(_DWORD *)(*ecx0 - 8) || *(int *)(*ecx0 - 4) > 0 ) + std::string::reserve(ecx0, (std::string *)Str1c, v18); + *(_BYTE *)(*ecx0 + *(_DWORD *)(*ecx0 - 12)) = 61; + v10 = *ecx0; + *(_DWORD *)(v10 - 12) = Str1c; + *(_DWORD *)(v10 - 4) = 0; + *(_BYTE *)(v10 + v26 + 1) = 0; + Str1e = *(char **)(*(_DWORD *)(*(_DWORD *)this + 16) + lpuexcptb * 4); + v11 = strlen(Str1e); + std::string::append(ecx0, (std::string *)Str1e, v11, v21); + } + } + else + { +LABEL_19: + v13 = strlen(Str); + std::string::assign((char **)ecx0, (std::string *)Str, v13, (unsigned int)v38); + } + } + else + { + std::string::_M_replace_aux((char **)ecx0, 0, *(v2 - 3), 1u, 42, v22); + } + return ecx0; +} +// 480406: positive sp value 4 has been found +// 48017E: variable 'v15' is possibly undefined +// 4801DB: variable 'v16' is possibly undefined +// 48022F: variable 'v19' is possibly undefined +// 48026B: variable 'v17' is possibly undefined +// 4802C0: variable 'v20' is possibly undefined +// 4802F5: variable 'v18' is possibly undefined +// 48034D: variable 'v21' is possibly undefined +// 4803E0: variable 'v22' is possibly undefined +// 55AF6C: using guessed type char **std::locale::_S_categories; + +//----- (00480420) -------------------------------------------------------- +_DWORD *__userpurge std::locale::facet::_M_cow_shim@( + volatile signed __int32 *a1@, + std::locale::facet *this, + const std::locale::id *a3) +{ + void *v3; // eax + _WORD *v5; // eax + _DWORD *v6; // eax + int v7; // ecx + _DWORD *v8; // eax + _DWORD *v9; // eax + _DWORD *v10; // eax + int c_locale; // eax + int v12; // edx + _DWORD *v13; // eax + _DWORD *v14; // eax + _WORD *v15; // eax + _DWORD *v16; // eax + int v17; // ecx + _WORD *v18; // eax + _DWORD *v19; // eax + int v20; // ecx + int v21; // edx + _DWORD *v22; // eax + _DWORD *v23; // eax + _DWORD *v24; // eax + _DWORD *v25; // eax + _DWORD *v26; // eax + _DWORD *v27; // eax + _DWORD *v28; // eax + int v29; // ecx + _DWORD *v30; // eax + _DWORD *v31; // eax + int v32; // edx + int v33; // [esp+0h] [ebp-78h] + int v34; // [esp+0h] [ebp-78h] + int v35; // [esp+0h] [ebp-78h] + int v36; // [esp+0h] [ebp-78h] + int v37; // [esp+0h] [ebp-78h] + int v38; // [esp+0h] [ebp-78h] + int v39; // [esp+30h] [ebp-48h] + int v40; // [esp+30h] [ebp-48h] + int v41; // [esp+30h] [ebp-48h] + int v42; // [esp+30h] [ebp-48h] + int v43; // [esp+30h] [ebp-48h] + int v44; // [esp+30h] [ebp-48h] + _DWORD *Block; // [esp+34h] [ebp-44h] + + v3 = __dynamic_cast( + (const void *)a1, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet::__shim, + -2); + if ( v3 ) + return *(_DWORD **)v3; + if ( this == (std::locale::facet *)&std::numpunct::id ) + { + v5 = operator new(0x68u); + v5[18] = 0; + *((_DWORD *)v5 + 1) = 0; + *(_DWORD *)v5 = &off_5605B0; + *((_DWORD *)v5 + 2) = 0; + *((_DWORD *)v5 + 3) = 0; + *((_BYTE *)v5 + 16) = 0; + *((_DWORD *)v5 + 5) = 0; + *((_DWORD *)v5 + 6) = 0; + *((_DWORD *)v5 + 7) = 0; + *((_DWORD *)v5 + 8) = 0; + *((_BYTE *)v5 + 100) = 0; + v39 = (int)v5; + v6 = operator new(0x14u); + v6[1] = 0; + *v6 = &off_560D4C; + Block = v6; + v6[2] = v39; + std::numpunct::_M_initialize_numpunct(v6, 0); + v7 = _CRT_MT; + Block[3] = a1; + if ( v7 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F450; + Block[4] = v39; + LOBYTE(v33) = 0; + std::__facet_shims::__numpunct_fill_cache(v33, (int *)a1, v39); + } + else if ( this == (std::locale::facet *)&std::collate::id ) + { + v10 = operator new(0x10u); + v10[1] = 0; + *v10 = &off_560BE0; + Block = v10; + c_locale = std::locale::facet::_S_get_c_locale(); + v12 = _CRT_MT; + Block[2] = c_locale; + Block[3] = a1; + if ( v12 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F370; + } + else if ( this == (std::locale::facet *)&std::time_get>::id ) + { + v8 = operator new(0xCu); + Block = v8; + v8[1] = 0; + *v8 = &off_560D94; + v8[2] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *v8 = &off_55F4E0; + } + else if ( this == (std::locale::facet *)&std::money_get>::id ) + { + v13 = operator new(0xCu); + Block = v13; + v13[1] = 0; + *v13 = &off_560E54; + v13[2] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *v13 = &off_55F588; + } + else if ( this == (std::locale::facet *)&std::money_put>::id ) + { + v14 = operator new(0xCu); + Block = v14; + v14[1] = 0; + *v14 = &off_560E84; + v14[2] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *v14 = &off_55F5E8; + } + else if ( this == (std::locale::facet *)&std::moneypunct::id ) + { + v15 = operator new(0x44u); + v15[8] = 0; + *(_DWORD *)v15 = &off_5606E4; + *((_DWORD *)v15 + 1) = 0; + *((_DWORD *)v15 + 2) = 0; + *((_DWORD *)v15 + 3) = 0; + *((_BYTE *)v15 + 18) = 0; + *((_DWORD *)v15 + 5) = 0; + *((_DWORD *)v15 + 6) = 0; + *((_DWORD *)v15 + 7) = 0; + *((_DWORD *)v15 + 8) = 0; + *((_DWORD *)v15 + 9) = 0; + *((_DWORD *)v15 + 10) = 0; + *((_DWORD *)v15 + 11) = 0; + *((_DWORD *)v15 + 12) = 0; + *((_DWORD *)v15 + 13) = 0; + *((_BYTE *)v15 + 67) = 0; + v40 = (int)v15; + v16 = operator new(0x14u); + v16[1] = 0; + *v16 = &off_55FED4; + Block = v16; + v16[2] = v40; + std::moneypunct::_M_initialize_moneypunct(v16, 0, 0); + v17 = _CRT_MT; + Block[3] = a1; + if ( v17 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F6B0; + Block[4] = v40; + LOBYTE(v34) = 0; + std::__facet_shims::__moneypunct_fill_cache(v34, (int *)a1, v40); + } + else if ( this == (std::locale::facet *)&std::moneypunct::id ) + { + v18 = operator new(0x44u); + v18[8] = 0; + *(_DWORD *)v18 = &off_5606D4; + *((_DWORD *)v18 + 1) = 0; + *((_DWORD *)v18 + 2) = 0; + *((_DWORD *)v18 + 3) = 0; + *((_BYTE *)v18 + 18) = 0; + *((_DWORD *)v18 + 5) = 0; + *((_DWORD *)v18 + 6) = 0; + *((_DWORD *)v18 + 7) = 0; + *((_DWORD *)v18 + 8) = 0; + *((_DWORD *)v18 + 9) = 0; + *((_DWORD *)v18 + 10) = 0; + *((_DWORD *)v18 + 11) = 0; + *((_DWORD *)v18 + 12) = 0; + *((_DWORD *)v18 + 13) = 0; + *((_BYTE *)v18 + 67) = 0; + v41 = (int)v18; + v19 = operator new(0x14u); + v19[1] = 0; + *v19 = &off_55FEA0; + Block = v19; + v19[2] = v41; + std::moneypunct::_M_initialize_moneypunct(v19, 0, 0); + v20 = _CRT_MT; + Block[3] = a1; + if ( v20 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F648; + Block[4] = v41; + LOBYTE(v35) = 0; + std::__facet_shims::__moneypunct_fill_cache(v35, (int *)a1, v41); + } + else if ( this == (std::locale::facet *)&std::messages::id ) + { + Block = operator new(0x14u); + std::messages::messages(Block, 0); + v21 = _CRT_MT; + Block[4] = a1; + if ( v21 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F3E0; + } + else if ( this == (std::locale::facet *)&std::numpunct::id ) + { + v22 = operator new(0xA8u); + v22[1] = 0; + *v22 = &off_5605C0; + v22[2] = 0; + v22[3] = 0; + *((_BYTE *)v22 + 16) = 0; + v22[5] = 0; + v22[6] = 0; + v22[7] = 0; + v22[8] = 0; + v22[9] = 0; + *((_BYTE *)v22 + 164) = 0; + v42 = (int)v22; + v23 = operator new(0x14u); + v23[1] = 0; + *v23 = &off_560D70; + Block = v23; + v23[2] = v42; + std::numpunct::_M_initialize_numpunct(v23, 0); + Block[3] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F498; + Block[4] = v42; + LOBYTE(v36) = 0; + std::__facet_shims::__numpunct_fill_cache(v36, (int *)a1, v42); + } + else if ( this == (std::locale::facet *)&std::collate::id ) + { + v9 = operator new(0x10u); + v9[1] = 0; + *v9 = &off_560BFC; + Block = v9; + v9[2] = std::locale::facet::_S_get_c_locale(); + Block[3] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F3A8; + } + else if ( this == (std::locale::facet *)&std::time_get>::id ) + { + v24 = operator new(0xCu); + Block = v24; + v24[1] = 0; + *v24 = &off_560DBC; + v24[2] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *v24 = &off_55F534; + } + else if ( this == (std::locale::facet *)&std::money_get>::id ) + { + v25 = operator new(0xCu); + Block = v25; + v25[1] = 0; + *v25 = &off_560E6C; + v25[2] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *v25 = &off_55F5B8; + } + else if ( this == (std::locale::facet *)std::money_put>::id ) + { + v26 = operator new(0xCu); + Block = v26; + v26[1] = 0; + *v26 = &off_560E9C; + v26[2] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *v26 = &off_55F618; + } + else if ( this == (std::locale::facet *)&std::moneypunct::id ) + { + v27 = operator new(0x54u); + v27[1] = 0; + *v27 = &off_560704; + v27[2] = 0; + v27[3] = 0; + *((_BYTE *)v27 + 16) = 0; + *(_DWORD *)((char *)v27 + 18) = 0; + v27[6] = 0; + v27[7] = 0; + v27[8] = 0; + v27[9] = 0; + v27[10] = 0; + v27[11] = 0; + v27[12] = 0; + v27[13] = 0; + v27[14] = 0; + *((_BYTE *)v27 + 82) = 0; + v43 = (int)v27; + v28 = operator new(0x14u); + v28[1] = 0; + *v28 = &off_55FF3C; + Block = v28; + v28[2] = v43; + std::moneypunct::_M_initialize_moneypunct(v28, 0, 0); + v29 = _CRT_MT; + Block[3] = a1; + if ( v29 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F780; + Block[4] = v43; + LOBYTE(v37) = 0; + std::__facet_shims::__moneypunct_fill_cache(v37, (int *)a1, v43); + } + else if ( this == (std::locale::facet *)&std::moneypunct::id ) + { + v30 = operator new(0x54u); + v30[1] = 0; + *v30 = &off_5606F4; + v30[2] = 0; + v30[3] = 0; + *((_BYTE *)v30 + 16) = 0; + *(_DWORD *)((char *)v30 + 18) = 0; + v30[6] = 0; + v30[7] = 0; + v30[8] = 0; + v30[9] = 0; + v30[10] = 0; + v30[11] = 0; + v30[12] = 0; + v30[13] = 0; + v30[14] = 0; + *((_BYTE *)v30 + 82) = 0; + v44 = (int)v30; + v31 = operator new(0x14u); + v31[1] = 0; + *v31 = &off_55FF08; + Block = v31; + v31[2] = v44; + std::moneypunct::_M_initialize_moneypunct(v31, 0, 0); + v32 = _CRT_MT; + Block[3] = a1; + if ( v32 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F718; + Block[4] = v44; + LOBYTE(v38) = 0; + std::__facet_shims::__moneypunct_fill_cache(v38, (int *)a1, v44); + } + else + { + if ( this != (std::locale::facet *)&std::messages::id ) + std::__throw_logic_error((std::logic_error *)"cannot create shim for unknown locale::facet"); + Block = operator new(0x14u); + std::messages::messages(Block, 0); + Block[4] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F418; + } + return Block; +} +// 48069D: variable 'v33' is possibly undefined +// 480978: variable 'v34' is possibly undefined +// 480A90: variable 'v35' is possibly undefined +// 480BDE: variable 'v36' is possibly undefined +// 480DFA: variable 'v37' is possibly undefined +// 480F18: variable 'v38' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53F58C: using guessed type signed __int32 std::moneypunct::id; +// 53F590: using guessed type signed __int32 std::moneypunct::id; +// 53F594: using guessed type signed __int32 std::moneypunct::id; +// 53F598: using guessed type signed __int32 std::moneypunct::id; +// 53F760: using guessed type signed __int32 std::collate::id; +// 53F764: using guessed type signed __int32 std::collate::id; +// 53F780: using guessed type signed __int32 std::messages::id; +// 53F784: using guessed type signed __int32 std::messages::id; +// 53F788: using guessed type signed __int32 std::numpunct::id; +// 53F78C: using guessed type signed __int32 std::numpunct::id; +// 53F790: using guessed type signed __int32 std::time_get>::id; +// 53F794: using guessed type signed __int32 std::time_get>::id; +// 53F7A0: using guessed type signed __int32 std::money_get>::id; +// 53F7A4: using guessed type signed __int32 std::money_get>::id; +// 53F7A8: using guessed type signed __int32 std::money_put>::id; +// 53F7AC: using guessed type signed __int32 std::money_put>::id[5]; +// 55BB08: using guessed type int *`typeinfo for'std::locale::facet::__shim; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55F370: using guessed type int (*off_55F370)(); +// 55F3A8: using guessed type int (*off_55F3A8)(); +// 55F3E0: using guessed type int (*off_55F3E0)(); +// 55F418: using guessed type int (*off_55F418)(); +// 55F450: using guessed type int (*off_55F450)(); +// 55F498: using guessed type int (*off_55F498)(); +// 55F4E0: using guessed type int (*off_55F4E0)(); +// 55F534: using guessed type int (*off_55F534)(); +// 55F588: using guessed type int (*off_55F588)(); +// 55F5B8: using guessed type int (*off_55F5B8)(); +// 55F5E8: using guessed type int (*off_55F5E8)(); +// 55F618: using guessed type int (*off_55F618)(); +// 55F648: using guessed type int (*off_55F648)(); +// 55F6B0: using guessed type int (*off_55F6B0)(); +// 55F718: using guessed type int (*off_55F718)(); +// 55F780: using guessed type int (*off_55F780)(); +// 55FEA0: using guessed type int (*off_55FEA0)(); +// 55FED4: using guessed type int (*off_55FED4)(); +// 55FF08: using guessed type int (*off_55FF08)(); +// 55FF3C: using guessed type int (*off_55FF3C)(); +// 5605B0: using guessed type int (*off_5605B0)(); +// 5605C0: using guessed type int (*off_5605C0)(); +// 5606D4: using guessed type int (*off_5606D4)(); +// 5606E4: using guessed type int (*off_5606E4)(); +// 5606F4: using guessed type int (*off_5606F4)(); +// 560704: using guessed type int (*off_560704)(); +// 560BE0: using guessed type int (*off_560BE0)(); +// 560BFC: using guessed type int (*off_560BFC)(); +// 560D4C: using guessed type int (*off_560D4C)(); +// 560D70: using guessed type int (*off_560D70)(); +// 560D94: using guessed type int (*off_560D94)(); +// 560DBC: using guessed type int (*off_560DBC)(); +// 560E54: using guessed type int (*off_560E54)(); +// 560E6C: using guessed type int (*off_560E6C)(); +// 560E84: using guessed type int (*off_560E84)(); +// 560E9C: using guessed type int (*off_560E9C)(); + +//----- (004810C0) -------------------------------------------------------- +_DWORD *__userpurge std::locale::facet::_M_sso_shim@( + volatile signed __int32 *a1@, + std::locale::facet *this, + const std::locale::id *a3) +{ + void *v3; // eax + _WORD *v5; // eax + _DWORD *v6; // eax + int v7; // ecx + _DWORD *v8; // eax + _DWORD *v9; // eax + _DWORD *v10; // eax + int c_locale; // eax + int v12; // edx + _DWORD *v13; // eax + _DWORD *v14; // eax + _WORD *v15; // eax + _DWORD *v16; // eax + int v17; // ecx + _WORD *v18; // eax + _DWORD *v19; // eax + int v20; // ecx + int v21; // edx + _DWORD *v22; // eax + _DWORD *v23; // eax + _DWORD *v24; // eax + _DWORD *v25; // eax + _DWORD *v26; // eax + _DWORD *v27; // eax + _DWORD *v28; // eax + int v29; // ecx + _DWORD *v30; // eax + _DWORD *v31; // eax + int v32; // edx + int v33; // [esp+0h] [ebp-78h] + int v34; // [esp+0h] [ebp-78h] + int v35; // [esp+0h] [ebp-78h] + int v36; // [esp+0h] [ebp-78h] + int v37; // [esp+0h] [ebp-78h] + int v38; // [esp+0h] [ebp-78h] + int v39; // [esp+30h] [ebp-48h] + int v40; // [esp+30h] [ebp-48h] + int v41; // [esp+30h] [ebp-48h] + int v42; // [esp+30h] [ebp-48h] + int v43; // [esp+30h] [ebp-48h] + int v44; // [esp+30h] [ebp-48h] + _DWORD *Block; // [esp+34h] [ebp-44h] + + v3 = __dynamic_cast( + (const void *)a1, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet::__shim, + -2); + if ( v3 ) + return *(_DWORD **)v3; + if ( this == (std::locale::facet *)&std::numpunct::id ) + { + v5 = operator new(0x68u); + v5[18] = 0; + *((_DWORD *)v5 + 1) = 0; + *(_DWORD *)v5 = &off_5605B0; + *((_DWORD *)v5 + 2) = 0; + *((_DWORD *)v5 + 3) = 0; + *((_BYTE *)v5 + 16) = 0; + *((_DWORD *)v5 + 5) = 0; + *((_DWORD *)v5 + 6) = 0; + *((_DWORD *)v5 + 7) = 0; + *((_DWORD *)v5 + 8) = 0; + *((_BYTE *)v5 + 100) = 0; + v39 = (int)v5; + v6 = operator new(0x14u); + v6[1] = 0; + *v6 = &off_55FCD8; + Block = v6; + v6[2] = v39; + std::numpunct::_M_initialize_numpunct(v6, 0); + v7 = _CRT_MT; + Block[3] = a1; + if ( v7 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F474; + Block[4] = v39; + LOBYTE(v33) = 0; + std::__facet_shims::__numpunct_fill_cache(v33, (int *)a1, v39); + } + else if ( this == (std::locale::facet *)&std::collate::id ) + { + v10 = operator new(0x10u); + v10[1] = 0; + *v10 = &off_55FC68; + Block = v10; + c_locale = std::locale::facet::_S_get_c_locale(); + v12 = _CRT_MT; + Block[2] = c_locale; + Block[3] = a1; + if ( v12 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F38C; + } + else if ( this == (std::locale::facet *)&std::time_get>::id ) + { + v8 = operator new(0xCu); + Block = v8; + v8[1] = 0; + *v8 = &off_55FD20; + v8[2] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *v8 = &off_55F508; + } + else if ( this == (std::locale::facet *)&std::money_get>::id ) + { + v13 = operator new(0xCu); + Block = v13; + v13[1] = 0; + *v13 = &off_55FD78; + v13[2] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *v13 = &off_55F5A0; + } + else if ( this == (std::locale::facet *)&std::money_put>::id ) + { + v14 = operator new(0xCu); + Block = v14; + v14[1] = 0; + *v14 = &off_55FDA8; + v14[2] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *v14 = &off_55F600; + } + else if ( this == (std::locale::facet *)&std::moneypunct::id ) + { + v15 = operator new(0x44u); + v15[8] = 0; + *(_DWORD *)v15 = &off_5606E4; + *((_DWORD *)v15 + 1) = 0; + *((_DWORD *)v15 + 2) = 0; + *((_DWORD *)v15 + 3) = 0; + *((_BYTE *)v15 + 18) = 0; + *((_DWORD *)v15 + 5) = 0; + *((_DWORD *)v15 + 6) = 0; + *((_DWORD *)v15 + 7) = 0; + *((_DWORD *)v15 + 8) = 0; + *((_DWORD *)v15 + 9) = 0; + *((_DWORD *)v15 + 10) = 0; + *((_DWORD *)v15 + 11) = 0; + *((_DWORD *)v15 + 12) = 0; + *((_DWORD *)v15 + 13) = 0; + *((_BYTE *)v15 + 67) = 0; + v40 = (int)v15; + v16 = operator new(0x14u); + v16[1] = 0; + *v16 = &off_55F854; + Block = v16; + v16[2] = v40; + std::moneypunct::_M_initialize_moneypunct(v16, 0, 0); + v17 = _CRT_MT; + Block[3] = a1; + if ( v17 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F6E4; + Block[4] = v40; + LOBYTE(v34) = 0; + std::__facet_shims::__moneypunct_fill_cache(v34, (int *)a1, v40); + } + else if ( this == (std::locale::facet *)&std::moneypunct::id ) + { + v18 = operator new(0x44u); + v18[8] = 0; + *(_DWORD *)v18 = &off_5606D4; + *((_DWORD *)v18 + 1) = 0; + *((_DWORD *)v18 + 2) = 0; + *((_DWORD *)v18 + 3) = 0; + *((_BYTE *)v18 + 18) = 0; + *((_DWORD *)v18 + 5) = 0; + *((_DWORD *)v18 + 6) = 0; + *((_DWORD *)v18 + 7) = 0; + *((_DWORD *)v18 + 8) = 0; + *((_DWORD *)v18 + 9) = 0; + *((_DWORD *)v18 + 10) = 0; + *((_DWORD *)v18 + 11) = 0; + *((_DWORD *)v18 + 12) = 0; + *((_DWORD *)v18 + 13) = 0; + *((_BYTE *)v18 + 67) = 0; + v41 = (int)v18; + v19 = operator new(0x14u); + v19[1] = 0; + *v19 = &off_55F820; + Block = v19; + v19[2] = v41; + std::moneypunct::_M_initialize_moneypunct(v19, 0, 0); + v20 = _CRT_MT; + Block[3] = a1; + if ( v20 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F67C; + Block[4] = v41; + LOBYTE(v35) = 0; + std::__facet_shims::__moneypunct_fill_cache(v35, (int *)a1, v41); + } + else if ( this == (std::locale::facet *)&std::messages::id ) + { + Block = operator new(0x14u); + std::messages::messages(Block, 0); + v21 = _CRT_MT; + Block[4] = a1; + if ( v21 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F3FC; + } + else if ( this == (std::locale::facet *)&std::numpunct::id ) + { + v22 = operator new(0xA8u); + v22[1] = 0; + *v22 = &off_5605C0; + v22[2] = 0; + v22[3] = 0; + *((_BYTE *)v22 + 16) = 0; + v22[5] = 0; + v22[6] = 0; + v22[7] = 0; + v22[8] = 0; + v22[9] = 0; + *((_BYTE *)v22 + 164) = 0; + v42 = (int)v22; + v23 = operator new(0x14u); + v23[1] = 0; + *v23 = &off_55FCFC; + Block = v23; + v23[2] = v42; + std::numpunct::_M_initialize_numpunct(v23, 0); + Block[3] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F4BC; + Block[4] = v42; + LOBYTE(v36) = 0; + std::__facet_shims::__numpunct_fill_cache(v36, (int *)a1, v42); + } + else if ( this == (std::locale::facet *)&std::collate::id ) + { + v9 = operator new(0x10u); + v9[1] = 0; + *v9 = &off_55FC84; + Block = v9; + v9[2] = std::locale::facet::_S_get_c_locale(); + Block[3] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F3C4; + } + else if ( this == (std::locale::facet *)&std::time_get>::id ) + { + v24 = operator new(0xCu); + Block = v24; + v24[1] = 0; + *v24 = &off_55FD4C; + v24[2] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *v24 = &off_55F55C; + } + else if ( this == (std::locale::facet *)&std::money_get>::id ) + { + v25 = operator new(0xCu); + Block = v25; + v25[1] = 0; + *v25 = &off_55FD90; + v25[2] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *v25 = &off_55F5D0; + } + else if ( this == (std::locale::facet *)&std::money_put>::id ) + { + v26 = operator new(0xCu); + Block = v26; + v26[1] = 0; + *v26 = &off_55FDC0; + v26[2] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *v26 = &off_55F630; + } + else if ( this == (std::locale::facet *)&std::moneypunct::id ) + { + v27 = operator new(0x54u); + v27[1] = 0; + *v27 = &off_560704; + v27[2] = 0; + v27[3] = 0; + *((_BYTE *)v27 + 16) = 0; + *(_DWORD *)((char *)v27 + 18) = 0; + v27[6] = 0; + v27[7] = 0; + v27[8] = 0; + v27[9] = 0; + v27[10] = 0; + v27[11] = 0; + v27[12] = 0; + v27[13] = 0; + v27[14] = 0; + *((_BYTE *)v27 + 82) = 0; + v43 = (int)v27; + v28 = operator new(0x14u); + v28[1] = 0; + *v28 = &off_55F8BC; + Block = v28; + v28[2] = v43; + std::moneypunct::_M_initialize_moneypunct(v28, 0, 0); + v29 = _CRT_MT; + Block[3] = a1; + if ( v29 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F7B4; + Block[4] = v43; + LOBYTE(v37) = 0; + std::__facet_shims::__moneypunct_fill_cache(v37, (int *)a1, v43); + } + else if ( this == (std::locale::facet *)&std::moneypunct::id ) + { + v30 = operator new(0x54u); + v30[1] = 0; + *v30 = &off_5606F4; + v30[2] = 0; + v30[3] = 0; + *((_BYTE *)v30 + 16) = 0; + *(_DWORD *)((char *)v30 + 18) = 0; + v30[6] = 0; + v30[7] = 0; + v30[8] = 0; + v30[9] = 0; + v30[10] = 0; + v30[11] = 0; + v30[12] = 0; + v30[13] = 0; + v30[14] = 0; + *((_BYTE *)v30 + 82) = 0; + v44 = (int)v30; + v31 = operator new(0x14u); + v31[1] = 0; + *v31 = &off_55F888; + Block = v31; + v31[2] = v44; + std::moneypunct::_M_initialize_moneypunct(v31, 0, 0); + v32 = _CRT_MT; + Block[3] = a1; + if ( v32 ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F74C; + Block[4] = v44; + LOBYTE(v38) = 0; + std::__facet_shims::__moneypunct_fill_cache(v38, (int *)a1, v44); + } + else + { + if ( this != (std::locale::facet *)&std::messages::id ) + std::__throw_logic_error((std::logic_error *)"cannot create shim for unknown locale::facet"); + Block = operator new(0x14u); + std::messages::messages(Block, 0); + Block[4] = a1; + if ( _CRT_MT ) + _InterlockedAdd(a1 + 1, 1u); + else + ++*((_DWORD *)a1 + 1); + *Block = &off_55F434; + } + return Block; +} +// 48133D: variable 'v33' is possibly undefined +// 481618: variable 'v34' is possibly undefined +// 481730: variable 'v35' is possibly undefined +// 48187E: variable 'v36' is possibly undefined +// 481A9A: variable 'v37' is possibly undefined +// 481BB8: variable 'v38' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55BB08: using guessed type int *`typeinfo for'std::locale::facet::__shim; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55F38C: using guessed type int (*off_55F38C)(); +// 55F3C4: using guessed type int (*off_55F3C4)(); +// 55F3FC: using guessed type int (*off_55F3FC)(); +// 55F434: using guessed type int (*off_55F434)(); +// 55F474: using guessed type int (*off_55F474)(); +// 55F4BC: using guessed type int (*off_55F4BC)(); +// 55F508: using guessed type int (*off_55F508)(); +// 55F55C: using guessed type int (*off_55F55C)(); +// 55F5A0: using guessed type int (*off_55F5A0)(); +// 55F5D0: using guessed type int (*off_55F5D0)(); +// 55F600: using guessed type int (*off_55F600)(); +// 55F630: using guessed type int (*off_55F630)(); +// 55F67C: using guessed type int (*off_55F67C)(); +// 55F6E4: using guessed type int (*off_55F6E4)(); +// 55F74C: using guessed type int (*off_55F74C)(); +// 55F7B4: using guessed type int (*off_55F7B4)(); +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FC68: using guessed type int (*off_55FC68)(); +// 55FC84: using guessed type int (*off_55FC84)(); +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FD20: using guessed type int (*off_55FD20)(); +// 55FD4C: using guessed type int (*off_55FD4C)(); +// 55FD78: using guessed type int (*off_55FD78)(); +// 55FD90: using guessed type int (*off_55FD90)(); +// 55FDA8: using guessed type int (*off_55FDA8)(); +// 55FDC0: using guessed type int (*off_55FDC0)(); +// 5605B0: using guessed type int (*off_5605B0)(); +// 5605C0: using guessed type int (*off_5605C0)(); +// 5606D4: using guessed type int (*off_5606D4)(); +// 5606E4: using guessed type int (*off_5606E4)(); +// 5606F4: using guessed type int (*off_5606F4)(); +// 560704: using guessed type int (*off_560704)(); + +//----- (00481D60) -------------------------------------------------------- +int __fastcall std::locale::facet::_M_remove_reference(volatile signed __int32 *a1) +{ + int result; // eax + + if ( _CRT_MT ) + { + result = _InterlockedExchangeAdd(a1 + 1, 0xFFFFFFFF); + } + else + { + result = *((_DWORD *)a1 + 1); + *((_DWORD *)a1 + 1) = result - 1; + } + if ( result == 1 ) + return (*(int (__fastcall **)(volatile signed __int32 *))(*a1 + 4))(a1); + return result; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (00481DA0) -------------------------------------------------------- +BOOL __thiscall std::locale::operator==(void *this, int a2) +{ + const char **v2; // ecx + const char **Block; // [esp+10h] [ebp-78h] + char *Blocka; // [esp+10h] [ebp-78h] + const char **v6; // [esp+14h] [ebp-74h] + char *v7; // [esp+14h] [ebp-74h] + bool lpuexcpta; // [esp+18h] [ebp-70h] + char *v10; // [esp+50h] [ebp-38h] BYREF + size_t Size; // [esp+54h] [ebp-34h] + char v12; // [esp+58h] [ebp-30h] BYREF + void *Buf2[2]; // [esp+68h] [ebp-20h] BYREF + char v14; // [esp+70h] [ebp-18h] BYREF + + if ( *(_DWORD *)this == *(_DWORD *)a2 ) + return 1; + v6 = *(const char ***)(*(_DWORD *)this + 16); + if ( *v6 && (v2 = *(const char ***)(*(_DWORD *)a2 + 16), Block = v2, *v2) && !strcmp(*v6, *v2) ) + { + if ( !v6[1] && !Block[1] ) + return 1; + std::locale::name[abi:cxx11]((int)Buf2, a2); + std::locale::name[abi:cxx11]((int)&v10, (int)this); + lpuexcpta = 0; + Blocka = v10; + v7 = (char *)Buf2[0]; + if ( (void *)Size == Buf2[1] ) + { + lpuexcpta = 1; + if ( Size ) + lpuexcpta = memcmp(v10, Buf2[0], Size) == 0; + } + if ( Blocka != &v12 ) + { + operator delete(Blocka); + v7 = (char *)Buf2[0]; + } + if ( v7 != &v14 ) + operator delete(v7); + } + else + { + return 0; + } + return lpuexcpta; +} + +//----- (00481F60) -------------------------------------------------------- +unsigned int __thiscall std::vector::_M_check_len(_DWORD *this, unsigned int a2, std::length_error *a3) +{ + int v3; // ebx + unsigned int v4; // edx + unsigned int v5; // eax + int v6; // ecx + bool v7; // cf + unsigned int v8; // eax + + v3 = 89478485; + v4 = a2; + v5 = -1431655765 * ((this[1] - *this) >> 3); + if ( 89478485 - v5 < a2 ) + std::__throw_length_error(a3); + v6 = 89478485; + if ( a2 < v5 ) + v4 = v5; + v7 = __CFADD__(v4, v5); + v8 = v4 + v5; + if ( !v7 ) + { + if ( v8 <= 0x5555555 ) + return v8; + return v3; + } + return v6; +} + +//----- (00481FB4) -------------------------------------------------------- +unsigned int __thiscall std::vector::_M_check_len( + _DWORD *this, + unsigned int a2, + std::length_error *a3) +{ + int v3; // ebx + unsigned int v4; // eax + unsigned int v5; // edx + int v6; // ecx + bool v7; // cf + unsigned int v8; // eax + + v3 = 0x1FFFFFFF; + v4 = (this[1] - *this) >> 2; + v5 = a2; + if ( 0x1FFFFFFF - v4 < a2 ) + std::__throw_length_error(a3); + v6 = 0x1FFFFFFF; + if ( a2 < v4 ) + v5 = v4; + v7 = __CFADD__(v5, v4); + v8 = v5 + v4; + if ( !v7 ) + { + if ( v8 <= 0x1FFFFFFF ) + return v8; + return v3; + } + return v6; +} + +//----- (00482000) -------------------------------------------------------- +int __fastcall std::moneypunct::neg_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 40); + if ( (char *)v1 == (char *)std::moneypunct::do_neg_format ) + return *(_DWORD *)(a1[2] + 52); + else + return v1(); +} + +//----- (00482020) -------------------------------------------------------- +int __fastcall std::moneypunct::pos_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 36); + if ( (char *)v1 == (char *)std::moneypunct::do_pos_format ) + return *(_DWORD *)(a1[2] + 48); + else + return v1(); +} + +//----- (00482040) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 20); + if ( (char *)v3 == (char *)std::moneypunct::do_curr_symbol ) + { + Str = *(char **)(a2[2] + 20); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + LOBYTE(v7) = 0; + std::string::_M_construct(this, Str, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 482084: variable 'v7' is possibly undefined + +//----- (004820C0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2) +{ + void *v2; // ebp + const char *Str; // edi + size_t v5; // eax + size_t Size; // esi + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 8); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 4820C0: using guessed type size_t var_20[8]; + +//----- (00482170) -------------------------------------------------------- +int __fastcall std::moneypunct::frac_digits(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 32); + if ( (char *)v1 == (char *)std::moneypunct::do_frac_digits ) + return *(_DWORD *)(a1[2] + 44); + else + return v1(); +} + +//----- (00482190) -------------------------------------------------------- +int __fastcall std::moneypunct::decimal_point(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 8); + if ( (char *)v1 == (char *)std::moneypunct::do_decimal_point ) + return *(unsigned __int8 *)(a1[2] + 17); + else + return v1(); +} + +//----- (004821B0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_neg_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 52); +} + +//----- (004821C0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_pos_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 48); +} + +//----- (004821D0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 28); + if ( (char *)v3 == (char *)std::moneypunct::do_negative_sign ) + { + Str = *(char **)(a2[2] + 36); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + LOBYTE(v7) = 0; + std::string::_M_construct(this, Str, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 482214: variable 'v7' is possibly undefined + +//----- (00482250) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 24); + if ( (char *)v3 == (char *)std::moneypunct::do_positive_sign ) + { + Str = *(char **)(a2[2] + 28); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + LOBYTE(v7) = 0; + std::string::_M_construct(this, Str, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 482294: variable 'v7' is possibly undefined + +//----- (004822D0) -------------------------------------------------------- +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 12); + if ( (char *)v1 == (char *)std::moneypunct::do_thousands_sep ) + return *(unsigned __int8 *)(a1[2] + 18); + else + return v1(); +} + +//----- (004822F0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2) +{ + void *v2; // ebp + const char *Str; // edi + size_t v5; // eax + size_t Size; // esi + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 20); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 4822F0: using guessed type size_t var_20[8]; + +//----- (004823A0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_frac_digits(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 44); +} + +//----- (004823B0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_decimal_point(int a1) +{ + return *(unsigned __int8 *)(*(_DWORD *)(a1 + 8) + 17); +} + +//----- (004823C0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2) +{ + void *v2; // ebp + const char *Str; // edi + size_t v5; // eax + size_t Size; // esi + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 36); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 4823C0: using guessed type size_t var_20[8]; + +//----- (00482470) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2) +{ + void *v2; // ebp + const char *Str; // edi + size_t v5; // eax + size_t Size; // esi + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 28); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 482470: using guessed type size_t var_20[8]; + +//----- (00482520) -------------------------------------------------------- +int __fastcall std::moneypunct::do_thousands_sep(int a1) +{ + return *(unsigned __int8 *)(*(_DWORD *)(a1 + 8) + 18); +} + +//----- (00482530) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 16); + if ( (char *)v3 == (char *)std::moneypunct::do_grouping ) + { + Str = *(char **)(a2[2] + 8); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + LOBYTE(v7) = 0; + std::string::_M_construct(this, Str, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 482574: variable 'v7' is possibly undefined + +//----- (004825B0) -------------------------------------------------------- +int __fastcall std::moneypunct::neg_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 40); + if ( (char *)v1 == (char *)std::moneypunct::do_neg_format ) + return *(_DWORD *)(a1[2] + 52); + else + return v1(); +} + +//----- (004825D0) -------------------------------------------------------- +int __fastcall std::moneypunct::pos_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 36); + if ( (char *)v1 == (char *)std::moneypunct::do_pos_format ) + return *(_DWORD *)(a1[2] + 48); + else + return v1(); +} + +//----- (004825F0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 20); + if ( (char *)v3 == (char *)std::moneypunct::do_curr_symbol ) + { + Str = *(char **)(a2[2] + 20); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + LOBYTE(v7) = 0; + std::string::_M_construct(this, Str, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 482634: variable 'v7' is possibly undefined + +//----- (00482670) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2) +{ + void *v2; // ebp + const char *Str; // edi + size_t v5; // eax + size_t Size; // esi + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 8); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 482670: using guessed type size_t var_20[8]; + +//----- (00482720) -------------------------------------------------------- +int __fastcall std::moneypunct::frac_digits(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 32); + if ( (char *)v1 == (char *)std::moneypunct::do_frac_digits ) + return *(_DWORD *)(a1[2] + 44); + else + return v1(); +} + +//----- (00482740) -------------------------------------------------------- +int __fastcall std::moneypunct::decimal_point(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 8); + if ( (char *)v1 == (char *)std::moneypunct::do_decimal_point ) + return *(unsigned __int8 *)(a1[2] + 17); + else + return v1(); +} + +//----- (00482760) -------------------------------------------------------- +int __fastcall std::moneypunct::do_neg_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 52); +} + +//----- (00482770) -------------------------------------------------------- +int __fastcall std::moneypunct::do_pos_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 48); +} + +//----- (00482780) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 28); + if ( (char *)v3 == (char *)std::moneypunct::do_negative_sign ) + { + Str = *(char **)(a2[2] + 36); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + LOBYTE(v7) = 0; + std::string::_M_construct(this, Str, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 4827C4: variable 'v7' is possibly undefined + +//----- (00482800) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 24); + if ( (char *)v3 == (char *)std::moneypunct::do_positive_sign ) + { + Str = *(char **)(a2[2] + 28); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + LOBYTE(v7) = 0; + std::string::_M_construct(this, Str, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 482844: variable 'v7' is possibly undefined + +//----- (00482880) -------------------------------------------------------- +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 12); + if ( (char *)v1 == (char *)std::moneypunct::do_thousands_sep ) + return *(unsigned __int8 *)(a1[2] + 18); + else + return v1(); +} + +//----- (004828A0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2) +{ + void *v2; // ebp + const char *Str; // edi + size_t v5; // eax + size_t Size; // esi + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 20); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 4828A0: using guessed type size_t var_20[8]; + +//----- (00482950) -------------------------------------------------------- +int __fastcall std::moneypunct::do_frac_digits(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 44); +} + +//----- (00482960) -------------------------------------------------------- +int __fastcall std::moneypunct::do_decimal_point(int a1) +{ + return *(unsigned __int8 *)(*(_DWORD *)(a1 + 8) + 17); +} + +//----- (00482970) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2) +{ + void *v2; // ebp + const char *Str; // edi + size_t v5; // eax + size_t Size; // esi + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 36); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 482970: using guessed type size_t var_20[8]; + +//----- (00482A20) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2) +{ + void *v2; // ebp + const char *Str; // edi + size_t v5; // eax + size_t Size; // esi + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 28); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 482A20: using guessed type size_t var_20[8]; + +//----- (00482AD0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_thousands_sep(int a1) +{ + return *(unsigned __int8 *)(*(_DWORD *)(a1 + 8) + 18); +} + +//----- (00482AE0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 16); + if ( (char *)v3 == (char *)std::moneypunct::do_grouping ) + { + Str = *(char **)(a2[2] + 8); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + LOBYTE(v7) = 0; + std::string::_M_construct(this, Str, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 482B24: variable 'v7' is possibly undefined + +//----- (00482B60) -------------------------------------------------------- +int __fastcall std::moneypunct::neg_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 40); + if ( (char *)v1 == (char *)std::moneypunct::do_neg_format ) + return *(_DWORD *)(a1[2] + 56); + else + return v1(); +} + +//----- (00482B80) -------------------------------------------------------- +int __fastcall std::moneypunct::pos_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 36); + if ( (char *)v1 == (char *)std::moneypunct::do_pos_format ) + return *(_DWORD *)(a1[2] + 52); + else + return v1(); +} + +//----- (00482BA0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + wchar_t *String; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 20); + if ( (char *)v3 == (char *)std::moneypunct::do_curr_symbol ) + { + String = *(wchar_t **)(a2[2] + 24); + *this = this + 2; + v5 = -2; + if ( String ) + v5 = (int)&String[wcslen(String)]; + LOBYTE(v7) = 0; + std::wstring::_M_construct(this, String, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 482BE5: variable 'v7' is possibly undefined + +//----- (00482C20) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2) +{ + void *v2; // esi + const char *Str; // edi + size_t v5; // eax + size_t Size; // ebp + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 8); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 482C20: using guessed type size_t var_20[8]; + +//----- (00482CD0) -------------------------------------------------------- +int __fastcall std::moneypunct::frac_digits(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 32); + if ( (char *)v1 == (char *)std::moneypunct::do_frac_digits ) + return *(_DWORD *)(a1[2] + 48); + else + return v1(); +} + +//----- (00482CF0) -------------------------------------------------------- +int __fastcall std::moneypunct::decimal_point(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 8); + if ( (char *)v1 == (char *)std::moneypunct::do_decimal_point ) + return *(unsigned __int16 *)(a1[2] + 18); + else + return v1(); +} + +//----- (00482D10) -------------------------------------------------------- +int __fastcall std::moneypunct::do_neg_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 56); +} + +//----- (00482D20) -------------------------------------------------------- +int __fastcall std::moneypunct::do_pos_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 52); +} + +//----- (00482D30) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + wchar_t *String; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 28); + if ( (char *)v3 == (char *)std::moneypunct::do_negative_sign ) + { + String = *(wchar_t **)(a2[2] + 40); + *this = this + 2; + v5 = -2; + if ( String ) + v5 = (int)&String[wcslen(String)]; + LOBYTE(v7) = 0; + std::wstring::_M_construct(this, String, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 482D75: variable 'v7' is possibly undefined + +//----- (00482DB0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + wchar_t *String; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 24); + if ( (char *)v3 == (char *)std::moneypunct::do_positive_sign ) + { + String = *(wchar_t **)(a2[2] + 32); + *this = this + 2; + v5 = -2; + if ( String ) + v5 = (int)&String[wcslen(String)]; + LOBYTE(v7) = 0; + std::wstring::_M_construct(this, String, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 482DF5: variable 'v7' is possibly undefined + +//----- (00482E30) -------------------------------------------------------- +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 12); + if ( (char *)v1 == (char *)std::moneypunct::do_thousands_sep ) + return *(unsigned __int16 *)(a1[2] + 20); + else + return v1(); +} + +//----- (00482E50) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2) +{ + wchar_t *String; // esi + int v4; // eax + int v6; // [esp+8h] [ebp-14h] + + String = *(wchar_t **)(*(_DWORD *)(a2 + 8) + 24); + *this = this + 2; + v4 = -2; + if ( String ) + v4 = (int)&String[wcslen(String)]; + LOBYTE(v6) = 0; + std::wstring::_M_construct(this, String, v4, v6); + return this; +} +// 482E88: variable 'v6' is possibly undefined + +//----- (00482EA0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_frac_digits(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 48); +} + +//----- (00482EB0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_decimal_point(int a1) +{ + return *(unsigned __int16 *)(*(_DWORD *)(a1 + 8) + 18); +} + +//----- (00482EC0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2) +{ + wchar_t *String; // esi + int v4; // eax + int v6; // [esp+8h] [ebp-14h] + + String = *(wchar_t **)(*(_DWORD *)(a2 + 8) + 40); + *this = this + 2; + v4 = -2; + if ( String ) + v4 = (int)&String[wcslen(String)]; + LOBYTE(v6) = 0; + std::wstring::_M_construct(this, String, v4, v6); + return this; +} +// 482EF8: variable 'v6' is possibly undefined + +//----- (00482F10) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2) +{ + wchar_t *String; // esi + int v4; // eax + int v6; // [esp+8h] [ebp-14h] + + String = *(wchar_t **)(*(_DWORD *)(a2 + 8) + 32); + *this = this + 2; + v4 = -2; + if ( String ) + v4 = (int)&String[wcslen(String)]; + LOBYTE(v6) = 0; + std::wstring::_M_construct(this, String, v4, v6); + return this; +} +// 482F48: variable 'v6' is possibly undefined + +//----- (00482F60) -------------------------------------------------------- +int __fastcall std::moneypunct::do_thousands_sep(int a1) +{ + return *(unsigned __int16 *)(*(_DWORD *)(a1 + 8) + 20); +} + +//----- (00482F70) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 16); + if ( (char *)v3 == (char *)std::moneypunct::do_grouping ) + { + Str = *(char **)(a2[2] + 8); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + std::string::_M_construct(this, Str, v5); + return this; + } + else + { + v3(a2); + return this; + } +} + +//----- (00482FE0) -------------------------------------------------------- +int __fastcall std::moneypunct::neg_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 40); + if ( (char *)v1 == (char *)std::moneypunct::do_neg_format ) + return *(_DWORD *)(a1[2] + 56); + else + return v1(); +} + +//----- (00483000) -------------------------------------------------------- +int __fastcall std::moneypunct::pos_format(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 36); + if ( (char *)v1 == (char *)std::moneypunct::do_pos_format ) + return *(_DWORD *)(a1[2] + 52); + else + return v1(); +} + +//----- (00483020) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::curr_symbol(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + wchar_t *String; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 20); + if ( (char *)v3 == (char *)std::moneypunct::do_curr_symbol ) + { + String = *(wchar_t **)(a2[2] + 24); + *this = this + 2; + v5 = -2; + if ( String ) + v5 = (int)&String[wcslen(String)]; + LOBYTE(v7) = 0; + std::wstring::_M_construct(this, String, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 483065: variable 'v7' is possibly undefined + +//----- (004830A0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_grouping(_DWORD *this, int a2) +{ + void *v2; // esi + const char *Str; // edi + size_t v5; // eax + size_t Size; // ebp + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 8); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 4830A0: using guessed type size_t var_20[8]; + +//----- (00483150) -------------------------------------------------------- +int __fastcall std::moneypunct::frac_digits(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 32); + if ( (char *)v1 == (char *)std::moneypunct::do_frac_digits ) + return *(_DWORD *)(a1[2] + 48); + else + return v1(); +} + +//----- (00483170) -------------------------------------------------------- +int __fastcall std::moneypunct::decimal_point(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 8); + if ( (char *)v1 == (char *)std::moneypunct::do_decimal_point ) + return *(unsigned __int16 *)(a1[2] + 18); + else + return v1(); +} + +//----- (00483190) -------------------------------------------------------- +int __fastcall std::moneypunct::do_neg_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 56); +} + +//----- (004831A0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_pos_format(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 52); +} + +//----- (004831B0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::negative_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + wchar_t *String; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 28); + if ( (char *)v3 == (char *)std::moneypunct::do_negative_sign ) + { + String = *(wchar_t **)(a2[2] + 40); + *this = this + 2; + v5 = -2; + if ( String ) + v5 = (int)&String[wcslen(String)]; + LOBYTE(v7) = 0; + std::wstring::_M_construct(this, String, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 4831F5: variable 'v7' is possibly undefined + +//----- (00483230) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::positive_sign(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + wchar_t *String; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 24); + if ( (char *)v3 == (char *)std::moneypunct::do_positive_sign ) + { + String = *(wchar_t **)(a2[2] + 32); + *this = this + 2; + v5 = -2; + if ( String ) + v5 = (int)&String[wcslen(String)]; + LOBYTE(v7) = 0; + std::wstring::_M_construct(this, String, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 483275: variable 'v7' is possibly undefined + +//----- (004832B0) -------------------------------------------------------- +int __fastcall std::moneypunct::thousands_sep(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 12); + if ( (char *)v1 == (char *)std::moneypunct::do_thousands_sep ) + return *(unsigned __int16 *)(a1[2] + 20); + else + return v1(); +} + +//----- (004832D0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_curr_symbol(_DWORD *this, int a2) +{ + wchar_t *String; // esi + int v4; // eax + int v6; // [esp+8h] [ebp-14h] + + String = *(wchar_t **)(*(_DWORD *)(a2 + 8) + 24); + *this = this + 2; + v4 = -2; + if ( String ) + v4 = (int)&String[wcslen(String)]; + LOBYTE(v6) = 0; + std::wstring::_M_construct(this, String, v4, v6); + return this; +} +// 483308: variable 'v6' is possibly undefined + +//----- (00483320) -------------------------------------------------------- +int __fastcall std::moneypunct::do_frac_digits(int a1) +{ + return *(_DWORD *)(*(_DWORD *)(a1 + 8) + 48); +} + +//----- (00483330) -------------------------------------------------------- +int __fastcall std::moneypunct::do_decimal_point(int a1) +{ + return *(unsigned __int16 *)(*(_DWORD *)(a1 + 8) + 18); +} + +//----- (00483340) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_negative_sign(_DWORD *this, int a2) +{ + wchar_t *String; // esi + int v4; // eax + int v6; // [esp+8h] [ebp-14h] + + String = *(wchar_t **)(*(_DWORD *)(a2 + 8) + 40); + *this = this + 2; + v4 = -2; + if ( String ) + v4 = (int)&String[wcslen(String)]; + LOBYTE(v6) = 0; + std::wstring::_M_construct(this, String, v4, v6); + return this; +} +// 483378: variable 'v6' is possibly undefined + +//----- (00483390) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::do_positive_sign(_DWORD *this, int a2) +{ + wchar_t *String; // esi + int v4; // eax + int v6; // [esp+8h] [ebp-14h] + + String = *(wchar_t **)(*(_DWORD *)(a2 + 8) + 32); + *this = this + 2; + v4 = -2; + if ( String ) + v4 = (int)&String[wcslen(String)]; + LOBYTE(v6) = 0; + std::wstring::_M_construct(this, String, v4, v6); + return this; +} +// 4833C8: variable 'v6' is possibly undefined + +//----- (004833E0) -------------------------------------------------------- +int __fastcall std::moneypunct::do_thousands_sep(int a1) +{ + return *(unsigned __int16 *)(*(_DWORD *)(a1 + 8) + 20); +} + +//----- (004833F0) -------------------------------------------------------- +_DWORD *__thiscall std::moneypunct::grouping(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 16); + if ( (char *)v3 == (char *)std::moneypunct::do_grouping ) + { + Str = *(char **)(a2[2] + 8); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + std::string::_M_construct(this, Str, v5); + return this; + } + else + { + v3(a2); + return this; + } +} + +//----- (00483460) -------------------------------------------------------- +int __thiscall std::string::_M_disjunct(unsigned int *this, unsigned int a2) +{ + int v2; // edx + + v2 = 1; + if ( *this <= a2 ) + LOBYTE(v2) = this[1] + *this < a2; + return v2; +} + +//----- (00483480) -------------------------------------------------------- +bool __fastcall std::string::_M_is_local(_DWORD *a1) +{ + return a1 + 2 == (_DWORD *)*a1; +} + +//----- (00483490) -------------------------------------------------------- +unsigned int __thiscall std::string::find_last_of(int *this, char *Str, unsigned int a3) +{ + unsigned int v4; // ebx + size_t MaxCount; // esi + int v6; // eax + unsigned int v7; // eax + int v8; // ebp + + v4 = a3; + MaxCount = strlen(Str); + v6 = this[1]; + if ( !v6 || !MaxCount ) + return -1; + v7 = v6 - 1; + v8 = *this; + if ( a3 > v7 ) + v4 = v7; + do + { + if ( memchr(Str, *(char *)(v8 + v4), MaxCount) ) + break; + } + while ( v4-- != 0 ); + return v4; +} + +//----- (00483510) -------------------------------------------------------- +unsigned int __thiscall std::string::find_last_of(int *this, void *Buf, unsigned int a3, size_t MaxCount) +{ + int v4; // eax + unsigned int v5; // ebx + unsigned int v6; // eax + int v7; // ebp + + v4 = this[1]; + v5 = a3; + if ( !v4 || !MaxCount ) + return -1; + v6 = v4 - 1; + v7 = *this; + if ( v6 <= a3 ) + v5 = v6; + do + { + if ( memchr(Buf, *(char *)(v7 + v5), MaxCount) ) + break; + } + while ( v5-- != 0 ); + return v5; +} + +//----- (00483590) -------------------------------------------------------- +int __thiscall std::string::find_last_of(int *this, int a2, unsigned int a3) +{ + int v3; // eax + unsigned int v4; // ebx + size_t MaxCount; // esi + unsigned int v6; // eax + const void *Buf; // ebp + int v8; // edi + + v3 = this[1]; + v4 = a3; + MaxCount = *(_DWORD *)(a2 + 4); + if ( !v3 || !MaxCount ) + return -1; + v6 = v3 - 1; + Buf = *(const void **)a2; + v8 = *this; + if ( a3 > v6 ) + v4 = v6; + do + { + if ( memchr(Buf, *(char *)(v8 + v4), MaxCount) ) + break; + } + while ( v4-- != 0 ); + return v4; +} + +//----- (00483610) -------------------------------------------------------- +int __thiscall std::string::find_last_of(int *this, char a2, unsigned int a3) +{ + int result; // eax + int v4; // ebx + int v5; // ecx + + result = -1; + v4 = this[1]; + if ( v4 ) + { + result = v4 - 1; + v5 = *this; + if ( a3 <= v4 - 1 ) + result = a3; + do + { + if ( a2 == *(_BYTE *)(v5 + result) ) + break; + } + while ( result-- != 0 ); + } + return result; +} + +//----- (00483650) -------------------------------------------------------- +int __fastcall std::string::_M_local_data(int a1) +{ + return a1 + 8; +} + +//----- (00483660) -------------------------------------------------------- +unsigned int __thiscall std::string::find_first_of(_DWORD *this, char *Str, unsigned int a3) +{ + size_t v5; // eax + size_t MaxCount; // ebx + unsigned int v8; // [esp+1Ch] [ebp-20h] + + v5 = strlen(Str); + if ( v5 ) + { + MaxCount = v5; + v8 = this[1]; + while ( v8 > a3 ) + { + if ( memchr(Str, *(char *)(*this + a3), MaxCount) ) + return a3; + ++a3; + } + } + return -1; +} + +//----- (004836E0) -------------------------------------------------------- +unsigned int __thiscall std::string::find_first_of(_DWORD *this, void *Buf, unsigned int a3, size_t MaxCount) +{ + unsigned int v5; // edi + + if ( MaxCount ) + { + v5 = this[1]; + while ( v5 > a3 ) + { + if ( memchr(Buf, *(char *)(*this + a3), MaxCount) ) + return a3; + ++a3; + } + } + return -1; +} + +//----- (00483750) -------------------------------------------------------- +int __thiscall std::string::find_first_of(_DWORD *this, int a2, unsigned int a3) +{ + size_t MaxCount; // esi + const void *Buf; // ebp + unsigned int v8; // [esp+1Ch] [ebp-20h] + + MaxCount = *(_DWORD *)(a2 + 4); + Buf = *(const void **)a2; + if ( MaxCount ) + { + v8 = this[1]; + while ( v8 > a3 ) + { + if ( memchr(Buf, *(char *)(*this + a3), MaxCount) ) + return a3; + ++a3; + } + } + return -1; +} + +//----- (004837C0) -------------------------------------------------------- +char *__thiscall std::string::find_first_of(int *this, char a2, unsigned int a3) +{ + int v3; // ebx + unsigned int v4; // edx + int v5; // esi + char *v6; // eax + + v3 = -1; + v4 = this[1]; + if ( a3 < v4 ) + { + v5 = *this; + v6 = (char *)memchr((const void *)(*this + a3), a2, v4 - a3); + if ( v6 ) + return &v6[-v5]; + } + return (char *)v3; +} + +//----- (00483810) -------------------------------------------------------- +void *__thiscall std::string::get_allocator(void *this, int a2) +{ + return this; +} + +//----- (00483820) -------------------------------------------------------- +unsigned int __thiscall std::string::_M_check_length(_DWORD *this, int a2, unsigned int a3, std::length_error *a4) +{ + unsigned int result; // eax + + result = a2 + 0x3FFFFFFF - this[1]; + if ( result < a3 ) + std::__throw_length_error(a4); + return result; +} + +//----- (00483850) -------------------------------------------------------- +int __fastcall std::string::_M_get_allocator(int a1) +{ + return a1; +} + +//----- (00483860) -------------------------------------------------------- +int __thiscall std::string::find_last_not_of(int *this, char *Str, unsigned int a3) +{ + int v3; // ebx + int v4; // ebp + size_t MaxCount; // esi + unsigned int v6; // edx + int v9; // [esp+1Ch] [ebp-20h] + + v3 = -1; + v9 = this[1]; + if ( v9 ) + { + v4 = *this; + MaxCount = strlen(Str); + v6 = v9 - 1; + if ( a3 <= v9 - 1 ) + v6 = a3; + v3 = v6; + do + { + if ( !MaxCount ) + break; + if ( !memchr(Str, *(char *)(v4 + v3), MaxCount) ) + break; + } + while ( v3-- != 0 ); + } + return v3; +} + +//----- (004838D0) -------------------------------------------------------- +int __thiscall std::string::find_last_not_of(int *this, void *Buf, unsigned int a3, size_t MaxCount) +{ + int v4; // ebx + int v5; // eax + unsigned int v6; // edx + unsigned int v7; // eax + int v8; // ebp + + v4 = -1; + v5 = this[1]; + v6 = a3; + if ( v5 ) + { + v7 = v5 - 1; + v8 = *this; + if ( v7 <= a3 ) + v6 = v7; + v4 = v6; + do + { + if ( !MaxCount ) + break; + if ( !memchr(Buf, *(char *)(v8 + v4), MaxCount) ) + break; + } + while ( v4-- != 0 ); + } + return v4; +} + +//----- (00483930) -------------------------------------------------------- +int __thiscall std::string::find_last_not_of(int *this, int a2, unsigned int a3) +{ + int v3; // ebx + int v4; // eax + unsigned int v5; // eax + size_t MaxCount; // esi + int v7; // ebp + const void *Buf; // edi + + v3 = -1; + v4 = this[1]; + if ( v4 ) + { + v5 = v4 - 1; + MaxCount = *(_DWORD *)(a2 + 4); + v7 = *this; + Buf = *(const void **)a2; + if ( a3 <= v5 ) + v5 = a3; + v3 = v5; + do + { + if ( !MaxCount ) + break; + if ( !memchr(Buf, *(char *)(v7 + v3), MaxCount) ) + break; + } + while ( v3-- != 0 ); + } + return v3; +} + +//----- (00483990) -------------------------------------------------------- +int __thiscall std::string::find_last_not_of(int *this, char a2, unsigned int a3) +{ + int result; // eax + int v4; // ebx + int v5; // ecx + + result = -1; + v4 = this[1]; + if ( v4 ) + { + result = v4 - 1; + v5 = *this; + if ( v4 - 1 > a3 ) + result = a3; + do + { + if ( *(_BYTE *)(v5 + result) != a2 ) + break; + } + while ( result-- != 0 ); + } + return result; +} + +//----- (004839D0) -------------------------------------------------------- +unsigned int __thiscall std::string::find_first_not_of(int *this, char *Str, unsigned int a3) +{ + unsigned int v4; // esi + size_t v5; // eax + unsigned int v6; // edi + int v7; // ebp + size_t MaxCount; // ebx + + v4 = a3; + v5 = strlen(Str); + v6 = this[1]; + if ( a3 >= v6 ) + return -1; + v7 = *this; + MaxCount = v5; + if ( v5 ) + { + while ( memchr(Str, *(char *)(v7 + v4), MaxCount) ) + { + if ( ++v4 == v6 ) + return -1; + } + } + return v4; +} + +//----- (00483A40) -------------------------------------------------------- +unsigned int __thiscall std::string::find_first_not_of(int *this, void *Buf, unsigned int a3, size_t MaxCount) +{ + unsigned int v4; // esi + unsigned int v5; // edi + int v6; // ebp + + v4 = this[1]; + v5 = a3; + if ( a3 >= v4 ) + return -1; + v6 = *this; + if ( MaxCount ) + { + while ( memchr(Buf, *(char *)(v6 + v5), MaxCount) ) + { + if ( ++v5 == v4 ) + return -1; + } + } + return v5; +} + +//----- (00483AA0) -------------------------------------------------------- +int __thiscall std::string::find_first_not_of(int *this, int a2, unsigned int a3) +{ + unsigned int v3; // esi + unsigned int v4; // ebp + size_t MaxCount; // ebx + int v6; // edi + void *i; // eax + void *Buf; // [esp+1Ch] [ebp-20h] + + v3 = this[1]; + v4 = a3; + MaxCount = *(_DWORD *)(a2 + 4); + if ( a3 >= v3 ) + return -1; + v6 = *this; + if ( MaxCount ) + { + Buf = *(void **)a2; + for ( i = memchr(*(const void **)a2, *(char *)(v6 + a3), MaxCount); i; i = memchr(Buf, *(char *)(v6 + v4), MaxCount) ) + { + if ( v3 == ++v4 ) + return -1; + } + } + return v4; +} + +//----- (00483B10) -------------------------------------------------------- +int __thiscall std::string::find_first_not_of(_DWORD *this, char a2, unsigned int a3) +{ + int result; // eax + unsigned int v4; // edx + + result = a3; + v4 = this[1]; + if ( a3 >= v4 ) + return -1; + while ( *(_BYTE *)(*this + result) == a2 ) + { + if ( ++result == v4 ) + return -1; + } + return result; +} + +//----- (00483B50) -------------------------------------------------------- +unsigned int __thiscall std::string::at(_DWORD *this, unsigned int a2) +{ + if ( a2 >= this[1] ) + std::__throw_out_of_range_fmt("basic_string::at: __n (which is %zu) >= this->size() (which is %zu)", a2, this[1]); + return *this + a2; +} + +//----- (00483B80) -------------------------------------------------------- +int __fastcall std::string::end(_DWORD *a1) +{ + return a1[1] + *a1; +} + +//----- (00483B90) -------------------------------------------------------- +int __fastcall std::string::back(_DWORD *a1) +{ + return *a1 + a1[1] - 1; +} + +//----- (00483BA0) -------------------------------------------------------- +int __fastcall std::string::cend(_DWORD *a1) +{ + return a1[1] + *a1; +} + +//----- (00483BB0) -------------------------------------------------------- +size_t __thiscall std::string::copy(_DWORD *this, _BYTE *a2, size_t a3, unsigned int a4) +{ + unsigned int v4; // ebx + size_t Size; // ebx + _BYTE *Src; // eax + + v4 = this[1]; + if ( a4 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::copy", + a4, + this[1]); + Size = v4 - a4; + if ( Size > a3 ) + Size = a3; + if ( !Size ) + return Size; + Src = (_BYTE *)(*this + a4); + if ( Size != 1 ) + { + memcpy(a2, Src, Size); + return Size; + } + *a2 = *Src; + return 1; +} + +//----- (00483C30) -------------------------------------------------------- +int __fastcall std::string::data(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00483C40) -------------------------------------------------------- +unsigned int __thiscall std::string::find(int *this, char *Str, int a3) +{ + size_t Size; // eax + + Size = strlen(Str); + return std::string::find(this, Str, a3, Size); +} + +//----- (00483C80) -------------------------------------------------------- +unsigned int __thiscall std::string::find(int *this, char *Buf2, unsigned int a3, size_t Size) +{ + unsigned int v4; // edx + int v6; // ecx + const void *Buf; // eax + int v8; // edi + size_t v9; // edx + size_t MaxCount; // edx + int Val; // ebp + char *v12; // edi + int v14; // ecx + int v15; // [esp+18h] [ebp-24h] + int v16; // [esp+1Ch] [ebp-20h] + + v4 = this[1]; + if ( Size ) + { + v6 = -1; + if ( v4 > a3 ) + { + v16 = *this; + Buf = (const void *)(*this + a3); + v8 = v4 + v16; + v9 = v4 - a3; + v15 = v8; + if ( Size <= v9 ) + { + MaxCount = 1 - Size + v9; + if ( MaxCount ) + { + Val = *Buf2; + while ( 1 ) + { + v12 = (char *)memchr(Buf, Val, MaxCount); + if ( !v12 ) + return -1; + if ( !memcmp(v12, Buf2, Size) ) + break; + Buf = v12 + 1; + if ( Size <= v15 - (int)(v12 + 1) ) + { + MaxCount = v15 - (_DWORD)v12 - Size; + if ( MaxCount ) + continue; + } + return -1; + } + return (unsigned int)&v12[-v16]; + } + } + } + return v6; + } + else + { + v14 = -1; + if ( v4 >= a3 ) + return a3; + return v14; + } +} + +//----- (00483D50) -------------------------------------------------------- +unsigned int __thiscall std::string::find(int *this, int a2, int a3) +{ + return std::string::find(this, *(char **)a2, a3, *(_DWORD *)(a2 + 4)); +} + +//----- (00483D80) -------------------------------------------------------- +char *__thiscall std::string::find(int *this, char a2, unsigned int a3) +{ + int v3; // ebx + unsigned int v4; // edx + int v5; // esi + char *v6; // eax + + v3 = -1; + v4 = this[1]; + if ( a3 < v4 ) + { + v5 = *this; + v6 = (char *)memchr((const void *)(*this + a3), a2, v4 - a3); + if ( v6 ) + return &v6[-v5]; + } + return (char *)v3; +} + +//----- (00483DD0) -------------------------------------------------------- +_DWORD *__thiscall std::string::rend(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2; + return result; +} + +//----- (00483DE0) -------------------------------------------------------- +int __fastcall std::string::size(int a1) +{ + return *(_DWORD *)(a1 + 4); +} + +//----- (00483DF0) -------------------------------------------------------- +int __fastcall std::string::begin(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00483E00) -------------------------------------------------------- +int __fastcall std::string::c_str(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00483E10) -------------------------------------------------------- +_DWORD *__thiscall std::string::crend(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2; + return result; +} + +//----- (00483E20) -------------------------------------------------------- +bool __fastcall std::string::empty(int a1) +{ + return *(_DWORD *)(a1 + 4) == 0; +} + +//----- (00483E30) -------------------------------------------------------- +int __fastcall std::string::front(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00483E40) -------------------------------------------------------- +int __thiscall std::string::rfind(int *this, char *Str, int a3) +{ + size_t v4; // eax + + v4 = strlen(Str); + return std::string::rfind(this, Str, a3, v4); +} + +//----- (00483E80) -------------------------------------------------------- +int __thiscall std::string::rfind(int *this, void *Buf2, unsigned int a3, size_t Size) +{ + int v4; // ebx + size_t v5; // eax + unsigned int v6; // edx + unsigned int v7; // eax + int v8; // ebp + + v4 = -1; + v5 = this[1]; + v6 = a3; + if ( Size <= v5 ) + { + v7 = v5 - Size; + v8 = *this; + if ( v7 <= a3 ) + v6 = v7; + v4 = v6; + if ( Size ) + { + while ( memcmp((const void *)(v8 + v4), Buf2, Size) ) + { + if ( !v4 ) + return -1; + --v4; + } + } + } + return v4; +} +// 483ED1: conditional instruction was optimized away because %arg_8.4!=0 + +//----- (00483EF0) -------------------------------------------------------- +int __thiscall std::string::rfind(int *this, int a2, unsigned int a3) +{ + int v3; // ebx + size_t v4; // eax + int v5; // edx + size_t Size; // esi + unsigned int v7; // eax + const void *Buf2; // edi + int v9; // ebp + + v3 = -1; + v4 = this[1]; + v5 = a3; + Size = *(_DWORD *)(a2 + 4); + if ( Size <= v4 ) + { + v7 = v4 - Size; + Buf2 = *(const void **)a2; + v9 = *this; + if ( v7 <= a3 ) + v5 = v7; + v3 = v5; + if ( Size ) + { + while ( memcmp((const void *)(v9 + v3), Buf2, Size) ) + { + if ( !v3 ) + return -1; + --v3; + } + } + } + return v3; +} +// 483F42: conditional instruction was optimized away because esi.4!=0 + +//----- (00483F60) -------------------------------------------------------- +int __thiscall std::string::rfind(int *this, char a2, unsigned int a3) +{ + int result; // eax + int v4; // ebx + int v5; // ecx + + result = -1; + v4 = this[1]; + if ( v4 ) + { + result = v4 - 1; + v5 = *this; + if ( v4 - 1 > a3 ) + result = a3; + do + { + if ( *(_BYTE *)(v5 + result) == a2 ) + break; + } + while ( result-- != 0 ); + } + return result; +} + +//----- (00483FA0) -------------------------------------------------------- +int __fastcall std::string::cbegin(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00483FB0) -------------------------------------------------------- +int __fastcall std::string::length(int a1) +{ + return *(_DWORD *)(a1 + 4); +} + +//----- (00483FC0) -------------------------------------------------------- +_DWORD *__thiscall std::string::rbegin(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2 + a2[1]; + return result; +} + +//----- (00483FD0) -------------------------------------------------------- +_DWORD *__thiscall std::string::substr(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4) +{ + unsigned int v5; // eax + unsigned int v6; // eax + int v8; // [esp+8h] [ebp-14h] + + v5 = a2[1]; + if ( a3 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::substr", + a3, + a2[1]); + v6 = v5 - a3; + *this = this + 2; + LOBYTE(v8) = 0; + if ( v6 > a4 ) + v6 = a4; + std::string::_M_construct(this, (_BYTE *)(a3 + *a2), a3 + *a2 + v6, v8); + return this; +} +// 48400B: variable 'v8' is possibly undefined + +//----- (00484040) -------------------------------------------------------- +int __fastcall std::string::_M_data(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00484050) -------------------------------------------------------- +int __thiscall std::string::compare(int this, char *Str) +{ + size_t v3; // edi + size_t v4; // ebx + size_t Size; // eax + int result; // eax + + v3 = *(_DWORD *)(this + 4); + v4 = strlen(Str); + Size = v3; + if ( v4 <= v3 ) + Size = v4; + if ( !Size ) + return v3 - v4; + result = memcmp(*(const void **)this, Str, Size); + if ( !result ) + return v3 - v4; + return result; +} + +//----- (004840A0) -------------------------------------------------------- +int __thiscall std::string::compare(int this, int a2) +{ + size_t v2; // esi + size_t Size; // edx + size_t v4; // ebx + int result; // eax + + v2 = *(_DWORD *)(this + 4); + Size = v2; + v4 = *(_DWORD *)(a2 + 4); + if ( v4 <= v2 ) + Size = *(_DWORD *)(a2 + 4); + if ( !Size ) + return v2 - v4; + result = memcmp(*(const void **)this, *(const void **)a2, Size); + if ( !result ) + return v2 - v4; + return result; +} + +//----- (004840E0) -------------------------------------------------------- +int __thiscall std::string::compare(_DWORD *this, unsigned int a2, unsigned int a3, char *Str) +{ + unsigned int v4; // ebx + unsigned int v5; // ebx + size_t v7; // edi + size_t Size; // eax + int result; // eax + + v4 = this[1]; + if ( a2 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a2, + this[1]); + v5 = v4 - a2; + if ( v5 > a3 ) + v5 = a3; + v7 = strlen(Str); + Size = v5; + if ( v7 <= v5 ) + Size = v7; + if ( !Size ) + return v5 - v7; + result = memcmp((const void *)(*this + a2), Str, Size); + if ( !result ) + return v5 - v7; + return result; +} + +//----- (00484160) -------------------------------------------------------- +int __thiscall std::string::compare(_DWORD *this, unsigned int a2, size_t a3, void *Buf2, unsigned int a5) +{ + unsigned int v5; // ebx + unsigned int v6; // ebx + size_t Size; // edx + int result; // eax + + v5 = this[1]; + if ( a2 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a2, + this[1]); + v6 = v5 - a2; + if ( v6 > a3 ) + v6 = a3; + Size = a5; + if ( v6 <= a5 ) + Size = v6; + if ( !Size ) + return v6 - a5; + result = memcmp((const void *)(*this + a2), Buf2, Size); + if ( !result ) + return v6 - a5; + return result; +} + +//----- (004841D0) -------------------------------------------------------- +int __thiscall std::string::compare(_DWORD *this, unsigned int a2, size_t a3, int a4) +{ + unsigned int v4; // ebx + size_t v5; // ebx + size_t v6; // esi + size_t Size; // edi + int result; // eax + + v4 = this[1]; + if ( a2 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a2, + this[1]); + v5 = v4 - a2; + if ( v5 > a3 ) + v5 = a3; + v6 = *(_DWORD *)(a4 + 4); + Size = v5; + if ( v6 <= v5 ) + Size = *(_DWORD *)(a4 + 4); + if ( !Size ) + return v5 - v6; + result = memcmp((const void *)(*this + a2), *(const void **)a4, Size); + if ( !result ) + return v5 - v6; + return result; +} + +//----- (00484240) -------------------------------------------------------- +int __thiscall std::string::compare(_DWORD *this, unsigned int a2, size_t a3, _DWORD *a4, unsigned int a5, size_t a6) +{ + unsigned int v6; // ebx + size_t v7; // edi + unsigned int v8; // eax + size_t v9; // ebx + size_t v10; // eax + size_t Size; // eax + int result; // eax + + v6 = this[1]; + v7 = a6; + if ( a2 > v6 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a2, + v6); + v8 = a4[1]; + if ( a5 > v8 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a5, + a4[1]); + v9 = v6 - a2; + if ( v9 > a3 ) + v9 = a3; + v10 = v8 - a5; + if ( v10 <= a6 ) + v7 = v10; + Size = v9; + if ( v7 <= v9 ) + Size = v7; + if ( !Size ) + return v9 - v7; + result = memcmp((const void *)(*this + a2), (const void *)(*a4 + a5), Size); + if ( !result ) + return v9 - v7; + return result; +} + +//----- (004842F0) -------------------------------------------------------- +_DWORD *__thiscall std::string::crbegin(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2 + a2[1]; + return result; +} + +//----- (00484300) -------------------------------------------------------- +unsigned int __thiscall std::string::_M_check(_DWORD *this, unsigned int a2, const char *a3) +{ + unsigned int v3; // edx + unsigned int result; // eax + + v3 = this[1]; + result = a2; + if ( a2 > v3 ) + std::__throw_out_of_range_fmt("%s: __pos (which is %zu) > this->size() (which is %zu)", a3, a2, v3); + return result; +} + +//----- (00484330) -------------------------------------------------------- +unsigned int __thiscall std::string::_M_limit(_DWORD *this, int a2, unsigned int a3) +{ + unsigned int result; // eax + + result = this[1] - a2; + if ( result > a3 ) + return a3; + return result; +} + +//----- (00484350) -------------------------------------------------------- +int __fastcall std::string::capacity(_DWORD *a1) +{ + if ( (_DWORD *)*a1 == a1 + 2 ) + return 15; + else + return a1[2]; +} + +//----- (00484370) -------------------------------------------------------- +int std::string::max_size() +{ + return 0x3FFFFFFF; +} + +//----- (00484380) -------------------------------------------------------- +int __thiscall std::string::operator[](_DWORD *this, int a2) +{ + return a2 + *this; +} + +//----- (00484390) -------------------------------------------------------- +bool __thiscall std::wstring::_M_disjunct(unsigned int *this, unsigned int a2) +{ + bool result; // al + + result = 1; + if ( *this <= a2 ) + return *this + 2 * this[1] < a2; + return result; +} + +//----- (004843B0) -------------------------------------------------------- +bool __fastcall std::wstring::_M_is_local(_DWORD *a1) +{ + return a1 + 2 == (_DWORD *)*a1; +} + +//----- (004843C0) -------------------------------------------------------- +int __thiscall std::wstring::find_last_of(_DWORD *this, wchar_t *String, int a3) +{ + int v4; // eax + + v4 = wcslen(String); + return std::wstring::find_last_of(this, String, a3, v4); +} + +//----- (00484400) -------------------------------------------------------- +int __thiscall std::wstring::find_last_of(_DWORD *this, _WORD *a2, unsigned int a3, int a4) +{ + int v4; // eax + unsigned int v5; // ebx + unsigned int v6; // eax + _WORD *v7; // eax + int v8; // edx + + v4 = this[1]; + v5 = a3; + if ( !v4 || !a4 ) + return -1; + v6 = v4 - 1; + if ( v6 <= a3 ) + v5 = v6; + while ( !a2 ) + { +LABEL_9: + if ( v5-- == 0 ) + return v5; + } + v7 = a2; + v8 = a4; + while ( *(_WORD *)(*this + 2 * v5) != *v7 ) + { + ++v7; + if ( !--v8 ) + goto LABEL_9; + } + return v5; +} + +//----- (00484470) -------------------------------------------------------- +int __thiscall std::wstring::find_last_of(_DWORD *this, int a2, unsigned int a3) +{ + return std::wstring::find_last_of(this, *(_WORD **)a2, a3, *(_DWORD *)(a2 + 4)); +} + +//----- (004844A0) -------------------------------------------------------- +int __thiscall std::wstring::find_last_of(int *this, __int16 a2, unsigned int a3) +{ + int result; // eax + int v4; // ebx + int v5; // ecx + + result = -1; + v4 = this[1]; + if ( v4 ) + { + result = v4 - 1; + v5 = *this; + if ( a3 <= v4 - 1 ) + result = a3; + do + { + if ( a2 == *(_WORD *)(v5 + 2 * result) ) + break; + } + while ( result-- != 0 ); + } + return result; +} + +//----- (004844E0) -------------------------------------------------------- +int __fastcall std::wstring::_M_local_data(int a1) +{ + return a1 + 8; +} + +//----- (004844F0) -------------------------------------------------------- +int __thiscall std::wstring::find_first_of(_DWORD *this, wchar_t *String, int a3) +{ + int v4; // eax + + v4 = wcslen(String); + return std::wstring::find_first_of(this, String, a3, v4); +} + +//----- (00484530) -------------------------------------------------------- +int __thiscall std::wstring::find_first_of(_DWORD *this, _WORD *a2, unsigned int a3, int a4) +{ + unsigned int v4; // ebp + unsigned int v5; // ebx + int v6; // edx + _WORD *v7; // eax + + if ( !a4 ) + return -1; + v4 = this[1]; + v5 = a3; + if ( v4 <= a3 ) + return -1; + while ( !a2 ) + { +LABEL_7: + if ( v4 <= ++v5 ) + return -1; + } + v6 = a4; + v7 = a2; + while ( *(_WORD *)(*this + 2 * v5) != *v7 ) + { + ++v7; + if ( !--v6 ) + goto LABEL_7; + } + return v5; +} + +//----- (00484590) -------------------------------------------------------- +int __thiscall std::wstring::find_first_of(_DWORD *this, int a2, unsigned int a3) +{ + return std::wstring::find_first_of(this, *(_WORD **)a2, a3, *(_DWORD *)(a2 + 4)); +} + +//----- (004845C0) -------------------------------------------------------- +int __thiscall std::wstring::find_first_of(_DWORD *this, __int16 a2, unsigned int a3) +{ + return std::wstring::find(this, a2, a3); +} + +//----- (004845D0) -------------------------------------------------------- +void *__thiscall std::wstring::get_allocator(void *this, int a2) +{ + return this; +} + +//----- (004845E0) -------------------------------------------------------- +unsigned int __thiscall std::wstring::_M_check_length(_DWORD *this, int a2, unsigned int a3, std::length_error *a4) +{ + unsigned int result; // eax + + result = a2 + 0x1FFFFFFF - this[1]; + if ( result < a3 ) + std::__throw_length_error(a4); + return result; +} + +//----- (00484610) -------------------------------------------------------- +int __fastcall std::wstring::_M_get_allocator(int a1) +{ + return a1; +} + +//----- (00484620) -------------------------------------------------------- +int __thiscall std::wstring::find_last_not_of(_DWORD *this, wchar_t *String, int a3) +{ + int v4; // eax + + v4 = wcslen(String); + return std::wstring::find_last_not_of(this, String, a3, v4); +} + +//----- (00484660) -------------------------------------------------------- +int __thiscall std::wstring::find_last_not_of(_DWORD *this, _WORD *a2, unsigned int a3, int a4) +{ + int v4; // eax + int v5; // ebx + unsigned int v6; // eax + _WORD *v7; // eax + int v8; // edx + + v4 = this[1]; + v5 = -1; + if ( v4 ) + { + v6 = v4 - 1; + v5 = a3; + if ( v6 <= a3 ) + v5 = v6; + while ( a4 && a2 ) + { + v7 = a2; + v8 = a4; + while ( *(_WORD *)(*this + 2 * v5) != *v7 ) + { + ++v7; + if ( !--v8 ) + return v5; + } + if ( v5-- == 0 ) + return v5; + } + } + return v5; +} + +//----- (004846D0) -------------------------------------------------------- +int __thiscall std::wstring::find_last_not_of(_DWORD *this, int a2, unsigned int a3) +{ + return std::wstring::find_last_not_of(this, *(_WORD **)a2, a3, *(_DWORD *)(a2 + 4)); +} + +//----- (00484700) -------------------------------------------------------- +int __thiscall std::wstring::find_last_not_of(int *this, __int16 a2, unsigned int a3) +{ + int result; // eax + int v4; // ebx + int v5; // ecx + + result = -1; + v4 = this[1]; + if ( v4 ) + { + result = v4 - 1; + v5 = *this; + if ( v4 - 1 > a3 ) + result = a3; + do + { + if ( *(_WORD *)(v5 + 2 * result) != a2 ) + break; + } + while ( result-- != 0 ); + } + return result; +} + +//----- (00484740) -------------------------------------------------------- +int __thiscall std::wstring::find_first_not_of(int *this, wchar_t *String, unsigned int a3) +{ + unsigned int v4; // ebx + size_t v5; // eax + unsigned int v6; // esi + int v7; // ebp + size_t v8; // edi + __int16 v9; // cx + wchar_t *v10; // eax + size_t v11; // edx + + v4 = a3; + v5 = wcslen(String); + v6 = this[1]; + if ( a3 < v6 ) + { + v7 = *this; + v8 = v5; + if ( !v5 ) + return v4; + v9 = *(_WORD *)(v7 + 2 * a3); + if ( !String ) + return v4; + while ( 1 ) + { + v10 = String; + v11 = v8; + while ( v9 != *v10 ) + { + ++v10; + if ( !--v11 ) + return v4; + } + if ( ++v4 == v6 ) + break; + v9 = *(_WORD *)(v7 + 2 * v4); + } + } + return -1; +} + +//----- (004847D0) -------------------------------------------------------- +int __thiscall std::wstring::find_first_not_of(int *this, _WORD *a2, unsigned int a3, int a4) +{ + unsigned int v4; // ebx + unsigned int v5; // esi + int v6; // edi + __int16 v7; // cx + _WORD *v8; // eax + int v9; // edx + + v4 = a3; + v5 = this[1]; + if ( a3 < v5 ) + { + v6 = *this; + if ( !a4 ) + return v4; + v7 = *(_WORD *)(*this + 2 * a3); + if ( !a2 ) + return v4; + while ( 1 ) + { + v8 = a2; + v9 = a4; + while ( v7 != *v8 ) + { + ++v8; + if ( !--v9 ) + return v4; + } + if ( ++v4 == v5 ) + break; + v7 = *(_WORD *)(v6 + 2 * v4); + } + } + return -1; +} + +//----- (00484850) -------------------------------------------------------- +int __thiscall std::wstring::find_first_not_of(int *this, _DWORD *a2, unsigned int a3) +{ + unsigned int v3; // esi + unsigned int v4; // ebx + int v5; // edi + __int16 v6; // cx + _WORD *v7; // eax + int v8; // edx + + v3 = this[1]; + v4 = a3; + if ( a3 < v3 ) + { + v5 = *this; + if ( !a2[1] ) + return v4; + v6 = *(_WORD *)(*this + 2 * a3); + if ( !*a2 ) + return v4; + while ( 1 ) + { + v7 = (_WORD *)*a2; + v8 = a2[1]; + while ( v6 != *v7 ) + { + ++v7; + if ( !--v8 ) + return v4; + } + if ( ++v4 == v3 ) + break; + v6 = *(_WORD *)(v5 + 2 * v4); + } + } + return -1; +} + +//----- (004848D0) -------------------------------------------------------- +int __thiscall std::wstring::find_first_not_of(_DWORD *this, __int16 a2, unsigned int a3) +{ + int result; // eax + unsigned int v4; // edx + + result = a3; + v4 = this[1]; + if ( a3 >= v4 ) + return -1; + while ( *(_WORD *)(*this + 2 * result) == a2 ) + { + if ( ++result == v4 ) + return -1; + } + return result; +} + +//----- (00484920) -------------------------------------------------------- +int __thiscall std::wstring::at(_DWORD *this, unsigned int a2) +{ + if ( a2 >= this[1] ) + std::__throw_out_of_range_fmt("basic_string::at: __n (which is %zu) >= this->size() (which is %zu)", a2, this[1]); + return *this + 2 * a2; +} + +//----- (00484950) -------------------------------------------------------- +int __fastcall std::wstring::end(_DWORD *a1) +{ + return *a1 + 2 * a1[1]; +} + +//----- (00484960) -------------------------------------------------------- +int __fastcall std::wstring::back(_DWORD *a1) +{ + return *a1 + 2 * a1[1] - 2; +} + +//----- (00484970) -------------------------------------------------------- +int __fastcall std::wstring::cend(_DWORD *a1) +{ + return *a1 + 2 * a1[1]; +} + +//----- (00484980) -------------------------------------------------------- +int __thiscall std::wstring::copy(_DWORD *this, _WORD *a2, unsigned int a3, unsigned int a4) +{ + unsigned int v4; // ebx + unsigned int v5; // ebx + _WORD *Src; // eax + + v4 = this[1]; + if ( a4 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::copy", + a4, + this[1]); + v5 = v4 - a4; + if ( v5 > a3 ) + v5 = a3; + if ( !v5 ) + return v5; + Src = (_WORD *)(*this + 2 * a4); + if ( v5 != 1 ) + { + memcpy(a2, Src, 2 * v5); + return v5; + } + *a2 = *Src; + return 1; +} + +//----- (00484A00) -------------------------------------------------------- +int __fastcall std::wstring::data(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00484A10) -------------------------------------------------------- +int __thiscall std::wstring::find(int *this, wchar_t *String, int a3) +{ + unsigned int v4; // eax + + v4 = wcslen(String); + return std::wstring::find(this, String, a3, v4); +} + +//----- (00484A50) -------------------------------------------------------- +int __thiscall std::wstring::find(int *this, _WORD *a2, unsigned int a3, unsigned int a4) +{ + unsigned int v4; // ebx + _WORD *v5; // eax + int v6; // edx + int v8; // edx + __int16 v9; // bx + unsigned int v10; // edx + int v11; // ecx + int v12; // [esp+0h] [ebp-18h] + int v13; // [esp+4h] [ebp-14h] + + v4 = this[1]; + if ( a4 ) + { + if ( v4 > a3 && (v13 = *this, v5 = (_WORD *)(*this + 2 * a3), a4 <= v4 - a3) && (v6 = 1 - a4 + v4 - a3, v5) && v6 ) + { + v12 = v13 + 2 * v4; +LABEL_7: + while ( *a2 != *v5 ) + { + ++v5; + if ( !--v6 ) + return -1; + } + if ( a2 != v5 ) + { + v8 = 0; + while ( a4 - 1 != v8 ) + { + v9 = v5[++v8]; + if ( v9 != a2[v8] ) + { + v10 = (v12 - (int)++v5) >> 1; + if ( a4 <= v10 ) + { + v6 = 1 - a4 + v10; + if ( v6 ) + goto LABEL_7; + } + return -1; + } + } + } + return ((int)v5 - v13) >> 1; + } + else + { + return -1; + } + } + else + { + v11 = -1; + if ( v4 >= a3 ) + return a3; + return v11; + } +} + +//----- (00484B50) -------------------------------------------------------- +int __thiscall std::wstring::find(int *this, int a2, unsigned int a3) +{ + return std::wstring::find(this, *(_WORD **)a2, a3, *(_DWORD *)(a2 + 4)); +} + +//----- (00484B80) -------------------------------------------------------- +int __thiscall std::wstring::find(_DWORD *this, __int16 a2, unsigned int a3) +{ + unsigned int v3; // eax + unsigned int v4; // eax + _WORD *v5; // edx + + v3 = this[1]; + if ( a3 >= v3 ) + return -1; + v4 = v3 - a3; + v5 = (_WORD *)(*this + 2 * a3); + if ( !v5 ) + return -1; + while ( *v5 != a2 ) + { + ++v5; + if ( !--v4 ) + return -1; + } + return ((int)v5 - *this) >> 1; +} + +//----- (00484BE0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::rend(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2; + return result; +} + +//----- (00484BF0) -------------------------------------------------------- +int __fastcall std::wstring::size(int a1) +{ + return *(_DWORD *)(a1 + 4); +} + +//----- (00484C00) -------------------------------------------------------- +int __fastcall std::wstring::begin(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00484C10) -------------------------------------------------------- +int __fastcall std::wstring::c_str(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00484C20) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::crend(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2; + return result; +} + +//----- (00484C30) -------------------------------------------------------- +bool __fastcall std::wstring::empty(int a1) +{ + return *(_DWORD *)(a1 + 4) == 0; +} + +//----- (00484C40) -------------------------------------------------------- +int __fastcall std::wstring::front(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00484C50) -------------------------------------------------------- +int __thiscall std::wstring::rfind(_DWORD *this, wchar_t *String, int a3) +{ + unsigned int v4; // eax + + v4 = wcslen(String); + return std::wstring::rfind(this, String, a3, v4); +} + +//----- (00484C90) -------------------------------------------------------- +int __thiscall std::wstring::rfind(_DWORD *this, _WORD *a2, unsigned int a3, unsigned int a4) +{ + int v4; // ebx + unsigned int v5; // eax + unsigned int v6; // eax + int v7; // esi + _WORD *v8; // eax + _WORD *v9; // edx + unsigned int v10; // ecx + + v4 = -1; + v5 = this[1]; + if ( a4 <= v5 ) + { + v6 = v5 - a4; + v4 = a3; + if ( v6 <= a3 ) + v4 = v6; + v7 = *this + 2 * v4; + if ( a4 ) + { + while ( 1 ) + { + v8 = (_WORD *)v7; + if ( (_WORD *)v7 == a2 ) + break; + if ( (v7 != 0) == (a2 != 0) ) + { + v9 = a2; + v10 = a4; + while ( *v8 == *v9 ) + { + ++v8; + ++v9; + if ( !--v10 ) + return v4; + } + } + v7 -= 2; + if ( !v4 ) + return -1; + --v4; + } + } + } + return v4; +} +// 484D01: conditional instruction was optimized away because %arg_8.4!=0 + +//----- (00484D20) -------------------------------------------------------- +int __thiscall std::wstring::rfind(_DWORD *this, int a2, unsigned int a3) +{ + return std::wstring::rfind(this, *(_WORD **)a2, a3, *(_DWORD *)(a2 + 4)); +} + +//----- (00484D50) -------------------------------------------------------- +int __thiscall std::wstring::rfind(int *this, __int16 a2, unsigned int a3) +{ + int result; // eax + int v4; // ebx + int v5; // ecx + + result = -1; + v4 = this[1]; + if ( v4 ) + { + result = v4 - 1; + v5 = *this; + if ( v4 - 1 > a3 ) + result = a3; + do + { + if ( *(_WORD *)(v5 + 2 * result) == a2 ) + break; + } + while ( result-- != 0 ); + } + return result; +} + +//----- (00484D90) -------------------------------------------------------- +int __fastcall std::wstring::cbegin(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00484DA0) -------------------------------------------------------- +int __fastcall std::wstring::length(int a1) +{ + return *(_DWORD *)(a1 + 4); +} + +//----- (00484DB0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::rbegin(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2 + 2 * a2[1]; + return result; +} + +//----- (00484DD0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::substr(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4) +{ + unsigned int v5; // eax + unsigned int v6; // eax + int v8; // [esp+8h] [ebp-14h] + + v5 = a2[1]; + if ( a3 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::substr", + a3, + a2[1]); + v6 = v5 - a3; + *this = this + 2; + if ( v6 > a4 ) + v6 = a4; + LOBYTE(v8) = 0; + std::wstring::_M_construct(this, (_WORD *)(*a2 + 2 * a3), *a2 + 2 * a3 + 2 * v6, v8); + return this; +} +// 484E0D: variable 'v8' is possibly undefined + +//----- (00484E40) -------------------------------------------------------- +int __fastcall std::wstring::_M_data(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00484E50) -------------------------------------------------------- +int __thiscall std::wstring::compare(wchar_t **this, wchar_t *String) +{ + size_t v3; // esi + wchar_t *v4; // ebx + size_t v5; // edx + size_t v6; // eax + wchar_t *v7; // edx + size_t v9; // [esp+18h] [ebp-24h] + size_t v10; // [esp+1Ch] [ebp-20h] + + v3 = (size_t)this[1]; + v4 = String; + v5 = wcslen(String); + v10 = v5; + v6 = v3; + if ( v5 <= v3 ) + v6 = v5; + v9 = v6; + if ( !v6 ) + return v3 - v10; + v7 = *this; + if ( String == *this ) + return v3 - v10; + if ( (v7 != 0) != (String != 0) ) + return String == 0 ? 1 : -1; + while ( *v7 == *v4 ) + { + ++v7; + ++v4; + if ( !--v9 ) + return v3 - v10; + } + return *v7 < *v4 ? -1 : 1; +} + +//----- (00484EF0) -------------------------------------------------------- +int __thiscall std::wstring::compare(_DWORD *this, int a2) +{ + unsigned int v2; // ebx + unsigned int v3; // esi + _WORD *v4; // eax + _WORD *v5; // ecx + unsigned int v7; // [esp+0h] [ebp-18h] + unsigned int v8; // [esp+4h] [ebp-14h] + + v2 = this[1]; + v8 = v2; + v3 = *(_DWORD *)(a2 + 4); + if ( v3 <= v2 ) + v2 = *(_DWORD *)(a2 + 4); + v7 = v2; + if ( !v2 ) + return v8 - v3; + v4 = *(_WORD **)a2; + v5 = (_WORD *)*this; + if ( *(_WORD **)a2 == v5 ) + return v8 - v3; + if ( (v5 != 0) != (v4 != 0) ) + return v4 == 0 ? 1 : -1; + while ( *v5 == *v4 ) + { + ++v5; + ++v4; + if ( !--v7 ) + return v8 - v3; + } + return *v5 < *v4 ? -1 : 1; +} + +//----- (00484F90) -------------------------------------------------------- +int __thiscall std::wstring::compare(_DWORD *this, unsigned int a2, unsigned int a3, wchar_t *String) +{ + unsigned int v4; // ebx + unsigned int v5; // eax + wchar_t *v6; // esi + unsigned int v7; // ebx + unsigned int v9; // ebx + size_t v10; // ecx + size_t v11; // eax + wchar_t *v12; // edx + unsigned int v14; // [esp+1Ch] [ebp-20h] + + v4 = this[1]; + v5 = a3; + v6 = String; + if ( a2 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a2, + this[1]); + v7 = v4 - a2; + if ( v7 <= a3 ) + v5 = v7; + v9 = v5; + v14 = v5; + v10 = wcslen(String); + v11 = v9; + if ( v10 <= v9 ) + v11 = v10; + if ( !v11 ) + return v14 - v10; + v12 = (wchar_t *)(*this + 2 * a2); + if ( v12 == String ) + return v14 - v10; + if ( (v12 != 0) != (String != 0) ) + return String == 0 ? 1 : -1; + while ( *v12 == *v6 ) + { + ++v12; + ++v6; + if ( !--v11 ) + return v14 - v10; + } + return *v12 < *v6 ? -1 : 1; +} + +//----- (00485070) -------------------------------------------------------- +int __thiscall std::wstring::compare(_DWORD *this, unsigned int a2, unsigned int a3, _WORD *a4, unsigned int a5) +{ + unsigned int v6; // eax + unsigned int v7; // edi + _WORD *v8; // ecx + unsigned int v9; // eax + unsigned int v10; // ebx + unsigned int v11; // edi + _WORD *v12; // edx + unsigned int v14; // [esp+1Ch] [ebp-20h] + + v6 = this[1]; + v7 = a3; + v8 = a4; + if ( a2 > v6 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a2, + v6); + v9 = v6 - a2; + v10 = a5; + if ( v9 <= a3 ) + v7 = v9; + if ( v7 <= a5 ) + v10 = v7; + v14 = v7; + v11 = v10; + if ( !v10 ) + return v14 - a5; + v12 = (_WORD *)(*this + 2 * a2); + if ( v12 == a4 ) + return v14 - a5; + if ( (v12 != 0) != (a4 != 0) ) + return a4 == 0 ? 1 : -1; + while ( *v12 == *v8 ) + { + ++v12; + ++v8; + if ( !--v11 ) + return v14 - a5; + } + return *v12 < *v8 ? -1 : 1; +} + +//----- (00485140) -------------------------------------------------------- +int __thiscall std::wstring::compare(_DWORD *this, unsigned int a2, unsigned int a3, int a4) +{ + unsigned int v4; // eax + unsigned int v5; // ebx + unsigned int v6; // eax + unsigned int v7; // esi + unsigned int v8; // eax + _WORD *v9; // edx + _WORD *v10; // ecx + unsigned int v12; // [esp+18h] [ebp-24h] + + v4 = this[1]; + v5 = a3; + if ( a2 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a2, + v4); + v6 = v4 - a2; + v7 = *(_DWORD *)(a4 + 4); + if ( v6 <= a3 ) + v5 = v6; + v8 = v5; + if ( v7 <= v5 ) + v8 = *(_DWORD *)(a4 + 4); + v12 = v8; + if ( !v8 ) + return v5 - v7; + v9 = *(_WORD **)a4; + v10 = (_WORD *)(*this + 2 * a2); + if ( v10 == *(_WORD **)a4 ) + return v5 - v7; + if ( (v10 != 0) != (v9 != 0) ) + return v9 == 0 ? 1 : -1; + while ( *v10 == *v9 ) + { + ++v10; + ++v9; + if ( !--v12 ) + return v5 - v7; + } + return *v10 < *v9 ? -1 : 1; +} + +//----- (00485210) -------------------------------------------------------- +int __thiscall std::wstring::compare( + _DWORD *this, + unsigned int a2, + unsigned int a3, + _DWORD *a4, + unsigned int a5, + unsigned int a6) +{ + unsigned int v6; // eax + unsigned int v7; // edi + unsigned int v8; // edx + unsigned int v9; // eax + unsigned int v10; // edx + unsigned int v11; // edx + int v12; // ebx + _WORD *v13; // esi + _WORD *i; // ecx + + v6 = this[1]; + v7 = a6; + if ( a2 > v6 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a2, + this[1]); + v8 = a4[1]; + if ( a5 > v8 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::compare", + a5, + a4[1]); + v9 = v6 - a2; + if ( v9 > a3 ) + v9 = a3; + v10 = v8 - a5; + if ( v10 <= a6 ) + v7 = v10; + v11 = v9; + if ( v7 <= v9 ) + v11 = v7; + if ( !v11 ) + return v9 - v7; + v12 = *this + 2 * a2; + v13 = (_WORD *)(*a4 + 2 * a5); + if ( v13 == (_WORD *)v12 ) + return v9 - v7; + if ( (v12 != 0) != (v13 != 0) ) + return v13 == 0 ? 1 : -1; + for ( i = (_WORD *)(*this + 2 * a2); *i == *v13; ++i ) + { + ++v13; + if ( !--v11 ) + return v9 - v7; + } + return *i < *v13 ? -1 : 1; +} + +//----- (00485320) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::crbegin(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2 + 2 * a2[1]; + return result; +} + +//----- (00485340) -------------------------------------------------------- +unsigned int __thiscall std::wstring::_M_check(_DWORD *this, unsigned int a2, const char *a3) +{ + unsigned int v3; // edx + unsigned int result; // eax + + v3 = this[1]; + result = a2; + if ( a2 > v3 ) + std::__throw_out_of_range_fmt("%s: __pos (which is %zu) > this->size() (which is %zu)", a3, a2, v3); + return result; +} + +//----- (00485370) -------------------------------------------------------- +unsigned int __thiscall std::wstring::_M_limit(_DWORD *this, int a2, unsigned int a3) +{ + unsigned int result; // eax + + result = this[1] - a2; + if ( result > a3 ) + return a3; + return result; +} + +//----- (00485390) -------------------------------------------------------- +int __fastcall std::wstring::capacity(_DWORD *a1) +{ + if ( (_DWORD *)*a1 == a1 + 2 ) + return 7; + else + return a1[2]; +} + +//----- (004853B0) -------------------------------------------------------- +int std::wstring::max_size() +{ + return 0x1FFFFFFF; +} + +//----- (004853C0) -------------------------------------------------------- +int __thiscall std::wstring::operator[](_DWORD *this, int a2) +{ + return *this + 2 * a2; +} + +//----- (004853D0) -------------------------------------------------------- +int __thiscall std::stringbuf::str(int this, int a2) +{ + unsigned int v3; // eax + unsigned int v4; // edx + int v5; // ecx + + *(_BYTE *)(this + 8) = 0; + *(_DWORD *)this = this + 8; + *(_DWORD *)(this + 4) = 0; + v3 = *(_DWORD *)(a2 + 20); + if ( v3 ) + { + v4 = *(_DWORD *)(a2 + 12); + v5 = *(_DWORD *)(a2 + 16); + if ( v3 > v4 ) + std::string::_M_replace((unsigned int *)this, 0, 0, *(char **)(a2 + 16), v3 - v5); + else + std::string::_M_replace((unsigned int *)this, 0, 0, *(char **)(a2 + 16), v4 - v5); + } + else + { + std::string::_M_assign(this, a2 + 36); + } + return this; +} + +//----- (004854F0) -------------------------------------------------------- +int __thiscall std::wstringbuf::str(int this, _DWORD *a2) +{ + unsigned int v3; // eax + unsigned int v4; // edx + int v5; // ecx + + *(_DWORD *)(this + 4) = 0; + *(_DWORD *)this = this + 8; + *(_WORD *)(this + 8) = 0; + v3 = a2[5]; + if ( v3 ) + { + v4 = a2[3]; + v5 = a2[4]; + if ( v3 > v4 ) + std::wstring::_M_replace((unsigned int *)this, 0, 0, (_WORD *)a2[4], (int)(v3 - v5) >> 1); + else + std::wstring::_M_replace((unsigned int *)this, 0, 0, (_WORD *)a2[4], (int)(v4 - v5) >> 1); + } + else + { + std::wstring::_M_assign(this, (int)(a2 + 9)); + } + return this; +} + +//----- (00485620) -------------------------------------------------------- +int __thiscall std::basic_stringstream,std::allocator>::str(int this, int a2) +{ + unsigned int v3; // eax + unsigned int v4; // edx + int v5; // ecx + + *(_BYTE *)(this + 8) = 0; + *(_DWORD *)this = this + 8; + *(_DWORD *)(this + 4) = 0; + v3 = *(_DWORD *)(a2 + 32); + if ( v3 ) + { + v4 = *(_DWORD *)(a2 + 24); + v5 = *(_DWORD *)(a2 + 28); + if ( v3 > v4 ) + std::string::_M_replace((unsigned int *)this, 0, 0, *(char **)(a2 + 28), v3 - v5); + else + std::string::_M_replace((unsigned int *)this, 0, 0, *(char **)(a2 + 28), v4 - v5); + } + else + { + std::string::_M_assign(this, a2 + 48); + } + return this; +} + +//----- (00485740) -------------------------------------------------------- +int __fastcall std::basic_stringstream,std::allocator>::rdbuf(int a1) +{ + return a1 + 12; +} + +//----- (00485750) -------------------------------------------------------- +int __thiscall std::basic_stringstream,std::allocator>::str( + int this, + _DWORD *a2) +{ + unsigned int v3; // eax + unsigned int v4; // edx + int v5; // ecx + + *(_DWORD *)(this + 4) = 0; + *(_DWORD *)this = this + 8; + *(_WORD *)(this + 8) = 0; + v3 = a2[8]; + if ( v3 ) + { + v4 = a2[6]; + v5 = a2[7]; + if ( v3 > v4 ) + std::wstring::_M_replace((unsigned int *)this, 0, 0, (_WORD *)a2[7], (int)(v3 - v5) >> 1); + else + std::wstring::_M_replace((unsigned int *)this, 0, 0, (_WORD *)a2[7], (int)(v4 - v5) >> 1); + } + else + { + std::wstring::_M_assign(this, (int)(a2 + 12)); + } + return this; +} + +//----- (00485880) -------------------------------------------------------- +int __fastcall std::basic_stringstream,std::allocator>::rdbuf(int a1) +{ + return a1 + 12; +} + +//----- (00485890) -------------------------------------------------------- +int __thiscall std::istringstream::str(int this, int a2) +{ + unsigned int v3; // eax + unsigned int v4; // edx + int v5; // ecx + + *(_BYTE *)(this + 8) = 0; + *(_DWORD *)this = this + 8; + *(_DWORD *)(this + 4) = 0; + v3 = *(_DWORD *)(a2 + 28); + if ( v3 ) + { + v4 = *(_DWORD *)(a2 + 20); + v5 = *(_DWORD *)(a2 + 24); + if ( v3 > v4 ) + std::string::_M_replace((unsigned int *)this, 0, 0, *(char **)(a2 + 24), v3 - v5); + else + std::string::_M_replace((unsigned int *)this, 0, 0, *(char **)(a2 + 24), v4 - v5); + } + else + { + std::string::_M_assign(this, a2 + 44); + } + return this; +} + +//----- (004859B0) -------------------------------------------------------- +int __fastcall std::istringstream::rdbuf(int a1) +{ + return a1 + 8; +} + +//----- (004859C0) -------------------------------------------------------- +int __thiscall std::wistringstream::str(int this, _DWORD *a2) +{ + unsigned int v3; // eax + unsigned int v4; // edx + int v5; // ecx + + *(_DWORD *)(this + 4) = 0; + *(_DWORD *)this = this + 8; + *(_WORD *)(this + 8) = 0; + v3 = a2[7]; + if ( v3 ) + { + v4 = a2[5]; + v5 = a2[6]; + if ( v3 > v4 ) + std::wstring::_M_replace((unsigned int *)this, 0, 0, (_WORD *)a2[6], (int)(v3 - v5) >> 1); + else + std::wstring::_M_replace((unsigned int *)this, 0, 0, (_WORD *)a2[6], (int)(v4 - v5) >> 1); + } + else + { + std::wstring::_M_assign(this, (int)(a2 + 11)); + } + return this; +} + +//----- (00485AF0) -------------------------------------------------------- +int __fastcall std::wistringstream::rdbuf(int a1) +{ + return a1 + 8; +} + +//----- (00485B00) -------------------------------------------------------- +int __thiscall std::ostringstream::str(int this, int a2) +{ + unsigned int v3; // eax + unsigned int v4; // edx + int v5; // ecx + + *(_BYTE *)(this + 8) = 0; + *(_DWORD *)this = this + 8; + *(_DWORD *)(this + 4) = 0; + v3 = *(_DWORD *)(a2 + 24); + if ( v3 ) + { + v4 = *(_DWORD *)(a2 + 16); + v5 = *(_DWORD *)(a2 + 20); + if ( v3 > v4 ) + std::string::_M_replace((unsigned int *)this, 0, 0, *(char **)(a2 + 20), v3 - v5); + else + std::string::_M_replace((unsigned int *)this, 0, 0, *(char **)(a2 + 20), v4 - v5); + } + else + { + std::string::_M_assign(this, a2 + 40); + } + return this; +} + +//----- (00485C20) -------------------------------------------------------- +int __fastcall std::ostringstream::rdbuf(int a1) +{ + return a1 + 4; +} + +//----- (00485C30) -------------------------------------------------------- +int __thiscall std::wostringstream::str(int this, _DWORD *a2) +{ + unsigned int v3; // eax + unsigned int v4; // edx + int v5; // ecx + + *(_DWORD *)(this + 4) = 0; + *(_DWORD *)this = this + 8; + *(_WORD *)(this + 8) = 0; + v3 = a2[6]; + if ( v3 ) + { + v4 = a2[4]; + v5 = a2[5]; + if ( v3 > v4 ) + std::wstring::_M_replace((unsigned int *)this, 0, 0, (_WORD *)a2[5], (int)(v3 - v5) >> 1); + else + std::wstring::_M_replace((unsigned int *)this, 0, 0, (_WORD *)a2[5], (int)(v4 - v5) >> 1); + } + else + { + std::wstring::_M_assign(this, (int)(a2 + 10)); + } + return this; +} + +//----- (00485D60) -------------------------------------------------------- +int __fastcall std::wostringstream::rdbuf(int a1) +{ + return a1 + 4; +} + +//----- (00485D70) -------------------------------------------------------- +int __stdcall std::collate::_M_compare(char *String1, char *String2) +{ + int v2; // eax + + v2 = strcoll(String1, String2); + return (v2 >> 30) | (v2 != 0); +} + +//----- (00485DA0) -------------------------------------------------------- +int __stdcall std::collate::do_compare(_BYTE *a1, int a2, _BYTE *a3, int a4) +{ + int i; // eax + char *v5; // eax + int v7; // [esp+8h] [ebp-90h] + int v8; // [esp+8h] [ebp-90h] + char *v9; // [esp+14h] [ebp-84h] + int v10; // [esp+1Ch] [ebp-7Ch] + char *v11; // [esp+20h] [ebp-78h] + char *v12; // [esp+24h] [ebp-74h] + char *Str; // [esp+28h] [ebp-70h] + char *Stra; // [esp+28h] [ebp-70h] + void *v15[2]; // [esp+60h] [ebp-38h] BYREF + char v16[16]; // [esp+68h] [ebp-30h] BYREF + void *Block[2]; // [esp+78h] [ebp-20h] BYREF + char v18[20]; // [esp+80h] [ebp-18h] BYREF + + LOBYTE(v7) = 0; + v15[0] = v16; + std::string::_M_construct(v15, a1, a2, v7); + Block[0] = v18; + LOBYTE(v8) = 0; + std::string::_M_construct(Block, a3, a4, v8); + Str = (char *)v15[0]; + v9 = (char *)v15[1] + (unsigned int)v15[0]; + v12 = (char *)Block[0]; + v11 = (char *)Block[1] + (unsigned int)Block[0]; + for ( i = std::collate::_M_compare((char *)v15[0], (char *)Block[0]); + ; + i = std::collate::_M_compare(Str, v5 + 1) ) + { + v10 = i; + if ( i ) + break; + Stra = &Str[strlen(Str)]; + v5 = &v12[strlen(v12)]; + if ( v9 == Stra ) + { + if ( v11 == v5 ) + break; + if ( v9 == Stra ) + { + v10 = -1; + break; + } + } + if ( v11 == v5 ) + { + v10 = 1; + break; + } + v12 = v5 + 1; + Str = Stra + 1; + } + if ( Block[0] != v18 ) + operator delete(Block[0]); + if ( v15[0] != v16 ) + operator delete(v15[0]); + return v10; +} +// 485DF5: variable 'v7' is possibly undefined +// 485E1F: variable 'v8' is possibly undefined + +//----- (00485F30) -------------------------------------------------------- +size_t __stdcall std::collate::_M_transform(char *Destination, char *Source, size_t MaxCount) +{ + return strxfrm(Destination, Source, MaxCount); +} + +//----- (00485F60) -------------------------------------------------------- +int __thiscall std::collate::do_transform(int this, int a2, _BYTE *a3, int a4) +{ + unsigned int i; // eax + char *v5; // eax + int v6; // eax + unsigned int v7; // edx + int v9; // [esp+8h] [ebp-90h] + int v10; // [esp+1Ch] [ebp-7Ch] + char *v11; // [esp+20h] [ebp-78h] + size_t v12; // [esp+24h] [ebp-74h] + unsigned int v13; // [esp+28h] [ebp-70h] + char *Block; // [esp+2Ch] [ebp-6Ch] + unsigned int v15; // [esp+30h] [ebp-68h] + char *Str; // [esp+34h] [ebp-64h] + void *v18[2]; // [esp+78h] [ebp-20h] BYREF + char v19[20]; // [esp+80h] [ebp-18h] BYREF + + *(_DWORD *)(this + 4) = 0; + *(_DWORD *)this = this + 8; + *(_BYTE *)(this + 8) = 0; + v18[0] = v19; + LOBYTE(v9) = 0; + v10 = this + 8; + std::string::_M_construct(v18, a3, a4, v9); + Str = (char *)v18[0]; + v11 = (char *)v18[1] + (unsigned int)v18[0]; + v15 = 2 * (a4 - (_DWORD)a3); + Block = (char *)operator new[](v15); + for ( i = std::collate::_M_transform(Block, Str, v15); ; i = std::collate::_M_transform(Block, Str, v15) ) + { + if ( v15 <= i ) + { + v15 = i + 1; + operator delete[](Block); + Block = (char *)operator new[](v15); + i = std::collate::_M_transform(Block, Str, v15); + } + if ( i > 0x3FFFFFFF - *(_DWORD *)(this + 4) ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append((_DWORD *)this, Block, i); + v5 = &Str[strlen(Str)]; + if ( v11 == v5 ) + break; + Str = v5 + 1; + v12 = *(_DWORD *)(this + 4); + v13 = v12 + 1; + v6 = *(_DWORD *)this; + if ( v10 == *(_DWORD *)this ) + v7 = 15; + else + v7 = *(_DWORD *)(this + 8); + if ( v13 > v7 ) + { + std::string::_M_mutate(this, v12, 0, 0, 1u); + v6 = *(_DWORD *)this; + } + *(_BYTE *)(v6 + v12) = 0; + *(_DWORD *)(this + 4) = v13; + *(_BYTE *)(*(_DWORD *)this + v12 + 1) = 0; + } + operator delete[](Block); + if ( v18[0] != v19 ) + operator delete(v18[0]); + return this; +} +// 485FCB: variable 'v9' is possibly undefined + +//----- (00486210) -------------------------------------------------------- +int __thiscall std::collate::hash(void *this, char *a2, char *a3) +{ + char *v3; // edx + int (__stdcall *v4)(char *, char *); // eax + int result; // eax + int v6; // ecx + + v3 = a2; + v4 = *(int (__stdcall **)(char *, char *))(*(_DWORD *)this + 16); + if ( v4 != std::collate::do_hash ) + return v4(a2, a3); + result = 0; + if ( a2 < a3 ) + { + do + { + v6 = *v3++; + result = v6 + __ROL4__(result, 7); + } + while ( a3 != v3 ); + } + return result; +} + +//----- (00486260) -------------------------------------------------------- +int __fastcall std::collate::compare(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 8))(a1); +} + +//----- (00486270) -------------------------------------------------------- +int __stdcall std::collate::do_hash(char *a1, char *a2) +{ + char *v2; // edx + int result; // eax + int v4; // ecx + + v2 = a1; + result = 0; + if ( a1 < a2 ) + { + do + { + v4 = *v2++; + result = v4 + __ROL4__(result, 7); + } + while ( a2 != v2 ); + } + return result; +} + +//----- (004862A0) -------------------------------------------------------- +void *__thiscall std::collate::transform(void *this, int a2, int a3, int a4) +{ + (*(void (__thiscall **)(void *, int, int, int))(*(_DWORD *)a2 + 12))(this, a2, a3, a4); + return this; +} + +//----- (004862D0) -------------------------------------------------------- +int __stdcall std::collate::_M_compare(wchar_t *String1, wchar_t *String2) +{ + int v2; // eax + + v2 = wcscoll(String1, String2); + return (v2 >> 30) | (v2 != 0); +} + +//----- (00486300) -------------------------------------------------------- +int __stdcall std::collate::do_compare(_WORD *a1, int a2, _WORD *a3, int a4) +{ + int i; // eax + wchar_t *v5; // eax + int v7; // [esp+8h] [ebp-90h] + int v8; // [esp+8h] [ebp-90h] + wchar_t *v9; // [esp+14h] [ebp-84h] + int v10; // [esp+1Ch] [ebp-7Ch] + char *v11; // [esp+20h] [ebp-78h] + wchar_t *v12; // [esp+24h] [ebp-74h] + wchar_t *String; // [esp+28h] [ebp-70h] + wchar_t *Stringa; // [esp+28h] [ebp-70h] + void *v15[2]; // [esp+60h] [ebp-38h] BYREF + char v16[16]; // [esp+68h] [ebp-30h] BYREF + void *Block[2]; // [esp+78h] [ebp-20h] BYREF + char v18[20]; // [esp+80h] [ebp-18h] BYREF + + LOBYTE(v7) = 0; + v15[0] = v16; + std::wstring::_M_construct(v15, a1, a2, v7); + Block[0] = v18; + LOBYTE(v8) = 0; + std::wstring::_M_construct(Block, a3, a4, v8); + String = (wchar_t *)v15[0]; + v9 = (wchar_t *)((char *)v15[0] + 2 * (int)v15[1]); + v12 = (wchar_t *)Block[0]; + v11 = (char *)Block[0] + 2 * (int)Block[1]; + for ( i = std::collate::_M_compare((wchar_t *)v15[0], (wchar_t *)Block[0]); + ; + i = std::collate::_M_compare(String, v5 + 1) ) + { + v10 = i; + if ( i ) + break; + Stringa = &String[wcslen(String)]; + v5 = &v12[wcslen(v12)]; + if ( v9 == Stringa ) + { + if ( v11 == (char *)v5 ) + break; + if ( v9 == Stringa ) + { + v10 = -1; + break; + } + } + if ( v11 == (char *)v5 ) + { + v10 = 1; + break; + } + v12 = v5 + 1; + String = Stringa + 1; + } + if ( Block[0] != v18 ) + operator delete(Block[0]); + if ( v15[0] != v16 ) + operator delete(v15[0]); + return v10; +} +// 486355: variable 'v7' is possibly undefined +// 48637F: variable 'v8' is possibly undefined + +//----- (004864A0) -------------------------------------------------------- +size_t __stdcall std::collate::_M_transform(wchar_t *Destination, wchar_t *Source, size_t MaxCount) +{ + return wcsxfrm(Destination, Source, MaxCount); +} + +//----- (004864D0) -------------------------------------------------------- +int __thiscall std::collate::do_transform(int this, int a2, _WORD *a3, int a4) +{ + unsigned int i; // eax + wchar_t *v5; // eax + int v6; // eax + unsigned int v7; // edx + int v9; // [esp+8h] [ebp-90h] + int v10; // [esp+1Ch] [ebp-7Ch] + char *v11; // [esp+20h] [ebp-78h] + int v12; // [esp+24h] [ebp-74h] + unsigned int v13; // [esp+28h] [ebp-70h] + wchar_t *Block; // [esp+2Ch] [ebp-6Ch] + wchar_t *String; // [esp+30h] [ebp-68h] + size_t lpuexcpt; // [esp+38h] [ebp-60h] + void *v18[2]; // [esp+78h] [ebp-20h] BYREF + char v19[20]; // [esp+80h] [ebp-18h] BYREF + + *(_DWORD *)(this + 4) = 0; + *(_DWORD *)this = this + 8; + v10 = this + 8; + *(_WORD *)(this + 8) = 0; + v18[0] = v19; + LOBYTE(v9) = 0; + std::wstring::_M_construct(v18, a3, a4, v9); + String = (wchar_t *)v18[0]; + v11 = (char *)v18[0] + 2 * (int)v18[1]; + lpuexcpt = a4 - (_DWORD)a3; + if ( (unsigned int)(a4 - (_DWORD)a3) > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + Block = (wchar_t *)operator new[](2 * (a4 - (_DWORD)a3)); + for ( i = std::collate::_M_transform(Block, String, lpuexcpt); + ; + i = std::collate::_M_transform(Block, String, lpuexcpt) ) + { + if ( lpuexcpt <= i ) + { + lpuexcpt = i + 1; + operator delete[](Block); + if ( lpuexcpt > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + Block = (wchar_t *)operator new[](2 * lpuexcpt); + i = std::collate::_M_transform(Block, String, lpuexcpt); + } + if ( i > 0x1FFFFFFF - *(_DWORD *)(this + 4) ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::wstring::_M_append((_DWORD *)this, Block, i); + v5 = &String[wcslen(String)]; + if ( v11 == (char *)v5 ) + break; + String = v5 + 1; + v12 = *(_DWORD *)(this + 4); + v13 = v12 + 1; + v6 = *(_DWORD *)this; + if ( v10 == *(_DWORD *)this ) + v7 = 7; + else + v7 = *(_DWORD *)(this + 8); + if ( v13 > v7 ) + { + std::wstring::_M_mutate(this, v12, 0, 0, 1); + v6 = *(_DWORD *)this; + } + *(_WORD *)(v6 + 2 * v12) = 0; + *(_DWORD *)(this + 4) = v13; + *(_WORD *)(v6 + 2 * v12 + 2) = 0; + } + operator delete[](Block); + if ( v18[0] != v19 ) + operator delete(v18[0]); + return this; +} +// 48653D: variable 'v9' is possibly undefined + +//----- (004867C0) -------------------------------------------------------- +int __thiscall std::collate::hash(void *this, unsigned __int16 *a2, unsigned int a3) +{ + unsigned __int16 *v3; // edx + int (__stdcall *v4)(unsigned __int16 *, unsigned int); // eax + int result; // eax + int v6; // ecx + + v3 = a2; + v4 = *(int (__stdcall **)(unsigned __int16 *, unsigned int))(*(_DWORD *)this + 16); + if ( v4 != std::collate::do_hash ) + return v4(a2, a3); + result = 0; + if ( (unsigned int)a2 < a3 ) + { + do + { + v6 = *v3++; + result = v6 + __ROL4__(result, 7); + } + while ( a3 > (unsigned int)v3 ); + } + return result; +} + +//----- (00486810) -------------------------------------------------------- +int __fastcall std::collate::compare(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 8))(a1); +} + +//----- (00486820) -------------------------------------------------------- +int __stdcall std::collate::do_hash(unsigned __int16 *a1, unsigned int a2) +{ + unsigned __int16 *v2; // edx + int result; // eax + int v4; // ecx + + v2 = a1; + for ( result = 0; a2 > (unsigned int)v2; result = v4 + __ROL4__(result, 7) ) + v4 = *v2++; + return result; +} + +//----- (00486850) -------------------------------------------------------- +void *__thiscall std::collate::transform(void *this, int a2, int a3, int a4) +{ + (*(void (__thiscall **)(void *, int, int, int))(*(_DWORD *)a2 + 12))(this, a2, a3, a4); + return this; +} + +//----- (00486880) -------------------------------------------------------- +int __stdcall std::messages::_M_convert_to_char(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00486890) -------------------------------------------------------- +_DWORD *__thiscall std::messages::_M_convert_from_char(_DWORD *this, int a2, int a3) +{ + _DWORD *result; // eax + + this[1] = 0; + result = this; + *this = this + 2; + *((_BYTE *)this + 8) = 0; + return result; +} + +//----- (004868B0) -------------------------------------------------------- +void *__thiscall std::messages::get(void *this, int a2, int a3, int a4, int a5, int a6) +{ + (*(void (__thiscall **)(void *, int, int, int, int, int))(*(_DWORD *)a2 + 12))(this, a2, a3, a4, a5, a6); + return this; +} + +//----- (004868F0) -------------------------------------------------------- +int __thiscall std::messages::open(void *this, int a2, int a3) +{ + int (__stdcall *v3)(int, int); // eax + + v3 = *(int (__stdcall **)(int, int))(*(_DWORD *)this + 8); + if ( v3 == std::messages::do_open ) + return 0; + else + return v3(a2, a3); +} + +//----- (00486910) -------------------------------------------------------- +int __thiscall std::messages::open(void *this, int a2, int a3, int a4) +{ + int (__stdcall *v4)(int, int); // edx + + v4 = *(int (__stdcall **)(int, int))(*(_DWORD *)this + 8); + if ( v4 == std::messages::do_open ) + return 0; + else + return v4(a2, a3); +} + +//----- (00486950) -------------------------------------------------------- +int (__stdcall *__thiscall std::messages::close(void *this, int a2))(int) +{ + int (__stdcall *result)(int); // eax + + result = *(int (__stdcall **)(int))(*(_DWORD *)this + 16); + if ( result != std::messages::do_close ) + return (int (__stdcall *)(int))result(a2); + return result; +} +// 486A30: using guessed type int __stdcall std::messages::do_close(int); + +//----- (00486970) -------------------------------------------------------- +_DWORD *__thiscall std::messages::do_get(_DWORD *this, int a2, int a3, int a4, int a5, int a6) +{ + void *v6; // eax + _BYTE *Src; // edi + size_t Size; // esi + size_t v11[4]; // [esp+1Ch] [ebp-10h] BYREF + + v6 = this + 2; + *this = this + 2; + Src = *(_BYTE **)a6; + Size = *(_DWORD *)(a6 + 4); + if ( Size + *(_DWORD *)a6 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v11[0] = *(_DWORD *)(a6 + 4); + if ( Size > 0xF ) + { + v6 = std::string::_M_create(v11, 0); + *this = v6; + this[2] = v11[0]; + goto LABEL_10; + } + if ( Size != 1 ) + { + if ( !Size ) + goto LABEL_6; +LABEL_10: + memcpy(v6, Src, Size); + Size = v11[0]; + v6 = (void *)*this; + goto LABEL_6; + } + *((_BYTE *)this + 8) = *Src; +LABEL_6: + this[1] = Size; + *((_BYTE *)v6 + Size) = 0; + return this; +} +// 486970: using guessed type size_t var_10[4]; + +//----- (00486A20) -------------------------------------------------------- +int __stdcall std::messages::do_open(int a1, int a2) +{ + return 0; +} + +//----- (00486A40) -------------------------------------------------------- +int __stdcall std::messages::_M_convert_to_char(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (00486A50) -------------------------------------------------------- +_DWORD *__thiscall std::messages::_M_convert_from_char(_DWORD *this, int a2, int a3) +{ + _DWORD *result; // eax + + this[1] = 0; + result = this; + *this = this + 2; + *((_WORD *)this + 4) = 0; + return result; +} + +//----- (00486A70) -------------------------------------------------------- +void *__thiscall std::messages::get(void *this, int a2, int a3, int a4, int a5, int a6) +{ + (*(void (__thiscall **)(void *, int, int, int, int, int))(*(_DWORD *)a2 + 12))(this, a2, a3, a4, a5, a6); + return this; +} + +//----- (00486AB0) -------------------------------------------------------- +int __thiscall std::messages::open(void *this, int a2, int a3) +{ + int (__stdcall *v3)(int, int); // eax + + v3 = *(int (__stdcall **)(int, int))(*(_DWORD *)this + 8); + if ( v3 == std::messages::do_open ) + return 0; + else + return v3(a2, a3); +} + +//----- (00486AD0) -------------------------------------------------------- +int __thiscall std::messages::open(void *this, int a2, int a3, int a4) +{ + int (__stdcall *v4)(int, int); // edx + + v4 = *(int (__stdcall **)(int, int))(*(_DWORD *)this + 8); + if ( v4 == std::messages::do_open ) + return 0; + else + return v4(a2, a3); +} + +//----- (00486B10) -------------------------------------------------------- +int (__stdcall *__thiscall std::messages::close(void *this, int a2))(int) +{ + int (__stdcall *result)(int); // eax + + result = *(int (__stdcall **)(int))(*(_DWORD *)this + 16); + if ( result != std::messages::do_close ) + return (int (__stdcall *)(int))result(a2); + return result; +} +// 486C00: using guessed type int __stdcall std::messages::do_close(int); + +//----- (00486B30) -------------------------------------------------------- +_DWORD *__thiscall std::messages::do_get(_DWORD *this, int a2, int a3, int a4, int a5, int a6) +{ + _WORD *v6; // eax + _WORD *Src; // ebp + signed int Size; // esi + int v10; // edi + unsigned int v11; // edx + unsigned int v13[8]; // [esp+1Ch] [ebp-20h] BYREF + + v6 = this + 2; + *this = this + 2; + Src = *(_WORD **)a6; + Size = 2 * *(_DWORD *)(a6 + 4); + if ( Size + *(_DWORD *)a6 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v10 = Size >> 1; + v13[0] = Size >> 1; + if ( (unsigned int)Size > 0xE ) + { + v6 = std::wstring::_M_create(v13, 0); + *this = v6; + this[2] = v13[0]; + } + if ( v10 == 1 ) + { + *v6 = *Src; + } + else if ( v10 ) + { + memcpy(v6, Src, Size); + v6 = (_WORD *)*this; + } + v11 = v13[0]; + this[1] = v13[0]; + v6[v11] = 0; + return this; +} +// 486B30: using guessed type unsigned int var_20[8]; + +//----- (00486BF0) -------------------------------------------------------- +int __stdcall std::messages::do_open(int a1, int a2) +{ + return 0; +} + +//----- (00486C10) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::do_grouping(_DWORD *this, int a2) +{ + void *v2; // ebp + const char *Str; // edi + size_t v5; // eax + size_t Size; // esi + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 8); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 486C10: using guessed type size_t var_20[8]; + +//----- (00486CC0) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::do_truename(_DWORD *this, int a2) +{ + void *v2; // ebp + const char *Str; // edi + size_t v5; // eax + size_t Size; // esi + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 20); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 486CC0: using guessed type size_t var_20[8]; + +//----- (00486D70) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::do_falsename(_DWORD *this, int a2) +{ + void *v2; // ebp + const char *Str; // edi + size_t v5; // eax + size_t Size; // esi + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 28); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 486D70: using guessed type size_t var_20[8]; + +//----- (00486E20) -------------------------------------------------------- +int __fastcall std::numpunct::decimal_point(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 8); + if ( (char *)v1 == (char *)std::numpunct::do_decimal_point ) + return *(unsigned __int8 *)(a1[2] + 36); + else + return v1(); +} + +//----- (00486E40) -------------------------------------------------------- +int __fastcall std::numpunct::thousands_sep(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 12); + if ( (char *)v1 == (char *)std::numpunct::do_thousands_sep ) + return *(unsigned __int8 *)(a1[2] + 37); + else + return v1(); +} + +//----- (00486E60) -------------------------------------------------------- +int __fastcall std::numpunct::do_decimal_point(int a1) +{ + return *(unsigned __int8 *)(*(_DWORD *)(a1 + 8) + 36); +} + +//----- (00486E70) -------------------------------------------------------- +int __fastcall std::numpunct::do_thousands_sep(int a1) +{ + return *(unsigned __int8 *)(*(_DWORD *)(a1 + 8) + 37); +} + +//----- (00486E80) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::grouping(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 16); + if ( (char *)v3 == (char *)std::numpunct::do_grouping ) + { + Str = *(char **)(a2[2] + 8); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + LOBYTE(v7) = 0; + std::string::_M_construct(this, Str, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 486EC4: variable 'v7' is possibly undefined + +//----- (00486F00) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::truename(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 20); + if ( (char *)v3 == (char *)std::numpunct::do_truename ) + { + Str = *(char **)(a2[2] + 20); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + LOBYTE(v7) = 0; + std::string::_M_construct(this, Str, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 486F44: variable 'v7' is possibly undefined + +//----- (00486F80) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::falsename(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 24); + if ( (char *)v3 == (char *)std::numpunct::do_falsename ) + { + Str = *(char **)(a2[2] + 28); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + LOBYTE(v7) = 0; + std::string::_M_construct(this, Str, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 486FC4: variable 'v7' is possibly undefined + +//----- (00487000) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::do_grouping(_DWORD *this, int a2) +{ + void *v2; // esi + const char *Str; // edi + size_t v5; // eax + size_t Size; // ebp + void *v8; // eax + size_t v9[8]; // [esp+1Ch] [ebp-20h] BYREF + + v2 = this + 2; + Str = *(const char **)(*(_DWORD *)(a2 + 8) + 8); + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v5 = strlen(Str); + v9[0] = v5; + Size = v5; + if ( v5 > 0xF ) + { + v8 = std::string::_M_create(v9, 0); + *this = v8; + v2 = v8; + this[2] = v9[0]; + goto LABEL_9; + } + if ( v5 != 1 ) + { + if ( !v5 ) + goto LABEL_5; +LABEL_9: + memcpy(v2, Str, Size); + v5 = v9[0]; + v2 = (void *)*this; + goto LABEL_5; + } + *((_BYTE *)this + 8) = *Str; +LABEL_5: + this[1] = v5; + *((_BYTE *)v2 + v5) = 0; + return this; +} +// 487000: using guessed type size_t var_20[8]; + +//----- (004870B0) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::do_truename(_DWORD *this, int a2) +{ + wchar_t *String; // esi + int v4; // eax + int v6; // [esp+8h] [ebp-14h] + + String = *(wchar_t **)(*(_DWORD *)(a2 + 8) + 20); + *this = this + 2; + v4 = -2; + if ( String ) + v4 = (int)&String[wcslen(String)]; + LOBYTE(v6) = 0; + std::wstring::_M_construct(this, String, v4, v6); + return this; +} +// 4870E8: variable 'v6' is possibly undefined + +//----- (00487100) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::do_falsename(_DWORD *this, int a2) +{ + wchar_t *String; // esi + int v4; // eax + int v6; // [esp+8h] [ebp-14h] + + String = *(wchar_t **)(*(_DWORD *)(a2 + 8) + 28); + *this = this + 2; + v4 = -2; + if ( String ) + v4 = (int)&String[wcslen(String)]; + LOBYTE(v6) = 0; + std::wstring::_M_construct(this, String, v4, v6); + return this; +} +// 487138: variable 'v6' is possibly undefined + +//----- (00487150) -------------------------------------------------------- +int __fastcall std::numpunct::decimal_point(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 8); + if ( (char *)v1 == (char *)std::numpunct::do_decimal_point ) + return *(unsigned __int16 *)(a1[2] + 36); + else + return v1(); +} + +//----- (00487170) -------------------------------------------------------- +int __fastcall std::numpunct::thousands_sep(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 12); + if ( (char *)v1 == (char *)std::numpunct::do_thousands_sep ) + return *(unsigned __int16 *)(a1[2] + 38); + else + return v1(); +} + +//----- (00487190) -------------------------------------------------------- +int __fastcall std::numpunct::do_decimal_point(int a1) +{ + return *(unsigned __int16 *)(*(_DWORD *)(a1 + 8) + 36); +} + +//----- (004871A0) -------------------------------------------------------- +int __fastcall std::numpunct::do_thousands_sep(int a1) +{ + return *(unsigned __int16 *)(*(_DWORD *)(a1 + 8) + 38); +} + +//----- (004871B0) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::grouping(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + char *Str; // esi + int v5; // eax + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 16); + if ( (char *)v3 == (char *)std::numpunct::do_grouping ) + { + Str = *(char **)(a2[2] + 8); + *this = this + 2; + v5 = -1; + if ( Str ) + v5 = (int)&Str[strlen(Str)]; + std::string::_M_construct(this, Str, v5); + return this; + } + else + { + v3(a2); + return this; + } +} + +//----- (00487220) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::truename(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + wchar_t *String; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 20); + if ( (char *)v3 == (char *)std::numpunct::do_truename ) + { + String = *(wchar_t **)(a2[2] + 20); + *this = this + 2; + v5 = -2; + if ( String ) + v5 = (int)&String[wcslen(String)]; + LOBYTE(v7) = 0; + std::wstring::_M_construct(this, String, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 487265: variable 'v7' is possibly undefined + +//----- (004872A0) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::falsename(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + wchar_t *String; // esi + int v5; // eax + int v7; // [esp+8h] [ebp-14h] + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 24); + if ( (char *)v3 == (char *)std::numpunct::do_falsename ) + { + String = *(wchar_t **)(a2[2] + 28); + *this = this + 2; + v5 = -2; + if ( String ) + v5 = (int)&String[wcslen(String)]; + LOBYTE(v7) = 0; + std::wstring::_M_construct(this, String, v5, v7); + return this; + } + else + { + v3(a2); + return this; + } +} +// 4872E5: variable 'v7' is possibly undefined + +//----- (00487320) -------------------------------------------------------- +int __fastcall std::time_get>::date_order(int a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*(_DWORD *)a1 + 8); + if ( v1 == std::time_get>::do_date_order ) + return 0; + else + return v1(); +} + +//----- (00487340) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_date( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + _DWORD *v7; // eax + _DWORD *v8; // esi + int v9; // edx + char v10; // dl + char v11; // al + int v13; // eax + int v14; // eax + char v15; // [esp+28h] [ebp-24h] + char v16; // [esp+28h] [ebp-24h] + + v7 = std::use_facet>(a5 + 108); + v8 = std::time_get>::_M_extract_via_format( + a1, + a2, + a3, + a4, + a5, + a6, + a7, + *(char **)(v7[2] + 8)); + v10 = v9 == -1; + v15 = v10 & (v8 != 0); + if ( v15 ) + { + v10 = 0; + if ( v8[2] >= v8[3] ) + { + v14 = (*(int (__fastcall **)(_DWORD *))(*v8 + 36))(v8); + v10 = 0; + if ( v14 == -1 ) + v10 = v15; + if ( v14 == -1 ) + v8 = 0; + } + } + v11 = a4 == -1; + if ( a3 ) + { + if ( a4 == -1 ) + { + v11 = 0; + if ( a3[2] >= a3[3] ) + { + v16 = v10; + v13 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v10 = v16; + v11 = v13 == -1; + } + } + } + if ( v10 == v11 ) + *a6 |= 2u; + return v8; +} +// 4873A9: variable 'v9' is possibly undefined + +//----- (00487450) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_time( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + _DWORD *v7; // eax + _DWORD *v8; // esi + int v9; // edx + char v10; // dl + char v11; // al + int v13; // eax + int v14; // eax + char v15; // [esp+28h] [ebp-24h] + char v16; // [esp+28h] [ebp-24h] + + v7 = std::use_facet>(a5 + 108); + v8 = std::time_get>::_M_extract_via_format( + a1, + a2, + a3, + a4, + a5, + a6, + a7, + *(char **)(v7[2] + 16)); + v10 = v9 == -1; + v15 = v10 & (v8 != 0); + if ( v15 ) + { + v10 = 0; + if ( v8[2] >= v8[3] ) + { + v14 = (*(int (__fastcall **)(_DWORD *))(*v8 + 36))(v8); + v10 = 0; + if ( v14 == -1 ) + v10 = v15; + if ( v14 == -1 ) + v8 = 0; + } + } + v11 = a4 == -1; + if ( a3 ) + { + if ( a4 == -1 ) + { + v11 = 0; + if ( a3[2] >= a3[3] ) + { + v16 = v10; + v13 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v10 = v16; + v11 = v13 == -1; + } + } + } + if ( v10 == v11 ) + *a6 |= 2u; + return v8; +} +// 4874B9: variable 'v9' is possibly undefined + +//----- (00487560) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_year( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int a7) +{ + int v7; // edx + _DWORD *v8; // ebx + int v9; // eax + char v10; // si + char v11; // al + int v13; // eax + bool v14; // zf + _DWORD *v15; // eax + _DWORD *v16; // [esp+34h] [ebp-38h] + char v17; // [esp+38h] [ebp-34h] + int v18; // [esp+48h] [ebp-24h] BYREF + int v19[8]; // [esp+4Ch] [ebp-20h] BYREF + + v19[0] = 0; + v8 = std::time_get>::_M_extract_num(a1, a2, a3, a4, &v18, 0, 9999, 4u, a5, v19); + v16 = v8; + if ( v19[0] ) + { + *a6 |= 4u; + } + else + { + v9 = v18 - 1900; + if ( v18 < 0 ) + v9 = v18 + 100; + *(_DWORD *)(a7 + 20) = v9; + } + v10 = v7 == -1; + v17 = (v8 != 0) & v10; + if ( v17 ) + { + v10 = 0; + if ( v8[2] >= v8[3] ) + { + v13 = (*(int (__fastcall **)(_DWORD *))(*v8 + 36))(v8); + v14 = v13 == -1; + if ( v13 == -1 ) + v10 = v17; + v15 = 0; + if ( !v14 ) + v15 = v8; + v16 = v15; + } + } + v11 = a4 == -1; + if ( a3 ) + { + if ( a4 == -1 ) + { + v11 = 0; + if ( a3[2] >= a3[3] ) + v11 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + } + } + if ( v10 == v11 ) + *a6 |= 2u; + return v16; +} +// 4875F3: variable 'v7' is possibly undefined +// 487560: using guessed type int var_20[8]; + +//----- (004876B0) -------------------------------------------------------- +int __fastcall std::time_get>::get_weekday(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 20))(a1); +} + +//----- (004876C0) -------------------------------------------------------- +int std::time_get>::do_date_order() +{ + return 0; +} + +//----- (004876D0) -------------------------------------------------------- +int __fastcall std::time_get>::get_monthname(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 24))(a1); +} + +//----- (004876E0) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::_M_extract_num( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int *a5, + signed int a6, + int a7, + unsigned int a8, + int a9, + _DWORD *a10) +{ + unsigned int v10; // ebp + int v12; // eax + int v13; // edi + char v14; // al + unsigned __int8 v15; // al + unsigned int v16; // eax + bool v17; // dl + char v18; // bl + int v19; // ebx + char v20; // dl + int (__stdcall *v21)(unsigned __int8, int); // eax + int v23; // eax + char *v24; // eax + int v25; // eax + int v26; // eax + unsigned int v28; // [esp+20h] [ebp-2Ch] + _BYTE *v29; // [esp+24h] [ebp-28h] + bool v31; // [esp+2Fh] [ebp-1Dh] + + v10 = 10; + v29 = std::use_facet>(a9 + 108); + if ( a8 != 2 ) + { + v12 = 1; + if ( a8 == 4 ) + v12 = 1000; + v10 = v12; + } + v28 = 0; + v13 = 0; + while ( 1 ) + { + v17 = a2 == -1; + v18 = v17 && a1 != 0; + if ( v18 ) + { + if ( a1[2] >= a1[3] ) + { + v25 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v17 = a2 == -1; + if ( v25 != -1 ) + v18 = 0; + if ( v25 == -1 ) + a1 = 0; + } + else + { + v18 = 0; + } + } + else + { + v18 = a2 == -1; + } + if ( a3 && a4 == -1 ) + { + if ( a3[2] >= a3[3] ) + { + v31 = v17; + v23 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v17 = v31; + if ( v23 == -1 ) + { + a3 = 0; + v18 ^= 1u; + } + } + } + else + { + v18 ^= a4 == -1; + } + if ( v28 >= a8 || !v18 ) + break; + if ( a1 && v17 ) + { + v24 = (char *)a1[2]; + if ( (unsigned int)v24 >= a1[3] ) + { + v26 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + if ( v26 == -1 ) + { + v20 = -1; + v19 = 255; + a1 = 0; + } + else + { + v19 = (unsigned __int8)v26; + v20 = v26; + } + } + else + { + v19 = (unsigned __int8)*v24; + v20 = *v24; + } + } + else + { + v19 = (unsigned __int8)a2; + v20 = a2; + } + v14 = v29[v19 + 285]; + if ( !v14 ) + { + v21 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v29 + 32); + if ( v21 != std::ctype::do_narrow ) + v20 = v21(v20, 42); + if ( v20 == 42 ) + goto LABEL_27; + v29[v19 + 285] = v20; + v14 = v20; + } + v15 = v14 - 48; + if ( v15 > 9u ) + goto LABEL_27; + v13 = (char)v15 + 10 * v13; + if ( (int)(v13 * v10) > a7 || (int)(v10 + v13 * v10) <= a6 ) + goto LABEL_27; + v16 = a1[2]; + v10 /= 0xAu; + if ( v16 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v16 + 1; + ++v28; + a2 = -1; + } + if ( v28 == a8 ) + { +LABEL_30: + *a5 = v13; + return a1; + } +LABEL_27: + if ( a8 == 4 && v28 == 2 ) + { + v13 -= 100; + goto LABEL_30; + } + *a10 |= 4u; + return a1; +} + +//----- (004879A0) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_weekday( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int a7) +{ + _DWORD *v7; // eax + int v8; // edx + int v9; // eax + int v10; // edx + _DWORD *v11; // ecx + _DWORD *v12; // ebp + char v13; // dl + char v14; // al + int v16; // eax + int v17; // eax + char v18; // [esp+34h] [ebp-68h] + char v19; // [esp+34h] [ebp-68h] + _DWORD *v20; // [esp+38h] [ebp-64h] + unsigned int v21; // [esp+40h] [ebp-5Ch] BYREF + int v22; // [esp+44h] [ebp-58h] BYREF + int v23[21]; // [esp+48h] [ebp-54h] BYREF + + v22 = 0; + v7 = (_DWORD *)*((_DWORD *)std::use_facet>(a5 + 108) + 2); + v23[0] = v7[18]; + v23[1] = v7[19]; + v23[2] = v7[20]; + v23[3] = v7[21]; + v23[4] = v7[22]; + v23[5] = v7[23]; + v23[6] = v7[24]; + v23[7] = v7[11]; + v23[8] = v7[12]; + v23[9] = v7[13]; + v23[10] = v7[14]; + v23[11] = v7[15]; + v8 = v7[16]; + v9 = v7[17]; + v23[12] = v8; + v23[13] = v9; + v11 = std::time_get>::_M_extract_wday_or_month( + a1, + a2, + a3, + a4, + &v21, + (int)v23, + 7u, + a5, + &v22); + v12 = v11; + if ( v22 ) + *a6 |= 4u; + else + *(_DWORD *)(a7 + 24) = v21; + v13 = v10 == -1; + v18 = v13 & (v11 != 0); + if ( v18 ) + { + v13 = 0; + if ( v11[2] >= v11[3] ) + { + v12 = 0; + v20 = v11; + v17 = (*(int (**)(void))(*v11 + 36))(); + v13 = 0; + if ( v17 != -1 ) + v12 = v20; + if ( v17 == -1 ) + v13 = v18; + } + } + v14 = a4 == -1; + if ( a3 ) + { + if ( a4 == -1 ) + { + v14 = 0; + if ( a3[2] >= a3[3] ) + { + v19 = v13; + v16 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v13 = v19; + v14 = v16 == -1; + } + } + } + if ( v13 == v14 ) + *a6 |= 2u; + return v12; +} +// 487AAF: variable 'v10' is possibly undefined + +//----- (00487B60) -------------------------------------------------------- +unsigned __int64 __stdcall std::time_get>::_M_extract_name( + unsigned __int64 a1, + _DWORD *a2, + int a3, + _DWORD *a4, + int a5, + int a6, + int a7, + _DWORD *a8) +{ + int v8; // eax + void *v9; // esp + void *v10; // esp + unsigned __int8 v11; // dl + unsigned __int8 v12; // bl + int v14; // edx + int v15; // esi + unsigned int v16; // ebx + int v17; // edi + char v18; // al + int v19; // ecx + int *v20; // edi + size_t v21; // eax + unsigned int v22; // esi + unsigned int v23; // ebx + size_t v24; // eax + unsigned int v25; // eax + char v26; // si + unsigned __int8 v27; // dl + int *v28; // ecx + unsigned int v29; // eax + unsigned int i; // esi + unsigned int v31; // eax + int v32; // eax + const char *v33; // edi + const char *v34; // esi + size_t v35; // eax + unsigned int v36; // ebx + unsigned __int8 v37; // dl + char v38; // dl + char v39; // di + _BYTE *v40; // eax + char v41; // di + int v42; // eax + bool v43; // zf + int v44; // eax + int v45; // eax + bool v46; // zf + _DWORD *v47; // eax + int v48; // eax + _BYTE *v49; // eax + int v50; // eax + int v51; // eax + bool v52; // zf + _DWORD *v53; // eax + int v54; // eax + int v55; // eax + bool v56; // zf + int v57; // eax + int v58; // eax + bool v59; // zf + char v60; // dl + char v61; // al + int v62; // eax + int v63; // eax + int v64; // eax + int v65; // eax + int v66; // eax + bool v67; // zf + _DWORD *v68; // eax + int v69; // [esp+10h] [ebp-38h] BYREF + void *v70; // [esp+14h] [ebp-34h] + _DWORD *v71; // [esp+18h] [ebp-30h] + int v72; // [esp+1Ch] [ebp-2Ch] + unsigned __int8 v73; // [esp+22h] [ebp-26h] + unsigned __int8 v74; // [esp+23h] [ebp-25h] + unsigned __int64 v75; // [esp+24h] [ebp-24h] + const char *v76; // [esp+2Ch] [ebp-1Ch] + + v72 = HIDWORD(a1); + v75 = a1; + v71 = a2; + v70 = std::use_facet>(a7 + 108); + v8 = 16 * ((unsigned int)(4 * a6 + 27) >> 4); + v9 = alloca(v8); + v10 = alloca(v8); + LOBYTE(v76) = HIDWORD(a1) == -1; + if ( ((unsigned __int8)v76 & ((_DWORD)a1 != 0)) != 0 ) + { + if ( *(_DWORD *)(v75 + 8) >= *(_DWORD *)(v75 + 12) ) + { + v54 = *(_DWORD *)v75; + v74 = (unsigned __int8)v76 & ((_DWORD)a1 != 0); + v55 = (*(int (__fastcall **)(_DWORD))(v54 + 36))(v75); + v11 = v74; + v56 = v55 == -1; + if ( v55 != -1 ) + v11 = 0; + v57 = 0; + if ( !v56 ) + v57 = v75; + LODWORD(v75) = v57; + } + else + { + v11 = 0; + } + } + else + { + v11 = (unsigned __int8)v76; + } + v74 = a3 == -1; + v12 = v74 & (a2 != 0); + if ( v12 ) + { + if ( a2[2] >= a2[3] ) + { + v50 = *a2; + v73 = v11; + v51 = (*(int (__fastcall **)(_DWORD *))(v50 + 36))(a2); + v11 = v73; + v52 = v51 == -1; + if ( v51 != -1 ) + v12 = 0; + v53 = 0; + if ( !v52 ) + v53 = a2; + v71 = v53; + } + else + { + v12 = 0; + } + } + else + { + v12 = v74; + } + if ( v12 == v11 ) + goto LABEL_6; + if ( (_DWORD)v75 && (_BYTE)v76 ) + { + v49 = *(_BYTE **)(v75 + 8); + if ( (unsigned int)v49 >= *(_DWORD *)(v75 + 12) ) + { + v58 = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)v75 + 36))(v75); + v59 = v58 == -1; + v60 = v58; + v61 = -1; + if ( !v59 ) + v61 = v60; + LOBYTE(v76) = v61; + v62 = 0; + if ( !v59 ) + v62 = v75; + LODWORD(v75) = v62; + } + else + { + LOBYTE(v76) = *v49; + } + } + else + { + LOBYTE(v76) = v72; + } + if ( !a6 ) + { +LABEL_6: + *a8 |= 4u; + return v75; + } + v72 = (int)&v69; + v14 = a5; + v15 = 0; + v16 = 0; + v17 = (int)v70; + do + { + while ( 1 ) + { + v19 = **(char **)(v14 + 4 * v15); + if ( (_BYTE)v19 == (_BYTE)v76 ) + break; + a5 = v14; + v18 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v17 + 8))(v17, v19); + v14 = a5; + if ( v18 == (_BYTE)v76 ) + break; + if ( a6 == ++v15 ) + goto LABEL_17; + } + *(_DWORD *)(v72 + 4 * v16++) = v15++; + } + while ( a6 != v15 ); +LABEL_17: + v76 = 0; + v20 = (int *)v72; + if ( v16 <= 1 ) + goto LABEL_39; + do + { + v72 = *v20; + v21 = strlen(*(const char **)(a5 + 4 * v72)); + HIDWORD(v75) = v16; + v22 = v21; + v23 = 1; + do + { + v24 = strlen(*(const char **)(a5 + 4 * v20[v23])); + if ( v22 > v24 ) + v22 = v24; + ++v23; + } + while ( v23 < HIDWORD(v75) ); + v16 = HIDWORD(v75); + v25 = *(_DWORD *)(v75 + 8); + if ( v25 >= *(_DWORD *)(v75 + 12) ) + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)v75 + 40))(v75); + else + *(_DWORD *)(v75 + 8) = v25 + 1; + if ( (unsigned int)++v76 >= v22 ) + goto LABEL_57; + v26 = 0; + if ( *(_DWORD *)(v75 + 8) >= *(_DWORD *)(v75 + 12) ) + { + v26 = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)v75 + 36))(v75) == -1; + v48 = 0; + if ( !v26 ) + v48 = v75; + LODWORD(v75) = v48; + } + if ( (v74 & (v71 != 0)) != 0 ) + { + if ( v71[2] < v71[3] ) + { + if ( !v26 ) + goto LABEL_57; + goto LABEL_29; + } + v44 = *v71; + BYTE4(v75) = v74 & (v71 != 0); + v45 = (*(int (__fastcall **)(_DWORD *))(v44 + 36))(v71); + v27 = BYTE4(v75); + v46 = v45 == -1; + if ( v45 != -1 ) + v27 = 0; + v47 = 0; + if ( !v46 ) + v47 = v71; + v71 = v47; + } + else + { + v27 = v74; + } + if ( v26 == v27 ) + goto LABEL_57; +LABEL_29: + v28 = (int *)v75; + v29 = v72; + for ( i = 0; ; v29 = v20[i] ) + { + v14 = (unsigned __int8)v76[*(_DWORD *)(a5 + 4 * v29)]; + LOBYTE(v29) = -1; + if ( v28 ) + { + v29 = v28[2]; + if ( v29 >= v28[3] ) + { + v42 = *v28; + LOBYTE(v75) = v14; + HIDWORD(v75) = v28; + v29 = (*(int (**)(void))(v42 + 36))(); + v43 = v29 == -1; + if ( v29 == -1 ) + LOBYTE(v29) = -1; + v28 = (int *)HIDWORD(v75); + if ( v43 ) + v28 = 0; + v14 = (unsigned __int8)v75; + } + else + { + LOBYTE(v29) = *(_BYTE *)v29; + } + } + if ( (_BYTE)v14 == (_BYTE)v29 ) + break; + v20[i] = v20[--v16]; + if ( v16 <= i ) + goto LABEL_37; +LABEL_31: + ; + } + if ( v16 > ++i ) + goto LABEL_31; +LABEL_37: + LODWORD(v75) = v28; + } + while ( v16 > 1 ); + HIDWORD(v75) = -1; +LABEL_39: + if ( v16 != 1 ) + goto LABEL_6; + v31 = *(_DWORD *)(v75 + 8); + if ( v31 >= *(_DWORD *)(v75 + 12) ) + (*(void (__fastcall **)(_DWORD, int))(*(_DWORD *)v75 + 40))(v75, v14); + else + *(_DWORD *)(v75 + 8) = v31 + 1; + v32 = *v20; + v33 = *(const char **)(a5 + 4 * *v20); + v72 = v32; + v34 = v76 + 1; + v35 = strlen(v33); + HIDWORD(v75) = v35; + if ( (unsigned int)(v76 + 1) < v35 ) + { + v76 = v33; + v36 = v75; + while ( 1 ) + { + v41 = 0; + if ( *(_DWORD *)(v36 + 8) >= *(_DWORD *)(v36 + 12) ) + { + v41 = (*(int (__fastcall **)(unsigned int))(*(_DWORD *)v36 + 36))(v36) == -1; + if ( v41 ) + v36 = 0; + } + if ( (v74 & (v71 != 0)) != 0 ) + { + if ( v71[2] >= v71[3] ) + { + v65 = *v71; + LOBYTE(v75) = v74 & (v71 != 0); + v66 = (*(int (__fastcall **)(_DWORD *))(v65 + 36))(v71); + v37 = v75; + v67 = v66 == -1; + if ( v66 != -1 ) + v37 = 0; + v68 = 0; + if ( !v67 ) + v68 = v71; + v71 = v68; + } + else + { + v37 = 0; + } + } + else + { + v37 = v74; + } + if ( v41 == v37 ) + { +LABEL_95: + v75 = v36 | 0xFFFFFFFF00000000LL; + goto LABEL_6; + } + v38 = -1; + v39 = v34[(_DWORD)v76]; + if ( v36 ) + { + v40 = *(_BYTE **)(v36 + 8); + if ( (unsigned int)v40 < *(_DWORD *)(v36 + 12) ) + { + if ( v39 != *v40 ) + goto LABEL_95; + goto LABEL_49; + } + v63 = *(_DWORD *)v36; + LOBYTE(v75) = -1; + v64 = (*(int (__fastcall **)(unsigned int))(v63 + 36))(v36); + v38 = v75; + if ( v64 != -1 ) + v38 = v64; + if ( v64 == -1 ) + v36 = 0; + } + if ( v39 != v38 ) + goto LABEL_95; + v40 = *(_BYTE **)(v36 + 8); + if ( (unsigned int)v40 >= *(_DWORD *)(v36 + 12) ) + { + (*(void (__fastcall **)(unsigned int))(*(_DWORD *)v36 + 40))(v36); + goto LABEL_50; + } +LABEL_49: + *(_DWORD *)(v36 + 8) = v40 + 1; +LABEL_50: + if ( ++v34 == (const char *)HIDWORD(v75) ) + { + LODWORD(v75) = v36; + goto LABEL_98; + } + } + } + if ( v34 != (const char *)v35 ) + { +LABEL_57: + HIDWORD(v75) = -1; + goto LABEL_6; + } +LABEL_98: + HIDWORD(v75) = -1; + *a4 = v72; + return v75; +} + +//----- (00488090) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_monthname( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int a7) +{ + _DWORD *v7; // eax + int v8; // edx + int v9; // edx + int v10; // edx + _DWORD *v11; // ecx + _DWORD *v12; // ebp + char v13; // dl + char v14; // al + int v16; // eax + int v17; // eax + char v18; // [esp+34h] [ebp-98h] + char v19; // [esp+34h] [ebp-98h] + _DWORD *v20; // [esp+38h] [ebp-94h] + unsigned int v21; // [esp+48h] [ebp-84h] BYREF + int v22; // [esp+4Ch] [ebp-80h] BYREF + int v23[31]; // [esp+50h] [ebp-7Ch] BYREF + + v7 = (_DWORD *)*((_DWORD *)std::use_facet>(a5 + 108) + 2); + v23[0] = v7[37]; + v23[1] = v7[38]; + v23[2] = v7[39]; + v23[3] = v7[40]; + v23[4] = v7[41]; + v23[5] = v7[42]; + v23[6] = v7[43]; + v23[7] = v7[44]; + v23[8] = v7[45]; + v23[9] = v7[46]; + v23[10] = v7[47]; + v23[11] = v7[48]; + v23[12] = v7[25]; + v23[13] = v7[26]; + v23[14] = v7[27]; + v23[15] = v7[28]; + v8 = v7[29]; + v22 = 0; + v23[16] = v8; + v23[17] = v7[30]; + v23[18] = v7[31]; + v23[19] = v7[32]; + v23[20] = v7[33]; + v23[21] = v7[34]; + v9 = v7[35]; + v23[23] = v7[36]; + v23[22] = v9; + v11 = std::time_get>::_M_extract_wday_or_month( + a1, + a2, + a3, + a4, + &v21, + (int)v23, + 0xCu, + a5, + &v22); + v12 = v11; + if ( v22 ) + *a6 |= 4u; + else + *(_DWORD *)(a7 + 16) = v21; + v13 = v10 == -1; + v18 = v13 & (v11 != 0); + if ( v18 ) + { + v13 = 0; + if ( v11[2] >= v11[3] ) + { + v12 = 0; + v20 = v11; + v17 = (*(int (**)(void))(*v11 + 36))(); + v13 = 0; + if ( v17 != -1 ) + v12 = v20; + if ( v17 == -1 ) + v13 = v18; + } + } + v14 = a4 == -1; + if ( a3 ) + { + if ( a4 == -1 ) + { + v14 = 0; + if ( a3[2] >= a3[3] ) + { + v19 = v13; + v16 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v13 = v19; + v14 = v16 == -1; + } + } + } + if ( v13 == v14 ) + *a6 |= 2u; + return v12; +} +// 48823C: variable 'v10' is possibly undefined + +//----- (004882F0) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::_M_extract_via_format( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7, + char *a8) +{ + size_t v8; // esi + _BYTE *v10; // edi + bool v11; // bl + char v12; // dl + char v13; // cl + char v14; // al + int (__stdcall *v15)(unsigned __int8, int); // eax + char v16; // dl + int v17; // eax + int v18; // edx + char v19; // al + int (__stdcall *v20)(unsigned __int8, int); // eax + char v21; // al + int v23; // eax + _BYTE *v24; // eax + int v25; // esi + int (__stdcall *v26)(unsigned __int8, int); // eax + int v27; // edx + int v28; // eax + _DWORD *v29; // eax + int v30; // eax + unsigned __int64 v31; // kr00_8 + char v32; // al + void (__fastcall *v33)(_BYTE *, int, const char *, const char *, int *); // eax + _DWORD *v34; // eax + int v35; // edx + int v36; // edx + char v37; // al + void (__fastcall *v38)(_BYTE *, int, const char *, const char *, int *); // eax + int v39; // edx + _DWORD *v40; // eax + unsigned __int8 *v41; // eax + int v42; // ebx + int v43; // edx + char v44; // al + int (__stdcall *v45)(unsigned __int8, int); // eax + unsigned int v46; // eax + unsigned __int8 *v47; // eax + int v48; // eax + unsigned __int64 v49; // rax + char v50; // si + int v51; // esi + char v52; // dl + int v53; // esi + char v54; // dl + _DWORD *v55; // eax + int v56; // edx + int v57; // edx + _DWORD *v58; // eax + int v59; // eax + unsigned __int64 v60; // kr08_8 + _DWORD *v61; // eax + int v62; // edx + char v63; // al + void (__fastcall *v64)(_BYTE *, int, const char *, void *, int *); // eax + _DWORD *v65; // eax + _DWORD *v66; // eax + int v67; // edx + unsigned __int8 *v68; // eax + int v69; // eax + int v70; // edx + unsigned __int8 *v71; // eax + int v72; // ebx + char v73; // al + int (__stdcall *v74)(unsigned __int8, int); // eax + int v75; // eax + bool v76; // zf + _DWORD *v77; // eax + int v78; // eax + int v79; // eax + int (__stdcall *v80)(unsigned __int8); // eax + char *v81; // ecx + int (__stdcall *v82)(unsigned __int8); // eax + __int64 v83; // rax + _BYTE *v84; // eax + _BYTE *v85; // eax + char *Str; // [esp+0h] [ebp-BCh] + int v87; // [esp+14h] [ebp-A8h] + int v88; // [esp+20h] [ebp-9Ch] + size_t v90; // [esp+38h] [ebp-84h] + char v91; // [esp+38h] [ebp-84h] + char *v93; // [esp+44h] [ebp-78h] + int v94; // [esp+44h] [ebp-78h] + bool v95; // [esp+44h] [ebp-78h] + size_t v96; // [esp+48h] [ebp-74h] + int v97; // [esp+4Ch] [ebp-70h] + char v98; // [esp+4Ch] [ebp-70h] + _DWORD *v99; // [esp+54h] [ebp-68h] + char v100; // [esp+5Ah] [ebp-62h] + char v101; // [esp+5Ah] [ebp-62h] + bool v102; // [esp+5Bh] [ebp-61h] + int v103; // [esp+5Ch] [ebp-60h] + int v104; // [esp+68h] [ebp-54h] BYREF + int v105; // [esp+6Ch] [ebp-50h] BYREF + int v106[3]; // [esp+70h] [ebp-4Ch] BYREF + int v107; // [esp+7Ch] [ebp-40h] + int v108; // [esp+80h] [ebp-3Ch] + int v109; // [esp+84h] [ebp-38h] + int v110; // [esp+88h] [ebp-34h] + int v111; // [esp+8Ch] [ebp-30h] + int v112; // [esp+90h] [ebp-2Ch] + int v113; // [esp+94h] [ebp-28h] + int v114; // [esp+98h] [ebp-24h] + int v115; // [esp+9Ch] [ebp-20h] + + v8 = 0; + v99 = std::use_facet>(a5 + 108); + v10 = std::use_facet>(a5 + 108); + v104 = 0; + v96 = strlen(a8); + while ( 1 ) + { + v11 = a2 == -1; + if ( v11 && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v75 = (*(int (__thiscall **)(_DWORD *, char *))(*a1 + 36))(a1, Str); + v12 = v11 && a1 != 0; + if ( v75 != -1 ) + v12 = 0; + if ( v75 == -1 ) + a1 = 0; + } + else + { + v12 = 0; + } + } + else + { + v12 = a2 == -1; + } + v100 = a4 == -1; + if ( a3 && a4 == -1 ) + { + if ( a3[2] >= a3[3] ) + { + v91 = v12; + v23 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v12 = v91; + if ( v23 == -1 ) + { + a3 = 0; + v12 = v91 ^ 1; + } + } + } + else + { + v12 ^= v100; + } + if ( v8 >= v96 || !v12 ) + break; + if ( v104 ) + goto LABEL_32; + v93 = &a8[v8]; + v90 = v8 + 1; + v97 = (unsigned __int8)a8[v8]; + v13 = a8[v8]; + v14 = v10[v97 + 285]; + if ( v14 ) + { +LABEL_15: + if ( v14 != 37 ) + goto LABEL_16; + v94 = (unsigned __int8)a8[v8 + 1]; + v18 = v94; + v19 = v10[v94 + 285]; + if ( !v19 ) + { + v20 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v10 + 32); + if ( v20 != std::ctype::do_narrow ) + v18 = ((int (__thiscall *)(_BYTE *, _DWORD, _DWORD))v20)(v10, (char)v94, 0); + if ( !(_BYTE)v18 ) + { +LABEL_47: + v104 |= 4u; + goto LABEL_48; + } + v10[v94 + 285] = v18; + v19 = v18; + } + v105 = 0; + if ( (v19 == 69 || v19 == 79) + && (v90 = v8 + 2, v25 = (unsigned __int8)a8[v8 + 2], v19 = v10[v25 + 285], v18 = v25, !v19) ) + { + v26 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v10 + 32); + if ( v26 != std::ctype::do_narrow ) + v18 = ((int (__thiscall *)(_BYTE *, _DWORD, _DWORD))v26)(v10, (char)v25, 0); + if ( !(_BYTE)v18 ) + goto LABEL_47; + v10[v25 + 285] = v18; + v21 = v18 - 65; + if ( (unsigned __int8)(v18 - 65) > 0x38u ) + goto LABEL_47; + } + else + { + v21 = v19 - 65; + } + switch ( v21 ) + { + case 0: + v65 = (_DWORD *)v99[2]; + v106[0] = v65[11]; + v106[1] = v65[12]; + v106[2] = v65[13]; + v107 = v65[14]; + v108 = v65[15]; + v109 = v65[16]; + v59 = v65[17]; + goto LABEL_114; + case 1: + v40 = (_DWORD *)v99[2]; + v106[0] = v40[25]; + v106[1] = v40[26]; + v106[2] = v40[27]; + v107 = v40[28]; + v108 = v40[29]; + v109 = v40[30]; + v110 = v40[31]; + v111 = v40[32]; + v112 = v40[33]; + v113 = v40[34]; + v114 = v40[35]; + v30 = v40[36]; + goto LABEL_57; + case 2: + case 24: + case 56: + a1 = std::time_get>::_M_extract_num( + a1, + a2, + a3, + a4, + &v105, + 0, + 9999, + 4u, + a5, + &v104); + a2 = v27; + if ( !v104 ) + { + v28 = v105 - 1900; + if ( v105 < 0 ) + v28 = v105 + 100; + a7[5] = v28; + } + break; + case 3: + v32 = v10[28]; + if ( v32 == 1 ) + goto LABEL_156; + if ( !v32 ) + std::ctype::_M_widen_init((int)v10); + v33 = *(void (__fastcall **)(_BYTE *, int, const char *, const char *, int *))(*(_DWORD *)v10 + 28); + if ( (char *)v33 == (char *)std::ctype::do_widen ) +LABEL_156: + strcpy((char *)v106, "%m/%d/%y"); + else + v33(v10, v18, "%m/%d/%y", "%H:%M", v106); + goto LABEL_155; + case 7: + v34 = std::time_get>::_M_extract_num( + a1, + a2, + a3, + a4, + &v105, + 0, + 23, + 2u, + a5, + &v104); + goto LABEL_65; + case 8: + v34 = std::time_get>::_M_extract_num( + a1, + a2, + a3, + a4, + &v105, + 1, + 12, + 2u, + a5, + &v104); +LABEL_65: + a1 = v34; + a2 = v35; + if ( !v104 ) + a7[2] = v105; + break; + case 12: + a1 = std::time_get>::_M_extract_num( + a1, + a2, + a3, + a4, + &v105, + 0, + 59, + 2u, + a5, + &v104); + a2 = v36; + if ( !v104 ) + a7[1] = v105; + break; + case 17: + v37 = v10[28]; + if ( v37 == 1 ) + goto LABEL_157; + if ( !v37 ) + std::ctype::_M_widen_init((int)v10); + v38 = *(void (__fastcall **)(_BYTE *, int, const char *, const char *, int *))(*(_DWORD *)v10 + 28); + if ( (char *)v38 == (char *)std::ctype::do_widen ) +LABEL_157: + strcpy((char *)v106, "%H:%M"); + else + v38(v10, v18, "%H:%M", "%H:%M:%S", v106); + goto LABEL_155; + case 18: + a1 = std::time_get>::_M_extract_num( + a1, + a2, + a3, + a4, + &v105, + 0, + 60, + 2u, + a5, + &v104); + a2 = v39; + if ( !v104 ) + *a7 = v105; + break; + case 19: + v63 = v10[28]; + if ( v63 == 1 ) + goto LABEL_154; + if ( !v63 ) + std::ctype::_M_widen_init((int)v10); + v64 = *(void (__fastcall **)(_BYTE *, int, const char *, void *, int *))(*(_DWORD *)v10 + 28); + if ( (char *)v64 == (char *)std::ctype::do_widen ) +LABEL_154: + strcpy((char *)v106, "%H:%M:%S"); + else + v64(v10, v18, "%H:%M:%S", &unk_55739E, v106); +LABEL_155: + v61 = (_DWORD *)std::time_get>::_M_extract_via_format( + (int)a1, + a2, + (int)a3, + a4, + a5, + (int)&v104, + (int)a7, + (char *)v106); + goto LABEL_117; + case 23: + v61 = (_DWORD *)std::time_get>::_M_extract_via_format( + (int)a1, + a2, + (int)a3, + a4, + a5, + (int)&v104, + (int)a7, + *(char **)(v99[2] + 16)); + goto LABEL_117; + case 25: + if ( a1 && a2 == -1 ) + { + v47 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v47 >= a1[3] ) + { + v48 = (*(int (__fastcall **)(_DWORD *, int))(*a1 + 36))(a1, v18); + if ( v48 == -1 ) + { + v48 = 255; + a1 = 0; + } + else + { + v48 = (unsigned __int8)v48; + } + } + else + { + v48 = *v47; + } + } + else + { + v48 = (unsigned __int8)a2; + } + if ( (*(_BYTE *)(*((_DWORD *)v10 + 6) + 2 * v48) & 1) == 0 ) + goto LABEL_47; + v49 = std::time_get>::_M_extract_name( + __PAIR64__(a2, (unsigned int)a1), + a3, + a4, + v106, + (int)std::__timepunct_cache::_S_timezones, + 14, + a5, + &v104); + a1 = (_DWORD *)v49; + v95 = HIDWORD(v49) == -1; + v103 = HIDWORD(v49); + a2 = HIDWORD(v49); + BYTE4(v49) = v95; + v102 = v95 && (_DWORD)v49 != 0; + if ( v102 ) + { + BYTE4(v49) = 0; + if ( *(_DWORD *)(v49 + 8) >= *(_DWORD *)(v49 + 12) ) + { + LODWORD(v49) = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)v49 + 36))(v49); + BYTE4(v49) = 0; + if ( (_DWORD)v49 == -1 ) + { + BYTE4(v49) = v102; + a1 = 0; + v102 = 0; + } + } + } + v50 = v100 & (a3 != 0); + if ( v50 ) + { + v100 = 0; + if ( a3[2] >= a3[3] ) + { + v98 = BYTE4(v49); + LODWORD(v49) = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + BYTE4(v49) = v98; + v76 = (_DWORD)v49 == -1; + if ( (_DWORD)v49 != -1 ) + v50 = 0; + v100 = v50; + v77 = 0; + if ( !v76 ) + v77 = a3; + a3 = v77; + } + } + if ( BYTE4(v49) != v100 && !(v106[0] | v104) ) + { + LOBYTE(v51) = v103; + if ( v102 ) + { + v84 = (_BYTE *)a1[2]; + if ( (unsigned int)v84 >= a1[3] ) + { + v51 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + if ( v51 == -1 ) + a1 = 0; + } + else + { + LOBYTE(v51) = *v84; + } + } + if ( v10[28] ) + { + v52 = v10[74]; + } + else + { + std::ctype::_M_widen_init((int)v10); + v52 = 45; + v80 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v10 + 24); + if ( v80 != std::ctype::do_widen ) + { + v52 = ((int (__fastcall *)(_BYTE *, int, int))v80)(v10, 45, 45); + Str = v81; + } + } + if ( (_BYTE)v51 == v52 ) + goto LABEL_112; + if ( a1 && v95 ) + { + v85 = (_BYTE *)a1[2]; + if ( (unsigned int)v85 >= a1[3] ) + { + v53 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + if ( v53 == -1 ) + a1 = 0; + } + else + { + LOBYTE(v53) = *v85; + } + } + else + { + LOBYTE(v53) = v103; + } + if ( v10[28] ) + { + v54 = v10[72]; + } + else + { + std::ctype::_M_widen_init((int)v10); + v54 = 43; + v82 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v10 + 24); + if ( v82 != std::ctype::do_widen ) + { + v83 = ((__int64 (__fastcall *)(_BYTE *, int, int))v82)(v10, 43, 43); + Str = (char *)HIDWORD(v83); + v54 = v83; + } + } + if ( (_BYTE)v53 == v54 ) + { +LABEL_112: + v55 = std::time_get>::_M_extract_num( + a1, + v103, + a3, + a4, + v106, + 0, + 23, + 2u, + a5, + &v104); + a1 = std::time_get>::_M_extract_num( + v55, + v56, + a3, + a4, + v106, + 0, + 59, + 2u, + a5, + &v104); + a2 = v57; + } + } + break; + case 32: + v58 = (_DWORD *)v99[2]; + v106[0] = v58[18]; + v106[1] = v58[19]; + v106[2] = v58[20]; + v107 = v58[21]; + v108 = v58[22]; + v109 = v58[23]; + v59 = v58[24]; +LABEL_114: + v110 = v59; + v60 = std::time_get>::_M_extract_name( + __PAIR64__(a2, (unsigned int)a1), + a3, + a4, + &v105, + (int)v106, + 7, + a5, + &v104); + a2 = HIDWORD(v60); + a1 = (_DWORD *)v60; + if ( !v104 ) + a7[6] = v105; + break; + case 33: + case 39: + v29 = (_DWORD *)v99[2]; + v106[0] = v29[37]; + v106[1] = v29[38]; + v106[2] = v29[39]; + v107 = v29[40]; + v108 = v29[41]; + v109 = v29[42]; + v110 = v29[43]; + v111 = v29[44]; + v112 = v29[45]; + v113 = v29[46]; + v114 = v29[47]; + v30 = v29[48]; +LABEL_57: + v115 = v30; + v31 = std::time_get>::_M_extract_name( + __PAIR64__(a2, (unsigned int)a1), + a3, + a4, + &v105, + (int)v106, + 12, + a5, + &v104); + a2 = HIDWORD(v31); + a1 = (_DWORD *)v31; + if ( !v104 ) + a7[4] = v105; + break; + case 34: + v61 = (_DWORD *)std::time_get>::_M_extract_via_format( + (int)a1, + a2, + (int)a3, + a4, + a5, + (int)&v104, + (int)a7, + *(char **)(v99[2] + 24)); + goto LABEL_117; + case 35: + v88 = a5; + v87 = 1; + goto LABEL_126; + case 36: + if ( a1 && a2 == -1 ) + { + v68 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v68 < a1[3] ) + { + if ( (*(_BYTE *)(*((_DWORD *)v10 + 6) + 2 * *v68) & 0x20) != 0 ) + goto LABEL_133; + goto LABEL_164; + } + v69 = (*(int (__fastcall **)(_DWORD *, int))(*a1 + 36))(a1, v18); + if ( v69 == -1 ) + a1 = 0; + } + else + { + LOBYTE(v69) = a2; + } + if ( (*(_BYTE *)(*((_DWORD *)v10 + 6) + 2 * (unsigned __int8)v69) & 0x20) != 0 ) + { + v68 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v68 < a1[3] ) +LABEL_133: + a1[2] = v68 + 1; + else + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + v66 = std::time_get>::_M_extract_num( + a1, + -1, + a3, + a4, + &v105, + 1, + 9, + 1u, + a5, + &v104); + goto LABEL_127; + } +LABEL_164: + v88 = a5; + v87 = 10; +LABEL_126: + v66 = std::time_get>::_M_extract_num( + a1, + a2, + a3, + a4, + &v105, + v87, + 31, + 2u, + v88, + &v104); +LABEL_127: + a1 = v66; + a2 = v67; + if ( !v104 ) + a7[3] = v105; + break; + case 44: + a1 = std::time_get>::_M_extract_num( + a1, + a2, + a3, + a4, + &v105, + 1, + 12, + 2u, + a5, + &v104); + a2 = v70; + if ( !v104 ) + a7[4] = v105 - 1; + break; + case 45: + if ( a1 && a2 == -1 ) + { + v41 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v41 >= a1[3] ) + { + v79 = (*(int (__fastcall **)(_DWORD *, int))(*a1 + 36))(a1, v18); + if ( v79 == -1 ) + { + v42 = 255; + v43 = -1; + a1 = 0; + } + else + { + v43 = v79; + v42 = (unsigned __int8)v79; + } + } + else + { + v42 = *v41; + v43 = v42; + } + } + else + { + v43 = a2; + v42 = (unsigned __int8)a2; + } + v44 = v10[v42 + 285]; + if ( v44 ) + goto LABEL_88; + v45 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v10 + 32); + if ( v45 != std::ctype::do_narrow ) + v43 = ((int (__thiscall *)(_BYTE *, _DWORD, _DWORD))v45)(v10, (char)v43, 0); + if ( (_BYTE)v43 ) + { + v10[v42 + 285] = v43; + v44 = v43; +LABEL_88: + if ( v44 == 10 ) + goto LABEL_89; + } + goto LABEL_47; + case 51: + if ( a1 && a2 == -1 ) + { + v71 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v71 >= a1[3] ) + { + v78 = (*(int (__fastcall **)(_DWORD *, int))(*a1 + 36))(a1, v18); + if ( v78 == -1 ) + { + v72 = 255; + v43 = -1; + a1 = 0; + } + else + { + v43 = v78; + v72 = (unsigned __int8)v78; + } + } + else + { + v72 = *v71; + v43 = v72; + } + } + else + { + v43 = a2; + v72 = (unsigned __int8)a2; + } + v73 = v10[v72 + 285]; + if ( v73 ) + goto LABEL_151; + v74 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v10 + 32); + if ( v74 != std::ctype::do_narrow ) + v43 = ((int (__thiscall *)(_BYTE *, _DWORD, _DWORD))v74)(v10, (char)v43, 0); + if ( !(_BYTE)v43 ) + goto LABEL_47; + v10[v72 + 285] = v43; + v73 = v43; +LABEL_151: + if ( v73 != 9 ) + goto LABEL_47; +LABEL_89: + v46 = a1[2]; + if ( v46 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *, int))(*a1 + 40))(a1, v43); + else + a1[2] = v46 + 1; + a2 = -1; + break; + case 55: + v61 = (_DWORD *)std::time_get>::_M_extract_via_format( + (int)a1, + a2, + (int)a3, + a4, + a5, + (int)&v104, + (int)a7, + *(char **)(v99[2] + 8)); +LABEL_117: + a1 = v61; + a2 = v62; + break; + default: + goto LABEL_47; + } +LABEL_48: + v8 = v90 + 1; + } + else + { + v15 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v10 + 32); + if ( v15 != std::ctype::do_narrow ) + v13 = ((int (__thiscall *)(_BYTE *, _DWORD, _DWORD))v15)(v10, (char)v97, 0); + if ( v13 ) + { + v10[v97 + 285] = v13; + v14 = v13; + goto LABEL_15; + } +LABEL_16: + v16 = *v93; + if ( !a1 || a2 != -1 ) + { + LOBYTE(v17) = a2; + goto LABEL_19; + } + v24 = (_BYTE *)a1[2]; + if ( (unsigned int)v24 >= a1[3] ) + { + v101 = *v93; + v17 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v16 = v101; + if ( v17 == -1 ) + a1 = 0; +LABEL_19: + if ( v16 != (_BYTE)v17 ) + goto LABEL_20; + v24 = (_BYTE *)a1[2]; + if ( (unsigned int)v24 < a1[3] ) + { +LABEL_40: + a1[2] = v24 + 1; + goto LABEL_41; + } + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); +LABEL_41: + a2 = -1; + ++v8; + } + else + { + if ( v16 == *v24 ) + goto LABEL_40; +LABEL_20: + v104 |= 4u; + ++v8; + } + } + } + if ( v104 || v8 != v96 ) +LABEL_32: + *a6 |= 4u; + return a1; +} +// 488668: variable 'v27' is possibly undefined +// 4887E0: variable 'v18' is possibly undefined +// 488846: variable 'v35' is possibly undefined +// 4888F9: variable 'v36' is possibly undefined +// 4889BF: variable 'v39' is possibly undefined +// 488CA7: variable 'v56' is possibly undefined +// 488CB1: variable 'v57' is possibly undefined +// 488DD7: variable 'v62' is possibly undefined +// 488ED9: variable 'v67' is possibly undefined +// 489000: variable 'v70' is possibly undefined +// 489129: variable 'Str' is possibly undefined +// 489324: variable 'v81' is possibly undefined +// 53F660: using guessed type void *std::__timepunct_cache::_S_timezones[2]; + +//----- (00489410) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::_M_extract_wday_or_month( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + unsigned int *a5, + int a6, + unsigned int a7, + int a8, + _DWORD *a9) +{ + int v9; // eax + void *v10; // esp + void *v11; // esp + char v12; // dl + char v13; // bl + unsigned int v14; // esi + unsigned int v15; // edi + char v16; // dl + char v17; // bl + unsigned int v18; // edx + unsigned int *v19; // ecx + unsigned int v20; // eax + char *v22; // eax + unsigned int v23; // eax + int v24; // edx + int v25; // ebx + int v26; // esi + char v27; // al + int v28; // ecx + unsigned int v29; // eax + int v30; // eax + void *v31; // esp + void *v32; // esp + int v33; // ebx + int v34; // eax + int v35; // eax + _DWORD *v36; // ebx + int v37; // eax + char v38; // dl + bool v39; // zf + _DWORD *v40; // eax + int v41; // eax + bool v42; // zf + _DWORD *v43; // eax + _DWORD *v44; // ebx + int v45; // eax + int v46; // eax + char v47; // dl + bool v48; // zf + _DWORD *v49; // eax + _BYTE *v50; // eax + int v51; // eax + int v52; // eax + bool v53; // zf + _DWORD *v54; // eax + _DWORD *v55; // edi + int v56; // eax + bool v57; // zf + char v58; // si + char v59; // al + _DWORD *v60; // eax + _BYTE v61[12]; // [esp+10h] [ebp-48h] BYREF + _DWORD *v62; // [esp+1Ch] [ebp-3Ch] + _DWORD *v63; // [esp+20h] [ebp-38h] + int v64; // [esp+24h] [ebp-34h] + _DWORD *v65; // [esp+28h] [ebp-30h] + bool v66; // [esp+2Eh] [ebp-2Ah] + char v67; // [esp+2Fh] [ebp-29h] + char *v68; // [esp+30h] [ebp-28h] + int *v69; // [esp+34h] [ebp-24h] + int *v70; // [esp+38h] [ebp-20h] + _DWORD *v71; // [esp+3Ch] [ebp-1Ch] + + v65 = a1; + v64 = a2; + v63 = a3; + v68 = (char *)std::use_facet>(a8 + 108); + v9 = 16 * ((8 * a7 + 27) >> 4); + v10 = alloca(v9); + v11 = alloca(v9); + v70 = (int *)v61; + v12 = a2 == -1; + LOBYTE(v71) = v12 & (a1 != 0); + if ( (_BYTE)v71 ) + { + v12 = 0; + if ( v65[2] >= v65[3] ) + { + v34 = *v65; + LOBYTE(v69) = 0; + v35 = (*(int (__fastcall **)(_DWORD *))(v34 + 36))(v65); + v12 = (char)v69; + if ( v35 == -1 ) + { + v12 = (char)v71; + v65 = 0; + LOBYTE(v71) = 0; + } + } + } + v66 = a4 == -1; + v13 = v66 && a3 != 0; + if ( v13 ) + { + if ( a3[2] >= a3[3] ) + { + v51 = *a3; + LOBYTE(v69) = v12; + v52 = (*(int (__fastcall **)(_DWORD *))(v51 + 36))(a3); + v12 = (char)v69; + v53 = v52 == -1; + if ( v52 != -1 ) + v13 = 0; + v54 = 0; + if ( !v53 ) + v54 = a3; + v63 = v54; + } + else + { + v13 = 0; + } + } + else + { + v13 = v66; + } + if ( v12 == v13 ) + { + v62 = 0; + v14 = 0; + v15 = 0; + goto LABEL_6; + } + if ( (_BYTE)v71 ) + { + v50 = (_BYTE *)v65[2]; + if ( (unsigned int)v50 >= v65[3] ) + { + v55 = v65; + v56 = (*(int (__fastcall **)(_DWORD *))(*v65 + 36))(v65); + v57 = v56 == -1; + v58 = v56; + v59 = -1; + if ( !v57 ) + v59 = v58; + LOBYTE(v71) = v59; + v60 = 0; + if ( !v57 ) + v60 = v55; + v65 = v60; + } + else + { + LOBYTE(v71) = *v50; + } + } + else + { + LOBYTE(v71) = a2; + } + v14 = 2 * a7; + if ( !(2 * a7) ) + { + v62 = 0; + v15 = 0; + goto LABEL_6; + } + v69 = (int *)(2 * a7); + v24 = a6; + v25 = 0; + v15 = 0; + v26 = (int)v68; + do + { + while ( 1 ) + { + v28 = **(char **)(v24 + 4 * v25); + if ( (_BYTE)v28 == (_BYTE)v71 ) + break; + a6 = v24; + v27 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v26 + 8))(v26, v28); + v24 = a6; + if ( v27 == (_BYTE)v71 ) + break; + if ( (int *)++v25 == v69 ) + goto LABEL_50; + } + v70[v15++] = v25++; + } + while ( (int *)v25 != v69 ); +LABEL_50: + v62 = 0; + v14 = 0; + if ( v15 ) + { + v29 = v65[2]; + if ( v29 >= v65[3] ) + (*(void (__fastcall **)(_DWORD *, int))(*v65 + 40))(v65, v24); + else + v65[2] = v29 + 1; + v30 = 16 * ((4 * v15 + 27) >> 4); + v31 = alloca(v30); + v14 = 0; + v32 = alloca(v30); + v71 = (_DWORD *)v15; + v62 = v61; + v69 = (int *)v61; + v33 = (int)v70; + do + { + v69[v14] = strlen(*(const char **)(a6 + 4 * *(_DWORD *)(v33 + 4 * v14))); + ++v14; + } + while ( v71 != (_DWORD *)v14 ); + v64 = -1; + v15 = 1; + } +LABEL_6: + while ( 2 ) + { + v16 = v64 == -1; + LOBYTE(v71) = v16 & (v65 != 0); + if ( (_BYTE)v71 ) + { + if ( v65[2] >= v65[3] ) + { + v44 = v65; + v45 = *v65; + LOBYTE(v69) = v64 == -1; + v46 = (*(int (__fastcall **)(_DWORD *))(v45 + 36))(v65); + v47 = (char)v71; + v48 = v46 == -1; + if ( v46 != -1 ) + v47 = 0; + v49 = 0; + if ( !v48 ) + v49 = v44; + LOBYTE(v71) = v47; + v16 = (char)v69; + v65 = v49; + } + else + { + LOBYTE(v71) = 0; + } + } + else + { + LOBYTE(v71) = v64 == -1; + } + v17 = v66 && v63 != 0; + if ( v17 ) + { + if ( v63[2] < v63[3] ) + { + if ( !(_BYTE)v71 ) + break; + goto LABEL_11; + } + LOBYTE(v69) = v16; + v41 = (*(int (__fastcall **)(_DWORD *))(*v63 + 36))(v63); + v16 = (char)v69; + v42 = v41 == -1; + if ( v41 != -1 ) + v17 = 0; + v43 = 0; + if ( !v42 ) + v43 = v63; + v63 = v43; + } + else + { + v17 = v66; + } + if ( (_BYTE)v71 == v17 ) + break; +LABEL_11: + if ( v65 && v16 ) + { + v22 = (char *)v65[2]; + if ( (unsigned int)v22 >= v65[3] ) + { + v36 = v65; + v37 = (*(int (__fastcall **)(_DWORD *))(*v65 + 36))(v65); + v38 = -1; + v39 = v37 == -1; + if ( v37 != -1 ) + v38 = v37; + v40 = 0; + if ( !v39 ) + v40 = v36; + v67 = v38; + v65 = v40; + } + else + { + v67 = *v22; + } + } + else + { + v67 = v64; + } + if ( !v14 ) + { +LABEL_30: + *a9 |= 4u; + return v65; + } + v18 = 0; + v68 = 0; + v71 = v62; + do + { + while ( 1 ) + { + v19 = &v71[v18]; + if ( *v19 > v15 ) + break; + ++v68; + ++v18; +LABEL_17: + if ( v14 <= v18 ) + goto LABEL_21; + } + v69 = &v70[v18]; + if ( v67 == *(_BYTE *)(*(_DWORD *)(a6 + 4 * *v69) + v15) ) + { + ++v18; + goto LABEL_17; + } + *v69 = v70[--v14]; + *v19 = v71[v14]; + } + while ( v14 > v18 ); +LABEL_21: + if ( v68 != (char *)v14 ) + { + v20 = v65[2]; + if ( v20 >= v65[3] ) + (*(void (__fastcall **)(_DWORD *))(*v65 + 40))(v65); + else + v65[2] = v20 + 1; + v64 = -1; + ++v15; + continue; + } + break; + } + if ( v14 != 1 ) + { + if ( v14 == 2 && (*v62 == v15 || v62[1] == v15) ) + goto LABEL_39; + goto LABEL_30; + } + if ( *v62 != v15 ) + goto LABEL_30; +LABEL_39: + v23 = *v70; + if ( *v70 >= a7 ) + v23 = *v70 - a7; + *a5 = v23; + return v65; +} + +//----- (004898B0) -------------------------------------------------------- +_DWORD *__thiscall std::time_get>::get( + void *this, + _DWORD *a2, + int a3, + _DWORD *a4, + int a5, + int a6, + _DWORD *a7, + _DWORD *a8, + unsigned __int8 *a9, + unsigned __int8 *a10) +{ + unsigned __int8 *v10; // edi + _DWORD *v12; // ebp + int v13; // edx + char v14; // dl + char v15; // bl + char v16; // dl + char v17; // bl + unsigned int v18; // eax + char v19; // dl + char v20; // bl + char v21; // bl + char v22; // dl + int (__stdcall *v23)(unsigned __int8, int); // eax + unsigned __int8 v24; // dl + int (__stdcall *v25)(unsigned __int8, int); // eax + int v26; // ecx + __int64 (__thiscall *v27)(void *, _DWORD *, int, _DWORD *, int, int, _DWORD *, _DWORD *, int, int); // eax + _BYTE *v28; // eax + char v29; // dl + _BYTE *v30; // edi + _DWORD *v31; // eax + int v32; // edx + char v33; // bl + char v34; // dl + char v35; // al + unsigned __int8 *i; // edi + int j; // ebp + bool v39; // al + bool v40; // di + char v41; // dl + char v42; // bl + int v43; // eax + unsigned __int8 *v44; // eax + int v45; // edi + char v46; // al + int (__stdcall *v47)(unsigned __int8, int); // eax + int (__stdcall *v48)(unsigned __int8); // eax + __int64 v49; // kr00_8 + char *v50; // eax + int v51; // eax + bool v52; // zf + _DWORD *v53; // eax + int v54; // eax + char *v55; // eax + signed __int8 v56; // al + int v57; // eax + int v58; // eax + bool v59; // zf + _DWORD *v60; // eax + int v61; // eax + int v62; // eax + bool v63; // [esp+4Bh] [ebp-51h] + bool v65; // [esp+50h] [ebp-4Ch] + char v66; // [esp+50h] [ebp-4Ch] + _DWORD *v67; // [esp+50h] [ebp-4Ch] + char v68; // [esp+50h] [ebp-4Ch] + char v70; // [esp+54h] [ebp-48h] + bool v71; // [esp+54h] [ebp-48h] + int v72; // [esp+58h] [ebp-44h] + unsigned __int8 *v73; // [esp+58h] [ebp-44h] + char v74; // [esp+58h] [ebp-44h] + int v76; // [esp+60h] [ebp-3Ch] + unsigned __int8 v77; // [esp+60h] [ebp-3Ch] + int v78; // [esp+68h] [ebp-34h] + char v79; // [esp+7Ch] [ebp-20h] BYREF + char v80; // [esp+7Dh] [ebp-1Fh] + char v81; // [esp+7Eh] [ebp-1Eh] + char v82; // [esp+7Fh] [ebp-1Dh] + unsigned __int8 *v83; // [esp+BCh] [ebp+20h] + + v10 = a9; + v12 = std::use_facet>(a6 + 108); + *a7 = 0; + if ( a9 == a10 ) + return a2; + v63 = a5 == -1; + while ( 1 ) + { + v65 = a3 == -1; + if ( !v65 || a2 == 0 ) + { + v19 = a3 == -1; + goto LABEL_19; + } + if ( a2[2] >= a2[3] ) + { + v57 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + v19 = v65 && a2 != 0; + if ( v57 != -1 ) + v19 = 0; + if ( v57 == -1 ) + a2 = 0; +LABEL_19: + v20 = v63 && a4 != 0; + if ( !v20 ) + goto LABEL_20; + goto LABEL_84; + } + v19 = 0; + v20 = v63 && a4 != 0; + if ( !v20 ) + { +LABEL_20: + v20 = a5 == -1; + goto LABEL_21; + } +LABEL_84: + if ( a4[2] >= a4[3] ) + { + v74 = v19; + v58 = (*(int (__fastcall **)(_DWORD *))(*a4 + 36))(a4); + v19 = v74; + v59 = v58 == -1; + if ( v58 != -1 ) + v20 = 0; + v60 = 0; + if ( !v59 ) + v60 = a4; + a4 = v60; +LABEL_21: + if ( v19 == v20 ) + goto LABEL_86; + goto LABEL_22; + } + if ( !v19 ) + { +LABEL_86: + *a7 = 6; + return a2; + } +LABEL_22: + v21 = *((_BYTE *)v12 + *v10 + 285); + v72 = *v10; + v22 = *v10; + if ( !v21 ) + { + v23 = *(int (__stdcall **)(unsigned __int8, int))(*v12 + 32); + if ( v23 != std::ctype::do_narrow ) + v22 = ((int (__thiscall *)(_DWORD *, _DWORD, _DWORD))v23)(v12, v22, 0); + if ( !v22 ) + goto LABEL_3; + v21 = v22; + *((_BYTE *)v12 + v72 + 285) = v22; + } + if ( v21 == 37 ) + { + v73 = v10 + 1; + if ( a10 == v10 + 1 ) + break; + v76 = v10[1]; + v24 = v10[1]; + v66 = *((_BYTE *)v12 + v76 + 285); + if ( !v66 ) + { + v25 = *(int (__stdcall **)(unsigned __int8, int))(*v12 + 32); + if ( v25 != std::ctype::do_narrow ) + v24 = ((int (__thiscall *)(_DWORD *, _DWORD, _DWORD))v25)(v12, (char)v76, 0); + if ( !v24 ) + { + v66 = 0; + v26 = 0; + v78 = 0; + goto LABEL_37; + } + v66 = v24; + *((_BYTE *)v12 + v76 + 285) = v24; + } + v24 = v66; + if ( v66 == 69 || v66 == 79 ) + { + v73 = v10 + 2; + if ( a10 == v10 + 2 ) + break; + v45 = v10[2]; + v46 = *((_BYTE *)v12 + v45 + 285); + v78 = v66; + v24 = v45; + if ( v46 ) + { + v26 = v46; + v24 = *((_BYTE *)v12 + v45 + 285); + } + else + { + v26 = (char)v45; + v47 = *(int (__stdcall **)(unsigned __int8, int))(*v12 + 32); + if ( v47 != std::ctype::do_narrow ) + { + v56 = ((int (__fastcall *)(_DWORD *, int, _DWORD, _DWORD))v47)(v12, v45, (char)v45, 0); + v26 = v56; + v24 = v56; + } + if ( v24 ) + *((_BYTE *)v12 + v45 + 285) = v24; + } + } + else + { + v78 = 0; + v26 = v66; + v66 = 0; + } +LABEL_37: + v77 = v24; + v27 = *(__int64 (__thiscall **)(void *, _DWORD *, int, _DWORD *, int, int, _DWORD *, _DWORD *, int, int))(*(_DWORD *)this + 32); + if ( (char *)v27 == (char *)std::time_get>::do_get ) + { + v28 = std::use_facet>(a6 + 108); + v29 = v77; + v30 = v28; + *a7 = 0; + if ( v28[28] ) + { + v21 = v28[66]; + } + else + { + std::ctype::_M_widen_init((int)v28); + v29 = v77; + v48 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v30 + 24); + if ( v48 != std::ctype::do_widen ) + { + v21 = ((int (__fastcall *)(_BYTE *, _DWORD, int))v48)(v30, v77, 37); + v29 = v77; + } + } + v79 = v21; + if ( v66 ) + { + v81 = v29; + v82 = 0; + v80 = v66; + } + else + { + v80 = v29; + v81 = 0; + } + v31 = std::time_get>::_M_extract_via_format( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + &v79); + a2 = v31; + v33 = v32 == -1; + a3 = v32; + v34 = v33 & (v31 != 0); + if ( v34 ) + { + v33 = 0; + if ( v31[2] >= v31[3] ) + { + v68 = v34; + if ( (*(int (__fastcall **)(_DWORD *))(*v31 + 36))(v31) == -1 ) + { + v33 = v68; + a2 = 0; + } + } + } + if ( a4 && a5 == -1 ) + { + v35 = 0; + if ( a4[2] >= a4[3] ) + v35 = (*(int (__fastcall **)(_DWORD *))(*a4 + 36))(a4) == -1; + } + else + { + v35 = a5 == -1; + } + if ( v35 == v33 ) + *a7 |= 2u; + } + else + { + v49 = v27(this, a2, a3, a4, a5, a6, a7, a8, v26, v78); + a3 = HIDWORD(v49); + a2 = (_DWORD *)v49; + } + v10 = v73 + 1; + if ( a10 == v73 + 1 ) + return a2; + goto LABEL_16; + } +LABEL_3: + v13 = v12[6]; + if ( (*(_BYTE *)(v13 + 2 * *v10) & 0x20) != 0 ) + { + for ( i = v10 + 1; a10 != i; ++i ) + { + if ( (*(_BYTE *)(v13 + 2 * *i) & 0x20) == 0 ) + break; + } + v83 = i; + v67 = v12; + for ( j = a3; ; j = -1 ) + { + v39 = j == -1; + v40 = v39; + if ( v39 && a2 != 0 ) + { + if ( a2[2] >= a2[3] ) + { + v71 = v39 && a2 != 0; + v54 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + v41 = v71; + if ( v54 != -1 ) + v41 = 0; + if ( v54 == -1 ) + a2 = 0; + } + else + { + v41 = 0; + } + } + else + { + v41 = j == -1; + } + v42 = v63 && a4 != 0; + if ( !v42 ) + break; + if ( a4[2] >= a4[3] ) + { + v70 = v41; + v51 = (*(int (__fastcall **)(_DWORD *))(*a4 + 36))(a4); + v41 = v70; + v52 = v51 == -1; + if ( v51 != -1 ) + v42 = 0; + v53 = 0; + if ( !v52 ) + v53 = a4; + a4 = v53; +LABEL_59: + if ( v41 == v42 ) + goto LABEL_72; + goto LABEL_60; + } + if ( !v41 ) + { +LABEL_72: + a3 = j; + v10 = v83; + v12 = v67; + goto LABEL_15; + } +LABEL_60: + if ( a2 && v40 ) + { + v44 = (unsigned __int8 *)a2[2]; + if ( (unsigned int)v44 < a2[3] ) + { + if ( (*(_BYTE *)(v67[6] + 2 * *v44) & 0x20) == 0 ) + { + a3 = -1; + v10 = v83; + v12 = v67; + goto LABEL_15; + } +LABEL_65: + a2[2] = v44 + 1; + continue; + } + v43 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + if ( v43 == -1 ) + a2 = 0; + } + else + { + LOBYTE(v43) = j; + } + if ( (*(_BYTE *)(v67[6] + 2 * (unsigned __int8)v43) & 0x20) == 0 ) + goto LABEL_72; + v44 = (unsigned __int8 *)a2[2]; + if ( (unsigned int)v44 < a2[3] ) + goto LABEL_65; + (*(void (__fastcall **)(_DWORD *))(*a2 + 40))(a2); + } + v42 = a5 == -1; + goto LABEL_59; + } + if ( a2 && a3 == -1 ) + { + v50 = (char *)a2[2]; + if ( (unsigned int)v50 >= a2[3] ) + { + v61 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + v14 = v61; + if ( v61 == -1 ) + v14 = -1; + if ( v61 == -1 ) + a2 = 0; + } + else + { + v14 = *v50; + } + } + else + { + v14 = a3; + } + v15 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v12 + 16))(v12, v14); + if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD))(*v12 + 16))(v12, (char)*v10) != v15 ) + { + if ( a2 && a3 == -1 ) + { + v55 = (char *)a2[2]; + if ( (unsigned int)v55 >= a2[3] ) + { + v62 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + v16 = v62; + if ( v62 == -1 ) + v16 = -1; + if ( v62 == -1 ) + a2 = 0; + } + else + { + v16 = *v55; + } + } + else + { + v16 = a3; + } + v17 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v12 + 8))(v12, v16); + if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD))(*v12 + 8))(v12, (char)*v10) != v17 ) + break; + } + v18 = a2[2]; + if ( v18 >= a2[3] ) + (*(void (__fastcall **)(_DWORD *))(*a2 + 40))(a2); + else + a2[2] = v18 + 1; + a3 = -1; + ++v10; +LABEL_15: + if ( a10 == v10 ) + return a2; +LABEL_16: + if ( *a7 ) + return a2; + } + *a7 = 4; + return a2; +} +// 48A011: conditional instruction was optimized away because eax.4==FFFFFFFF +// 489BA7: variable 'v32' is possibly undefined + +//----- (0048A140) -------------------------------------------------------- +int __thiscall std::time_get>::get( + void *this, + _DWORD *a2, + int a3, + _DWORD *a4, + int a5, + int a6, + _DWORD *a7, + _DWORD *a8, + char a9, + char a10) +{ + _DWORD *(__stdcall *v10)(_DWORD *, int, _DWORD *, int, int, _DWORD *, _DWORD *, char, char); // eax + _BYTE *v11; // eax + char v12; // dl + _DWORD *v13; // esi + int v14; // edx + char v15; // dl + char v16; // al + int (__stdcall *v18)(unsigned __int8); // eax + int v19; // eax + int v20; // eax + char v21; // [esp+24h] [ebp-48h] + char v22; // [esp+28h] [ebp-44h] + _BYTE *v23; // [esp+3Ch] [ebp-30h] + char v24; // [esp+4Ch] [ebp-20h] BYREF + char v25; // [esp+4Dh] [ebp-1Fh] + char v26; // [esp+4Eh] [ebp-1Eh] + char v27; // [esp+4Fh] [ebp-1Dh] + + v10 = *(_DWORD *(__stdcall **)(_DWORD *, int, _DWORD *, int, int, _DWORD *, _DWORD *, char, char))(*(_DWORD *)this + 32); + if ( v10 != std::time_get>::do_get ) + return ((int (__thiscall *)(void *, _DWORD *, int, _DWORD *, int, int, _DWORD *, _DWORD *, _DWORD, _DWORD))v10)( + this, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10); + v11 = std::use_facet>(a6 + 108); + *a7 = 0; + if ( v11[28] ) + { + v12 = v11[66]; + } + else + { + v23 = v11; + std::ctype::_M_widen_init((int)v11); + v12 = 37; + v18 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v23 + 24); + if ( v18 != std::ctype::do_widen ) + v12 = v18(37u); + } + v24 = v12; + if ( a10 ) + { + v27 = 0; + v25 = a10; + v26 = a9; + } + else + { + v26 = 0; + v25 = a9; + } + v13 = std::time_get>::_M_extract_via_format(a2, a3, a4, a5, a6, a7, a8, &v24); + v15 = v14 == -1; + v22 = v15 & (v13 != 0); + if ( v22 ) + { + v15 = 0; + if ( v13[2] >= v13[3] ) + { + v20 = (*(int (__fastcall **)(_DWORD *))(*v13 + 36))(v13); + v15 = 0; + if ( v20 == -1 ) + v15 = v22; + if ( v20 == -1 ) + v13 = 0; + } + } + v16 = a5 == -1; + if ( a4 ) + { + if ( a5 == -1 ) + { + v16 = 0; + if ( a4[2] >= a4[3] ) + { + v21 = v15; + v19 = (*(int (__fastcall **)(_DWORD *))(*a4 + 36))(a4); + v15 = v21; + v16 = v19 == -1; + } + } + } + if ( v15 == v16 ) + *a7 |= 2u; + return (int)v13; +} +// 48A221: variable 'v14' is possibly undefined + +//----- (0048A380) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7, + char a8, + char a9) +{ + _BYTE *v9; // ebp + char v10; // dl + _DWORD *v11; // esi + int v12; // edx + char v13; // dl + char v14; // bp + char v15; // al + int (__stdcall *v17)(unsigned __int8); // eax + int v18; // eax + int v19; // eax + char v20; // [esp+20h] [ebp-3Ch] + char v21; // [esp+3Ch] [ebp-20h] BYREF + char v22; // [esp+3Dh] [ebp-1Fh] + char v23; // [esp+3Eh] [ebp-1Eh] + char v24; // [esp+3Fh] [ebp-1Dh] + + v9 = std::use_facet>(a5 + 108); + *a6 = 0; + if ( v9[28] ) + { + v10 = v9[66]; + } + else + { + std::ctype::_M_widen_init((int)v9); + v10 = 37; + v17 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v9 + 24); + if ( v17 != std::ctype::do_widen ) + v10 = ((int (__fastcall *)(_BYTE *, int, int))v17)(v9, 37, 37); + } + v21 = v10; + if ( a9 ) + { + v24 = 0; + v22 = a9; + v23 = a8; + } + else + { + v23 = 0; + v22 = a8; + } + v11 = std::time_get>::_M_extract_via_format(a1, a2, a3, a4, a5, a6, a7, &v21); + v13 = v12 == -1; + v14 = v13 & (v11 != 0); + if ( v14 ) + { + v13 = 0; + if ( v11[2] >= v11[3] ) + { + v19 = (*(int (__fastcall **)(_DWORD *))(*v11 + 36))(v11); + v13 = 0; + if ( v19 == -1 ) + { + v13 = v14; + v11 = 0; + } + } + } + v15 = a4 == -1; + if ( a3 ) + { + if ( a4 == -1 ) + { + v15 = 0; + if ( a3[2] >= a3[3] ) + { + v20 = v13; + v18 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v13 = v20; + v15 = v18 == -1; + } + } + } + if ( v13 == v15 ) + *a6 |= 2u; + return v11; +} +// 48A529: conditional instruction was optimized away because eax.4==FFFFFFFF +// 48A43D: variable 'v12' is possibly undefined + +//----- (0048A540) -------------------------------------------------------- +int __fastcall std::time_get>::get_date(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 16))(a1); +} + +//----- (0048A550) -------------------------------------------------------- +int __fastcall std::time_get>::get_time(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 12))(a1); +} + +//----- (0048A560) -------------------------------------------------------- +int __fastcall std::time_get>::get_year(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 28))(a1); +} + +//----- (0048A570) -------------------------------------------------------- +int __fastcall std::time_get>::date_order(int a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*(_DWORD *)a1 + 8); + if ( v1 == std::time_get>::do_date_order ) + return 0; + else + return v1(); +} + +//----- (0048A590) -------------------------------------------------------- +int *__stdcall std::time_get>::do_get_date( + int *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + _DWORD *v7; // eax + int *v8; // ecx + int *v9; // ebp + __int16 v10; // dx + _BOOL2 v11; // bx + bool v12; // cl + __int16 *v14; // eax + __int16 v15; // ax + bool v16; // si + __int16 *v17; // eax + __int16 v18; // ax + int *v19; // [esp+30h] [ebp-2Ch] + + v7 = std::use_facet>(a5 + 108); + v8 = std::time_get>::_M_extract_via_format( + a1, + a2, + a3, + a4, + a5, + a6, + a7, + *(wchar_t **)(v7[2] + 8)); + v9 = v8; + v11 = v10 == -1; + if ( v11 && v8 != 0 ) + { + v16 = v11 && v8 != 0; + v17 = (__int16 *)v8[2]; + if ( (unsigned int)v17 >= v8[3] ) + { + v19 = v8; + v18 = (*(int (**)(void))(*v8 + 36))(); + v8 = v19; + } + else + { + v18 = *v17; + } + LOBYTE(v11) = 0; + v9 = 0; + if ( v18 == -1 ) + LOBYTE(v11) = v16; + if ( v18 != -1 ) + v9 = v8; + } + v12 = (_WORD)a4 == 0xFFFF; + if ( a3 && (_WORD)a4 == 0xFFFF ) + { + v14 = (__int16 *)a3[2]; + if ( (unsigned int)v14 >= a3[3] ) + v15 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v15 = *v14; + v12 = v15 == -1; + } + if ( v11 == v12 ) + *a6 |= 2u; + return v9; +} +// 48A60F: variable 'v10' is possibly undefined + +//----- (0048A6C0) -------------------------------------------------------- +int *__stdcall std::time_get>::do_get_time( + int *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + _DWORD *v7; // eax + int *v8; // ecx + int *v9; // ebp + __int16 v10; // dx + _BOOL2 v11; // bx + bool v12; // cl + __int16 *v14; // eax + __int16 v15; // ax + bool v16; // si + __int16 *v17; // eax + __int16 v18; // ax + int *v19; // [esp+30h] [ebp-2Ch] + + v7 = std::use_facet>(a5 + 108); + v8 = std::time_get>::_M_extract_via_format( + a1, + a2, + a3, + a4, + a5, + a6, + a7, + *(wchar_t **)(v7[2] + 16)); + v9 = v8; + v11 = v10 == -1; + if ( v11 && v8 != 0 ) + { + v16 = v11 && v8 != 0; + v17 = (__int16 *)v8[2]; + if ( (unsigned int)v17 >= v8[3] ) + { + v19 = v8; + v18 = (*(int (**)(void))(*v8 + 36))(); + v8 = v19; + } + else + { + v18 = *v17; + } + LOBYTE(v11) = 0; + v9 = 0; + if ( v18 == -1 ) + LOBYTE(v11) = v16; + if ( v18 != -1 ) + v9 = v8; + } + v12 = (_WORD)a4 == 0xFFFF; + if ( a3 && (_WORD)a4 == 0xFFFF ) + { + v14 = (__int16 *)a3[2]; + if ( (unsigned int)v14 >= a3[3] ) + v15 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v15 = *v14; + v12 = v15 == -1; + } + if ( v11 == v12 ) + *a6 |= 2u; + return v9; +} +// 48A73F: variable 'v10' is possibly undefined + +//----- (0048A7F0) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_year( + _DWORD *a1, + unsigned __int16 a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + int a7) +{ + __int16 v7; // dx + _DWORD *v8; // ecx + _DWORD *v9; // ebp + int v10; // ebx + char v11; // bl + char v12; // cl + __int16 *v14; // eax + __int16 v15; // ax + __int16 *v16; // eax + __int16 v17; // ax + bool v18; // zf + _DWORD *v19; // eax + char v20; // [esp+40h] [ebp-3Ch] + _DWORD *v21; // [esp+44h] [ebp-38h] + int v22; // [esp+58h] [ebp-24h] BYREF + int v23[8]; // [esp+5Ch] [ebp-20h] BYREF + + v23[0] = 0; + v8 = std::time_get>::_M_extract_num( + a1, + a2, + a3, + a4, + &v22, + 0, + 9999, + 4u, + a5, + v23); + v9 = v8; + if ( v23[0] ) + { + *a6 |= 4u; + } + else + { + v10 = v22 + 100; + if ( v22 >= 0 ) + v10 = v22 - 1900; + *(_DWORD *)(a7 + 20) = v10; + } + v11 = v7 == -1; + v20 = v11 & (v8 != 0); + if ( v20 ) + { + v16 = (__int16 *)v8[2]; + if ( (unsigned int)v16 >= v8[3] ) + { + v21 = v8; + v17 = (*(int (**)(void))(*v8 + 36))(); + v8 = v21; + } + else + { + v17 = *v16; + } + v18 = v17 == -1; + v11 = 0; + if ( v17 == -1 ) + v11 = v20; + v19 = 0; + if ( !v18 ) + v19 = v8; + v9 = v19; + } + v12 = a4 == -1; + if ( a3 && a4 == -1 ) + { + v14 = (__int16 *)a3[2]; + if ( (unsigned int)v14 >= a3[3] ) + v15 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v15 = *v14; + v12 = v15 == -1; + } + if ( v12 == v11 ) + *a6 |= 2u; + return v9; +} +// 48A8AD: variable 'v7' is possibly undefined +// 48A7F0: using guessed type int var_20[8]; + +//----- (0048A960) -------------------------------------------------------- +int __fastcall std::time_get>::get_weekday(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 20))(a1); +} + +//----- (0048A970) -------------------------------------------------------- +int std::time_get>::do_date_order() +{ + return 0; +} + +//----- (0048A980) -------------------------------------------------------- +int __fastcall std::time_get>::get_monthname(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 24))(a1); +} + +//----- (0048A990) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::_M_extract_num( + _DWORD *a1, + unsigned __int16 a2, + _DWORD *a3, + __int16 a4, + int *a5, + signed int a6, + int a7, + unsigned int a8, + int a9, + _DWORD *a10) +{ + unsigned int v10; // ebp + int v12; // eax + int v13; // edi + char v14; // dl + char v15; // bl + int v16; // edx + unsigned __int8 v17; // al + unsigned int v18; // eax + __int16 *v19; // eax + __int16 v20; // ax + __int16 *v21; // eax + __int16 v22; // ax + bool v23; // zf + _DWORD *v24; // eax + unsigned __int16 *v26; // eax + bool v27; // [esp+1Bh] [ebp-31h] + unsigned int v28; // [esp+1Ch] [ebp-30h] + void *v30; // [esp+24h] [ebp-28h] + char v32; // [esp+2Eh] [ebp-1Eh] + char v33; // [esp+2Fh] [ebp-1Dh] + + v10 = 10; + v30 = std::use_facet>(a9 + 108); + if ( a8 != 2 ) + { + v12 = 1; + if ( a8 == 4 ) + v12 = 1000; + v10 = v12; + } + v28 = 0; + v32 = a4 == -1; + v13 = 0; + while ( 1 ) + { + v27 = a2 == 0xFFFF; + v14 = v27 && a1 != 0; + if ( v14 ) + break; + v14 = a2 == 0xFFFF; + v15 = v32 & (a3 != 0); + if ( v15 ) + goto LABEL_26; +LABEL_7: + if ( v14 == v32 ) + goto LABEL_33; +LABEL_8: + if ( v28 >= a8 ) + goto LABEL_33; + if ( a1 && a2 == 0xFFFF ) + { + v26 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v26 >= a1[3] ) + v16 = (*(unsigned __int16 (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v16 = *v26; + if ( (_WORD)v16 == 0xFFFF ) + a1 = 0; + } + else + { + v16 = a2; + } + v17 = (*(int (__thiscall **)(void *, int, int))(*(_DWORD *)v30 + 48))(v30, v16, 42) - 48; + if ( v17 > 9u ) + goto LABEL_34; + v13 = (char)v17 + 10 * v13; + if ( (int)(v13 * v10) > a7 || (int)(v10 + v13 * v10) <= a6 ) + goto LABEL_34; + v18 = a1[2]; + v10 /= 0xAu; + if ( v18 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v18 + 2; + ++v28; + a2 = -1; + } + v19 = (__int16 *)a1[2]; + if ( (unsigned int)v19 >= a1[3] ) + { + v20 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v14 = v27 && a1 != 0; + } + else + { + v20 = *v19; + } + if ( v20 == -1 ) + a1 = 0; + if ( v20 != -1 ) + v14 = 0; + v15 = v32 & (a3 != 0); + if ( !v15 ) + goto LABEL_7; +LABEL_26: + v21 = (__int16 *)a3[2]; + if ( (unsigned int)v21 >= a3[3] ) + { + v33 = v14; + v22 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v14 = v33; + } + else + { + v22 = *v21; + } + v23 = v22 == -1; + v24 = 0; + if ( !v23 ) + v24 = a3; + a3 = v24; + if ( !v23 ) + v15 = 0; + if ( v14 != v15 ) + goto LABEL_8; +LABEL_33: + if ( v28 == a8 ) + { +LABEL_37: + *a5 = v13; + return a1; + } +LABEL_34: + if ( a8 == 4 && v28 == 2 ) + { + v13 -= 100; + goto LABEL_37; + } + *a10 |= 4u; + return a1; +} + +//----- (0048AC10) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_weekday( + _DWORD *a1, + int a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + int a7) +{ + _DWORD *v7; // eax + int v8; // ecx + int v9; // eax + __int16 v10; // dx + _DWORD *v11; // ecx + _DWORD *v12; // ebp + char v13; // bl + char v14; // si + char v15; // cl + __int16 *v17; // eax + __int16 v18; // ax + __int16 *v19; // eax + __int16 v20; // ax + _DWORD *v21; // [esp+40h] [ebp-6Ch] + unsigned int v22; // [esp+50h] [ebp-5Ch] BYREF + int v23; // [esp+54h] [ebp-58h] BYREF + int v24[21]; // [esp+58h] [ebp-54h] BYREF + + v23 = 0; + v7 = (_DWORD *)*((_DWORD *)std::use_facet>(a5 + 108) + 2); + v24[0] = v7[18]; + v24[1] = v7[19]; + v24[2] = v7[20]; + v24[3] = v7[21]; + v24[4] = v7[22]; + v24[5] = v7[23]; + v24[6] = v7[24]; + v24[7] = v7[11]; + v24[8] = v7[12]; + v24[9] = v7[13]; + v24[10] = v7[14]; + v24[11] = v7[15]; + v8 = v7[16]; + v9 = v7[17]; + v24[12] = v8; + v24[13] = v9; + v11 = std::time_get>::_M_extract_wday_or_month( + a1, + a2, + a3, + a4, + &v22, + (int)v24, + 7u, + a5, + &v23); + v12 = v11; + if ( v23 ) + *a6 |= 4u; + else + *(_DWORD *)(a7 + 24) = v22; + v13 = v10 == -1; + v14 = v13 & (v11 != 0); + if ( v14 ) + { + v19 = (__int16 *)v11[2]; + if ( (unsigned int)v19 >= v11[3] ) + { + v21 = v11; + v20 = (*(int (**)(void))(*v11 + 36))(); + v11 = v21; + } + else + { + v20 = *v19; + } + v13 = 0; + v12 = 0; + if ( v20 == -1 ) + v13 = v14; + if ( v20 != -1 ) + v12 = v11; + } + v15 = a4 == -1; + if ( a3 && a4 == -1 ) + { + v17 = (__int16 *)a3[2]; + if ( (unsigned int)v17 >= a3[3] ) + v18 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v18 = *v17; + v15 = v18 == -1; + } + if ( v13 == v15 ) + *a6 |= 2u; + return v12; +} +// 48AD3D: variable 'v10' is possibly undefined + +//----- (0048AE00) -------------------------------------------------------- +int __stdcall std::time_get>::_M_extract_name( + int *a1, + int a2, + _DWORD *a3, + int a4, + int **a5, + int a6, + int a7, + int a8, + _DWORD *a9) +{ + void *v9; // edi + int v10; // eax + void *v11; // esp + void *v12; // esp + int *v13; // edx + char v14; // bl + int v15; // eax + int v17; // ebx + int v18; // edx + size_t v19; // esi + __int16 v20; // ax + int v21; // ecx + int *v22; // edx + int *v23; // ebx + int *v24; // edi + size_t v25; // eax + unsigned int v26; // ebx + unsigned int v27; // esi + size_t v28; // eax + unsigned int v29; // edi + unsigned int v30; // eax + __int16 *v31; // eax + __int16 v32; // ax + bool v33; // zf + int v34; // eax + char v35; // di + char v36; // dl + int *v37; // ecx + size_t v38; // edi + int i; // eax + __int16 v40; // ax + __int16 *v41; // eax + unsigned int v42; // eax + int v43; // ebx + const wchar_t *v44; // edi + unsigned int v45; // ebx + int *v46; // esi + unsigned int v47; // eax + __int16 *v48; // eax + __int16 v49; // ax + char v50; // di + char v51; // dl + wchar_t v52; // di + __int16 v53; // ax + _WORD *v54; // eax + __int16 *v55; // eax + __int16 v56; // ax + bool v57; // zf + _DWORD *v58; // eax + int v59; // eax + __int16 *v60; // eax + __int16 v61; // ax + bool v62; // zf + int v63; // eax + char v64; // cl + __int16 *v65; // eax + __int16 v66; // ax + bool v67; // zf + _DWORD *v68; // eax + _WORD *v69; // eax + int v70; // eax + int v71; // eax + int v72; // eax + __int16 v73; // ax + __int16 *v74; // eax + __int16 v75; // ax + bool v76; // zf + _DWORD *v77; // eax + int v78; // [esp+10h] [ebp-38h] BYREF + _DWORD *v79; // [esp+14h] [ebp-34h] + bool v80; // [esp+1Bh] [ebp-2Dh] + int *v81; // [esp+1Ch] [ebp-2Ch] + int *v82; // [esp+20h] [ebp-28h] + int *v83; // [esp+24h] [ebp-24h] + const wchar_t *v84; // [esp+28h] [ebp-20h] + size_t v85; // [esp+2Ch] [ebp-1Ch] + + v81 = (int *)a4; + v78 = a2; + LOWORD(v84) = a2; + v82 = a1; + v79 = a3; + v9 = std::use_facet>(a8 + 108); + v10 = 16 * ((unsigned int)(4 * a7 + 27) >> 4); + v11 = alloca(v10); + v12 = alloca(v10); + v13 = &v78; + LOBYTE(v85) = (_WORD)a2 == 0xFFFF; + LOBYTE(v83) = v85 & (a1 != 0); + if ( (_BYTE)v83 ) + { + v60 = (__int16 *)a1[2]; + if ( (unsigned int)v60 >= a1[3] ) + { + v72 = *a1; + v82 = &v78; + v61 = (*(int (__fastcall **)(int *))(v72 + 36))(a1); + v13 = v82; + } + else + { + v61 = *v60; + } + v62 = v61 == -1; + v63 = 0; + v64 = (char)v83; + if ( !v62 ) + v63 = (int)a1; + v82 = (int *)v63; + if ( !v62 ) + v64 = 0; + LOBYTE(v83) = v64; + } + else + { + LOBYTE(v83) = v85; + } + v80 = (_WORD)v81 == 0xFFFF; + v14 = v80 && a3 != 0; + if ( v14 ) + { + v65 = (__int16 *)a3[2]; + if ( (unsigned int)v65 >= a3[3] ) + { + v71 = *a3; + v81 = v13; + v66 = (*(int (__fastcall **)(_DWORD *))(v71 + 36))(a3); + v13 = v81; + } + else + { + v66 = *v65; + } + v67 = v66 == -1; + v68 = 0; + if ( !v67 ) + v68 = a3; + v79 = v68; + if ( !v67 ) + v14 = 0; + } + else + { + v14 = v80; + } + if ( v14 == (_BYTE)v83 ) + goto LABEL_6; + if ( v82 && (_BYTE)v85 ) + { + v69 = (_WORD *)v82[2]; + if ( (unsigned int)v69 >= v82[3] ) + { + v83 = v13; + v73 = (*(int (__fastcall **)(int *))(*v82 + 36))(v82); + v13 = v83; + LOWORD(v85) = v73; + } + else + { + LOWORD(v85) = *v69; + } + v70 = 0; + if ( (_WORD)v85 != 0xFFFF ) + v70 = (int)v82; + v82 = (int *)v70; + } + else + { + LOWORD(v85) = (_WORD)v84; + } + if ( !a7 ) + goto LABEL_6; + v83 = v13; + v17 = 0; + v18 = a6; + v19 = 0; + do + { + while ( 1 ) + { + v21 = **(unsigned __int16 **)(v18 + 4 * v17); + if ( (_WORD)v21 == (_WORD)v85 ) + break; + a6 = v18; + v20 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v9 + 24))(v9, v21); + v18 = a6; + if ( v20 == (_WORD)v85 ) + break; + if ( a7 == ++v17 ) + goto LABEL_17; + } + v83[v19++] = v17++; + } + while ( a7 != v17 ); +LABEL_17: + v22 = v83; + v83 = 0; + if ( v19 <= 1 ) + goto LABEL_44; + v23 = v22; + do + { + v24 = v23; + v81 = (int *)*v23; + v25 = wcslen(*(const wchar_t **)(a6 + 4 * (_DWORD)v81)); + v85 = v19; + v26 = 1; + v27 = v25; + do + { + v28 = wcslen(*(const wchar_t **)(a6 + 4 * v24[v26])); + if ( v27 > v28 ) + v27 = v28; + ++v26; + } + while ( v26 < v85 ); + v23 = v24; + v29 = v27; + v19 = v85; + v30 = v82[2]; + if ( v30 >= v82[3] ) + (*(void (__fastcall **)(int *))(*v82 + 40))(v82); + else + v82[2] = v30 + 2; + v83 = (int *)((char *)v83 + 1); + if ( (unsigned int)v83 >= v29 ) + goto LABEL_73; + v31 = (__int16 *)v82[2]; + if ( (unsigned int)v31 >= v82[3] ) + v32 = (*(int (__fastcall **)(int *))(*v82 + 36))(v82); + else + v32 = *v31; + v33 = v32 == -1; + v34 = 0; + if ( !v33 ) + v34 = (int)v82; + v82 = (int *)v34; + v35 = v33; + v36 = v80 && v79 != 0; + if ( v36 ) + { + v55 = (__int16 *)v79[2]; + if ( (unsigned int)v55 >= v79[3] ) + { + LOBYTE(v85) = v80 && v79 != 0; + v56 = (*(int (__fastcall **)(_DWORD *))(*v79 + 36))(v79); + v36 = v85; + } + else + { + v56 = *v55; + } + v57 = v56 == -1; + v58 = 0; + if ( !v57 ) + v58 = v79; + v79 = v58; + if ( !v57 ) + v36 = 0; + if ( v35 == v36 ) + goto LABEL_73; + } + else if ( v33 == v80 ) + { + goto LABEL_73; + } + v37 = v82; + v38 = 0; + v84 = (const wchar_t *)(2 * (_DWORD)v83); + for ( i = (int)v81; ; i = v23[v38] ) + { + LOWORD(v85) = *(const wchar_t *)((char *)v84 + *(_DWORD *)(a6 + 4 * i)); + v40 = -1; + if ( v37 ) + { + v41 = (__int16 *)v37[2]; + if ( (unsigned int)v41 >= v37[3] ) + { + v59 = *v37; + v82 = v37; + v40 = (*(int (**)(void))(v59 + 36))(); + v37 = v82; + } + else + { + v40 = *v41; + } + if ( v40 == -1 ) + v37 = 0; + } + if ( (_WORD)v85 == v40 ) + break; + v23[v38] = v23[--v19]; + if ( v19 <= v38 ) + goto LABEL_42; +LABEL_34: + ; + } + if ( v19 > ++v38 ) + goto LABEL_34; +LABEL_42: + v82 = v37; + } + while ( v19 > 1 ); + LOWORD(v84) = -1; + v22 = v23; +LABEL_44: + if ( v19 == 1 ) + { + v42 = v82[2]; + if ( v42 >= v82[3] ) + { + v85 = (size_t)v22; + (*(void (__fastcall **)(int *))(*v82 + 40))(v82); + v22 = (int *)v85; + } + else + { + v82[2] = v42 + 2; + } + v43 = (int)v83; + v44 = *(const wchar_t **)(a6 + 4 * *v22); + v83 = (int *)*v22; + v45 = v43 + 1; + v85 = wcslen(v44); + if ( v45 < v85 ) + { + v84 = v44; + v46 = v82; + do + { + v48 = (__int16 *)v46[2]; + if ( (unsigned int)v48 >= v46[3] ) + v49 = (*(int (__fastcall **)(int *))(*v46 + 36))(v46); + else + v49 = *v48; + v50 = v49 == -1; + if ( v49 == -1 ) + v46 = 0; + v51 = v80 && v79 != 0; + if ( v51 ) + { + v74 = (__int16 *)v79[2]; + if ( (unsigned int)v74 >= v79[3] ) + { + LOBYTE(v82) = v80 && v79 != 0; + v75 = (*(int (__fastcall **)(_DWORD *))(*v79 + 36))(v79); + v51 = (char)v82; + } + else + { + v75 = *v74; + } + v76 = v75 == -1; + v77 = 0; + if ( !v76 ) + v77 = v79; + v79 = v77; + if ( !v76 ) + v51 = 0; + } + else + { + v51 = v80; + } + if ( v51 == v50 ) + goto LABEL_108; + v52 = v84[v45]; + v53 = -1; + if ( v46 ) + { + v54 = (_WORD *)v46[2]; + v53 = (unsigned int)v54 >= v46[3] ? (*(int (__fastcall **)(int *))(*v46 + 36))(v46) : *v54; + if ( v53 == -1 ) + v46 = 0; + } + if ( v52 != v53 ) + { +LABEL_108: + v82 = v46; + LOWORD(v84) = -1; + goto LABEL_6; + } + v47 = v46[2]; + if ( v47 >= v46[3] ) + (*(void (__fastcall **)(int *))(*v46 + 40))(v46); + else + v46[2] = v47 + 2; + ++v45; + } + while ( v45 < v85 ); + v82 = v46; + } + if ( v85 == v45 ) + { + *a5 = v83; + LOWORD(v84) = -1; + goto LABEL_7; + } +LABEL_73: + LOWORD(v84) = -1; + } +LABEL_6: + *a9 |= 4u; +LABEL_7: + HIWORD(v15) = HIWORD(v78); + LOWORD(v15) = (_WORD)v84; + v78 = v15; + return (int)v82; +} + +//----- (0048B350) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_monthname( + _DWORD *a1, + int a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + int a7) +{ + _DWORD *v7; // eax + int v8; // ecx + int v9; // ecx + __int16 v10; // dx + _DWORD *v11; // ecx + _DWORD *v12; // ebp + char v13; // bl + char v14; // si + char v15; // cl + __int16 *v17; // eax + __int16 v18; // ax + __int16 *v19; // eax + __int16 v20; // ax + _DWORD *v21; // [esp+40h] [ebp-9Ch] + unsigned int v22; // [esp+58h] [ebp-84h] BYREF + int v23; // [esp+5Ch] [ebp-80h] BYREF + int v24[31]; // [esp+60h] [ebp-7Ch] BYREF + + v7 = (_DWORD *)*((_DWORD *)std::use_facet>(a5 + 108) + 2); + v24[0] = v7[37]; + v24[1] = v7[38]; + v24[2] = v7[39]; + v24[3] = v7[40]; + v24[4] = v7[41]; + v24[5] = v7[42]; + v24[6] = v7[43]; + v24[7] = v7[44]; + v24[8] = v7[45]; + v24[9] = v7[46]; + v24[10] = v7[47]; + v24[11] = v7[48]; + v24[12] = v7[25]; + v24[13] = v7[26]; + v24[14] = v7[27]; + v24[15] = v7[28]; + v8 = v7[29]; + v23 = 0; + v24[16] = v8; + v24[17] = v7[30]; + v24[18] = v7[31]; + v24[19] = v7[32]; + v24[20] = v7[33]; + v24[21] = v7[34]; + v9 = v7[35]; + v24[23] = v7[36]; + v24[22] = v9; + v11 = std::time_get>::_M_extract_wday_or_month( + a1, + a2, + a3, + a4, + &v22, + (int)v24, + 0xCu, + a5, + &v23); + v12 = v11; + if ( v23 ) + *a6 |= 4u; + else + *(_DWORD *)(a7 + 16) = v22; + v13 = v10 == -1; + v14 = v13 & (v11 != 0); + if ( v14 ) + { + v19 = (__int16 *)v11[2]; + if ( (unsigned int)v19 >= v11[3] ) + { + v21 = v11; + v20 = (*(int (**)(void))(*v11 + 36))(); + v11 = v21; + } + else + { + v20 = *v19; + } + v13 = 0; + v12 = 0; + if ( v20 == -1 ) + v13 = v14; + if ( v20 != -1 ) + v12 = v11; + } + v15 = a4 == -1; + if ( a3 && a4 == -1 ) + { + v17 = (__int16 *)a3[2]; + if ( (unsigned int)v17 >= a3[3] ) + v18 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v18 = *v17; + v15 = v18 == -1; + } + if ( v13 == v15 ) + *a6 |= 2u; + return v12; +} +// 48B51A: variable 'v10' is possibly undefined + +//----- (0048B5E0) -------------------------------------------------------- +int *__stdcall std::time_get>::_M_extract_via_format( + int *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7, + wchar_t *String) +{ + int v8; // ebp + void *v9; // esi + size_t v10; // edi + char v11; // dl + char v12; // bl + size_t v13; // ebx + char v14; // al + unsigned __int8 v15; // al + wchar_t v16; // bx + unsigned __int16 v17; // ax + __int16 *v19; // eax + __int16 v20; // ax + bool v21; // zf + int *v22; // eax + __int16 *v23; // eax + __int16 v24; // ax + bool v25; // zf + _DWORD *v26; // eax + unsigned int v27; // eax + unsigned __int16 *v28; // eax + int *v29; // edi + unsigned __int16 v30; // dx + int *v31; // eax + _DWORD *v32; // eax + int *v33; // eax + unsigned __int16 v34; // dx + _DWORD *v35; // eax + int *v36; // eax + unsigned __int16 v37; // dx + unsigned __int16 v38; // dx + int *v39; // eax + unsigned __int16 v40; // dx + unsigned __int16 v41; // dx + unsigned __int16 v42; // dx + unsigned __int16 v43; // dx + unsigned __int16 v44; // ax + int *v45; // eax + unsigned __int16 v46; // dx + unsigned __int16 v47; // di + char v48; // dl + char v49; // bl + unsigned __int16 v50; // bx + _DWORD *v51; // eax + unsigned __int16 v52; // dx + unsigned __int16 v53; // dx + int *v54; // eax + unsigned __int16 v55; // dx + int *v56; // eax + unsigned __int16 v57; // dx + unsigned __int16 v58; // dx + _DWORD *v59; // eax + _DWORD *v60; // eax + unsigned __int16 v61; // dx + unsigned __int16 v62; // ax + unsigned int v63; // eax + unsigned __int16 v64; // dx + unsigned __int16 v65; // dx + unsigned __int16 v66; // ax + unsigned int v67; // eax + unsigned __int16 v68; // ax + unsigned __int16 v69; // dx + unsigned __int16 *v70; // eax + int *v71; // edi + unsigned __int16 *v72; // eax + int *v73; // edi + unsigned __int16 *v74; // eax + int *v75; // edi + unsigned __int16 *v76; // eax + int *v77; // edi + __int16 *v78; // eax + __int16 v79; // ax + bool v80; // zf + _DWORD *v81; // eax + _WORD *v82; // edx + __int16 v83; // ax + unsigned __int16 *v84; // eax + int *v85; // eax + unsigned __int16 *v86; // eax + int *v87; // eax + bool v88; // [esp+5Fh] [ebp-12Dh] + bool v89; // [esp+5Fh] [ebp-12Dh] + size_t v92; // [esp+68h] [ebp-124h] + char v93; // [esp+68h] [ebp-124h] + size_t v94; // [esp+6Ch] [ebp-120h] + bool v95; // [esp+70h] [ebp-11Ch] + _DWORD *v96; // [esp+7Ch] [ebp-110h] + unsigned __int16 v97; // [esp+80h] [ebp-10Ch] + unsigned __int16 v98; // [esp+84h] [ebp-108h] + bool v99; // [esp+86h] [ebp-106h] + char v100; // [esp+87h] [ebp-105h] + int v101; // [esp+138h] [ebp-54h] BYREF + int *v102; // [esp+13Ch] [ebp-50h] BYREF + wchar_t v103[2]; // [esp+140h] [ebp-4Ch] BYREF + int v104; // [esp+144h] [ebp-48h] + int v105; // [esp+148h] [ebp-44h] + int v106; // [esp+14Ch] [ebp-40h] + int v107; // [esp+150h] [ebp-3Ch] + int v108; // [esp+154h] [ebp-38h] + int v109; // [esp+158h] [ebp-34h] + int v110; // [esp+15Ch] [ebp-30h] + int v111; // [esp+160h] [ebp-2Ch] + int v112; // [esp+164h] [ebp-28h] + int v113; // [esp+168h] [ebp-24h] + int v114; // [esp+16Ch] [ebp-20h] + + HIWORD(v8) = HIWORD(a2); + v98 = a2; + v96 = std::use_facet>(a5 + 108); + v9 = std::use_facet>(a5 + 108); + v101 = 0; + v94 = wcslen(String); + v99 = (_WORD)a4 == 0xFFFF; + v10 = 0; + while ( 1 ) + { + v88 = v98 == 0xFFFF; + v11 = v88 && a1 != 0; + if ( v11 ) + { + v19 = (__int16 *)a1[2]; + if ( (unsigned int)v19 >= a1[3] ) + { + v20 = (*(int (__fastcall **)(int *))(*a1 + 36))(a1); + v11 = v88 && a1 != 0; + } + else + { + v20 = *v19; + } + v21 = v20 == -1; + v22 = 0; + if ( !v21 ) + v22 = a1; + a1 = v22; + if ( !v21 ) + v11 = 0; + v12 = v99 && a3 != 0; + if ( !v12 ) + { +LABEL_4: + v12 = (_WORD)a4 == 0xFFFF; + goto LABEL_5; + } + } + else + { + v11 = v98 == 0xFFFF; + v12 = v99 && a3 != 0; + if ( !v12 ) + goto LABEL_4; + } + v23 = (__int16 *)a3[2]; + if ( (unsigned int)v23 >= a3[3] ) + { + v93 = v11; + v24 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v11 = v93; + } + else + { + v24 = *v23; + } + v25 = v24 == -1; + v26 = 0; + if ( !v25 ) + v26 = a3; + a3 = v26; + if ( !v25 ) + v12 = 0; +LABEL_5: + if ( v11 == v12 || v10 >= v94 ) + break; + if ( v101 ) + goto LABEL_22; + v13 = v10; + v92 = v10 + 1; + if ( (*(unsigned __int8 (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v9 + 48))(v9, String[v10], 0) == 37 ) + { + v14 = (*(int (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v9 + 48))(v9, String[v13 + 1], 0); + v102 = 0; + if ( v14 == 69 || v14 == 79 ) + { + v92 = v10 + 2; + v15 = (*(int (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v9 + 48))(v9, String[v13 + 2], 0) - 65; + if ( v15 > 0x38u ) + { +LABEL_19: + v101 |= 4u; + goto LABEL_20; + } + } + else + { + v15 = v14 - 65; + } + switch ( v15 ) + { + case 0u: + LOWORD(v8) = v98; + v59 = (_DWORD *)v96[2]; + *(_DWORD *)v103 = v59[11]; + v104 = v59[12]; + v105 = v59[13]; + v106 = v59[14]; + v107 = v59[15]; + v108 = v59[16]; + v109 = v59[17]; + v36 = (int *)std::time_get>::_M_extract_name( + a1, + v8, + a3, + a4, + &v102, + (int)v103, + 7, + a5, + &v101); + goto LABEL_56; + case 1u: + LOWORD(v8) = v98; + v60 = (_DWORD *)v96[2]; + *(_DWORD *)v103 = v60[25]; + v104 = v60[26]; + v105 = v60[27]; + v106 = v60[28]; + v107 = v60[29]; + v108 = v60[30]; + v109 = v60[31]; + v110 = v60[32]; + v111 = v60[33]; + v112 = v60[34]; + v113 = v60[35]; + v114 = v60[36]; + v33 = (int *)std::time_get>::_M_extract_name( + a1, + v8, + a3, + a4, + &v102, + (int)v103, + 12, + a5, + &v101); + goto LABEL_53; + case 2u: + case 0x18u: + case 0x38u: + a1 = std::time_get>::_M_extract_num( + a1, + v98, + a3, + a4, + (int *)&v102, + 0, + 9999, + 4u, + a5, + &v101); + v98 = v30; + if ( !v101 ) + { + v31 = v102 - 475; + if ( (int)v102 < 0 ) + v31 = v102 + 25; + a7[5] = v31; + } + break; + case 3u: + (*(void (__thiscall **)(void *, const char *, const char *, wchar_t *))(*(_DWORD *)v9 + 44))( + v9, + "%m/%d/%y", + "%H:%M", + v103); + LOWORD(v8) = v98; + a1 = (int *)std::time_get>::_M_extract_via_format( + (int)a1, + v8, + (int)a3, + a4, + a5, + (int)&v101, + (int)a7, + v103); + v98 = v61; + break; + case 7u: + v54 = std::time_get>::_M_extract_num( + a1, + v98, + a3, + a4, + (int *)&v102, + 0, + 23, + 2u, + a5, + &v101); + goto LABEL_83; + case 8u: + v54 = std::time_get>::_M_extract_num( + a1, + v98, + a3, + a4, + (int *)&v102, + 1, + 12, + 2u, + a5, + &v101); +LABEL_83: + a1 = v54; + v98 = v55; + if ( !v101 ) + a7[2] = v102; + break; + case 0xCu: + v56 = std::time_get>::_M_extract_num( + a1, + v98, + a3, + a4, + (int *)&v102, + 0, + 59, + 2u, + a5, + &v101); + v98 = v57; + a1 = v56; + if ( !v101 ) + a7[1] = v102; + break; + case 0x11u: + (*(void (__thiscall **)(void *, const char *, const char *, wchar_t *))(*(_DWORD *)v9 + 44))( + v9, + "%H:%M", + "%H:%M:%S", + v103); + LOWORD(v8) = v98; + a1 = (int *)std::time_get>::_M_extract_via_format( + (int)a1, + v8, + (int)a3, + a4, + a5, + (int)&v101, + (int)a7, + v103); + v98 = v58; + break; + case 0x12u: + a1 = std::time_get>::_M_extract_num( + a1, + v98, + a3, + a4, + (int *)&v102, + 0, + 60, + 2u, + a5, + &v101); + v98 = v41; + if ( !v101 ) + *a7 = v102; + break; + case 0x13u: + (*(void (__thiscall **)(void *, const char *, void *, wchar_t *))(*(_DWORD *)v9 + 44))( + v9, + "%H:%M:%S", + &unk_5576EE, + v103); + LOWORD(v8) = v98; + a1 = (int *)std::time_get>::_M_extract_via_format( + (int)a1, + v8, + (int)a3, + a4, + a5, + (int)&v101, + (int)a7, + v103); + v98 = v42; + break; + case 0x17u: + LOWORD(v8) = v98; + a1 = (int *)std::time_get>::_M_extract_via_format( + (int)a1, + v8, + (int)a3, + a4, + a5, + (int)&v101, + (int)a7, + *(wchar_t **)(v96[2] + 16)); + v98 = v43; + break; + case 0x19u: + if ( a1 && v98 == 0xFFFF ) + { + v76 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v76 >= a1[3] ) + v44 = (*(int (__fastcall **)(int *))(*a1 + 36))(a1); + else + v44 = *v76; + v77 = 0; + if ( v44 != 0xFFFF ) + v77 = a1; + a1 = v77; + } + else + { + v44 = v98; + } + if ( !(*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v9 + 8))(v9, 1, v44) ) + goto LABEL_19; + LOWORD(v8) = v98; + v45 = (int *)std::time_get>::_M_extract_name( + a1, + v8, + a3, + a4, + (int **)v103, + (int)std::__timepunct_cache::_S_timezones, + 14, + a5, + &v101); + v47 = v46; + v89 = v46 == 0xFFFF; + v97 = v46; + a1 = v45; + v48 = v89; + v98 = v47; + v95 = v89 && v45 != 0; + if ( v95 ) + { + v82 = (_WORD *)v45[2]; + v83 = (unsigned int)v82 >= v45[3] ? (*(int (__fastcall **)(int *))(*v45 + 36))(v45) : *v82; + v48 = 0; + if ( v83 == -1 ) + { + v48 = v95; + a1 = 0; + v95 = 0; + } + } + v49 = v99 && a3 != 0; + if ( v49 ) + { + v78 = (__int16 *)a3[2]; + if ( (unsigned int)v78 >= a3[3] ) + { + v100 = v48; + v79 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v48 = v100; + } + else + { + v79 = *v78; + } + v80 = v79 == -1; + v81 = 0; + if ( !v80 ) + v81 = a3; + a3 = v81; + if ( !v80 ) + v49 = 0; + } + else + { + v49 = (_WORD)a4 == 0xFFFF; + } + if ( v48 != v49 && !(*(_DWORD *)v103 | v101) ) + { + v50 = v47; + if ( v95 ) + { + v84 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v84 >= a1[3] ) + v50 = (*(int (__fastcall **)(int *))(*a1 + 36))(a1); + else + v50 = *v84; + v85 = 0; + if ( v50 != 0xFFFF ) + v85 = a1; + a1 = v85; + } + if ( (*(unsigned __int16 (__thiscall **)(void *, int))(*(_DWORD *)v9 + 40))(v9, 45) == v50 ) + goto LABEL_81; + if ( a1 && v89 ) + { + v86 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v86 >= a1[3] ) + v47 = (*(int (__fastcall **)(int *))(*a1 + 36))(a1); + else + v47 = *v86; + v87 = 0; + if ( v47 != 0xFFFF ) + v87 = a1; + a1 = v87; + } + if ( (*(unsigned __int16 (__thiscall **)(void *, int))(*(_DWORD *)v9 + 40))(v9, 43) == v47 ) + { +LABEL_81: + v51 = std::time_get>::_M_extract_num( + a1, + v97, + a3, + a4, + (int *)v103, + 0, + 23, + 2u, + a5, + &v101); + a1 = std::time_get>::_M_extract_num( + v51, + v52, + a3, + a4, + (int *)v103, + 0, + 59, + 2u, + a5, + &v101); + v98 = v53; + } + } + break; + case 0x20u: + LOWORD(v8) = v98; + v35 = (_DWORD *)v96[2]; + *(_DWORD *)v103 = v35[18]; + v104 = v35[19]; + v105 = v35[20]; + v106 = v35[21]; + v107 = v35[22]; + v108 = v35[23]; + v109 = v35[24]; + v36 = (int *)std::time_get>::_M_extract_name( + a1, + v8, + a3, + a4, + &v102, + (int)v103, + 7, + a5, + &v101); +LABEL_56: + a1 = v36; + v98 = v37; + if ( !v101 ) + a7[6] = v102; + break; + case 0x21u: + case 0x27u: + LOWORD(v8) = v98; + v32 = (_DWORD *)v96[2]; + *(_DWORD *)v103 = v32[37]; + v104 = v32[38]; + v105 = v32[39]; + v106 = v32[40]; + v107 = v32[41]; + v108 = v32[42]; + v109 = v32[43]; + v110 = v32[44]; + v111 = v32[45]; + v112 = v32[46]; + v113 = v32[47]; + v114 = v32[48]; + v33 = (int *)std::time_get>::_M_extract_name( + a1, + v8, + a3, + a4, + &v102, + (int)v103, + 12, + a5, + &v101); +LABEL_53: + a1 = v33; + v98 = v34; + if ( !v101 ) + a7[4] = v102; + break; + case 0x22u: + LOWORD(v8) = v98; + a1 = (int *)std::time_get>::_M_extract_via_format( + (int)a1, + v8, + (int)a3, + a4, + a5, + (int)&v101, + (int)a7, + *(wchar_t **)(v96[2] + 24)); + v98 = v38; + break; + case 0x23u: + v39 = std::time_get>::_M_extract_num( + a1, + v98, + a3, + a4, + (int *)&v102, + 1, + 31, + 2u, + a5, + &v101); + goto LABEL_60; + case 0x24u: + if ( a1 && v98 == 0xFFFF ) + { + v74 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v74 >= a1[3] ) + v62 = (*(int (__fastcall **)(int *))(*a1 + 36))(a1); + else + v62 = *v74; + v75 = 0; + if ( v62 != 0xFFFF ) + v75 = a1; + a1 = v75; + } + else + { + v62 = v98; + } + if ( (*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v9 + 8))(v9, 32, v62) ) + { + v63 = a1[2]; + if ( v63 >= a1[3] ) + (*(void (__fastcall **)(int *))(*a1 + 40))(a1); + else + a1[2] = v63 + 2; + a1 = std::time_get>::_M_extract_num( + a1, + 0xFFFFu, + a3, + a4, + (int *)&v102, + 1, + 9, + 1u, + a5, + &v101); + v98 = v64; + } + else + { + v39 = std::time_get>::_M_extract_num( + a1, + v98, + a3, + a4, + (int *)&v102, + 10, + 31, + 2u, + a5, + &v101); +LABEL_60: + a1 = v39; + v98 = v40; + } + if ( !v101 ) + a7[3] = v102; + break; + case 0x2Cu: + a1 = std::time_get>::_M_extract_num( + a1, + v98, + a3, + a4, + (int *)&v102, + 1, + 12, + 2u, + a5, + &v101); + v98 = v65; + if ( !v101 ) + a7[4] = (char *)v102 - 1; + break; + case 0x2Du: + if ( a1 && v98 == 0xFFFF ) + { + v70 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v70 >= a1[3] ) + v66 = (*(int (__fastcall **)(int *))(*a1 + 36))(a1); + else + v66 = *v70; + v71 = 0; + if ( v66 != 0xFFFF ) + v71 = a1; + a1 = v71; + } + else + { + v66 = v98; + } + if ( (*(unsigned __int8 (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v9 + 48))(v9, v66, 0) != 10 ) + goto LABEL_19; + goto LABEL_105; + case 0x33u: + if ( a1 && v98 == 0xFFFF ) + { + v72 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v72 >= a1[3] ) + v68 = (*(int (__fastcall **)(int *))(*a1 + 36))(a1); + else + v68 = *v72; + v73 = 0; + if ( v68 != 0xFFFF ) + v73 = a1; + a1 = v73; + } + else + { + v68 = v98; + } + if ( (*(unsigned __int8 (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v9 + 48))(v9, v68, 0) != 9 ) + goto LABEL_19; +LABEL_105: + v67 = a1[2]; + if ( v67 >= a1[3] ) + (*(void (__fastcall **)(int *))(*a1 + 40))(a1); + else + a1[2] = v67 + 2; + v98 = -1; + break; + case 0x37u: + LOWORD(v8) = v98; + a1 = (int *)std::time_get>::_M_extract_via_format( + (int)a1, + v8, + (int)a3, + a4, + a5, + (int)&v101, + (int)a7, + *(wchar_t **)(v96[2] + 8)); + v98 = v69; + break; + default: + goto LABEL_19; + } +LABEL_20: + v10 = v92 + 1; + } + else + { + v16 = String[v10]; + if ( a1 && v98 == 0xFFFF ) + { + v28 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v28 >= a1[3] ) + v17 = (*(int (__fastcall **)(int *))(*a1 + 36))(a1); + else + v17 = *v28; + v29 = 0; + if ( v17 != 0xFFFF ) + v29 = a1; + a1 = v29; + } + else + { + v17 = v98; + } + if ( v16 == v17 ) + { + v27 = a1[2]; + if ( v27 >= a1[3] ) + (*(void (__fastcall **)(int *))(*a1 + 40))(a1); + else + a1[2] = v27 + 2; + v10 = v92; + v98 = -1; + } + else + { + v101 |= 4u; + v10 = v92; + } + } + } + if ( v10 != v94 || v101 ) +LABEL_22: + *a6 |= 4u; + return a1; +} +// 48B963: variable 'v30' is possibly undefined +// 48BAB7: variable 'v34' is possibly undefined +// 48BBA3: variable 'v37' is possibly undefined +// 48BC36: variable 'v38' is possibly undefined +// 48BCBA: variable 'v40' is possibly undefined +// 48BD65: variable 'v41' is possibly undefined +// 48BE11: variable 'v42' is possibly undefined +// 48BE8B: variable 'v43' is possibly undefined +// 48BF2C: variable 'v46' is possibly undefined +// 48C0A5: variable 'v52' is possibly undefined +// 48C0BC: variable 'v53' is possibly undefined +// 48C151: variable 'v55' is possibly undefined +// 48C25B: variable 'v57' is possibly undefined +// 48C31A: variable 'v58' is possibly undefined +// 48C56F: variable 'v61' is possibly undefined +// 48C640: variable 'v64' is possibly undefined +// 48C6CB: variable 'v65' is possibly undefined +// 48C7F8: variable 'v69' is possibly undefined +// 53F6A0: using guessed type wchar_t *std::__timepunct_cache::_S_timezones[3]; + +//----- (0048CAC0) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::_M_extract_wday_or_month( + _DWORD *a1, + int a2, + _DWORD *a3, + __int16 a4, + unsigned int *a5, + int a6, + unsigned int a7, + int a8, + _DWORD *a9) +{ + int v9; // eax + void *v10; // esp + void *v11; // esp + char v12; // dl + char v13; // di + char v14; // bl + unsigned int v15; // edi + int *v16; // esi + char v17; // dl + char v18; // bl + unsigned int v19; // edx + unsigned int *v20; // ecx + int v21; // ebx + unsigned int v22; // eax + __int16 *v23; // eax + __int16 v24; // ax + bool v25; // zf + _DWORD *v26; // eax + __int16 *v28; // eax + __int16 v29; // ax + bool v30; // zf + _DWORD *v31; // eax + __int16 *v32; // eax + _DWORD *v33; // eax + unsigned int v34; // eax + __int16 v35; // si + int v36; // edx + int v37; // ebx + int v38; // edi + __int16 v39; // ax + int v40; // ecx + unsigned int v41; // eax + unsigned int v42; // eax + int v43; // eax + void *v44; // esp + void *v45; // esp + int v46; // ebx + __int16 *v47; // eax + __int16 v48; // ax + bool v49; // zf + _DWORD *v50; // eax + _WORD *v51; // eax + __int16 v52; // ax + __int16 *v53; // eax + _DWORD *v54; // eax + int v55; // eax + _DWORD v56[2]; // [esp+10h] [ebp-48h] BYREF + _DWORD *v57; // [esp+18h] [ebp-40h] + char v58; // [esp+1Fh] [ebp-39h] + _DWORD *v59; // [esp+20h] [ebp-38h] + unsigned int v60; // [esp+24h] [ebp-34h] + __int16 v61; // [esp+28h] [ebp-30h] + __int16 v62; // [esp+2Ah] [ebp-2Eh] + int v63; // [esp+2Ch] [ebp-2Ch] + int *v64; // [esp+30h] [ebp-28h] + int *v65; // [esp+34h] [ebp-24h] + unsigned int v66; // [esp+38h] [ebp-20h] + unsigned int v67; // [esp+3Ch] [ebp-1Ch] + + v59 = a1; + v56[1] = a2; + v61 = a2; + v57 = a3; + v64 = (int *)std::use_facet>(a8 + 108); + v9 = 16 * ((8 * a7 + 27) >> 4); + v10 = alloca(v9); + v11 = alloca(v9); + v12 = (_WORD)a2 == 0xFFFF; + v65 = v56; + v13 = v12 & (a1 != 0); + if ( v13 ) + { + v51 = (_WORD *)v59[2]; + v52 = (unsigned int)v51 >= v59[3] ? (*(int (__fastcall **)(_DWORD *))(*v59 + 36))(v59) : *v51; + v12 = 0; + if ( v52 == -1 ) + { + v12 = v13; + v59 = 0; + v13 = 0; + } + } + v58 = a4 == -1; + v14 = v58 & (a3 != 0); + if ( v14 ) + { + v47 = (__int16 *)a3[2]; + if ( (unsigned int)v47 >= a3[3] ) + { + v55 = *a3; + LOBYTE(v67) = v12; + v48 = (*(int (__fastcall **)(_DWORD *))(v55 + 36))(a3); + v12 = v67; + } + else + { + v48 = *v47; + } + v49 = v48 == -1; + v50 = 0; + if ( !v49 ) + v50 = a3; + v57 = v50; + if ( !v49 ) + v14 = 0; + } + else + { + v14 = v58; + } + if ( v12 == v14 ) + { + v66 = 0; + v15 = 0; + v16 = 0; + goto LABEL_6; + } + v35 = v61; + if ( v13 ) + { + v53 = (__int16 *)v59[2]; + if ( (unsigned int)v53 >= v59[3] ) + v35 = (*(int (__fastcall **)(_DWORD *))(*v59 + 36))(v59); + else + v35 = *v53; + v54 = 0; + if ( v35 != -1 ) + v54 = v59; + v59 = v54; + } + v15 = 2 * a7; + if ( !(2 * a7) ) + { + v66 = 0; + v16 = 0; + goto LABEL_6; + } + v67 = 2 * a7; + v36 = a6; + v37 = 0; + v66 = 0; + v38 = (int)v64; + do + { + while ( 1 ) + { + v40 = **(unsigned __int16 **)(v36 + 4 * v37); + if ( (_WORD)v40 == v35 ) + break; + a6 = v36; + v39 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v38 + 24))(v38, v40); + v36 = a6; + if ( v39 == v35 ) + break; + if ( ++v37 == v67 ) + goto LABEL_62; + } + v41 = v66; + v65[v66] = v37++; + v66 = v41 + 1; + } + while ( v37 != v67 ); +LABEL_62: + v15 = 0; + v16 = 0; + if ( v66 ) + { + v42 = v59[2]; + if ( v42 >= v59[3] ) + (*(void (__fastcall **)(_DWORD *, int))(*v59 + 40))(v59, v36); + else + v59[2] = v42 + 2; + v43 = 16 * ((4 * v66 + 27) >> 4); + v44 = alloca(v43); + v15 = 0; + v45 = alloca(v43); + v64 = v56; + v67 = (unsigned int)v56; + v46 = (int)v65; + do + { + *(_DWORD *)(v67 + 4 * v15) = wcslen(*(const wchar_t **)(a6 + 4 * *(_DWORD *)(v46 + 4 * v15))); + ++v15; + } + while ( v66 != v15 ); + v66 = 1; + v16 = v64; + v61 = -1; + } +LABEL_6: + while ( 2 ) + { + LOBYTE(v67) = v61 == -1; + v17 = v67 & (v59 != 0); + if ( v17 ) + { + v28 = (__int16 *)v59[2]; + if ( (unsigned int)v28 >= v59[3] ) + { + LOBYTE(v64) = v67 & (v59 != 0); + v29 = (*(int (__fastcall **)(_DWORD *))(*v59 + 36))(v59); + v17 = (char)v64; + } + else + { + v29 = *v28; + } + v30 = v29 == -1; + v31 = 0; + if ( !v30 ) + v31 = v59; + v59 = v31; + if ( !v30 ) + v17 = 0; + } + else + { + v17 = v67; + } + v18 = v58 & (v57 != 0); + if ( v18 ) + { + v23 = (__int16 *)v57[2]; + if ( (unsigned int)v23 >= v57[3] ) + { + LOBYTE(v64) = v17; + v24 = (*(int (__fastcall **)(_DWORD *))(*v57 + 36))(v57); + v17 = (char)v64; + } + else + { + v24 = *v23; + } + v25 = v24 == -1; + v26 = 0; + if ( !v25 ) + v26 = v57; + v57 = v26; + if ( !v25 ) + v18 = 0; + if ( v17 == v18 ) + break; + } + else if ( v17 == v58 ) + { + break; + } + if ( v59 && (_BYTE)v67 ) + { + v32 = (__int16 *)v59[2]; + if ( (unsigned int)v32 >= v59[3] ) + v62 = (*(int (__fastcall **)(_DWORD *))(*v59 + 36))(v59); + else + v62 = *v32; + v33 = 0; + if ( v62 != -1 ) + v33 = v59; + v59 = v33; + } + else + { + v62 = v61; + } + if ( !v15 ) + { +LABEL_34: + *a9 |= 4u; + return v59; + } + v67 = (unsigned int)v16; + v19 = 0; + v63 = 0; + v60 = 2 * v66; + do + { + while ( 1 ) + { + v20 = (unsigned int *)(v67 + 4 * v19); + if ( *v20 > v66 ) + break; + ++v63; + ++v19; +LABEL_16: + if ( v19 >= v15 ) + goto LABEL_20; + } + v21 = v65[v19]; + v64 = &v65[v19]; + if ( *(_WORD *)(*(_DWORD *)(a6 + 4 * v21) + v60) == v62 ) + { + ++v19; + goto LABEL_16; + } + *v64 = v65[--v15]; + *v20 = *(_DWORD *)(v67 + 4 * v15); + } + while ( v19 < v15 ); +LABEL_20: + v16 = (int *)v67; + if ( v15 != v63 ) + { + v22 = v59[2]; + if ( v22 >= v59[3] ) + (*(void (__fastcall **)(_DWORD *))(*v59 + 40))(v59); + else + v59[2] = v22 + 2; + ++v66; + v61 = -1; + continue; + } + break; + } + if ( v15 != 1 ) + { + if ( v15 == 2 && (*v16 == v66 || v16[1] == v66) ) + goto LABEL_52; + goto LABEL_34; + } + if ( *v16 != v66 ) + goto LABEL_34; +LABEL_52: + v34 = *v65; + if ( *v65 >= a7 ) + v34 = *v65 - a7; + *a5 = v34; + return v59; +} + +//----- (0048CF80) -------------------------------------------------------- +int *__thiscall std::time_get>::get( + void *this, + int *a2, + int a3, + _DWORD *a4, + int a5, + int a6, + _DWORD *a7, + _DWORD *a8, + unsigned __int16 *a9, + unsigned __int16 *a10) +{ + unsigned __int16 *v10; // ebp + void *v12; // ebx + int v13; // edx + __int16 v14; // si + int v15; // edx + __int16 v16; // si + unsigned int v17; // eax + char v18; // si + char v19; // dl + char v20; // si + int v21; // eax + int *(__stdcall *v22)(int *, int, _DWORD *, int, int, _DWORD *, _DWORD *, char, char); // edx + int v23; // eax + void *v24; // eax + int *v25; // esi + unsigned __int16 v26; // dx + char v27; // dl + char v28; // bp + char v29; // al + unsigned __int16 *i; // ebp + void *v32; // ebp + char v33; // dl + char v34; // bl + int v35; // edx + unsigned int v36; // eax + bool v37; // si + __int16 *v38; // eax + __int16 v39; // ax + __int16 *v40; // eax + __int16 v41; // ax + bool v42; // zf + _DWORD *v43; // eax + unsigned __int16 *v44; // eax + char v45; // dl + __int16 *v46; // eax + __int16 v47; // ax + bool v48; // zf + _DWORD *v49; // eax + __int16 *v50; // eax + __int16 v51; // ax + int v52; // ecx + int v53; // ebp + unsigned __int16 v54; // dx + unsigned __int16 *v55; // eax + __int16 *v56; // eax + __int16 v57; // ax + __int16 *v58; // eax + __int16 v59; // ax + unsigned __int16 *v60; // eax + unsigned __int16 v61; // [esp+5Eh] [ebp-4Ah] + unsigned __int16 *v63; // [esp+64h] [ebp-44h] + char v64; // [esp+64h] [ebp-44h] + int v65; // [esp+68h] [ebp-40h] + int v66; // [esp+6Ch] [ebp-3Ch] + char v68; // [esp+74h] [ebp-34h] + char v69; // [esp+75h] [ebp-33h] + char v70; // [esp+75h] [ebp-33h] + wchar_t v71; // [esp+84h] [ebp-24h] BYREF + __int16 v72; // [esp+86h] [ebp-22h] + __int16 v73; // [esp+88h] [ebp-20h] + __int16 v74; // [esp+8Ah] [ebp-1Eh] + unsigned __int16 *v75; // [esp+C8h] [ebp+20h] + + v10 = a9; + HIWORD(v65) = HIWORD(a3); + v61 = a3; + HIWORD(v66) = HIWORD(a5); + v12 = std::use_facet>(a6 + 108); + *a7 = 0; + if ( a9 != a10 ) + { + v68 = (_WORD)a5 == 0xFFFF; + while ( 1 ) + { + v18 = v61 == 0xFFFF && a2 != 0; + if ( v18 ) + { + v50 = (__int16 *)a2[2]; + if ( (unsigned int)v50 >= a2[3] ) + v51 = (*(int (__fastcall **)(int *))(*a2 + 36))(a2); + else + v51 = *v50; + if ( v51 == -1 ) + a2 = 0; + if ( v51 != -1 ) + v18 = 0; + } + else + { + v18 = v61 == 0xFFFF; + } + v19 = v68 & (a4 != 0); + if ( v19 ) + { + v46 = (__int16 *)a4[2]; + if ( (unsigned int)v46 >= a4[3] ) + { + v47 = (*(int (__fastcall **)(_DWORD *))(*a4 + 36))(a4); + v19 = v68 & (a4 != 0); + } + else + { + v47 = *v46; + } + v48 = v47 == -1; + v49 = 0; + if ( !v48 ) + v49 = a4; + a4 = v49; + if ( !v48 ) + v19 = 0; + if ( v18 == v19 ) + { +LABEL_81: + *a7 = 6; + return a2; + } + } + else if ( v18 == v68 ) + { + goto LABEL_81; + } + if ( (*(unsigned __int8 (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v12 + 48))(v12, *v10, 0) == 37 ) + { + v63 = v10 + 1; + if ( a10 == v10 + 1 ) + goto LABEL_115; + v20 = (*(int (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v12 + 48))(v12, v10[1], 0); + if ( v20 == 69 || (v69 = 0, v21 = 0, v20 == 79) ) + { + v63 = v10 + 2; + if ( a10 == v10 + 2 ) + goto LABEL_115; + v45 = (*(int (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v12 + 48))(v12, v10[2], 0); + v69 = v20; + v21 = v20; + v20 = v45; + } + v22 = *(int *(__stdcall **)(int *, int, _DWORD *, int, int, _DWORD *, _DWORD *, char, char))(*(_DWORD *)this + 32); + if ( v22 == std::time_get>::do_get ) + { + HIWORD(v23) = HIWORD(v65); + LOWORD(v23) = v61; + v65 = v23; + HIWORD(v23) = HIWORD(v66); + LOWORD(v23) = a5; + v66 = v23; + v24 = std::use_facet>(a6 + 108); + *a7 = 0; + v71 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v24 + 40))(v24, 37); + if ( v69 ) + { + v73 = v20; + v72 = v69; + v74 = 0; + } + else + { + v72 = v20; + v73 = 0; + } + v25 = std::time_get>::_M_extract_via_format( + a2, + v65, + a4, + v66, + a6, + a7, + a8, + &v71); + a2 = v25; + v61 = v26; + v27 = v26 == 0xFFFF; + v28 = v27 & (v25 != 0); + if ( v28 ) + { + v56 = (__int16 *)v25[2]; + if ( (unsigned int)v56 >= v25[3] ) + v57 = (*(int (__fastcall **)(int *))(*v25 + 36))(v25); + else + v57 = *v56; + v27 = 0; + a2 = 0; + if ( v57 == -1 ) + v27 = v28; + if ( v57 != -1 ) + a2 = v25; + } + if ( a4 && (_WORD)a5 == 0xFFFF ) + { + v58 = (__int16 *)a4[2]; + if ( (unsigned int)v58 >= a4[3] ) + { + v70 = v27; + v59 = (*(int (__fastcall **)(_DWORD *))(*a4 + 36))(a4); + v27 = v70; + } + else + { + v59 = *v58; + } + v29 = v59 == -1; + } + else + { + v29 = (_WORD)a5 == 0xFFFF; + } + if ( v29 == v27 ) + *a7 |= 2u; + } + else + { + HIWORD(v52) = HIWORD(v65); + HIWORD(v53) = HIWORD(v66); + LOWORD(v52) = v61; + LOWORD(v53) = a5; + a2 = (int *)((int (__thiscall *)(void *, int *, int, _DWORD *, int, int, _DWORD *, _DWORD *, _DWORD, int))v22)( + this, + a2, + v52, + a4, + v53, + a6, + a7, + a8, + v20, + v21); + v61 = v54; + } + v10 = v63 + 1; + if ( a10 == v63 + 1 ) + return a2; + goto LABEL_16; + } + if ( (*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v12 + 8))(v12, 32, *v10) ) + break; + if ( a2 && v61 == 0xFFFF ) + { + v55 = (unsigned __int16 *)a2[2]; + if ( (unsigned int)v55 >= a2[3] ) + v13 = (*(unsigned __int16 (__fastcall **)(int *))(*a2 + 36))(a2); + else + v13 = *v55; + if ( (_WORD)v13 == 0xFFFF ) + a2 = 0; + } + else + { + v13 = v61; + } + v14 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v12 + 32))(v12, v13); + if ( (*(unsigned __int16 (__thiscall **)(void *, _DWORD))(*(_DWORD *)v12 + 32))(v12, *v10) != v14 ) + { + if ( a2 && v61 == 0xFFFF ) + { + v60 = (unsigned __int16 *)a2[2]; + if ( (unsigned int)v60 >= a2[3] ) + v15 = (*(unsigned __int16 (__fastcall **)(int *))(*a2 + 36))(a2); + else + v15 = *v60; + if ( (_WORD)v15 == 0xFFFF ) + a2 = 0; + } + else + { + v15 = v61; + } + v16 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v12 + 24))(v12, v15); + if ( (*(unsigned __int16 (__thiscall **)(void *, _DWORD))(*(_DWORD *)v12 + 24))(v12, *v10) != v16 ) + { +LABEL_115: + *a7 = 4; + return a2; + } + } + v17 = a2[2]; + if ( v17 >= a2[3] ) + (*(void (__fastcall **)(int *))(*a2 + 40))(a2); + else + a2[2] = v17 + 2; + ++v10; + v61 = -1; +LABEL_15: + if ( a10 == v10 ) + return a2; +LABEL_16: + if ( *a7 ) + return a2; + } + for ( i = v10 + 1; a10 != i; ++i ) + { + if ( !(*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v12 + 8))(v12, 32, *i) ) + break; + } + v75 = i; + v32 = v12; + while ( 1 ) + { + v37 = v61 == 0xFFFF; + v33 = v37 && a2 != 0; + if ( v33 ) + { + v38 = (__int16 *)a2[2]; + if ( (unsigned int)v38 >= a2[3] ) + { + v39 = (*(int (__fastcall **)(int *))(*a2 + 36))(a2); + v33 = v37 && a2 != 0; + } + else + { + v39 = *v38; + } + if ( v39 == -1 ) + a2 = 0; + if ( v39 != -1 ) + v33 = 0; + v34 = v68 & (a4 != 0); + if ( !v34 ) + { +LABEL_42: + if ( v68 == v33 ) + goto LABEL_65; + goto LABEL_43; + } + } + else + { + v33 = v61 == 0xFFFF; + v34 = v68 & (a4 != 0); + if ( !v34 ) + goto LABEL_42; + } + v40 = (__int16 *)a4[2]; + if ( (unsigned int)v40 >= a4[3] ) + { + v64 = v33; + v41 = (*(int (__fastcall **)(_DWORD *))(*a4 + 36))(a4); + v33 = v64; + } + else + { + v41 = *v40; + } + v42 = v41 == -1; + v43 = 0; + if ( !v42 ) + v43 = a4; + a4 = v43; + if ( !v42 ) + v34 = 0; + if ( v34 == v33 ) + { +LABEL_65: + v12 = v32; + v10 = v75; + goto LABEL_15; + } +LABEL_43: + if ( a2 && v61 == 0xFFFF ) + { + v44 = (unsigned __int16 *)a2[2]; + if ( (unsigned int)v44 >= a2[3] ) + v35 = (*(unsigned __int16 (__fastcall **)(int *))(*a2 + 36))(a2); + else + v35 = *v44; + if ( (_WORD)v35 == 0xFFFF ) + a2 = 0; + } + else + { + v35 = v61; + } + if ( !(*(unsigned __int8 (__thiscall **)(void *, int, int))(*(_DWORD *)v32 + 8))(v32, 32, v35) ) + goto LABEL_65; + v36 = a2[2]; + if ( v36 >= a2[3] ) + (*(void (__fastcall **)(int *))(*a2 + 40))(a2); + else + a2[2] = v36 + 2; + v61 = -1; + } + } + return a2; +} +// 48D25F: variable 'v26' is possibly undefined +// 48D5A6: variable 'v54' is possibly undefined + +//----- (0048D710) -------------------------------------------------------- +int __thiscall std::time_get>::get( + void *this, + int *a2, + int a3, + _DWORD *a4, + int a5, + int a6, + _DWORD *a7, + _DWORD *a8, + char a9, + char a10) +{ + int *(__stdcall *v10)(int *, int, _DWORD *, int, int, _DWORD *, _DWORD *, char, char); // eax + void *v11; // eax + int *v12; // ecx + int *v13; // ebp + __int16 v14; // dx + _BOOL2 v15; // bx + bool v16; // si + bool v17; // cl + __int16 *v19; // eax + __int16 v20; // ax + __int16 *v21; // eax + __int16 v22; // ax + int v23; // [esp+28h] [ebp-48h] + wchar_t v24; // [esp+4Ch] [ebp-24h] BYREF + __int16 v25; // [esp+4Eh] [ebp-22h] + __int16 v26; // [esp+50h] [ebp-20h] + __int16 v27; // [esp+52h] [ebp-1Eh] + + v10 = *(int *(__stdcall **)(int *, int, _DWORD *, int, int, _DWORD *, _DWORD *, char, char))(*(_DWORD *)this + 32); + if ( v10 != std::time_get>::do_get ) + return ((int (__thiscall *)(void *, int *, int, _DWORD *, int, int, _DWORD *, _DWORD *, _DWORD, _DWORD))v10)( + this, + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10); + v11 = std::use_facet>(a6 + 108); + *a7 = 0; + v24 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v11 + 40))(v11, 37); + if ( a10 ) + { + v26 = a9; + v25 = a10; + v27 = 0; + } + else + { + v25 = a9; + v26 = 0; + } + v12 = std::time_get>::_M_extract_via_format( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + &v24); + v13 = v12; + v15 = v14 == -1; + v16 = v15 && v12 != 0; + if ( v16 ) + { + v19 = (__int16 *)v12[2]; + if ( (unsigned int)v19 >= v12[3] ) + { + v23 = (int)v12; + v20 = (*(int (**)(void))(*v12 + 36))(); + v12 = (int *)v23; + } + else + { + v20 = *v19; + } + LOBYTE(v15) = 0; + v13 = 0; + if ( v20 == -1 ) + LOBYTE(v15) = v16; + if ( v20 != -1 ) + v13 = v12; + } + v17 = (_WORD)a5 == 0xFFFF; + if ( a4 && (_WORD)a5 == 0xFFFF ) + { + v21 = (__int16 *)a4[2]; + if ( (unsigned int)v21 >= a4[3] ) + v22 = (*(int (__fastcall **)(_DWORD *))(*a4 + 36))(a4); + else + v22 = *v21; + v17 = v22 == -1; + } + if ( v15 == v17 ) + *a7 |= 2u; + return (int)v13; +} +// 48D819: variable 'v14' is possibly undefined + +//----- (0048D960) -------------------------------------------------------- +int *__stdcall std::time_get>::do_get( + int *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7, + char a8, + char a9) +{ + void *v9; // eax + int *v10; // ecx + int *v11; // ebp + __int16 v12; // dx + _BOOL2 v13; // bx + bool v14; // si + bool v15; // cl + __int16 *v17; // eax + __int16 v18; // ax + __int16 *v19; // eax + __int16 v20; // ax + int v21; // [esp+34h] [ebp-3Ch] + wchar_t v22; // [esp+4Ch] [ebp-24h] BYREF + __int16 v23; // [esp+4Eh] [ebp-22h] + __int16 v24; // [esp+50h] [ebp-20h] + __int16 v25; // [esp+52h] [ebp-1Eh] + + v9 = std::use_facet>(a5 + 108); + *a6 = 0; + v22 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v9 + 40))(v9, 37); + if ( a9 ) + { + v24 = a8; + v23 = a9; + v25 = 0; + } + else + { + v23 = a8; + v24 = 0; + } + v10 = std::time_get>::_M_extract_via_format( + a1, + a2, + a3, + a4, + a5, + a6, + a7, + &v22); + v11 = v10; + v13 = v12 == -1; + v14 = v13 && v10 != 0; + if ( v14 ) + { + v19 = (__int16 *)v10[2]; + if ( (unsigned int)v19 >= v10[3] ) + { + v21 = (int)v10; + v20 = (*(int (**)(void))(*v10 + 36))(); + v10 = (int *)v21; + } + else + { + v20 = *v19; + } + LOBYTE(v13) = 0; + v11 = 0; + if ( v20 == -1 ) + LOBYTE(v13) = v14; + if ( v20 != -1 ) + v11 = v10; + } + v15 = (_WORD)a4 == 0xFFFF; + if ( a3 && (_WORD)a4 == 0xFFFF ) + { + v17 = (__int16 *)a3[2]; + if ( (unsigned int)v17 >= a3[3] ) + v18 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v18 = *v17; + v15 = v18 == -1; + } + if ( v13 == v15 ) + *a6 |= 2u; + return v11; +} +// 48DA44: variable 'v12' is possibly undefined + +//----- (0048DB20) -------------------------------------------------------- +int __fastcall std::time_get>::get_date(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 16))(a1); +} + +//----- (0048DB30) -------------------------------------------------------- +int __fastcall std::time_get>::get_time(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 12))(a1); +} + +//----- (0048DB40) -------------------------------------------------------- +int __fastcall std::time_get>::get_year(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 28))(a1); +} + +//----- (0048DB50) -------------------------------------------------------- +_DWORD *__stdcall std::money_get>::_M_extract( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + _BYTE *v7; // edx + unsigned int v8; // eax + _DWORD *v9; // ecx + unsigned int v10; // eax + char v11; // al + _BYTE *v12; // eax + char v13; // al + _BYTE *v14; // edx + unsigned int v15; // eax + char v16; // al + int v17; // eax + char v18; // dl + _BYTE *v19; // eax + int v20; // eax + _DWORD *v21; // eax + char v22; // al + int v23; // eax + unsigned __int8 *v24; // eax + char v25; // al + int v26; // edx + int v27; // eax + _BYTE *v28; // eax + int v29; // eax + _DWORD *v30; // eax + char v31; // al + int v32; // eax + unsigned __int8 *v33; // eax + bool v34; // zf + char v35; // al + _DWORD *v36; // edx + char v37; // al + unsigned __int8 *v39; // eax + char v40; // al + bool v41; // zf + _DWORD *v42; // edx + char v43; // al + char v44; // al + _BYTE *v45; // edx + unsigned int v46; // eax + int v47; // eax + unsigned __int8 v48; // dl + bool v49; // zf + _DWORD *v50; // eax + char v51; // al + unsigned int first_not_of; // eax + bool v53; // zf + _DWORD *v54; // eax + bool v55; // bl + int v56; // eax + bool v57; // zf + char v58; // dl + _DWORD *v59; // eax + _DWORD *v60; // eax + bool v61; // zf + _DWORD *v62; // edx + bool v63; // zf + _DWORD *v64; // eax + bool v65; // bl + _BYTE *v66; // eax + bool v67; // zf + _DWORD *v68; // eax + int v69; // eax + _BYTE *v70; // eax + int v71; // eax + _DWORD *v72; // edx + bool v73; // zf + _DWORD *v74; // eax + char v75; // bl + int v76; // eax + _DWORD *v77; // eax + bool v78; // zf + _DWORD *v79; // eax + bool v80; // bl + _DWORD *v81; // edx + bool v82; // zf + _DWORD *v83; // edx + bool v84; // zf + _DWORD *v85; // edx + bool v86; // zf + _DWORD *v87; // eax + bool v88; // bl + _DWORD *v89; // edx + bool v90; // zf + _DWORD *v91; // eax + bool v92; // bl + _DWORD *v93; // edx + _DWORD *v94; // edx + unsigned int v95; // [esp+8h] [ebp-D0h] + std::locale::_Impl *v96; // [esp+14h] [ebp-C4h] + char v97; // [esp+18h] [ebp-C0h] + char v98; // [esp+1Ch] [ebp-BCh] + unsigned int v99; // [esp+1Ch] [ebp-BCh] + _DWORD *v100; // [esp+20h] [ebp-B8h] + unsigned int v101; // [esp+24h] [ebp-B4h] + int v102; // [esp+2Ch] [ebp-ACh] + char v103; // [esp+30h] [ebp-A8h] + char v104; // [esp+30h] [ebp-A8h] + int v105; // [esp+30h] [ebp-A8h] + unsigned int v106; // [esp+30h] [ebp-A8h] + char v107; // [esp+30h] [ebp-A8h] + char v108; // [esp+30h] [ebp-A8h] + char v109; // [esp+30h] [ebp-A8h] + bool v110; // [esp+35h] [ebp-A3h] + char v111; // [esp+36h] [ebp-A2h] + char v112; // [esp+37h] [ebp-A1h] + unsigned int Buf; // [esp+38h] [ebp-A0h] + std::locale::facet *Bufa; // [esp+38h] [ebp-A0h] + int *v115; // [esp+3Ch] [ebp-9Ch] + int v116; // [esp+3Ch] [ebp-9Ch] + int v117; // [esp+40h] [ebp-98h] + std::locale::facet *v119; // [esp+4Ch] [ebp-8Ch] + std::locale::facet *v120; // [esp+4Ch] [ebp-8Ch] + char v121; // [esp+4Ch] [ebp-8Ch] + std::locale::facet *v122; // [esp+4Ch] [ebp-8Ch] + char v123; // [esp+4Ch] [ebp-8Ch] + unsigned __int8 v124; // [esp+4Ch] [ebp-8Ch] + char v125; // [esp+4Ch] [ebp-8Ch] + char v126; // [esp+4Ch] [ebp-8Ch] + char v127; // [esp+4Ch] [ebp-8Ch] + char v128; // [esp+4Ch] [ebp-8Ch] + char v129; // [esp+4Ch] [ebp-8Ch] + bool v130; // [esp+4Ch] [ebp-8Ch] + char v131; // [esp+50h] [ebp-88h] + bool v132; // [esp+50h] [ebp-88h] + unsigned __int8 v133; // [esp+50h] [ebp-88h] + char v134; // [esp+50h] [ebp-88h] + unsigned __int8 v135; // [esp+50h] [ebp-88h] + bool v136; // [esp+50h] [ebp-88h] + bool v137; // [esp+50h] [ebp-88h] + bool v138; // [esp+50h] [ebp-88h] + bool v139; // [esp+50h] [ebp-88h] + size_t v140; // [esp+50h] [ebp-88h] + char v141; // [esp+50h] [ebp-88h] + size_t v143; // [esp+54h] [ebp-84h] + size_t v144; // [esp+54h] [ebp-84h] + int v146; // [esp+9Ch] [ebp-3Ch] + void *v147; // [esp+A0h] [ebp-38h] BYREF + std::locale::facet *v148; // [esp+A4h] [ebp-34h] + int v149[4]; // [esp+A8h] [ebp-30h] BYREF + void *Block; // [esp+B8h] [ebp-20h] BYREF + size_t v151; // [esp+BCh] [ebp-1Ch] + int v152[5]; // [esp+C0h] [ebp-18h] BYREF + + v100 = std::use_facet>(a5 + 108); + v119 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v115 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)v119); + v117 = *v115; + if ( !*v115 ) + { + v60 = operator new(0x44u); + *v60 = &off_5606D4; + v60[1] = 0; + v60[2] = 0; + v60[3] = 0; + *((_WORD *)v60 + 8) = 0; + *((_BYTE *)v60 + 18) = 0; + v60[5] = 0; + v60[6] = 0; + v60[7] = 0; + v60[8] = 0; + v60[9] = 0; + v60[10] = 0; + v60[11] = 0; + v60[12] = 0; + v60[13] = 0; + *((_BYTE *)v60 + 67) = 0; + v96 = (std::locale::_Impl *)v60; + std::__moneypunct_cache::_M_cache((int)v60, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v96, v119, v95); + v117 = *v115; + } + if ( *(_DWORD *)(v117 + 32) ) + v110 = *(_DWORD *)(v117 + 40) != 0; + else + v110 = 0; + v148 = 0; + v147 = v149; + LOBYTE(v149[0]) = 0; + if ( *(_BYTE *)(v117 + 16) ) + std::string::reserve(&v147, 0x20u); + Block = v152; + v151 = 0; + LOBYTE(v152[0]) = 0; + std::string::reserve(&Block, 0x20u); + v102 = 0; + v112 = 0; + v116 = 0; + v146 = *(_DWORD *)(v117 + 52); + v97 = 0; + v101 = 0; + v111 = 0; + while ( 2 ) + { + switch ( *((_BYTE *)&v146 + v102) ) + { + case 0: + v104 = 1; + goto LABEL_37; + case 1: + v138 = a2 == -1; + if ( v138 && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v86 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v87 = 0; + if ( !v86 ) + v87 = a1; + v88 = v138 && a1 != 0; + a1 = v87; + if ( !v86 ) + v88 = 0; + v127 = v88; + } + else + { + v127 = 0; + } + } + else + { + v127 = a2 == -1; + } + v31 = a4 == -1; + v107 = v31 & (a3 != 0); + if ( v107 ) + { + v31 = 0; + if ( a3[2] >= a3[3] ) + { + v61 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + v31 = 0; + if ( v61 ) + v31 = v107; + v62 = 0; + if ( !v61 ) + v62 = a3; + a3 = v62; + } + } + v104 = 0; + if ( v127 == v31 ) + goto LABEL_37; + if ( !a1 || a2 != -1 ) + { + LOBYTE(v32) = a2; + goto LABEL_107; + } + v33 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v33 >= a1[3] ) + { + v32 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v89 = 0; + if ( v32 != -1 ) + v89 = a1; + a1 = v89; +LABEL_107: + v104 = 0; + if ( (*(_BYTE *)(v100[6] + 2 * (unsigned __int8)v32) & 0x20) == 0 ) + goto LABEL_37; + v33 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v33 >= a1[3] ) + { + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + goto LABEL_110; + } +LABEL_109: + a1[2] = v33 + 1; +LABEL_110: + a2 = -1; + v104 = 1; + goto LABEL_37; + } + if ( (*(_BYTE *)(v100[6] + 2 * *v33) & 0x20) != 0 ) + goto LABEL_109; + a2 = -1; +LABEL_37: + if ( v102 == 3 ) + { + v16 = v104 & (v101 > 1); +LABEL_39: + if ( v16 ) + { + if ( v111 ) + v17 = *(_DWORD *)(v117 + 36); + else + v17 = *(_DWORD *)(v117 + 28); + v105 = v17; + for ( Buf = 1; ; ++Buf ) + { + v135 = a2 == -1; + if ( (v135 & (a1 != 0)) != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v73 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v74 = 0; + if ( !v73 ) + v74 = a1; + v75 = v135 & (a1 != 0); + a1 = v74; + if ( !v73 ) + v75 = 0; + v123 = v75; + } + else + { + v123 = 0; + } + } + else + { + v123 = a2 == -1; + } + if ( a3 && a4 == -1 ) + { + if ( a3[2] >= a3[3] ) + { + v20 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v123 ^= v20 == -1; + v34 = v20 == -1; + v21 = 0; + if ( !v34 ) + v21 = a3; + a3 = v21; + } + } + else + { + v123 ^= a4 == -1; + } + if ( Buf >= v101 || !v123 ) + { + if ( Buf != v101 ) + { +LABEL_195: + v124 = v135 & (a1 != 0); + goto LABEL_120; + } + if ( v151 > 1 ) + goto LABEL_207; + goto LABEL_174; + } + v18 = a2; + v124 = v135 & (a1 != 0); + if ( v124 ) + { + v19 = (_BYTE *)a1[2]; + if ( (unsigned int)v19 < a1[3] ) + { + if ( *(_BYTE *)(v105 + Buf) != *v19 ) + { + v135 &= a1 != 0; + goto LABEL_120; + } +LABEL_49: + a1[2] = v19 + 1; + goto LABEL_50; + } + v76 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v34 = v76 == -1; + v18 = v76; + v77 = 0; + if ( !v34 ) + v77 = a1; + a1 = v77; + } + if ( *(_BYTE *)(v105 + Buf) != v18 ) + goto LABEL_195; + v19 = (_BYTE *)a1[2]; + if ( (unsigned int)v19 < a1[3] ) + goto LABEL_49; + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); +LABEL_50: + a2 = -1; + } + } + if ( !v104 ) + goto LABEL_119; + if ( v151 > 1 ) + { +LABEL_207: + first_not_of = std::string::find_first_not_of(&Block, 48, 0); + if ( first_not_of ) + { + if ( first_not_of != -1 ) + goto LABEL_209; + first_not_of = v151 - 1; + if ( !v151 ) + { + v151 = 0; + *(_BYTE *)Block = 0; + goto LABEL_174; + } + if ( v151 != 1 ) + { +LABEL_209: + if ( v151 <= first_not_of ) + first_not_of = v151; + std::string::_M_erase((int *)&Block, 0, first_not_of); + } + } + } +LABEL_174: + if ( v111 && *(_BYTE *)Block != 48 ) + std::string::_M_replace_aux(&Block, 0, 0, 1u, 45); + v140 = (size_t)v148; + if ( v148 ) + { + v44 = v97; + if ( !v112 ) + v44 = v116; + v45 = v147; + Bufa = (std::locale::facet *)((char *)v148 + 1); + v129 = v44; + v46 = 15; + if ( v147 != v149 ) + v46 = v149[0]; + if ( (unsigned int)v148 + 1 > v46 ) + { + std::string::_M_mutate((int)&v147, (size_t)v148, 0, 0, 1u); + v45 = v147; + } + v45[v140] = v129; + v148 = Bufa; + *((_BYTE *)v147 + v140 + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v117 + 8), *(_DWORD *)(v117 + 12), (int)&v147) ) + *a6 |= 4u; + } + v135 = a2 == -1; + v124 = v135 & (a1 != 0); + if ( v112 && *(_DWORD *)(v117 + 44) != v116 ) + goto LABEL_120; + std::string::swap(a7, &Block); + if ( !v124 ) + goto LABEL_121; +LABEL_189: + v135 = 0; + if ( a1[2] >= a1[3] ) + { + v47 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v48 = v124; + v49 = v47 == -1; + if ( v47 != -1 ) + v48 = 0; + v50 = 0; + if ( !v49 ) + v50 = a1; + v135 = v48; + a1 = v50; + } + goto LABEL_121; + } + while ( 1 ) + { + v136 = a2 == -1; + if ( v136 && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v63 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v64 = 0; + if ( !v63 ) + v64 = a1; + v65 = v136 && a1 != 0; + a1 = v64; + if ( !v63 ) + v65 = 0; + v125 = v65; + } + else + { + v125 = 0; + } + } + else + { + v125 = a2 == -1; + } + v22 = a4 == -1; + v98 = v22 & (a3 != 0); + if ( v98 ) + { + v22 = 0; + if ( a3[2] >= a3[3] ) + { + v41 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + v22 = v98; + if ( !v41 ) + v22 = 0; + v42 = 0; + if ( !v41 ) + v42 = a3; + a3 = v42; + } + } + if ( v22 == v125 ) + goto LABEL_136; + if ( a1 && a2 == -1 ) + { + v24 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v24 < a1[3] ) + { + if ( (*(_BYTE *)(v100[6] + 2 * *v24) & 0x20) == 0 ) + { + a2 = -1; + v25 = v104 ^ 1; + goto LABEL_137; + } +LABEL_67: + a1[2] = v24 + 1; + goto LABEL_68; + } + v23 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v72 = 0; + if ( v23 != -1 ) + v72 = a1; + a1 = v72; + } + else + { + LOBYTE(v23) = a2; + } + if ( (*(_BYTE *)(v100[6] + 2 * (unsigned __int8)v23) & 0x20) == 0 ) + goto LABEL_136; + v24 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v24 < a1[3] ) + goto LABEL_67; + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); +LABEL_68: + a2 = -1; + } + case 2: + if ( (*(_BYTE *)(a5 + 13) & 2) != 0 ) + goto LABEL_82; + v25 = v102 == 0 || v101 > 1; + if ( v25 ) + goto LABEL_82; + if ( v102 != 1 ) + { + v104 = 1; + if ( v102 == 2 ) + { + if ( HIBYTE(v146) == 4 ) + goto LABEL_82; + v26 = 3; + if ( HIBYTE(v146) == 3 && v110 ) + goto LABEL_82; + goto LABEL_139; + } +LABEL_137: + v26 = v102 + 1; + if ( v102 + 1 > 3 || v25 ) + { + v16 = v104 & (v101 > 1); + goto LABEL_39; + } +LABEL_139: + v102 = v26; + continue; + } + if ( !v110 && (_BYTE)v146 != 3 && BYTE2(v146) != 1 ) + { + v26 = 2; + goto LABEL_139; + } +LABEL_82: + v106 = 0; + v99 = *(_DWORD *)(v117 + 24); + while ( 2 ) + { + v137 = a2 == -1; + if ( v137 && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v78 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v79 = 0; + if ( !v78 ) + v79 = a1; + v80 = v137 && a1 != 0; + a1 = v79; + if ( !v78 ) + v80 = 0; + v126 = v80; + } + else + { + v126 = 0; + } + } + else + { + v126 = a2 == -1; + } + if ( a3 && a4 == -1 ) + { + if ( a3[2] >= a3[3] ) + { + v29 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v126 ^= v29 == -1; + v34 = v29 == -1; + v30 = 0; + if ( !v34 ) + v30 = a3; + a3 = v30; + } + } + else + { + v126 ^= a4 == -1; + } + v25 = v126 & (v106 < v99); + if ( v25 ) + { + if ( !a1 || a2 != -1 ) + { + LOBYTE(v27) = a2; + goto LABEL_88; + } + v28 = (_BYTE *)a1[2]; + if ( (unsigned int)v28 < a1[3] ) + { + if ( *(_BYTE *)(*(_DWORD *)(v117 + 20) + v106) != *v28 ) + { + a2 = -1; + goto LABEL_168; + } + goto LABEL_90; + } + v27 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v81 = 0; + if ( v27 != -1 ) + v81 = a1; + a1 = v81; +LABEL_88: + if ( *(_BYTE *)(*(_DWORD *)(v117 + 20) + v106) != (_BYTE)v27 ) + goto LABEL_168; + v28 = (_BYTE *)a1[2]; + if ( (unsigned int)v28 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else +LABEL_90: + a1[2] = v28 + 1; + ++v106; + a2 = -1; + continue; + } + break; + } + if ( v106 == v99 ) + goto LABEL_198; +LABEL_168: + if ( !v106 ) + { + v104 = (*(_BYTE *)(a5 + 13) & 2) == 0; + v25 = (*(_BYTE *)(a5 + 13) & 2) != 0; + goto LABEL_137; + } +LABEL_119: + v135 = a2 == -1; + v124 = v135 & (a1 != 0); +LABEL_120: + *a6 |= 4u; + if ( v124 ) + goto LABEL_189; +LABEL_121: + v37 = a4 == -1; + if ( a3 ) + { + if ( a4 == -1 ) + { + v37 = 0; + if ( a3[2] >= a3[3] ) + v37 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + } + } + if ( v37 == v135 ) + *a6 |= 2u; + if ( Block != v152 ) + operator delete(Block); + if ( v147 != v149 ) + operator delete(v147); + return a1; + case 3: + if ( !*(_DWORD *)(v117 + 32) ) + { + if ( !*(_DWORD *)(v117 + 40) ) + goto LABEL_74; +LABEL_199: + v141 = a2 == -1; + if ( !a1 || a2 != -1 ) + { + v130 = a2 == -1; + goto LABEL_202; + } +LABEL_253: + v130 = 1; + v141 = 0; + if ( a1[2] >= a1[3] ) + { + v67 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v68 = 0; + if ( !v67 ) + v68 = a1; + v130 = 1; + v141 = v67; + a1 = v68; + } +LABEL_202: + v51 = a4 == -1; + v109 = v51 & (a3 != 0); + if ( v109 ) + { + v51 = 0; + if ( a3[2] >= a3[3] ) + { + v84 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + v51 = 0; + if ( v84 ) + v51 = v109; + v85 = 0; + if ( !v84 ) + v85 = a3; + a3 = v85; + } + } + if ( v51 == v141 ) + { +LABEL_204: + if ( !*(_DWORD *)(v117 + 32) || *(_DWORD *)(v117 + 40) ) + { +LABEL_74: + v25 = v110; + v104 = !v110; + goto LABEL_137; + } + goto LABEL_157; + } + if ( a1 && v130 ) + { + v70 = (_BYTE *)a1[2]; + if ( (unsigned int)v70 < a1[3] ) + { + if ( *v70 != **(_BYTE **)(v117 + 36) ) + goto LABEL_204; + v101 = *(_DWORD *)(v117 + 40); + goto LABEL_267; + } + v71 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v93 = 0; + if ( v71 != -1 ) + v93 = a1; + a1 = v93; + } + else + { + LOBYTE(v71) = a2; + } + if ( **(_BYTE **)(v117 + 36) != (_BYTE)v71 ) + goto LABEL_204; + v101 = *(_DWORD *)(v117 + 40); + v70 = (_BYTE *)a1[2]; + if ( (unsigned int)v70 >= a1[3] ) + { + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + goto LABEL_268; + } +LABEL_267: + a1[2] = v70 + 1; +LABEL_268: + a2 = -1; + v25 = 0; + v104 = 1; + v111 = 1; + goto LABEL_137; + } + v139 = a2 == -1; + if ( v139 && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v90 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v91 = 0; + if ( !v90 ) + v91 = a1; + v92 = v139 && a1 != 0; + a1 = v91; + if ( !v90 ) + v92 = 0; + v128 = v92; + } + else + { + v128 = 0; + } + } + else + { + v128 = a2 == -1; + } + v43 = a4 == -1; + v108 = v43 & (a3 != 0); + if ( v108 ) + { + v43 = 0; + if ( a3[2] >= a3[3] ) + { + v82 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + v43 = 0; + if ( v82 ) + v43 = v108; + v83 = 0; + if ( !v82 ) + v83 = a3; + a3 = v83; + } + } + if ( v128 == v43 ) + { +LABEL_155: + if ( *(_DWORD *)(v117 + 40) ) + goto LABEL_199; +LABEL_156: + if ( !*(_DWORD *)(v117 + 32) ) + goto LABEL_74; +LABEL_157: + v104 = 1; + v25 = 0; + v111 = 1; + goto LABEL_137; + } + if ( a1 && a2 == -1 ) + { + v66 = (_BYTE *)a1[2]; + if ( (unsigned int)v66 < a1[3] ) + { + if ( **(_BYTE **)(v117 + 28) != *v66 ) + { + if ( *(_DWORD *)(v117 + 40) ) + goto LABEL_253; + goto LABEL_156; + } + v101 = *(_DWORD *)(v117 + 32); + goto LABEL_260; + } + v69 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v94 = 0; + if ( v69 != -1 ) + v94 = a1; + a1 = v94; + } + else + { + LOBYTE(v69) = a2; + } + if ( **(_BYTE **)(v117 + 28) != (_BYTE)v69 ) + goto LABEL_155; + v101 = *(_DWORD *)(v117 + 32); + v66 = (_BYTE *)a1[2]; + if ( (unsigned int)v66 >= a1[3] ) + { + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); +LABEL_261: + a2 = -1; + v25 = 0; +LABEL_198: + v104 = 1; + goto LABEL_137; + } +LABEL_260: + a1[2] = v66 + 1; + goto LABEL_261; + case 4: + while ( 2 ) + { + v132 = a2 == -1; + if ( v132 && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v53 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v54 = 0; + if ( !v53 ) + v54 = a1; + v55 = v132 && a1 != 0; + a1 = v54; + if ( !v53 ) + v55 = 0; + v121 = v55; + } + else + { + v121 = 0; + } + } + else + { + v121 = a2 == -1; + } + v11 = a4 == -1; + v103 = v11 & (a3 != 0); + if ( v103 && (v11 = 0, a3[2] >= a3[3]) ) + { + v34 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + v35 = v103; + if ( !v34 ) + v35 = 0; + v36 = 0; + if ( !v34 ) + v36 = a3; + a3 = v36; + if ( v35 == v121 ) + goto LABEL_117; + } + else if ( v11 == v121 ) + { + goto LABEL_117; + } + if ( a1 && a2 == -1 ) + { + v39 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v39 >= a1[3] ) + { + v56 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v57 = v56 == -1; + v58 = -1; + if ( v56 != -1 ) + v58 = v56; + v59 = 0; + if ( !v57 ) + v59 = a1; + v133 = v58; + a1 = v59; + } + else + { + v133 = *v39; + } + } + else + { + v133 = a2; + } + v12 = memchr((const void *)(v117 + 57), (char)v133, 0xAu); + if ( v12 ) + { + v7 = Block; + v131 = v12[(_DWORD)std::money_base::_S_atoms - 56 - v117]; + v143 = v151; + v8 = 15; + if ( Block != v152 ) + v8 = v152[0]; + v120 = (std::locale::facet *)(v151 + 1); + if ( v151 + 1 > v8 ) + { + std::string::_M_mutate((int)&Block, v151, 0, 0, 1u); + v7 = Block; + } + ++v116; + v7[v143] = v131; + v151 = (size_t)v120; + *((_BYTE *)Block + v143 + 1) = 0; +LABEL_14: + v9 = a1; + v10 = a1[2]; + if ( v10 < a1[3] ) + { +LABEL_15: + v9[2] = v10 + 1; +LABEL_16: + a2 = -1; + continue; + } +LABEL_35: + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + goto LABEL_16; + } + break; + } + v104 = v112 | (*(_BYTE *)(v117 + 17) != v133); + if ( !v104 ) + { + if ( *(int *)(v117 + 44) > 0 ) + { + v40 = v116; + v112 = 1; + v116 = 0; + v97 = v40; + goto LABEL_14; + } + v112 = 0; +LABEL_117: + v104 = 1; +LABEL_118: + if ( !v151 ) + goto LABEL_119; + goto LABEL_136; + } + v13 = *(_BYTE *)(v117 + 16); + if ( !v13 ) + goto LABEL_118; + if ( *(_BYTE *)(v117 + 18) == v133 ) + { + if ( !v112 ) + { + if ( v116 ) + { + v134 = v116; + v14 = v147; + v144 = (size_t)v148; + v15 = 15; + if ( v147 != v149 ) + v15 = v149[0]; + v122 = (std::locale::facet *)((char *)v148 + 1); + if ( (unsigned int)v148 + 1 > v15 ) + { + std::string::_M_mutate((int)&v147, (size_t)v148, 0, 0, 1u); + v14 = v147; + } + v116 = 0; + v14[v144] = v134; + v148 = v122; + *((_BYTE *)v147 + v144 + 1) = 0; + v9 = a1; + v10 = a1[2]; + if ( v10 < a1[3] ) + goto LABEL_15; + goto LABEL_35; + } + v104 = 0; + goto LABEL_118; + } + v13 = v112; + } + v104 = v13; + if ( !v151 ) + goto LABEL_119; +LABEL_136: + v25 = v104 ^ 1; + goto LABEL_137; + default: + v104 = 1; + v25 = 0; + goto LABEL_137; + } + } +} +// 48ED3B: variable 'v95' is possibly undefined +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 53F708: using guessed type signed __int32 std::moneypunct::id; +// 5606D4: using guessed type int (*off_5606D4)(); + +//----- (0048F480) -------------------------------------------------------- +_DWORD *__stdcall std::money_get>::_M_extract( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + _BYTE *v7; // edx + unsigned int v8; // eax + _DWORD *v9; // ecx + unsigned int v10; // eax + char v11; // al + _BYTE *v12; // eax + char v13; // al + _BYTE *v14; // edx + unsigned int v15; // eax + char v16; // al + int v17; // eax + char v18; // dl + _BYTE *v19; // eax + int v20; // eax + _DWORD *v21; // eax + char v22; // al + int v23; // eax + unsigned __int8 *v24; // eax + char v25; // al + int v26; // edx + int v27; // eax + _BYTE *v28; // eax + int v29; // eax + _DWORD *v30; // eax + char v31; // al + int v32; // eax + unsigned __int8 *v33; // eax + bool v34; // zf + char v35; // al + _DWORD *v36; // edx + char v37; // al + unsigned __int8 *v39; // eax + char v40; // al + bool v41; // zf + _DWORD *v42; // edx + char v43; // al + char v44; // al + _BYTE *v45; // edx + unsigned int v46; // eax + int v47; // eax + unsigned __int8 v48; // dl + bool v49; // zf + _DWORD *v50; // eax + char v51; // al + unsigned int first_not_of; // eax + bool v53; // zf + _DWORD *v54; // eax + bool v55; // bl + int v56; // eax + bool v57; // zf + char v58; // dl + _DWORD *v59; // eax + _DWORD *v60; // eax + bool v61; // zf + _DWORD *v62; // edx + bool v63; // zf + _DWORD *v64; // eax + bool v65; // bl + _BYTE *v66; // eax + bool v67; // zf + _DWORD *v68; // eax + int v69; // eax + _BYTE *v70; // eax + int v71; // eax + _DWORD *v72; // edx + bool v73; // zf + _DWORD *v74; // eax + char v75; // bl + int v76; // eax + _DWORD *v77; // eax + bool v78; // zf + _DWORD *v79; // eax + bool v80; // bl + _DWORD *v81; // edx + bool v82; // zf + _DWORD *v83; // edx + bool v84; // zf + _DWORD *v85; // edx + bool v86; // zf + _DWORD *v87; // eax + bool v88; // bl + _DWORD *v89; // edx + bool v90; // zf + _DWORD *v91; // eax + bool v92; // bl + _DWORD *v93; // edx + _DWORD *v94; // edx + unsigned int v95; // [esp+8h] [ebp-D0h] + std::locale::_Impl *v96; // [esp+14h] [ebp-C4h] + char v97; // [esp+18h] [ebp-C0h] + char v98; // [esp+1Ch] [ebp-BCh] + unsigned int v99; // [esp+1Ch] [ebp-BCh] + _DWORD *v100; // [esp+20h] [ebp-B8h] + unsigned int v101; // [esp+24h] [ebp-B4h] + int v102; // [esp+2Ch] [ebp-ACh] + char v103; // [esp+30h] [ebp-A8h] + char v104; // [esp+30h] [ebp-A8h] + int v105; // [esp+30h] [ebp-A8h] + unsigned int v106; // [esp+30h] [ebp-A8h] + char v107; // [esp+30h] [ebp-A8h] + char v108; // [esp+30h] [ebp-A8h] + char v109; // [esp+30h] [ebp-A8h] + bool v110; // [esp+35h] [ebp-A3h] + char v111; // [esp+36h] [ebp-A2h] + char v112; // [esp+37h] [ebp-A1h] + unsigned int Buf; // [esp+38h] [ebp-A0h] + std::locale::facet *Bufa; // [esp+38h] [ebp-A0h] + int *v115; // [esp+3Ch] [ebp-9Ch] + int v116; // [esp+3Ch] [ebp-9Ch] + int v117; // [esp+40h] [ebp-98h] + std::locale::facet *v119; // [esp+4Ch] [ebp-8Ch] + std::locale::facet *v120; // [esp+4Ch] [ebp-8Ch] + char v121; // [esp+4Ch] [ebp-8Ch] + std::locale::facet *v122; // [esp+4Ch] [ebp-8Ch] + char v123; // [esp+4Ch] [ebp-8Ch] + unsigned __int8 v124; // [esp+4Ch] [ebp-8Ch] + char v125; // [esp+4Ch] [ebp-8Ch] + char v126; // [esp+4Ch] [ebp-8Ch] + char v127; // [esp+4Ch] [ebp-8Ch] + char v128; // [esp+4Ch] [ebp-8Ch] + char v129; // [esp+4Ch] [ebp-8Ch] + bool v130; // [esp+4Ch] [ebp-8Ch] + char v131; // [esp+50h] [ebp-88h] + bool v132; // [esp+50h] [ebp-88h] + unsigned __int8 v133; // [esp+50h] [ebp-88h] + char v134; // [esp+50h] [ebp-88h] + unsigned __int8 v135; // [esp+50h] [ebp-88h] + bool v136; // [esp+50h] [ebp-88h] + bool v137; // [esp+50h] [ebp-88h] + bool v138; // [esp+50h] [ebp-88h] + bool v139; // [esp+50h] [ebp-88h] + size_t v140; // [esp+50h] [ebp-88h] + char v141; // [esp+50h] [ebp-88h] + size_t v143; // [esp+54h] [ebp-84h] + size_t v144; // [esp+54h] [ebp-84h] + int v146; // [esp+9Ch] [ebp-3Ch] + void *v147; // [esp+A0h] [ebp-38h] BYREF + std::locale::facet *v148; // [esp+A4h] [ebp-34h] + int v149[4]; // [esp+A8h] [ebp-30h] BYREF + void *Block; // [esp+B8h] [ebp-20h] BYREF + size_t v151; // [esp+BCh] [ebp-1Ch] + int v152[5]; // [esp+C0h] [ebp-18h] BYREF + + v100 = std::use_facet>(a5 + 108); + v119 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v115 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)v119); + v117 = *v115; + if ( !*v115 ) + { + v60 = operator new(0x44u); + *v60 = &off_5606E4; + v60[1] = 0; + v60[2] = 0; + v60[3] = 0; + *((_WORD *)v60 + 8) = 0; + *((_BYTE *)v60 + 18) = 0; + v60[5] = 0; + v60[6] = 0; + v60[7] = 0; + v60[8] = 0; + v60[9] = 0; + v60[10] = 0; + v60[11] = 0; + v60[12] = 0; + v60[13] = 0; + *((_BYTE *)v60 + 67) = 0; + v96 = (std::locale::_Impl *)v60; + std::__moneypunct_cache::_M_cache((int)v60, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v96, v119, v95); + v117 = *v115; + } + if ( *(_DWORD *)(v117 + 32) ) + v110 = *(_DWORD *)(v117 + 40) != 0; + else + v110 = 0; + v148 = 0; + v147 = v149; + LOBYTE(v149[0]) = 0; + if ( *(_BYTE *)(v117 + 16) ) + std::string::reserve(&v147, 0x20u); + Block = v152; + v151 = 0; + LOBYTE(v152[0]) = 0; + std::string::reserve(&Block, 0x20u); + v102 = 0; + v112 = 0; + v116 = 0; + v146 = *(_DWORD *)(v117 + 52); + v97 = 0; + v101 = 0; + v111 = 0; + while ( 2 ) + { + switch ( *((_BYTE *)&v146 + v102) ) + { + case 0: + v104 = 1; + goto LABEL_37; + case 1: + v138 = a2 == -1; + if ( v138 && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v86 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v87 = 0; + if ( !v86 ) + v87 = a1; + v88 = v138 && a1 != 0; + a1 = v87; + if ( !v86 ) + v88 = 0; + v127 = v88; + } + else + { + v127 = 0; + } + } + else + { + v127 = a2 == -1; + } + v31 = a4 == -1; + v107 = v31 & (a3 != 0); + if ( v107 ) + { + v31 = 0; + if ( a3[2] >= a3[3] ) + { + v61 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + v31 = 0; + if ( v61 ) + v31 = v107; + v62 = 0; + if ( !v61 ) + v62 = a3; + a3 = v62; + } + } + v104 = 0; + if ( v127 == v31 ) + goto LABEL_37; + if ( !a1 || a2 != -1 ) + { + LOBYTE(v32) = a2; + goto LABEL_107; + } + v33 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v33 >= a1[3] ) + { + v32 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v89 = 0; + if ( v32 != -1 ) + v89 = a1; + a1 = v89; +LABEL_107: + v104 = 0; + if ( (*(_BYTE *)(v100[6] + 2 * (unsigned __int8)v32) & 0x20) == 0 ) + goto LABEL_37; + v33 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v33 >= a1[3] ) + { + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + goto LABEL_110; + } +LABEL_109: + a1[2] = v33 + 1; +LABEL_110: + a2 = -1; + v104 = 1; + goto LABEL_37; + } + if ( (*(_BYTE *)(v100[6] + 2 * *v33) & 0x20) != 0 ) + goto LABEL_109; + a2 = -1; +LABEL_37: + if ( v102 == 3 ) + { + v16 = v104 & (v101 > 1); +LABEL_39: + if ( v16 ) + { + if ( v111 ) + v17 = *(_DWORD *)(v117 + 36); + else + v17 = *(_DWORD *)(v117 + 28); + v105 = v17; + for ( Buf = 1; ; ++Buf ) + { + v135 = a2 == -1; + if ( (v135 & (a1 != 0)) != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v73 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v74 = 0; + if ( !v73 ) + v74 = a1; + v75 = v135 & (a1 != 0); + a1 = v74; + if ( !v73 ) + v75 = 0; + v123 = v75; + } + else + { + v123 = 0; + } + } + else + { + v123 = a2 == -1; + } + if ( a3 && a4 == -1 ) + { + if ( a3[2] >= a3[3] ) + { + v20 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v123 ^= v20 == -1; + v34 = v20 == -1; + v21 = 0; + if ( !v34 ) + v21 = a3; + a3 = v21; + } + } + else + { + v123 ^= a4 == -1; + } + if ( Buf >= v101 || !v123 ) + { + if ( Buf != v101 ) + { +LABEL_195: + v124 = v135 & (a1 != 0); + goto LABEL_120; + } + if ( v151 > 1 ) + goto LABEL_207; + goto LABEL_174; + } + v18 = a2; + v124 = v135 & (a1 != 0); + if ( v124 ) + { + v19 = (_BYTE *)a1[2]; + if ( (unsigned int)v19 < a1[3] ) + { + if ( *(_BYTE *)(v105 + Buf) != *v19 ) + { + v135 &= a1 != 0; + goto LABEL_120; + } +LABEL_49: + a1[2] = v19 + 1; + goto LABEL_50; + } + v76 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v34 = v76 == -1; + v18 = v76; + v77 = 0; + if ( !v34 ) + v77 = a1; + a1 = v77; + } + if ( *(_BYTE *)(v105 + Buf) != v18 ) + goto LABEL_195; + v19 = (_BYTE *)a1[2]; + if ( (unsigned int)v19 < a1[3] ) + goto LABEL_49; + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); +LABEL_50: + a2 = -1; + } + } + if ( !v104 ) + goto LABEL_119; + if ( v151 > 1 ) + { +LABEL_207: + first_not_of = std::string::find_first_not_of(&Block, 48, 0); + if ( first_not_of ) + { + if ( first_not_of != -1 ) + goto LABEL_209; + first_not_of = v151 - 1; + if ( !v151 ) + { + v151 = 0; + *(_BYTE *)Block = 0; + goto LABEL_174; + } + if ( v151 != 1 ) + { +LABEL_209: + if ( v151 <= first_not_of ) + first_not_of = v151; + std::string::_M_erase((int *)&Block, 0, first_not_of); + } + } + } +LABEL_174: + if ( v111 && *(_BYTE *)Block != 48 ) + std::string::_M_replace_aux(&Block, 0, 0, 1u, 45); + v140 = (size_t)v148; + if ( v148 ) + { + v44 = v97; + if ( !v112 ) + v44 = v116; + v45 = v147; + Bufa = (std::locale::facet *)((char *)v148 + 1); + v129 = v44; + v46 = 15; + if ( v147 != v149 ) + v46 = v149[0]; + if ( (unsigned int)v148 + 1 > v46 ) + { + std::string::_M_mutate((int)&v147, (size_t)v148, 0, 0, 1u); + v45 = v147; + } + v45[v140] = v129; + v148 = Bufa; + *((_BYTE *)v147 + v140 + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v117 + 8), *(_DWORD *)(v117 + 12), (int)&v147) ) + *a6 |= 4u; + } + v135 = a2 == -1; + v124 = v135 & (a1 != 0); + if ( v112 && *(_DWORD *)(v117 + 44) != v116 ) + goto LABEL_120; + std::string::swap(a7, &Block); + if ( !v124 ) + goto LABEL_121; +LABEL_189: + v135 = 0; + if ( a1[2] >= a1[3] ) + { + v47 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v48 = v124; + v49 = v47 == -1; + if ( v47 != -1 ) + v48 = 0; + v50 = 0; + if ( !v49 ) + v50 = a1; + v135 = v48; + a1 = v50; + } + goto LABEL_121; + } + while ( 1 ) + { + v136 = a2 == -1; + if ( v136 && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v63 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v64 = 0; + if ( !v63 ) + v64 = a1; + v65 = v136 && a1 != 0; + a1 = v64; + if ( !v63 ) + v65 = 0; + v125 = v65; + } + else + { + v125 = 0; + } + } + else + { + v125 = a2 == -1; + } + v22 = a4 == -1; + v98 = v22 & (a3 != 0); + if ( v98 ) + { + v22 = 0; + if ( a3[2] >= a3[3] ) + { + v41 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + v22 = v98; + if ( !v41 ) + v22 = 0; + v42 = 0; + if ( !v41 ) + v42 = a3; + a3 = v42; + } + } + if ( v22 == v125 ) + goto LABEL_136; + if ( a1 && a2 == -1 ) + { + v24 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v24 < a1[3] ) + { + if ( (*(_BYTE *)(v100[6] + 2 * *v24) & 0x20) == 0 ) + { + a2 = -1; + v25 = v104 ^ 1; + goto LABEL_137; + } +LABEL_67: + a1[2] = v24 + 1; + goto LABEL_68; + } + v23 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v72 = 0; + if ( v23 != -1 ) + v72 = a1; + a1 = v72; + } + else + { + LOBYTE(v23) = a2; + } + if ( (*(_BYTE *)(v100[6] + 2 * (unsigned __int8)v23) & 0x20) == 0 ) + goto LABEL_136; + v24 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v24 < a1[3] ) + goto LABEL_67; + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); +LABEL_68: + a2 = -1; + } + case 2: + if ( (*(_BYTE *)(a5 + 13) & 2) != 0 ) + goto LABEL_82; + v25 = v102 == 0 || v101 > 1; + if ( v25 ) + goto LABEL_82; + if ( v102 != 1 ) + { + v104 = 1; + if ( v102 == 2 ) + { + if ( HIBYTE(v146) == 4 ) + goto LABEL_82; + v26 = 3; + if ( HIBYTE(v146) == 3 && v110 ) + goto LABEL_82; + goto LABEL_139; + } +LABEL_137: + v26 = v102 + 1; + if ( v102 + 1 > 3 || v25 ) + { + v16 = v104 & (v101 > 1); + goto LABEL_39; + } +LABEL_139: + v102 = v26; + continue; + } + if ( !v110 && (_BYTE)v146 != 3 && BYTE2(v146) != 1 ) + { + v26 = 2; + goto LABEL_139; + } +LABEL_82: + v106 = 0; + v99 = *(_DWORD *)(v117 + 24); + while ( 2 ) + { + v137 = a2 == -1; + if ( v137 && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v78 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v79 = 0; + if ( !v78 ) + v79 = a1; + v80 = v137 && a1 != 0; + a1 = v79; + if ( !v78 ) + v80 = 0; + v126 = v80; + } + else + { + v126 = 0; + } + } + else + { + v126 = a2 == -1; + } + if ( a3 && a4 == -1 ) + { + if ( a3[2] >= a3[3] ) + { + v29 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v126 ^= v29 == -1; + v34 = v29 == -1; + v30 = 0; + if ( !v34 ) + v30 = a3; + a3 = v30; + } + } + else + { + v126 ^= a4 == -1; + } + v25 = v126 & (v106 < v99); + if ( v25 ) + { + if ( !a1 || a2 != -1 ) + { + LOBYTE(v27) = a2; + goto LABEL_88; + } + v28 = (_BYTE *)a1[2]; + if ( (unsigned int)v28 < a1[3] ) + { + if ( *(_BYTE *)(*(_DWORD *)(v117 + 20) + v106) != *v28 ) + { + a2 = -1; + goto LABEL_168; + } + goto LABEL_90; + } + v27 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v81 = 0; + if ( v27 != -1 ) + v81 = a1; + a1 = v81; +LABEL_88: + if ( *(_BYTE *)(*(_DWORD *)(v117 + 20) + v106) != (_BYTE)v27 ) + goto LABEL_168; + v28 = (_BYTE *)a1[2]; + if ( (unsigned int)v28 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else +LABEL_90: + a1[2] = v28 + 1; + ++v106; + a2 = -1; + continue; + } + break; + } + if ( v106 == v99 ) + goto LABEL_198; +LABEL_168: + if ( !v106 ) + { + v104 = (*(_BYTE *)(a5 + 13) & 2) == 0; + v25 = (*(_BYTE *)(a5 + 13) & 2) != 0; + goto LABEL_137; + } +LABEL_119: + v135 = a2 == -1; + v124 = v135 & (a1 != 0); +LABEL_120: + *a6 |= 4u; + if ( v124 ) + goto LABEL_189; +LABEL_121: + v37 = a4 == -1; + if ( a3 ) + { + if ( a4 == -1 ) + { + v37 = 0; + if ( a3[2] >= a3[3] ) + v37 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + } + } + if ( v37 == v135 ) + *a6 |= 2u; + if ( Block != v152 ) + operator delete(Block); + if ( v147 != v149 ) + operator delete(v147); + return a1; + case 3: + if ( !*(_DWORD *)(v117 + 32) ) + { + if ( !*(_DWORD *)(v117 + 40) ) + goto LABEL_74; +LABEL_199: + v141 = a2 == -1; + if ( !a1 || a2 != -1 ) + { + v130 = a2 == -1; + goto LABEL_202; + } +LABEL_253: + v130 = 1; + v141 = 0; + if ( a1[2] >= a1[3] ) + { + v67 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v68 = 0; + if ( !v67 ) + v68 = a1; + v130 = 1; + v141 = v67; + a1 = v68; + } +LABEL_202: + v51 = a4 == -1; + v109 = v51 & (a3 != 0); + if ( v109 ) + { + v51 = 0; + if ( a3[2] >= a3[3] ) + { + v84 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + v51 = 0; + if ( v84 ) + v51 = v109; + v85 = 0; + if ( !v84 ) + v85 = a3; + a3 = v85; + } + } + if ( v51 == v141 ) + { +LABEL_204: + if ( !*(_DWORD *)(v117 + 32) || *(_DWORD *)(v117 + 40) ) + { +LABEL_74: + v25 = v110; + v104 = !v110; + goto LABEL_137; + } + goto LABEL_157; + } + if ( a1 && v130 ) + { + v70 = (_BYTE *)a1[2]; + if ( (unsigned int)v70 < a1[3] ) + { + if ( *v70 != **(_BYTE **)(v117 + 36) ) + goto LABEL_204; + v101 = *(_DWORD *)(v117 + 40); + goto LABEL_267; + } + v71 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v93 = 0; + if ( v71 != -1 ) + v93 = a1; + a1 = v93; + } + else + { + LOBYTE(v71) = a2; + } + if ( **(_BYTE **)(v117 + 36) != (_BYTE)v71 ) + goto LABEL_204; + v101 = *(_DWORD *)(v117 + 40); + v70 = (_BYTE *)a1[2]; + if ( (unsigned int)v70 >= a1[3] ) + { + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + goto LABEL_268; + } +LABEL_267: + a1[2] = v70 + 1; +LABEL_268: + a2 = -1; + v25 = 0; + v104 = 1; + v111 = 1; + goto LABEL_137; + } + v139 = a2 == -1; + if ( v139 && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v90 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v91 = 0; + if ( !v90 ) + v91 = a1; + v92 = v139 && a1 != 0; + a1 = v91; + if ( !v90 ) + v92 = 0; + v128 = v92; + } + else + { + v128 = 0; + } + } + else + { + v128 = a2 == -1; + } + v43 = a4 == -1; + v108 = v43 & (a3 != 0); + if ( v108 ) + { + v43 = 0; + if ( a3[2] >= a3[3] ) + { + v82 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + v43 = 0; + if ( v82 ) + v43 = v108; + v83 = 0; + if ( !v82 ) + v83 = a3; + a3 = v83; + } + } + if ( v128 == v43 ) + { +LABEL_155: + if ( *(_DWORD *)(v117 + 40) ) + goto LABEL_199; +LABEL_156: + if ( !*(_DWORD *)(v117 + 32) ) + goto LABEL_74; +LABEL_157: + v104 = 1; + v25 = 0; + v111 = 1; + goto LABEL_137; + } + if ( a1 && a2 == -1 ) + { + v66 = (_BYTE *)a1[2]; + if ( (unsigned int)v66 < a1[3] ) + { + if ( **(_BYTE **)(v117 + 28) != *v66 ) + { + if ( *(_DWORD *)(v117 + 40) ) + goto LABEL_253; + goto LABEL_156; + } + v101 = *(_DWORD *)(v117 + 32); + goto LABEL_260; + } + v69 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v94 = 0; + if ( v69 != -1 ) + v94 = a1; + a1 = v94; + } + else + { + LOBYTE(v69) = a2; + } + if ( **(_BYTE **)(v117 + 28) != (_BYTE)v69 ) + goto LABEL_155; + v101 = *(_DWORD *)(v117 + 32); + v66 = (_BYTE *)a1[2]; + if ( (unsigned int)v66 >= a1[3] ) + { + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); +LABEL_261: + a2 = -1; + v25 = 0; +LABEL_198: + v104 = 1; + goto LABEL_137; + } +LABEL_260: + a1[2] = v66 + 1; + goto LABEL_261; + case 4: + while ( 2 ) + { + v132 = a2 == -1; + if ( v132 && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v53 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1) == -1; + v54 = 0; + if ( !v53 ) + v54 = a1; + v55 = v132 && a1 != 0; + a1 = v54; + if ( !v53 ) + v55 = 0; + v121 = v55; + } + else + { + v121 = 0; + } + } + else + { + v121 = a2 == -1; + } + v11 = a4 == -1; + v103 = v11 & (a3 != 0); + if ( v103 && (v11 = 0, a3[2] >= a3[3]) ) + { + v34 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + v35 = v103; + if ( !v34 ) + v35 = 0; + v36 = 0; + if ( !v34 ) + v36 = a3; + a3 = v36; + if ( v35 == v121 ) + goto LABEL_117; + } + else if ( v11 == v121 ) + { + goto LABEL_117; + } + if ( a1 && a2 == -1 ) + { + v39 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v39 >= a1[3] ) + { + v56 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v57 = v56 == -1; + v58 = -1; + if ( v56 != -1 ) + v58 = v56; + v59 = 0; + if ( !v57 ) + v59 = a1; + v133 = v58; + a1 = v59; + } + else + { + v133 = *v39; + } + } + else + { + v133 = a2; + } + v12 = memchr((const void *)(v117 + 57), (char)v133, 0xAu); + if ( v12 ) + { + v7 = Block; + v131 = v12[(_DWORD)std::money_base::_S_atoms - 56 - v117]; + v143 = v151; + v8 = 15; + if ( Block != v152 ) + v8 = v152[0]; + v120 = (std::locale::facet *)(v151 + 1); + if ( v151 + 1 > v8 ) + { + std::string::_M_mutate((int)&Block, v151, 0, 0, 1u); + v7 = Block; + } + ++v116; + v7[v143] = v131; + v151 = (size_t)v120; + *((_BYTE *)Block + v143 + 1) = 0; +LABEL_14: + v9 = a1; + v10 = a1[2]; + if ( v10 < a1[3] ) + { +LABEL_15: + v9[2] = v10 + 1; +LABEL_16: + a2 = -1; + continue; + } +LABEL_35: + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + goto LABEL_16; + } + break; + } + v104 = v112 | (*(_BYTE *)(v117 + 17) != v133); + if ( !v104 ) + { + if ( *(int *)(v117 + 44) > 0 ) + { + v40 = v116; + v112 = 1; + v116 = 0; + v97 = v40; + goto LABEL_14; + } + v112 = 0; +LABEL_117: + v104 = 1; +LABEL_118: + if ( !v151 ) + goto LABEL_119; + goto LABEL_136; + } + v13 = *(_BYTE *)(v117 + 16); + if ( !v13 ) + goto LABEL_118; + if ( *(_BYTE *)(v117 + 18) == v133 ) + { + if ( !v112 ) + { + if ( v116 ) + { + v134 = v116; + v14 = v147; + v144 = (size_t)v148; + v15 = 15; + if ( v147 != v149 ) + v15 = v149[0]; + v122 = (std::locale::facet *)((char *)v148 + 1); + if ( (unsigned int)v148 + 1 > v15 ) + { + std::string::_M_mutate((int)&v147, (size_t)v148, 0, 0, 1u); + v14 = v147; + } + v116 = 0; + v14[v144] = v134; + v148 = v122; + *((_BYTE *)v147 + v144 + 1) = 0; + v9 = a1; + v10 = a1[2]; + if ( v10 < a1[3] ) + goto LABEL_15; + goto LABEL_35; + } + v104 = 0; + goto LABEL_118; + } + v13 = v112; + } + v104 = v13; + if ( !v151 ) + goto LABEL_119; +LABEL_136: + v25 = v104 ^ 1; + goto LABEL_137; + default: + v104 = 1; + v25 = 0; + goto LABEL_137; + } + } +} +// 49066B: variable 'v95' is possibly undefined +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 53F70C: using guessed type signed __int32 std::moneypunct::id; +// 5606E4: using guessed type int (*off_5606E4)(); + +//----- (00490DB0) -------------------------------------------------------- +int __thiscall std::money_get>::get( + void *this, + int a2, + int a3, + int a4, + int a5, + unsigned __int8 a6) +{ + return (*(int (__thiscall **)(void *, int, int, int, int, _DWORD))(*(_DWORD *)this + 12))(this, a2, a3, a4, a5, a6); +} + +//----- (00490DC0) -------------------------------------------------------- +int __thiscall std::money_get>::get( + void *this, + int a2, + int a3, + int a4, + int a5, + unsigned __int8 a6) +{ + return (*(int (__thiscall **)(void *, int, int, int, int, _DWORD))(*(_DWORD *)this + 8))(this, a2, a3, a4, a5, a6); +} + +//----- (00490DD0) -------------------------------------------------------- +__int64 __stdcall std::money_get>::do_get( + __int64 a1, + _DWORD *a2, + int a3, + char a4, + int a5, + _DWORD *a6, + int *a7) +{ + __int64 v7; // rax + char v9; // al + void (__thiscall *v10)(_BYTE *, char *, char *, void *); // eax + void *v11; // [esp+28h] [ebp-70h] + char *v12; // [esp+2Ch] [ebp-6Ch] + _BYTE *v13; // [esp+30h] [ebp-68h] + _DWORD *Size; // [esp+34h] [ebp-64h] + char *Block; // [esp+38h] [ebp-60h] + void *v16; // [esp+78h] [ebp-20h] BYREF + _DWORD *v17; // [esp+7Ch] [ebp-1Ch] + char v18[24]; // [esp+80h] [ebp-18h] BYREF + __int64 v19; // [esp+A0h] [ebp+8h] + + v18[0] = 0; + v13 = std::use_facet>(a5 + 108); + v16 = v18; + v17 = 0; + if ( a4 ) + LODWORD(v7) = std::money_get>::_M_extract( + (_DWORD *)a1, + SHIDWORD(a1), + a2, + a3, + a5, + a6, + &v16); + else + LODWORD(v7) = std::money_get>::_M_extract( + (_DWORD *)a1, + SHIDWORD(a1), + a2, + a3, + a5, + a6, + &v16); + v19 = v7; + Size = v17; + if ( !v17 ) + goto LABEL_4; + std::string::resize(a7, v17, 0); + Block = (char *)v16; + v12 = (char *)v16 + (_DWORD)Size; + v9 = v13[28]; + v11 = (void *)*a7; + if ( v9 != 1 ) + { + if ( !v9 ) + std::ctype::_M_widen_init((int)v13); + v10 = *(void (__thiscall **)(_BYTE *, char *, char *, void *))(*(_DWORD *)v13 + 28); + if ( (char *)v10 == (char *)std::ctype::do_widen ) + { + if ( v12 != Block ) + { +LABEL_14: + memcpy(v11, Block, (size_t)Size); + Block = (char *)v16; + goto LABEL_5; + } + } + else + { + v10(v13, Block, v12, v11); + } +LABEL_4: + Block = (char *)v16; + goto LABEL_5; + } + if ( v12 != v16 ) + goto LABEL_14; +LABEL_5: + if ( Block != v18 ) + operator delete(Block); + return v19; +} +// 490E76: variable 'v7' is possibly undefined + +//----- (00490FE0) -------------------------------------------------------- +__int64 __stdcall std::money_get>::do_get( + __int64 a1, + _DWORD *a2, + int a3, + char a4, + int a5, + _DWORD *a6, + long double *a7) +{ + __int64 v7; // rax + void *Block[2]; // [esp+68h] [ebp-20h] BYREF + char v10[24]; // [esp+70h] [ebp-18h] BYREF + __int64 v11; // [esp+90h] [ebp+8h] + + Block[0] = v10; + Block[1] = 0; + v10[0] = 0; + if ( a4 ) + LODWORD(v7) = std::money_get>::_M_extract( + (_DWORD *)a1, + SHIDWORD(a1), + a2, + a3, + a5, + a6, + Block); + else + LODWORD(v7) = std::money_get>::_M_extract( + (_DWORD *)a1, + SHIDWORD(a1), + a2, + a3, + a5, + a6, + Block); + v11 = v7; + std::locale::facet::_S_get_c_locale(); + std::__convert_to_v((char *)Block[0], a7, a6); + if ( Block[0] != v10 ) + operator delete(Block[0]); + return v11; +} +// 491071: variable 'v7' is possibly undefined + +//----- (00491110) -------------------------------------------------------- +_DWORD *__stdcall std::money_get>::_M_extract( + _DWORD *a1, + __int16 a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + char v7; // al + _BYTE *v8; // edx + unsigned int v9; // eax + _DWORD *v10; // ecx + unsigned int v11; // eax + char v12; // al + __int16 v13; // dx + _WORD *v14; // eax + _BYTE *v15; // edx + unsigned int v16; // eax + char v17; // al + int v18; // eax + char v19; // al + __int16 v20; // ax + unsigned int v21; // eax + __int16 *v22; // eax + __int16 v23; // ax + bool v24; // zf + _DWORD *v25; // eax + char v26; // bl + char v27; // al + unsigned __int16 v28; // ax + unsigned int v29; // eax + __int16 *v30; // eax + __int16 v31; // ax + bool v32; // zf + _DWORD *v33; // eax + bool v34; // bl + char v35; // al + unsigned __int16 v36; // ax + unsigned int v37; // eax + char v38; // al + int v39; // edx + bool v40; // al + __int16 v41; // ax + unsigned int v42; // eax + __int16 *v43; // eax + __int16 v44; // ax + bool v45; // zf + _DWORD *v46; // eax + bool v47; // bl + __int16 *v48; // eax + __int16 v49; // ax + bool v50; // zf + _DWORD *v51; // ebx + char v52; // al + _BYTE *v53; // eax + _BYTE *v54; // edx + __int16 *v56; // eax + __int16 v57; // ax + bool v58; // zf + _DWORD *v59; // eax + bool v60; // bl + __int16 *v61; // eax + _DWORD *v62; // eax + char v63; // al + __int16 *v64; // eax + __int16 v65; // ax + bool v66; // zf + _DWORD *v67; // ebx + unsigned __int16 *v68; // eax + _DWORD *v69; // ebx + char v70; // al + __int16 *v71; // eax + __int16 v72; // ax + bool v73; // zf + _DWORD *v74; // ebx + char v75; // al + _BYTE *v76; // eax + unsigned int v77; // edx + __int16 *v78; // eax + _DWORD *v79; // ebx + __int16 *v80; // eax + __int16 v81; // ax + bool v82; // zf + _DWORD *v83; // ebx + __int16 *v84; // eax + _DWORD *v85; // ebx + char v86; // al + unsigned int first_not_of; // eax + __int16 v88; // ax + unsigned int v89; // eax + _DWORD *v90; // eax + __int16 *v91; // eax + __int16 v92; // ax + __int16 *v93; // eax + __int16 v94; // ax + unsigned __int8 v95; // bl + bool v96; // zf + __int16 *v97; // eax + __int16 v98; // ax + bool v99; // zf + _DWORD *v100; // ebx + __int16 *v101; // eax + __int16 v102; // ax + bool v103; // zf + _DWORD *v104; // eax + bool v105; // bl + __int16 *v106; // eax + __int16 v107; // ax + _DWORD *v108; // ebx + unsigned int v109; // eax + __int16 *v110; // eax + _DWORD *v111; // ebx + __int16 *v112; // eax + __int16 v113; // ax + bool v114; // zf + _DWORD *v115; // eax + bool v116; // bl + __int16 *v117; // eax + __int16 v118; // ax + bool v119; // zf + _DWORD *v120; // eax + bool v121; // bl + __int16 *v122; // eax + __int16 v123; // ax + bool v124; // zf + _DWORD *v125; // ebx + unsigned __int16 *v126; // eax + _DWORD *v127; // ebx + __int16 *v128; // eax + __int16 v129; // ax + bool v130; // zf + _DWORD *v131; // ebx + unsigned int v132; // [esp+8h] [ebp-E0h] + std::locale::_Impl *v133; // [esp+1Ch] [ebp-CCh] + char v134; // [esp+20h] [ebp-C8h] + char v135; // [esp+2Ch] [ebp-BCh] + unsigned int v136; // [esp+2Ch] [ebp-BCh] + void *v137; // [esp+30h] [ebp-B8h] + unsigned int v138; // [esp+34h] [ebp-B4h] + int v139; // [esp+3Ch] [ebp-ACh] + int v140; // [esp+3Ch] [ebp-ACh] + bool v141; // [esp+40h] [ebp-A8h] + char v142; // [esp+41h] [ebp-A7h] + bool v143; // [esp+42h] [ebp-A6h] + char v144; // [esp+43h] [ebp-A5h] + char v145; // [esp+44h] [ebp-A4h] + char v146; // [esp+48h] [ebp-A0h] + char v147; // [esp+48h] [ebp-A0h] + unsigned int i; // [esp+48h] [ebp-A0h] + char v149; // [esp+48h] [ebp-A0h] + unsigned int v150; // [esp+48h] [ebp-A0h] + char v151; // [esp+48h] [ebp-A0h] + char v152; // [esp+48h] [ebp-A0h] + int *v153; // [esp+4Ch] [ebp-9Ch] + int v154; // [esp+4Ch] [ebp-9Ch] + size_t v155; // [esp+50h] [ebp-98h] + int v156; // [esp+54h] [ebp-94h] + std::locale::facet *v157; // [esp+58h] [ebp-90h] + std::locale::facet *v158; // [esp+58h] [ebp-90h] + char v159; // [esp+58h] [ebp-90h] + std::locale::facet *v160; // [esp+58h] [ebp-90h] + char v161; // [esp+58h] [ebp-90h] + char v162; // [esp+58h] [ebp-90h] + char v163; // [esp+58h] [ebp-90h] + bool v164; // [esp+58h] [ebp-90h] + char v165; // [esp+58h] [ebp-90h] + char v166; // [esp+58h] [ebp-90h] + bool v167; // [esp+58h] [ebp-90h] + char v169; // [esp+60h] [ebp-88h] + bool v170; // [esp+60h] [ebp-88h] + char v171; // [esp+60h] [ebp-88h] + unsigned __int8 v172; // [esp+60h] [ebp-88h] + bool v173; // [esp+60h] [ebp-88h] + bool v174; // [esp+60h] [ebp-88h] + bool v175; // [esp+60h] [ebp-88h] + bool v176; // [esp+60h] [ebp-88h] + size_t v177; // [esp+60h] [ebp-88h] + char v178; // [esp+60h] [ebp-88h] + size_t v180; // [esp+64h] [ebp-84h] + size_t v181; // [esp+64h] [ebp-84h] + int v183; // [esp+ACh] [ebp-3Ch] + void *v184; // [esp+B0h] [ebp-38h] BYREF + size_t v185; // [esp+B4h] [ebp-34h] + int v186[4]; // [esp+B8h] [ebp-30h] BYREF + void *Block; // [esp+C8h] [ebp-20h] BYREF + size_t v188; // [esp+CCh] [ebp-1Ch] + int v189[5]; // [esp+D0h] [ebp-18h] BYREF + + v137 = std::use_facet>(a5 + 108); + v157 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v153 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)v157); + v156 = *v153; + if ( !*v153 ) + { + v90 = operator new(0x54u); + v90[1] = 0; + *v90 = &off_5606F4; + v90[2] = 0; + v90[3] = 0; + *((_BYTE *)v90 + 16) = 0; + *(_DWORD *)((char *)v90 + 18) = 0; + v90[6] = 0; + v90[7] = 0; + v90[8] = 0; + v90[9] = 0; + v90[10] = 0; + v90[11] = 0; + v90[12] = 0; + v90[13] = 0; + v90[14] = 0; + *((_BYTE *)v90 + 82) = 0; + v133 = (std::locale::_Impl *)v90; + std::__moneypunct_cache::_M_cache((int)v90, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v133, v157, v132); + v156 = *v153; + } + if ( *(_DWORD *)(v156 + 36) ) + v141 = *(_DWORD *)(v156 + 44) != 0; + else + v141 = 0; + v185 = 0; + v184 = v186; + LOBYTE(v186[0]) = 0; + if ( *(_BYTE *)(v156 + 16) ) + std::string::reserve(&v184, 0x20u); + Block = v189; + v188 = 0; + LOBYTE(v189[0]) = 0; + std::string::reserve(&Block, 0x20u); + v139 = 0; + v144 = 0; + v154 = 0; + v183 = *(_DWORD *)(v156 + 56); + v134 = 0; + v138 = 0; + v142 = 0; + while ( 2 ) + { + switch ( *((_BYTE *)&v183 + v139) ) + { + case 0: + v146 = 1; + goto LABEL_39; + case 1: + v174 = a2 == -1; + if ( v174 && a1 != 0 ) + { + v101 = (__int16 *)a1[2]; + if ( (unsigned int)v101 >= a1[3] ) + v102 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v102 = *v101; + v103 = v102 == -1; + v104 = 0; + if ( !v103 ) + v104 = a1; + v105 = v174 && a1 != 0; + a1 = v104; + if ( !v103 ) + v105 = 0; + v163 = v105; + } + else + { + v163 = a2 == -1; + } + v35 = a4 == -1; + v149 = v35 & (a3 != 0); + if ( v149 ) + { + v97 = (__int16 *)a3[2]; + if ( (unsigned int)v97 >= a3[3] ) + v98 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v98 = *v97; + v99 = v98 == -1; + v35 = 0; + if ( v99 ) + v35 = v149; + v100 = 0; + if ( !v99 ) + v100 = a3; + a3 = v100; + } + v146 = 0; + if ( v35 != v163 ) + { + if ( a1 && a2 == -1 ) + { + v126 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v126 >= a1[3] ) + v36 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v36 = *v126; + v127 = 0; + if ( v36 != 0xFFFF ) + v127 = a1; + a1 = v127; + } + else + { + v36 = a2; + } + v146 = (*(int (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v137 + 8))(v137, 32, v36); + if ( v146 ) + { + v37 = a1[2]; + if ( v37 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v37 + 2; + a2 = -1; + } + } +LABEL_39: + if ( v139 == 3 ) + { + v17 = v146 & (v138 > 1); + goto LABEL_41; + } + while ( 1 ) + { + v173 = a2 == -1; + if ( v173 && a1 != 0 ) + { + v30 = (__int16 *)a1[2]; + if ( (unsigned int)v30 >= a1[3] ) + v31 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v31 = *v30; + v32 = v31 == -1; + v33 = 0; + if ( !v32 ) + v33 = a1; + v34 = v173 && a1 != 0; + a1 = v33; + if ( !v32 ) + v34 = 0; + v162 = v34; + } + else + { + v162 = a2 == -1; + } + v27 = a4 == -1; + v135 = v27 & (a3 != 0); + if ( v135 ) + { + v64 = (__int16 *)a3[2]; + if ( (unsigned int)v64 >= a3[3] ) + v65 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v65 = *v64; + v66 = v65 == -1; + v67 = 0; + v27 = v135; + if ( !v66 ) + v67 = a3; + a3 = v67; + if ( !v66 ) + v27 = 0; + } + if ( v162 == v27 ) + break; + if ( a1 && a2 == -1 ) + { + v68 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v68 >= a1[3] ) + v28 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v28 = *v68; + v69 = 0; + if ( v28 != 0xFFFF ) + v69 = a1; + a1 = v69; + } + else + { + v28 = a2; + } + if ( !(*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v137 + 8))(v137, 32, v28) ) + break; + v29 = a1[2]; + if ( v29 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v29 + 2; + a2 = -1; + } + goto LABEL_157; + case 2: + if ( (*(_BYTE *)(a5 + 13) & 2) != 0 ) + goto LABEL_103; + v38 = v139 == 0 || v138 > 1; + if ( v38 ) + goto LABEL_103; + if ( v139 != 1 ) + { + v146 = 1; + if ( v139 != 2 ) + goto LABEL_158; + if ( HIBYTE(v183) == 4 ) + goto LABEL_103; + v39 = 3; + if ( HIBYTE(v183) == 3 && v141 ) + goto LABEL_103; +LABEL_160: + v139 = v39; + continue; + } + if ( !v141 && (_BYTE)v183 != 3 && BYTE2(v183) != 1 ) + { + v39 = 2; + goto LABEL_160; + } +LABEL_103: + v150 = 0; + v136 = *(_DWORD *)(v156 + 28); + while ( 1 ) + { + v175 = a2 == -1; + if ( v175 && a1 != 0 ) + { + v43 = (__int16 *)a1[2]; + if ( (unsigned int)v43 >= a1[3] ) + v44 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v44 = *v43; + v45 = v44 == -1; + v46 = 0; + if ( !v45 ) + v46 = a1; + v47 = v175 && a1 != 0; + a1 = v46; + if ( !v45 ) + v47 = 0; + v164 = v47; + } + else + { + v164 = a2 == -1; + } + v40 = a4 == -1; + v143 = v40 && a3 != 0; + if ( v143 ) + { + v80 = (__int16 *)a3[2]; + if ( (unsigned int)v80 >= a3[3] ) + v81 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v81 = *v80; + v82 = v81 == -1; + v83 = 0; + v40 = v143; + if ( !v82 ) + v83 = a3; + a3 = v83; + if ( !v82 ) + v40 = 0; + } + v38 = (v150 < v136) & (v164 ^ v40); + if ( !v38 ) + break; + if ( a1 && a2 == -1 ) + { + v84 = (__int16 *)a1[2]; + if ( (unsigned int)v84 >= a1[3] ) + v41 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v41 = *v84; + v85 = 0; + if ( v41 != -1 ) + v85 = a1; + a1 = v85; + } + else + { + v41 = a2; + } + if ( *(_WORD *)(*(_DWORD *)(v156 + 24) + 2 * v150) != v41 ) + goto LABEL_227; + v42 = a1[2]; + if ( v42 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v42 + 2; + ++v150; + a2 = -1; + } + if ( v150 == v136 ) + { +LABEL_247: + v146 = 1; + } + else + { +LABEL_227: + if ( v150 ) + goto LABEL_131; + v146 = (*(_BYTE *)(a5 + 13) & 2) == 0; + v38 = (*(_BYTE *)(a5 + 13) & 2) != 0; + } +LABEL_158: + v39 = v139 + 1; + if ( v139 + 1 <= 3 && !v38 ) + goto LABEL_160; + v17 = v146 & (v138 > 1); +LABEL_41: + if ( v17 ) + { + if ( v142 ) + v18 = *(_DWORD *)(v156 + 40); + else + v18 = *(_DWORD *)(v156 + 32); + v140 = v18; + for ( i = 1; ; ++i ) + { + v172 = a2 == -1; + if ( (v172 & (a1 != 0)) != 0 ) + { + v22 = (__int16 *)a1[2]; + if ( (unsigned int)v22 >= a1[3] ) + v23 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v23 = *v22; + v24 = v23 == -1; + v25 = 0; + if ( !v24 ) + v25 = a1; + v26 = v172 & (a1 != 0); + a1 = v25; + if ( !v24 ) + v26 = 0; + v161 = v26; + } + else + { + v161 = a2 == -1; + } + v19 = a4 == -1; + v145 = v19 & (a3 != 0); + if ( v145 ) + { + v71 = (__int16 *)a3[2]; + if ( (unsigned int)v71 >= a3[3] ) + v72 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v72 = *v71; + v73 = v72 == -1; + v74 = 0; + v19 = v145; + if ( !v73 ) + v74 = a3; + a3 = v74; + if ( !v73 ) + v19 = 0; + if ( i >= v138 ) + { +LABEL_189: + if ( i == v138 ) + { + if ( v188 <= 1 ) + goto LABEL_191; + goto LABEL_236; + } + goto LABEL_132; + } + } + else if ( i >= v138 ) + { + goto LABEL_189; + } + if ( v19 == v161 ) + goto LABEL_189; + if ( a1 && a2 == -1 ) + { + v78 = (__int16 *)a1[2]; + if ( (unsigned int)v78 >= a1[3] ) + v20 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v20 = *v78; + v79 = 0; + if ( v20 != -1 ) + v79 = a1; + a1 = v79; + } + else + { + v20 = a2; + } + if ( *(_WORD *)(v140 + 2 * i) != v20 ) + goto LABEL_132; + v21 = a1[2]; + if ( v21 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v21 + 2; + a2 = -1; + } + } + if ( !v146 ) + { +LABEL_131: + v172 = a2 == -1; + goto LABEL_132; + } + if ( v188 <= 1 ) + goto LABEL_191; +LABEL_236: + first_not_of = std::string::find_first_not_of(&Block, 48, 0); + if ( first_not_of ) + { + if ( first_not_of != -1 ) + goto LABEL_238; + first_not_of = v188 - 1; + if ( !v188 ) + { + v188 = 0; + *(_BYTE *)Block = 0; + goto LABEL_191; + } + if ( v188 != 1 ) + { +LABEL_238: + if ( v188 <= first_not_of ) + first_not_of = v188; + std::string::_M_erase((int *)&Block, 0, first_not_of); + } + } +LABEL_191: + if ( v142 && *(_BYTE *)Block != 48 ) + std::string::_M_replace_aux(&Block, 0, 0, 1u, 45); + v177 = v185; + if ( v185 ) + { + v75 = v134; + if ( !v144 ) + v75 = v154; + v155 = v185 + 1; + v166 = v75; + v76 = v184; + v77 = 15; + if ( v184 != v186 ) + v77 = v186[0]; + if ( v185 + 1 > v77 ) + { + std::string::_M_mutate((int)&v184, v185, 0, 0, 1u); + v76 = v184; + } + v76[v177] = v166; + v185 = v155; + *((_BYTE *)v184 + v177 + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v156 + 8), *(_DWORD *)(v156 + 12), (int)&v184) ) + *a6 |= 4u; + } + v172 = a2 == -1; + if ( v144 && *(_DWORD *)(v156 + 48) != v154 ) + { +LABEL_132: + v53 = a6; + *a6 |= 4u; + } + else + { + v53 = std::string::swap(a7, &Block); + } + if ( (v172 & (a1 != 0)) != 0 ) + { + v93 = (__int16 *)a1[2]; + if ( (unsigned int)v93 >= a1[3] ) + v94 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v94 = *v93; + v95 = v172 & (a1 != 0); + v96 = v94 == -1; + if ( v94 != -1 ) + v95 = 0; + v53 = 0; + if ( !v96 ) + v53 = a1; + v172 = v95; + a1 = v53; + } + LOBYTE(v53) = a4 == -1; + v54 = v53; + if ( a3 && a4 == -1 ) + { + v91 = (__int16 *)a3[2]; + if ( (unsigned int)v91 >= a3[3] ) + v92 = (*(int (__fastcall **)(_DWORD *, _BYTE *))(*a3 + 36))(a3, v54); + else + v92 = *v91; + LOBYTE(v54) = v92 == -1; + } + if ( (_BYTE)v54 == v172 ) + *a6 |= 2u; + if ( Block != v189 ) + operator delete(Block); + if ( v184 != v186 ) + operator delete(v184); + return a1; + case 3: + if ( *(_DWORD *)(v156 + 36) ) + { + v176 = a2 == -1; + if ( v176 && a1 != 0 ) + { + v112 = (__int16 *)a1[2]; + if ( (unsigned int)v112 >= a1[3] ) + v113 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v113 = *v112; + v114 = v113 == -1; + v115 = 0; + if ( !v114 ) + v115 = a1; + v116 = v176 && a1 != 0; + a1 = v115; + if ( !v114 ) + v116 = 0; + v165 = v116; + } + else + { + v165 = a2 == -1; + } + v70 = a4 == -1; + v151 = v70 & (a3 != 0); + if ( v151 ) + { + v122 = (__int16 *)a3[2]; + if ( (unsigned int)v122 >= a3[3] ) + v123 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v123 = *v122; + v124 = v123 == -1; + v70 = 0; + if ( v124 ) + v70 = v151; + v125 = 0; + if ( !v124 ) + v125 = a3; + a3 = v125; + } + if ( v165 != v70 ) + { + if ( a1 && a2 == -1 ) + { + v110 = (__int16 *)a1[2]; + if ( (unsigned int)v110 >= a1[3] ) + v88 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v88 = *v110; + v111 = 0; + if ( v88 != -1 ) + v111 = a1; + a1 = v111; + } + else + { + v88 = a2; + } + if ( **(_WORD **)(v156 + 32) == v88 ) + { + v138 = *(_DWORD *)(v156 + 36); + v89 = a1[2]; + if ( v89 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v89 + 2; + v38 = 0; + a2 = -1; + goto LABEL_247; + } + } + if ( !*(_DWORD *)(v156 + 44) ) + { + if ( !*(_DWORD *)(v156 + 36) ) + goto LABEL_95; +LABEL_181: + v146 = 1; + v38 = 0; + v142 = 1; + goto LABEL_158; + } + } + else if ( !*(_DWORD *)(v156 + 44) ) + { + goto LABEL_95; + } + v167 = a2 == -1; + if ( v167 && a1 != 0 ) + { + v117 = (__int16 *)a1[2]; + if ( (unsigned int)v117 >= a1[3] ) + v118 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v118 = *v117; + v119 = v118 == -1; + v120 = 0; + if ( !v119 ) + v120 = a1; + v121 = v167 && a1 != 0; + a1 = v120; + if ( !v119 ) + v121 = 0; + v178 = v121; + } + else + { + v178 = a2 == -1; + } + v86 = a4 == -1; + v152 = v86 & (a3 != 0); + if ( v152 ) + { + v128 = (__int16 *)a3[2]; + if ( (unsigned int)v128 >= a3[3] ) + v129 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v129 = *v128; + v130 = v129 == -1; + v86 = 0; + if ( v130 ) + v86 = v152; + v131 = 0; + if ( !v130 ) + v131 = a3; + a3 = v131; + } + if ( v178 == v86 ) + goto LABEL_369; + if ( a1 && a2 == -1 ) + { + v106 = (__int16 *)a1[2]; + if ( (unsigned int)v106 >= a1[3] ) + v107 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v107 = *v106; + v108 = 0; + if ( v107 != -1 ) + v108 = a1; + a1 = v108; + } + else + { + v107 = a2; + } + if ( **(_WORD **)(v156 + 40) != v107 ) + { +LABEL_369: + if ( !*(_DWORD *)(v156 + 36) || *(_DWORD *)(v156 + 44) ) + { +LABEL_95: + v38 = v141; + v146 = !v141; + goto LABEL_158; + } + goto LABEL_181; + } + v138 = *(_DWORD *)(v156 + 44); + v109 = a1[2]; + if ( v109 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v109 + 2; + v146 = 1; + v38 = 0; + a2 = -1; + v142 = 1; + goto LABEL_158; + case 4: + while ( 2 ) + { + v170 = a2 == -1; + if ( v170 && a1 != 0 ) + { + v56 = (__int16 *)a1[2]; + if ( (unsigned int)v56 >= a1[3] ) + v57 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v57 = *v56; + v58 = v57 == -1; + v59 = 0; + if ( !v58 ) + v59 = a1; + v60 = v170 && a1 != 0; + a1 = v59; + if ( !v58 ) + v60 = 0; + v159 = v60; + } + else + { + v159 = a2 == -1; + } + v12 = a4 == -1; + v147 = v12 & (a3 != 0); + if ( v147 ) + { + v48 = (__int16 *)a3[2]; + if ( (unsigned int)v48 >= a3[3] ) + v49 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v49 = *v48; + v50 = v49 == -1; + v51 = 0; + v52 = v147; + if ( !v50 ) + v51 = a3; + a3 = v51; + if ( !v50 ) + v52 = 0; + if ( v159 == v52 ) + goto LABEL_129; + } + else if ( v159 == v12 ) + { + goto LABEL_129; + } + if ( a1 && a2 == -1 ) + { + v61 = (__int16 *)a1[2]; + if ( (unsigned int)v61 >= a1[3] ) + v13 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v13 = *v61; + v62 = 0; + if ( v13 != -1 ) + v62 = a1; + a1 = v62; + } + else + { + v13 = a2; + } + v14 = (_WORD *)(v156 + 62); + if ( v13 == *(_WORD *)(v156 + 62) ) + { +LABEL_32: + v15 = Block; + v171 = std::money_base::_S_atoms[((int)v14 - v156 - 60) >> 1]; + v181 = v188; + v16 = 15; + if ( Block != v189 ) + v16 = v189[0]; + v160 = (std::locale::facet *)(v188 + 1); + if ( v188 + 1 > v16 ) + { + std::string::_M_mutate((int)&Block, v188, 0, 0, 1u); + v15 = Block; + } + ++v154; + v15[v181] = v171; + v188 = (size_t)v160; + *((_BYTE *)Block + v181 + 1) = 0; + v10 = a1; + v11 = a1[2]; + if ( v11 >= a1[3] ) + { +LABEL_37: + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + goto LABEL_21; + } +LABEL_20: + v10[2] = v11 + 2; +LABEL_21: + a2 = -1; + continue; + } + break; + } + while ( ++v14 != (_WORD *)(v156 + 82) ) + { + if ( v13 == *v14 ) + goto LABEL_32; + } + v7 = v144 | (*(_WORD *)(v156 + 18) != (unsigned __int16)v13); + if ( v7 ) + { + v146 = *(_BYTE *)(v156 + 16); + if ( !v146 ) + goto LABEL_249; + if ( *(_WORD *)(v156 + 20) == v13 ) + { + if ( !v144 ) + { + if ( v154 ) + { + v169 = v154; + v8 = v184; + v180 = v185; + v9 = 15; + if ( v184 != v186 ) + v9 = v186[0]; + v158 = (std::locale::facet *)(v185 + 1); + if ( v185 + 1 > v9 ) + { + std::string::_M_mutate((int)&v184, v185, 0, 0, 1u); + v8 = v184; + } + v154 = 0; + v8[v180] = v169; + v185 = (size_t)v158; + *((_BYTE *)v184 + v180 + 1) = 0; +LABEL_19: + v10 = a1; + v11 = a1[2]; + if ( v11 >= a1[3] ) + goto LABEL_37; + goto LABEL_20; + } + v146 = 0; + goto LABEL_130; + } + v7 = v144; +LABEL_249: + v146 = v7; + if ( !v188 ) + goto LABEL_131; + goto LABEL_157; + } +LABEL_130: + if ( !v188 ) + goto LABEL_131; +LABEL_157: + v38 = v146 ^ 1; + goto LABEL_158; + } + if ( *(int *)(v156 + 48) > 0 ) + { + v63 = v154; + v144 = 1; + v154 = 0; + v134 = v63; + goto LABEL_19; + } + v144 = 0; +LABEL_129: + v146 = 1; + goto LABEL_130; + default: + v146 = 1; + v38 = 0; + goto LABEL_158; + } + } +} +// 49228F: variable 'v132' is possibly undefined +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 53F710: using guessed type signed __int32 std::moneypunct::id; +// 5606F4: using guessed type int (*off_5606F4)(); + +//----- (00492910) -------------------------------------------------------- +_DWORD *__stdcall std::money_get>::_M_extract( + _DWORD *a1, + __int16 a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + char v7; // al + _BYTE *v8; // edx + unsigned int v9; // eax + _DWORD *v10; // ecx + unsigned int v11; // eax + char v12; // al + __int16 v13; // dx + _WORD *v14; // eax + _BYTE *v15; // edx + unsigned int v16; // eax + char v17; // al + int v18; // eax + char v19; // al + __int16 v20; // ax + unsigned int v21; // eax + __int16 *v22; // eax + __int16 v23; // ax + bool v24; // zf + _DWORD *v25; // eax + char v26; // bl + char v27; // al + unsigned __int16 v28; // ax + unsigned int v29; // eax + __int16 *v30; // eax + __int16 v31; // ax + bool v32; // zf + _DWORD *v33; // eax + bool v34; // bl + char v35; // al + unsigned __int16 v36; // ax + unsigned int v37; // eax + char v38; // al + int v39; // edx + bool v40; // al + __int16 v41; // ax + unsigned int v42; // eax + __int16 *v43; // eax + __int16 v44; // ax + bool v45; // zf + _DWORD *v46; // eax + bool v47; // bl + __int16 *v48; // eax + __int16 v49; // ax + bool v50; // zf + _DWORD *v51; // ebx + char v52; // al + _BYTE *v53; // eax + _BYTE *v54; // edx + __int16 *v56; // eax + __int16 v57; // ax + bool v58; // zf + _DWORD *v59; // eax + bool v60; // bl + __int16 *v61; // eax + _DWORD *v62; // eax + char v63; // al + __int16 *v64; // eax + __int16 v65; // ax + bool v66; // zf + _DWORD *v67; // ebx + unsigned __int16 *v68; // eax + _DWORD *v69; // ebx + char v70; // al + __int16 *v71; // eax + __int16 v72; // ax + bool v73; // zf + _DWORD *v74; // ebx + char v75; // al + _BYTE *v76; // eax + unsigned int v77; // edx + __int16 *v78; // eax + _DWORD *v79; // ebx + __int16 *v80; // eax + __int16 v81; // ax + bool v82; // zf + _DWORD *v83; // ebx + __int16 *v84; // eax + _DWORD *v85; // ebx + char v86; // al + unsigned int first_not_of; // eax + __int16 v88; // ax + unsigned int v89; // eax + _DWORD *v90; // eax + __int16 *v91; // eax + __int16 v92; // ax + __int16 *v93; // eax + __int16 v94; // ax + unsigned __int8 v95; // bl + bool v96; // zf + __int16 *v97; // eax + __int16 v98; // ax + bool v99; // zf + _DWORD *v100; // ebx + __int16 *v101; // eax + __int16 v102; // ax + bool v103; // zf + _DWORD *v104; // eax + bool v105; // bl + __int16 *v106; // eax + __int16 v107; // ax + _DWORD *v108; // ebx + unsigned int v109; // eax + __int16 *v110; // eax + _DWORD *v111; // ebx + __int16 *v112; // eax + __int16 v113; // ax + bool v114; // zf + _DWORD *v115; // eax + bool v116; // bl + __int16 *v117; // eax + __int16 v118; // ax + bool v119; // zf + _DWORD *v120; // eax + bool v121; // bl + __int16 *v122; // eax + __int16 v123; // ax + bool v124; // zf + _DWORD *v125; // ebx + unsigned __int16 *v126; // eax + _DWORD *v127; // ebx + __int16 *v128; // eax + __int16 v129; // ax + bool v130; // zf + _DWORD *v131; // ebx + unsigned int v132; // [esp+8h] [ebp-E0h] + std::locale::_Impl *v133; // [esp+1Ch] [ebp-CCh] + char v134; // [esp+20h] [ebp-C8h] + char v135; // [esp+2Ch] [ebp-BCh] + unsigned int v136; // [esp+2Ch] [ebp-BCh] + void *v137; // [esp+30h] [ebp-B8h] + unsigned int v138; // [esp+34h] [ebp-B4h] + int v139; // [esp+3Ch] [ebp-ACh] + int v140; // [esp+3Ch] [ebp-ACh] + bool v141; // [esp+40h] [ebp-A8h] + char v142; // [esp+41h] [ebp-A7h] + bool v143; // [esp+42h] [ebp-A6h] + char v144; // [esp+43h] [ebp-A5h] + char v145; // [esp+44h] [ebp-A4h] + char v146; // [esp+48h] [ebp-A0h] + char v147; // [esp+48h] [ebp-A0h] + unsigned int i; // [esp+48h] [ebp-A0h] + char v149; // [esp+48h] [ebp-A0h] + unsigned int v150; // [esp+48h] [ebp-A0h] + char v151; // [esp+48h] [ebp-A0h] + char v152; // [esp+48h] [ebp-A0h] + int *v153; // [esp+4Ch] [ebp-9Ch] + int v154; // [esp+4Ch] [ebp-9Ch] + size_t v155; // [esp+50h] [ebp-98h] + int v156; // [esp+54h] [ebp-94h] + std::locale::facet *v157; // [esp+58h] [ebp-90h] + std::locale::facet *v158; // [esp+58h] [ebp-90h] + char v159; // [esp+58h] [ebp-90h] + std::locale::facet *v160; // [esp+58h] [ebp-90h] + char v161; // [esp+58h] [ebp-90h] + char v162; // [esp+58h] [ebp-90h] + char v163; // [esp+58h] [ebp-90h] + bool v164; // [esp+58h] [ebp-90h] + char v165; // [esp+58h] [ebp-90h] + char v166; // [esp+58h] [ebp-90h] + bool v167; // [esp+58h] [ebp-90h] + char v169; // [esp+60h] [ebp-88h] + bool v170; // [esp+60h] [ebp-88h] + char v171; // [esp+60h] [ebp-88h] + unsigned __int8 v172; // [esp+60h] [ebp-88h] + bool v173; // [esp+60h] [ebp-88h] + bool v174; // [esp+60h] [ebp-88h] + bool v175; // [esp+60h] [ebp-88h] + bool v176; // [esp+60h] [ebp-88h] + size_t v177; // [esp+60h] [ebp-88h] + char v178; // [esp+60h] [ebp-88h] + size_t v180; // [esp+64h] [ebp-84h] + size_t v181; // [esp+64h] [ebp-84h] + int v183; // [esp+ACh] [ebp-3Ch] + void *v184; // [esp+B0h] [ebp-38h] BYREF + size_t v185; // [esp+B4h] [ebp-34h] + int v186[4]; // [esp+B8h] [ebp-30h] BYREF + void *Block; // [esp+C8h] [ebp-20h] BYREF + size_t v188; // [esp+CCh] [ebp-1Ch] + int v189[5]; // [esp+D0h] [ebp-18h] BYREF + + v137 = std::use_facet>(a5 + 108); + v157 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v153 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)v157); + v156 = *v153; + if ( !*v153 ) + { + v90 = operator new(0x54u); + v90[1] = 0; + *v90 = &off_560704; + v90[2] = 0; + v90[3] = 0; + *((_BYTE *)v90 + 16) = 0; + *(_DWORD *)((char *)v90 + 18) = 0; + v90[6] = 0; + v90[7] = 0; + v90[8] = 0; + v90[9] = 0; + v90[10] = 0; + v90[11] = 0; + v90[12] = 0; + v90[13] = 0; + v90[14] = 0; + *((_BYTE *)v90 + 82) = 0; + v133 = (std::locale::_Impl *)v90; + std::__moneypunct_cache::_M_cache((int)v90, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v133, v157, v132); + v156 = *v153; + } + if ( *(_DWORD *)(v156 + 36) ) + v141 = *(_DWORD *)(v156 + 44) != 0; + else + v141 = 0; + v185 = 0; + v184 = v186; + LOBYTE(v186[0]) = 0; + if ( *(_BYTE *)(v156 + 16) ) + std::string::reserve(&v184, 0x20u); + Block = v189; + v188 = 0; + LOBYTE(v189[0]) = 0; + std::string::reserve(&Block, 0x20u); + v139 = 0; + v144 = 0; + v154 = 0; + v183 = *(_DWORD *)(v156 + 56); + v134 = 0; + v138 = 0; + v142 = 0; + while ( 2 ) + { + switch ( *((_BYTE *)&v183 + v139) ) + { + case 0: + v146 = 1; + goto LABEL_39; + case 1: + v174 = a2 == -1; + if ( v174 && a1 != 0 ) + { + v101 = (__int16 *)a1[2]; + if ( (unsigned int)v101 >= a1[3] ) + v102 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v102 = *v101; + v103 = v102 == -1; + v104 = 0; + if ( !v103 ) + v104 = a1; + v105 = v174 && a1 != 0; + a1 = v104; + if ( !v103 ) + v105 = 0; + v163 = v105; + } + else + { + v163 = a2 == -1; + } + v35 = a4 == -1; + v149 = v35 & (a3 != 0); + if ( v149 ) + { + v97 = (__int16 *)a3[2]; + if ( (unsigned int)v97 >= a3[3] ) + v98 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v98 = *v97; + v99 = v98 == -1; + v35 = 0; + if ( v99 ) + v35 = v149; + v100 = 0; + if ( !v99 ) + v100 = a3; + a3 = v100; + } + v146 = 0; + if ( v35 != v163 ) + { + if ( a1 && a2 == -1 ) + { + v126 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v126 >= a1[3] ) + v36 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v36 = *v126; + v127 = 0; + if ( v36 != 0xFFFF ) + v127 = a1; + a1 = v127; + } + else + { + v36 = a2; + } + v146 = (*(int (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v137 + 8))(v137, 32, v36); + if ( v146 ) + { + v37 = a1[2]; + if ( v37 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v37 + 2; + a2 = -1; + } + } +LABEL_39: + if ( v139 == 3 ) + { + v17 = v146 & (v138 > 1); + goto LABEL_41; + } + while ( 1 ) + { + v173 = a2 == -1; + if ( v173 && a1 != 0 ) + { + v30 = (__int16 *)a1[2]; + if ( (unsigned int)v30 >= a1[3] ) + v31 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v31 = *v30; + v32 = v31 == -1; + v33 = 0; + if ( !v32 ) + v33 = a1; + v34 = v173 && a1 != 0; + a1 = v33; + if ( !v32 ) + v34 = 0; + v162 = v34; + } + else + { + v162 = a2 == -1; + } + v27 = a4 == -1; + v135 = v27 & (a3 != 0); + if ( v135 ) + { + v64 = (__int16 *)a3[2]; + if ( (unsigned int)v64 >= a3[3] ) + v65 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v65 = *v64; + v66 = v65 == -1; + v67 = 0; + v27 = v135; + if ( !v66 ) + v67 = a3; + a3 = v67; + if ( !v66 ) + v27 = 0; + } + if ( v162 == v27 ) + break; + if ( a1 && a2 == -1 ) + { + v68 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v68 >= a1[3] ) + v28 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v28 = *v68; + v69 = 0; + if ( v28 != 0xFFFF ) + v69 = a1; + a1 = v69; + } + else + { + v28 = a2; + } + if ( !(*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v137 + 8))(v137, 32, v28) ) + break; + v29 = a1[2]; + if ( v29 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v29 + 2; + a2 = -1; + } + goto LABEL_157; + case 2: + if ( (*(_BYTE *)(a5 + 13) & 2) != 0 ) + goto LABEL_103; + v38 = v139 == 0 || v138 > 1; + if ( v38 ) + goto LABEL_103; + if ( v139 != 1 ) + { + v146 = 1; + if ( v139 != 2 ) + goto LABEL_158; + if ( HIBYTE(v183) == 4 ) + goto LABEL_103; + v39 = 3; + if ( HIBYTE(v183) == 3 && v141 ) + goto LABEL_103; +LABEL_160: + v139 = v39; + continue; + } + if ( !v141 && (_BYTE)v183 != 3 && BYTE2(v183) != 1 ) + { + v39 = 2; + goto LABEL_160; + } +LABEL_103: + v150 = 0; + v136 = *(_DWORD *)(v156 + 28); + while ( 1 ) + { + v175 = a2 == -1; + if ( v175 && a1 != 0 ) + { + v43 = (__int16 *)a1[2]; + if ( (unsigned int)v43 >= a1[3] ) + v44 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v44 = *v43; + v45 = v44 == -1; + v46 = 0; + if ( !v45 ) + v46 = a1; + v47 = v175 && a1 != 0; + a1 = v46; + if ( !v45 ) + v47 = 0; + v164 = v47; + } + else + { + v164 = a2 == -1; + } + v40 = a4 == -1; + v143 = v40 && a3 != 0; + if ( v143 ) + { + v80 = (__int16 *)a3[2]; + if ( (unsigned int)v80 >= a3[3] ) + v81 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v81 = *v80; + v82 = v81 == -1; + v83 = 0; + v40 = v143; + if ( !v82 ) + v83 = a3; + a3 = v83; + if ( !v82 ) + v40 = 0; + } + v38 = (v150 < v136) & (v164 ^ v40); + if ( !v38 ) + break; + if ( a1 && a2 == -1 ) + { + v84 = (__int16 *)a1[2]; + if ( (unsigned int)v84 >= a1[3] ) + v41 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v41 = *v84; + v85 = 0; + if ( v41 != -1 ) + v85 = a1; + a1 = v85; + } + else + { + v41 = a2; + } + if ( *(_WORD *)(*(_DWORD *)(v156 + 24) + 2 * v150) != v41 ) + goto LABEL_227; + v42 = a1[2]; + if ( v42 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v42 + 2; + ++v150; + a2 = -1; + } + if ( v150 == v136 ) + { +LABEL_247: + v146 = 1; + } + else + { +LABEL_227: + if ( v150 ) + goto LABEL_131; + v146 = (*(_BYTE *)(a5 + 13) & 2) == 0; + v38 = (*(_BYTE *)(a5 + 13) & 2) != 0; + } +LABEL_158: + v39 = v139 + 1; + if ( v139 + 1 <= 3 && !v38 ) + goto LABEL_160; + v17 = v146 & (v138 > 1); +LABEL_41: + if ( v17 ) + { + if ( v142 ) + v18 = *(_DWORD *)(v156 + 40); + else + v18 = *(_DWORD *)(v156 + 32); + v140 = v18; + for ( i = 1; ; ++i ) + { + v172 = a2 == -1; + if ( (v172 & (a1 != 0)) != 0 ) + { + v22 = (__int16 *)a1[2]; + if ( (unsigned int)v22 >= a1[3] ) + v23 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v23 = *v22; + v24 = v23 == -1; + v25 = 0; + if ( !v24 ) + v25 = a1; + v26 = v172 & (a1 != 0); + a1 = v25; + if ( !v24 ) + v26 = 0; + v161 = v26; + } + else + { + v161 = a2 == -1; + } + v19 = a4 == -1; + v145 = v19 & (a3 != 0); + if ( v145 ) + { + v71 = (__int16 *)a3[2]; + if ( (unsigned int)v71 >= a3[3] ) + v72 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v72 = *v71; + v73 = v72 == -1; + v74 = 0; + v19 = v145; + if ( !v73 ) + v74 = a3; + a3 = v74; + if ( !v73 ) + v19 = 0; + if ( i >= v138 ) + { +LABEL_189: + if ( i == v138 ) + { + if ( v188 <= 1 ) + goto LABEL_191; + goto LABEL_236; + } + goto LABEL_132; + } + } + else if ( i >= v138 ) + { + goto LABEL_189; + } + if ( v19 == v161 ) + goto LABEL_189; + if ( a1 && a2 == -1 ) + { + v78 = (__int16 *)a1[2]; + if ( (unsigned int)v78 >= a1[3] ) + v20 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v20 = *v78; + v79 = 0; + if ( v20 != -1 ) + v79 = a1; + a1 = v79; + } + else + { + v20 = a2; + } + if ( *(_WORD *)(v140 + 2 * i) != v20 ) + goto LABEL_132; + v21 = a1[2]; + if ( v21 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v21 + 2; + a2 = -1; + } + } + if ( !v146 ) + { +LABEL_131: + v172 = a2 == -1; + goto LABEL_132; + } + if ( v188 <= 1 ) + goto LABEL_191; +LABEL_236: + first_not_of = std::string::find_first_not_of(&Block, 48, 0); + if ( first_not_of ) + { + if ( first_not_of != -1 ) + goto LABEL_238; + first_not_of = v188 - 1; + if ( !v188 ) + { + v188 = 0; + *(_BYTE *)Block = 0; + goto LABEL_191; + } + if ( v188 != 1 ) + { +LABEL_238: + if ( v188 <= first_not_of ) + first_not_of = v188; + std::string::_M_erase((int *)&Block, 0, first_not_of); + } + } +LABEL_191: + if ( v142 && *(_BYTE *)Block != 48 ) + std::string::_M_replace_aux(&Block, 0, 0, 1u, 45); + v177 = v185; + if ( v185 ) + { + v75 = v134; + if ( !v144 ) + v75 = v154; + v155 = v185 + 1; + v166 = v75; + v76 = v184; + v77 = 15; + if ( v184 != v186 ) + v77 = v186[0]; + if ( v185 + 1 > v77 ) + { + std::string::_M_mutate((int)&v184, v185, 0, 0, 1u); + v76 = v184; + } + v76[v177] = v166; + v185 = v155; + *((_BYTE *)v184 + v177 + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v156 + 8), *(_DWORD *)(v156 + 12), (int)&v184) ) + *a6 |= 4u; + } + v172 = a2 == -1; + if ( v144 && *(_DWORD *)(v156 + 48) != v154 ) + { +LABEL_132: + v53 = a6; + *a6 |= 4u; + } + else + { + v53 = std::string::swap(a7, &Block); + } + if ( (v172 & (a1 != 0)) != 0 ) + { + v93 = (__int16 *)a1[2]; + if ( (unsigned int)v93 >= a1[3] ) + v94 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v94 = *v93; + v95 = v172 & (a1 != 0); + v96 = v94 == -1; + if ( v94 != -1 ) + v95 = 0; + v53 = 0; + if ( !v96 ) + v53 = a1; + v172 = v95; + a1 = v53; + } + LOBYTE(v53) = a4 == -1; + v54 = v53; + if ( a3 && a4 == -1 ) + { + v91 = (__int16 *)a3[2]; + if ( (unsigned int)v91 >= a3[3] ) + v92 = (*(int (__fastcall **)(_DWORD *, _BYTE *))(*a3 + 36))(a3, v54); + else + v92 = *v91; + LOBYTE(v54) = v92 == -1; + } + if ( (_BYTE)v54 == v172 ) + *a6 |= 2u; + if ( Block != v189 ) + operator delete(Block); + if ( v184 != v186 ) + operator delete(v184); + return a1; + case 3: + if ( *(_DWORD *)(v156 + 36) ) + { + v176 = a2 == -1; + if ( v176 && a1 != 0 ) + { + v112 = (__int16 *)a1[2]; + if ( (unsigned int)v112 >= a1[3] ) + v113 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v113 = *v112; + v114 = v113 == -1; + v115 = 0; + if ( !v114 ) + v115 = a1; + v116 = v176 && a1 != 0; + a1 = v115; + if ( !v114 ) + v116 = 0; + v165 = v116; + } + else + { + v165 = a2 == -1; + } + v70 = a4 == -1; + v151 = v70 & (a3 != 0); + if ( v151 ) + { + v122 = (__int16 *)a3[2]; + if ( (unsigned int)v122 >= a3[3] ) + v123 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v123 = *v122; + v124 = v123 == -1; + v70 = 0; + if ( v124 ) + v70 = v151; + v125 = 0; + if ( !v124 ) + v125 = a3; + a3 = v125; + } + if ( v165 != v70 ) + { + if ( a1 && a2 == -1 ) + { + v110 = (__int16 *)a1[2]; + if ( (unsigned int)v110 >= a1[3] ) + v88 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v88 = *v110; + v111 = 0; + if ( v88 != -1 ) + v111 = a1; + a1 = v111; + } + else + { + v88 = a2; + } + if ( **(_WORD **)(v156 + 32) == v88 ) + { + v138 = *(_DWORD *)(v156 + 36); + v89 = a1[2]; + if ( v89 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v89 + 2; + v38 = 0; + a2 = -1; + goto LABEL_247; + } + } + if ( !*(_DWORD *)(v156 + 44) ) + { + if ( !*(_DWORD *)(v156 + 36) ) + goto LABEL_95; +LABEL_181: + v146 = 1; + v38 = 0; + v142 = 1; + goto LABEL_158; + } + } + else if ( !*(_DWORD *)(v156 + 44) ) + { + goto LABEL_95; + } + v167 = a2 == -1; + if ( v167 && a1 != 0 ) + { + v117 = (__int16 *)a1[2]; + if ( (unsigned int)v117 >= a1[3] ) + v118 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v118 = *v117; + v119 = v118 == -1; + v120 = 0; + if ( !v119 ) + v120 = a1; + v121 = v167 && a1 != 0; + a1 = v120; + if ( !v119 ) + v121 = 0; + v178 = v121; + } + else + { + v178 = a2 == -1; + } + v86 = a4 == -1; + v152 = v86 & (a3 != 0); + if ( v152 ) + { + v128 = (__int16 *)a3[2]; + if ( (unsigned int)v128 >= a3[3] ) + v129 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v129 = *v128; + v130 = v129 == -1; + v86 = 0; + if ( v130 ) + v86 = v152; + v131 = 0; + if ( !v130 ) + v131 = a3; + a3 = v131; + } + if ( v178 == v86 ) + goto LABEL_369; + if ( a1 && a2 == -1 ) + { + v106 = (__int16 *)a1[2]; + if ( (unsigned int)v106 >= a1[3] ) + v107 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v107 = *v106; + v108 = 0; + if ( v107 != -1 ) + v108 = a1; + a1 = v108; + } + else + { + v107 = a2; + } + if ( **(_WORD **)(v156 + 40) != v107 ) + { +LABEL_369: + if ( !*(_DWORD *)(v156 + 36) || *(_DWORD *)(v156 + 44) ) + { +LABEL_95: + v38 = v141; + v146 = !v141; + goto LABEL_158; + } + goto LABEL_181; + } + v138 = *(_DWORD *)(v156 + 44); + v109 = a1[2]; + if ( v109 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v109 + 2; + v146 = 1; + v38 = 0; + a2 = -1; + v142 = 1; + goto LABEL_158; + case 4: + while ( 2 ) + { + v170 = a2 == -1; + if ( v170 && a1 != 0 ) + { + v56 = (__int16 *)a1[2]; + if ( (unsigned int)v56 >= a1[3] ) + v57 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v57 = *v56; + v58 = v57 == -1; + v59 = 0; + if ( !v58 ) + v59 = a1; + v60 = v170 && a1 != 0; + a1 = v59; + if ( !v58 ) + v60 = 0; + v159 = v60; + } + else + { + v159 = a2 == -1; + } + v12 = a4 == -1; + v147 = v12 & (a3 != 0); + if ( v147 ) + { + v48 = (__int16 *)a3[2]; + if ( (unsigned int)v48 >= a3[3] ) + v49 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v49 = *v48; + v50 = v49 == -1; + v51 = 0; + v52 = v147; + if ( !v50 ) + v51 = a3; + a3 = v51; + if ( !v50 ) + v52 = 0; + if ( v159 == v52 ) + goto LABEL_129; + } + else if ( v159 == v12 ) + { + goto LABEL_129; + } + if ( a1 && a2 == -1 ) + { + v61 = (__int16 *)a1[2]; + if ( (unsigned int)v61 >= a1[3] ) + v13 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v13 = *v61; + v62 = 0; + if ( v13 != -1 ) + v62 = a1; + a1 = v62; + } + else + { + v13 = a2; + } + v14 = (_WORD *)(v156 + 62); + if ( v13 == *(_WORD *)(v156 + 62) ) + { +LABEL_32: + v15 = Block; + v171 = std::money_base::_S_atoms[((int)v14 - v156 - 60) >> 1]; + v181 = v188; + v16 = 15; + if ( Block != v189 ) + v16 = v189[0]; + v160 = (std::locale::facet *)(v188 + 1); + if ( v188 + 1 > v16 ) + { + std::string::_M_mutate((int)&Block, v188, 0, 0, 1u); + v15 = Block; + } + ++v154; + v15[v181] = v171; + v188 = (size_t)v160; + *((_BYTE *)Block + v181 + 1) = 0; + v10 = a1; + v11 = a1[2]; + if ( v11 >= a1[3] ) + { +LABEL_37: + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + goto LABEL_21; + } +LABEL_20: + v10[2] = v11 + 2; +LABEL_21: + a2 = -1; + continue; + } + break; + } + while ( ++v14 != (_WORD *)(v156 + 82) ) + { + if ( v13 == *v14 ) + goto LABEL_32; + } + v7 = v144 | (*(_WORD *)(v156 + 18) != (unsigned __int16)v13); + if ( v7 ) + { + v146 = *(_BYTE *)(v156 + 16); + if ( !v146 ) + goto LABEL_249; + if ( *(_WORD *)(v156 + 20) == v13 ) + { + if ( !v144 ) + { + if ( v154 ) + { + v169 = v154; + v8 = v184; + v180 = v185; + v9 = 15; + if ( v184 != v186 ) + v9 = v186[0]; + v158 = (std::locale::facet *)(v185 + 1); + if ( v185 + 1 > v9 ) + { + std::string::_M_mutate((int)&v184, v185, 0, 0, 1u); + v8 = v184; + } + v154 = 0; + v8[v180] = v169; + v185 = (size_t)v158; + *((_BYTE *)v184 + v180 + 1) = 0; +LABEL_19: + v10 = a1; + v11 = a1[2]; + if ( v11 >= a1[3] ) + goto LABEL_37; + goto LABEL_20; + } + v146 = 0; + goto LABEL_130; + } + v7 = v144; +LABEL_249: + v146 = v7; + if ( !v188 ) + goto LABEL_131; + goto LABEL_157; + } +LABEL_130: + if ( !v188 ) + goto LABEL_131; +LABEL_157: + v38 = v146 ^ 1; + goto LABEL_158; + } + if ( *(int *)(v156 + 48) > 0 ) + { + v63 = v154; + v144 = 1; + v154 = 0; + v134 = v63; + goto LABEL_19; + } + v144 = 0; +LABEL_129: + v146 = 1; + goto LABEL_130; + default: + v146 = 1; + v38 = 0; + goto LABEL_158; + } + } +} +// 493A8F: variable 'v132' is possibly undefined +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 53F714: using guessed type signed __int32 std::moneypunct::id; +// 560704: using guessed type int (*off_560704)(); + +//----- (00494110) -------------------------------------------------------- +int __thiscall std::money_get>::get( + void *this, + int a2, + int a3, + int a4, + int a5, + unsigned __int8 a6) +{ + return (*(int (__thiscall **)(void *, int, int, int, int, _DWORD))(*(_DWORD *)this + 12))(this, a2, a3, a4, a5, a6); +} + +//----- (00494120) -------------------------------------------------------- +int __thiscall std::money_get>::get( + void *this, + int a2, + int a3, + int a4, + int a5, + unsigned __int8 a6) +{ + return (*(int (__thiscall **)(void *, int, int, int, int, _DWORD))(*(_DWORD *)this + 8))(this, a2, a3, a4, a5, a6); +} + +//----- (00494130) -------------------------------------------------------- +struct _Unwind_Exception *__stdcall std::money_get>::do_get( + _DWORD *a1, + __int16 a2, + _DWORD *a3, + __int16 a4, + char a5, + int a6, + _DWORD *a7, + int *a8) +{ + struct _Unwind_Exception *v8; // eax + void *v10; // [esp+20h] [ebp-78h] + unsigned int v11; // [esp+28h] [ebp-70h] + struct _Unwind_Exception *lpuexcpt; // [esp+30h] [ebp-68h] + void *Block; // [esp+78h] [ebp-20h] BYREF + unsigned int v14; // [esp+7Ch] [ebp-1Ch] + char v15[20]; // [esp+80h] [ebp-18h] BYREF + + v15[0] = 0; + v10 = std::use_facet>(a6 + 108); + Block = v15; + v14 = 0; + if ( a5 ) + v8 = (struct _Unwind_Exception *)std::money_get>::_M_extract( + a1, + a2, + a3, + a4, + a6, + a7, + &Block); + else + v8 = (struct _Unwind_Exception *)std::money_get>::_M_extract( + a1, + a2, + a3, + a4, + a6, + a7, + &Block); + lpuexcpt = v8; + v11 = v14; + if ( v14 ) + { + std::wstring::resize(a8, v14, 0); + (*(void (__thiscall **)(void *, void *, char *, int))(*(_DWORD *)v10 + 44))(v10, Block, (char *)Block + v11, *a8); + } + if ( Block != v15 ) + operator delete(Block); + return lpuexcpt; +} + +//----- (00494300) -------------------------------------------------------- +struct _Unwind_Exception *__stdcall std::money_get>::do_get( + _DWORD *a1, + __int16 a2, + _DWORD *a3, + __int16 a4, + char a5, + int a6, + _DWORD *a7, + long double *a8) +{ + struct _Unwind_Exception *v8; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+30h] [ebp-68h] + void *Block[2]; // [esp+78h] [ebp-20h] BYREF + char v12[20]; // [esp+80h] [ebp-18h] BYREF + + Block[0] = v12; + Block[1] = 0; + v12[0] = 0; + if ( a5 ) + v8 = (struct _Unwind_Exception *)std::money_get>::_M_extract( + a1, + a2, + a3, + a4, + a6, + a7, + Block); + else + v8 = (struct _Unwind_Exception *)std::money_get>::_M_extract( + a1, + a2, + a3, + a4, + a6, + a7, + Block); + lpuexcpt = v8; + std::locale::facet::_S_get_c_locale(); + std::__convert_to_v((char *)Block[0], a8, a7); + if ( Block[0] != v12 ) + operator delete(Block[0]); + return lpuexcpt; +} + +//----- (00494470) -------------------------------------------------------- +int __thiscall std::money_put>::put( + void *this, + __int64 a2, + unsigned __int8 a3, + int a4, + char a5, + int a6) +{ + __int64 (__stdcall *v6)(__int64, char, int, char, int); // edx + + v6 = *(__int64 (__stdcall **)(__int64, char, int, char, int))(*(_DWORD *)this + 12); + if ( v6 != std::money_put>::do_put ) + return ((int (__stdcall *)(_DWORD, _DWORD, _DWORD, int, _DWORD, int))v6)(a2, HIDWORD(a2), a3, a4, a5, a6); + if ( a3 ) + return std::money_put>::_M_insert(a2, a4, a5, a6); + return std::money_put>::_M_insert(a2, a4, a5, a6); +} + +//----- (00494510) -------------------------------------------------------- +int __thiscall std::money_put>::put( + void *this, + int a2, + int a3, + unsigned __int8 a4, + int a5, + char a6) +{ + return (*(int (__thiscall **)(void *, int, int, _DWORD, int, _DWORD))(*(_DWORD *)this + 8))(this, a2, a3, a4, a5, a6); +} + +//----- (00494530) -------------------------------------------------------- +__int64 __stdcall std::money_put>::do_put( + __int64 a1, + char a2, + int a3, + char a4, + int a5) +{ + if ( a2 ) + return std::money_put>::_M_insert(a1, a3, a4, a5); + else + return std::money_put>::_M_insert(a1, a3, a4, a5); +} + +//----- (004945A0) -------------------------------------------------------- +__int64 __thiscall std::money_put>::do_put( + void *this, + __int64 a2, + int a3, + int a4, + int a5, + long double a6) +{ + void *v6; // esp + void *v7; // esp + int v8; // eax + int v9; // eax + void *v10; // esp + void *v11; // esp + char v12; // al + void (__thiscall *v13)(_BYTE *, void *, char *, void *); // eax + __int64 v14; // rax + const std::locale *v16[22]; // [esp-30h] [ebp-D8h] BYREF + void *v17; // [esp+28h] [ebp-80h] + char *v18; // [esp+2Ch] [ebp-7Ch] + int v19; // [esp+30h] [ebp-78h] + int v20; // [esp+34h] [ebp-74h] + void *v21; // [esp+38h] [ebp-70h] + _BYTE *v22; // [esp+3Ch] [ebp-6Ch] + __int64 Size; // [esp+40h] [ebp-68h] + void *Src; // [esp+48h] [ebp-60h] + _DWORD *v25; // [esp+84h] [ebp-24h] BYREF + void *Block[2]; // [esp+88h] [ebp-20h] BYREF + char v27[24]; // [esp+90h] [ebp-18h] BYREF + + v21 = this; + v20 = a3; + v19 = a5; + std::locale::locale((volatile signed __int32 **)&v25, (volatile signed __int32 **)(a4 + 108), v16[13]); + v22 = std::use_facet>((int)&v25); + v6 = alloca(80); + v7 = alloca(80); + LODWORD(Size) = v16; + Src = v16; + Block[0] = (void *)std::locale::facet::_S_get_c_locale(); + v8 = std::__convert_from_v((int *const *)Block, (char *)Size, 64, "%.*Lf", 0, a6); + LODWORD(Size) = v8; + if ( v8 > 63 ) + { + LODWORD(Size) = v8 + 1; + v9 = 16 * ((unsigned int)(v8 + 28) >> 4); + v10 = alloca(v9); + v11 = alloca(v9); + v18 = (char *)v16; + Src = v16; + Block[0] = (void *)std::locale::facet::_S_get_c_locale(); + LODWORD(Size) = std::__convert_from_v((int *const *)Block, v18, Size, "%.*Lf", 0, a6); + } + Block[0] = v27; + std::string::_M_construct(Block, Size, 0); + v12 = v22[28]; + v17 = Block[0]; + v18 = (char *)Src + Size; + if ( v12 == 1 ) + { + if ( (char *)Src + (_DWORD)Size != Src ) +LABEL_7: + memcpy(v17, Src, Size); + } + else + { + if ( v12 ) + { + v13 = *(void (__thiscall **)(_BYTE *, void *, char *, void *))(*(_DWORD *)v22 + 28); + if ( (char *)v13 == (char *)std::ctype::do_widen ) + goto LABEL_6; + } + else + { + std::ctype::_M_widen_init((int)v22); + v13 = *(void (__thiscall **)(_BYTE *, void *, char *, void *))(*(_DWORD *)v22 + 28); + if ( (char *)v13 == (char *)std::ctype::do_widen ) + { +LABEL_6: + if ( v18 == Src ) + goto LABEL_8; + goto LABEL_7; + } + } + v13(v22, Src, v18, v17); + } +LABEL_8: + if ( (_BYTE)v20 ) + v14 = std::money_put>::_M_insert(a2, a4, v19, (int)Block); + else + v14 = std::money_put>::_M_insert(a2, a4, v19, (int)Block); + Size = v14; + if ( Block[0] != v27 ) + operator delete(Block[0]); + std::locale::~locale(&v25); + return Size; +} + +//----- (004948B0) -------------------------------------------------------- +__int64 __stdcall std::money_put>::_M_insert( + __int64 a1, + int a2, + char a3, + int a4) +{ + int v4; // ecx + char *v5; // ebx + struct _Unwind_Exception *v6; // eax + unsigned __int8 *v7; // ecx + int v9; // eax + bool v10; // sf + size_t v11; // eax + _BYTE *v12; // eax + bool v13; // dl + _BYTE *v14; // edx + unsigned int v15; // eax + size_t v16; // edx + int v17; // edx + int *v18; // eax + char v19; // bl + int v20; // edx + int v21; // ebx + _BYTE *v22; // edx + size_t v23; // eax + size_t v24; // edx + _BYTE *v25; // edx + unsigned int v26; // eax + _WORD *v27; // eax + unsigned int v28; // [esp+8h] [ebp-E0h] + size_t v29; // [esp+8h] [ebp-E0h] + int v30; // [esp+20h] [ebp-C8h] + char v31; // [esp+24h] [ebp-C4h] + int v32; // [esp+24h] [ebp-C4h] + std::locale::_Impl *v33; // [esp+28h] [ebp-C0h] + int v34; // [esp+2Ch] [ebp-BCh] + int v35; // [esp+2Ch] [ebp-BCh] + size_t v36; // [esp+30h] [ebp-B8h] + size_t v37; // [esp+30h] [ebp-B8h] + char v38; // [esp+34h] [ebp-B4h] + size_t v39; // [esp+38h] [ebp-B0h] + bool v40; // [esp+38h] [ebp-B0h] + signed int v41; // [esp+3Ch] [ebp-ACh] + int v42; // [esp+3Ch] [ebp-ACh] + int *v43; // [esp+40h] [ebp-A8h] + char *v44; // [esp+40h] [ebp-A8h] + std::locale::facet *v45; // [esp+4Ch] [ebp-9Ch] + std::locale::facet *v46; // [esp+4Ch] [ebp-9Ch] + _DWORD *v47; // [esp+50h] [ebp-98h] + size_t v48; // [esp+50h] [ebp-98h] + size_t v49; // [esp+50h] [ebp-98h] + __int64 v50; // [esp+54h] [ebp-94h] + int v51; // [esp+5Ch] [ebp-8Ch] + struct _Unwind_Exception *lpuexcpt; // [esp+60h] [ebp-88h] + struct _Unwind_Exception *lpuexcpta; // [esp+60h] [ebp-88h] + void **lpuexcptb; // [esp+60h] [ebp-88h] + char lpuexcptc; // [esp+60h] [ebp-88h] + int v56; // [esp+ACh] [ebp-3Ch] BYREF + void *v57; // [esp+B0h] [ebp-38h] BYREF + size_t v58; // [esp+B4h] [ebp-34h] + int v59[4]; // [esp+B8h] [ebp-30h] BYREF + void *Block; // [esp+C8h] [ebp-20h] BYREF + int v61; // [esp+CCh] [ebp-1Ch] + int v62[5]; // [esp+D0h] [ebp-18h] BYREF + + v50 = a1; + v47 = std::use_facet>(a2 + 108); + v45 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v43 = (int *)(*(_DWORD *)(*(_DWORD *)(a2 + 108) + 12) + 4 * (_DWORD)v45); + v51 = *v43; + if ( !*v43 ) + { + v27 = operator new(0x44u); + *(_DWORD *)v27 = &off_5606D4; + v27[8] = 0; + *((_DWORD *)v27 + 1) = 0; + *((_DWORD *)v27 + 2) = 0; + *((_DWORD *)v27 + 3) = 0; + *((_BYTE *)v27 + 18) = 0; + *((_DWORD *)v27 + 5) = 0; + *((_DWORD *)v27 + 6) = 0; + *((_DWORD *)v27 + 7) = 0; + *((_DWORD *)v27 + 8) = 0; + *((_DWORD *)v27 + 9) = 0; + *((_DWORD *)v27 + 10) = 0; + *((_DWORD *)v27 + 11) = 0; + *((_DWORD *)v27 + 12) = 0; + *((_DWORD *)v27 + 13) = 0; + *((_BYTE *)v27 + 67) = 0; + v33 = (std::locale::_Impl *)v27; + std::__moneypunct_cache::_M_cache((int)v27, a2 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a2 + 108), v33, v45, v28); + v51 = *v43; + } + v4 = *(_DWORD *)(a4 + 4); + lpuexcpt = *(struct _Unwind_Exception **)a4; + if ( **(_BYTE **)a4 == *(_BYTE *)(v51 + 56) ) + { + v56 = *(_DWORD *)(v51 + 52); + if ( !v4 ) + goto LABEL_10; + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v44 = *(char **)(v51 + 36); + v46 = *(std::locale::facet **)(v51 + 40); + } + else + { + v5 = *(char **)(v51 + 28); + v56 = *(_DWORD *)(v51 + 48); + v44 = v5; + v46 = *(std::locale::facet **)(v51 + 32); + } + v6 = lpuexcpt; + v7 = (unsigned __int8 *)lpuexcpt + v4; + if ( v7 > (unsigned __int8 *)lpuexcpt ) + { + do + { + if ( (*(_BYTE *)(v47[6] + 2 * *(unsigned __int8 *)v6) & 8) == 0 ) + break; + v6 = (struct _Unwind_Exception *)((char *)v6 + 1); + } + while ( v7 != (unsigned __int8 *)v6 ); + v48 = v6 - lpuexcpt; + if ( v6 != lpuexcpt ) + { + LOBYTE(v59[0]) = 0; + v57 = v59; + v58 = 0; + std::string::reserve(&v57, 2 * v48); + v9 = *(_DWORD *)(v51 + 44); + v41 = v48 - v9; + if ( (int)(v48 - v9) > 0 ) + { + v10 = v9 < 0; + v11 = v48 - v9; + if ( v10 ) + v11 = v48; + v41 = v11; + if ( *(_DWORD *)(v51 + 12) ) + { + std::string::_M_replace_aux(&v57, 0, v58, 2 * v11, 0); + v12 = std::__add_grouping( + v57, + *(_BYTE *)(v51 + 18), + *(char **)(v51 + 8), + *(_DWORD *)(v51 + 12), + lpuexcpt, + (_BYTE *)lpuexcpt + v41); + if ( v12 - (_BYTE *)v57 > v58 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + v12 - (_BYTE *)v57, + v58); + v58 = v12 - (_BYTE *)v57; + *v12 = 0; + v9 = *(_DWORD *)(v51 + 44); + } + else + { + std::string::_M_replace((unsigned int *)&v57, 0, v58, (char *)lpuexcpt, v11); + v9 = *(_DWORD *)(v51 + 44); + } + } + v39 = v58; + if ( v9 > 0 ) + { + v22 = v57; + v37 = v58 + 1; + v38 = *(_BYTE *)(v51 + 17); + v23 = 15; + if ( v57 != v59 ) + v23 = v59[0]; + if ( v58 + 1 > v23 ) + { + std::string::_M_mutate((int)&v57, v58, 0, 0, 1u); + v22 = v57; + } + v22[v39] = v38; + v58 = v37; + *((_BYTE *)v57 + v37) = 0; + if ( v41 < 0 ) + { + std::string::_M_replace_aux(&v57, v58, 0, -v41, *(_BYTE *)(v51 + 57)); + if ( v48 > 0x3FFFFFFF - v58 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(&v57, lpuexcpt, v48); + } + else + { + v24 = *(_DWORD *)(v51 + 44); + if ( v24 > 0x3FFFFFFF - v58 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(&v57, (_BYTE *)lpuexcpt + v41, v24); + } + v39 = v58; + } + v42 = *(_DWORD *)(a2 + 12) & 0xB0; + lpuexcpta = (std::locale::facet *)((char *)v46 + v39); + if ( (*(_DWORD *)(a2 + 12) & 0x200) != 0 ) + lpuexcpta = (std::locale::facet *)((char *)v46 + v39 + *(_DWORD *)(v51 + 24)); + LOBYTE(v62[0]) = 0; + Block = v62; + v61 = 0; + std::string::reserve(&Block, 2 * (_DWORD)lpuexcpta); + v49 = *(_DWORD *)(a2 + 8); + v13 = v49 > (unsigned int)lpuexcpta && v42 == 16; + v36 = v49 - (_DWORD)lpuexcpta; + lpuexcptb = (void **)&v56; + v40 = v13; + do + { + switch ( *(_BYTE *)lpuexcptb ) + { + case 0: + if ( v40 ) + goto LABEL_34; + break; + case 1: + v35 = v61; + if ( v40 ) + { +LABEL_34: + std::string::_M_replace_aux(&Block, v61, 0, v36, a3); + } + else + { + v25 = Block; + v26 = 15; + if ( Block != v62 ) + v26 = v62[0]; + v32 = v61 + 1; + if ( v61 + 1 > v26 ) + { + std::string::_M_mutate((int)&Block, v61, 0, 0, 1u); + v25 = Block; + } + v25[v35] = a3; + v61 = v32; + *((_BYTE *)Block + v35 + 1) = 0; + } + break; + case 2: + if ( (*(_BYTE *)(a2 + 13) & 2) != 0 ) + { + v16 = *(_DWORD *)(v51 + 24); + if ( v16 > 0x3FFFFFFF - v61 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(&Block, *(_BYTE **)(v51 + 20), v16); + } + break; + case 3: + if ( v46 ) + { + v14 = Block; + v31 = *v44; + v34 = v61; + v15 = 15; + if ( Block != v62 ) + v15 = v62[0]; + v30 = v61 + 1; + if ( v61 + 1 > v15 ) + { + std::string::_M_mutate((int)&Block, v61, 0, 0, 1u); + v14 = Block; + } + v14[v34] = v31; + v61 = v30; + *((_BYTE *)Block + v34 + 1) = 0; + } + break; + case 4: + std::string::_M_append(&Block, v57, v58); + break; + default: + break; + } + lpuexcptb = (void **)((char *)lpuexcptb + 1); + } + while ( &v57 != lpuexcptb ); + v17 = v61; + if ( (unsigned int)v46 > 1 ) + { + if ( (unsigned int)v46 - 1 > 0x3FFFFFFF - v61 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(&Block, v44 + 1, (size_t)v46 - 1); + v17 = v61; + if ( v61 < v49 ) + goto LABEL_41; + } + else if ( v61 < v49 ) + { +LABEL_41: + v29 = v49 - v17; + if ( v42 == 32 ) + std::string::_M_replace_aux(&Block, v17, 0, v29, a3); + else + std::string::_M_replace_aux(&Block, 0, 0, v29, a3); + goto LABEL_43; + } + v49 = v17; +LABEL_43: + v18 = (int *)Block; + lpuexcptc = BYTE4(a1); + if ( !BYTE4(a1) ) + { + v19 = 0; + v20 = (*(int (__thiscall **)(_DWORD, void *, size_t))(*(_DWORD *)a1 + 48))(a1, Block, v49); + v18 = (int *)Block; + if ( v49 != v20 ) + v19 = 1; + lpuexcptc = v19; + } + v21 = HIDWORD(a1); + LOBYTE(v21) = lpuexcptc; + HIDWORD(v50) = v21; + if ( v18 != v62 ) + operator delete(v18); + if ( v57 != v59 ) + operator delete(v57); + } + } +LABEL_10: + *(_DWORD *)(a2 + 8) = 0; + return v50; +} +// 4950C3: variable 'v28' is possibly undefined +// 53F708: using guessed type signed __int32 std::moneypunct::id; +// 5606D4: using guessed type int (*off_5606D4)(); + +//----- (00495360) -------------------------------------------------------- +__int64 __stdcall std::money_put>::_M_insert( + __int64 a1, + int a2, + char a3, + int a4) +{ + int v4; // ecx + char *v5; // ebx + struct _Unwind_Exception *v6; // eax + unsigned __int8 *v7; // ecx + int v9; // eax + bool v10; // sf + size_t v11; // eax + _BYTE *v12; // eax + bool v13; // dl + _BYTE *v14; // edx + unsigned int v15; // eax + size_t v16; // edx + int v17; // edx + int *v18; // eax + char v19; // bl + int v20; // edx + int v21; // ebx + _BYTE *v22; // edx + size_t v23; // eax + size_t v24; // edx + _BYTE *v25; // edx + unsigned int v26; // eax + _WORD *v27; // eax + unsigned int v28; // [esp+8h] [ebp-E0h] + size_t v29; // [esp+8h] [ebp-E0h] + int v30; // [esp+20h] [ebp-C8h] + char v31; // [esp+24h] [ebp-C4h] + int v32; // [esp+24h] [ebp-C4h] + std::locale::_Impl *v33; // [esp+28h] [ebp-C0h] + int v34; // [esp+2Ch] [ebp-BCh] + int v35; // [esp+2Ch] [ebp-BCh] + size_t v36; // [esp+30h] [ebp-B8h] + size_t v37; // [esp+30h] [ebp-B8h] + char v38; // [esp+34h] [ebp-B4h] + size_t v39; // [esp+38h] [ebp-B0h] + bool v40; // [esp+38h] [ebp-B0h] + signed int v41; // [esp+3Ch] [ebp-ACh] + int v42; // [esp+3Ch] [ebp-ACh] + int *v43; // [esp+40h] [ebp-A8h] + char *v44; // [esp+40h] [ebp-A8h] + std::locale::facet *v45; // [esp+4Ch] [ebp-9Ch] + std::locale::facet *v46; // [esp+4Ch] [ebp-9Ch] + _DWORD *v47; // [esp+50h] [ebp-98h] + size_t v48; // [esp+50h] [ebp-98h] + size_t v49; // [esp+50h] [ebp-98h] + __int64 v50; // [esp+54h] [ebp-94h] + int v51; // [esp+5Ch] [ebp-8Ch] + struct _Unwind_Exception *lpuexcpt; // [esp+60h] [ebp-88h] + struct _Unwind_Exception *lpuexcpta; // [esp+60h] [ebp-88h] + void **lpuexcptb; // [esp+60h] [ebp-88h] + char lpuexcptc; // [esp+60h] [ebp-88h] + int v56; // [esp+ACh] [ebp-3Ch] BYREF + void *v57; // [esp+B0h] [ebp-38h] BYREF + size_t v58; // [esp+B4h] [ebp-34h] + int v59[4]; // [esp+B8h] [ebp-30h] BYREF + void *Block; // [esp+C8h] [ebp-20h] BYREF + int v61; // [esp+CCh] [ebp-1Ch] + int v62[5]; // [esp+D0h] [ebp-18h] BYREF + + v50 = a1; + v47 = std::use_facet>(a2 + 108); + v45 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v43 = (int *)(*(_DWORD *)(*(_DWORD *)(a2 + 108) + 12) + 4 * (_DWORD)v45); + v51 = *v43; + if ( !*v43 ) + { + v27 = operator new(0x44u); + *(_DWORD *)v27 = &off_5606E4; + v27[8] = 0; + *((_DWORD *)v27 + 1) = 0; + *((_DWORD *)v27 + 2) = 0; + *((_DWORD *)v27 + 3) = 0; + *((_BYTE *)v27 + 18) = 0; + *((_DWORD *)v27 + 5) = 0; + *((_DWORD *)v27 + 6) = 0; + *((_DWORD *)v27 + 7) = 0; + *((_DWORD *)v27 + 8) = 0; + *((_DWORD *)v27 + 9) = 0; + *((_DWORD *)v27 + 10) = 0; + *((_DWORD *)v27 + 11) = 0; + *((_DWORD *)v27 + 12) = 0; + *((_DWORD *)v27 + 13) = 0; + *((_BYTE *)v27 + 67) = 0; + v33 = (std::locale::_Impl *)v27; + std::__moneypunct_cache::_M_cache((int)v27, a2 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a2 + 108), v33, v45, v28); + v51 = *v43; + } + v4 = *(_DWORD *)(a4 + 4); + lpuexcpt = *(struct _Unwind_Exception **)a4; + if ( **(_BYTE **)a4 == *(_BYTE *)(v51 + 56) ) + { + v56 = *(_DWORD *)(v51 + 52); + if ( !v4 ) + goto LABEL_10; + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v44 = *(char **)(v51 + 36); + v46 = *(std::locale::facet **)(v51 + 40); + } + else + { + v5 = *(char **)(v51 + 28); + v56 = *(_DWORD *)(v51 + 48); + v44 = v5; + v46 = *(std::locale::facet **)(v51 + 32); + } + v6 = lpuexcpt; + v7 = (unsigned __int8 *)lpuexcpt + v4; + if ( v7 > (unsigned __int8 *)lpuexcpt ) + { + do + { + if ( (*(_BYTE *)(v47[6] + 2 * *(unsigned __int8 *)v6) & 8) == 0 ) + break; + v6 = (struct _Unwind_Exception *)((char *)v6 + 1); + } + while ( v7 != (unsigned __int8 *)v6 ); + v48 = v6 - lpuexcpt; + if ( v6 != lpuexcpt ) + { + LOBYTE(v59[0]) = 0; + v57 = v59; + v58 = 0; + std::string::reserve(&v57, 2 * v48); + v9 = *(_DWORD *)(v51 + 44); + v41 = v48 - v9; + if ( (int)(v48 - v9) > 0 ) + { + v10 = v9 < 0; + v11 = v48 - v9; + if ( v10 ) + v11 = v48; + v41 = v11; + if ( *(_DWORD *)(v51 + 12) ) + { + std::string::_M_replace_aux(&v57, 0, v58, 2 * v11, 0); + v12 = std::__add_grouping( + v57, + *(_BYTE *)(v51 + 18), + *(char **)(v51 + 8), + *(_DWORD *)(v51 + 12), + lpuexcpt, + (_BYTE *)lpuexcpt + v41); + if ( v12 - (_BYTE *)v57 > v58 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + v12 - (_BYTE *)v57, + v58); + v58 = v12 - (_BYTE *)v57; + *v12 = 0; + v9 = *(_DWORD *)(v51 + 44); + } + else + { + std::string::_M_replace((unsigned int *)&v57, 0, v58, (char *)lpuexcpt, v11); + v9 = *(_DWORD *)(v51 + 44); + } + } + v39 = v58; + if ( v9 > 0 ) + { + v22 = v57; + v37 = v58 + 1; + v38 = *(_BYTE *)(v51 + 17); + v23 = 15; + if ( v57 != v59 ) + v23 = v59[0]; + if ( v58 + 1 > v23 ) + { + std::string::_M_mutate((int)&v57, v58, 0, 0, 1u); + v22 = v57; + } + v22[v39] = v38; + v58 = v37; + *((_BYTE *)v57 + v37) = 0; + if ( v41 < 0 ) + { + std::string::_M_replace_aux(&v57, v58, 0, -v41, *(_BYTE *)(v51 + 57)); + if ( v48 > 0x3FFFFFFF - v58 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(&v57, lpuexcpt, v48); + } + else + { + v24 = *(_DWORD *)(v51 + 44); + if ( v24 > 0x3FFFFFFF - v58 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(&v57, (_BYTE *)lpuexcpt + v41, v24); + } + v39 = v58; + } + v42 = *(_DWORD *)(a2 + 12) & 0xB0; + lpuexcpta = (std::locale::facet *)((char *)v46 + v39); + if ( (*(_DWORD *)(a2 + 12) & 0x200) != 0 ) + lpuexcpta = (std::locale::facet *)((char *)v46 + v39 + *(_DWORD *)(v51 + 24)); + LOBYTE(v62[0]) = 0; + Block = v62; + v61 = 0; + std::string::reserve(&Block, 2 * (_DWORD)lpuexcpta); + v49 = *(_DWORD *)(a2 + 8); + v13 = v49 > (unsigned int)lpuexcpta && v42 == 16; + v36 = v49 - (_DWORD)lpuexcpta; + lpuexcptb = (void **)&v56; + v40 = v13; + do + { + switch ( *(_BYTE *)lpuexcptb ) + { + case 0: + if ( v40 ) + goto LABEL_34; + break; + case 1: + v35 = v61; + if ( v40 ) + { +LABEL_34: + std::string::_M_replace_aux(&Block, v61, 0, v36, a3); + } + else + { + v25 = Block; + v26 = 15; + if ( Block != v62 ) + v26 = v62[0]; + v32 = v61 + 1; + if ( v61 + 1 > v26 ) + { + std::string::_M_mutate((int)&Block, v61, 0, 0, 1u); + v25 = Block; + } + v25[v35] = a3; + v61 = v32; + *((_BYTE *)Block + v35 + 1) = 0; + } + break; + case 2: + if ( (*(_BYTE *)(a2 + 13) & 2) != 0 ) + { + v16 = *(_DWORD *)(v51 + 24); + if ( v16 > 0x3FFFFFFF - v61 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(&Block, *(_BYTE **)(v51 + 20), v16); + } + break; + case 3: + if ( v46 ) + { + v14 = Block; + v31 = *v44; + v34 = v61; + v15 = 15; + if ( Block != v62 ) + v15 = v62[0]; + v30 = v61 + 1; + if ( v61 + 1 > v15 ) + { + std::string::_M_mutate((int)&Block, v61, 0, 0, 1u); + v14 = Block; + } + v14[v34] = v31; + v61 = v30; + *((_BYTE *)Block + v34 + 1) = 0; + } + break; + case 4: + std::string::_M_append(&Block, v57, v58); + break; + default: + break; + } + lpuexcptb = (void **)((char *)lpuexcptb + 1); + } + while ( &v57 != lpuexcptb ); + v17 = v61; + if ( (unsigned int)v46 > 1 ) + { + if ( (unsigned int)v46 - 1 > 0x3FFFFFFF - v61 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(&Block, v44 + 1, (size_t)v46 - 1); + v17 = v61; + if ( v61 < v49 ) + goto LABEL_41; + } + else if ( v61 < v49 ) + { +LABEL_41: + v29 = v49 - v17; + if ( v42 == 32 ) + std::string::_M_replace_aux(&Block, v17, 0, v29, a3); + else + std::string::_M_replace_aux(&Block, 0, 0, v29, a3); + goto LABEL_43; + } + v49 = v17; +LABEL_43: + v18 = (int *)Block; + lpuexcptc = BYTE4(a1); + if ( !BYTE4(a1) ) + { + v19 = 0; + v20 = (*(int (__thiscall **)(_DWORD, void *, size_t))(*(_DWORD *)a1 + 48))(a1, Block, v49); + v18 = (int *)Block; + if ( v49 != v20 ) + v19 = 1; + lpuexcptc = v19; + } + v21 = HIDWORD(a1); + LOBYTE(v21) = lpuexcptc; + HIDWORD(v50) = v21; + if ( v18 != v62 ) + operator delete(v18); + if ( v57 != v59 ) + operator delete(v57); + } + } +LABEL_10: + *(_DWORD *)(a2 + 8) = 0; + return v50; +} +// 495B73: variable 'v28' is possibly undefined +// 53F70C: using guessed type signed __int32 std::moneypunct::id; +// 5606E4: using guessed type int (*off_5606E4)(); + +//----- (00495E10) -------------------------------------------------------- +int __thiscall std::money_put>::put( + void *this, + __int64 a2, + unsigned __int8 a3, + int a4, + unsigned __int16 a5, + int a6) +{ + __int64 (__stdcall *v6)(__int64, char, int, __int16, int); // edx + + v6 = *(__int64 (__stdcall **)(__int64, char, int, __int16, int))(*(_DWORD *)this + 12); + if ( v6 != std::money_put>::do_put ) + return ((int (__stdcall *)(_DWORD, _DWORD, _DWORD, int, _DWORD, int))v6)(a2, HIDWORD(a2), a3, a4, a5, a6); + if ( a3 ) + return std::money_put>::_M_insert(a2, a4, a5, a6); + return std::money_put>::_M_insert(a2, a4, a5, a6); +} + +//----- (00495EB0) -------------------------------------------------------- +int __thiscall std::money_put>::put( + void *this, + int a2, + int a3, + unsigned __int8 a4, + int a5, + unsigned __int16 a6) +{ + return (*(int (__thiscall **)(void *, int, int, _DWORD, int, _DWORD))(*(_DWORD *)this + 8))(this, a2, a3, a4, a5, a6); +} + +//----- (00495ED0) -------------------------------------------------------- +__int64 __stdcall std::money_put>::do_put( + __int64 a1, + char a2, + int a3, + __int16 a4, + int a5) +{ + if ( a2 ) + return std::money_put>::_M_insert(a1, a3, a4, a5); + else + return std::money_put>::_M_insert(a1, a3, a4, a5); +} + +//----- (00495F40) -------------------------------------------------------- +__int64 __thiscall std::money_put>::do_put( + void *this, + __int64 a2, + int a3, + int a4, + int a5, + long double a6) +{ + void *v6; // esp + void *v7; // esp + int v8; // eax + int v9; // eax + void *v10; // esp + void *v11; // esp + __int64 v12; // rax + int v14; // [esp-44h] [ebp-ECh] + int v15; // [esp-40h] [ebp-E8h] + int v16; // [esp-3Ch] [ebp-E4h] + int v17; // [esp-38h] [ebp-E0h] + int v18; // [esp-34h] [ebp-DCh] + char *v19[23]; // [esp-30h] [ebp-D8h] BYREF + char *v20; // [esp+2Ch] [ebp-7Ch] + int v21; // [esp+30h] [ebp-78h] + int v22; // [esp+34h] [ebp-74h] + void *v23; // [esp+38h] [ebp-70h] + void *v24; // [esp+3Ch] [ebp-6Ch] + __int64 lpuexcpt; // [esp+40h] [ebp-68h] + char **v26; // [esp+48h] [ebp-60h] + _DWORD *v27; // [esp+84h] [ebp-24h] BYREF + void *Block[2]; // [esp+88h] [ebp-20h] BYREF + char v29[20]; // [esp+90h] [ebp-18h] BYREF + + v23 = this; + v22 = a3; + v21 = a5; + std::locale::locale( + (volatile signed __int32 **)&v27, + (volatile signed __int32 **)(a4 + 108), + (const std::locale *)v19[13]); + v24 = std::use_facet>((int)&v27); + v6 = alloca(80); + v7 = alloca(80); + LODWORD(lpuexcpt) = v19; + v26 = v19; + Block[0] = (void *)std::locale::facet::_S_get_c_locale(); + v8 = std::__convert_from_v((int *const *)Block, (char *)lpuexcpt, 64, "%.*Lf", 0, a6); + LODWORD(lpuexcpt) = v8; + if ( v8 > 63 ) + { + LODWORD(lpuexcpt) = v8 + 1; + v9 = 16 * ((unsigned int)(v8 + 28) >> 4); + v10 = alloca(v9); + v11 = alloca(v9); + v20 = (char *)v19; + v26 = v19; + Block[0] = (void *)std::locale::facet::_S_get_c_locale(); + LODWORD(lpuexcpt) = std::__convert_from_v((int *const *)Block, v20, lpuexcpt, "%.*Lf", 0, a6); + } + Block[0] = v29; + std::wstring::_M_construct(Block, lpuexcpt, 0); + (*(void (__thiscall **)(void *, char **, char *, void *, int, int, int, int, int, char *, char *, char *, char *, char *, char *, char *, char *, char *, char *))(*(_DWORD *)v24 + 44))( + v24, + v26, + (char *)v26 + lpuexcpt, + Block[0], + v14, + v15, + v16, + v17, + v18, + v19[0], + v19[1], + v19[2], + v19[3], + v19[4], + v19[5], + v19[6], + v19[7], + v19[8], + v19[9]); + if ( (_BYTE)v22 ) + v12 = std::money_put>::_M_insert(a2, a4, v21, (int)Block); + else + v12 = std::money_put>::_M_insert(a2, a4, v21, (int)Block); + lpuexcpt = v12; + if ( Block[0] != v29 ) + operator delete(Block[0]); + std::locale::~locale(&v27); + return lpuexcpt; +} +// 4960B1: variable 'v14' is possibly undefined +// 4960B1: variable 'v15' is possibly undefined +// 4960B1: variable 'v16' is possibly undefined +// 4960B1: variable 'v17' is possibly undefined +// 4960B1: variable 'v18' is possibly undefined + +//----- (004961A0) -------------------------------------------------------- +__int64 __stdcall std::money_put>::_M_insert( + __int64 a1, + int a2, + __int16 a3, + int a4) +{ + int v4; // eax + signed int v5; // eax + std::locale::facet *v7; // esi + char *v8; // edx + int v9; // eax + bool v10; // sf + unsigned int v11; // eax + char *v12; // edx + unsigned int v13; // eax + bool v14; // dl + _WORD *v15; // eax + unsigned int v16; // edx + unsigned int v17; // edx + int v18; // ecx + int *v19; // eax + char v20; // bl + int v21; // edx + int v22; // ebx + _WORD *v23; // eax + unsigned int v24; // edx + unsigned int v25; // edx + _WORD *v26; // eax + unsigned int v27; // edx + _DWORD *v28; // eax + unsigned int v29; // [esp-4h] [ebp-ECh] + unsigned int v30; // [esp+8h] [ebp-E0h] + unsigned int v31; // [esp+20h] [ebp-C8h] + __int16 v32; // [esp+24h] [ebp-C4h] + unsigned int v33; // [esp+24h] [ebp-C4h] + std::locale::_Impl *v34; // [esp+28h] [ebp-C0h] + int v35; // [esp+2Ch] [ebp-BCh] + int v36; // [esp+2Ch] [ebp-BCh] + unsigned int v37; // [esp+30h] [ebp-B8h] + __int16 v38; // [esp+30h] [ebp-B8h] + int v39; // [esp+34h] [ebp-B4h] + int v40; // [esp+38h] [ebp-B0h] + bool v41; // [esp+38h] [ebp-B0h] + __int16 *v42; // [esp+3Ch] [ebp-ACh] + int *v43; // [esp+48h] [ebp-A0h] + unsigned int v44; // [esp+48h] [ebp-A0h] + int v45; // [esp+48h] [ebp-A0h] + std::locale::facet *v46; // [esp+4Ch] [ebp-9Ch] + std::locale::facet *v47; // [esp+4Ch] [ebp-9Ch] + void *v48; // [esp+50h] [ebp-98h] + int v49; // [esp+50h] [ebp-98h] + int v50; // [esp+50h] [ebp-98h] + unsigned int v51; // [esp+50h] [ebp-98h] + __int64 v52; // [esp+54h] [ebp-94h] + int v53; // [esp+5Ch] [ebp-8Ch] + char *lpuexcpt; // [esp+60h] [ebp-88h] + struct _Unwind_Exception *lpuexcpta; // [esp+60h] [ebp-88h] + void **lpuexcptb; // [esp+60h] [ebp-88h] + char lpuexcptc; // [esp+60h] [ebp-88h] + int v58; // [esp+ACh] [ebp-3Ch] BYREF + void *v59; // [esp+B0h] [ebp-38h] BYREF + int v60; // [esp+B4h] [ebp-34h] + int v61[4]; // [esp+B8h] [ebp-30h] BYREF + void *Block; // [esp+C8h] [ebp-20h] BYREF + unsigned int v63; // [esp+CCh] [ebp-1Ch] + int v64[6]; // [esp+D0h] [ebp-18h] BYREF + + v52 = a1; + v48 = std::use_facet>(a2 + 108); + v46 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v43 = (int *)(*(_DWORD *)(*(_DWORD *)(a2 + 108) + 12) + 4 * (_DWORD)v46); + v53 = *v43; + if ( !*v43 ) + { + v28 = operator new(0x54u); + v28[1] = 0; + *v28 = &off_5606F4; + v28[2] = 0; + v28[3] = 0; + *((_BYTE *)v28 + 16) = 0; + *(_DWORD *)((char *)v28 + 18) = 0; + v28[6] = 0; + v28[7] = 0; + v28[8] = 0; + v28[9] = 0; + v28[10] = 0; + v28[11] = 0; + v28[12] = 0; + v28[13] = 0; + v28[14] = 0; + *((_BYTE *)v28 + 82) = 0; + v34 = (std::locale::_Impl *)v28; + std::__moneypunct_cache::_M_cache((int)v28, a2 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a2 + 108), v34, v46, v30); + v53 = *v43; + } + v4 = *(_DWORD *)(a4 + 4); + lpuexcpt = *(char **)a4; + if ( **(_WORD **)a4 == *(_WORD *)(v53 + 60) ) + { + v42 = *(__int16 **)(v53 + 40); + v7 = *(std::locale::facet **)(v53 + 44); + v58 = *(_DWORD *)(v53 + 56); + v47 = v7; + v8 = lpuexcpt + 2; + if ( !v4 ) + v8 = lpuexcpt; + lpuexcpt = v8; + } + else + { + v58 = *(_DWORD *)(v53 + 52); + v42 = *(__int16 **)(v53 + 32); + v47 = *(std::locale::facet **)(v53 + 36); + } + v5 = (*(int (__thiscall **)(void *, int, char *, char *))(*(_DWORD *)v48 + 20))(v48, 8, lpuexcpt, &lpuexcpt[2 * v4]) + - (_DWORD)lpuexcpt; + v44 = v5 >> 1; + if ( v5 >> 1 ) + { + v59 = v61; + v60 = 0; + LOWORD(v61[0]) = 0; + std::wstring::reserve((int)&v59, v5); + v9 = *(_DWORD *)(v53 + 48); + v49 = v60; + v40 = v44 - v9; + if ( (int)(v44 - v9) > 0 ) + { + v10 = v9 < 0; + v11 = v44 - v9; + if ( v10 ) + v11 = v44; + v40 = v11; + if ( *(_DWORD *)(v53 + 12) ) + { + v50 = 2 * v11; + std::wstring::_M_replace_aux(&v59, 0, v60, 2 * v11, 0); + v12 = (char *)std::__add_grouping( + v59, + *(_WORD *)(v53 + 20), + *(char **)(v53 + 8), + *(_DWORD *)(v53 + 12), + lpuexcpt, + &lpuexcpt[v50]); + v13 = (v12 - (_BYTE *)v59) >> 1; + v49 = v13; + if ( v13 > v60 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + v13, + v60); + v60 = (v12 - (_BYTE *)v59) >> 1; + *(_WORD *)v12 = 0; + v9 = *(_DWORD *)(v53 + 48); + } + else + { + std::wstring::_M_replace((unsigned int *)&v59, 0, v60, lpuexcpt, v11); + v49 = v60; + v9 = *(_DWORD *)(v53 + 48); + } + } + if ( v9 > 0 ) + { + v38 = *(_WORD *)(v53 + 18); + v23 = v59; + v39 = v49 + 1; + v24 = 7; + if ( v59 != v61 ) + v24 = v61[0]; + if ( v49 + 1 > v24 ) + { + std::wstring::_M_mutate((int)&v59, v49, 0, 0, 1); + v23 = v59; + } + v23[v49] = v38; + v60 = v49 + 1; + v23[v49 + 1] = 0; + if ( v40 < 0 ) + { + std::wstring::_M_replace_aux(&v59, v39, 0, -v40, *(_WORD *)(v53 + 62)); + if ( v44 > 0x1FFFFFFF - v60 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::wstring::_M_append(&v59, lpuexcpt, v44); + } + else + { + v25 = *(_DWORD *)(v53 + 48); + if ( v25 > 0x1FFFFFFF - v39 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::wstring::_M_append(&v59, &lpuexcpt[2 * v40], v25); + } + v49 = v60; + } + v45 = *(_DWORD *)(a2 + 12) & 0xB0; + lpuexcpta = (std::locale::facet *)((char *)v47 + v49); + if ( (*(_DWORD *)(a2 + 12) & 0x200) != 0 ) + lpuexcpta = (std::locale::facet *)((char *)v47 + v49 + *(_DWORD *)(v53 + 28)); + Block = v64; + v63 = 0; + LOWORD(v64[0]) = 0; + std::wstring::reserve((int)&Block, 2 * (_DWORD)lpuexcpta); + v51 = *(_DWORD *)(a2 + 8); + v14 = v51 > (unsigned int)lpuexcpta && v45 == 16; + v37 = v51 - (_DWORD)lpuexcpta; + lpuexcptb = (void **)&v58; + v41 = v14; + do + { + switch ( *(_BYTE *)lpuexcptb ) + { + case 0: + if ( v41 ) + goto LABEL_31; + break; + case 1: + v36 = v63; + if ( v41 ) + { +LABEL_31: + std::wstring::_M_replace_aux(&Block, v63, 0, v37, a3); + } + else + { + v26 = Block; + v33 = v63 + 1; + v27 = 7; + if ( Block != v64 ) + v27 = v64[0]; + if ( v63 + 1 > v27 ) + { + std::wstring::_M_mutate((int)&Block, v63, 0, 0, 1); + v26 = Block; + } + v26[v36] = a3; + v63 = v33; + v26[v36 + 1] = 0; + } + break; + case 2: + if ( (*(_BYTE *)(a2 + 13) & 2) != 0 ) + { + v17 = *(_DWORD *)(v53 + 28); + if ( v17 > 0x1FFFFFFF - v63 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::wstring::_M_append(&Block, *(_WORD **)(v53 + 24), v17); + } + break; + case 3: + if ( v47 ) + { + v32 = *v42; + v35 = v63; + v15 = Block; + v31 = v63 + 1; + v16 = 7; + if ( Block != v64 ) + v16 = v64[0]; + if ( v63 + 1 > v16 ) + { + std::wstring::_M_mutate((int)&Block, v63, 0, 0, 1); + v15 = Block; + } + v15[v35] = v32; + v63 = v31; + v15[v35 + 1] = 0; + } + break; + case 4: + std::wstring::_M_append(&Block, v59, v60); + break; + default: + break; + } + lpuexcptb = (void **)((char *)lpuexcptb + 1); + } + while ( &v59 != lpuexcptb ); + v18 = v63; + if ( (unsigned int)v47 > 1 ) + { + if ( (unsigned int)v47 - 1 > 0x1FFFFFFF - v63 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::wstring::_M_append(&Block, v42 + 1, (int)v47 - 1); + v18 = v63; + if ( v51 > v63 ) + goto LABEL_38; + } + else if ( v51 > v63 ) + { +LABEL_38: + v29 = v51 - v18; + if ( v45 == 32 ) + std::wstring::_M_replace_aux(&Block, v18, 0, v29, a3); + else + std::wstring::_M_replace_aux(&Block, 0, 0, v29, a3); + goto LABEL_40; + } + v51 = v18; +LABEL_40: + v19 = (int *)Block; + lpuexcptc = BYTE4(a1); + if ( !BYTE4(a1) ) + { + v20 = 0; + v21 = (*(int (__thiscall **)(_DWORD, void *, unsigned int))(*(_DWORD *)a1 + 48))(a1, Block, v51); + v19 = (int *)Block; + if ( v51 != v21 ) + v20 = 1; + lpuexcptc = v20; + } + v22 = HIDWORD(a1); + LOBYTE(v22) = lpuexcptc; + HIDWORD(v52) = v22; + if ( v19 != v64 ) + operator delete(v19); + if ( v59 != v61 ) + operator delete(v59); + } + *(_DWORD *)(a2 + 8) = 0; + return v52; +} +// 4969EC: variable 'v30' is possibly undefined +// 53F710: using guessed type signed __int32 std::moneypunct::id; +// 5606F4: using guessed type int (*off_5606F4)(); + +//----- (00496CC0) -------------------------------------------------------- +__int64 __stdcall std::money_put>::_M_insert( + __int64 a1, + int a2, + __int16 a3, + int a4) +{ + int v4; // eax + signed int v5; // eax + std::locale::facet *v7; // esi + char *v8; // edx + int v9; // eax + bool v10; // sf + unsigned int v11; // eax + char *v12; // edx + unsigned int v13; // eax + bool v14; // dl + _WORD *v15; // eax + unsigned int v16; // edx + unsigned int v17; // edx + int v18; // ecx + int *v19; // eax + char v20; // bl + int v21; // edx + int v22; // ebx + _WORD *v23; // eax + unsigned int v24; // edx + unsigned int v25; // edx + _WORD *v26; // eax + unsigned int v27; // edx + _DWORD *v28; // eax + unsigned int v29; // [esp-4h] [ebp-ECh] + unsigned int v30; // [esp+8h] [ebp-E0h] + unsigned int v31; // [esp+20h] [ebp-C8h] + __int16 v32; // [esp+24h] [ebp-C4h] + unsigned int v33; // [esp+24h] [ebp-C4h] + std::locale::_Impl *v34; // [esp+28h] [ebp-C0h] + int v35; // [esp+2Ch] [ebp-BCh] + int v36; // [esp+2Ch] [ebp-BCh] + unsigned int v37; // [esp+30h] [ebp-B8h] + __int16 v38; // [esp+30h] [ebp-B8h] + int v39; // [esp+34h] [ebp-B4h] + int v40; // [esp+38h] [ebp-B0h] + bool v41; // [esp+38h] [ebp-B0h] + __int16 *v42; // [esp+3Ch] [ebp-ACh] + int *v43; // [esp+48h] [ebp-A0h] + unsigned int v44; // [esp+48h] [ebp-A0h] + int v45; // [esp+48h] [ebp-A0h] + std::locale::facet *v46; // [esp+4Ch] [ebp-9Ch] + std::locale::facet *v47; // [esp+4Ch] [ebp-9Ch] + void *v48; // [esp+50h] [ebp-98h] + int v49; // [esp+50h] [ebp-98h] + int v50; // [esp+50h] [ebp-98h] + unsigned int v51; // [esp+50h] [ebp-98h] + __int64 v52; // [esp+54h] [ebp-94h] + int v53; // [esp+5Ch] [ebp-8Ch] + char *lpuexcpt; // [esp+60h] [ebp-88h] + struct _Unwind_Exception *lpuexcpta; // [esp+60h] [ebp-88h] + void **lpuexcptb; // [esp+60h] [ebp-88h] + char lpuexcptc; // [esp+60h] [ebp-88h] + int v58; // [esp+ACh] [ebp-3Ch] BYREF + void *v59; // [esp+B0h] [ebp-38h] BYREF + int v60; // [esp+B4h] [ebp-34h] + int v61[4]; // [esp+B8h] [ebp-30h] BYREF + void *Block; // [esp+C8h] [ebp-20h] BYREF + unsigned int v63; // [esp+CCh] [ebp-1Ch] + int v64[6]; // [esp+D0h] [ebp-18h] BYREF + + v52 = a1; + v48 = std::use_facet>(a2 + 108); + v46 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v43 = (int *)(*(_DWORD *)(*(_DWORD *)(a2 + 108) + 12) + 4 * (_DWORD)v46); + v53 = *v43; + if ( !*v43 ) + { + v28 = operator new(0x54u); + v28[1] = 0; + *v28 = &off_560704; + v28[2] = 0; + v28[3] = 0; + *((_BYTE *)v28 + 16) = 0; + *(_DWORD *)((char *)v28 + 18) = 0; + v28[6] = 0; + v28[7] = 0; + v28[8] = 0; + v28[9] = 0; + v28[10] = 0; + v28[11] = 0; + v28[12] = 0; + v28[13] = 0; + v28[14] = 0; + *((_BYTE *)v28 + 82) = 0; + v34 = (std::locale::_Impl *)v28; + std::__moneypunct_cache::_M_cache((int)v28, a2 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a2 + 108), v34, v46, v30); + v53 = *v43; + } + v4 = *(_DWORD *)(a4 + 4); + lpuexcpt = *(char **)a4; + if ( **(_WORD **)a4 == *(_WORD *)(v53 + 60) ) + { + v42 = *(__int16 **)(v53 + 40); + v7 = *(std::locale::facet **)(v53 + 44); + v58 = *(_DWORD *)(v53 + 56); + v47 = v7; + v8 = lpuexcpt + 2; + if ( !v4 ) + v8 = lpuexcpt; + lpuexcpt = v8; + } + else + { + v58 = *(_DWORD *)(v53 + 52); + v42 = *(__int16 **)(v53 + 32); + v47 = *(std::locale::facet **)(v53 + 36); + } + v5 = (*(int (__thiscall **)(void *, int, char *, char *))(*(_DWORD *)v48 + 20))(v48, 8, lpuexcpt, &lpuexcpt[2 * v4]) + - (_DWORD)lpuexcpt; + v44 = v5 >> 1; + if ( v5 >> 1 ) + { + v59 = v61; + v60 = 0; + LOWORD(v61[0]) = 0; + std::wstring::reserve((int)&v59, v5); + v9 = *(_DWORD *)(v53 + 48); + v49 = v60; + v40 = v44 - v9; + if ( (int)(v44 - v9) > 0 ) + { + v10 = v9 < 0; + v11 = v44 - v9; + if ( v10 ) + v11 = v44; + v40 = v11; + if ( *(_DWORD *)(v53 + 12) ) + { + v50 = 2 * v11; + std::wstring::_M_replace_aux(&v59, 0, v60, 2 * v11, 0); + v12 = (char *)std::__add_grouping( + v59, + *(_WORD *)(v53 + 20), + *(char **)(v53 + 8), + *(_DWORD *)(v53 + 12), + lpuexcpt, + &lpuexcpt[v50]); + v13 = (v12 - (_BYTE *)v59) >> 1; + v49 = v13; + if ( v13 > v60 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + v13, + v60); + v60 = (v12 - (_BYTE *)v59) >> 1; + *(_WORD *)v12 = 0; + v9 = *(_DWORD *)(v53 + 48); + } + else + { + std::wstring::_M_replace((unsigned int *)&v59, 0, v60, lpuexcpt, v11); + v49 = v60; + v9 = *(_DWORD *)(v53 + 48); + } + } + if ( v9 > 0 ) + { + v38 = *(_WORD *)(v53 + 18); + v23 = v59; + v39 = v49 + 1; + v24 = 7; + if ( v59 != v61 ) + v24 = v61[0]; + if ( v49 + 1 > v24 ) + { + std::wstring::_M_mutate((int)&v59, v49, 0, 0, 1); + v23 = v59; + } + v23[v49] = v38; + v60 = v49 + 1; + v23[v49 + 1] = 0; + if ( v40 < 0 ) + { + std::wstring::_M_replace_aux(&v59, v39, 0, -v40, *(_WORD *)(v53 + 62)); + if ( v44 > 0x1FFFFFFF - v60 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::wstring::_M_append(&v59, lpuexcpt, v44); + } + else + { + v25 = *(_DWORD *)(v53 + 48); + if ( v25 > 0x1FFFFFFF - v39 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::wstring::_M_append(&v59, &lpuexcpt[2 * v40], v25); + } + v49 = v60; + } + v45 = *(_DWORD *)(a2 + 12) & 0xB0; + lpuexcpta = (std::locale::facet *)((char *)v47 + v49); + if ( (*(_DWORD *)(a2 + 12) & 0x200) != 0 ) + lpuexcpta = (std::locale::facet *)((char *)v47 + v49 + *(_DWORD *)(v53 + 28)); + Block = v64; + v63 = 0; + LOWORD(v64[0]) = 0; + std::wstring::reserve((int)&Block, 2 * (_DWORD)lpuexcpta); + v51 = *(_DWORD *)(a2 + 8); + v14 = v51 > (unsigned int)lpuexcpta && v45 == 16; + v37 = v51 - (_DWORD)lpuexcpta; + lpuexcptb = (void **)&v58; + v41 = v14; + do + { + switch ( *(_BYTE *)lpuexcptb ) + { + case 0: + if ( v41 ) + goto LABEL_31; + break; + case 1: + v36 = v63; + if ( v41 ) + { +LABEL_31: + std::wstring::_M_replace_aux(&Block, v63, 0, v37, a3); + } + else + { + v26 = Block; + v33 = v63 + 1; + v27 = 7; + if ( Block != v64 ) + v27 = v64[0]; + if ( v63 + 1 > v27 ) + { + std::wstring::_M_mutate((int)&Block, v63, 0, 0, 1); + v26 = Block; + } + v26[v36] = a3; + v63 = v33; + v26[v36 + 1] = 0; + } + break; + case 2: + if ( (*(_BYTE *)(a2 + 13) & 2) != 0 ) + { + v17 = *(_DWORD *)(v53 + 28); + if ( v17 > 0x1FFFFFFF - v63 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::wstring::_M_append(&Block, *(_WORD **)(v53 + 24), v17); + } + break; + case 3: + if ( v47 ) + { + v32 = *v42; + v35 = v63; + v15 = Block; + v31 = v63 + 1; + v16 = 7; + if ( Block != v64 ) + v16 = v64[0]; + if ( v63 + 1 > v16 ) + { + std::wstring::_M_mutate((int)&Block, v63, 0, 0, 1); + v15 = Block; + } + v15[v35] = v32; + v63 = v31; + v15[v35 + 1] = 0; + } + break; + case 4: + std::wstring::_M_append(&Block, v59, v60); + break; + default: + break; + } + lpuexcptb = (void **)((char *)lpuexcptb + 1); + } + while ( &v59 != lpuexcptb ); + v18 = v63; + if ( (unsigned int)v47 > 1 ) + { + if ( (unsigned int)v47 - 1 > 0x1FFFFFFF - v63 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::wstring::_M_append(&Block, v42 + 1, (int)v47 - 1); + v18 = v63; + if ( v51 > v63 ) + goto LABEL_38; + } + else if ( v51 > v63 ) + { +LABEL_38: + v29 = v51 - v18; + if ( v45 == 32 ) + std::wstring::_M_replace_aux(&Block, v18, 0, v29, a3); + else + std::wstring::_M_replace_aux(&Block, 0, 0, v29, a3); + goto LABEL_40; + } + v51 = v18; +LABEL_40: + v19 = (int *)Block; + lpuexcptc = BYTE4(a1); + if ( !BYTE4(a1) ) + { + v20 = 0; + v21 = (*(int (__thiscall **)(_DWORD, void *, unsigned int))(*(_DWORD *)a1 + 48))(a1, Block, v51); + v19 = (int *)Block; + if ( v51 != v21 ) + v20 = 1; + lpuexcptc = v20; + } + v22 = HIDWORD(a1); + LOBYTE(v22) = lpuexcptc; + HIDWORD(v52) = v22; + if ( v19 != v64 ) + operator delete(v19); + if ( v59 != v61 ) + operator delete(v59); + } + *(_DWORD *)(a2 + 8) = 0; + return v52; +} +// 49750C: variable 'v30' is possibly undefined +// 53F714: using guessed type signed __int32 std::moneypunct::id; +// 560704: using guessed type int (*off_560704)(); + +//----- (004977E0) -------------------------------------------------------- +int __stdcall std::codecvt::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (00497800) -------------------------------------------------------- +int __stdcall std::codecvt::do_in( + int a1, + unsigned __int8 *a2, + int a3, + unsigned __int8 **a4, + int a5, + int a6, + _DWORD *a7) +{ + unsigned __int8 *v7; // edx + unsigned int v9; // eax + int result; // eax + unsigned __int8 *v11; // [esp+8h] [ebp-10h] BYREF + unsigned __int8 *v12; // [esp+Ch] [ebp-Ch] + + v7 = (unsigned __int8 *)a3; + v11 = a2; + v12 = (unsigned __int8 *)a3; + if ( a2 == (unsigned __int8 *)a3 ) + { +LABEL_9: + result = 0; + } + else + { + while ( 1 ) + { + if ( a6 == a5 ) + { + v7 = v11; + result = 1; + goto LABEL_8; + } + v9 = std::`anonymous namespace'::read_utf8_code_point(&v11, 0x10FFFFu); + v7 = v11; + if ( v9 == -2 ) + { + result = 1; + goto LABEL_8; + } + if ( v9 > 0x10FFFF ) + break; + a5 += 4; + *(_DWORD *)(a5 - 4) = v9; + if ( v12 == v7 ) + goto LABEL_9; + } + result = 2; + } +LABEL_8: + *a4 = v7; + *a7 = a5; + return result; +} + +//----- (004978A0) -------------------------------------------------------- +int __stdcall std::codecvt::do_out( + int a1, + unsigned int *a2, + unsigned int *a3, + unsigned int **a4, + int a5, + int a6, + _DWORD *a7) +{ + _BYTE *v7; // eax + unsigned int *v8; // ebx + unsigned int v9; // edx + int v11; // edx + _BYTE *v12; // [esp+8h] [ebp-10h] BYREF + _BYTE *v13; // [esp+Ch] [ebp-Ch] + + v7 = (_BYTE *)a5; + v8 = a2; + v12 = (_BYTE *)a5; + v13 = (_BYTE *)a6; + if ( a2 == a3 ) + { + v11 = 0; + } + else + { + do + { + v9 = *v8; + if ( *v8 > 0x10FFFF ) + { + v7 = v12; + v11 = 2; + goto LABEL_11; + } + if ( v9 <= 0x7F ) + { + v7 = v12; + if ( v13 == v12 ) + { + v11 = 1; + goto LABEL_11; + } + ++v12; + *v7 = v9; + } + else if ( !(unsigned __int8)std::`anonymous namespace'::write_utf8_code_point((int)&v12, v9) ) + { + v7 = v12; + v11 = 1; + goto LABEL_11; + } + ++v8; + } + while ( a3 != v8 ); + v7 = v12; + v11 = 0; + } +LABEL_11: + *a4 = v8; + *a7 = v7; + return v11; +} + +//----- (00497960) -------------------------------------------------------- +unsigned __int8 *__stdcall std::codecvt::do_length( + int a1, + unsigned __int8 *a2, + unsigned __int8 *a3, + int a4) +{ + int v4; // ebx + bool v5; // dl + bool v6; // al + unsigned __int8 *v8[4]; // [esp+8h] [ebp-10h] BYREF + + v8[0] = a2; + v8[1] = a3; + if ( !a4 ) + return 0; + v4 = a4 - 1; + do + { + v5 = (unsigned int)std::`anonymous namespace'::read_utf8_code_point(v8, 0x10FFFFu) <= 0x10FFFF; + v6 = v4-- != 0; + } + while ( v6 && v5 ); + return (unsigned __int8 *)(v8[0] - a2); +} + +//----- (004979C0) -------------------------------------------------------- +int __stdcall std::codecvt::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (004979E0) -------------------------------------------------------- +int __stdcall std::codecvt::do_in( + int a1, + unsigned __int8 *a2, + int a3, + unsigned __int8 **a4, + int a5, + int a6, + _DWORD *a7) +{ + unsigned __int8 *v7; // edx + unsigned int v9; // eax + int result; // eax + unsigned __int8 *v11; // [esp+8h] [ebp-10h] BYREF + unsigned __int8 *v12; // [esp+Ch] [ebp-Ch] + + v7 = (unsigned __int8 *)a3; + v11 = a2; + v12 = (unsigned __int8 *)a3; + if ( a2 == (unsigned __int8 *)a3 ) + { +LABEL_9: + result = 0; + } + else + { + while ( 1 ) + { + if ( a6 == a5 ) + { + v7 = v11; + result = 1; + goto LABEL_8; + } + v9 = std::`anonymous namespace'::read_utf8_code_point(&v11, 0x10FFFFu); + v7 = v11; + if ( v9 == -2 ) + { + result = 1; + goto LABEL_8; + } + if ( v9 > 0x10FFFF ) + break; + a5 += 4; + *(_DWORD *)(a5 - 4) = v9; + if ( v12 == v7 ) + goto LABEL_9; + } + result = 2; + } +LABEL_8: + *a4 = v7; + *a7 = a5; + return result; +} + +//----- (00497A80) -------------------------------------------------------- +int __stdcall std::codecvt::do_out( + int a1, + unsigned int *a2, + unsigned int *a3, + unsigned int **a4, + _BYTE *a5, + _BYTE *a6, + _DWORD *a7) +{ + _BYTE *v7; // eax + unsigned int *v8; // ebx + int v10; // ecx + _BYTE *v11[4]; // [esp+8h] [ebp-10h] BYREF + + v7 = a5; + v8 = a2; + v11[0] = a5; + v11[1] = a6; + if ( a2 == a3 ) + { + v10 = 0; + } + else + { + do + { + if ( *v8 > 0x10FFFF ) + { + v7 = v11[0]; + v10 = 2; + goto LABEL_7; + } + if ( !(unsigned __int8)std::`anonymous namespace'::write_utf8_code_point(v11, *v8) ) + { + v7 = v11[0]; + v10 = 1; + goto LABEL_7; + } + ++v8; + } + while ( a3 != v8 ); + v7 = v11[0]; + v10 = 0; + } +LABEL_7: + *a4 = v8; + *a7 = v7; + return v10; +} + +//----- (00497B10) -------------------------------------------------------- +unsigned __int8 *__stdcall std::codecvt::do_length( + int a1, + unsigned __int8 *a2, + unsigned __int8 *a3, + int a4) +{ + int v4; // ebx + bool v5; // dl + bool v6; // al + unsigned __int8 *v8[4]; // [esp+8h] [ebp-10h] BYREF + + v8[0] = a2; + v8[1] = a3; + if ( !a4 ) + return 0; + v4 = a4 - 1; + do + { + v5 = (unsigned int)std::`anonymous namespace'::read_utf8_code_point(v8, 0x10FFFFu) <= 0x10FFFF; + v6 = v4-- != 0; + } + while ( v6 && v5 ); + return (unsigned __int8 *)(v8[0] - a2); +} + +//----- (00497B70) -------------------------------------------------------- +int __stdcall std::codecvt::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (00497B90) -------------------------------------------------------- +int __stdcall std::codecvt::do_in( + int a1, + unsigned __int8 *a2, + unsigned __int8 *a3, + unsigned __int8 **a4, + char *a5, + char *a6, + char **a7) +{ + unsigned __int8 *v7; // edi + unsigned int v9; // eax + int result; // eax + unsigned __int8 *v11; // [esp+8h] [ebp-14h] BYREF + unsigned __int8 *v12; // [esp+Ch] [ebp-10h] + + v7 = a2; + v11 = a2; + v12 = a3; + if ( a2 == a3 ) + { +LABEL_12: + result = 0; + } + else + { + while ( 1 ) + { + if ( a6 == a5 ) + { + v7 = v11; + result = 0; + goto LABEL_10; + } + v9 = std::`anonymous namespace'::read_utf8_code_point(&v11, 0x10FFFFu); + if ( v9 == -2 ) + { + v7 = v11; + result = 1; + goto LABEL_10; + } + if ( v9 > 0x10FFFF ) + break; + if ( v9 <= 0xFFFF ) + { + *(_WORD *)a5 = v9; + v7 = v11; + a5 += 2; + if ( v12 == v11 ) + goto LABEL_12; + } + else + { + if ( (unsigned int)(a6 - a5) <= 2 ) + { + result = 1; + goto LABEL_10; + } + v7 = v11; + a5 += 4; + *((_WORD *)a5 - 1) = (v9 & 0x3FF) - 9216; + *((_WORD *)a5 - 2) = (v9 >> 10) - 10304; + if ( v12 == v7 ) + goto LABEL_12; + } + } + v7 = v11; + result = 2; + } +LABEL_10: + *a4 = v7; + *a7 = a5; + return result; +} + +//----- (00497C80) -------------------------------------------------------- +int __stdcall std::codecvt::do_out( + int a1, + unsigned __int16 *a2, + unsigned __int16 *a3, + unsigned __int16 **a4, + int a5, + int a6, + _DWORD *a7) +{ + unsigned __int16 *v7; // ebx + _BYTE *v8; // eax + unsigned int v9; // edi + int v10; // eax + int v11; // edi + unsigned int v12; // edx + unsigned __int16 v13; // cx + int v15; // edx + _BYTE *v16; // [esp+8h] [ebp-14h] BYREF + _BYTE *v17; // [esp+Ch] [ebp-10h] + + v7 = a2; + v8 = (_BYTE *)a5; + v16 = (_BYTE *)a5; + v9 = (char *)a3 - (char *)a2; + v17 = (_BYTE *)a6; + if ( a2 != a3 ) + { + while ( 1 ) + { + while ( 1 ) + { + v12 = *v7; + v13 = *v7; + if ( v12 - 55296 > 0x3FF ) + break; + if ( v9 <= 2 ) + goto LABEL_13; + v10 = v7[1]; + if ( (unsigned int)(v10 - 56320) > 0x3FF ) + { +LABEL_16: + v8 = v16; + v15 = 2; + goto LABEL_15; + } + v11 = 2; + v12 = v10 + (v12 << 10) - 56613888; +LABEL_6: + if ( !(unsigned __int8)std::`anonymous namespace'::write_utf8_code_point((int)&v16, v12) ) + { + v8 = v16; + v15 = 1; + goto LABEL_15; + } + v7 += v11; + v9 = (char *)a3 - (char *)v7; + if ( a3 == v7 ) + goto LABEL_13; + } + if ( v12 - 56320 <= 0x3FF ) + goto LABEL_16; + if ( v12 > 0x7F ) + { + v11 = 1; + goto LABEL_6; + } + v8 = v16; + if ( v17 == v16 ) + { + v15 = 1; + goto LABEL_15; + } + ++v16; + *v8 = v13; + v9 = (char *)a3 - (char *)++v7; + if ( a3 == v7 ) + { +LABEL_13: + v8 = v16; + v15 = 0; + goto LABEL_15; + } + } + } + v15 = 0; +LABEL_15: + *a4 = v7; + *a7 = v8; + return v15; +} + +//----- (00497DA0) -------------------------------------------------------- +unsigned __int8 *__stdcall std::codecvt::do_length( + int a1, + unsigned __int8 *a2, + unsigned __int8 *a3, + unsigned int a4) +{ + unsigned int v4; // ebx + unsigned int v5; // esi + unsigned int utf8_code; // eax + unsigned __int8 *v8[6]; // [esp+8h] [ebp-18h] BYREF + + v4 = 1; + v8[0] = a2; + v8[1] = a3; + if ( a4 > 1 ) + { + v5 = 0; + do + { + utf8_code = std::`anonymous namespace'::read_utf8_code_point(v8, 0x10FFFFu); + if ( utf8_code > 0x10FFFF ) + return (unsigned __int8 *)(v8[0] - a2); + if ( utf8_code <= 0xFFFF ) + v4 = v5; + v5 = v4 + 1; + v4 += 2; + } + while ( a4 > v4 ); + } + if ( a4 != v4 ) + return (unsigned __int8 *)(v8[0] - a2); + std::`anonymous namespace'::read_utf8_code_point(v8, 0xFFFFu); + return (unsigned __int8 *)(v8[0] - a2); +} + +//----- (00497E40) -------------------------------------------------------- +int __stdcall std::codecvt::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (00497E60) -------------------------------------------------------- +int std::codecvt::do_encoding() +{ + return 0; +} + +//----- (00497E70) -------------------------------------------------------- +int std::codecvt::do_max_length() +{ + return 4; +} + +//----- (00497E80) -------------------------------------------------------- +int std::codecvt::do_always_noconv() +{ + return 0; +} + +//----- (00497E90) -------------------------------------------------------- +int __stdcall std::codecvt::do_in( + int a1, + unsigned __int8 *a2, + unsigned __int8 *a3, + unsigned __int8 **a4, + char *a5, + char *a6, + char **a7) +{ + int result; // eax + unsigned __int8 *v8[2]; // [esp+8h] [ebp-10h] BYREF + char *v9[2]; // [esp+10h] [ebp-8h] BYREF + + v8[0] = a2; + v8[1] = a3; + v9[0] = a5; + v9[1] = a6; + result = std::`anonymous namespace'::utf16_in(v8, v9, 0x10FFFFu, 1, 0); + *a4 = v8[0]; + *a7 = v9[0]; + return result; +} + +//----- (00497EF0) -------------------------------------------------------- +int __stdcall std::codecvt::do_out( + int a1, + unsigned __int16 *a2, + unsigned __int16 *a3, + unsigned __int16 **a4, + _BYTE *a5, + _BYTE *a6, + _BYTE **a7) +{ + int result; // eax + unsigned __int16 *v8[2]; // [esp+4h] [ebp-10h] BYREF + _BYTE *v9[2]; // [esp+Ch] [ebp-8h] BYREF + + v8[0] = a2; + v8[1] = a3; + v9[0] = a5; + v9[1] = a6; + result = std::`anonymous namespace'::utf16_out(v8, v9, 0x10FFFFu, 0); + *a4 = v8[0]; + *a7 = v9[0]; + return result; +} + +//----- (00497F50) -------------------------------------------------------- +unsigned __int8 *__stdcall std::codecvt::do_length( + int a1, + unsigned __int8 *a2, + unsigned __int8 *a3, + unsigned int a4) +{ + return (unsigned __int8 *)(std::`anonymous namespace'::utf16_span(a2, a3, a4, 0x10FFFFu, 0) - a2); +} + +//----- (00497F80) -------------------------------------------------------- +int __stdcall std::codecvt::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (00497FA0) -------------------------------------------------------- +int std::codecvt::do_max_length() +{ + return 1; +} + +//----- (00497FB0) -------------------------------------------------------- +int std::codecvt::do_always_noconv() +{ + return 1; +} + +//----- (00497FC0) -------------------------------------------------------- +int __stdcall std::codecvt::do_in(int a1, int a2, int a3, _DWORD *a4, int a5, int a6, _DWORD *a7) +{ + *a4 = a2; + *a7 = a5; + return 3; +} + +//----- (00497FE0) -------------------------------------------------------- +int __stdcall std::codecvt::do_out(int a1, int a2, int a3, _DWORD *a4, int a5, int a6, _DWORD *a7) +{ + *a4 = a2; + *a7 = a5; + return 3; +} + +//----- (00498000) -------------------------------------------------------- +unsigned int __stdcall std::codecvt::do_length(int a1, int a2, int a3, unsigned int a4) +{ + unsigned int result; // eax + + result = a3 - a2; + if ( a3 - a2 > a4 ) + return a4; + return result; +} + +//----- (00498020) -------------------------------------------------------- +int __stdcall std::codecvt::do_unshift(int a1, int a2, int a3, _DWORD *a4) +{ + *a4 = a2; + return 3; +} + +//----- (00498040) -------------------------------------------------------- +BOOL __cdecl std::codecvt::do_encoding() +{ + return ____mb_cur_max_func() == 1; +} + +//----- (004980C0) -------------------------------------------------------- +int __cdecl std::codecvt::do_max_length() +{ + return ____mb_cur_max_func(); +} + +//----- (00498140) -------------------------------------------------------- +int std::codecvt::do_always_noconv() +{ + return 0; +} + +//----- (00498150) -------------------------------------------------------- +int __stdcall std::codecvt::do_in( + unsigned int *a1, + char *a2, + unsigned int a3, + char **a4, + wchar_t *a5, + unsigned int a6, + wchar_t **a7) +{ + char *v7; // esi + wchar_t *v8; // edi + const char *SrcCh; // edi + wchar_t *DstCh; // esi + size_t v11; // eax + int result; // eax + mbstate_t State; // [esp+1Ch] [ebp-20h] BYREF + wchar_t *v14; // [esp+50h] [ebp+14h] + wchar_t *v15; // [esp+50h] [ebp+14h] + wchar_t *v16; // [esp+50h] [ebp+14h] + + v7 = a2; + v8 = a5; + State._Wchar = *a1; + if ( (unsigned int)a5 >= a6 || (unsigned int)a2 >= a3 ) + { +LABEL_12: + result = (unsigned int)v7 < a3; + } + else + { + SrcCh = a2; + DstCh = a5; + while ( 1 ) + { + v11 = mbrtowc(DstCh, SrcCh, a3 - (_DWORD)SrcCh, &State); + if ( v11 == -1 ) + { + v14 = DstCh; + result = 2; + v7 = (char *)SrcCh; + v8 = v14; + goto LABEL_13; + } + if ( v11 == -2 ) + break; + if ( !v11 ) + { + *DstCh = 0; + v11 = 1; + } + SrcCh += v11; + ++DstCh; + *a1 = State._Wchar; + if ( a3 <= (unsigned int)SrcCh || a6 <= (unsigned int)DstCh ) + { + v15 = DstCh; + v7 = (char *)SrcCh; + v8 = v15; + goto LABEL_12; + } + } + v16 = DstCh; + result = 1; + v7 = (char *)SrcCh; + v8 = v16; + } +LABEL_13: + *a4 = v7; + *a7 = v8; + return result; +} + +//----- (00498240) -------------------------------------------------------- +int __stdcall std::codecvt::do_out( + unsigned int *a1, + wchar_t *a2, + unsigned int a3, + wchar_t **a4, + char *a5, + unsigned int a6, + char **a7) +{ + wchar_t *v7; // edi + char *v8; // ebx + unsigned int Size; // eax + int result; // eax + size_t v11; // eax + char *Dest; // [esp+0h] [ebp-4Ch] + mbstate_t Src; // [esp+24h] [ebp-28h] BYREF + + v7 = a2; + v8 = a5; + Src._Wchar = *a1; + if ( (int)(____mb_cur_max_func() * ((int)(a3 - (_DWORD)a2) >> 1) - (a6 - (_DWORD)a5)) <= 0 ) + { + if ( a3 <= (unsigned int)a2 ) + { +LABEL_18: + result = 0; + goto LABEL_12; + } + while ( 1 ) + { + v11 = wcrtomb(v8, *v7, &Src); + if ( v11 == -1 ) + break; + v8 += v11; + ++v7; + *a1 = Src._Wchar; + if ( a3 <= (unsigned int)v7 ) + goto LABEL_18; + } + } + else + { + if ( a3 <= (unsigned int)a2 || a6 <= (unsigned int)a5 ) + { +LABEL_11: + result = (unsigned int)v7 < a3; + goto LABEL_12; + } + for ( Size = wcrtomb((char *)&Src._State + 1, *a2, &Src); Size != -1; Size = wcrtomb( + (char *)&Src._State + 1, + *v7, + &Src) ) + { + if ( a6 - (unsigned int)v8 < Size ) + { + result = 1; + goto LABEL_12; + } + Dest = v8; + ++v7; + v8 += Size; + memcpy(Dest, (char *)&Src._State + 1, Size); + *a1 = Src._Wchar; + if ( a3 <= (unsigned int)v7 || a6 <= (unsigned int)v8 ) + goto LABEL_11; + } + } + result = 2; +LABEL_12: + *a4 = v7; + *a7 = v8; + return result; +} + +//----- (00498370) -------------------------------------------------------- +int __stdcall std::codecvt::do_length(unsigned int *a1, char *a2, unsigned int a3, int a4) +{ + int v4; // esi + const char *SrcCh; // ebp + int v6; // edi + size_t v7; // eax + mbstate_t State; // [esp+1Ch] [ebp-20h] BYREF + + v4 = 0; + State._Wchar = *a1; + if ( a4 && (unsigned int)a2 < a3 ) + { + SrcCh = a2; + v6 = a4; + do + { + v7 = mbrtowc(0, SrcCh, a3 - (_DWORD)SrcCh, &State); + if ( v7 > 0xFFFFFFFD ) + break; + if ( !v7 ) + v7 = 1; + --v6; + SrcCh += v7; + *a1 = State._Wchar; + v4 += v7; + if ( a3 <= (unsigned int)SrcCh ) + break; + } + while ( v6 ); + } + return v4; +} + +//----- (00498400) -------------------------------------------------------- +int __stdcall std::collate::_M_compare(char *String1, char *String2) +{ + int v2; // eax + + v2 = strcoll(String1, String2); + return (v2 >> 30) | (v2 != 0); +} + +//----- (00498430) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +int __stdcall std::collate::do_compare(void *a1, _BYTE *a2, void *a3, int a4) +{ + int i; // eax + char *v5; // eax + int v6; // eax + int v7; // eax + char *v9; // [esp+18h] [ebp-74h] + char *v10; // [esp+18h] [ebp-74h] + char *Str; // [esp+1Ch] [ebp-70h] + char *v12; // [esp+20h] [ebp-6Ch] + int v13; // [esp+24h] [ebp-68h] + char *v14; // [esp+2Ch] [ebp-60h] + char *v15; // [esp+30h] [ebp-5Ch] + char *v16; // [esp+34h] [ebp-58h] + char v17; // [esp+7Bh] [ebp-11h] BYREF + _BYTE *retaddr; // [esp+8Ch] [ebp+0h] + + v15 = (char *)std::string::_S_construct(retaddr, (int)a1); + v16 = (char *)std::string::_S_construct(a2, (int)a3); + Str = v16; + v9 = v15; + v12 = &v16[*((_DWORD *)v16 - 3)]; + v14 = &v15[*((_DWORD *)v15 - 3)]; + for ( i = std::collate::_M_compare(v15, v16); ; i = std::collate::_M_compare(v9, v5 + 1) ) + { + v13 = i; + if ( i ) + break; + v10 = &v9[strlen(v9)]; + v5 = &Str[strlen(Str)]; + if ( v14 == v10 ) + { + if ( v12 == v5 ) + break; + if ( v14 == v10 ) + { + v13 = -1; + break; + } + } + if ( v12 == v5 ) + { + v13 = 1; + break; + } + Str = v5 + 1; + v9 = v10 + 1; + } + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v16 - 1, 0xFFFFFFFF) > 0 ) + goto LABEL_11; + } + else + { + v6 = *((_DWORD *)v16 - 1); + *((_DWORD *)v16 - 1) = v6 - 1; + if ( v6 > 0 ) + goto LABEL_11; + } + std::string::_Rep::_M_destroy(v16 - 12, (int)&v17); +LABEL_11: + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v15 - 1, 0xFFFFFFFF) > 0 ) + return v13; +LABEL_15: + std::string::_Rep::_M_destroy(v15 - 12, (int)&v17); + return v13; + } + v7 = *((_DWORD *)v15 - 1); + *((_DWORD *)v15 - 1) = v7 - 1; + if ( v7 <= 0 ) + goto LABEL_15; + return v13; +} +// 498650: positive sp value 4 has been found +// 53E1E4: using guessed type int _CRT_MT; + +//----- (00498670) -------------------------------------------------------- +size_t __stdcall std::collate::_M_transform(char *Destination, char *Source, size_t MaxCount) +{ + return strxfrm(Destination, Source, MaxCount); +} + +//----- (004986A0) -------------------------------------------------------- +int *__thiscall std::collate::do_transform(int *this, int a2, _BYTE *a3, int a4) +{ + size_t i; // eax + int v5; // eax + char *v6; // eax + int v7; // eax + unsigned int v9; // [esp+4h] [ebp-84h] + unsigned int v10; // [esp+8h] [ebp-80h] + char *v11; // [esp+1Ch] [ebp-6Ch] + char *v12; // [esp+20h] [ebp-68h] + int v13; // [esp+24h] [ebp-64h] + std::string *v14; // [esp+28h] [ebp-60h] + char *Block; // [esp+2Ch] [ebp-5Ch] + unsigned int v17; // [esp+34h] [ebp-54h] + char *Str; // [esp+38h] [ebp-50h] + int v19; // [esp+7Fh] [ebp-9h] BYREF + + *this = (int)std::string::_S_construct(0, 0); + v11 = (char *)std::string::_S_construct(a3, a4); + v17 = 2 * (a4 - (_DWORD)a3); + v12 = &v11[*((_DWORD *)v11 - 3)]; + Block = (char *)operator new[](v17); + Str = v11; + for ( i = std::collate::_M_transform(Block, v11, v17); ; i = std::collate::_M_transform(Block, Str, v17) ) + { + if ( v17 <= i ) + { + v17 = i + 1; + operator delete[](Block); + Block = (char *)operator new[](v17); + i = std::collate::_M_transform(Block, Str, v17); + } + std::string::append(this, (std::string *)Block, i, v10); + v6 = &Str[strlen(Str)]; + if ( v12 == v6 ) + break; + Str = v6 + 1; + v13 = *(_DWORD *)(*this - 12); + v14 = (std::string *)(v13 + 1); + if ( (unsigned int)(v13 + 1) > *(_DWORD *)(*this - 8) || *(int *)(*this - 4) > 0 ) + std::string::reserve(this, v14, v9); + *(_BYTE *)(*this + *(_DWORD *)(*this - 12)) = 0; + v5 = *this; + *(_DWORD *)(v5 - 4) = 0; + *(_DWORD *)(v5 - 12) = v14; + *(_BYTE *)(v5 + v13 + 1) = 0; + } + operator delete[](Block); + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v11 - 1, 0xFFFFFFFF) > 0 ) + return this; +LABEL_13: + std::string::_Rep::_M_destroy(v11 - 12, (int)&v19); + return this; + } + v7 = *((_DWORD *)v11 - 1); + *((_DWORD *)v11 - 1) = v7 - 1; + if ( v7 <= 0 ) + goto LABEL_13; + return this; +} +// 498783: variable 'v9' is possibly undefined +// 498828: variable 'v10' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (00498950) -------------------------------------------------------- +int __thiscall std::collate::hash(void *this, char *a2, char *a3) +{ + char *v3; // edx + int (__stdcall *v4)(char *, char *); // eax + int result; // eax + int v6; // ecx + + v3 = a2; + v4 = *(int (__stdcall **)(char *, char *))(*(_DWORD *)this + 16); + if ( v4 != std::collate::do_hash ) + return v4(a2, a3); + result = 0; + if ( a2 < a3 ) + { + do + { + v6 = *v3++; + result = v6 + __ROL4__(result, 7); + } + while ( a3 != v3 ); + } + return result; +} + +//----- (004989A0) -------------------------------------------------------- +int __fastcall std::collate::compare(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 8))(a1); +} + +//----- (004989B0) -------------------------------------------------------- +int __stdcall std::collate::do_hash(char *a1, char *a2) +{ + char *v2; // edx + int result; // eax + int v4; // ecx + + v2 = a1; + result = 0; + if ( a1 < a2 ) + { + do + { + v4 = *v2++; + result = v4 + __ROL4__(result, 7); + } + while ( a2 != v2 ); + } + return result; +} + +//----- (004989E0) -------------------------------------------------------- +void *__thiscall std::collate::transform(void *this, int a2, int a3, int a4) +{ + (*(void (__thiscall **)(void *, int, int, int))(*(_DWORD *)a2 + 12))(this, a2, a3, a4); + return this; +} + +//----- (00498A10) -------------------------------------------------------- +int __stdcall std::collate::_M_compare(wchar_t *String1, wchar_t *String2) +{ + int v2; // eax + + v2 = wcscoll(String1, String2); + return (v2 >> 30) | (v2 != 0); +} + +//----- (00498A40) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +int __stdcall std::collate::do_compare(void *a1, _WORD *a2, void *a3, int a4) +{ + int i; // eax + wchar_t *v5; // eax + int v6; // eax + int v7; // eax + wchar_t *v9; // [esp+18h] [ebp-74h] + wchar_t *v10; // [esp+18h] [ebp-74h] + wchar_t *String; // [esp+1Ch] [ebp-70h] + wchar_t *v12; // [esp+20h] [ebp-6Ch] + int v13; // [esp+24h] [ebp-68h] + wchar_t *v14; // [esp+2Ch] [ebp-60h] + wchar_t *v15; // [esp+30h] [ebp-5Ch] + wchar_t *v16; // [esp+34h] [ebp-58h] + char v17; // [esp+7Bh] [ebp-11h] BYREF + _WORD *retaddr; // [esp+8Ch] [ebp+0h] + + v15 = (wchar_t *)std::wstring::_S_construct(retaddr, (int)a1); + v16 = (wchar_t *)std::wstring::_S_construct(a2, (int)a3); + String = v16; + v9 = v15; + v14 = &v15[*((_DWORD *)v15 - 3)]; + v12 = &String[*((_DWORD *)String - 3)]; + for ( i = std::collate::_M_compare(v15, v16); ; i = std::collate::_M_compare(v9, v5 + 1) ) + { + v13 = i; + if ( i ) + break; + v10 = &v9[wcslen(v9)]; + v5 = &String[wcslen(String)]; + if ( v14 == v10 ) + { + if ( v12 == v5 ) + break; + if ( v14 == v10 ) + { + v13 = -1; + break; + } + } + if ( v12 == v5 ) + { + v13 = 1; + break; + } + String = v5 + 1; + v9 = v10 + 1; + } + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v16 - 1, 0xFFFFFFFF) > 0 ) + goto LABEL_11; + } + else + { + v6 = *((_DWORD *)v16 - 1); + *((_DWORD *)v16 - 1) = v6 - 1; + if ( v6 > 0 ) + goto LABEL_11; + } + std::wstring::_Rep::_M_destroy(v16 - 6, (int)&v17); +LABEL_11: + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v15 - 1, 0xFFFFFFFF) > 0 ) + return v13; +LABEL_15: + std::wstring::_Rep::_M_destroy(v15 - 6, (int)&v17); + return v13; + } + v7 = *((_DWORD *)v15 - 1); + *((_DWORD *)v15 - 1) = v7 - 1; + if ( v7 <= 0 ) + goto LABEL_15; + return v13; +} +// 498C68: positive sp value 4 has been found +// 53E1E4: using guessed type int _CRT_MT; + +//----- (00498C80) -------------------------------------------------------- +size_t __stdcall std::collate::_M_transform(wchar_t *Destination, wchar_t *Source, size_t MaxCount) +{ + return wcsxfrm(Destination, Source, MaxCount); +} + +//----- (00498CB0) -------------------------------------------------------- +int *__thiscall std::collate::do_transform(int *this, int a2, _WORD *a3, int a4) +{ + unsigned int i; // eax + int v5; // eax + wchar_t *v6; // eax + int v7; // eax + wchar_t *v9; // [esp+10h] [ebp-68h] + wchar_t *v10; // [esp+14h] [ebp-64h] + unsigned int v11; // [esp+18h] [ebp-60h] + wchar_t *Block; // [esp+1Ch] [ebp-5Ch] + wchar_t *String; // [esp+24h] [ebp-54h] + size_t lpuexcpt; // [esp+28h] [ebp-50h] + int v16; // [esp+6Fh] [ebp-9h] BYREF + + *this = (int)std::wstring::_S_construct(0, 0); + v9 = (wchar_t *)std::wstring::_S_construct(a3, a4); + v10 = &v9[*((_DWORD *)v9 - 3)]; + lpuexcpt = a4 - (_DWORD)a3; + if ( (unsigned int)(a4 - (_DWORD)a3) > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + Block = (wchar_t *)operator new[](2 * (a4 - (_DWORD)a3)); + String = v9; + for ( i = std::collate::_M_transform(Block, v9, lpuexcpt); + ; + i = std::collate::_M_transform(Block, String, lpuexcpt) ) + { + if ( lpuexcpt <= i ) + { + lpuexcpt = i + 1; + operator delete[](Block); + if ( lpuexcpt > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + Block = (wchar_t *)operator new[](2 * lpuexcpt); + i = std::collate::_M_transform(Block, String, lpuexcpt); + } + std::wstring::append(this, (char *)Block, i); + v6 = &String[wcslen(String)]; + if ( v10 == v6 ) + break; + String = v6 + 1; + v11 = *(_DWORD *)(*this - 12) + 1; + if ( v11 > *(_DWORD *)(*this - 8) || *(int *)(*this - 4) > 0 ) + std::wstring::reserve(this, v11); + v5 = *this; + *(_WORD *)(v5 + 2 * *(_DWORD *)(*this - 12)) = 0; + *(_DWORD *)(v5 - 4) = 0; + *(_DWORD *)(v5 - 12) = v11; + *(_WORD *)(v5 + 2 * v11) = 0; + } + operator delete[](Block); + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v9 - 1, 0xFFFFFFFF) > 0 ) + return this; +LABEL_15: + std::wstring::_Rep::_M_destroy(v9 - 6, (int)&v16); + return this; + } + v7 = *((_DWORD *)v9 - 1); + *((_DWORD *)v9 - 1) = v7 - 1; + if ( v7 <= 0 ) + goto LABEL_15; + return this; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (00498F90) -------------------------------------------------------- +int __thiscall std::collate::hash(void *this, unsigned __int16 *a2, unsigned int a3) +{ + unsigned __int16 *v3; // edx + int (__stdcall *v4)(unsigned __int16 *, unsigned int); // eax + int result; // eax + int v6; // ecx + + v3 = a2; + v4 = *(int (__stdcall **)(unsigned __int16 *, unsigned int))(*(_DWORD *)this + 16); + if ( v4 != std::collate::do_hash ) + return v4(a2, a3); + result = 0; + if ( (unsigned int)a2 < a3 ) + { + do + { + v6 = *v3++; + result = v6 + __ROL4__(result, 7); + } + while ( a3 > (unsigned int)v3 ); + } + return result; +} + +//----- (00498FE0) -------------------------------------------------------- +int __fastcall std::collate::compare(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 8))(a1); +} + +//----- (00498FF0) -------------------------------------------------------- +int __stdcall std::collate::do_hash(unsigned __int16 *a1, unsigned int a2) +{ + unsigned __int16 *v2; // edx + int result; // eax + int v4; // ecx + + v2 = a1; + for ( result = 0; a2 > (unsigned int)v2; result = v4 + __ROL4__(result, 7) ) + v4 = *v2++; + return result; +} + +//----- (00499020) -------------------------------------------------------- +void *__thiscall std::collate::transform(void *this, int a2, int a3, int a4) +{ + (*(void (__thiscall **)(void *, int, int, int))(*(_DWORD *)a2 + 12))(this, a2, a3, a4); + return this; +} + +//----- (00499050) -------------------------------------------------------- +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11]( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int *a7) +{ + int v7; // eax + char v8; // al + unsigned int v9; // eax + unsigned int v10; // edx + unsigned int v11; // eax + _DWORD *v12; // ebx + unsigned int v13; // eax + unsigned int v14; // edx + unsigned int v15; // eax + int v16; // eax + int v17; // eax + _DWORD *v18; // ecx + unsigned int v19; // eax + unsigned int v20; // edx + unsigned int v21; // eax + int *v22; // eax + bool v24; // al + bool v25; // zf + _DWORD *v26; // eax + char *v27; // eax + char *v28; // eax + unsigned int v29; // edx + _BYTE *v30; // eax + int v31; // eax + _DWORD *v32; // ecx + unsigned int v33; // eax + unsigned int v34; // edx + unsigned int v35; // eax + char *v36; // eax + size_t v37; // edx + size_t v38; // edx + int v39; // edx + char *v40; // eax + char *v41; // eax + _DWORD *v42; // eax + int v43; // eax + bool v44; // bl + bool v45; // zf + _DWORD *v46; // eax + bool v47; // zf + _DWORD *v48; // eax + bool v49; // zf + _DWORD *v50; // eax + bool v51; // dl + bool v52; // zf + _DWORD *v53; // eax + int v54; // eax + bool v55; // zf + char v56; // bl + _DWORD *v57; // eax + int v58; // eax + bool v59; // zf + char v60; // dl + _DWORD *v61; // eax + char v62; // bl + int v63; // eax + bool v64; // zf + _DWORD *v65; // eax + char v66; // bl + int v67; // eax + bool v68; // zf + _DWORD *v69; // eax + bool v70; // zf + char v71; // al + _DWORD *v72; // eax + bool v73; // zf + _DWORD *v74; // eax + bool v75; // cl + char v76; // bl + int v77; // eax + bool v78; // dl + bool v79; // zf + _DWORD *v80; // eax + int v81; // eax + bool v82; // bl + bool v83; // zf + _DWORD *v84; // eax + int v85; // eax + char v86; // dl + bool v87; // zf + _DWORD *v88; // eax + int v89; // eax + bool v90; // dl + bool v91; // zf + _DWORD *v92; // eax + unsigned int v93; // [esp+8h] [ebp-B0h] + std::locale::_Impl *v94; // [esp+18h] [ebp-A0h] + size_t MaxCount; // [esp+1Ch] [ebp-9Ch] + int Buf; // [esp+20h] [ebp-98h] + void *Bufa; // [esp+20h] [ebp-98h] + bool v98; // [esp+26h] [ebp-92h] + char v99; // [esp+27h] [ebp-91h] + unsigned int v100; // [esp+28h] [ebp-90h] + char v101; // [esp+2Ch] [ebp-8Ch] + char v102; // [esp+2Ch] [ebp-8Ch] + int v103; // [esp+30h] [ebp-88h] + char v104; // [esp+30h] [ebp-88h] + char v105; // [esp+34h] [ebp-84h] + int v106; // [esp+34h] [ebp-84h] + size_t v107; // [esp+34h] [ebp-84h] + char v108; // [esp+38h] [ebp-80h] + unsigned int v109; // [esp+38h] [ebp-80h] + _DWORD *v110; // [esp+3Ch] [ebp-7Ch] + char v111; // [esp+40h] [ebp-78h] + bool v112; // [esp+40h] [ebp-78h] + int *v113; // [esp+44h] [ebp-74h] + unsigned int v114; // [esp+44h] [ebp-74h] + char v115; // [esp+48h] [ebp-70h] + bool v116; // [esp+48h] [ebp-70h] + char v117; // [esp+48h] [ebp-70h] + char v118; // [esp+48h] [ebp-70h] + char v119; // [esp+48h] [ebp-70h] + char v120; // [esp+48h] [ebp-70h] + _DWORD *v121; // [esp+4Ch] [ebp-6Ch] + bool v122; // [esp+50h] [ebp-68h] + int v123; // [esp+54h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+58h] [ebp-60h] + bool lpuexcpta; // [esp+58h] [ebp-60h] + char lpuexcptb; // [esp+58h] [ebp-60h] + char lpuexcptc; // [esp+58h] [ebp-60h] + struct _Unwind_Exception *lpuexcptd; // [esp+58h] [ebp-60h] + char lpuexcpte; // [esp+58h] [ebp-60h] + void *Block; // [esp+98h] [ebp-20h] BYREF + size_t v131; // [esp+9Ch] [ebp-1Ch] + int v132[5]; // [esp+A0h] [ebp-18h] BYREF + + v121 = a1; + v110 = a3; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v113 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)lpuexcpt); + v123 = *v113; + if ( !*v113 ) + { + v42 = operator new(0x68u); + v42[1] = 0; + *v42 = &off_5605B0; + v42[2] = 0; + v42[3] = 0; + *((_BYTE *)v42 + 16) = 0; + v42[5] = 0; + v42[6] = 0; + v42[7] = 0; + v42[8] = 0; + *((_WORD *)v42 + 18) = 0; + *((_BYTE *)v42 + 100) = 0; + v94 = (std::locale::_Impl *)v42; + std::__numpunct_cache::_M_cache((int)v42, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v94, lpuexcpt, v93); + v123 = *v113; + } + v114 = 8; + v103 = *(_DWORD *)(a5 + 12) & 0x4A; + if ( v103 != 64 ) + { + v7 = 10; + if ( v103 == 8 ) + v7 = 16; + v114 = v7; + } + lpuexcpta = a2 == -1; + if ( lpuexcpta && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v81 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v82 = lpuexcpta && a1 != 0; + v83 = v81 == -1; + if ( v81 != -1 ) + v82 = 0; + v84 = 0; + if ( !v83 ) + v84 = a1; + v105 = v82; + v121 = v84; + } + else + { + v105 = 0; + } + } + else + { + v105 = a2 == -1; + } + v122 = a4 == -1; + if ( v122 && a3 != 0 ) + { + if ( a3[2] >= a3[3] ) + { + v77 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v78 = v122 && a3 != 0; + v79 = v77 == -1; + if ( v77 != -1 ) + v78 = 0; + v80 = 0; + if ( !v79 ) + v80 = a3; + v101 = v78; + v110 = v80; + } + else + { + v101 = 0; + } + } + else + { + v101 = a4 == -1; + } + if ( v105 != v101 ) + { + if ( v121 && a2 == -1 ) + { + v41 = (char *)v121[2]; + if ( (unsigned int)v41 >= v121[3] ) + { + v85 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v86 = -1; + v87 = v85 == -1; + if ( v85 != -1 ) + v86 = v85; + v88 = 0; + if ( !v87 ) + v88 = v121; + lpuexcptb = v86; + v121 = v88; + } + else + { + lpuexcptb = *v41; + } + } + else + { + lpuexcptb = a2; + } + v8 = *(_BYTE *)(v123 + 16); + v98 = *(_BYTE *)(v123 + 74) == (unsigned __int8)lpuexcptb; + if ( *(_BYTE *)(v123 + 74) == lpuexcptb || *(_BYTE *)(v123 + 75) == lpuexcptb ) + { + if ( (!v8 || *(_BYTE *)(v123 + 37) != lpuexcptb) && *(_BYTE *)(v123 + 36) != lpuexcptb ) + { + v9 = v121[2]; + v10 = v121[3]; + if ( v9 >= v10 ) + { + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v11 = v121[2]; + v10 = v121[3]; + } + else + { + v11 = v9 + 1; + v121[2] = v11; + } + v111 = 0; + if ( v11 >= v10 ) + { + v52 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121) == -1; + v53 = 0; + if ( !v52 ) + v53 = v121; + v111 = v52; + v121 = v53; + } + if ( v122 && v110 != 0 ) + { + if ( v110[2] >= v110[3] ) + { + v89 = (*(int (__fastcall **)(_DWORD *))(*v110 + 36))(v110); + v90 = v122 && v110 != 0; + v91 = v89 == -1; + if ( v89 != -1 ) + v90 = 0; + v92 = 0; + if ( !v91 ) + v92 = v110; + v115 = v90; + v110 = v92; + } + else + { + v115 = 0; + } + } + else + { + v115 = a4 == -1; + } + if ( v111 == v115 ) + { + v104 = 1; + v106 = 0; + v112 = 0; + goto LABEL_43; + } + lpuexcptb = -1; + if ( v121 ) + { + v40 = (char *)v121[2]; + if ( (unsigned int)v40 >= v121[3] ) + { + v62 = -1; + v63 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v64 = v63 == -1; + if ( v63 != -1 ) + v62 = v63; + v65 = 0; + if ( !v64 ) + v65 = v121; + lpuexcptb = v62; + v121 = v65; + } + else + { + lpuexcptb = *v40; + } + } + v8 = *(_BYTE *)(v123 + 16); + } + } + else + { + v98 = 0; + } + v106 = 0; + v112 = 0; + while ( 1 ) + { + if ( v8 && *(_BYTE *)(v123 + 37) == lpuexcptb || *(_BYTE *)(v123 + 36) == lpuexcptb ) + { +LABEL_111: + v104 = 0; + goto LABEL_43; + } + if ( *(_BYTE *)(v123 + 78) != lpuexcptb ) + break; + v24 = v114 == 10 || !v112; + if ( !v24 ) + goto LABEL_33; + v112 = v103 == 0 || v114 == 8; + if ( !v112 ) + { + ++v106; + v112 = v24; + goto LABEL_37; + } + v12 = v121; + v114 = 8; + v106 = 0; + v13 = v121[2]; + v14 = v121[3]; + if ( v13 < v14 ) + { +LABEL_38: + v15 = v13 + 1; + v108 = 0; + v12[2] = v15; + if ( v15 < v14 ) + goto LABEL_39; + goto LABEL_76; + } +LABEL_75: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v108 = 0; + if ( v121[2] < v121[3] ) + { +LABEL_39: + v116 = v122 && v110 != 0; + if ( !v116 ) + goto LABEL_40; + goto LABEL_79; + } +LABEL_76: + v25 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121) == -1; + v26 = 0; + if ( !v25 ) + v26 = v121; + v108 = v25; + v121 = v26; + v116 = v122 && v110 != 0; + if ( !v116 ) + { +LABEL_40: + v117 = a4 == -1; + goto LABEL_41; + } +LABEL_79: + if ( v110[2] >= v110[3] ) + { + v43 = (*(int (__fastcall **)(_DWORD *))(*v110 + 36))(v110); + v44 = v116; + v45 = v43 == -1; + if ( v43 != -1 ) + v44 = 0; + v46 = 0; + if ( !v45 ) + v46 = v110; + v117 = v44; + v110 = v46; +LABEL_41: + if ( v108 == v117 ) + goto LABEL_42; + goto LABEL_81; + } + if ( !v108 ) + { +LABEL_42: + v104 = 1; + goto LABEL_43; + } +LABEL_81: + lpuexcptb = -1; + if ( v121 ) + { + v27 = (char *)v121[2]; + if ( (unsigned int)v27 >= v121[3] ) + { + v66 = -1; + v67 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v68 = v67 == -1; + if ( v67 != -1 ) + v66 = v67; + v69 = 0; + if ( !v68 ) + v69 = v121; + lpuexcptb = v66; + v121 = v69; + } + else + { + lpuexcptb = *v27; + } + } + if ( !v112 ) + { + v104 = 0; + goto LABEL_43; + } + v8 = *(_BYTE *)(v123 + 16); + } + if ( !v112 ) + goto LABEL_111; +LABEL_33: + if ( *(_BYTE *)(v123 + 76) != lpuexcptb && *(_BYTE *)(v123 + 77) != lpuexcptb ) + { + v104 = 0; + v112 = 1; + goto LABEL_43; + } + if ( v103 != 0 && v114 != 16 ) + { + v104 = 0; + MaxCount = v114; + Buf = v114; + v112 = 1; + goto LABEL_46; + } + v106 = 0; + v112 = 0; + v114 = 16; +LABEL_37: + v12 = v121; + v13 = v121[2]; + v14 = v121[3]; + if ( v13 < v14 ) + goto LABEL_38; + goto LABEL_75; + } + v98 = 0; + v104 = 1; + lpuexcptb = 0; + v106 = 0; + v112 = 0; +LABEL_43: + v16 = 22; + if ( v114 != 16 ) + v16 = v114; + MaxCount = v16; + Buf = v16; +LABEL_46: + v131 = 0; + Block = v132; + LOBYTE(v132[0]) = 0; + if ( *(_BYTE *)(v123 + 16) ) + std::string::reserve(&Block, 0x20u); + v100 = 0xFFFFFFFF / v114; + v99 = *(_BYTE *)(v123 + 100); + if ( !v99 ) + { + if ( v104 ) + { + v76 = v104; + v102 = 0; + v104 = 0; + lpuexcptd = (struct _Unwind_Exception *)v131; + v22 = (int *)Block; + v99 = v76; + v109 = 0; + goto LABEL_63; + } + v102 = 0; + v109 = 0; + while ( Buf > 10 ) + { + if ( (unsigned __int8)(lpuexcptb - 48) <= 9u ) + goto LABEL_54; + if ( (unsigned __int8)(lpuexcptb - 97) > 5u ) + { + if ( (unsigned __int8)(lpuexcptb - 65) > 5u ) + goto LABEL_110; + v17 = lpuexcptb - 55; + goto LABEL_55; + } + v17 = lpuexcptb - 87; + if ( v100 < v109 ) + { +LABEL_56: + v18 = v121; + v102 = 1; + v19 = v121[2]; + v20 = v121[3]; + if ( v19 < v20 ) + goto LABEL_57; + goto LABEL_90; + } +LABEL_89: + v102 |= ~v17 < v114 * v109; + v18 = v121; + v109 = v114 * v109 + v17; + v20 = v121[3]; + v19 = v121[2]; + ++v106; + if ( v19 < v20 ) + { +LABEL_57: + v21 = v19 + 1; + v18[2] = v21; + goto LABEL_58; + } +LABEL_90: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v21 = v121[2]; + v20 = v121[3]; +LABEL_58: + v118 = 0; + if ( v21 >= v20 ) + { + v47 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121) == -1; + v48 = 0; + if ( !v47 ) + v48 = v121; + v118 = v47; + v121 = v48; + } + if ( v122 && v110 != 0 ) + { + if ( v110[2] >= v110[3] ) + { + v49 = (*(int (__fastcall **)(_DWORD *))(*v110 + 36))(v110) == -1; + v50 = 0; + if ( !v49 ) + v50 = v110; + v51 = v122 && v110 != 0; + v110 = v50; + if ( !v49 ) + v51 = 0; + lpuexcptc = v51; + } + else + { + lpuexcptc = 0; + } + } + else + { + lpuexcptc = a4 == -1; + } + if ( lpuexcptc == v118 ) + { + v99 = 1; + lpuexcptd = (struct _Unwind_Exception *)v131; + v22 = (int *)Block; + goto LABEL_63; + } + if ( v121 ) + { + v28 = (char *)v121[2]; + if ( (unsigned int)v28 >= v121[3] ) + { + v54 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v55 = v54 == -1; + v56 = -1; + if ( v54 != -1 ) + v56 = v54; + v57 = 0; + if ( !v55 ) + v57 = v121; + lpuexcptb = v56; + v121 = v57; + } + else + { + lpuexcptb = *v28; + } + } + else + { + lpuexcptb = -1; + } + } + if ( lpuexcptb <= 47 || (char)(Buf + 48) <= lpuexcptb ) + goto LABEL_110; +LABEL_54: + v17 = lpuexcptb - 48; +LABEL_55: + if ( v100 < v109 ) + goto LABEL_56; + goto LABEL_89; + } + if ( v104 ) + { + v109 = 0; + v102 = 0; + lpuexcptd = (struct _Unwind_Exception *)v131; + v22 = (int *)Block; + v99 = v104; + v104 = 0; + goto LABEL_63; + } + v102 = 0; + v109 = 0; + Bufa = (void *)(v123 + 78); + while ( !*(_BYTE *)(v123 + 16) || *(_BYTE *)(v123 + 37) != lpuexcptb ) + { + if ( lpuexcptb == *(_BYTE *)(v123 + 36) || (v30 = memchr(Bufa, lpuexcptb, MaxCount)) == 0 ) + { +LABEL_110: + v99 = 0; + lpuexcptd = (struct _Unwind_Exception *)v131; + v22 = (int *)Block; + goto LABEL_63; + } + v31 = v30 - (_BYTE *)Bufa; + if ( v31 > 15 ) + v31 -= 6; + if ( v100 >= v109 ) + { + v102 |= ~v31 < v114 * v109; + ++v106; + v109 = v114 * v109 + v31; + goto LABEL_122; + } + v32 = v121; + v102 = v99; + v34 = v121[3]; + v33 = v121[2]; + if ( v33 < v34 ) + { +LABEL_123: + v35 = v33 + 1; + v32[2] = v35; + goto LABEL_124; + } +LABEL_130: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v35 = v121[2]; + v34 = v121[3]; +LABEL_124: + v119 = 0; + if ( v34 <= v35 ) + { + v70 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121) == -1; + v71 = 0; + if ( v70 ) + v71 = v99; + v119 = v71; + v72 = 0; + if ( !v70 ) + v72 = v121; + v121 = v72; + } + if ( v122 && v110 != 0 ) + { + if ( v110[2] >= v110[3] ) + { + v73 = (*(int (__fastcall **)(_DWORD *))(*v110 + 36))(v110) == -1; + v74 = 0; + if ( !v73 ) + v74 = v110; + v75 = v122 && v110 != 0; + v110 = v74; + if ( !v73 ) + v75 = 0; + lpuexcpte = v75; + } + else + { + lpuexcpte = 0; + } + } + else + { + lpuexcpte = a4 == -1; + } + if ( lpuexcpte == v119 ) + { + lpuexcptd = (struct _Unwind_Exception *)v131; + v22 = (int *)Block; + goto LABEL_63; + } + if ( v121 ) + { + v36 = (char *)v121[2]; + if ( (unsigned int)v36 >= v121[3] ) + { + v58 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v59 = v58 == -1; + v60 = -1; + if ( v58 != -1 ) + v60 = v58; + v61 = 0; + if ( !v59 ) + v61 = v121; + lpuexcptb = v60; + v121 = v61; + } + else + { + lpuexcptb = *v36; + } + } + else + { + lpuexcptb = -1; + } + } + v22 = (int *)Block; + lpuexcptd = (struct _Unwind_Exception *)v131; + if ( v106 ) + { + v120 = v106; + v37 = 15; + if ( Block != v132 ) + v37 = v132[0]; + v107 = v131 + 1; + if ( v131 + 1 > v37 ) + { + std::string::_M_mutate((int)&Block, v131, 0, 0, 1u); + v22 = (int *)Block; + } + v38 = v107; + v106 = 0; + *((_BYTE *)lpuexcptd + (_DWORD)v22) = v120; + v131 = v38; + *((_BYTE *)Block + v38) = 0; +LABEL_122: + v32 = v121; + v33 = v121[2]; + v34 = v121[3]; + if ( v33 < v34 ) + goto LABEL_123; + goto LABEL_130; + } + v99 = 0; + v104 = *(_BYTE *)(v123 + 16); +LABEL_63: + if ( lpuexcptd ) + { + v29 = 15; + if ( v22 != v132 ) + v29 = v132[0]; + if ( (unsigned int)lpuexcptd + 1 > v29 ) + { + std::string::_M_mutate((int)&Block, (size_t)lpuexcptd, 0, 0, 1u); + v22 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v22) = v106; + v131 = (size_t)lpuexcptd + 1; + *((_BYTE *)lpuexcptd + (_DWORD)Block + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v123 + 8), *(_DWORD *)(v123 + 12), (int)&Block) ) + *a6 = 4; + v22 = (int *)Block; + if ( v112 || v131 | v106 ) + goto LABEL_102; +LABEL_66: + *a7 = 0; + *a6 = 4; + } + else + { + if ( !v106 && !v112 ) + goto LABEL_66; +LABEL_102: + if ( v104 ) + goto LABEL_66; + if ( v102 ) + { + *a7 = -1; + *a6 = 4; + } + else + { + v39 = -v109; + if ( !v98 ) + v39 = v109; + *a7 = v39; + } + } + if ( v99 ) + *a6 |= 2u; + if ( v22 != v132 ) + operator delete(v22); + return v121; +} +// 499B57: variable 'v93' is possibly undefined +// 53F728: using guessed type signed __int32 std::numpunct::id; +// 5605B0: using guessed type int (*off_5605B0)(); + +//----- (0049A080) -------------------------------------------------------- +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11]( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int *a7) +{ + int v7; // eax + char v8; // al + unsigned int v9; // eax + unsigned int v10; // edx + unsigned int v11; // eax + _DWORD *v12; // ebx + unsigned int v13; // eax + unsigned int v14; // edx + unsigned int v15; // eax + int v16; // eax + int v17; // eax + _DWORD *v18; // ecx + unsigned int v19; // eax + unsigned int v20; // edx + unsigned int v21; // eax + int *v22; // eax + bool v24; // al + bool v25; // zf + _DWORD *v26; // eax + char *v27; // eax + char *v28; // eax + unsigned int v29; // edx + _BYTE *v30; // eax + int v31; // eax + _DWORD *v32; // ecx + unsigned int v33; // eax + unsigned int v34; // edx + unsigned int v35; // eax + char *v36; // eax + size_t v37; // edx + size_t v38; // edx + int v39; // edx + char *v40; // eax + char *v41; // eax + _DWORD *v42; // eax + int v43; // eax + bool v44; // dl + bool v45; // zf + _DWORD *v46; // eax + bool v47; // zf + _DWORD *v48; // eax + bool v49; // zf + _DWORD *v50; // eax + bool v51; // cl + bool v52; // zf + _DWORD *v53; // eax + int v54; // eax + bool v55; // zf + char v56; // bl + _DWORD *v57; // eax + int v58; // eax + bool v59; // zf + char v60; // dl + _DWORD *v61; // eax + char v62; // bl + int v63; // eax + bool v64; // zf + _DWORD *v65; // eax + char v66; // bl + int v67; // eax + bool v68; // zf + _DWORD *v69; // eax + bool v70; // zf + char v71; // al + _DWORD *v72; // eax + bool v73; // zf + _DWORD *v74; // eax + bool v75; // cl + char v76; // bl + int v77; // eax + bool v78; // dl + bool v79; // zf + _DWORD *v80; // eax + int v81; // eax + bool v82; // bl + bool v83; // zf + _DWORD *v84; // eax + int v85; // eax + char v86; // dl + bool v87; // zf + _DWORD *v88; // eax + int v89; // eax + bool v90; // dl + bool v91; // zf + _DWORD *v92; // eax + unsigned int v93; // [esp+8h] [ebp-B0h] + std::locale::_Impl *v94; // [esp+10h] [ebp-A8h] + bool v95; // [esp+14h] [ebp-A4h] + size_t MaxCount; // [esp+18h] [ebp-A0h] + unsigned int v97; // [esp+1Ch] [ebp-9Ch] + int Buf; // [esp+20h] [ebp-98h] + void *Bufa; // [esp+20h] [ebp-98h] + char v100; // [esp+27h] [ebp-91h] + unsigned int v101; // [esp+28h] [ebp-90h] + char v102; // [esp+2Ch] [ebp-8Ch] + char v103; // [esp+2Ch] [ebp-8Ch] + int v104; // [esp+30h] [ebp-88h] + char v105; // [esp+30h] [ebp-88h] + char v106; // [esp+34h] [ebp-84h] + int v107; // [esp+34h] [ebp-84h] + size_t v108; // [esp+34h] [ebp-84h] + char v109; // [esp+38h] [ebp-80h] + unsigned int v110; // [esp+38h] [ebp-80h] + _DWORD *v111; // [esp+3Ch] [ebp-7Ch] + char v112; // [esp+40h] [ebp-78h] + bool v113; // [esp+40h] [ebp-78h] + int *v114; // [esp+44h] [ebp-74h] + unsigned int v115; // [esp+44h] [ebp-74h] + char v116; // [esp+48h] [ebp-70h] + bool v117; // [esp+48h] [ebp-70h] + char v118; // [esp+48h] [ebp-70h] + char v119; // [esp+48h] [ebp-70h] + char v120; // [esp+48h] [ebp-70h] + char v121; // [esp+48h] [ebp-70h] + _DWORD *v122; // [esp+4Ch] [ebp-6Ch] + bool v123; // [esp+50h] [ebp-68h] + int v124; // [esp+54h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+58h] [ebp-60h] + bool lpuexcpta; // [esp+58h] [ebp-60h] + char lpuexcptb; // [esp+58h] [ebp-60h] + char lpuexcptc; // [esp+58h] [ebp-60h] + struct _Unwind_Exception *lpuexcptd; // [esp+58h] [ebp-60h] + char lpuexcpte; // [esp+58h] [ebp-60h] + void *Block; // [esp+98h] [ebp-20h] BYREF + size_t v132; // [esp+9Ch] [ebp-1Ch] + int v133[5]; // [esp+A0h] [ebp-18h] BYREF + + v122 = a1; + v111 = a3; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v114 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)lpuexcpt); + v124 = *v114; + if ( !*v114 ) + { + v42 = operator new(0x68u); + v42[1] = 0; + *v42 = &off_5605B0; + v42[2] = 0; + v42[3] = 0; + *((_BYTE *)v42 + 16) = 0; + v42[5] = 0; + v42[6] = 0; + v42[7] = 0; + v42[8] = 0; + *((_WORD *)v42 + 18) = 0; + *((_BYTE *)v42 + 100) = 0; + v94 = (std::locale::_Impl *)v42; + std::__numpunct_cache::_M_cache((int)v42, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v94, lpuexcpt, v93); + v124 = *v114; + } + v115 = 8; + v104 = *(_DWORD *)(a5 + 12) & 0x4A; + if ( v104 != 64 ) + { + v7 = 10; + if ( v104 == 8 ) + v7 = 16; + v115 = v7; + } + lpuexcpta = a2 == -1; + if ( lpuexcpta && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v81 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v82 = lpuexcpta && a1 != 0; + v83 = v81 == -1; + if ( v81 != -1 ) + v82 = 0; + v84 = 0; + if ( !v83 ) + v84 = a1; + v106 = v82; + v122 = v84; + } + else + { + v106 = 0; + } + } + else + { + v106 = a2 == -1; + } + v123 = a4 == -1; + if ( v123 && a3 != 0 ) + { + if ( a3[2] >= a3[3] ) + { + v77 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v78 = v123 && a3 != 0; + v79 = v77 == -1; + if ( v77 != -1 ) + v78 = 0; + v80 = 0; + if ( !v79 ) + v80 = a3; + v102 = v78; + v111 = v80; + } + else + { + v102 = 0; + } + } + else + { + v102 = a4 == -1; + } + if ( v106 != v102 ) + { + if ( v122 && a2 == -1 ) + { + v41 = (char *)v122[2]; + if ( (unsigned int)v41 >= v122[3] ) + { + v85 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + v86 = -1; + v87 = v85 == -1; + if ( v85 != -1 ) + v86 = v85; + v88 = 0; + if ( !v87 ) + v88 = v122; + lpuexcptb = v86; + v122 = v88; + } + else + { + lpuexcptb = *v41; + } + } + else + { + lpuexcptb = a2; + } + v8 = *(_BYTE *)(v124 + 16); + v95 = *(_BYTE *)(v124 + 74) == (unsigned __int8)lpuexcptb; + if ( *(_BYTE *)(v124 + 74) == lpuexcptb || *(_BYTE *)(v124 + 75) == lpuexcptb ) + { + if ( (!v8 || *(_BYTE *)(v124 + 37) != lpuexcptb) && *(_BYTE *)(v124 + 36) != lpuexcptb ) + { + v9 = v122[2]; + v10 = v122[3]; + if ( v9 >= v10 ) + { + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v11 = v122[2]; + v10 = v122[3]; + } + else + { + v11 = v9 + 1; + v122[2] = v11; + } + v112 = 0; + if ( v11 >= v10 ) + { + v52 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122) == -1; + v53 = 0; + if ( !v52 ) + v53 = v122; + v112 = v52; + v122 = v53; + } + if ( v123 && v111 != 0 ) + { + if ( v111[2] >= v111[3] ) + { + v89 = (*(int (__fastcall **)(_DWORD *))(*v111 + 36))(v111); + v90 = v123 && v111 != 0; + v91 = v89 == -1; + if ( v89 != -1 ) + v90 = 0; + v92 = 0; + if ( !v91 ) + v92 = v111; + v116 = v90; + v111 = v92; + } + else + { + v116 = 0; + } + } + else + { + v116 = a4 == -1; + } + if ( v112 == v116 ) + { + v105 = 1; + v107 = 0; + v113 = 0; + goto LABEL_43; + } + lpuexcptb = -1; + if ( v122 ) + { + v40 = (char *)v122[2]; + if ( (unsigned int)v40 >= v122[3] ) + { + v62 = -1; + v63 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + v64 = v63 == -1; + if ( v63 != -1 ) + v62 = v63; + v65 = 0; + if ( !v64 ) + v65 = v122; + lpuexcptb = v62; + v122 = v65; + } + else + { + lpuexcptb = *v40; + } + } + v8 = *(_BYTE *)(v124 + 16); + } + } + else + { + v95 = 0; + } + v107 = 0; + v113 = 0; + while ( 1 ) + { + if ( v8 && *(_BYTE *)(v124 + 37) == lpuexcptb || *(_BYTE *)(v124 + 36) == lpuexcptb ) + { +LABEL_111: + v105 = 0; + goto LABEL_43; + } + if ( *(_BYTE *)(v124 + 78) != lpuexcptb ) + break; + v24 = v115 == 10 || !v113; + if ( !v24 ) + goto LABEL_33; + v113 = v104 == 0 || v115 == 8; + if ( !v113 ) + { + ++v107; + v113 = v24; + goto LABEL_37; + } + v12 = v122; + v115 = 8; + v107 = 0; + v13 = v122[2]; + v14 = v122[3]; + if ( v13 < v14 ) + { +LABEL_38: + v15 = v13 + 1; + v109 = 0; + v12[2] = v15; + if ( v15 < v14 ) + goto LABEL_39; + goto LABEL_76; + } +LABEL_75: + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v109 = 0; + if ( v122[2] < v122[3] ) + { +LABEL_39: + v117 = v123 && v111 != 0; + if ( !v117 ) + goto LABEL_40; + goto LABEL_79; + } +LABEL_76: + v25 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122) == -1; + v26 = 0; + if ( !v25 ) + v26 = v122; + v109 = v25; + v122 = v26; + v117 = v123 && v111 != 0; + if ( !v117 ) + { +LABEL_40: + v118 = a4 == -1; + goto LABEL_41; + } +LABEL_79: + if ( v111[2] >= v111[3] ) + { + v43 = (*(int (__fastcall **)(_DWORD *))(*v111 + 36))(v111); + v44 = v117; + v45 = v43 == -1; + if ( v43 != -1 ) + v44 = 0; + v46 = 0; + if ( !v45 ) + v46 = v111; + v118 = v44; + v111 = v46; +LABEL_41: + if ( v109 == v118 ) + goto LABEL_42; + goto LABEL_81; + } + if ( !v109 ) + { +LABEL_42: + v105 = 1; + goto LABEL_43; + } +LABEL_81: + lpuexcptb = -1; + if ( v122 ) + { + v27 = (char *)v122[2]; + if ( (unsigned int)v27 >= v122[3] ) + { + v66 = -1; + v67 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + v68 = v67 == -1; + if ( v67 != -1 ) + v66 = v67; + v69 = 0; + if ( !v68 ) + v69 = v122; + lpuexcptb = v66; + v122 = v69; + } + else + { + lpuexcptb = *v27; + } + } + if ( !v113 ) + { + v105 = 0; + goto LABEL_43; + } + v8 = *(_BYTE *)(v124 + 16); + } + if ( !v113 ) + goto LABEL_111; +LABEL_33: + if ( *(_BYTE *)(v124 + 76) != lpuexcptb && *(_BYTE *)(v124 + 77) != lpuexcptb ) + { + v105 = 0; + v113 = 1; + goto LABEL_43; + } + if ( v104 != 0 && v115 != 16 ) + { + v105 = 0; + MaxCount = v115; + Buf = v115; + v113 = 1; + goto LABEL_46; + } + v107 = 0; + v113 = 0; + v115 = 16; +LABEL_37: + v12 = v122; + v13 = v122[2]; + v14 = v122[3]; + if ( v13 < v14 ) + goto LABEL_38; + goto LABEL_75; + } + v95 = 0; + v105 = 1; + lpuexcptb = 0; + v107 = 0; + v113 = 0; +LABEL_43: + v16 = 22; + if ( v115 != 16 ) + v16 = v115; + MaxCount = v16; + Buf = v16; +LABEL_46: + v132 = 0; + Block = v133; + LOBYTE(v133[0]) = 0; + if ( *(_BYTE *)(v124 + 16) ) + std::string::reserve(&Block, 0x20u); + v97 = v95 + 0x7FFFFFFF; + v101 = v97 / v115; + v100 = *(_BYTE *)(v124 + 100); + if ( !v100 ) + { + if ( v105 ) + { + v76 = v105; + v103 = 0; + v105 = 0; + lpuexcptd = (struct _Unwind_Exception *)v132; + v22 = (int *)Block; + v100 = v76; + v110 = 0; + goto LABEL_63; + } + v103 = 0; + v110 = 0; + while ( Buf > 10 ) + { + if ( (unsigned __int8)(lpuexcptb - 48) <= 9u ) + goto LABEL_54; + if ( (unsigned __int8)(lpuexcptb - 97) > 5u ) + { + if ( (unsigned __int8)(lpuexcptb - 65) > 5u ) + goto LABEL_110; + v17 = lpuexcptb - 55; + goto LABEL_55; + } + v17 = lpuexcptb - 87; + if ( v101 < v110 ) + { +LABEL_56: + v18 = v122; + v103 = 1; + v19 = v122[2]; + v20 = v122[3]; + if ( v19 < v20 ) + goto LABEL_57; + goto LABEL_90; + } +LABEL_89: + v103 |= v97 - v17 < v115 * v110; + v18 = v122; + v110 = v115 * v110 + v17; + v20 = v122[3]; + v19 = v122[2]; + ++v107; + if ( v19 < v20 ) + { +LABEL_57: + v21 = v19 + 1; + v18[2] = v21; + goto LABEL_58; + } +LABEL_90: + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v21 = v122[2]; + v20 = v122[3]; +LABEL_58: + v119 = 0; + if ( v21 >= v20 ) + { + v47 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122) == -1; + v48 = 0; + if ( !v47 ) + v48 = v122; + v119 = v47; + v122 = v48; + } + if ( v123 && v111 != 0 ) + { + if ( v111[2] >= v111[3] ) + { + v49 = (*(int (__fastcall **)(_DWORD *))(*v111 + 36))(v111) == -1; + v50 = 0; + if ( !v49 ) + v50 = v111; + v51 = v123 && v111 != 0; + v111 = v50; + if ( !v49 ) + v51 = 0; + lpuexcptc = v51; + } + else + { + lpuexcptc = 0; + } + } + else + { + lpuexcptc = a4 == -1; + } + if ( lpuexcptc == v119 ) + { + v100 = 1; + lpuexcptd = (struct _Unwind_Exception *)v132; + v22 = (int *)Block; + goto LABEL_63; + } + if ( v122 ) + { + v28 = (char *)v122[2]; + if ( (unsigned int)v28 >= v122[3] ) + { + v54 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + v55 = v54 == -1; + v56 = -1; + if ( v54 != -1 ) + v56 = v54; + v57 = 0; + if ( !v55 ) + v57 = v122; + lpuexcptb = v56; + v122 = v57; + } + else + { + lpuexcptb = *v28; + } + } + else + { + lpuexcptb = -1; + } + } + if ( lpuexcptb <= 47 || (char)(Buf + 48) <= lpuexcptb ) + goto LABEL_110; +LABEL_54: + v17 = lpuexcptb - 48; +LABEL_55: + if ( v101 < v110 ) + goto LABEL_56; + goto LABEL_89; + } + if ( v105 ) + { + v110 = 0; + v103 = 0; + lpuexcptd = (struct _Unwind_Exception *)v132; + v22 = (int *)Block; + v100 = v105; + v105 = 0; + goto LABEL_63; + } + v103 = 0; + v110 = 0; + Bufa = (void *)(v124 + 78); + while ( !*(_BYTE *)(v124 + 16) || *(_BYTE *)(v124 + 37) != lpuexcptb ) + { + if ( lpuexcptb == *(_BYTE *)(v124 + 36) || (v30 = memchr(Bufa, lpuexcptb, MaxCount)) == 0 ) + { +LABEL_110: + v100 = 0; + lpuexcptd = (struct _Unwind_Exception *)v132; + v22 = (int *)Block; + goto LABEL_63; + } + v31 = v30 - (_BYTE *)Bufa; + if ( v31 > 15 ) + v31 -= 6; + if ( v101 >= v110 ) + { + v103 |= v97 - v31 < v115 * v110; + ++v107; + v110 = v115 * v110 + v31; + goto LABEL_122; + } + v32 = v122; + v103 = v100; + v34 = v122[3]; + v33 = v122[2]; + if ( v33 < v34 ) + { +LABEL_123: + v35 = v33 + 1; + v32[2] = v35; + goto LABEL_124; + } +LABEL_130: + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v35 = v122[2]; + v34 = v122[3]; +LABEL_124: + v120 = 0; + if ( v34 <= v35 ) + { + v70 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122) == -1; + v71 = 0; + if ( v70 ) + v71 = v100; + v120 = v71; + v72 = 0; + if ( !v70 ) + v72 = v122; + v122 = v72; + } + if ( v123 && v111 != 0 ) + { + if ( v111[2] >= v111[3] ) + { + v73 = (*(int (__fastcall **)(_DWORD *))(*v111 + 36))(v111) == -1; + v74 = 0; + if ( !v73 ) + v74 = v111; + v75 = v123 && v111 != 0; + v111 = v74; + if ( !v73 ) + v75 = 0; + lpuexcpte = v75; + } + else + { + lpuexcpte = 0; + } + } + else + { + lpuexcpte = a4 == -1; + } + if ( lpuexcpte == v120 ) + { + lpuexcptd = (struct _Unwind_Exception *)v132; + v22 = (int *)Block; + goto LABEL_63; + } + if ( v122 ) + { + v36 = (char *)v122[2]; + if ( (unsigned int)v36 >= v122[3] ) + { + v58 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + v59 = v58 == -1; + v60 = -1; + if ( v58 != -1 ) + v60 = v58; + v61 = 0; + if ( !v59 ) + v61 = v122; + lpuexcptb = v60; + v122 = v61; + } + else + { + lpuexcptb = *v36; + } + } + else + { + lpuexcptb = -1; + } + } + v22 = (int *)Block; + lpuexcptd = (struct _Unwind_Exception *)v132; + if ( v107 ) + { + v121 = v107; + v37 = 15; + if ( Block != v133 ) + v37 = v133[0]; + v108 = v132 + 1; + if ( v132 + 1 > v37 ) + { + std::string::_M_mutate((int)&Block, v132, 0, 0, 1u); + v22 = (int *)Block; + } + v38 = v108; + v107 = 0; + *((_BYTE *)lpuexcptd + (_DWORD)v22) = v121; + v132 = v38; + *((_BYTE *)Block + v38) = 0; +LABEL_122: + v32 = v122; + v33 = v122[2]; + v34 = v122[3]; + if ( v33 < v34 ) + goto LABEL_123; + goto LABEL_130; + } + v100 = 0; + v105 = *(_BYTE *)(v124 + 16); +LABEL_63: + if ( lpuexcptd ) + { + v29 = 15; + if ( v22 != v133 ) + v29 = v133[0]; + if ( (unsigned int)lpuexcptd + 1 > v29 ) + { + std::string::_M_mutate((int)&Block, (size_t)lpuexcptd, 0, 0, 1u); + v22 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v22) = v107; + v132 = (size_t)lpuexcptd + 1; + *((_BYTE *)lpuexcptd + (_DWORD)Block + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v124 + 8), *(_DWORD *)(v124 + 12), (int)&Block) ) + *a6 = 4; + v22 = (int *)Block; + if ( v113 || v132 | v107 ) + goto LABEL_102; +LABEL_66: + *a7 = 0; + *a6 = 4; + } + else + { + if ( !v107 && !v113 ) + goto LABEL_66; +LABEL_102: + if ( v105 ) + goto LABEL_66; + if ( v103 ) + { + *a7 = v95 + 0x7FFFFFFF; + *a6 = 4; + } + else + { + v39 = -v110; + if ( !v95 ) + v39 = v110; + *a7 = v39; + } + } + if ( v100 ) + *a6 |= 2u; + if ( v22 != v133 ) + operator delete(v22); + return v122; +} +// 49AB95: variable 'v93' is possibly undefined +// 53F728: using guessed type signed __int32 std::numpunct::id; +// 5605B0: using guessed type int (*off_5605B0)(); + +//----- (0049B0C0) -------------------------------------------------------- +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11]( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int *a7) +{ + int v7; // eax + char v8; // al + unsigned int v9; // eax + unsigned int v10; // edx + unsigned int v11; // eax + _DWORD *v12; // ebx + unsigned int v13; // eax + unsigned int v14; // edx + unsigned int v15; // eax + int v16; // eax + int v17; // eax + _DWORD *v18; // ecx + unsigned int v19; // eax + unsigned int v20; // edx + unsigned int v21; // eax + int *v22; // eax + bool v24; // al + bool v25; // zf + _DWORD *v26; // eax + char *v27; // eax + char *v28; // eax + unsigned int v29; // edx + _BYTE *v30; // eax + int v31; // eax + _DWORD *v32; // ecx + unsigned int v33; // eax + unsigned int v34; // edx + unsigned int v35; // eax + char *v36; // eax + size_t v37; // edx + size_t v38; // edx + int v39; // edx + char *v40; // eax + char *v41; // eax + _DWORD *v42; // eax + int v43; // eax + bool v44; // bl + bool v45; // zf + _DWORD *v46; // eax + bool v47; // zf + _DWORD *v48; // eax + bool v49; // zf + _DWORD *v50; // eax + bool v51; // dl + bool v52; // zf + _DWORD *v53; // eax + int v54; // eax + bool v55; // zf + char v56; // bl + _DWORD *v57; // eax + int v58; // eax + bool v59; // zf + char v60; // dl + _DWORD *v61; // eax + char v62; // bl + int v63; // eax + bool v64; // zf + _DWORD *v65; // eax + char v66; // bl + int v67; // eax + bool v68; // zf + _DWORD *v69; // eax + bool v70; // zf + char v71; // al + _DWORD *v72; // eax + bool v73; // zf + _DWORD *v74; // eax + bool v75; // cl + char v76; // bl + int v77; // eax + bool v78; // dl + bool v79; // zf + _DWORD *v80; // eax + int v81; // eax + bool v82; // bl + bool v83; // zf + _DWORD *v84; // eax + int v85; // eax + char v86; // dl + bool v87; // zf + _DWORD *v88; // eax + int v89; // eax + bool v90; // dl + bool v91; // zf + _DWORD *v92; // eax + unsigned int v93; // [esp+8h] [ebp-B0h] + std::locale::_Impl *v94; // [esp+18h] [ebp-A0h] + size_t MaxCount; // [esp+1Ch] [ebp-9Ch] + int Buf; // [esp+20h] [ebp-98h] + void *Bufa; // [esp+20h] [ebp-98h] + bool v98; // [esp+26h] [ebp-92h] + char v99; // [esp+27h] [ebp-91h] + unsigned int v100; // [esp+28h] [ebp-90h] + char v101; // [esp+2Ch] [ebp-8Ch] + char v102; // [esp+2Ch] [ebp-8Ch] + int v103; // [esp+30h] [ebp-88h] + char v104; // [esp+30h] [ebp-88h] + char v105; // [esp+34h] [ebp-84h] + int v106; // [esp+34h] [ebp-84h] + size_t v107; // [esp+34h] [ebp-84h] + char v108; // [esp+38h] [ebp-80h] + unsigned int v109; // [esp+38h] [ebp-80h] + _DWORD *v110; // [esp+3Ch] [ebp-7Ch] + char v111; // [esp+40h] [ebp-78h] + bool v112; // [esp+40h] [ebp-78h] + int *v113; // [esp+44h] [ebp-74h] + unsigned int v114; // [esp+44h] [ebp-74h] + char v115; // [esp+48h] [ebp-70h] + bool v116; // [esp+48h] [ebp-70h] + char v117; // [esp+48h] [ebp-70h] + char v118; // [esp+48h] [ebp-70h] + char v119; // [esp+48h] [ebp-70h] + char v120; // [esp+48h] [ebp-70h] + _DWORD *v121; // [esp+4Ch] [ebp-6Ch] + bool v122; // [esp+50h] [ebp-68h] + int v123; // [esp+54h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+58h] [ebp-60h] + bool lpuexcpta; // [esp+58h] [ebp-60h] + char lpuexcptb; // [esp+58h] [ebp-60h] + char lpuexcptc; // [esp+58h] [ebp-60h] + struct _Unwind_Exception *lpuexcptd; // [esp+58h] [ebp-60h] + char lpuexcpte; // [esp+58h] [ebp-60h] + void *Block; // [esp+98h] [ebp-20h] BYREF + size_t v131; // [esp+9Ch] [ebp-1Ch] + int v132[5]; // [esp+A0h] [ebp-18h] BYREF + + v121 = a1; + v110 = a3; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v113 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)lpuexcpt); + v123 = *v113; + if ( !*v113 ) + { + v42 = operator new(0x68u); + v42[1] = 0; + *v42 = &off_5605B0; + v42[2] = 0; + v42[3] = 0; + *((_BYTE *)v42 + 16) = 0; + v42[5] = 0; + v42[6] = 0; + v42[7] = 0; + v42[8] = 0; + *((_WORD *)v42 + 18) = 0; + *((_BYTE *)v42 + 100) = 0; + v94 = (std::locale::_Impl *)v42; + std::__numpunct_cache::_M_cache((int)v42, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v94, lpuexcpt, v93); + v123 = *v113; + } + v114 = 8; + v103 = *(_DWORD *)(a5 + 12) & 0x4A; + if ( v103 != 64 ) + { + v7 = 10; + if ( v103 == 8 ) + v7 = 16; + v114 = v7; + } + lpuexcpta = a2 == -1; + if ( lpuexcpta && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v81 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v82 = lpuexcpta && a1 != 0; + v83 = v81 == -1; + if ( v81 != -1 ) + v82 = 0; + v84 = 0; + if ( !v83 ) + v84 = a1; + v105 = v82; + v121 = v84; + } + else + { + v105 = 0; + } + } + else + { + v105 = a2 == -1; + } + v122 = a4 == -1; + if ( v122 && a3 != 0 ) + { + if ( a3[2] >= a3[3] ) + { + v77 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v78 = v122 && a3 != 0; + v79 = v77 == -1; + if ( v77 != -1 ) + v78 = 0; + v80 = 0; + if ( !v79 ) + v80 = a3; + v101 = v78; + v110 = v80; + } + else + { + v101 = 0; + } + } + else + { + v101 = a4 == -1; + } + if ( v105 != v101 ) + { + if ( v121 && a2 == -1 ) + { + v41 = (char *)v121[2]; + if ( (unsigned int)v41 >= v121[3] ) + { + v85 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v86 = -1; + v87 = v85 == -1; + if ( v85 != -1 ) + v86 = v85; + v88 = 0; + if ( !v87 ) + v88 = v121; + lpuexcptb = v86; + v121 = v88; + } + else + { + lpuexcptb = *v41; + } + } + else + { + lpuexcptb = a2; + } + v8 = *(_BYTE *)(v123 + 16); + v98 = *(_BYTE *)(v123 + 74) == (unsigned __int8)lpuexcptb; + if ( *(_BYTE *)(v123 + 74) == lpuexcptb || *(_BYTE *)(v123 + 75) == lpuexcptb ) + { + if ( (!v8 || *(_BYTE *)(v123 + 37) != lpuexcptb) && *(_BYTE *)(v123 + 36) != lpuexcptb ) + { + v9 = v121[2]; + v10 = v121[3]; + if ( v9 >= v10 ) + { + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v11 = v121[2]; + v10 = v121[3]; + } + else + { + v11 = v9 + 1; + v121[2] = v11; + } + v111 = 0; + if ( v11 >= v10 ) + { + v52 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121) == -1; + v53 = 0; + if ( !v52 ) + v53 = v121; + v111 = v52; + v121 = v53; + } + if ( v122 && v110 != 0 ) + { + if ( v110[2] >= v110[3] ) + { + v89 = (*(int (__fastcall **)(_DWORD *))(*v110 + 36))(v110); + v90 = v122 && v110 != 0; + v91 = v89 == -1; + if ( v89 != -1 ) + v90 = 0; + v92 = 0; + if ( !v91 ) + v92 = v110; + v115 = v90; + v110 = v92; + } + else + { + v115 = 0; + } + } + else + { + v115 = a4 == -1; + } + if ( v111 == v115 ) + { + v104 = 1; + v106 = 0; + v112 = 0; + goto LABEL_43; + } + lpuexcptb = -1; + if ( v121 ) + { + v40 = (char *)v121[2]; + if ( (unsigned int)v40 >= v121[3] ) + { + v62 = -1; + v63 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v64 = v63 == -1; + if ( v63 != -1 ) + v62 = v63; + v65 = 0; + if ( !v64 ) + v65 = v121; + lpuexcptb = v62; + v121 = v65; + } + else + { + lpuexcptb = *v40; + } + } + v8 = *(_BYTE *)(v123 + 16); + } + } + else + { + v98 = 0; + } + v106 = 0; + v112 = 0; + while ( 1 ) + { + if ( v8 && *(_BYTE *)(v123 + 37) == lpuexcptb || *(_BYTE *)(v123 + 36) == lpuexcptb ) + { +LABEL_111: + v104 = 0; + goto LABEL_43; + } + if ( *(_BYTE *)(v123 + 78) != lpuexcptb ) + break; + v24 = v114 == 10 || !v112; + if ( !v24 ) + goto LABEL_33; + v112 = v103 == 0 || v114 == 8; + if ( !v112 ) + { + ++v106; + v112 = v24; + goto LABEL_37; + } + v12 = v121; + v114 = 8; + v106 = 0; + v13 = v121[2]; + v14 = v121[3]; + if ( v13 < v14 ) + { +LABEL_38: + v15 = v13 + 1; + v108 = 0; + v12[2] = v15; + if ( v15 < v14 ) + goto LABEL_39; + goto LABEL_76; + } +LABEL_75: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v108 = 0; + if ( v121[2] < v121[3] ) + { +LABEL_39: + v116 = v122 && v110 != 0; + if ( !v116 ) + goto LABEL_40; + goto LABEL_79; + } +LABEL_76: + v25 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121) == -1; + v26 = 0; + if ( !v25 ) + v26 = v121; + v108 = v25; + v121 = v26; + v116 = v122 && v110 != 0; + if ( !v116 ) + { +LABEL_40: + v117 = a4 == -1; + goto LABEL_41; + } +LABEL_79: + if ( v110[2] >= v110[3] ) + { + v43 = (*(int (__fastcall **)(_DWORD *))(*v110 + 36))(v110); + v44 = v116; + v45 = v43 == -1; + if ( v43 != -1 ) + v44 = 0; + v46 = 0; + if ( !v45 ) + v46 = v110; + v117 = v44; + v110 = v46; +LABEL_41: + if ( v108 == v117 ) + goto LABEL_42; + goto LABEL_81; + } + if ( !v108 ) + { +LABEL_42: + v104 = 1; + goto LABEL_43; + } +LABEL_81: + lpuexcptb = -1; + if ( v121 ) + { + v27 = (char *)v121[2]; + if ( (unsigned int)v27 >= v121[3] ) + { + v66 = -1; + v67 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v68 = v67 == -1; + if ( v67 != -1 ) + v66 = v67; + v69 = 0; + if ( !v68 ) + v69 = v121; + lpuexcptb = v66; + v121 = v69; + } + else + { + lpuexcptb = *v27; + } + } + if ( !v112 ) + { + v104 = 0; + goto LABEL_43; + } + v8 = *(_BYTE *)(v123 + 16); + } + if ( !v112 ) + goto LABEL_111; +LABEL_33: + if ( *(_BYTE *)(v123 + 76) != lpuexcptb && *(_BYTE *)(v123 + 77) != lpuexcptb ) + { + v104 = 0; + v112 = 1; + goto LABEL_43; + } + if ( v103 != 0 && v114 != 16 ) + { + v104 = 0; + MaxCount = v114; + Buf = v114; + v112 = 1; + goto LABEL_46; + } + v106 = 0; + v112 = 0; + v114 = 16; +LABEL_37: + v12 = v121; + v13 = v121[2]; + v14 = v121[3]; + if ( v13 < v14 ) + goto LABEL_38; + goto LABEL_75; + } + v98 = 0; + v104 = 1; + lpuexcptb = 0; + v106 = 0; + v112 = 0; +LABEL_43: + v16 = 22; + if ( v114 != 16 ) + v16 = v114; + MaxCount = v16; + Buf = v16; +LABEL_46: + v131 = 0; + Block = v132; + LOBYTE(v132[0]) = 0; + if ( *(_BYTE *)(v123 + 16) ) + std::string::reserve(&Block, 0x20u); + v100 = 0xFFFFFFFF / v114; + v99 = *(_BYTE *)(v123 + 100); + if ( !v99 ) + { + if ( v104 ) + { + v76 = v104; + v102 = 0; + v104 = 0; + lpuexcptd = (struct _Unwind_Exception *)v131; + v22 = (int *)Block; + v99 = v76; + v109 = 0; + goto LABEL_63; + } + v102 = 0; + v109 = 0; + while ( Buf > 10 ) + { + if ( (unsigned __int8)(lpuexcptb - 48) <= 9u ) + goto LABEL_54; + if ( (unsigned __int8)(lpuexcptb - 97) > 5u ) + { + if ( (unsigned __int8)(lpuexcptb - 65) > 5u ) + goto LABEL_110; + v17 = lpuexcptb - 55; + goto LABEL_55; + } + v17 = lpuexcptb - 87; + if ( v100 < v109 ) + { +LABEL_56: + v18 = v121; + v102 = 1; + v19 = v121[2]; + v20 = v121[3]; + if ( v19 < v20 ) + goto LABEL_57; + goto LABEL_90; + } +LABEL_89: + v102 |= ~v17 < v114 * v109; + v18 = v121; + v109 = v114 * v109 + v17; + v20 = v121[3]; + v19 = v121[2]; + ++v106; + if ( v19 < v20 ) + { +LABEL_57: + v21 = v19 + 1; + v18[2] = v21; + goto LABEL_58; + } +LABEL_90: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v21 = v121[2]; + v20 = v121[3]; +LABEL_58: + v118 = 0; + if ( v21 >= v20 ) + { + v47 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121) == -1; + v48 = 0; + if ( !v47 ) + v48 = v121; + v118 = v47; + v121 = v48; + } + if ( v122 && v110 != 0 ) + { + if ( v110[2] >= v110[3] ) + { + v49 = (*(int (__fastcall **)(_DWORD *))(*v110 + 36))(v110) == -1; + v50 = 0; + if ( !v49 ) + v50 = v110; + v51 = v122 && v110 != 0; + v110 = v50; + if ( !v49 ) + v51 = 0; + lpuexcptc = v51; + } + else + { + lpuexcptc = 0; + } + } + else + { + lpuexcptc = a4 == -1; + } + if ( lpuexcptc == v118 ) + { + v99 = 1; + lpuexcptd = (struct _Unwind_Exception *)v131; + v22 = (int *)Block; + goto LABEL_63; + } + if ( v121 ) + { + v28 = (char *)v121[2]; + if ( (unsigned int)v28 >= v121[3] ) + { + v54 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v55 = v54 == -1; + v56 = -1; + if ( v54 != -1 ) + v56 = v54; + v57 = 0; + if ( !v55 ) + v57 = v121; + lpuexcptb = v56; + v121 = v57; + } + else + { + lpuexcptb = *v28; + } + } + else + { + lpuexcptb = -1; + } + } + if ( lpuexcptb <= 47 || (char)(Buf + 48) <= lpuexcptb ) + goto LABEL_110; +LABEL_54: + v17 = lpuexcptb - 48; +LABEL_55: + if ( v100 < v109 ) + goto LABEL_56; + goto LABEL_89; + } + if ( v104 ) + { + v109 = 0; + v102 = 0; + lpuexcptd = (struct _Unwind_Exception *)v131; + v22 = (int *)Block; + v99 = v104; + v104 = 0; + goto LABEL_63; + } + v102 = 0; + v109 = 0; + Bufa = (void *)(v123 + 78); + while ( !*(_BYTE *)(v123 + 16) || *(_BYTE *)(v123 + 37) != lpuexcptb ) + { + if ( lpuexcptb == *(_BYTE *)(v123 + 36) || (v30 = memchr(Bufa, lpuexcptb, MaxCount)) == 0 ) + { +LABEL_110: + v99 = 0; + lpuexcptd = (struct _Unwind_Exception *)v131; + v22 = (int *)Block; + goto LABEL_63; + } + v31 = v30 - (_BYTE *)Bufa; + if ( v31 > 15 ) + v31 -= 6; + if ( v100 >= v109 ) + { + v102 |= ~v31 < v114 * v109; + ++v106; + v109 = v114 * v109 + v31; + goto LABEL_122; + } + v32 = v121; + v102 = v99; + v34 = v121[3]; + v33 = v121[2]; + if ( v33 < v34 ) + { +LABEL_123: + v35 = v33 + 1; + v32[2] = v35; + goto LABEL_124; + } +LABEL_130: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v35 = v121[2]; + v34 = v121[3]; +LABEL_124: + v119 = 0; + if ( v34 <= v35 ) + { + v70 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121) == -1; + v71 = 0; + if ( v70 ) + v71 = v99; + v119 = v71; + v72 = 0; + if ( !v70 ) + v72 = v121; + v121 = v72; + } + if ( v122 && v110 != 0 ) + { + if ( v110[2] >= v110[3] ) + { + v73 = (*(int (__fastcall **)(_DWORD *))(*v110 + 36))(v110) == -1; + v74 = 0; + if ( !v73 ) + v74 = v110; + v75 = v122 && v110 != 0; + v110 = v74; + if ( !v73 ) + v75 = 0; + lpuexcpte = v75; + } + else + { + lpuexcpte = 0; + } + } + else + { + lpuexcpte = a4 == -1; + } + if ( lpuexcpte == v119 ) + { + lpuexcptd = (struct _Unwind_Exception *)v131; + v22 = (int *)Block; + goto LABEL_63; + } + if ( v121 ) + { + v36 = (char *)v121[2]; + if ( (unsigned int)v36 >= v121[3] ) + { + v58 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v59 = v58 == -1; + v60 = -1; + if ( v58 != -1 ) + v60 = v58; + v61 = 0; + if ( !v59 ) + v61 = v121; + lpuexcptb = v60; + v121 = v61; + } + else + { + lpuexcptb = *v36; + } + } + else + { + lpuexcptb = -1; + } + } + v22 = (int *)Block; + lpuexcptd = (struct _Unwind_Exception *)v131; + if ( v106 ) + { + v120 = v106; + v37 = 15; + if ( Block != v132 ) + v37 = v132[0]; + v107 = v131 + 1; + if ( v131 + 1 > v37 ) + { + std::string::_M_mutate((int)&Block, v131, 0, 0, 1u); + v22 = (int *)Block; + } + v38 = v107; + v106 = 0; + *((_BYTE *)lpuexcptd + (_DWORD)v22) = v120; + v131 = v38; + *((_BYTE *)Block + v38) = 0; +LABEL_122: + v32 = v121; + v33 = v121[2]; + v34 = v121[3]; + if ( v33 < v34 ) + goto LABEL_123; + goto LABEL_130; + } + v99 = 0; + v104 = *(_BYTE *)(v123 + 16); +LABEL_63: + if ( lpuexcptd ) + { + v29 = 15; + if ( v22 != v132 ) + v29 = v132[0]; + if ( (unsigned int)lpuexcptd + 1 > v29 ) + { + std::string::_M_mutate((int)&Block, (size_t)lpuexcptd, 0, 0, 1u); + v22 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v22) = v106; + v131 = (size_t)lpuexcptd + 1; + *((_BYTE *)lpuexcptd + (_DWORD)Block + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v123 + 8), *(_DWORD *)(v123 + 12), (int)&Block) ) + *a6 = 4; + v22 = (int *)Block; + if ( v112 || v131 | v106 ) + goto LABEL_102; +LABEL_66: + *a7 = 0; + *a6 = 4; + } + else + { + if ( !v106 && !v112 ) + goto LABEL_66; +LABEL_102: + if ( v104 ) + goto LABEL_66; + if ( v102 ) + { + *a7 = -1; + *a6 = 4; + } + else + { + v39 = -v109; + if ( !v98 ) + v39 = v109; + *a7 = v39; + } + } + if ( v99 ) + *a6 |= 2u; + if ( v22 != v132 ) + operator delete(v22); + return v121; +} +// 49BBC7: variable 'v93' is possibly undefined +// 53F728: using guessed type signed __int32 std::numpunct::id; +// 5605B0: using guessed type int (*off_5605B0)(); + +//----- (0049C0F0) -------------------------------------------------------- +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11]( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _WORD *a7) +{ + int v7; // eax + char v8; // al + unsigned int v9; // eax + unsigned int v10; // edx + unsigned int v11; // eax + _DWORD *v12; // ebx + unsigned int v13; // eax + unsigned int v14; // edx + unsigned int v15; // eax + int v16; // eax + int v17; // eax + _DWORD *v18; // ecx + unsigned int v19; // eax + unsigned int v20; // edx + unsigned int v21; // eax + int *v22; // eax + bool v24; // al + bool v25; // zf + _DWORD *v26; // eax + char *v27; // eax + char *v28; // eax + unsigned int v29; // edx + _BYTE *v30; // eax + int v31; // eax + int v32; // ebx + _DWORD *v33; // ecx + unsigned int v34; // eax + unsigned int v35; // edx + unsigned int v36; // eax + char *v37; // eax + size_t v38; // ebx + unsigned int v39; // edx + int v40; // edx + char *v41; // eax + char *v42; // eax + _DWORD *v43; // eax + int v44; // eax + bool v45; // bl + bool v46; // zf + _DWORD *v47; // eax + bool v48; // zf + _DWORD *v49; // eax + bool v50; // zf + _DWORD *v51; // eax + bool v52; // cl + bool v53; // zf + _DWORD *v54; // eax + int v55; // eax + bool v56; // zf + char v57; // dl + _DWORD *v58; // eax + int v59; // eax + bool v60; // zf + char v61; // dl + _DWORD *v62; // eax + int v63; // eax + char v64; // dl + bool v65; // zf + _DWORD *v66; // eax + char v67; // bl + int v68; // eax + bool v69; // zf + _DWORD *v70; // eax + bool v71; // zf + char v72; // al + _DWORD *v73; // eax + bool v74; // zf + _DWORD *v75; // eax + bool v76; // dl + char v77; // bl + int v78; // eax + bool v79; // bl + bool v80; // zf + _DWORD *v81; // eax + int v82; // eax + bool v83; // dl + bool v84; // zf + _DWORD *v85; // eax + char v86; // bl + int v87; // eax + char v88; // dl + bool v89; // zf + _DWORD *v90; // eax + int v91; // eax + bool v92; // bl + bool v93; // zf + _DWORD *v94; // eax + unsigned int v95; // [esp+8h] [ebp-B0h] + std::locale::_Impl *v96; // [esp+18h] [ebp-A0h] + size_t MaxCount; // [esp+1Ch] [ebp-9Ch] + int Buf; // [esp+20h] [ebp-98h] + void *Bufa; // [esp+20h] [ebp-98h] + bool v100; // [esp+26h] [ebp-92h] + char v101; // [esp+27h] [ebp-91h] + int v102; // [esp+28h] [ebp-90h] + char v103; // [esp+2Ch] [ebp-8Ch] + char v104; // [esp+2Ch] [ebp-8Ch] + int v105; // [esp+30h] [ebp-88h] + char v106; // [esp+30h] [ebp-88h] + char v107; // [esp+34h] [ebp-84h] + int v108; // [esp+34h] [ebp-84h] + char v109; // [esp+38h] [ebp-80h] + unsigned __int16 v110; // [esp+38h] [ebp-80h] + _DWORD *v111; // [esp+3Ch] [ebp-7Ch] + char v112; // [esp+40h] [ebp-78h] + bool v113; // [esp+40h] [ebp-78h] + int *v114; // [esp+44h] [ebp-74h] + int v115; // [esp+44h] [ebp-74h] + char v116; // [esp+48h] [ebp-70h] + bool v117; // [esp+48h] [ebp-70h] + char v118; // [esp+48h] [ebp-70h] + char v119; // [esp+48h] [ebp-70h] + char v120; // [esp+48h] [ebp-70h] + char v121; // [esp+48h] [ebp-70h] + _DWORD *v122; // [esp+4Ch] [ebp-6Ch] + bool v123; // [esp+50h] [ebp-68h] + int v124; // [esp+54h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+58h] [ebp-60h] + bool lpuexcpta; // [esp+58h] [ebp-60h] + char lpuexcptb; // [esp+58h] [ebp-60h] + char lpuexcptc; // [esp+58h] [ebp-60h] + struct _Unwind_Exception *lpuexcptd; // [esp+58h] [ebp-60h] + char lpuexcpte; // [esp+58h] [ebp-60h] + void *Block; // [esp+98h] [ebp-20h] BYREF + size_t v132; // [esp+9Ch] [ebp-1Ch] + int v133[5]; // [esp+A0h] [ebp-18h] BYREF + + v122 = a1; + v111 = a3; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v114 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)lpuexcpt); + v124 = *v114; + if ( !*v114 ) + { + v43 = operator new(0x68u); + v43[1] = 0; + *v43 = &off_5605B0; + v43[2] = 0; + v43[3] = 0; + *((_BYTE *)v43 + 16) = 0; + v43[5] = 0; + v43[6] = 0; + v43[7] = 0; + v43[8] = 0; + *((_WORD *)v43 + 18) = 0; + *((_BYTE *)v43 + 100) = 0; + v96 = (std::locale::_Impl *)v43; + std::__numpunct_cache::_M_cache((int)v43, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v96, lpuexcpt, v95); + v124 = *v114; + } + v115 = 8; + v105 = *(_DWORD *)(a5 + 12) & 0x4A; + if ( v105 != 64 ) + { + v7 = 10; + if ( v105 == 8 ) + v7 = 16; + v115 = v7; + } + lpuexcpta = a2 == -1; + if ( lpuexcpta && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v82 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v83 = lpuexcpta && a1 != 0; + v84 = v82 == -1; + if ( v82 != -1 ) + v83 = 0; + v85 = 0; + if ( !v84 ) + v85 = a1; + v107 = v83; + v122 = v85; + } + else + { + v107 = 0; + } + } + else + { + v107 = a2 == -1; + } + v123 = a4 == -1; + if ( v123 && a3 != 0 ) + { + if ( a3[2] >= a3[3] ) + { + v78 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v79 = v123 && a3 != 0; + v80 = v78 == -1; + if ( v78 != -1 ) + v79 = 0; + v81 = 0; + if ( !v80 ) + v81 = a3; + v103 = v79; + v111 = v81; + } + else + { + v103 = 0; + } + } + else + { + v103 = a4 == -1; + } + if ( v107 != v103 ) + { + if ( v122 && a2 == -1 ) + { + v42 = (char *)v122[2]; + if ( (unsigned int)v42 >= v122[3] ) + { + v87 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + v88 = -1; + v89 = v87 == -1; + if ( v87 != -1 ) + v88 = v87; + v90 = 0; + if ( !v89 ) + v90 = v122; + lpuexcptb = v88; + v122 = v90; + } + else + { + lpuexcptb = *v42; + } + } + else + { + lpuexcptb = a2; + } + v8 = *(_BYTE *)(v124 + 16); + v100 = *(_BYTE *)(v124 + 74) == (unsigned __int8)lpuexcptb; + if ( *(_BYTE *)(v124 + 74) == lpuexcptb || *(_BYTE *)(v124 + 75) == lpuexcptb ) + { + if ( (!v8 || *(_BYTE *)(v124 + 37) != lpuexcptb) && *(_BYTE *)(v124 + 36) != lpuexcptb ) + { + v9 = v122[2]; + v10 = v122[3]; + if ( v9 >= v10 ) + { + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v11 = v122[2]; + v10 = v122[3]; + } + else + { + v11 = v9 + 1; + v122[2] = v11; + } + v112 = 0; + if ( v11 >= v10 ) + { + v53 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122) == -1; + v54 = 0; + if ( !v53 ) + v54 = v122; + v112 = v53; + v122 = v54; + } + if ( v123 && v111 != 0 ) + { + if ( v111[2] >= v111[3] ) + { + v91 = (*(int (__fastcall **)(_DWORD *))(*v111 + 36))(v111); + v92 = v123 && v111 != 0; + v93 = v91 == -1; + if ( v91 != -1 ) + v92 = 0; + v94 = 0; + if ( !v93 ) + v94 = v111; + v116 = v92; + v111 = v94; + } + else + { + v116 = 0; + } + } + else + { + v116 = a4 == -1; + } + if ( v112 == v116 ) + { + v106 = 1; + v108 = 0; + v113 = 0; + goto LABEL_43; + } + lpuexcptb = -1; + if ( v122 ) + { + v41 = (char *)v122[2]; + if ( (unsigned int)v41 >= v122[3] ) + { + v63 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + v64 = -1; + v65 = v63 == -1; + if ( v63 != -1 ) + v64 = v63; + v66 = 0; + if ( !v65 ) + v66 = v122; + lpuexcptb = v64; + v122 = v66; + } + else + { + lpuexcptb = *v41; + } + } + v8 = *(_BYTE *)(v124 + 16); + } + } + else + { + v100 = 0; + } + v108 = 0; + v113 = 0; + while ( 1 ) + { + if ( v8 && *(_BYTE *)(v124 + 37) == lpuexcptb || *(_BYTE *)(v124 + 36) == lpuexcptb ) + { +LABEL_111: + v106 = 0; + goto LABEL_43; + } + if ( *(_BYTE *)(v124 + 78) != lpuexcptb ) + break; + v24 = v115 == 10 || !v113; + if ( !v24 ) + goto LABEL_33; + v113 = v105 == 0 || v115 == 8; + if ( !v113 ) + { + ++v108; + v113 = v24; + goto LABEL_37; + } + v12 = v122; + v115 = 8; + v108 = 0; + v13 = v122[2]; + v14 = v122[3]; + if ( v13 < v14 ) + { +LABEL_38: + v15 = v13 + 1; + v109 = 0; + v12[2] = v15; + if ( v15 < v14 ) + goto LABEL_39; + goto LABEL_76; + } +LABEL_75: + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v109 = 0; + if ( v122[2] < v122[3] ) + { +LABEL_39: + v117 = v123 && v111 != 0; + if ( !v117 ) + goto LABEL_40; + goto LABEL_79; + } +LABEL_76: + v25 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122) == -1; + v26 = 0; + if ( !v25 ) + v26 = v122; + v109 = v25; + v122 = v26; + v117 = v123 && v111 != 0; + if ( !v117 ) + { +LABEL_40: + v118 = a4 == -1; + goto LABEL_41; + } +LABEL_79: + if ( v111[2] >= v111[3] ) + { + v44 = (*(int (__fastcall **)(_DWORD *))(*v111 + 36))(v111); + v45 = v117; + v46 = v44 == -1; + if ( v44 != -1 ) + v45 = 0; + v47 = 0; + if ( !v46 ) + v47 = v111; + v118 = v45; + v111 = v47; +LABEL_41: + if ( v109 == v118 ) + goto LABEL_42; + goto LABEL_81; + } + if ( !v109 ) + { +LABEL_42: + v106 = 1; + goto LABEL_43; + } +LABEL_81: + lpuexcptb = -1; + if ( v122 ) + { + v27 = (char *)v122[2]; + if ( (unsigned int)v27 >= v122[3] ) + { + v67 = -1; + v68 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + v69 = v68 == -1; + if ( v68 != -1 ) + v67 = v68; + v70 = 0; + if ( !v69 ) + v70 = v122; + lpuexcptb = v67; + v122 = v70; + } + else + { + lpuexcptb = *v27; + } + } + if ( !v113 ) + { + v106 = 0; + goto LABEL_43; + } + v8 = *(_BYTE *)(v124 + 16); + } + if ( !v113 ) + goto LABEL_111; +LABEL_33: + if ( *(_BYTE *)(v124 + 76) != lpuexcptb && *(_BYTE *)(v124 + 77) != lpuexcptb ) + { + v106 = 0; + v113 = 1; + goto LABEL_43; + } + if ( v105 != 0 && v115 != 16 ) + { + v106 = 0; + MaxCount = v115; + Buf = v115; + v113 = 1; + goto LABEL_46; + } + v108 = 0; + v113 = 0; + v115 = 16; +LABEL_37: + v12 = v122; + v13 = v122[2]; + v14 = v122[3]; + if ( v13 < v14 ) + goto LABEL_38; + goto LABEL_75; + } + v100 = 0; + v106 = 1; + lpuexcptb = 0; + v108 = 0; + v113 = 0; +LABEL_43: + v16 = 22; + if ( v115 != 16 ) + v16 = v115; + MaxCount = v16; + Buf = v16; +LABEL_46: + v132 = 0; + Block = v133; + LOBYTE(v133[0]) = 0; + if ( *(_BYTE *)(v124 + 16) ) + std::string::reserve(&Block, 0x20u); + v102 = 0xFFFF / v115; + v101 = *(_BYTE *)(v124 + 100); + if ( !v101 ) + { + if ( v106 ) + { + v77 = v106; + v104 = 0; + v106 = 0; + lpuexcptd = (struct _Unwind_Exception *)v132; + v22 = (int *)Block; + v101 = v77; + v110 = 0; + goto LABEL_63; + } + v104 = 0; + v110 = 0; + while ( Buf > 10 ) + { + if ( (unsigned __int8)(lpuexcptb - 48) <= 9u ) + goto LABEL_54; + if ( (unsigned __int8)(lpuexcptb - 97) > 5u ) + { + if ( (unsigned __int8)(lpuexcptb - 65) > 5u ) + goto LABEL_110; + v17 = lpuexcptb - 55; + goto LABEL_55; + } + v17 = lpuexcptb - 87; + if ( (unsigned __int16)v102 < v110 ) + { +LABEL_56: + v18 = v122; + v104 = 1; + v19 = v122[2]; + v20 = v122[3]; + if ( v19 < v20 ) + goto LABEL_57; + goto LABEL_90; + } +LABEL_89: + v104 |= (unsigned __int16)(v115 * v110) > 0xFFFF - v17; + v18 = v122; + v110 = v115 * v110 + v17; + v20 = v122[3]; + v19 = v122[2]; + ++v108; + if ( v19 < v20 ) + { +LABEL_57: + v21 = v19 + 1; + v18[2] = v21; + goto LABEL_58; + } +LABEL_90: + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v21 = v122[2]; + v20 = v122[3]; +LABEL_58: + v119 = 0; + if ( v21 >= v20 ) + { + v48 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122) == -1; + v49 = 0; + if ( !v48 ) + v49 = v122; + v119 = v48; + v122 = v49; + } + if ( v123 && v111 != 0 ) + { + if ( v111[2] >= v111[3] ) + { + v50 = (*(int (__fastcall **)(_DWORD *))(*v111 + 36))(v111) == -1; + v51 = 0; + if ( !v50 ) + v51 = v111; + v52 = v123 && v111 != 0; + v111 = v51; + if ( !v50 ) + v52 = 0; + lpuexcptc = v52; + } + else + { + lpuexcptc = 0; + } + } + else + { + lpuexcptc = a4 == -1; + } + if ( lpuexcptc == v119 ) + { + v101 = 1; + lpuexcptd = (struct _Unwind_Exception *)v132; + v22 = (int *)Block; + goto LABEL_63; + } + if ( v122 ) + { + v28 = (char *)v122[2]; + if ( (unsigned int)v28 >= v122[3] ) + { + v55 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + v56 = v55 == -1; + v57 = -1; + if ( v55 != -1 ) + v57 = v55; + v58 = 0; + if ( !v56 ) + v58 = v122; + lpuexcptb = v57; + v122 = v58; + } + else + { + lpuexcptb = *v28; + } + } + else + { + lpuexcptb = -1; + } + } + if ( lpuexcptb <= 47 || (char)(Buf + 48) <= lpuexcptb ) + goto LABEL_110; +LABEL_54: + v17 = lpuexcptb - 48; +LABEL_55: + if ( (unsigned __int16)v102 < v110 ) + goto LABEL_56; + goto LABEL_89; + } + if ( v106 ) + { + v86 = v106; + v104 = 0; + v106 = 0; + v101 = v86; + lpuexcptd = (struct _Unwind_Exception *)v132; + v22 = (int *)Block; + v110 = 0; + goto LABEL_63; + } + v104 = 0; + Bufa = (void *)(v124 + 78); + v110 = 0; + while ( !*(_BYTE *)(v124 + 16) || *(_BYTE *)(v124 + 37) != lpuexcptb ) + { + if ( lpuexcptb == *(_BYTE *)(v124 + 36) || (v30 = memchr(Bufa, lpuexcptb, MaxCount)) == 0 ) + { +LABEL_110: + v101 = 0; + lpuexcptd = (struct _Unwind_Exception *)v132; + v22 = (int *)Block; + goto LABEL_63; + } + v31 = v30 - (_BYTE *)Bufa; + if ( v31 > 15 ) + v31 -= 6; + if ( (unsigned __int16)v102 >= v110 ) + { + v32 = (unsigned __int16)(v115 * v110); + v104 |= v32 > 0xFFFF - v31; + ++v108; + v110 = v32 + v31; + goto LABEL_122; + } + v33 = v122; + v104 = v101; + v35 = v122[3]; + v34 = v122[2]; + if ( v34 < v35 ) + { +LABEL_123: + v36 = v34 + 1; + v33[2] = v36; + goto LABEL_124; + } +LABEL_130: + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v36 = v122[2]; + v35 = v122[3]; +LABEL_124: + v120 = 0; + if ( v35 <= v36 ) + { + v71 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122) == -1; + v72 = 0; + if ( v71 ) + v72 = v101; + v120 = v72; + v73 = 0; + if ( !v71 ) + v73 = v122; + v122 = v73; + } + if ( v123 && v111 != 0 ) + { + if ( v111[2] >= v111[3] ) + { + v74 = (*(int (__fastcall **)(_DWORD *))(*v111 + 36))(v111) == -1; + v75 = 0; + if ( !v74 ) + v75 = v111; + v76 = v123 && v111 != 0; + v111 = v75; + if ( !v74 ) + v76 = 0; + lpuexcpte = v76; + } + else + { + lpuexcpte = 0; + } + } + else + { + lpuexcpte = a4 == -1; + } + if ( lpuexcpte == v120 ) + { + lpuexcptd = (struct _Unwind_Exception *)v132; + v22 = (int *)Block; + goto LABEL_63; + } + if ( v122 ) + { + v37 = (char *)v122[2]; + if ( (unsigned int)v37 >= v122[3] ) + { + v59 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + v60 = v59 == -1; + v61 = -1; + if ( v59 != -1 ) + v61 = v59; + v62 = 0; + if ( !v60 ) + v62 = v122; + lpuexcptb = v61; + v122 = v62; + } + else + { + lpuexcptb = *v37; + } + } + else + { + lpuexcptb = -1; + } + } + v22 = (int *)Block; + lpuexcptd = (struct _Unwind_Exception *)v132; + if ( v108 ) + { + v121 = v108; + v39 = 15; + if ( Block != v133 ) + v39 = v133[0]; + v38 = v132 + 1; + if ( v132 + 1 > v39 ) + { + std::string::_M_mutate((int)&Block, v132, 0, 0, 1u); + v22 = (int *)Block; + } + v108 = 0; + *((_BYTE *)lpuexcptd + (_DWORD)v22) = v121; + v132 = v38; + *((_BYTE *)Block + v38) = 0; +LABEL_122: + v33 = v122; + v34 = v122[2]; + v35 = v122[3]; + if ( v34 < v35 ) + goto LABEL_123; + goto LABEL_130; + } + v101 = 0; + v106 = *(_BYTE *)(v124 + 16); +LABEL_63: + if ( lpuexcptd ) + { + v29 = 15; + if ( v22 != v133 ) + v29 = v133[0]; + if ( (unsigned int)lpuexcptd + 1 > v29 ) + { + std::string::_M_mutate((int)&Block, (size_t)lpuexcptd, 0, 0, 1u); + v22 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v22) = v108; + v132 = (size_t)lpuexcptd + 1; + *((_BYTE *)lpuexcptd + (_DWORD)Block + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v124 + 8), *(_DWORD *)(v124 + 12), (int)&Block) ) + *a6 = 4; + v22 = (int *)Block; + if ( v113 || v132 | v108 ) + goto LABEL_102; +LABEL_66: + *a7 = 0; + *a6 = 4; + } + else + { + if ( !v108 && !v113 ) + goto LABEL_66; +LABEL_102: + if ( v106 ) + goto LABEL_66; + if ( v104 ) + { + *a7 = -1; + *a6 = 4; + } + else + { + v40 = -v110; + if ( !v100 ) + LOWORD(v40) = v110; + *a7 = v40; + } + } + if ( v101 ) + *a6 |= 2u; + if ( v22 != v133 ) + operator delete(v22); + return v122; +} +// 49CC05: variable 'v95' is possibly undefined +// 53F728: using guessed type signed __int32 std::numpunct::id; +// 5605B0: using guessed type int (*off_5605B0)(); + +//----- (0049D130) -------------------------------------------------------- +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11]( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int *a7) +{ + int v7; // eax + char v8; // al + unsigned int v9; // eax + unsigned int v10; // edx + unsigned int v11; // eax + _DWORD *v12; // edi + unsigned int v13; // eax + unsigned int v14; // edx + unsigned int v15; // eax + int v16; // eax + unsigned __int64 v17; // kr00_8 + int v18; // esi + _DWORD *v19; // ecx + unsigned int v20; // eax + unsigned int v21; // edx + unsigned int v22; // eax + int *v23; // eax + bool v25; // al + bool v26; // zf + _DWORD *v27; // eax + char *v28; // eax + char *v29; // eax + unsigned int v30; // edx + int v31; // ecx + unsigned int v32; // ebx + _BYTE *v33; // eax + int v34; // esi + _DWORD *v35; // esi + unsigned int v36; // eax + unsigned int v37; // edx + unsigned int v38; // eax + char *v39; // eax + size_t v40; // edi + unsigned int v41; // edx + char *v42; // eax + char *v43; // eax + _DWORD *v44; // eax + int v45; // eax + bool v46; // dl + bool v47; // zf + _DWORD *v48; // eax + bool v49; // zf + _DWORD *v50; // eax + bool v51; // zf + _DWORD *v52; // eax + bool v53; // bl + bool v54; // zf + _DWORD *v55; // eax + int v56; // eax + bool v57; // zf + char v58; // dl + _DWORD *v59; // eax + int v60; // eax + bool v61; // zf + char v62; // dl + _DWORD *v63; // eax + int v64; // eax + char v65; // dl + bool v66; // zf + _DWORD *v67; // eax + int v68; // eax + char v69; // dl + bool v70; // zf + _DWORD *v71; // eax + bool v72; // zf + char v73; // al + _DWORD *v74; // eax + bool v75; // zf + _DWORD *v76; // eax + bool v77; // dl + char v78; // cl + int v79; // eax + bool v80; // si + bool v81; // zf + _DWORD *v82; // eax + int v83; // eax + bool v84; // dl + bool v85; // zf + _DWORD *v86; // eax + int v87; // eax + bool v88; // zf + char v89; // si + _DWORD *v90; // eax + int v91; // eax + bool v92; // bl + bool v93; // zf + _DWORD *v94; // eax + unsigned int v95; // [esp+8h] [ebp-D0h] + std::locale::_Impl *v96; // [esp+14h] [ebp-C4h] + unsigned __int64 v97; // [esp+18h] [ebp-C0h] + size_t MaxCount; // [esp+20h] [ebp-B8h] + int Buf; // [esp+24h] [ebp-B4h] + void *Bufa; // [esp+24h] [ebp-B4h] + bool v101; // [esp+2Ah] [ebp-AEh] + char v102; // [esp+2Bh] [ebp-ADh] + char v103; // [esp+34h] [ebp-A4h] + char v104; // [esp+34h] [ebp-A4h] + int v105; // [esp+38h] [ebp-A0h] + char v106; // [esp+38h] [ebp-A0h] + char v107; // [esp+3Ch] [ebp-9Ch] + int v108; // [esp+3Ch] [ebp-9Ch] + char v109; // [esp+40h] [ebp-98h] + char v110; // [esp+40h] [ebp-98h] + char v111; // [esp+40h] [ebp-98h] + char v112; // [esp+40h] [ebp-98h] + _DWORD *v113; // [esp+44h] [ebp-94h] + int *v114; // [esp+48h] [ebp-90h] + int v115; // [esp+48h] [ebp-90h] + char v116; // [esp+50h] [ebp-88h] + char v117; // [esp+50h] [ebp-88h] + unsigned __int64 v118; // [esp+50h] [ebp-88h] + char v119; // [esp+58h] [ebp-80h] + bool v120; // [esp+58h] [ebp-80h] + _DWORD *v121; // [esp+5Ch] [ebp-7Ch] + bool v122; // [esp+60h] [ebp-78h] + int v123; // [esp+64h] [ebp-74h] + struct _Unwind_Exception *lpuexcpt; // [esp+68h] [ebp-70h] + bool lpuexcpta; // [esp+68h] [ebp-70h] + char lpuexcptb; // [esp+68h] [ebp-70h] + char lpuexcptc; // [esp+68h] [ebp-70h] + struct _Unwind_Exception *lpuexcptd; // [esp+68h] [ebp-70h] + char lpuexcpte; // [esp+68h] [ebp-70h] + void *Block; // [esp+A8h] [ebp-30h] BYREF + size_t v131; // [esp+ACh] [ebp-2Ch] + int v132[10]; // [esp+B0h] [ebp-28h] BYREF + + v121 = a1; + v113 = a3; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v114 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)lpuexcpt); + v123 = *v114; + if ( !*v114 ) + { + v44 = operator new(0x68u); + v44[1] = 0; + *v44 = &off_5605B0; + v44[2] = 0; + v44[3] = 0; + *((_BYTE *)v44 + 16) = 0; + v44[5] = 0; + v44[6] = 0; + v44[7] = 0; + v44[8] = 0; + *((_WORD *)v44 + 18) = 0; + *((_BYTE *)v44 + 100) = 0; + v96 = (std::locale::_Impl *)v44; + std::__numpunct_cache::_M_cache((int)v44, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v96, lpuexcpt, v95); + v123 = *v114; + } + v115 = 8; + v105 = *(_DWORD *)(a5 + 12) & 0x4A; + if ( v105 != 64 ) + { + v7 = 10; + if ( v105 == 8 ) + v7 = 16; + v115 = v7; + } + lpuexcpta = a2 == -1; + if ( lpuexcpta && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v83 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v84 = lpuexcpta && a1 != 0; + v85 = v83 == -1; + if ( v83 != -1 ) + v84 = 0; + v86 = 0; + if ( !v85 ) + v86 = a1; + v107 = v84; + v121 = v86; + } + else + { + v107 = 0; + } + } + else + { + v107 = a2 == -1; + } + v122 = a4 == -1; + if ( v122 && a3 != 0 ) + { + if ( a3[2] >= a3[3] ) + { + v79 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v80 = v122 && a3 != 0; + v81 = v79 == -1; + if ( v79 != -1 ) + v80 = 0; + v103 = v80; + v82 = 0; + if ( !v81 ) + v82 = a3; + v113 = v82; + } + else + { + v103 = 0; + } + } + else + { + v103 = a4 == -1; + } + if ( v107 != v103 ) + { + if ( v121 && a2 == -1 ) + { + v43 = (char *)v121[2]; + if ( (unsigned int)v43 >= v121[3] ) + { + v87 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v88 = v87 == -1; + v89 = -1; + if ( v87 != -1 ) + v89 = v87; + lpuexcptb = v89; + v90 = 0; + if ( !v88 ) + v90 = v121; + v121 = v90; + } + else + { + lpuexcptb = *v43; + } + } + else + { + lpuexcptb = a2; + } + v8 = *(_BYTE *)(v123 + 16); + v101 = *(_BYTE *)(v123 + 74) == (unsigned __int8)lpuexcptb; + if ( *(_BYTE *)(v123 + 74) == lpuexcptb || *(_BYTE *)(v123 + 75) == lpuexcptb ) + { + if ( (!v8 || *(_BYTE *)(v123 + 37) != lpuexcptb) && *(_BYTE *)(v123 + 36) != lpuexcptb ) + { + v9 = v121[2]; + v10 = v121[3]; + if ( v9 >= v10 ) + { + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v11 = v121[2]; + v10 = v121[3]; + } + else + { + v11 = v9 + 1; + v121[2] = v11; + } + v119 = 0; + if ( v11 >= v10 ) + { + v54 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121) == -1; + v55 = 0; + if ( !v54 ) + v55 = v121; + v119 = v54; + v121 = v55; + } + if ( v122 && v113 != 0 ) + { + if ( v113[2] >= v113[3] ) + { + v91 = (*(int (__fastcall **)(_DWORD *))(*v113 + 36))(v113); + v92 = v122 && v113 != 0; + v93 = v91 == -1; + if ( v91 != -1 ) + v92 = 0; + v94 = 0; + if ( !v93 ) + v94 = v113; + v116 = v92; + v113 = v94; + } + else + { + v116 = 0; + } + } + else + { + v116 = a4 == -1; + } + if ( v119 == v116 ) + { + v106 = 1; + v108 = 0; + v120 = 0; + goto LABEL_43; + } + lpuexcptb = -1; + if ( v121 ) + { + v42 = (char *)v121[2]; + if ( (unsigned int)v42 >= v121[3] ) + { + v64 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v65 = -1; + v66 = v64 == -1; + if ( v64 != -1 ) + v65 = v64; + v67 = 0; + if ( !v66 ) + v67 = v121; + lpuexcptb = v65; + v121 = v67; + } + else + { + lpuexcptb = *v42; + } + } + v8 = *(_BYTE *)(v123 + 16); + } + } + else + { + v101 = 0; + } + v108 = 0; + v120 = 0; + while ( 1 ) + { + if ( v8 && *(_BYTE *)(v123 + 37) == lpuexcptb || *(_BYTE *)(v123 + 36) == lpuexcptb ) + { +LABEL_115: + v106 = 0; + goto LABEL_43; + } + if ( *(_BYTE *)(v123 + 78) != lpuexcptb ) + break; + v25 = v115 == 10 || !v120; + if ( !v25 ) + goto LABEL_33; + v120 = v105 == 0 || v115 == 8; + if ( !v120 ) + { + ++v108; + v120 = v25; + goto LABEL_37; + } + v108 = 0; + v12 = v121; + v115 = 8; + v13 = v121[2]; + v14 = v121[3]; + if ( v13 >= v14 ) + { +LABEL_77: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v109 = 0; + if ( v121[2] < v121[3] ) + goto LABEL_39; + goto LABEL_78; + } +LABEL_38: + v15 = v13 + 1; + v109 = 0; + v12[2] = v15; + if ( v15 < v14 ) + goto LABEL_39; +LABEL_78: + v26 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121) == -1; + v27 = 0; + if ( !v26 ) + v27 = v121; + v109 = v26; + v121 = v27; +LABEL_39: + if ( v122 && v113 != 0 ) + { + if ( v113[2] >= v113[3] ) + { + v45 = (*(int (__fastcall **)(_DWORD *))(*v113 + 36))(v113); + v46 = v122 && v113 != 0; + v47 = v45 == -1; + if ( v45 != -1 ) + v46 = 0; + v48 = 0; + if ( !v47 ) + v48 = v113; + v117 = v46; + v113 = v48; + } + else + { + v117 = 0; + } + } + else + { + v117 = a4 == -1; + } + if ( v109 == v117 ) + { + v106 = 1; + goto LABEL_43; + } + lpuexcptb = -1; + if ( v121 ) + { + v28 = (char *)v121[2]; + if ( (unsigned int)v28 >= v121[3] ) + { + v68 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v69 = -1; + v70 = v68 == -1; + if ( v68 != -1 ) + v69 = v68; + v71 = 0; + if ( !v70 ) + v71 = v121; + lpuexcptb = v69; + v121 = v71; + } + else + { + lpuexcptb = *v28; + } + } + if ( !v120 ) + { + v106 = 0; + goto LABEL_43; + } + v8 = *(_BYTE *)(v123 + 16); + } + if ( !v120 ) + goto LABEL_115; +LABEL_33: + if ( *(_BYTE *)(v123 + 76) != lpuexcptb && *(_BYTE *)(v123 + 77) != lpuexcptb ) + { + v106 = 0; + v120 = 1; + goto LABEL_43; + } + if ( v105 != 0 && v115 != 16 ) + { + v106 = 0; + MaxCount = v115; + Buf = v115; + v120 = 1; + goto LABEL_46; + } + v108 = 0; + v120 = 0; + v115 = 16; +LABEL_37: + v12 = v121; + v13 = v121[2]; + v14 = v121[3]; + if ( v13 >= v14 ) + goto LABEL_77; + goto LABEL_38; + } + v101 = 0; + v106 = 1; + lpuexcptb = 0; + v108 = 0; + v120 = 0; +LABEL_43: + v16 = 22; + if ( v115 != 16 ) + v16 = v115; + MaxCount = v16; + Buf = v16; +LABEL_46: + v131 = 0; + Block = v132; + LOBYTE(v132[0]) = 0; + if ( *(_BYTE *)(v123 + 16) ) + std::string::reserve(&Block, 0x20u); + v97 = 0x8000000000000000LL; + if ( !v101 ) + v97 = 0x7FFFFFFFFFFFFFFFLL; + v17 = v97 / v115; + v102 = *(_BYTE *)(v123 + 100); + if ( !v102 ) + { + if ( v106 ) + { + v78 = v106; + v104 = 0; + v106 = 0; + lpuexcptd = (struct _Unwind_Exception *)v131; + v23 = (int *)Block; + v102 = v78; + v118 = 0LL; + goto LABEL_65; + } + v104 = 0; + v118 = 0LL; + while ( Buf > 10 ) + { + if ( (unsigned __int8)(lpuexcptb - 48) <= 9u ) + goto LABEL_56; + if ( (unsigned __int8)(lpuexcptb - 97) > 5u ) + { + if ( (unsigned __int8)(lpuexcptb - 65) > 5u ) + goto LABEL_114; + v18 = lpuexcptb - 55; + } + else + { + v18 = lpuexcptb - 87; + } +LABEL_57: + if ( v17 >= v118 ) + { + v104 |= v97 - v18 < v115 * v118; + v19 = v121; + v118 = v115 * v118 + v18; + v20 = v121[2]; + v21 = v121[3]; + ++v108; + if ( v20 < v21 ) + { +LABEL_59: + v22 = v20 + 1; + v19[2] = v22; + goto LABEL_60; + } + } + else + { + v19 = v121; + v104 = 1; + v20 = v121[2]; + v21 = v121[3]; + if ( v20 < v21 ) + goto LABEL_59; + } + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v22 = v121[2]; + v21 = v121[3]; +LABEL_60: + v110 = 0; + if ( v22 >= v21 ) + { + v49 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121) == -1; + v50 = 0; + if ( !v49 ) + v50 = v121; + v110 = v49; + v121 = v50; + } + if ( v122 && v113 != 0 ) + { + if ( v113[2] >= v113[3] ) + { + v51 = (*(int (__fastcall **)(_DWORD *))(*v113 + 36))(v113) == -1; + v52 = 0; + if ( !v51 ) + v52 = v113; + v53 = v122 && v113 != 0; + v113 = v52; + if ( !v51 ) + v53 = 0; + lpuexcptc = v53; + } + else + { + lpuexcptc = 0; + } + } + else + { + lpuexcptc = a4 == -1; + } + if ( lpuexcptc == v110 ) + { + v102 = 1; + lpuexcptd = (struct _Unwind_Exception *)v131; + v23 = (int *)Block; + goto LABEL_65; + } + if ( v121 ) + { + v29 = (char *)v121[2]; + if ( (unsigned int)v29 >= v121[3] ) + { + v56 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v57 = v56 == -1; + v58 = -1; + if ( v56 != -1 ) + v58 = v56; + v59 = 0; + if ( !v57 ) + v59 = v121; + lpuexcptb = v58; + v121 = v59; + } + else + { + lpuexcptb = *v29; + } + } + else + { + lpuexcptb = -1; + } + } + if ( lpuexcptb <= 47 || (char)(Buf + 48) <= lpuexcptb ) + goto LABEL_114; +LABEL_56: + v18 = lpuexcptb - 48; + goto LABEL_57; + } + if ( v106 ) + { + v118 = 0LL; + lpuexcptd = (struct _Unwind_Exception *)v131; + v23 = (int *)Block; + v102 = v106; + v104 = 0; + v106 = 0; + goto LABEL_65; + } + v104 = 0; + v118 = 0LL; + Bufa = (void *)(v123 + 78); + while ( !*(_BYTE *)(v123 + 16) || *(_BYTE *)(v123 + 37) != lpuexcptb ) + { + if ( lpuexcptb == *(_BYTE *)(v123 + 36) || (v33 = memchr(Bufa, lpuexcptb, MaxCount)) == 0 ) + { +LABEL_114: + v102 = 0; + lpuexcptd = (struct _Unwind_Exception *)v131; + v23 = (int *)Block; + goto LABEL_65; + } + v34 = v33 - (_BYTE *)Bufa; + if ( v33 - (_BYTE *)Bufa > 15 ) + v34 -= 6; + if ( v17 >= v118 ) + { + v104 |= v97 - v34 < v115 * v118; + ++v108; + v118 = v115 * v118 + v34; + goto LABEL_126; + } + v35 = v121; + v104 = v102; + v37 = v121[3]; + v36 = v121[2]; + if ( v36 < v37 ) + { +LABEL_127: + v38 = v36 + 1; + v35[2] = v38; + goto LABEL_128; + } +LABEL_134: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v38 = v121[2]; + v37 = v121[3]; +LABEL_128: + v111 = 0; + if ( v37 <= v38 ) + { + v72 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121) == -1; + v73 = 0; + if ( v72 ) + v73 = v102; + v111 = v73; + v74 = 0; + if ( !v72 ) + v74 = v121; + v121 = v74; + } + if ( v122 && v113 != 0 ) + { + if ( v113[2] >= v113[3] ) + { + v75 = (*(int (__fastcall **)(_DWORD *))(*v113 + 36))(v113) == -1; + v76 = 0; + if ( !v75 ) + v76 = v113; + v77 = v122 && v113 != 0; + v113 = v76; + if ( !v75 ) + v77 = 0; + lpuexcpte = v77; + } + else + { + lpuexcpte = 0; + } + } + else + { + lpuexcpte = a4 == -1; + } + if ( lpuexcpte == v111 ) + { + lpuexcptd = (struct _Unwind_Exception *)v131; + v23 = (int *)Block; + goto LABEL_65; + } + if ( v121 ) + { + v39 = (char *)v121[2]; + if ( (unsigned int)v39 >= v121[3] ) + { + v60 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + v61 = v60 == -1; + v62 = -1; + if ( v60 != -1 ) + v62 = v60; + v63 = 0; + if ( !v61 ) + v63 = v121; + lpuexcptb = v62; + v121 = v63; + } + else + { + lpuexcptb = *v39; + } + } + else + { + lpuexcptb = -1; + } + } + v23 = (int *)Block; + lpuexcptd = (struct _Unwind_Exception *)v131; + if ( v108 ) + { + v41 = 15; + if ( Block != v132 ) + v41 = v132[0]; + v112 = v108; + v40 = v131 + 1; + if ( v131 + 1 > v41 ) + { + std::string::_M_mutate((int)&Block, v131, 0, 0, 1u); + v23 = (int *)Block; + } + v108 = 0; + *((_BYTE *)lpuexcptd + (_DWORD)v23) = v112; + v131 = v40; + *((_BYTE *)Block + v40) = 0; +LABEL_126: + v35 = v121; + v36 = v121[2]; + v37 = v121[3]; + if ( v36 < v37 ) + goto LABEL_127; + goto LABEL_134; + } + v102 = 0; + v106 = *(_BYTE *)(v123 + 16); +LABEL_65: + if ( lpuexcptd ) + { + v30 = 15; + if ( v23 != v132 ) + v30 = v132[0]; + if ( (unsigned int)lpuexcptd + 1 > v30 ) + { + std::string::_M_mutate((int)&Block, (size_t)lpuexcptd, 0, 0, 1u); + v23 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v23) = v108; + v131 = (size_t)lpuexcptd + 1; + *((_BYTE *)lpuexcptd + (_DWORD)Block + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v123 + 8), *(_DWORD *)(v123 + 12), (int)&Block) ) + *a6 = 4; + v23 = (int *)Block; + if ( v120 || v131 | v108 ) + goto LABEL_104; +LABEL_68: + *a7 = 0; + a7[1] = 0; + *a6 = 4; + } + else + { + if ( !v108 && !v120 ) + goto LABEL_68; +LABEL_104: + if ( v106 ) + goto LABEL_68; + if ( v104 ) + { + v31 = 0; + v32 = 0x80000000; + if ( !v101 ) + { + v31 = -1; + v32 = 0x7FFFFFFF; + } + a7[1] = v32; + *a7 = v31; + *a6 = 4; + } + else + { + if ( v101 ) + v118 = -(__int64)v118; + *(_QWORD *)a7 = v118; + } + } + if ( v102 ) + *a6 |= 2u; + if ( v23 != v132 ) + operator delete(v23); + return v121; +} +// 49DE27: variable 'v95' is possibly undefined +// 53F728: using guessed type signed __int32 std::numpunct::id; +// 5605B0: using guessed type int (*off_5605B0)(); + +//----- (0049E3B0) -------------------------------------------------------- +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11]( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + int v7; // eax + char v8; // al + unsigned int v9; // eax + unsigned int v10; // edx + unsigned int v11; // eax + _DWORD *v12; // edi + unsigned int v13; // eax + unsigned int v14; // edx + unsigned int v15; // eax + int v16; // eax + unsigned __int64 v17; // kr08_8 + int v18; // esi + _DWORD *v19; // ecx + unsigned int v20; // eax + unsigned int v21; // edx + unsigned int v22; // eax + int *v23; // eax + bool v25; // al + bool v26; // zf + _DWORD *v27; // eax + char *v28; // eax + char *v29; // eax + unsigned int v30; // edx + _BYTE *v31; // eax + int v32; // esi + _DWORD *v33; // ebx + unsigned int v34; // eax + unsigned int v35; // edx + unsigned int v36; // eax + char *v37; // eax + size_t v38; // edx + size_t v39; // esi + char *v40; // eax + char *v41; // eax + _DWORD *v42; // eax + int v43; // eax + bool v44; // dl + bool v45; // zf + _DWORD *v46; // eax + bool v47; // zf + _DWORD *v48; // eax + bool v49; // zf + _DWORD *v50; // eax + bool v51; // di + bool v52; // zf + _DWORD *v53; // eax + int v54; // eax + bool v55; // zf + char v56; // dl + _DWORD *v57; // eax + int v58; // eax + bool v59; // zf + char v60; // dl + _DWORD *v61; // eax + char v62; // si + int v63; // eax + bool v64; // zf + _DWORD *v65; // eax + char v66; // bl + int v67; // eax + bool v68; // zf + _DWORD *v69; // eax + bool v70; // zf + char v71; // al + _DWORD *v72; // eax + bool v73; // zf + _DWORD *v74; // eax + bool v75; // di + char v76; // bl + int v77; // eax + bool v78; // bl + bool v79; // zf + _DWORD *v80; // eax + int v81; // eax + bool v82; // dl + bool v83; // zf + _DWORD *v84; // eax + int v85; // eax + char v86; // dl + bool v87; // zf + _DWORD *v88; // eax + int v89; // eax + bool v90; // di + bool v91; // zf + _DWORD *v92; // eax + unsigned int v93; // [esp+8h] [ebp-D0h] + std::locale::_Impl *v94; // [esp+18h] [ebp-C0h] + size_t MaxCount; // [esp+1Ch] [ebp-BCh] + int Buf; // [esp+20h] [ebp-B8h] + void *Bufa; // [esp+20h] [ebp-B8h] + bool v98; // [esp+26h] [ebp-B2h] + char v99; // [esp+27h] [ebp-B1h] + char v100; // [esp+30h] [ebp-A8h] + char v101; // [esp+30h] [ebp-A8h] + int v102; // [esp+34h] [ebp-A4h] + char v103; // [esp+34h] [ebp-A4h] + char v104; // [esp+38h] [ebp-A0h] + int v105; // [esp+38h] [ebp-A0h] + size_t v106; // [esp+38h] [ebp-A0h] + char v107; // [esp+3Ch] [ebp-9Ch] + char v108; // [esp+3Ch] [ebp-9Ch] + char v109; // [esp+3Ch] [ebp-9Ch] + char v110; // [esp+3Ch] [ebp-9Ch] + int *v111; // [esp+40h] [ebp-98h] + int v112; // [esp+40h] [ebp-98h] + _DWORD *v113; // [esp+48h] [ebp-90h] + char v114; // [esp+4Ch] [ebp-8Ch] + bool v115; // [esp+4Ch] [ebp-8Ch] + char v116; // [esp+50h] [ebp-88h] + char v117; // [esp+50h] [ebp-88h] + unsigned __int64 v118; // [esp+50h] [ebp-88h] + _DWORD *v119; // [esp+58h] [ebp-80h] + bool v120; // [esp+5Ch] [ebp-7Ch] + struct _Unwind_Exception *lpuexcpt; // [esp+60h] [ebp-78h] + bool lpuexcpta; // [esp+60h] [ebp-78h] + char lpuexcptb; // [esp+60h] [ebp-78h] + char lpuexcptc; // [esp+60h] [ebp-78h] + struct _Unwind_Exception *lpuexcptd; // [esp+60h] [ebp-78h] + char lpuexcpte; // [esp+60h] [ebp-78h] + int v127; // [esp+68h] [ebp-70h] + void *Block; // [esp+A8h] [ebp-30h] BYREF + size_t v129; // [esp+ACh] [ebp-2Ch] + int v130[10]; // [esp+B0h] [ebp-28h] BYREF + + v119 = a1; + v113 = a3; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v111 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)lpuexcpt); + v127 = *v111; + if ( !*v111 ) + { + v42 = operator new(0x68u); + v42[1] = 0; + *v42 = &off_5605B0; + v42[2] = 0; + v42[3] = 0; + *((_BYTE *)v42 + 16) = 0; + v42[5] = 0; + v42[6] = 0; + v42[7] = 0; + v42[8] = 0; + *((_WORD *)v42 + 18) = 0; + *((_BYTE *)v42 + 100) = 0; + v94 = (std::locale::_Impl *)v42; + std::__numpunct_cache::_M_cache((int)v42, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v94, lpuexcpt, v93); + v127 = *v111; + } + v112 = 8; + v102 = *(_DWORD *)(a5 + 12) & 0x4A; + if ( v102 != 64 ) + { + v7 = 10; + if ( v102 == 8 ) + v7 = 16; + v112 = v7; + } + lpuexcpta = a2 == -1; + if ( lpuexcpta && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v81 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v82 = lpuexcpta && a1 != 0; + v83 = v81 == -1; + if ( v81 != -1 ) + v82 = 0; + v84 = 0; + if ( !v83 ) + v84 = a1; + v104 = v82; + v119 = v84; + } + else + { + v104 = 0; + } + } + else + { + v104 = a2 == -1; + } + v120 = a4 == -1; + if ( v120 && a3 != 0 ) + { + if ( a3[2] >= a3[3] ) + { + v77 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v78 = v120 && a3 != 0; + v79 = v77 == -1; + if ( v77 != -1 ) + v78 = 0; + v80 = 0; + if ( !v79 ) + v80 = a3; + v100 = v78; + v113 = v80; + } + else + { + v100 = 0; + } + } + else + { + v100 = a4 == -1; + } + if ( v104 != v100 ) + { + if ( v119 && a2 == -1 ) + { + v41 = (char *)v119[2]; + if ( (unsigned int)v41 >= v119[3] ) + { + v85 = (*(int (__fastcall **)(_DWORD *))(*v119 + 36))(v119); + v86 = -1; + v87 = v85 == -1; + if ( v85 != -1 ) + v86 = v85; + v88 = 0; + if ( !v87 ) + v88 = v119; + lpuexcptb = v86; + v119 = v88; + } + else + { + lpuexcptb = *v41; + } + } + else + { + lpuexcptb = a2; + } + v8 = *(_BYTE *)(v127 + 16); + v98 = *(_BYTE *)(v127 + 74) == (unsigned __int8)lpuexcptb; + if ( *(_BYTE *)(v127 + 74) == lpuexcptb || *(_BYTE *)(v127 + 75) == lpuexcptb ) + { + if ( (!v8 || *(_BYTE *)(v127 + 37) != lpuexcptb) && *(_BYTE *)(v127 + 36) != lpuexcptb ) + { + v9 = v119[2]; + v10 = v119[3]; + if ( v9 >= v10 ) + { + (*(void (__fastcall **)(_DWORD *))(*v119 + 40))(v119); + v11 = v119[2]; + v10 = v119[3]; + } + else + { + v11 = v9 + 1; + v119[2] = v11; + } + v114 = 0; + if ( v11 >= v10 ) + { + v52 = (*(int (__fastcall **)(_DWORD *))(*v119 + 36))(v119) == -1; + v53 = 0; + if ( !v52 ) + v53 = v119; + v114 = v52; + v119 = v53; + } + if ( v120 && v113 != 0 ) + { + if ( v113[2] >= v113[3] ) + { + v89 = (*(int (__fastcall **)(_DWORD *))(*v113 + 36))(v113); + v90 = v120 && v113 != 0; + v91 = v89 == -1; + if ( v89 != -1 ) + v90 = 0; + v116 = v90; + v92 = 0; + if ( !v91 ) + v92 = v113; + v113 = v92; + } + else + { + v116 = 0; + } + } + else + { + v116 = a4 == -1; + } + if ( v114 == v116 ) + { + v103 = 1; + v105 = 0; + v115 = 0; + goto LABEL_43; + } + lpuexcptb = -1; + if ( v119 ) + { + v40 = (char *)v119[2]; + if ( (unsigned int)v40 >= v119[3] ) + { + v62 = -1; + v63 = (*(int (__fastcall **)(_DWORD *))(*v119 + 36))(v119); + v64 = v63 == -1; + if ( v63 != -1 ) + v62 = v63; + lpuexcptb = v62; + v65 = 0; + if ( !v64 ) + v65 = v119; + v119 = v65; + } + else + { + lpuexcptb = *v40; + } + } + v8 = *(_BYTE *)(v127 + 16); + } + } + else + { + v98 = 0; + } + v105 = 0; + v115 = 0; + while ( 1 ) + { + if ( v8 && *(_BYTE *)(v127 + 37) == lpuexcptb || *(_BYTE *)(v127 + 36) == lpuexcptb ) + { +LABEL_112: + v103 = 0; + goto LABEL_43; + } + if ( *(_BYTE *)(v127 + 78) != lpuexcptb ) + break; + v25 = v112 == 10 || !v115; + if ( !v25 ) + goto LABEL_33; + v115 = v102 == 0 || v112 == 8; + if ( !v115 ) + { + ++v105; + v115 = v25; + goto LABEL_37; + } + v105 = 0; + v12 = v119; + v112 = 8; + v13 = v119[2]; + v14 = v119[3]; + if ( v13 >= v14 ) + { +LABEL_75: + (*(void (__fastcall **)(_DWORD *))(*v119 + 40))(v119); + v107 = 0; + if ( v119[2] < v119[3] ) + goto LABEL_39; + goto LABEL_76; + } +LABEL_38: + v15 = v13 + 1; + v107 = 0; + v12[2] = v15; + if ( v15 < v14 ) + goto LABEL_39; +LABEL_76: + v26 = (*(int (__fastcall **)(_DWORD *))(*v119 + 36))(v119) == -1; + v27 = 0; + if ( !v26 ) + v27 = v119; + v107 = v26; + v119 = v27; +LABEL_39: + if ( v120 && v113 != 0 ) + { + if ( v113[2] >= v113[3] ) + { + v43 = (*(int (__fastcall **)(_DWORD *))(*v113 + 36))(v113); + v44 = v120 && v113 != 0; + v45 = v43 == -1; + if ( v43 != -1 ) + v44 = 0; + v46 = 0; + if ( !v45 ) + v46 = v113; + v117 = v44; + v113 = v46; + } + else + { + v117 = 0; + } + } + else + { + v117 = a4 == -1; + } + if ( v107 == v117 ) + { + v103 = 1; + goto LABEL_43; + } + lpuexcptb = -1; + if ( v119 ) + { + v28 = (char *)v119[2]; + if ( (unsigned int)v28 >= v119[3] ) + { + v66 = -1; + v67 = (*(int (__fastcall **)(_DWORD *))(*v119 + 36))(v119); + v68 = v67 == -1; + if ( v67 != -1 ) + v66 = v67; + v69 = 0; + if ( !v68 ) + v69 = v119; + lpuexcptb = v66; + v119 = v69; + } + else + { + lpuexcptb = *v28; + } + } + if ( !v115 ) + { + v103 = 0; + goto LABEL_43; + } + v8 = *(_BYTE *)(v127 + 16); + } + if ( !v115 ) + goto LABEL_112; +LABEL_33: + if ( *(_BYTE *)(v127 + 76) != lpuexcptb && *(_BYTE *)(v127 + 77) != lpuexcptb ) + { + v103 = 0; + v115 = 1; + goto LABEL_43; + } + if ( v102 != 0 && v112 != 16 ) + { + v103 = 0; + MaxCount = v112; + Buf = v112; + v115 = 1; + goto LABEL_46; + } + v105 = 0; + v115 = 0; + v112 = 16; +LABEL_37: + v12 = v119; + v13 = v119[2]; + v14 = v119[3]; + if ( v13 >= v14 ) + goto LABEL_75; + goto LABEL_38; + } + v98 = 0; + v103 = 1; + lpuexcptb = 0; + v105 = 0; + v115 = 0; +LABEL_43: + v16 = 22; + if ( v112 != 16 ) + v16 = v112; + MaxCount = v16; + Buf = v16; +LABEL_46: + v129 = 0; + Block = v130; + LOBYTE(v130[0]) = 0; + if ( *(_BYTE *)(v127 + 16) ) + std::string::reserve(&Block, 0x20u); + v17 = 0xFFFFFFFFFFFFFFFFLL / v112; + v99 = *(_BYTE *)(v127 + 100); + if ( !v99 ) + { + if ( v103 ) + { + v76 = v103; + v101 = 0; + v103 = 0; + lpuexcptd = (struct _Unwind_Exception *)v129; + v23 = (int *)Block; + v99 = v76; + v118 = 0LL; + goto LABEL_63; + } + v101 = 0; + v118 = 0LL; + while ( Buf > 10 ) + { + if ( (unsigned __int8)(lpuexcptb - 48) <= 9u ) + goto LABEL_54; + v18 = lpuexcptb - 87; + if ( (unsigned __int8)(lpuexcptb - 97) > 5u ) + { + if ( (unsigned __int8)(lpuexcptb - 65) > 5u ) + goto LABEL_111; + v18 = lpuexcptb - 55; + } +LABEL_55: + if ( v17 >= v118 ) + { + v101 |= __PAIR64__(~(v18 >> 31), ~v18) < v112 * v118; + v19 = v119; + ++v105; + v20 = v119[2]; + v21 = v119[3]; + v118 = v112 * v118 + v18; + if ( v20 < v21 ) + { +LABEL_57: + v22 = v20 + 1; + v19[2] = v22; + goto LABEL_58; + } + } + else + { + v19 = v119; + v101 = 1; + v20 = v119[2]; + v21 = v119[3]; + if ( v20 < v21 ) + goto LABEL_57; + } + (*(void (__fastcall **)(_DWORD *))(*v119 + 40))(v119); + v22 = v119[2]; + v21 = v119[3]; +LABEL_58: + v108 = 0; + if ( v22 >= v21 ) + { + v47 = (*(int (__fastcall **)(_DWORD *))(*v119 + 36))(v119) == -1; + v48 = 0; + if ( !v47 ) + v48 = v119; + v108 = v47; + v119 = v48; + } + if ( v120 && v113 != 0 ) + { + if ( v113[2] >= v113[3] ) + { + v49 = (*(int (__fastcall **)(_DWORD *))(*v113 + 36))(v113) == -1; + v50 = 0; + if ( !v49 ) + v50 = v113; + v51 = v120 && v113 != 0; + v113 = v50; + if ( !v49 ) + v51 = 0; + lpuexcptc = v51; + } + else + { + lpuexcptc = 0; + } + } + else + { + lpuexcptc = a4 == -1; + } + if ( lpuexcptc == v108 ) + { + v99 = 1; + lpuexcptd = (struct _Unwind_Exception *)v129; + v23 = (int *)Block; + goto LABEL_63; + } + if ( v119 ) + { + v29 = (char *)v119[2]; + if ( (unsigned int)v29 >= v119[3] ) + { + v54 = (*(int (__fastcall **)(_DWORD *))(*v119 + 36))(v119); + v55 = v54 == -1; + v56 = -1; + if ( v54 != -1 ) + v56 = v54; + v57 = 0; + if ( !v55 ) + v57 = v119; + lpuexcptb = v56; + v119 = v57; + } + else + { + lpuexcptb = *v29; + } + } + else + { + lpuexcptb = -1; + } + } + if ( lpuexcptb <= 47 || (char)(Buf + 48) <= lpuexcptb ) + goto LABEL_111; +LABEL_54: + v18 = lpuexcptb - 48; + goto LABEL_55; + } + if ( v103 ) + { + v118 = 0LL; + lpuexcptd = (struct _Unwind_Exception *)v129; + v23 = (int *)Block; + v99 = v103; + v101 = 0; + v103 = 0; + goto LABEL_63; + } + v101 = 0; + v118 = 0LL; + Bufa = (void *)(v127 + 78); + while ( !*(_BYTE *)(v127 + 16) || *(_BYTE *)(v127 + 37) != lpuexcptb ) + { + if ( lpuexcptb == *(_BYTE *)(v127 + 36) || (v31 = memchr(Bufa, lpuexcptb, MaxCount)) == 0 ) + { +LABEL_111: + v99 = 0; + lpuexcptd = (struct _Unwind_Exception *)v129; + v23 = (int *)Block; + goto LABEL_63; + } + v32 = v31 - (_BYTE *)Bufa; + if ( v31 - (_BYTE *)Bufa > 15 ) + v32 -= 6; + if ( v17 >= v118 ) + { + v101 |= __PAIR64__(~(v32 >> 31), ~v32) < v112 * v118; + v118 = v112 * v118 + v32; + ++v105; + goto LABEL_123; + } + v33 = v119; + v101 = v99; + v35 = v119[3]; + v34 = v119[2]; + if ( v34 < v35 ) + { +LABEL_124: + v36 = v34 + 1; + v33[2] = v36; + goto LABEL_125; + } +LABEL_131: + (*(void (__fastcall **)(_DWORD *))(*v119 + 40))(v119); + v36 = v119[2]; + v35 = v119[3]; +LABEL_125: + v109 = 0; + if ( v35 <= v36 ) + { + v70 = (*(int (__fastcall **)(_DWORD *))(*v119 + 36))(v119) == -1; + v71 = 0; + if ( v70 ) + v71 = v99; + v109 = v71; + v72 = 0; + if ( !v70 ) + v72 = v119; + v119 = v72; + } + if ( v120 && v113 != 0 ) + { + if ( v113[2] >= v113[3] ) + { + v73 = (*(int (__fastcall **)(_DWORD *))(*v113 + 36))(v113) == -1; + v74 = 0; + if ( !v73 ) + v74 = v113; + v75 = v120 && v113 != 0; + v113 = v74; + if ( !v73 ) + v75 = 0; + lpuexcpte = v75; + } + else + { + lpuexcpte = 0; + } + } + else + { + lpuexcpte = a4 == -1; + } + if ( lpuexcpte == v109 ) + { + lpuexcptd = (struct _Unwind_Exception *)v129; + v23 = (int *)Block; + goto LABEL_63; + } + if ( v119 ) + { + v37 = (char *)v119[2]; + if ( (unsigned int)v37 >= v119[3] ) + { + v58 = (*(int (__fastcall **)(_DWORD *))(*v119 + 36))(v119); + v59 = v58 == -1; + v60 = -1; + if ( v58 != -1 ) + v60 = v58; + v61 = 0; + if ( !v59 ) + v61 = v119; + lpuexcptb = v60; + v119 = v61; + } + else + { + lpuexcptb = *v37; + } + } + else + { + lpuexcptb = -1; + } + } + v23 = (int *)Block; + lpuexcptd = (struct _Unwind_Exception *)v129; + if ( v105 ) + { + v38 = 15; + if ( Block != v130 ) + v38 = v130[0]; + v110 = v105; + v106 = v129 + 1; + if ( v129 + 1 > v38 ) + { + std::string::_M_mutate((int)&Block, v129, 0, 0, 1u); + v23 = (int *)Block; + } + v39 = v106; + v105 = 0; + *((_BYTE *)lpuexcptd + (_DWORD)v23) = v110; + v129 = v39; + *((_BYTE *)Block + v39) = 0; +LABEL_123: + v33 = v119; + v34 = v119[2]; + v35 = v119[3]; + if ( v34 < v35 ) + goto LABEL_124; + goto LABEL_131; + } + v99 = 0; + v103 = *(_BYTE *)(v127 + 16); +LABEL_63: + if ( lpuexcptd ) + { + v30 = 15; + if ( v23 != v130 ) + v30 = v130[0]; + if ( (unsigned int)lpuexcptd + 1 > v30 ) + { + std::string::_M_mutate((int)&Block, (size_t)lpuexcptd, 0, 0, 1u); + v23 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v23) = v105; + v129 = (size_t)lpuexcptd + 1; + *((_BYTE *)lpuexcptd + (_DWORD)Block + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v127 + 8), *(_DWORD *)(v127 + 12), (int)&Block) ) + *a6 = 4; + v23 = (int *)Block; + if ( v115 || v129 | v105 ) + goto LABEL_103; +LABEL_66: + *a7 = 0; + a7[1] = 0; + *a6 = 4; + } + else + { + if ( !v105 && !v115 ) + goto LABEL_66; +LABEL_103: + if ( v103 ) + goto LABEL_66; + if ( v101 ) + { + *a7 = -1; + a7[1] = -1; + *a6 = 4; + } + else + { + if ( v98 ) + v118 = -(__int64)v118; + *(_QWORD *)a7 = v118; + } + } + if ( v99 ) + *a6 |= 2u; + if ( v23 != v130 ) + operator delete(v23); + return v119; +} +// 49F0A5: variable 'v93' is possibly undefined +// 53F728: using guessed type signed __int32 std::numpunct::id; +// 5605B0: using guessed type int (*off_5605B0)(); + +//----- (0049F650) -------------------------------------------------------- +unsigned __int64 __stdcall std::num_get>::_M_extract_int( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + int *a6) +{ + int v6; // eax + _BYTE *v7; // eax + char v8; // al + int v9; // eax + unsigned int v10; // edx + int v11; // eax + int v12; // eax + _DWORD *v13; // ecx + unsigned int v14; // eax + char v15; // al + const char *v16; // ecx + int v17; // eax + _DWORD *v19; // ecx + unsigned int v20; // eax + bool v21; // al + _BYTE *v22; // eax + char v23; // al + char i; // al + _BYTE *v25; // eax + int v26; // eax + _DWORD *v27; // ecx + unsigned int v28; // eax + char v29; // al + char v30; // al + int v31; // edx + int v32; // eax + char *v33; // eax + char *v34; // eax + bool v35; // al + int v36; // eax + unsigned int v37; // [esp+4h] [ebp-94h] + bool v38; // [esp+1Fh] [ebp-79h] + size_t MaxCount; // [esp+20h] [ebp-78h] + int Buf; // [esp+24h] [ebp-74h] + void *Bufa; // [esp+24h] [ebp-74h] + unsigned int v42; // [esp+28h] [ebp-70h] + char v43; // [esp+28h] [ebp-70h] + int v44; // [esp+2Ch] [ebp-6Ch] + char v45; // [esp+2Ch] [ebp-6Ch] + int v46; // [esp+30h] [ebp-68h] + char v47; // [esp+34h] [ebp-64h] + char v48; // [esp+35h] [ebp-63h] + char v49; // [esp+35h] [ebp-63h] + bool v50; // [esp+36h] [ebp-62h] + char v51; // [esp+36h] [ebp-62h] + bool v52; // [esp+37h] [ebp-61h] + unsigned int v53; // [esp+38h] [ebp-60h] + struct _Unwind_Exception *v54; // [esp+3Ch] [ebp-5Ch] + char lpuexcpt; // [esp+40h] [ebp-58h] + char lpuexcpta; // [esp+40h] [ebp-58h] + unsigned __int64 lpuexcptb; // [esp+40h] [ebp-58h] + char lpuexcptc; // [esp+40h] [ebp-58h] + unsigned int v59; // [esp+48h] [ebp-50h] + char v60; // [esp+48h] [ebp-50h] + int v61; // [esp+8Bh] [ebp-Dh] BYREF + const char *v62[2]; // [esp+8Ch] [ebp-Ch] BYREF + + v54 = std::__use_cache>::operator()((int *)(a4 + 108)); + v6 = *(_DWORD *)(a4 + 12) & 0x4A; + v44 = v6; + if ( v6 == 64 ) + { + v53 = 8; +LABEL_4: + v50 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v50 ) + { + lpuexcpt = 0; + v46 = 0; + MaxCount = v53; + Buf = v53; + v52 = 0; + v38 = 0; + goto LABEL_17; + } + goto LABEL_5; + } + if ( v6 != 8 ) + { + v53 = 10; + goto LABEL_4; + } + v50 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v50 ) + { + MaxCount = 22; + lpuexcpt = 0; + v46 = 0; + v52 = 0; + v38 = 0; + v53 = 16; + Buf = 22; + goto LABEL_17; + } + v53 = 16; +LABEL_5: + LOBYTE(v7) = BYTE4(a1); + if ( !(_DWORD)a1 || HIDWORD(a1) != -1 ) + goto LABEL_7; + v7 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v7 < *(_DWORD *)(a1 + 12) ) + { + LOBYTE(v7) = *v7; +LABEL_7: + lpuexcpt = (char)v7; + goto LABEL_8; + } + v7 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v7 != (_BYTE *)-1 ) + goto LABEL_7; + LODWORD(a1) = 0; + lpuexcpt = -1; +LABEL_8: + v8 = *((_BYTE *)v54 + 16); + v38 = *((_BYTE *)v54 + 74) == (unsigned __int8)lpuexcpt; + if ( *((_BYTE *)v54 + 74) != lpuexcpt && *((_BYTE *)v54 + 75) != lpuexcpt + || v8 && *((_BYTE *)v54 + 37) == lpuexcpt + || *((_BYTE *)v54 + 36) == lpuexcpt ) + { + goto LABEL_45; + } + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v46 = 0; + v50 = std::istreambuf_iterator::equal(&a1, (int)&a2); + v52 = 0; + if ( !v50 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v8 = *((_BYTE *)v54 + 16); +LABEL_45: + v46 = 0; + v52 = 0; + while ( 1 ) + { + if ( v8 && *((_BYTE *)v54 + 37) == lpuexcpt || *((_BYTE *)v54 + 36) == lpuexcpt ) + { +LABEL_94: + v50 = 0; + goto LABEL_14; + } + if ( *((_BYTE *)v54 + 78) != lpuexcpt ) + break; + v21 = v53 == 10 || !v52; + if ( !v21 ) + goto LABEL_51; + v52 = v44 == 0 || v53 == 8; + if ( !v52 ) + { + ++v46; + v52 = v21; + goto LABEL_55; + } + v19 = (_DWORD *)a1; + v46 = 0; + v53 = 8; + v20 = *(_DWORD *)(a1 + 8); + if ( v20 < *(_DWORD *)(a1 + 12) ) + { +LABEL_56: + HIDWORD(a1) = -1; + v19[2] = v20 + 1; + goto LABEL_57; + } +LABEL_64: + (*(void (__fastcall **)(_DWORD *))(*v19 + 40))(v19); + v19 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( !(_DWORD)a1 ) + { + v51 = 1; + goto LABEL_58; + } +LABEL_57: + v51 = 0; + if ( v19[2] >= v19[3] && (*(int (__fastcall **)(_DWORD *))(*v19 + 36))(v19) == -1 ) + { + LODWORD(a1) = 0; + v51 = 1; + } +LABEL_58: + v60 = a3 == -1; + v43 = v60 & (a2 != 0); + if ( v43 ) + { + v60 = 0; + if ( a2[2] >= a2[3] && (*(int (**)(void))(*a2 + 36))() == -1 ) + { + a2 = 0; + v60 = v43; + } + } + if ( v51 == v60 ) + { + v50 = 1; + goto LABEL_14; + } + LOBYTE(v22) = BYTE4(a1); + if ( !(_DWORD)a1 || HIDWORD(a1) != -1 ) + goto LABEL_68; + v22 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v22 < *(_DWORD *)(a1 + 12) ) + { + LOBYTE(v22) = *v22; +LABEL_68: + lpuexcpt = (char)v22; + goto LABEL_69; + } + v22 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v22 != (_BYTE *)-1 ) + goto LABEL_68; + LODWORD(a1) = 0; + lpuexcpt = -1; +LABEL_69: + if ( !v52 ) + goto LABEL_94; + v8 = *((_BYTE *)v54 + 16); + } + if ( !v52 ) + goto LABEL_94; +LABEL_51: + if ( *((_BYTE *)v54 + 76) != lpuexcpt && *((_BYTE *)v54 + 77) != lpuexcpt ) + { + v50 = 0; + v52 = 1; + goto LABEL_14; + } + if ( v44 != 0 && v53 != 16 ) + { + v50 = 0; + v52 = 1; + MaxCount = v53; + Buf = v53; + goto LABEL_17; + } + v46 = 0; + v52 = 0; + v53 = 16; +LABEL_55: + v19 = (_DWORD *)a1; + v20 = *(_DWORD *)(a1 + 8); + if ( v20 < *(_DWORD *)(a1 + 12) ) + goto LABEL_56; + goto LABEL_64; + } +LABEL_14: + v9 = 22; + if ( v53 != 16 ) + v9 = v53; + MaxCount = v9; + Buf = v9; +LABEL_17: + v62[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v54 + 16) ) + std::string::reserve((int *)v62, (std::string *)0x20, v37); + v10 = 0xFFFFFFFF % v53; + v42 = 0xFFFFFFFF / v53; + v48 = *((_BYTE *)v54 + 100); + if ( v48 ) + { + if ( v50 ) + { + v59 = 0; + v45 = 0; + v48 = v50; + v50 = 0; + goto LABEL_33; + } + v45 = 0; + v59 = 0; + Bufa = (char *)v54 + 78; +LABEL_100: + for ( i = *((_BYTE *)v54 + 16); i && *((_BYTE *)v54 + 37) == lpuexcpt; i = *((_BYTE *)v54 + 16) ) + { + if ( !v46 ) + { + v48 = 0; + v50 = i; + goto LABEL_33; + } + std::string::push_back((int *)v62, (std::string *)(char)v46, v37); + v27 = (_DWORD *)a1; + v46 = 0; + v28 = *(_DWORD *)(a1 + 8); + if ( v28 < *(_DWORD *)(a1 + 12) ) + goto LABEL_109; +LABEL_118: + (*(void (__fastcall **)(_DWORD *))(*v27 + 40))(v27); + v27 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_110; + lpuexcptc = v48; +LABEL_111: + v29 = a3 == -1; + v47 = v29 & (a2 != 0); + if ( v47 ) + { + v29 = 0; + if ( a2[2] >= a2[3] ) + { + v31 = (*(int (**)(void))(*a2 + 36))(); + v29 = 0; + if ( v31 == -1 ) + { + a2 = 0; + v29 = v47; + } + } + } + if ( v29 == lpuexcptc ) + goto LABEL_33; + v30 = BYTE4(a1); + if ( a1 > 0xFFFFFFFF00000000LL ) + { + v34 = *(char **)(a1 + 8); + if ( (unsigned int)v34 >= *(_DWORD *)(a1 + 12) ) + { + v36 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v36; + if ( v36 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpt = -1; + } + goto LABEL_100; + } + v30 = *v34; + } + lpuexcpt = v30; + } + if ( lpuexcpt != *((_BYTE *)v54 + 36) ) + { + v25 = memchr(Bufa, lpuexcpt, MaxCount); + if ( v25 ) + { + v26 = v25 - (_BYTE *)Bufa; + if ( v26 > 15 ) + v26 -= 6; + if ( v42 < v59 ) + { + v45 = v48; + } + else + { + v45 |= ~v26 < v53 * v59; + ++v46; + v59 = v53 * v59 + v26; + } + v27 = (_DWORD *)a1; + v28 = *(_DWORD *)(a1 + 8); + if ( v28 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_118; +LABEL_109: + HIDWORD(a1) = -1; + v27[2] = v28 + 1; +LABEL_110: + lpuexcptc = 0; + if ( v27[2] >= v27[3] ) + { + lpuexcptc = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v27 + 36))(v27) == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v48; + } + } + goto LABEL_111; + } + } +LABEL_97: + v48 = 0; + } + else + { + v45 = 0; + if ( !v50 ) + { + v59 = 0; +LABEL_22: + v11 = lpuexcpt; + if ( Buf > 10 ) + { + v10 = (unsigned __int8)lpuexcpt; + if ( (unsigned __int8)(lpuexcpt - 48) <= 9u ) + goto LABEL_25; + while ( (unsigned __int8)(v10 - 97) <= 5u ) + { + v12 = v11 - 87; + if ( v42 < v59 ) + goto LABEL_27; +LABEL_74: + v10 = v53 * v59; + v45 |= ~v12 < v53 * v59; + v13 = (_DWORD *)a1; + v59 = v53 * v59 + v12; + ++v46; + v14 = *(_DWORD *)(a1 + 8); + if ( v14 < *(_DWORD *)(a1 + 12) ) + goto LABEL_28; +LABEL_75: + (*(void (__fastcall **)(_DWORD *, unsigned int))(*v13 + 40))(v13, v10); + v13 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_29; + lpuexcpta = 1; +LABEL_30: + v15 = a3 == -1; + LOBYTE(v10) = v15 & (a2 != 0); + v49 = v10; + if ( (_BYTE)v10 ) + { + v15 = 0; + if ( a2[2] >= a2[3] ) + { + v10 = (*(int (**)(void))(*a2 + 36))(); + v15 = 0; + if ( v10 == -1 ) + { + a2 = 0; + v15 = v49; + } + } + } + if ( lpuexcpta == v15 ) + { + v48 = 1; + goto LABEL_33; + } + v23 = BYTE4(a1); + if ( a1 <= 0xFFFFFFFF00000000LL ) + goto LABEL_81; + v33 = *(char **)(a1 + 8); + if ( (unsigned int)v33 < *(_DWORD *)(a1 + 12) ) + { + v23 = *v33; +LABEL_81: + lpuexcpt = v23; + goto LABEL_22; + } + v11 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v11; + if ( v11 != -1 ) + goto LABEL_22; + LODWORD(a1) = 0; + if ( Buf <= 10 ) + goto LABEL_97; + v10 = -1; + } + v10 -= 65; + if ( (unsigned __int8)v10 <= 5u ) + { + v12 = v11 - 55; + goto LABEL_26; + } + } + else if ( lpuexcpt > 47 && (char)(Buf + 48) > lpuexcpt ) + { +LABEL_25: + v12 = lpuexcpt - 48; +LABEL_26: + if ( v42 >= v59 ) + goto LABEL_74; +LABEL_27: + v13 = (_DWORD *)a1; + v45 = 1; + v14 = *(_DWORD *)(a1 + 8); + if ( v14 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_75; +LABEL_28: + HIDWORD(a1) = -1; + v13[2] = v14 + 1; +LABEL_29: + lpuexcpta = 0; + if ( v13[2] >= v13[3] ) + { + lpuexcpta = 0; + if ( (*(int (__fastcall **)(_DWORD *, unsigned int))(*v13 + 36))(v13, v10) == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = 1; + } + } + goto LABEL_30; + } + goto LABEL_97; + } + v35 = v50; + v59 = 0; + v50 = 0; + v48 = v35; + } +LABEL_33: + v16 = v62[0]; + if ( *((_DWORD *)v62[0] - 3) ) + { + std::string::push_back((int *)v62, (std::string *)(char)v46, v37); + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v54 + 2), *((_DWORD *)v54 + 3), v62) ) + *a5 = 4; + v16 = v62[0]; + if ( !v46 && !v52 && !*((_DWORD *)v62[0] - 3) ) + goto LABEL_36; + } + else if ( !v52 && !v46 ) + { + goto LABEL_36; + } + if ( v50 ) + { +LABEL_36: + *a6 = 0; + *a5 = 4; + goto LABEL_37; + } + if ( v45 ) + { + *a6 = -1; + *a5 = 4; + } + else + { + v32 = -v59; + if ( !v38 ) + v32 = v59; + *a6 = v32; + } +LABEL_37: + if ( v48 ) + *a5 |= 2u; + lpuexcptb = a1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v16 - 1, 0xFFFFFFFF) > 0 ) + return lpuexcptb; +LABEL_125: + std::string::_Rep::_M_destroy((void *)(v16 - 12), (int)&v61); + return lpuexcptb; + } + v17 = *((_DWORD *)v16 - 1); + *((_DWORD *)v16 - 1) = v17 - 1; + if ( v17 <= 0 ) + goto LABEL_125; + return lpuexcptb; +} +// 49FEA9: variable 'v37' is possibly undefined +// 49FB57: variable 'v10' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004A01C0) -------------------------------------------------------- +unsigned __int64 __stdcall std::num_get>::_M_extract_int( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + int *a6) +{ + int v6; // eax + char v7; // dl + char v8; // al + int v9; // eax + unsigned int v10; // edx + int v11; // eax + int v12; // eax + _DWORD *v13; // ecx + unsigned int v14; // eax + char v15; // al + const char *v16; // ecx + int v17; // eax + _DWORD *v19; // ecx + unsigned int v20; // eax + bool v21; // al + _BYTE *v22; // eax + char v23; // al + char i; // al + _BYTE *v25; // eax + int v26; // eax + _DWORD *v27; // ecx + unsigned int v28; // eax + char v29; // al + char v30; // al + int v31; // edx + int v32; // eax + char *v33; // eax + char *v34; // eax + bool v35; // al + int v36; // eax + unsigned int v37; // [esp+4h] [ebp-94h] + bool v38; // [esp+18h] [ebp-80h] + size_t MaxCount; // [esp+1Ch] [ebp-7Ch] + unsigned int v40; // [esp+20h] [ebp-78h] + int Buf; // [esp+24h] [ebp-74h] + void *Bufa; // [esp+24h] [ebp-74h] + unsigned int v43; // [esp+28h] [ebp-70h] + char v44; // [esp+28h] [ebp-70h] + int v45; // [esp+2Ch] [ebp-6Ch] + char v46; // [esp+2Ch] [ebp-6Ch] + int v47; // [esp+30h] [ebp-68h] + char v48; // [esp+34h] [ebp-64h] + char v49; // [esp+35h] [ebp-63h] + char v50; // [esp+35h] [ebp-63h] + bool v51; // [esp+36h] [ebp-62h] + char v52; // [esp+36h] [ebp-62h] + bool v53; // [esp+37h] [ebp-61h] + unsigned int v54; // [esp+38h] [ebp-60h] + struct _Unwind_Exception *v55; // [esp+3Ch] [ebp-5Ch] + char lpuexcpt; // [esp+40h] [ebp-58h] + char lpuexcpta; // [esp+40h] [ebp-58h] + unsigned __int64 lpuexcptb; // [esp+40h] [ebp-58h] + char lpuexcptc; // [esp+40h] [ebp-58h] + unsigned int v60; // [esp+48h] [ebp-50h] + char v61; // [esp+48h] [ebp-50h] + int v62; // [esp+8Bh] [ebp-Dh] BYREF + const char *v63[2]; // [esp+8Ch] [ebp-Ch] BYREF + + v55 = std::__use_cache>::operator()((int *)(a4 + 108)); + v6 = *(_DWORD *)(a4 + 12) & 0x4A; + v45 = v6; + if ( v6 == 64 ) + { + v54 = 8; +LABEL_4: + v51 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v51 ) + { + lpuexcpt = 0; + v47 = 0; + MaxCount = v54; + Buf = v54; + v53 = 0; + v38 = 0; + goto LABEL_14; + } + goto LABEL_5; + } + if ( v6 != 8 ) + { + v54 = 10; + goto LABEL_4; + } + v51 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v51 ) + { + MaxCount = 22; + lpuexcpt = 0; + v47 = 0; + v53 = 0; + v38 = 0; + v54 = 16; + Buf = 22; + goto LABEL_14; + } + v54 = 16; +LABEL_5: + v7 = std::istreambuf_iterator::_M_get((int)&a1); + lpuexcpt = v7; + v38 = *((_BYTE *)v55 + 74) == (unsigned __int8)v7; + if ( *((_BYTE *)v55 + 74) == v7 ) + { + v8 = *((_BYTE *)v55 + 16); + } + else + { + v8 = *((_BYTE *)v55 + 16); + if ( *((_BYTE *)v55 + 75) != v7 ) + { +LABEL_42: + v47 = 0; + v53 = 0; + while ( 1 ) + { + if ( v8 && *((_BYTE *)v55 + 37) == lpuexcpt || *((_BYTE *)v55 + 36) == lpuexcpt ) + { +LABEL_91: + v51 = 0; + goto LABEL_11; + } + if ( *((_BYTE *)v55 + 78) != lpuexcpt ) + break; + v21 = v54 == 10 || !v53; + if ( !v21 ) + goto LABEL_48; + v53 = v54 == 8 || v45 == 0; + if ( !v53 ) + { + ++v47; + v53 = v21; + goto LABEL_52; + } + v19 = (_DWORD *)a1; + v47 = 0; + v54 = 8; + v20 = *(_DWORD *)(a1 + 8); + if ( v20 < *(_DWORD *)(a1 + 12) ) + { +LABEL_53: + HIDWORD(a1) = -1; + v19[2] = v20 + 1; + goto LABEL_54; + } +LABEL_61: + (*(void (__fastcall **)(_DWORD *))(*v19 + 40))(v19); + v19 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( !(_DWORD)a1 ) + { + v52 = 1; + goto LABEL_55; + } +LABEL_54: + v52 = 0; + if ( v19[2] >= v19[3] && (*(int (__fastcall **)(_DWORD *))(*v19 + 36))(v19) == -1 ) + { + LODWORD(a1) = 0; + v52 = 1; + } +LABEL_55: + v61 = a3 == -1; + v44 = v61 & (a2 != 0); + if ( v44 ) + { + v61 = 0; + if ( a2[2] >= a2[3] && (*(int (**)(void))(*a2 + 36))() == -1 ) + { + a2 = 0; + v61 = v44; + } + } + if ( v61 == v52 ) + { + v51 = 1; + goto LABEL_11; + } + LOBYTE(v22) = BYTE4(a1); + if ( !(_DWORD)a1 || HIDWORD(a1) != -1 ) + goto LABEL_65; + v22 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v22 < *(_DWORD *)(a1 + 12) ) + { + LOBYTE(v22) = *v22; +LABEL_65: + lpuexcpt = (char)v22; + goto LABEL_66; + } + v22 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v22 != (_BYTE *)-1 ) + goto LABEL_65; + LODWORD(a1) = 0; + lpuexcpt = -1; +LABEL_66: + if ( !v53 ) + goto LABEL_91; + v8 = *((_BYTE *)v55 + 16); + } + if ( !v53 ) + goto LABEL_91; +LABEL_48: + if ( *((_BYTE *)v55 + 76) != lpuexcpt && *((_BYTE *)v55 + 77) != lpuexcpt ) + { + v51 = 0; + v53 = 1; + goto LABEL_11; + } + if ( v45 != 0 && v54 != 16 ) + { + v51 = 0; + v53 = 1; + MaxCount = v54; + Buf = v54; + goto LABEL_14; + } + v47 = 0; + v53 = 0; + v54 = 16; +LABEL_52: + v19 = (_DWORD *)a1; + v20 = *(_DWORD *)(a1 + 8); + if ( v20 < *(_DWORD *)(a1 + 12) ) + goto LABEL_53; + goto LABEL_61; + } + } + if ( v8 && *((_BYTE *)v55 + 37) == v7 || *((_BYTE *)v55 + 36) == v7 ) + goto LABEL_42; + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v47 = 0; + v51 = std::istreambuf_iterator::equal(&a1, (int)&a2); + v53 = 0; + if ( !v51 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v8 = *((_BYTE *)v55 + 16); + goto LABEL_42; + } +LABEL_11: + v9 = 22; + if ( v54 != 16 ) + v9 = v54; + MaxCount = v9; + Buf = v9; +LABEL_14: + v63[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v55 + 16) ) + std::string::reserve((int *)v63, (std::string *)0x20, v37); + v40 = v38 + 0x7FFFFFFF; + v10 = v40 % v54; + v43 = v40 / v54; + v49 = *((_BYTE *)v55 + 100); + if ( v49 ) + { + if ( v51 ) + { + v60 = 0; + v46 = 0; + v49 = v51; + v51 = 0; + goto LABEL_30; + } + v46 = 0; + v60 = 0; + Bufa = (char *)v55 + 78; +LABEL_97: + for ( i = *((_BYTE *)v55 + 16); i && *((_BYTE *)v55 + 37) == lpuexcpt; i = *((_BYTE *)v55 + 16) ) + { + if ( !v47 ) + { + v49 = 0; + v51 = i; + goto LABEL_30; + } + std::string::push_back((int *)v63, (std::string *)(char)v47, v37); + v27 = (_DWORD *)a1; + v47 = 0; + v28 = *(_DWORD *)(a1 + 8); + if ( v28 < *(_DWORD *)(a1 + 12) ) + goto LABEL_106; +LABEL_116: + (*(void (__fastcall **)(_DWORD *))(*v27 + 40))(v27); + v27 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_107; + lpuexcptc = v49; +LABEL_108: + v29 = a3 == -1; + v48 = v29 & (a2 != 0); + if ( v48 ) + { + v29 = 0; + if ( a2[2] >= a2[3] ) + { + v31 = (*(int (**)(void))(*a2 + 36))(); + v29 = 0; + if ( v31 == -1 ) + { + a2 = 0; + v29 = v48; + } + } + } + if ( v29 == lpuexcptc ) + goto LABEL_30; + v30 = BYTE4(a1); + if ( (_DWORD)a1 && HIDWORD(a1) == -1 ) + { + v34 = *(char **)(a1 + 8); + if ( (unsigned int)v34 >= *(_DWORD *)(a1 + 12) ) + { + v36 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v36; + if ( v36 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpt = -1; + } + goto LABEL_97; + } + v30 = *v34; + } + lpuexcpt = v30; + } + if ( lpuexcpt != *((_BYTE *)v55 + 36) ) + { + v25 = memchr(Bufa, lpuexcpt, MaxCount); + if ( v25 ) + { + v26 = v25 - (_BYTE *)Bufa; + if ( v26 > 15 ) + v26 -= 6; + if ( v43 < v60 ) + { + v46 = v49; + } + else + { + v46 |= v40 - v26 < v60 * v54; + ++v47; + v60 = v60 * v54 + v26; + } + v27 = (_DWORD *)a1; + v28 = *(_DWORD *)(a1 + 8); + if ( v28 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_116; +LABEL_106: + HIDWORD(a1) = -1; + v27[2] = v28 + 1; +LABEL_107: + lpuexcptc = 0; + if ( v27[2] >= v27[3] ) + { + lpuexcptc = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v27 + 36))(v27) == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v49; + } + } + goto LABEL_108; + } + } +LABEL_94: + v49 = 0; + } + else + { + v46 = 0; + if ( !v51 ) + { + v60 = 0; +LABEL_19: + v11 = lpuexcpt; + if ( Buf > 10 ) + { + v10 = (unsigned __int8)lpuexcpt; + if ( (unsigned __int8)(lpuexcpt - 48) <= 9u ) + goto LABEL_22; + while ( (unsigned __int8)(v10 - 97) <= 5u ) + { + v12 = v11 - 87; + if ( v43 < v60 ) + goto LABEL_24; +LABEL_71: + v10 = v54 * v60; + v46 |= v40 - v12 < v54 * v60; + v13 = (_DWORD *)a1; + v60 = v54 * v60 + v12; + ++v47; + v14 = *(_DWORD *)(a1 + 8); + if ( v14 < *(_DWORD *)(a1 + 12) ) + goto LABEL_25; +LABEL_72: + (*(void (__fastcall **)(_DWORD *, unsigned int))(*v13 + 40))(v13, v10); + v13 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_26; + lpuexcpta = 1; +LABEL_27: + v15 = a3 == -1; + LOBYTE(v10) = v15 & (a2 != 0); + v50 = v10; + if ( (_BYTE)v10 ) + { + v10 = a2[3]; + v15 = 0; + if ( a2[2] >= v10 ) + { + v10 = (*(int (**)(void))(*a2 + 36))(); + v15 = 0; + if ( v10 == -1 ) + { + a2 = 0; + v15 = v50; + } + } + } + if ( lpuexcpta == v15 ) + { + v49 = 1; + goto LABEL_30; + } + v23 = BYTE4(a1); + if ( a1 <= 0xFFFFFFFF00000000LL ) + goto LABEL_78; + v33 = *(char **)(a1 + 8); + if ( (unsigned int)v33 < *(_DWORD *)(a1 + 12) ) + { + v23 = *v33; +LABEL_78: + lpuexcpt = v23; + goto LABEL_19; + } + v11 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v11; + if ( v11 != -1 ) + goto LABEL_19; + LODWORD(a1) = 0; + if ( Buf <= 10 ) + goto LABEL_94; + v10 = -1; + } + v10 -= 65; + if ( (unsigned __int8)v10 <= 5u ) + { + v12 = v11 - 55; + goto LABEL_23; + } + } + else if ( lpuexcpt > 47 && (char)(Buf + 48) > lpuexcpt ) + { +LABEL_22: + v12 = lpuexcpt - 48; +LABEL_23: + if ( v43 >= v60 ) + goto LABEL_71; +LABEL_24: + v13 = (_DWORD *)a1; + v46 = 1; + v14 = *(_DWORD *)(a1 + 8); + if ( v14 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_72; +LABEL_25: + HIDWORD(a1) = -1; + v13[2] = v14 + 1; +LABEL_26: + lpuexcpta = 0; + if ( v13[2] >= v13[3] ) + { + lpuexcpta = 0; + if ( (*(int (__fastcall **)(_DWORD *, unsigned int))(*v13 + 36))(v13, v10) == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = 1; + } + } + goto LABEL_27; + } + goto LABEL_94; + } + v35 = v51; + v60 = 0; + v51 = 0; + v49 = v35; + } +LABEL_30: + v16 = v63[0]; + if ( *((_DWORD *)v63[0] - 3) ) + { + std::string::push_back((int *)v63, (std::string *)(char)v47, v37); + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v55 + 2), *((_DWORD *)v55 + 3), v63) ) + *a5 = 4; + v16 = v63[0]; + if ( !v47 && !v53 && !*((_DWORD *)v63[0] - 3) ) + goto LABEL_33; + } + else if ( !v53 && !v47 ) + { + goto LABEL_33; + } + if ( v51 ) + { +LABEL_33: + *a6 = 0; + *a5 = 4; + goto LABEL_34; + } + if ( v46 ) + { + *a6 = v38 + 0x7FFFFFFF; + *a5 = 4; + } + else + { + v32 = -v60; + if ( !v38 ) + v32 = v60; + *a6 = v32; + } +LABEL_34: + if ( v49 ) + *a5 |= 2u; + lpuexcptb = a1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v16 - 1, 0xFFFFFFFF) > 0 ) + return lpuexcptb; +LABEL_123: + std::string::_Rep::_M_destroy((void *)(v16 - 12), (int)&v62); + return lpuexcptb; + } + v17 = *((_DWORD *)v16 - 1); + *((_DWORD *)v16 - 1) = v17 - 1; + if ( v17 <= 0 ) + goto LABEL_123; + return lpuexcptb; +} +// 4A0A39: variable 'v37' is possibly undefined +// 4A06D8: variable 'v10' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004A0D20) -------------------------------------------------------- +unsigned __int64 __stdcall std::num_get>::_M_extract_int( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + int *a6) +{ + int v6; // eax + _BYTE *v7; // eax + char v8; // al + int v9; // eax + unsigned int v10; // edx + int v11; // eax + int v12; // eax + _DWORD *v13; // ecx + unsigned int v14; // eax + char v15; // al + const char *v16; // ecx + int v17; // eax + _DWORD *v19; // ecx + unsigned int v20; // eax + bool v21; // al + _BYTE *v22; // eax + char v23; // al + char i; // al + _BYTE *v25; // eax + int v26; // eax + _DWORD *v27; // ecx + unsigned int v28; // eax + char v29; // al + char v30; // al + int v31; // edx + int v32; // eax + char *v33; // eax + char *v34; // eax + bool v35; // al + int v36; // eax + unsigned int v37; // [esp+4h] [ebp-94h] + bool v38; // [esp+1Fh] [ebp-79h] + size_t MaxCount; // [esp+20h] [ebp-78h] + int Buf; // [esp+24h] [ebp-74h] + void *Bufa; // [esp+24h] [ebp-74h] + unsigned int v42; // [esp+28h] [ebp-70h] + char v43; // [esp+28h] [ebp-70h] + int v44; // [esp+2Ch] [ebp-6Ch] + char v45; // [esp+2Ch] [ebp-6Ch] + int v46; // [esp+30h] [ebp-68h] + char v47; // [esp+34h] [ebp-64h] + char v48; // [esp+35h] [ebp-63h] + char v49; // [esp+35h] [ebp-63h] + bool v50; // [esp+36h] [ebp-62h] + char v51; // [esp+36h] [ebp-62h] + bool v52; // [esp+37h] [ebp-61h] + unsigned int v53; // [esp+38h] [ebp-60h] + struct _Unwind_Exception *v54; // [esp+3Ch] [ebp-5Ch] + char lpuexcpt; // [esp+40h] [ebp-58h] + char lpuexcpta; // [esp+40h] [ebp-58h] + unsigned __int64 lpuexcptb; // [esp+40h] [ebp-58h] + char lpuexcptc; // [esp+40h] [ebp-58h] + unsigned int v59; // [esp+48h] [ebp-50h] + char v60; // [esp+48h] [ebp-50h] + int v61; // [esp+8Bh] [ebp-Dh] BYREF + const char *v62[2]; // [esp+8Ch] [ebp-Ch] BYREF + + v54 = std::__use_cache>::operator()((int *)(a4 + 108)); + v6 = *(_DWORD *)(a4 + 12) & 0x4A; + v44 = v6; + if ( v6 == 64 ) + { + v53 = 8; +LABEL_4: + v50 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v50 ) + { + lpuexcpt = 0; + v46 = 0; + MaxCount = v53; + Buf = v53; + v52 = 0; + v38 = 0; + goto LABEL_17; + } + goto LABEL_5; + } + if ( v6 != 8 ) + { + v53 = 10; + goto LABEL_4; + } + v50 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v50 ) + { + MaxCount = 22; + lpuexcpt = 0; + v46 = 0; + v52 = 0; + v38 = 0; + v53 = 16; + Buf = 22; + goto LABEL_17; + } + v53 = 16; +LABEL_5: + LOBYTE(v7) = BYTE4(a1); + if ( !(_DWORD)a1 || HIDWORD(a1) != -1 ) + goto LABEL_7; + v7 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v7 < *(_DWORD *)(a1 + 12) ) + { + LOBYTE(v7) = *v7; +LABEL_7: + lpuexcpt = (char)v7; + goto LABEL_8; + } + v7 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v7 != (_BYTE *)-1 ) + goto LABEL_7; + LODWORD(a1) = 0; + lpuexcpt = -1; +LABEL_8: + v8 = *((_BYTE *)v54 + 16); + v38 = *((_BYTE *)v54 + 74) == (unsigned __int8)lpuexcpt; + if ( *((_BYTE *)v54 + 74) != lpuexcpt && *((_BYTE *)v54 + 75) != lpuexcpt + || v8 && *((_BYTE *)v54 + 37) == lpuexcpt + || *((_BYTE *)v54 + 36) == lpuexcpt ) + { + goto LABEL_45; + } + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v46 = 0; + v50 = std::istreambuf_iterator::equal(&a1, (int)&a2); + v52 = 0; + if ( !v50 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v8 = *((_BYTE *)v54 + 16); +LABEL_45: + v46 = 0; + v52 = 0; + while ( 1 ) + { + if ( v8 && *((_BYTE *)v54 + 37) == lpuexcpt || *((_BYTE *)v54 + 36) == lpuexcpt ) + { +LABEL_94: + v50 = 0; + goto LABEL_14; + } + if ( *((_BYTE *)v54 + 78) != lpuexcpt ) + break; + v21 = v53 == 10 || !v52; + if ( !v21 ) + goto LABEL_51; + v52 = v44 == 0 || v53 == 8; + if ( !v52 ) + { + ++v46; + v52 = v21; + goto LABEL_55; + } + v19 = (_DWORD *)a1; + v46 = 0; + v53 = 8; + v20 = *(_DWORD *)(a1 + 8); + if ( v20 < *(_DWORD *)(a1 + 12) ) + { +LABEL_56: + HIDWORD(a1) = -1; + v19[2] = v20 + 1; + goto LABEL_57; + } +LABEL_64: + (*(void (__fastcall **)(_DWORD *))(*v19 + 40))(v19); + v19 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( !(_DWORD)a1 ) + { + v51 = 1; + goto LABEL_58; + } +LABEL_57: + v51 = 0; + if ( v19[2] >= v19[3] && (*(int (__fastcall **)(_DWORD *))(*v19 + 36))(v19) == -1 ) + { + LODWORD(a1) = 0; + v51 = 1; + } +LABEL_58: + v60 = a3 == -1; + v43 = v60 & (a2 != 0); + if ( v43 ) + { + v60 = 0; + if ( a2[2] >= a2[3] && (*(int (**)(void))(*a2 + 36))() == -1 ) + { + a2 = 0; + v60 = v43; + } + } + if ( v51 == v60 ) + { + v50 = 1; + goto LABEL_14; + } + LOBYTE(v22) = BYTE4(a1); + if ( !(_DWORD)a1 || HIDWORD(a1) != -1 ) + goto LABEL_68; + v22 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v22 < *(_DWORD *)(a1 + 12) ) + { + LOBYTE(v22) = *v22; +LABEL_68: + lpuexcpt = (char)v22; + goto LABEL_69; + } + v22 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v22 != (_BYTE *)-1 ) + goto LABEL_68; + LODWORD(a1) = 0; + lpuexcpt = -1; +LABEL_69: + if ( !v52 ) + goto LABEL_94; + v8 = *((_BYTE *)v54 + 16); + } + if ( !v52 ) + goto LABEL_94; +LABEL_51: + if ( *((_BYTE *)v54 + 76) != lpuexcpt && *((_BYTE *)v54 + 77) != lpuexcpt ) + { + v50 = 0; + v52 = 1; + goto LABEL_14; + } + if ( v44 != 0 && v53 != 16 ) + { + v50 = 0; + v52 = 1; + MaxCount = v53; + Buf = v53; + goto LABEL_17; + } + v46 = 0; + v52 = 0; + v53 = 16; +LABEL_55: + v19 = (_DWORD *)a1; + v20 = *(_DWORD *)(a1 + 8); + if ( v20 < *(_DWORD *)(a1 + 12) ) + goto LABEL_56; + goto LABEL_64; + } +LABEL_14: + v9 = 22; + if ( v53 != 16 ) + v9 = v53; + MaxCount = v9; + Buf = v9; +LABEL_17: + v62[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v54 + 16) ) + std::string::reserve((int *)v62, (std::string *)0x20, v37); + v10 = 0xFFFFFFFF % v53; + v42 = 0xFFFFFFFF / v53; + v48 = *((_BYTE *)v54 + 100); + if ( v48 ) + { + if ( v50 ) + { + v59 = 0; + v45 = 0; + v48 = v50; + v50 = 0; + goto LABEL_33; + } + v45 = 0; + v59 = 0; + Bufa = (char *)v54 + 78; +LABEL_100: + for ( i = *((_BYTE *)v54 + 16); i && *((_BYTE *)v54 + 37) == lpuexcpt; i = *((_BYTE *)v54 + 16) ) + { + if ( !v46 ) + { + v48 = 0; + v50 = i; + goto LABEL_33; + } + std::string::push_back((int *)v62, (std::string *)(char)v46, v37); + v27 = (_DWORD *)a1; + v46 = 0; + v28 = *(_DWORD *)(a1 + 8); + if ( v28 < *(_DWORD *)(a1 + 12) ) + goto LABEL_109; +LABEL_118: + (*(void (__fastcall **)(_DWORD *))(*v27 + 40))(v27); + v27 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_110; + lpuexcptc = v48; +LABEL_111: + v29 = a3 == -1; + v47 = v29 & (a2 != 0); + if ( v47 ) + { + v29 = 0; + if ( a2[2] >= a2[3] ) + { + v31 = (*(int (**)(void))(*a2 + 36))(); + v29 = 0; + if ( v31 == -1 ) + { + a2 = 0; + v29 = v47; + } + } + } + if ( v29 == lpuexcptc ) + goto LABEL_33; + v30 = BYTE4(a1); + if ( a1 > 0xFFFFFFFF00000000LL ) + { + v34 = *(char **)(a1 + 8); + if ( (unsigned int)v34 >= *(_DWORD *)(a1 + 12) ) + { + v36 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v36; + if ( v36 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpt = -1; + } + goto LABEL_100; + } + v30 = *v34; + } + lpuexcpt = v30; + } + if ( lpuexcpt != *((_BYTE *)v54 + 36) ) + { + v25 = memchr(Bufa, lpuexcpt, MaxCount); + if ( v25 ) + { + v26 = v25 - (_BYTE *)Bufa; + if ( v26 > 15 ) + v26 -= 6; + if ( v42 < v59 ) + { + v45 = v48; + } + else + { + v45 |= ~v26 < v53 * v59; + ++v46; + v59 = v53 * v59 + v26; + } + v27 = (_DWORD *)a1; + v28 = *(_DWORD *)(a1 + 8); + if ( v28 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_118; +LABEL_109: + HIDWORD(a1) = -1; + v27[2] = v28 + 1; +LABEL_110: + lpuexcptc = 0; + if ( v27[2] >= v27[3] ) + { + lpuexcptc = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v27 + 36))(v27) == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v48; + } + } + goto LABEL_111; + } + } +LABEL_97: + v48 = 0; + } + else + { + v45 = 0; + if ( !v50 ) + { + v59 = 0; +LABEL_22: + v11 = lpuexcpt; + if ( Buf > 10 ) + { + v10 = (unsigned __int8)lpuexcpt; + if ( (unsigned __int8)(lpuexcpt - 48) <= 9u ) + goto LABEL_25; + while ( (unsigned __int8)(v10 - 97) <= 5u ) + { + v12 = v11 - 87; + if ( v42 < v59 ) + goto LABEL_27; +LABEL_74: + v10 = v53 * v59; + v45 |= ~v12 < v53 * v59; + v13 = (_DWORD *)a1; + v59 = v53 * v59 + v12; + ++v46; + v14 = *(_DWORD *)(a1 + 8); + if ( v14 < *(_DWORD *)(a1 + 12) ) + goto LABEL_28; +LABEL_75: + (*(void (__fastcall **)(_DWORD *, unsigned int))(*v13 + 40))(v13, v10); + v13 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_29; + lpuexcpta = 1; +LABEL_30: + v15 = a3 == -1; + LOBYTE(v10) = v15 & (a2 != 0); + v49 = v10; + if ( (_BYTE)v10 ) + { + v15 = 0; + if ( a2[2] >= a2[3] ) + { + v10 = (*(int (**)(void))(*a2 + 36))(); + v15 = 0; + if ( v10 == -1 ) + { + a2 = 0; + v15 = v49; + } + } + } + if ( lpuexcpta == v15 ) + { + v48 = 1; + goto LABEL_33; + } + v23 = BYTE4(a1); + if ( a1 <= 0xFFFFFFFF00000000LL ) + goto LABEL_81; + v33 = *(char **)(a1 + 8); + if ( (unsigned int)v33 < *(_DWORD *)(a1 + 12) ) + { + v23 = *v33; +LABEL_81: + lpuexcpt = v23; + goto LABEL_22; + } + v11 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v11; + if ( v11 != -1 ) + goto LABEL_22; + LODWORD(a1) = 0; + if ( Buf <= 10 ) + goto LABEL_97; + v10 = -1; + } + v10 -= 65; + if ( (unsigned __int8)v10 <= 5u ) + { + v12 = v11 - 55; + goto LABEL_26; + } + } + else if ( lpuexcpt > 47 && (char)(Buf + 48) > lpuexcpt ) + { +LABEL_25: + v12 = lpuexcpt - 48; +LABEL_26: + if ( v42 >= v59 ) + goto LABEL_74; +LABEL_27: + v13 = (_DWORD *)a1; + v45 = 1; + v14 = *(_DWORD *)(a1 + 8); + if ( v14 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_75; +LABEL_28: + HIDWORD(a1) = -1; + v13[2] = v14 + 1; +LABEL_29: + lpuexcpta = 0; + if ( v13[2] >= v13[3] ) + { + lpuexcpta = 0; + if ( (*(int (__fastcall **)(_DWORD *, unsigned int))(*v13 + 36))(v13, v10) == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = 1; + } + } + goto LABEL_30; + } + goto LABEL_97; + } + v35 = v50; + v59 = 0; + v50 = 0; + v48 = v35; + } +LABEL_33: + v16 = v62[0]; + if ( *((_DWORD *)v62[0] - 3) ) + { + std::string::push_back((int *)v62, (std::string *)(char)v46, v37); + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v54 + 2), *((_DWORD *)v54 + 3), v62) ) + *a5 = 4; + v16 = v62[0]; + if ( !v46 && !v52 && !*((_DWORD *)v62[0] - 3) ) + goto LABEL_36; + } + else if ( !v52 && !v46 ) + { + goto LABEL_36; + } + if ( v50 ) + { +LABEL_36: + *a6 = 0; + *a5 = 4; + goto LABEL_37; + } + if ( v45 ) + { + *a6 = -1; + *a5 = 4; + } + else + { + v32 = -v59; + if ( !v38 ) + v32 = v59; + *a6 = v32; + } +LABEL_37: + if ( v48 ) + *a5 |= 2u; + lpuexcptb = a1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v16 - 1, 0xFFFFFFFF) > 0 ) + return lpuexcptb; +LABEL_125: + std::string::_Rep::_M_destroy((void *)(v16 - 12), (int)&v61); + return lpuexcptb; + } + v17 = *((_DWORD *)v16 - 1); + *((_DWORD *)v16 - 1) = v17 - 1; + if ( v17 <= 0 ) + goto LABEL_125; + return lpuexcptb; +} +// 4A1579: variable 'v37' is possibly undefined +// 4A1227: variable 'v10' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004A1890) -------------------------------------------------------- +unsigned __int64 __stdcall std::num_get>::_M_extract_int( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + _WORD *a6) +{ + int v6; // eax + _BYTE *v7; // eax + char v8; // al + int v9; // eax + unsigned int v10; // edx + int v11; // eax + int v12; // eax + _DWORD *v13; // ecx + unsigned int v14; // eax + char v15; // al + const char *v16; // ecx + int v17; // eax + _DWORD *v19; // ecx + unsigned int v20; // eax + bool v21; // al + _BYTE *v22; // eax + char v23; // al + char i; // al + _BYTE *v25; // eax + int v26; // eax + _DWORD *v27; // ecx + unsigned int v28; // eax + char v29; // al + char v30; // al + int v31; // edx + int v32; // eax + char *v33; // eax + char *v34; // eax + bool v35; // al + bool v36; // al + int v37; // eax + unsigned int v38; // [esp+4h] [ebp-94h] + bool v39; // [esp+1Fh] [ebp-79h] + size_t MaxCount; // [esp+20h] [ebp-78h] + int Buf; // [esp+24h] [ebp-74h] + void *Bufa; // [esp+24h] [ebp-74h] + int v43; // [esp+28h] [ebp-70h] + char v44; // [esp+28h] [ebp-70h] + int v45; // [esp+2Ch] [ebp-6Ch] + char v46; // [esp+2Ch] [ebp-6Ch] + int v47; // [esp+30h] [ebp-68h] + char v48; // [esp+34h] [ebp-64h] + char v49; // [esp+35h] [ebp-63h] + char v50; // [esp+35h] [ebp-63h] + bool v51; // [esp+36h] [ebp-62h] + char v52; // [esp+36h] [ebp-62h] + bool v53; // [esp+37h] [ebp-61h] + int v54; // [esp+38h] [ebp-60h] + struct _Unwind_Exception *v55; // [esp+3Ch] [ebp-5Ch] + char lpuexcpt; // [esp+40h] [ebp-58h] + char lpuexcpta; // [esp+40h] [ebp-58h] + unsigned __int64 lpuexcptb; // [esp+40h] [ebp-58h] + char lpuexcptc; // [esp+40h] [ebp-58h] + unsigned __int16 v60; // [esp+48h] [ebp-50h] + char v61; // [esp+48h] [ebp-50h] + int v62; // [esp+8Bh] [ebp-Dh] BYREF + const char *v63[2]; // [esp+8Ch] [ebp-Ch] BYREF + + v55 = std::__use_cache>::operator()((int *)(a4 + 108)); + v6 = *(_DWORD *)(a4 + 12) & 0x4A; + v45 = v6; + if ( v6 == 64 ) + { + v54 = 8; +LABEL_4: + v51 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v51 ) + { + lpuexcpt = 0; + v47 = 0; + MaxCount = v54; + Buf = v54; + v53 = 0; + v39 = 0; + goto LABEL_17; + } + goto LABEL_5; + } + if ( v6 != 8 ) + { + v54 = 10; + goto LABEL_4; + } + v51 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v51 ) + { + MaxCount = 22; + lpuexcpt = 0; + v47 = 0; + v53 = 0; + v39 = 0; + v54 = 16; + Buf = 22; + goto LABEL_17; + } + v54 = 16; +LABEL_5: + LOBYTE(v7) = BYTE4(a1); + if ( !(_DWORD)a1 || HIDWORD(a1) != -1 ) + goto LABEL_7; + v7 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v7 < *(_DWORD *)(a1 + 12) ) + { + LOBYTE(v7) = *v7; +LABEL_7: + lpuexcpt = (char)v7; + goto LABEL_8; + } + v7 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v7 != (_BYTE *)-1 ) + goto LABEL_7; + LODWORD(a1) = 0; + lpuexcpt = -1; +LABEL_8: + v8 = *((_BYTE *)v55 + 16); + v39 = *((_BYTE *)v55 + 74) == (unsigned __int8)lpuexcpt; + if ( *((_BYTE *)v55 + 74) != lpuexcpt && *((_BYTE *)v55 + 75) != lpuexcpt + || v8 && *((_BYTE *)v55 + 37) == lpuexcpt + || *((_BYTE *)v55 + 36) == lpuexcpt ) + { + goto LABEL_45; + } + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v47 = 0; + v51 = std::istreambuf_iterator::equal(&a1, (int)&a2); + v53 = 0; + if ( !v51 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v8 = *((_BYTE *)v55 + 16); +LABEL_45: + v47 = 0; + v53 = 0; + while ( 1 ) + { + if ( v8 && *((_BYTE *)v55 + 37) == lpuexcpt || *((_BYTE *)v55 + 36) == lpuexcpt ) + { +LABEL_94: + v51 = 0; + goto LABEL_14; + } + if ( *((_BYTE *)v55 + 78) != lpuexcpt ) + break; + v21 = v54 == 10 || !v53; + if ( !v21 ) + goto LABEL_51; + v53 = v45 == 0 || v54 == 8; + if ( !v53 ) + { + ++v47; + v53 = v21; + goto LABEL_55; + } + v19 = (_DWORD *)a1; + v47 = 0; + v54 = 8; + v20 = *(_DWORD *)(a1 + 8); + if ( v20 < *(_DWORD *)(a1 + 12) ) + { +LABEL_56: + HIDWORD(a1) = -1; + v19[2] = v20 + 1; + goto LABEL_57; + } +LABEL_64: + (*(void (__fastcall **)(_DWORD *))(*v19 + 40))(v19); + v19 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( !(_DWORD)a1 ) + { + v52 = 1; + goto LABEL_58; + } +LABEL_57: + v52 = 0; + if ( v19[2] >= v19[3] && (*(int (__fastcall **)(_DWORD *))(*v19 + 36))(v19) == -1 ) + { + LODWORD(a1) = 0; + v52 = 1; + } +LABEL_58: + v61 = a3 == -1; + v44 = v61 & (a2 != 0); + if ( v44 ) + { + v61 = 0; + if ( a2[2] >= a2[3] && (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2) == -1 ) + { + a2 = 0; + v61 = v44; + } + } + if ( v52 == v61 ) + { + v51 = 1; + goto LABEL_14; + } + LOBYTE(v22) = BYTE4(a1); + if ( !(_DWORD)a1 || HIDWORD(a1) != -1 ) + goto LABEL_68; + v22 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v22 < *(_DWORD *)(a1 + 12) ) + { + LOBYTE(v22) = *v22; +LABEL_68: + lpuexcpt = (char)v22; + goto LABEL_69; + } + v22 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v22 != (_BYTE *)-1 ) + goto LABEL_68; + LODWORD(a1) = 0; + lpuexcpt = -1; +LABEL_69: + if ( !v53 ) + goto LABEL_94; + v8 = *((_BYTE *)v55 + 16); + } + if ( !v53 ) + goto LABEL_94; +LABEL_51: + if ( *((_BYTE *)v55 + 76) != lpuexcpt && *((_BYTE *)v55 + 77) != lpuexcpt ) + { + v51 = 0; + v53 = 1; + goto LABEL_14; + } + if ( v45 != 0 && v54 != 16 ) + { + v51 = 0; + v53 = 1; + MaxCount = v54; + Buf = v54; + goto LABEL_17; + } + v47 = 0; + v53 = 0; + v54 = 16; +LABEL_55: + v19 = (_DWORD *)a1; + v20 = *(_DWORD *)(a1 + 8); + if ( v20 < *(_DWORD *)(a1 + 12) ) + goto LABEL_56; + goto LABEL_64; + } +LABEL_14: + v9 = 22; + if ( v54 != 16 ) + v9 = v54; + MaxCount = v9; + Buf = v9; +LABEL_17: + v63[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v55 + 16) ) + std::string::reserve((int *)v63, (std::string *)0x20, v38); + v10 = 0xFFFF % v54; + v43 = 0xFFFF / v54; + v49 = *((_BYTE *)v55 + 100); + if ( v49 ) + { + if ( v51 ) + { + v36 = v51; + v46 = 0; + v51 = 0; + v49 = v36; + v60 = 0; + goto LABEL_33; + } + v46 = 0; + v60 = 0; + Bufa = (char *)v55 + 78; +LABEL_100: + for ( i = *((_BYTE *)v55 + 16); i && *((_BYTE *)v55 + 37) == lpuexcpt; i = *((_BYTE *)v55 + 16) ) + { + if ( !v47 ) + { + v49 = 0; + v51 = i; + goto LABEL_33; + } + std::string::push_back((int *)v63, (std::string *)(char)v47, v38); + v27 = (_DWORD *)a1; + v47 = 0; + v28 = *(_DWORD *)(a1 + 8); + if ( v28 < *(_DWORD *)(a1 + 12) ) + goto LABEL_109; +LABEL_118: + (*(void (__fastcall **)(_DWORD *))(*v27 + 40))(v27); + v27 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_110; + lpuexcptc = v49; +LABEL_111: + v29 = a3 == -1; + v48 = v29 & (a2 != 0); + if ( v48 ) + { + v29 = 0; + if ( a2[2] >= a2[3] ) + { + v31 = (*(int (**)(void))(*a2 + 36))(); + v29 = 0; + if ( v31 == -1 ) + { + a2 = 0; + v29 = v48; + } + } + } + if ( v29 == lpuexcptc ) + goto LABEL_33; + v30 = BYTE4(a1); + if ( a1 > 0xFFFFFFFF00000000LL ) + { + v34 = *(char **)(a1 + 8); + if ( (unsigned int)v34 >= *(_DWORD *)(a1 + 12) ) + { + v37 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v37; + if ( v37 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpt = -1; + } + goto LABEL_100; + } + v30 = *v34; + } + lpuexcpt = v30; + } + if ( lpuexcpt != *((_BYTE *)v55 + 36) ) + { + v25 = memchr(Bufa, lpuexcpt, MaxCount); + if ( v25 ) + { + v26 = v25 - (_BYTE *)Bufa; + if ( v26 > 15 ) + v26 -= 6; + if ( (unsigned __int16)v43 < v60 ) + { + v46 = v49; + } + else + { + v46 |= (unsigned __int16)(v54 * v60) > 0xFFFF - v26; + ++v47; + v60 = v54 * v60 + v26; + } + v27 = (_DWORD *)a1; + v28 = *(_DWORD *)(a1 + 8); + if ( v28 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_118; +LABEL_109: + HIDWORD(a1) = -1; + v27[2] = v28 + 1; +LABEL_110: + lpuexcptc = 0; + if ( v27[2] >= v27[3] ) + { + lpuexcptc = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v27 + 36))(v27) == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v49; + } + } + goto LABEL_111; + } + } +LABEL_97: + v49 = 0; + } + else + { + v46 = 0; + if ( !v51 ) + { + v60 = 0; +LABEL_22: + v11 = lpuexcpt; + if ( Buf > 10 ) + { + v10 = (unsigned __int8)lpuexcpt; + if ( (unsigned __int8)(lpuexcpt - 48) <= 9u ) + goto LABEL_25; + while ( (unsigned __int8)(v10 - 97) <= 5u ) + { + v12 = v11 - 87; + if ( (unsigned __int16)v43 < v60 ) + goto LABEL_27; +LABEL_74: + v10 = v60; + LOWORD(v10) = v54 * v60; + v46 |= (unsigned __int16)(v54 * v60) > 0xFFFF - v12; + v13 = (_DWORD *)a1; + v60 = v54 * v60 + v12; + ++v47; + v14 = *(_DWORD *)(a1 + 8); + if ( v14 < *(_DWORD *)(a1 + 12) ) + goto LABEL_28; +LABEL_75: + (*(void (__fastcall **)(_DWORD *, unsigned int))(*v13 + 40))(v13, v10); + v13 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_29; + lpuexcpta = 1; +LABEL_30: + v15 = a3 == -1; + LOBYTE(v10) = v15 & (a2 != 0); + v50 = v10; + if ( (_BYTE)v10 ) + { + v10 = a2[3]; + v15 = 0; + if ( a2[2] >= v10 ) + { + v10 = (*(int (**)(void))(*a2 + 36))(); + v15 = 0; + if ( v10 == -1 ) + { + a2 = 0; + v15 = v50; + } + } + } + if ( lpuexcpta == v15 ) + { + v49 = 1; + goto LABEL_33; + } + v23 = BYTE4(a1); + if ( a1 <= 0xFFFFFFFF00000000LL ) + goto LABEL_81; + v33 = *(char **)(a1 + 8); + if ( (unsigned int)v33 < *(_DWORD *)(a1 + 12) ) + { + v23 = *v33; +LABEL_81: + lpuexcpt = v23; + goto LABEL_22; + } + v11 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v11; + if ( v11 != -1 ) + goto LABEL_22; + LODWORD(a1) = 0; + if ( Buf <= 10 ) + goto LABEL_97; + v10 = -1; + } + v10 -= 65; + if ( (unsigned __int8)v10 <= 5u ) + { + v12 = v11 - 55; + goto LABEL_26; + } + } + else if ( lpuexcpt > 47 && (char)(Buf + 48) > lpuexcpt ) + { +LABEL_25: + v12 = lpuexcpt - 48; +LABEL_26: + if ( (unsigned __int16)v43 >= v60 ) + goto LABEL_74; +LABEL_27: + v13 = (_DWORD *)a1; + v46 = 1; + v14 = *(_DWORD *)(a1 + 8); + if ( v14 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_75; +LABEL_28: + HIDWORD(a1) = -1; + v13[2] = v14 + 1; +LABEL_29: + lpuexcpta = 0; + if ( v13[2] >= v13[3] ) + { + lpuexcpta = 0; + if ( (*(int (__fastcall **)(_DWORD *, unsigned int))(*v13 + 36))(v13, v10) == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = 1; + } + } + goto LABEL_30; + } + goto LABEL_97; + } + v35 = v51; + v51 = 0; + v49 = v35; + v60 = 0; + } +LABEL_33: + v16 = v63[0]; + if ( *((_DWORD *)v63[0] - 3) ) + { + std::string::push_back((int *)v63, (std::string *)(char)v47, v38); + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v55 + 2), *((_DWORD *)v55 + 3), v63) ) + *a5 = 4; + v16 = v63[0]; + if ( !v47 && !v53 && !*((_DWORD *)v63[0] - 3) ) + goto LABEL_36; + } + else if ( !v53 && !v47 ) + { + goto LABEL_36; + } + if ( v51 ) + { +LABEL_36: + *a6 = 0; + *a5 = 4; + goto LABEL_37; + } + if ( v46 ) + { + *a6 = -1; + *a5 = 4; + } + else + { + v32 = -v60; + if ( !v39 ) + LOWORD(v32) = v60; + *a6 = v32; + } +LABEL_37: + if ( v49 ) + *a5 |= 2u; + lpuexcptb = a1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v16 - 1, 0xFFFFFFFF) > 0 ) + return lpuexcptb; +LABEL_125: + std::string::_Rep::_M_destroy((void *)(v16 - 12), (int)&v62); + return lpuexcptb; + } + v17 = *((_DWORD *)v16 - 1); + *((_DWORD *)v16 - 1) = v17 - 1; + if ( v17 <= 0 ) + goto LABEL_125; + return lpuexcptb; +} +// 4A2101: variable 'v38' is possibly undefined +// 4A1DA0: variable 'v10' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004A2410) -------------------------------------------------------- +unsigned __int64 __stdcall std::num_get>::_M_extract_int( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + int *a6) +{ + int v6; // eax + char v7; // dl + char v8; // al + int v9; // eax + unsigned __int64 v10; // kr00_8 + int v11; // esi + int v12; // esi + _DWORD *v13; // ecx + unsigned int v14; // eax + char v15; // al + const char *v16; // ecx + int *v17; // eax + int v18; // eax + _DWORD *v20; // ecx + unsigned int v21; // eax + bool v22; // al + _BYTE *v23; // eax + char v24; // al + char v25; // al + int v26; // eax + unsigned int v27; // edx + int *v28; // esi + _DWORD *v29; // eax + int v30; // edx + char v31; // al + _BYTE *v32; // eax + int v33; // esi + _DWORD *v34; // ecx + unsigned int v35; // eax + char v36; // al + char v37; // al + int v38; // edx + char *v39; // eax + char *v40; // eax + bool v41; // al + int v42; // eax + int v43; // eax + unsigned int v44; // [esp+4h] [ebp-B4h] + char v45; // [esp+4h] [ebp-B4h] + char v46; // [esp+1Bh] [ebp-9Dh] + size_t MaxCount; // [esp+1Ch] [ebp-9Ch] + unsigned __int64 v48; // [esp+20h] [ebp-98h] + int Buf; // [esp+28h] [ebp-90h] + void *Bufa; // [esp+28h] [ebp-90h] + char v51; // [esp+30h] [ebp-88h] + int v52; // [esp+34h] [ebp-84h] + char v53; // [esp+34h] [ebp-84h] + int v54; // [esp+38h] [ebp-80h] + int v55; // [esp+40h] [ebp-78h] + bool v56; // [esp+44h] [ebp-74h] + char v57; // [esp+45h] [ebp-73h] + char v58; // [esp+45h] [ebp-73h] + bool v59; // [esp+46h] [ebp-72h] + char v60; // [esp+46h] [ebp-72h] + bool v61; // [esp+47h] [ebp-71h] + unsigned __int64 v62; // [esp+48h] [ebp-70h] + char v63; // [esp+48h] [ebp-70h] + char lpuexcpt; // [esp+50h] [ebp-68h] + char lpuexcpta; // [esp+50h] [ebp-68h] + unsigned __int64 lpuexcptb; // [esp+50h] [ebp-68h] + char lpuexcptc; // [esp+50h] [ebp-68h] + struct _Unwind_Exception *v68; // [esp+58h] [ebp-60h] + int v69; // [esp+9Bh] [ebp-1Dh] BYREF + const char *v70[7]; // [esp+9Ch] [ebp-1Ch] BYREF + + v68 = std::__use_cache>::operator()((int *)(a4 + 108)); + v6 = *(_DWORD *)(a4 + 12) & 0x4A; + v52 = v6; + if ( v6 == 64 ) + { + v54 = 8; +LABEL_4: + v59 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v59 ) + { + lpuexcpt = 0; + v55 = 0; + MaxCount = v54; + Buf = v54; + v61 = 0; + v56 = 0; + goto LABEL_14; + } + goto LABEL_5; + } + if ( v6 != 8 ) + { + v54 = 10; + goto LABEL_4; + } + v59 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v59 ) + { + MaxCount = 22; + lpuexcpt = 0; + v55 = 0; + v61 = 0; + v56 = 0; + v54 = 16; + Buf = 22; + goto LABEL_14; + } + v54 = 16; +LABEL_5: + v7 = std::istreambuf_iterator::_M_get((int)&a1); + lpuexcpt = v7; + v56 = *((_BYTE *)v68 + 74) == (unsigned __int8)v7; + if ( *((_BYTE *)v68 + 74) == v7 ) + { + v8 = *((_BYTE *)v68 + 16); + } + else + { + v8 = *((_BYTE *)v68 + 16); + if ( *((_BYTE *)v68 + 75) != v7 ) + { +LABEL_44: + v55 = 0; + v61 = 0; + while ( 1 ) + { + if ( v8 && *((_BYTE *)v68 + 37) == lpuexcpt || *((_BYTE *)v68 + 36) == lpuexcpt ) + { +LABEL_95: + v59 = 0; + goto LABEL_11; + } + if ( *((_BYTE *)v68 + 78) != lpuexcpt ) + break; + v22 = v54 == 10 || !v61; + if ( !v22 ) + goto LABEL_50; + v61 = v54 == 8 || v52 == 0; + if ( !v61 ) + { + ++v55; + v61 = v22; + goto LABEL_54; + } + v20 = (_DWORD *)a1; + v55 = 0; + v54 = 8; + v21 = *(_DWORD *)(a1 + 8); + if ( v21 < *(_DWORD *)(a1 + 12) ) + { +LABEL_55: + HIDWORD(a1) = -1; + v20[2] = v21 + 1; + goto LABEL_56; + } +LABEL_63: + (*(void (__fastcall **)(_DWORD *))(*v20 + 40))(v20); + v20 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( !(_DWORD)a1 ) + { + v60 = 1; + goto LABEL_57; + } +LABEL_56: + v60 = 0; + if ( v20[2] >= v20[3] && (*(int (__fastcall **)(_DWORD *))(*v20 + 36))(v20) == -1 ) + { + LODWORD(a1) = 0; + v60 = 1; + } +LABEL_57: + v63 = a3 == -1; + v51 = v63 & (a2 != 0); + if ( v51 ) + { + v63 = 0; + if ( a2[2] >= a2[3] && (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2) == -1 ) + { + a2 = 0; + v63 = v51; + } + } + if ( v63 == v60 ) + { + v59 = 1; + goto LABEL_11; + } + LOBYTE(v23) = BYTE4(a1); + if ( !(_DWORD)a1 || HIDWORD(a1) != -1 ) + goto LABEL_67; + v23 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v23 < *(_DWORD *)(a1 + 12) ) + { + LOBYTE(v23) = *v23; +LABEL_67: + lpuexcpt = (char)v23; + goto LABEL_68; + } + v23 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v23 != (_BYTE *)-1 ) + goto LABEL_67; + LODWORD(a1) = 0; + lpuexcpt = -1; +LABEL_68: + if ( !v61 ) + goto LABEL_95; + v8 = *((_BYTE *)v68 + 16); + } + if ( !v61 ) + goto LABEL_95; +LABEL_50: + if ( *((_BYTE *)v68 + 76) != lpuexcpt && *((_BYTE *)v68 + 77) != lpuexcpt ) + { + v59 = 0; + v61 = 1; + goto LABEL_11; + } + if ( v52 != 0 && v54 != 16 ) + { + v59 = 0; + v61 = 1; + MaxCount = v54; + Buf = v54; + goto LABEL_14; + } + v55 = 0; + v61 = 0; + v54 = 16; +LABEL_54: + v20 = (_DWORD *)a1; + v21 = *(_DWORD *)(a1 + 8); + if ( v21 < *(_DWORD *)(a1 + 12) ) + goto LABEL_55; + goto LABEL_63; + } + } + if ( v8 && *((_BYTE *)v68 + 37) == v7 || *((_BYTE *)v68 + 36) == v7 ) + goto LABEL_44; + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v55 = 0; + v59 = std::istreambuf_iterator::equal(&a1, (int)&a2); + v61 = 0; + if ( !v59 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v8 = *((_BYTE *)v68 + 16); + goto LABEL_44; + } +LABEL_11: + v9 = 22; + if ( v54 != 16 ) + v9 = v54; + MaxCount = v9; + Buf = v9; +LABEL_14: + v70[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v68 + 16) ) + std::string::reserve((int *)v70, (std::string *)0x20, v44); + v48 = 0x8000000000000000LL; + if ( !v56 ) + v48 = 0x7FFFFFFFFFFFFFFFLL; + v10 = v48 / v54; + v57 = *((_BYTE *)v68 + 100); + if ( !v57 ) + { + v53 = 0; + if ( v59 ) + { + v41 = v59; + v62 = 0LL; + v59 = 0; + v57 = v41; + goto LABEL_32; + } + v62 = 0LL; +LABEL_21: + v11 = lpuexcpt; + if ( Buf <= 10 ) + { + if ( lpuexcpt > 47 && (char)(Buf + 48) > lpuexcpt ) + { +LABEL_24: + v12 = lpuexcpt - 48; + goto LABEL_25; + } +LABEL_98: + v57 = 0; + goto LABEL_32; + } + v24 = lpuexcpt; + if ( (unsigned __int8)(lpuexcpt - 48) <= 9u ) + goto LABEL_24; + while ( 1 ) + { + if ( (unsigned __int8)(v24 - 97) > 5u ) + { + if ( (unsigned __int8)(v24 - 65) > 5u ) + goto LABEL_98; + v12 = v11 - 55; + } + else + { + v12 = v11 - 87; + } +LABEL_25: + if ( v10 >= v62 ) + { + v53 |= v48 - v12 < v54 * v62; + v13 = (_DWORD *)a1; + v62 = v54 * v62 + v12; + ++v55; + v14 = *(_DWORD *)(a1 + 8); + if ( v14 < *(_DWORD *)(a1 + 12) ) + { +LABEL_27: + HIDWORD(a1) = -1; + v13[2] = v14 + 1; + goto LABEL_28; + } + } + else + { + v13 = (_DWORD *)a1; + v53 = 1; + v14 = *(_DWORD *)(a1 + 8); + if ( v14 < *(_DWORD *)(a1 + 12) ) + goto LABEL_27; + } + (*(void (__fastcall **)(_DWORD *))(*v13 + 40))(v13); + v13 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( !(_DWORD)a1 ) + { + lpuexcpta = 1; + goto LABEL_29; + } +LABEL_28: + lpuexcpta = 0; + if ( v13[2] >= v13[3] ) + { + lpuexcpta = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v13 + 36))(v13) == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = 1; + } + } +LABEL_29: + v15 = a3 == -1; + v58 = v15 & (a2 != 0); + if ( v58 ) + { + v15 = 0; + if ( a2[2] >= a2[3] ) + { + v30 = (*(int (**)(void))(*a2 + 36))(); + v15 = 0; + if ( v30 == -1 ) + { + a2 = 0; + v15 = v58; + } + } + } + if ( lpuexcpta == v15 ) + { + v57 = 1; + goto LABEL_32; + } + v25 = BYTE4(a1); + if ( a1 <= 0xFFFFFFFF00000000LL ) + goto LABEL_80; + v39 = *(char **)(a1 + 8); + if ( (unsigned int)v39 < *(_DWORD *)(a1 + 12) ) + { + v25 = *v39; +LABEL_80: + lpuexcpt = v25; + goto LABEL_21; + } + v42 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v42; + v11 = v42; + if ( v42 != -1 ) + goto LABEL_21; + LODWORD(a1) = 0; + if ( Buf <= 10 ) + goto LABEL_98; + v24 = -1; + } + } + if ( v59 ) + { + v62 = 0LL; + v57 = v59; + v53 = 0; + v59 = 0; + } + else + { + v53 = 0; + v62 = 0LL; + Bufa = (char *)v68 + 78; +LABEL_101: + v31 = *((_BYTE *)v68 + 16); + if ( !v31 || *((_BYTE *)v68 + 37) != lpuexcpt ) + { +LABEL_103: + if ( lpuexcpt == *((_BYTE *)v68 + 36) ) + goto LABEL_98; + v32 = memchr(Bufa, lpuexcpt, MaxCount); + if ( !v32 ) + goto LABEL_98; + v33 = v32 - (_BYTE *)Bufa; + if ( v32 - (_BYTE *)Bufa > 15 ) + v33 -= 6; + if ( v10 < v62 ) + { + v53 = v57; + } + else + { + v53 |= v48 - v33 < v54 * v62; + ++v55; + v62 = v54 * v62 + v33; + } + v34 = (_DWORD *)a1; + v35 = *(_DWORD *)(a1 + 8); + if ( v35 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_120; +LABEL_110: + HIDWORD(a1) = -1; + v34[2] = v35 + 1; +LABEL_111: + lpuexcptc = 0; + if ( v34[2] >= v34[3] ) + { + lpuexcptc = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v34 + 36))(v34) == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v57; + } + } + goto LABEL_112; + } + while ( v55 ) + { + std::string::push_back((int *)v70, (std::string *)(char)v55, v45); + v34 = (_DWORD *)a1; + v55 = 0; + v35 = *(_DWORD *)(a1 + 8); + if ( v35 < *(_DWORD *)(a1 + 12) ) + goto LABEL_110; +LABEL_120: + (*(void (__fastcall **)(_DWORD *))(*v34 + 40))(v34); + v34 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_111; + lpuexcptc = v57; +LABEL_112: + v36 = a3 == -1; + v46 = v36 & (a2 != 0); + if ( v46 ) + { + v36 = 0; + if ( a2[2] >= a2[3] ) + { + v38 = (*(int (**)(void))(*a2 + 36))(); + v36 = 0; + if ( v38 == -1 ) + { + a2 = 0; + v36 = v46; + } + } + } + if ( v36 == lpuexcptc ) + goto LABEL_32; + v37 = BYTE4(a1); + if ( (_DWORD)a1 && HIDWORD(a1) == -1 ) + { + v40 = *(char **)(a1 + 8); + if ( (unsigned int)v40 >= *(_DWORD *)(a1 + 12) ) + { + v43 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v43; + if ( v43 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpt = -1; + } + goto LABEL_101; + } + v37 = *v40; + } + lpuexcpt = v37; + v31 = *((_BYTE *)v68 + 16); + if ( !v31 || *((_BYTE *)v68 + 37) != lpuexcpt ) + goto LABEL_103; + } + v57 = 0; + v59 = v31; + } +LABEL_32: + v16 = v70[0]; + if ( *((_DWORD *)v70[0] - 3) ) + { + std::string::push_back((int *)v70, (std::string *)(char)v55, v45); + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v68 + 2), *((_DWORD *)v68 + 3), v70) ) + *a5 = 4; + v16 = v70[0]; + if ( !v55 && !v61 && !*((_DWORD *)v70[0] - 3) ) + goto LABEL_35; + } + else if ( !v61 && !v55 ) + { + goto LABEL_35; + } + if ( v59 ) + { +LABEL_35: + v17 = a6; + *a6 = 0; + v17[1] = 0; + *a5 = 4; + goto LABEL_36; + } + if ( v53 ) + { + v26 = 0; + v27 = 0x80000000; + if ( !v56 ) + { + v26 = -1; + v27 = 0x7FFFFFFF; + } + v28 = a6; + *a6 = v26; + v29 = a5; + v28[1] = v27; + *v29 = 4; + } + else + { + if ( v56 ) + v62 = -(__int64)v62; + *(_QWORD *)a6 = v62; + } +LABEL_36: + if ( v57 ) + *a5 |= 2u; + lpuexcptb = a1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v16 - 1, 0xFFFFFFFF) > 0 ) + return lpuexcptb; +LABEL_127: + std::string::_Rep::_M_destroy((void *)(v16 - 12), (int)&v69); + return lpuexcptb; + } + v18 = *((_DWORD *)v16 - 1); + *((_DWORD *)v16 - 1) = v18 - 1; + if ( v18 <= 0 ) + goto LABEL_127; + return lpuexcptb; +} +// 4A2DA9: variable 'v44' is possibly undefined +// 4A2A69: variable 'v45' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004A30C0) -------------------------------------------------------- +unsigned __int64 __stdcall std::num_get>::_M_extract_int( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + _DWORD *a6) +{ + int v6; // eax + char v7; // dl + char v8; // al + int v9; // eax + unsigned __int64 v10; // kr08_8 + int v11; // eax + int v12; // esi + _DWORD *v13; // ecx + unsigned int v14; // eax + char v15; // al + const char *v16; // ecx + _DWORD *v17; // eax + int v18; // eax + _DWORD *v20; // ecx + unsigned int v21; // eax + bool v22; // al + _BYTE *v23; // eax + char v24; // dl + char v25; // al + int v26; // edx + char v27; // al + _BYTE *v28; // eax + int v29; // esi + _DWORD *v30; // ecx + unsigned int v31; // eax + char v32; // al + char v33; // al + int v34; // edx + _DWORD *v35; // eax + char *v36; // eax + char *v37; // eax + bool v38; // al + int v39; // eax + unsigned int v40; // [esp+4h] [ebp-A4h] + char v41; // [esp+4h] [ebp-A4h] + bool v42; // [esp+13h] [ebp-95h] + size_t MaxCount; // [esp+14h] [ebp-94h] + int Buf; // [esp+18h] [ebp-90h] + void *Bufa; // [esp+18h] [ebp-90h] + char v46; // [esp+20h] [ebp-88h] + int v47; // [esp+24h] [ebp-84h] + char v48; // [esp+24h] [ebp-84h] + int v49; // [esp+28h] [ebp-80h] + int v50; // [esp+30h] [ebp-78h] + char v51; // [esp+34h] [ebp-74h] + char v52; // [esp+35h] [ebp-73h] + char v53; // [esp+35h] [ebp-73h] + bool v54; // [esp+36h] [ebp-72h] + char v55; // [esp+36h] [ebp-72h] + bool v56; // [esp+37h] [ebp-71h] + unsigned __int64 v57; // [esp+38h] [ebp-70h] + char v58; // [esp+38h] [ebp-70h] + char lpuexcpt; // [esp+40h] [ebp-68h] + char lpuexcpta; // [esp+40h] [ebp-68h] + unsigned __int64 lpuexcptb; // [esp+40h] [ebp-68h] + char lpuexcptc; // [esp+40h] [ebp-68h] + struct _Unwind_Exception *v63; // [esp+48h] [ebp-60h] + int v64; // [esp+8Bh] [ebp-1Dh] BYREF + const char *v65[7]; // [esp+8Ch] [ebp-1Ch] BYREF + + v63 = std::__use_cache>::operator()((int *)(a4 + 108)); + v6 = *(_DWORD *)(a4 + 12) & 0x4A; + v47 = v6; + if ( v6 == 64 ) + { + v49 = 8; +LABEL_4: + v54 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v54 ) + { + lpuexcpt = 0; + v50 = 0; + MaxCount = v49; + Buf = v49; + v56 = 0; + v42 = 0; + goto LABEL_14; + } + goto LABEL_5; + } + if ( v6 != 8 ) + { + v49 = 10; + goto LABEL_4; + } + v54 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v54 ) + { + MaxCount = 22; + lpuexcpt = 0; + v50 = 0; + v56 = 0; + v42 = 0; + v49 = 16; + Buf = 22; + goto LABEL_14; + } + v49 = 16; +LABEL_5: + v7 = std::istreambuf_iterator::_M_get((int)&a1); + lpuexcpt = v7; + v42 = *((_BYTE *)v63 + 74) == (unsigned __int8)v7; + if ( *((_BYTE *)v63 + 74) == v7 ) + { + v8 = *((_BYTE *)v63 + 16); + } + else + { + v8 = *((_BYTE *)v63 + 16); + if ( *((_BYTE *)v63 + 75) != v7 ) + { +LABEL_42: + v50 = 0; + v56 = 0; + while ( 1 ) + { + if ( v8 && *((_BYTE *)v63 + 37) == lpuexcpt || *((_BYTE *)v63 + 36) == lpuexcpt ) + { +LABEL_94: + v54 = 0; + goto LABEL_11; + } + if ( *((_BYTE *)v63 + 78) != lpuexcpt ) + break; + v22 = v49 == 10 || !v56; + if ( !v22 ) + goto LABEL_48; + v56 = v49 == 8 || v47 == 0; + if ( !v56 ) + { + ++v50; + v56 = v22; + goto LABEL_52; + } + v20 = (_DWORD *)a1; + v50 = 0; + v49 = 8; + v21 = *(_DWORD *)(a1 + 8); + if ( v21 < *(_DWORD *)(a1 + 12) ) + { +LABEL_53: + HIDWORD(a1) = -1; + v20[2] = v21 + 1; + goto LABEL_54; + } +LABEL_61: + (*(void (__fastcall **)(_DWORD *))(*v20 + 40))(v20); + v20 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( !(_DWORD)a1 ) + { + v55 = 1; + goto LABEL_55; + } +LABEL_54: + v55 = 0; + if ( v20[2] >= v20[3] && (*(int (__fastcall **)(_DWORD *))(*v20 + 36))(v20) == -1 ) + { + LODWORD(a1) = 0; + v55 = 1; + } +LABEL_55: + v58 = a3 == -1; + v46 = v58 & (a2 != 0); + if ( v46 ) + { + v58 = 0; + if ( a2[2] >= a2[3] && (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2) == -1 ) + { + a2 = 0; + v58 = v46; + } + } + if ( v58 == v55 ) + { + v54 = 1; + goto LABEL_11; + } + LOBYTE(v23) = BYTE4(a1); + if ( !(_DWORD)a1 || HIDWORD(a1) != -1 ) + goto LABEL_65; + v23 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v23 < *(_DWORD *)(a1 + 12) ) + { + LOBYTE(v23) = *v23; +LABEL_65: + lpuexcpt = (char)v23; + goto LABEL_66; + } + v23 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v23 != (_BYTE *)-1 ) + goto LABEL_65; + LODWORD(a1) = 0; + lpuexcpt = -1; +LABEL_66: + if ( !v56 ) + goto LABEL_94; + v8 = *((_BYTE *)v63 + 16); + } + if ( !v56 ) + goto LABEL_94; +LABEL_48: + if ( *((_BYTE *)v63 + 76) != lpuexcpt && *((_BYTE *)v63 + 77) != lpuexcpt ) + { + v54 = 0; + v56 = 1; + goto LABEL_11; + } + if ( v47 != 0 && v49 != 16 ) + { + v54 = 0; + v56 = 1; + MaxCount = v49; + Buf = v49; + goto LABEL_14; + } + v50 = 0; + v56 = 0; + v49 = 16; +LABEL_52: + v20 = (_DWORD *)a1; + v21 = *(_DWORD *)(a1 + 8); + if ( v21 < *(_DWORD *)(a1 + 12) ) + goto LABEL_53; + goto LABEL_61; + } + } + if ( v8 && *((_BYTE *)v63 + 37) == v7 || *((_BYTE *)v63 + 36) == v7 ) + goto LABEL_42; + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v50 = 0; + v54 = std::istreambuf_iterator::equal(&a1, (int)&a2); + v56 = 0; + if ( !v54 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v8 = *((_BYTE *)v63 + 16); + goto LABEL_42; + } +LABEL_11: + v9 = 22; + if ( v49 != 16 ) + v9 = v49; + MaxCount = v9; + Buf = v9; +LABEL_14: + v65[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v63 + 16) ) + std::string::reserve((int *)v65, (std::string *)0x20, v40); + v10 = 0xFFFFFFFFFFFFFFFFLL / v49; + v52 = *((_BYTE *)v63 + 100); + if ( !v52 ) + { + v48 = 0; + if ( v54 ) + { + v38 = v54; + v57 = 0LL; + v54 = 0; + v52 = v38; + goto LABEL_30; + } + v57 = 0LL; +LABEL_19: + v11 = lpuexcpt; + if ( Buf <= 10 ) + { + if ( lpuexcpt > 47 && (char)(Buf + 48) > lpuexcpt ) + { +LABEL_22: + v12 = lpuexcpt - 48; + goto LABEL_23; + } +LABEL_95: + v52 = 0; + goto LABEL_30; + } + v24 = lpuexcpt; + if ( (unsigned __int8)(lpuexcpt - 48) <= 9u ) + goto LABEL_22; + while ( 1 ) + { + v12 = v11 - 87; + if ( (unsigned __int8)(v24 - 97) > 5u ) + { + if ( (unsigned __int8)(v24 - 65) > 5u ) + goto LABEL_95; + v12 = v11 - 55; + } +LABEL_23: + if ( v10 >= v57 ) + { + v48 |= __PAIR64__(~(v12 >> 31), ~v12) < v49 * v57; + v13 = (_DWORD *)a1; + ++v50; + v57 = v49 * v57 + v12; + v14 = *(_DWORD *)(a1 + 8); + if ( v14 < *(_DWORD *)(a1 + 12) ) + { +LABEL_25: + HIDWORD(a1) = -1; + v13[2] = v14 + 1; + goto LABEL_26; + } + } + else + { + v13 = (_DWORD *)a1; + v48 = 1; + v14 = *(_DWORD *)(a1 + 8); + if ( v14 < *(_DWORD *)(a1 + 12) ) + goto LABEL_25; + } + (*(void (__fastcall **)(_DWORD *))(*v13 + 40))(v13); + v13 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( !(_DWORD)a1 ) + { + lpuexcpta = 1; + goto LABEL_27; + } +LABEL_26: + lpuexcpta = 0; + if ( v13[2] >= v13[3] ) + { + lpuexcpta = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v13 + 36))(v13) == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = 1; + } + } +LABEL_27: + v15 = a3 == -1; + v53 = v15 & (a2 != 0); + if ( v53 ) + { + v15 = 0; + if ( a2[2] >= a2[3] ) + { + v26 = (*(int (**)(void))(*a2 + 36))(); + v15 = 0; + if ( v26 == -1 ) + { + a2 = 0; + v15 = v53; + } + } + } + if ( v15 == lpuexcpta ) + { + v52 = 1; + goto LABEL_30; + } + v25 = BYTE4(a1); + if ( a1 <= 0xFFFFFFFF00000000LL ) + goto LABEL_79; + v36 = *(char **)(a1 + 8); + if ( (unsigned int)v36 < *(_DWORD *)(a1 + 12) ) + { + v25 = *v36; +LABEL_79: + lpuexcpt = v25; + goto LABEL_19; + } + v11 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v11; + if ( v11 != -1 ) + goto LABEL_19; + LODWORD(a1) = 0; + if ( Buf <= 10 ) + goto LABEL_95; + v24 = -1; + } + } + if ( v54 ) + { + v57 = 0LL; + v52 = v54; + v48 = 0; + v54 = 0; + } + else + { + v48 = 0; + v57 = 0LL; + Bufa = (char *)v63 + 78; +LABEL_98: + v27 = *((_BYTE *)v63 + 16); + if ( !v27 || *((_BYTE *)v63 + 37) != lpuexcpt ) + { +LABEL_100: + if ( lpuexcpt == *((_BYTE *)v63 + 36) ) + goto LABEL_95; + v28 = memchr(Bufa, lpuexcpt, MaxCount); + if ( !v28 ) + goto LABEL_95; + v29 = v28 - (_BYTE *)Bufa; + if ( v28 - (_BYTE *)Bufa > 15 ) + v29 -= 6; + if ( v10 < v57 ) + { + v48 = v52; + } + else + { + v48 |= __PAIR64__(~(v29 >> 31), ~v29) < v49 * v57; + v57 = v49 * v57 + v29; + ++v50; + } + v30 = (_DWORD *)a1; + v31 = *(_DWORD *)(a1 + 8); + if ( v31 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_117; +LABEL_107: + HIDWORD(a1) = -1; + v30[2] = v31 + 1; +LABEL_108: + lpuexcptc = 0; + if ( v30[2] >= v30[3] ) + { + lpuexcptc = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v30 + 36))(v30) == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v52; + } + } + goto LABEL_109; + } + while ( v50 ) + { + std::string::push_back((int *)v65, (std::string *)(char)v50, v41); + v30 = (_DWORD *)a1; + v50 = 0; + v31 = *(_DWORD *)(a1 + 8); + if ( v31 < *(_DWORD *)(a1 + 12) ) + goto LABEL_107; +LABEL_117: + (*(void (__fastcall **)(_DWORD *))(*v30 + 40))(v30); + v30 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_108; + lpuexcptc = v52; +LABEL_109: + v32 = a3 == -1; + v51 = v32 & (a2 != 0); + if ( v51 ) + { + v32 = 0; + if ( a2[2] >= a2[3] ) + { + v34 = (*(int (**)(void))(*a2 + 36))(); + v32 = 0; + if ( v34 == -1 ) + { + a2 = 0; + v32 = v51; + } + } + } + if ( lpuexcptc == v32 ) + goto LABEL_30; + v33 = BYTE4(a1); + if ( (_DWORD)a1 && HIDWORD(a1) == -1 ) + { + v37 = *(char **)(a1 + 8); + if ( (unsigned int)v37 >= *(_DWORD *)(a1 + 12) ) + { + v39 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v39; + if ( v39 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpt = -1; + } + goto LABEL_98; + } + v33 = *v37; + } + lpuexcpt = v33; + v27 = *((_BYTE *)v63 + 16); + if ( !v27 || *((_BYTE *)v63 + 37) != lpuexcpt ) + goto LABEL_100; + } + v52 = 0; + v54 = v27; + } +LABEL_30: + v16 = v65[0]; + if ( *((_DWORD *)v65[0] - 3) ) + { + std::string::push_back((int *)v65, (std::string *)(char)v50, v41); + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v63 + 2), *((_DWORD *)v63 + 3), v65) ) + *a5 = 4; + v16 = v65[0]; + if ( !v50 && !v56 && !*((_DWORD *)v65[0] - 3) ) + goto LABEL_33; + } + else if ( !v56 && !v50 ) + { + goto LABEL_33; + } + if ( v54 ) + { +LABEL_33: + v17 = a6; + *a6 = 0; + v17[1] = 0; + *a5 = 4; + goto LABEL_34; + } + if ( v48 ) + { + v35 = a6; + *a6 = -1; + v35[1] = -1; + *a5 = 4; + } + else + { + if ( v42 ) + v57 = -(__int64)v57; + *(_QWORD *)a6 = v57; + } +LABEL_34: + if ( v52 ) + *a5 |= 2u; + lpuexcptb = a1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v16 - 1, 0xFFFFFFFF) > 0 ) + return lpuexcptb; +LABEL_124: + std::string::_Rep::_M_destroy((void *)(v16 - 12), (int)&v64); + return lpuexcptb; + } + v18 = *((_DWORD *)v16 - 1); + *((_DWORD *)v16 - 1) = v18 - 1; + if ( v18 <= 0 ) + goto LABEL_124; + return lpuexcptb; +} +// 4A3A19: variable 'v40' is possibly undefined +// 4A3701: variable 'v41' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004A3D30) -------------------------------------------------------- +unsigned __int64 __stdcall std::num_get>::_M_extract_float( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + int *a6) +{ + char v6; // dl + char v7; // cl + int v8; // eax + _DWORD *v9; // ecx + unsigned int v10; // eax + char v11; // al + char v12; // al + char v13; // al + int v14; // eax + char v15; // al + void *v16; // eax + int v17; // eax + _DWORD *v18; // ecx + unsigned int v19; // eax + char v20; // al + int v21; // eax + bool v23; // zf + int v24; // eax + int v25; // eax + char v26; // al + int v27; // eax + _DWORD *v28; // ecx + unsigned int v29; // eax + char v30; // al + char v31; // al + char v32; // dl + int v33; // edx + char v34; // cl + const char *v35; // eax + int v36; // ebx + int v37; // edx + char *v38; // eax + char *v39; // eax + int v40; // edx + char *v41; // eax + char v42; // cl + char v43; // al + char i; // dl + _DWORD *v45; // ecx + unsigned int v46; // eax + int v47; // eax + _BYTE *v48; // eax + bool v49; // al + int v50; // eax + int v51; // eax + int v52; // eax + unsigned int v53; // [esp+4h] [ebp-84h] + unsigned int v54; // [esp+4h] [ebp-84h] + unsigned int v55; // [esp+Ch] [ebp-7Ch] + int v56; // [esp+14h] [ebp-74h] + char v57; // [esp+14h] [ebp-74h] + void *Buf; // [esp+18h] [ebp-70h] + bool v59; // [esp+1Ch] [ebp-6Ch] + char v60; // [esp+1Ch] [ebp-6Ch] + int v61; // [esp+1Ch] [ebp-6Ch] + char v62; // [esp+20h] [ebp-68h] + int v63; // [esp+20h] [ebp-68h] + char v64; // [esp+20h] [ebp-68h] + int v65; // [esp+20h] [ebp-68h] + char v66; // [esp+20h] [ebp-68h] + int v67; // [esp+24h] [ebp-64h] + char v68; // [esp+28h] [ebp-60h] + int v69; // [esp+28h] [ebp-60h] + char v70; // [esp+28h] [ebp-60h] + char v71; // [esp+28h] [ebp-60h] + int v72; // [esp+28h] [ebp-60h] + char v73; // [esp+2Ch] [ebp-5Ch] + char v74; // [esp+2Ch] [ebp-5Ch] + char v75; // [esp+2Ch] [ebp-5Ch] + char v76; // [esp+2Ch] [ebp-5Ch] + std::string *v77; // [esp+2Ch] [ebp-5Ch] + struct _Unwind_Exception *v78; // [esp+30h] [ebp-58h] + unsigned __int64 v79; // [esp+30h] [ebp-58h] + char lpuexcpt; // [esp+38h] [ebp-50h] + struct _Unwind_Exception *lpuexcpta; // [esp+38h] [ebp-50h] + char lpuexcptb; // [esp+38h] [ebp-50h] + struct _Unwind_Exception *lpuexcptc; // [esp+38h] [ebp-50h] + char lpuexcptd; // [esp+38h] [ebp-50h] + struct _Unwind_Exception *lpuexcpte; // [esp+38h] [ebp-50h] + struct _Unwind_Exception *lpuexcptf; // [esp+38h] [ebp-50h] + struct _Unwind_Exception *lpuexcptg; // [esp+38h] [ebp-50h] + char lpuexcpth; // [esp+38h] [ebp-50h] + struct _Unwind_Exception *lpuexcpti; // [esp+38h] [ebp-50h] + int v90; // [esp+7Bh] [ebp-Dh] BYREF + const char *v91[2]; // [esp+7Ch] [ebp-Ch] BYREF + + v78 = std::__use_cache>::operator()((int *)(a4 + 108)); + v59 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v59 ) + { + lpuexcpt = 0; + v67 = 0; + v73 = 0; + goto LABEL_3; + } + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v42 = *((_BYTE *)v78 + 75); + if ( v42 == lpuexcpt ) + { + v43 = *((_BYTE *)v78 + 16); + } + else + { + v43 = *((_BYTE *)v78 + 16); + if ( *((_BYTE *)v78 + 74) != lpuexcpt ) + { +LABEL_113: + v67 = 0; + for ( i = 0; ; i = 1 ) + { + if ( v43 && *((_BYTE *)v78 + 37) == lpuexcpt + || *((_BYTE *)v78 + 36) == lpuexcpt + || *((_BYTE *)v78 + 78) != lpuexcpt ) + { + v73 = i; + goto LABEL_3; + } + if ( i ) + { + v45 = (_DWORD *)a1; + ++v67; + v46 = *(_DWORD *)(a1 + 8); + if ( v46 < *(_DWORD *)(a1 + 12) ) + goto LABEL_120; + } + else + { + v72 = *(_DWORD *)(*a6 - 12); + v77 = (std::string *)(v72 + 1); + if ( (unsigned int)(v72 + 1) > *(_DWORD *)(*a6 - 8) || *(int *)(*a6 - 4) > 0 ) + std::string::reserve(a6, v77, v53); + ++v67; + *(_BYTE *)(*a6 + *(_DWORD *)(*a6 - 12)) = 48; + v47 = *a6; + *(_DWORD *)(v47 - 12) = v77; + *(_DWORD *)(v47 - 4) = 0; + *(_BYTE *)(v47 + v72 + 1) = 0; + v45 = (_DWORD *)a1; + v46 = *(_DWORD *)(a1 + 8); + if ( v46 < *(_DWORD *)(a1 + 12) ) + { +LABEL_120: + HIDWORD(a1) = -1; + v45[2] = v46 + 1; + goto LABEL_121; + } + } + (*(void (__fastcall **)(_DWORD *))(*v45 + 40))(v45); + v45 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( !(_DWORD)a1 ) + { + v71 = 1; + goto LABEL_122; + } +LABEL_121: + v71 = 0; + if ( v45[2] >= v45[3] && (*(int (__fastcall **)(_DWORD *))(*v45 + 36))(v45) == -1 ) + { + LODWORD(a1) = 0; + v71 = 1; + } +LABEL_122: + v76 = a3 == -1; + v66 = v76 & (a2 != 0); + if ( v66 ) + { + v76 = 0; + if ( a2[2] >= a2[3] && (*(int (**)(void))(*a2 + 36))() == -1 ) + { + a2 = 0; + v76 = v66; + } + } + if ( v71 == v76 ) + { + v73 = 1; + v59 = 1; + goto LABEL_3; + } + LOBYTE(v48) = BYTE4(a1); + if ( a1 <= 0xFFFFFFFF00000000LL ) + goto LABEL_132; + v48 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v48 < *(_DWORD *)(a1 + 12) ) + { + LOBYTE(v48) = *v48; +LABEL_132: + lpuexcpt = (char)v48; + goto LABEL_133; + } + v48 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v48 != (_BYTE *)-1 ) + goto LABEL_132; + LODWORD(a1) = 0; + lpuexcpt = -1; +LABEL_133: + v43 = *((_BYTE *)v78 + 16); + } + } + } + if ( v43 && *((_BYTE *)v78 + 37) == lpuexcpt || *((_BYTE *)v78 + 36) == lpuexcpt ) + goto LABEL_113; + std::string::push_back(a6, (std::string *)(2 * (v42 != lpuexcpt) + 43), v53); + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v49 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( !v49 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v43 = *((_BYTE *)v78 + 16); + goto LABEL_113; + } + v73 = 0; + v59 = v49; + v67 = 0; +LABEL_3: + v91[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v78 + 16) ) + std::string::reserve((int *)v91, (std::string *)0x20, v54); + v68 = *((_BYTE *)v78 + 100); + if ( !v68 ) + { + if ( !v59 ) + { + v62 = 0; + v60 = 0; +LABEL_8: + v6 = lpuexcpt; + if ( (unsigned __int8)(lpuexcpt - 48) <= 9u ) + { +LABEL_9: + v74 = v6; + v69 = *(_DWORD *)(*a6 - 12); + lpuexcpta = (struct _Unwind_Exception *)(v69 + 1); + if ( (unsigned int)(v69 + 1) > *(_DWORD *)(*a6 - 8) || *(int *)(*a6 - 4) > 0 ) + std::string::reserve(a6, lpuexcpta, v54); + v7 = v74; + v73 = 1; + *(_BYTE *)(*a6 + *(_DWORD *)(*a6 - 12)) = v7; + v8 = *a6; + *(_DWORD *)(v8 - 4) = 0; + *(_DWORD *)(v8 - 12) = lpuexcpta; + *(_BYTE *)(v8 + v69 + 1) = 0; + goto LABEL_13; + } + while ( 1 ) + { + if ( *((_BYTE *)v78 + 36) == lpuexcpt && !((unsigned __int8)v60 | (unsigned __int8)v62) ) + { + std::string::push_back(a6, (std::string *)0x2E, v54); + v62 = 0; + v60 = 1; +LABEL_13: + v9 = (_DWORD *)a1; + v10 = *(_DWORD *)(a1 + 8); + if ( v10 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_29; +LABEL_14: + HIDWORD(a1) = -1; + v9[2] = v10 + 1; +LABEL_15: + lpuexcptb = 0; + if ( v9[2] >= v9[3] ) + { + lpuexcptb = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v9 + 36))(v9) == -1 ) + { + LODWORD(a1) = 0; + lpuexcptb = 1; + } + } + goto LABEL_16; + } + if ( *((_BYTE *)v78 + 92) != lpuexcpt && *((_BYTE *)v78 + 98) != lpuexcpt ) + goto LABEL_46; + v73 &= v62 ^ 1; + if ( !v73 ) + goto LABEL_46; + std::string::push_back(a6, (std::string *)0x65, v54); + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + if ( std::istreambuf_iterator::equal(&a1, (int)&a2) ) + goto LABEL_164; + v13 = std::istreambuf_iterator::_M_get((int)&a1); + lpuexcpt = v13; + if ( *((_BYTE *)v78 + 75) == v13 ) + { + v14 = 43; + } + else + { + if ( *((_BYTE *)v78 + 74) != v13 ) + { + v62 = v73; + goto LABEL_8; + } + v14 = 45; + } + std::string::push_back(a6, (std::string *)v14, v54); + v9 = (_DWORD *)a1; + v62 = v73; + v10 = *(_DWORD *)(a1 + 8); + if ( v10 < *(_DWORD *)(a1 + 12) ) + goto LABEL_14; +LABEL_29: + (*(void (__fastcall **)(_DWORD *))(*v9 + 40))(v9); + v9 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_15; + lpuexcptb = 1; +LABEL_16: + v11 = a3 == -1; + v70 = v11 & (a2 != 0); + if ( v70 ) + { + v11 = 0; + if ( a2[2] >= a2[3] ) + { + v33 = (*(int (**)(void))(*a2 + 36))(); + v11 = 0; + if ( v33 == -1 ) + { + a2 = 0; + v11 = v70; + } + } + } + if ( v11 == lpuexcptb ) + goto LABEL_46; + v12 = BYTE4(a1); + if ( a1 > 0xFFFFFFFF00000000LL ) + { + v38 = *(char **)(a1 + 8); + if ( (unsigned int)v38 >= *(_DWORD *)(a1 + 12) ) + { + v50 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v50; + if ( v50 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpt = -1; + } + goto LABEL_8; + } + v12 = *v38; + } + lpuexcpt = v12; + v6 = v12; + if ( (unsigned __int8)(v12 - 48) <= 9u ) + goto LABEL_9; + } + } +LABEL_166: + lpuexcpte = (struct _Unwind_Exception *)v91[0]; + if ( *((_DWORD *)v91[0] - 3) ) + goto LABEL_50; + goto LABEL_53; + } + if ( v59 ) + goto LABEL_166; + v62 = 0; + v60 = 0; + v15 = *((_BYTE *)v78 + 16); + Buf = (char *)v78 + 78; + while ( 1 ) + { + while ( 1 ) + { + if ( v15 && *((_BYTE *)v78 + 37) == lpuexcpt ) + { + v60 |= v62; + if ( v60 ) + { + lpuexcpte = (struct _Unwind_Exception *)v91[0]; + v24 = *((_DWORD *)v91[0] - 3); +LABEL_160: + if ( v24 ) + goto LABEL_51; + goto LABEL_53; + } + if ( !v67 ) + { + std::string::_M_mutate((char **)a6, 0, *(_DWORD *)(*a6 - 12), 0, v55); + lpuexcpte = (struct _Unwind_Exception *)v91[0]; + if ( *((_DWORD *)v91[0] - 3) ) + goto LABEL_50; + goto LABEL_53; + } + v65 = *((_DWORD *)v91[0] - 3); + lpuexcpti = (struct _Unwind_Exception *)(v65 + 1); + if ( (unsigned int)(v65 + 1) > *((_DWORD *)v91[0] - 2) || *((int *)v91[0] - 1) > 0 ) + std::string::reserve((int *)v91, lpuexcpti, v54); + v34 = v67; + v67 = 0; + v91[0][*((_DWORD *)v91[0] - 3)] = v34; + v35 = v91[0]; + *((_DWORD *)v91[0] - 3) = lpuexcpti; + v36 = v65; + *((_DWORD *)v35 - 1) = 0; + v62 = 0; + v35[v36 + 1] = 0; +LABEL_41: + v18 = (_DWORD *)a1; + v19 = *(_DWORD *)(a1 + 8); + if ( v19 < *(_DWORD *)(a1 + 12) ) + goto LABEL_42; + goto LABEL_62; + } + if ( *((_BYTE *)v78 + 36) == lpuexcpt ) + break; + v16 = memchr(Buf, lpuexcpt, 0xAu); + if ( v16 ) + { + v75 = (_BYTE)v16 - (_BYTE)Buf + 48; + v56 = *(_DWORD *)(*a6 - 12); + lpuexcptc = (struct _Unwind_Exception *)(v56 + 1); + if ( (unsigned int)(v56 + 1) > *(_DWORD *)(*a6 - 8) || *(int *)(*a6 - 4) > 0 ) + std::string::reserve(a6, lpuexcptc, v54); + ++v67; + *(_BYTE *)(*a6 + *(_DWORD *)(*a6 - 12)) = v75; + v17 = *a6; + *(_DWORD *)(v17 - 12) = lpuexcptc; + *(_DWORD *)(v17 - 4) = 0; + *(_BYTE *)(v17 + v56 + 1) = 0; + v73 = v68; + goto LABEL_41; + } + if ( *((_BYTE *)v78 + 92) != lpuexcpt && *((_BYTE *)v78 + 98) != lpuexcpt ) + goto LABEL_46; + v23 = (((unsigned __int8)v62 ^ 1) & (unsigned __int8)v73) == 0; + v73 &= v62 ^ 1; + lpuexcpte = (struct _Unwind_Exception *)v91[0]; + v21 = *((_DWORD *)v91[0] - 3); + if ( v23 ) + goto LABEL_47; + if ( v21 && !v60 ) + std::string::push_back((int *)v91, (std::string *)(char)v67, v54); + v63 = *(_DWORD *)(*a6 - 12); + lpuexcptg = (struct _Unwind_Exception *)(v63 + 1); + if ( (unsigned int)(v63 + 1) > *(_DWORD *)(*a6 - 8) || *(int *)(*a6 - 4) > 0 ) + std::string::reserve(a6, lpuexcptg, v54); + *(_BYTE *)(*a6 + *(_DWORD *)(*a6 - 12)) = 101; + v27 = *a6; + *(_DWORD *)(v27 - 12) = lpuexcptg; + *(_DWORD *)(v27 - 4) = 0; + *(_BYTE *)(v27 + v63 + 1) = 0; + v28 = (_DWORD *)a1; + v29 = *(_DWORD *)(a1 + 8); + if ( v29 >= *(_DWORD *)(a1 + 12) ) + { + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v28 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( !(_DWORD)a1 ) + { + lpuexcpth = v73; + goto LABEL_79; + } + } + else + { + HIDWORD(a1) = -1; + *(_DWORD *)(a1 + 8) = v29 + 1; + } + lpuexcpth = 0; + if ( v28[2] >= v28[3] ) + { + lpuexcpth = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v28 + 36))(v28) == -1 ) + { + LODWORD(a1) = 0; + lpuexcpth = v73; + } + } +LABEL_79: + v30 = a3 == -1; + v64 = v30 & (a2 != 0); + if ( v64 ) + { + v30 = 0; + if ( a2[2] >= a2[3] ) + { + v40 = (*(int (**)(void))(*a2 + 36))(); + v30 = 0; + if ( v40 == -1 ) + { + a2 = 0; + v30 = v64; + } + } + } + if ( v30 == lpuexcpth ) + { +LABEL_164: + lpuexcpte = (struct _Unwind_Exception *)v91[0]; + if ( *((_DWORD *)v91[0] - 3) ) + goto LABEL_51; + goto LABEL_53; + } + v31 = BYTE4(a1); + if ( a1 <= 0xFFFFFFFF00000000LL ) + goto LABEL_82; + v41 = *(char **)(a1 + 8); + if ( (unsigned int)v41 < *(_DWORD *)(a1 + 12) ) + { + v31 = *v41; +LABEL_82: + lpuexcpt = v31; + goto LABEL_83; + } + v52 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v52; + if ( v52 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpt = -1; + } +LABEL_83: + v32 = *((_BYTE *)v78 + 75); + v15 = *((_BYTE *)v78 + 16); + if ( v32 != lpuexcpt && *((_BYTE *)v78 + 74) != lpuexcpt ) + goto LABEL_85; + if ( v15 && *((_BYTE *)v78 + 37) == lpuexcpt ) + { + v62 = *((_BYTE *)v78 + 16); + v73 = v62; + } + else + { + if ( *((_BYTE *)v78 + 36) != lpuexcpt ) + { + std::string::push_back(a6, (std::string *)(2 * (v32 != lpuexcpt) + 43), v54); + v62 = v73; + goto LABEL_41; + } +LABEL_85: + v62 = v73; + } + } + v23 = ((unsigned __int8)v60 | (unsigned __int8)v62) == 0; + v62 |= v60; + lpuexcpte = (struct _Unwind_Exception *)v91[0]; + v24 = *((_DWORD *)v91[0] - 3); + if ( !v23 ) + goto LABEL_160; + if ( v24 ) + std::string::push_back((int *)v91, (std::string *)(char)v67, v54); + v61 = *(_DWORD *)(*a6 - 12); + lpuexcptf = (struct _Unwind_Exception *)(v61 + 1); + if ( (unsigned int)(v61 + 1) > *(_DWORD *)(*a6 - 8) || *(int *)(*a6 - 4) > 0 ) + std::string::reserve(a6, lpuexcptf, v54); + *(_BYTE *)(*a6 + *(_DWORD *)(*a6 - 12)) = 46; + v25 = *a6; + *(_DWORD *)(v25 - 12) = lpuexcptf; + *(_DWORD *)(v25 - 4) = 0; + *(_BYTE *)(v25 + v61 + 1) = 0; + v18 = (_DWORD *)a1; + v60 = v68; + v19 = *(_DWORD *)(a1 + 8); + if ( v19 < *(_DWORD *)(a1 + 12) ) + { +LABEL_42: + HIDWORD(a1) = -1; + v18[2] = v19 + 1; + goto LABEL_43; + } +LABEL_62: + (*(void (__fastcall **)(_DWORD *))(*v18 + 40))(v18); + v18 = (_DWORD *)a1; + HIDWORD(a1) = -1; + if ( !(_DWORD)a1 ) + { + lpuexcptd = v68; + goto LABEL_44; + } +LABEL_43: + lpuexcptd = 0; + if ( v18[2] >= v18[3] ) + { + lpuexcptd = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v18 + 36))(v18) == -1 ) + { + LODWORD(a1) = 0; + lpuexcptd = v68; + } + } +LABEL_44: + v20 = a3 == -1; + v57 = v20 & (a2 != 0); + if ( v57 ) + { + v20 = 0; + if ( a2[2] >= a2[3] ) + { + v37 = (*(int (**)(void))(*a2 + 36))(); + v20 = 0; + if ( v37 == -1 ) + { + a2 = 0; + v20 = v57; + } + } + } + if ( lpuexcptd == v20 ) + break; + v26 = BYTE4(a1); + if ( a1 <= 0xFFFFFFFF00000000LL ) + goto LABEL_65; + v39 = *(char **)(a1 + 8); + if ( (unsigned int)v39 < *(_DWORD *)(a1 + 12) ) + { + v26 = *v39; +LABEL_65: + lpuexcpt = v26; + goto LABEL_66; + } + v51 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcpt = v51; + if ( v51 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpt = -1; + } +LABEL_66: + v15 = *((_BYTE *)v78 + 16); + } +LABEL_46: + lpuexcpte = (struct _Unwind_Exception *)v91[0]; + v21 = *((_DWORD *)v91[0] - 3); +LABEL_47: + if ( !v21 ) + goto LABEL_53; + if ( v60 || v62 ) + goto LABEL_51; +LABEL_50: + std::string::push_back((int *)v91, (std::string *)(char)v67, v54); + lpuexcpte = (struct _Unwind_Exception *)v91[0]; +LABEL_51: + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v78 + 2), *((_DWORD *)v78 + 3), v91) ) + *a5 = 4; +LABEL_53: + v79 = a1; + std::string::_Rep::_M_dispose((volatile signed __int32 *)lpuexcpte - 3, (int)&v90); + return v79; +} +// 4A4623: variable 'v54' is possibly undefined +// 4A4735: variable 'v53' is possibly undefined +// 4A4B05: variable 'v55' is possibly undefined + +//----- (004A4B70) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + unsigned __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + unsigned __int64 (__stdcall *v7)(unsigned __int64, _DWORD *, int, int, _DWORD *, _DWORD *); // eax + int v8; // esi + int result; // eax + int v10[8]; // [esp+3Ch] [ebp-20h] BYREF + + v7 = *(unsigned __int64 (__stdcall **)(unsigned __int64, _DWORD *, int, int, _DWORD *, _DWORD *))(*(_DWORD *)this + 48); + if ( v7 != std::num_get>::do_get ) + return ((int (__stdcall *)(_DWORD, _DWORD, _DWORD *, int, int, _DWORD *, _DWORD *))v7)( + a2, + HIDWORD(a2), + a3, + a4, + a5, + a6, + a7); + v8 = *(_DWORD *)(a5 + 12); + *(_DWORD *)(a5 + 12) = v8 & 0xFFFFFFB5 | 8; + result = std::num_get>::_M_extract_int(a2, a3, a4, a5, a6, v10); + *(_DWORD *)(a5 + 12) = v8; + *a7 = v10[0]; + return result; +} +// 4A4B70: using guessed type int var_20[8]; + +//----- (004A4C20) -------------------------------------------------------- +int __fastcall std::num_get>::get(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 8))(a1); +} + +//----- (004A4C30) -------------------------------------------------------- +int __fastcall std::num_get>::get(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 40))(a1); +} + +//----- (004A4C40) -------------------------------------------------------- +int __fastcall std::num_get>::get(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 44))(a1); +} + +//----- (004A4C50) -------------------------------------------------------- +int __fastcall std::num_get>::get(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 36))(a1); +} + +//----- (004A4C60) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + unsigned __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int *a7) +{ + int (__stdcall *v7)(int, int, int, int, int, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, int, int, int, int, int))(*(_DWORD *)this + 20); + if ( v7 == std::num_get>::do_get ) + return std::num_get>::_M_extract_int(a2, a3, a4, a5, a6, a7); + else + return v7(a2, HIDWORD(a2), (int)a3, a4, a5, (int)a6, (int)a7); +} +// 4A5A90: using guessed type int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); + +//----- (004A4CE0) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + unsigned __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int *a7) +{ + int (__stdcall *v7)(int, int, int, int, int, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, int, int, int, int, int))(*(_DWORD *)this + 12); + if ( v7 == std::num_get>::do_get ) + return std::num_get>::_M_extract_int(a2, a3, a4, a5, a6, a7); + else + return v7(a2, HIDWORD(a2), (int)a3, a4, a5, (int)a6, (int)a7); +} +// 4A5AA0: using guessed type int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); + +//----- (004A4D60) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + unsigned __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int *a7) +{ + int (__stdcall *v7)(int, int, int, int, int, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, int, int, int, int, int))(*(_DWORD *)this + 24); + if ( v7 == std::num_get>::do_get ) + return std::num_get>::_M_extract_int(a2, a3, a4, a5, a6, a7); + else + return v7(a2, HIDWORD(a2), (int)a3, a4, a5, (int)a6, (int)a7); +} +// 4A5AB0: using guessed type int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); + +//----- (004A4DE0) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + unsigned __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _WORD *a7) +{ + int (__stdcall *v7)(int, int, int, int, int, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, int, int, int, int, int))(*(_DWORD *)this + 16); + if ( v7 == std::num_get>::do_get ) + return std::num_get>::_M_extract_int(a2, a3, a4, a5, a6, a7); + else + return v7(a2, HIDWORD(a2), (int)a3, a4, a5, (int)a6, (int)a7); +} +// 4A5AC0: using guessed type int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); + +//----- (004A4E60) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + unsigned __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int *a7) +{ + int (__stdcall *v7)(int, int, int, int, int, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, int, int, int, int, int))(*(_DWORD *)this + 28); + if ( v7 == std::num_get>::do_get ) + return std::num_get>::_M_extract_int(a2, a3, a4, a5, a6, a7); + else + return v7(a2, HIDWORD(a2), (int)a3, a4, a5, (int)a6, (int)a7); +} +// 4A5AD0: using guessed type int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); + +//----- (004A4EE0) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + unsigned __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + int (__stdcall *v7)(int, int, int, int, int, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, int, int, int, int, int))(*(_DWORD *)this + 32); + if ( v7 == std::num_get>::do_get ) + return std::num_get>::_M_extract_int(a2, a3, a4, a5, a6, a7); + else + return v7(a2, HIDWORD(a2), (int)a3, a4, a5, (int)a6, (int)a7); +} +// 4A5AE0: using guessed type int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); + +//----- (004A4F60) -------------------------------------------------------- +unsigned __int64 __stdcall std::num_get>::do_get( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + _DWORD *a6) +{ + int v6; // esi + unsigned __int64 result; // rax + int v8[8]; // [esp+2Ch] [ebp-20h] BYREF + + v6 = *(_DWORD *)(a4 + 12); + *(_DWORD *)(a4 + 12) = v6 & 0xFFFFFFB5 | 8; + result = std::num_get>::_M_extract_int(a1, a2, a3, a4, a5, v8); + *(_DWORD *)(a4 + 12) = v6; + *a6 = v8[0]; + return result; +} +// 4A4F60: using guessed type int var_20[8]; + +//----- (004A4FD0) -------------------------------------------------------- +unsigned __int64 __stdcall std::num_get>::do_get( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + int *a5, + _BYTE *a6) +{ + _BYTE *v6; // edi + struct _Unwind_Exception *v8; // eax + int v9; // ecx + struct _Unwind_Exception *v10; // edi + int v11; // eax + bool v12; // dl + int v13; // eax + struct _Unwind_Exception *v14; // ebp + unsigned int v15; // edi + unsigned int v16; // eax + bool v17; // cl + char v18; // si + char v19; // bl + char v20; // bl + _BYTE *v21; // eax + int v22; // eax + int v23; // eax + unsigned int v24; // eax + bool v25; // bl + struct _Unwind_Exception *v26; // edi + unsigned int v27; // ebp + int v28; // eax + unsigned int v29; // eax + bool v30; // [esp+2Bh] [ebp-31h] + bool v31; // [esp+2Ch] [ebp-30h] + char v32; // [esp+2Dh] [ebp-2Fh] + char v33; // [esp+2Eh] [ebp-2Eh] + char v34; // [esp+2Eh] [ebp-2Eh] + bool v35; // [esp+2Eh] [ebp-2Eh] + bool v36; // [esp+2Eh] [ebp-2Eh] + bool v37; // [esp+2Fh] [ebp-2Dh] + unsigned int v38[8]; // [esp+3Ch] [ebp-20h] BYREF + + if ( (*(_BYTE *)(a4 + 12) & 1) == 0 ) + { + v38[0] = -1; + a1 = std::num_get>::_M_extract_int(a1, a2, a3, a4, a5, (int *)v38); + if ( v38[0] > 1 ) + { + *a6 = 1; + *a5 = 4; + if ( std::istreambuf_iterator::equal(&a1, (int)&a2) ) + *a5 |= 2u; + } + else + { + v6 = a6; + *a6 = v38[0]; + *v6 &= 1u; + } + return a1; + } + v8 = std::__use_cache>::operator()((int *)(a4 + 108)); + v9 = *((_DWORD *)v8 + 8); + v10 = v8; + v11 = *((_DWORD *)v8 + 6); + v12 = v9 == 0; + v31 = v11 == 0; + if ( !(v11 | v9) ) + goto LABEL_41; + v32 = 1; + v13 = HIDWORD(a1); + v30 = 1; + v14 = v10; + v15 = 0; + while ( 1 ) + { + v18 = v13 == -1; + v19 = ((_DWORD)a1 != 0) & v18; + if ( v19 ) + { + v18 = 0; + if ( *(_DWORD *)(a1 + 8) >= *(_DWORD *)(a1 + 12) ) + { + v35 = v12; + v23 = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 36))(a1); + v12 = v35; + if ( v23 == -1 ) + { + LODWORD(a1) = 0; + v18 = v19; + } + } + } + v20 = a3 == -1; + v34 = v20 & (a2 != 0); + if ( v34 ) + { + v20 = 0; + if ( a2[2] >= a2[3] ) + { + v37 = v12; + v22 = (*(int (**)(void))(*a2 + 36))(); + v12 = v37; + if ( v22 == -1 ) + { + a2 = 0; + v20 = v34; + } + } + } + if ( v20 == v18 ) + { + v33 = 1; + v24 = v15; + v25 = v30; + v26 = v14; + v27 = v24; +LABEL_45: + if ( v25 && *((_DWORD *)v26 + 8) == v27 && v27 ) + { + *a6 = 0; + if ( v32 && *((_DWORD *)v26 + 6) == v27 ) + goto LABEL_42; + } + else + { + if ( !v32 || *((_DWORD *)v26 + 6) != v27 || !v27 ) + { + *a6 = 0; + if ( !v33 ) + goto LABEL_42; + *a5 = 6; + return a1; + } + *a6 = 1; + } + v28 = 2 * (v33 != 0); +LABEL_62: + *a5 = v28; + return a1; + } + LOBYTE(v21) = BYTE4(a1); + if ( a1 > 0xFFFFFFFF00000000LL ) + { + v21 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v21 >= *(_DWORD *)(a1 + 12) ) + { + v36 = v12; + v21 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)a1 + 36))(); + v12 = v36; + if ( v21 == (_BYTE *)-1 ) + LODWORD(a1) = 0; + } + else + { + LOBYTE(v21) = *v21; + } + } + if ( !v12 ) + v30 = *(_BYTE *)(*((_DWORD *)v14 + 7) + v15) == (unsigned __int8)v21; + if ( !v30 ) + { + if ( v31 ) + { + if ( v32 ) + { + if ( *((_DWORD *)v14 + 6) == v15 && v15 ) + { + *a6 = 1; + v28 = 0; + goto LABEL_62; + } + goto LABEL_41; + } +LABEL_43: + *a6 = 0; + *a5 = 4; + return a1; + } +LABEL_8: + v32 = *(_BYTE *)(*((_DWORD *)v14 + 5) + v15) == (unsigned __int8)v21; + goto LABEL_9; + } + if ( !v31 ) + goto LABEL_8; +LABEL_9: + v33 = v12 & (v32 ^ 1); + if ( v33 ) + break; + if ( !(v30 | (unsigned __int8)v32) ) + goto LABEL_43; + ++v15; + v16 = *(_DWORD *)(a1 + 8); + if ( v16 >= *(_DWORD *)(a1 + 12) ) + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + else + *(_DWORD *)(a1 + 8) = v16 + 1; + HIDWORD(a1) = -1; + if ( !v30 ) + { + v12 = v32; +LABEL_29: + v31 = *((_DWORD *)v14 + 6) <= v15; + v32 |= v30; + v17 = v12 && v31; + goto LABEL_16; + } + v12 = *((_DWORD *)v14 + 8) <= v15; + if ( v32 ) + goto LABEL_29; + v17 = *((_DWORD *)v14 + 8) <= v15; + v31 = v30; +LABEL_16: + v13 = -1; + if ( v17 ) + { + v29 = v15; + v25 = v30; + v26 = v14; + v27 = v29; + goto LABEL_45; + } + } + if ( !v30 ) + goto LABEL_43; + if ( *((_DWORD *)v14 + 8) == v15 && v15 ) + { + *a6 = 0; + v28 = 0; + goto LABEL_62; + } +LABEL_41: + *a6 = 0; +LABEL_42: + *a5 = 4; + return a1; +} +// 4A4FD0: using guessed type unsigned int var_20[8]; + +//----- (004A5430) -------------------------------------------------------- +int __stdcall std::num_get>::do_get( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + double *a6) +{ + char v6; // al + int v7; // ecx + int v8; // eax + int v10; // eax + char v11; // dl + bool v12; // zf + int v13; // eax + unsigned int v14; // [esp+4h] [ebp-84h] + char v15; // [esp+23h] [ebp-65h] + int v16; // [esp+24h] [ebp-64h] + char v17; // [esp+30h] [ebp-58h] + unsigned __int64 v18; // [esp+34h] [ebp-54h] + int v19; // [esp+78h] [ebp-10h] BYREF + int v20[3]; // [esp+7Ch] [ebp-Ch] BYREF + + v19 = (int)std::string::_S_construct(0, 0); + std::string::reserve(&v19, (std::string *)0x20, v14); + v18 = std::num_get>::_M_extract_float(a1, a2, a3, a4, a5, &v19); + v16 = v18; + v20[0] = std::locale::facet::_S_get_c_locale(); + std::__convert_to_v((unsigned __int8 *)v19, a6, a5); + v17 = HIDWORD(v18) == -1; + v15 = v17 & ((_DWORD)v18 != 0); + if ( v15 ) + { + v17 = 0; + if ( *(_DWORD *)(v18 + 8) >= *(_DWORD *)(v18 + 12) ) + { + v10 = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)v18 + 36))(v18); + v11 = v15; + v12 = v10 == -1; + if ( v10 != -1 ) + v11 = 0; + v13 = 0; + if ( !v12 ) + v13 = v18; + v17 = v11; + v16 = v13; + } + } + v6 = a3 == -1; + if ( a2 ) + { + if ( a3 == -1 ) + { + v6 = 0; + if ( a2[2] >= a2[3] ) + v6 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2) == -1; + } + } + if ( v6 == v17 ) + *a5 |= 2u; + v7 = v19; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v19 - 4), 0xFFFFFFFF) > 0 ) + return v16; +LABEL_10: + std::string::_Rep::_M_destroy((void *)(v7 - 12), (int)v20); + return v16; + } + v8 = *(_DWORD *)(v19 - 4); + *(_DWORD *)(v19 - 4) = v8 - 1; + if ( v8 <= 0 ) + goto LABEL_10; + return v16; +} +// 4A54B0: variable 'v14' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 4A5430: using guessed type int var_C[3]; + +//----- (004A5650) -------------------------------------------------------- +int __stdcall std::num_get>::do_get( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + long double *a6) +{ + char v6; // al + char *v7; // ecx + int v8; // eax + int v10; // eax + char v11; // dl + bool v12; // zf + int v13; // eax + unsigned int v14; // [esp+4h] [ebp-84h] + char v15; // [esp+23h] [ebp-65h] + int v16; // [esp+24h] [ebp-64h] + char v17; // [esp+30h] [ebp-58h] + unsigned __int64 v18; // [esp+34h] [ebp-54h] + char *String; // [esp+78h] [ebp-10h] BYREF + int v20[3]; // [esp+7Ch] [ebp-Ch] BYREF + + String = (char *)std::string::_S_construct(0, 0); + std::string::reserve((int *)&String, (std::string *)0x20, v14); + v18 = std::num_get>::_M_extract_float(a1, a2, a3, a4, a5, (int *)&String); + v16 = v18; + v20[0] = std::locale::facet::_S_get_c_locale(); + std::__convert_to_v(String, a6, a5); + v17 = HIDWORD(v18) == -1; + v15 = v17 & ((_DWORD)v18 != 0); + if ( v15 ) + { + v17 = 0; + if ( *(_DWORD *)(v18 + 8) >= *(_DWORD *)(v18 + 12) ) + { + v10 = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)v18 + 36))(v18); + v11 = v15; + v12 = v10 == -1; + if ( v10 != -1 ) + v11 = 0; + v13 = 0; + if ( !v12 ) + v13 = v18; + v17 = v11; + v16 = v13; + } + } + v6 = a3 == -1; + if ( a2 ) + { + if ( a3 == -1 ) + { + v6 = 0; + if ( a2[2] >= a2[3] ) + v6 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2) == -1; + } + } + if ( v6 == v17 ) + *a5 |= 2u; + v7 = String; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)String - 1, 0xFFFFFFFF) > 0 ) + return v16; +LABEL_10: + std::string::_Rep::_M_destroy(v7 - 12, (int)v20); + return v16; + } + v8 = *((_DWORD *)String - 1); + *((_DWORD *)String - 1) = v8 - 1; + if ( v8 <= 0 ) + goto LABEL_10; + return v16; +} +// 4A56D0: variable 'v14' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 4A5650: using guessed type int var_C[3]; + +//----- (004A5870) -------------------------------------------------------- +int __stdcall std::num_get>::do_get( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + float *a6) +{ + char v6; // al + int v7; // ecx + int v8; // eax + int v10; // eax + char v11; // dl + bool v12; // zf + int v13; // eax + unsigned int v14; // [esp+4h] [ebp-84h] + char v15; // [esp+23h] [ebp-65h] + int v16; // [esp+24h] [ebp-64h] + char v17; // [esp+30h] [ebp-58h] + unsigned __int64 v18; // [esp+34h] [ebp-54h] + int v19; // [esp+78h] [ebp-10h] BYREF + int v20[3]; // [esp+7Ch] [ebp-Ch] BYREF + + v19 = (int)std::string::_S_construct(0, 0); + std::string::reserve(&v19, (std::string *)0x20, v14); + v18 = std::num_get>::_M_extract_float(a1, a2, a3, a4, a5, &v19); + v16 = v18; + v20[0] = std::locale::facet::_S_get_c_locale(); + std::__convert_to_v((unsigned __int8 *)v19, a6, a5); + v17 = HIDWORD(v18) == -1; + v15 = v17 & ((_DWORD)v18 != 0); + if ( v15 ) + { + v17 = 0; + if ( *(_DWORD *)(v18 + 8) >= *(_DWORD *)(v18 + 12) ) + { + v10 = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)v18 + 36))(v18); + v11 = v15; + v12 = v10 == -1; + if ( v10 != -1 ) + v11 = 0; + v13 = 0; + if ( !v12 ) + v13 = v18; + v17 = v11; + v16 = v13; + } + } + v6 = a3 == -1; + if ( a2 ) + { + if ( a3 == -1 ) + { + v6 = 0; + if ( a2[2] >= a2[3] ) + v6 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2) == -1; + } + } + if ( v6 == v17 ) + *a5 |= 2u; + v7 = v19; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v19 - 4), 0xFFFFFFFF) > 0 ) + return v16; +LABEL_10: + std::string::_Rep::_M_destroy((void *)(v7 - 12), (int)v20); + return v16; + } + v8 = *(_DWORD *)(v19 - 4); + *(_DWORD *)(v19 - 4) = v8 - 1; + if ( v8 <= 0 ) + goto LABEL_10; + return v16; +} +// 4A58F0: variable 'v14' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 4A5870: using guessed type int var_C[3]; + +//----- (004A5AF0) -------------------------------------------------------- +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11]( + _DWORD *a1, + unsigned __int16 a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + int *a7) +{ + int v7; // eax + char v8; // al + unsigned int v9; // eax + unsigned int v10; // edx + __int16 *v11; // eax + __int16 v12; // ax + bool v13; // zf + _DWORD *v14; // eax + _DWORD *v15; // ebx + unsigned int v16; // eax + unsigned int v17; // edx + __int16 *v18; // eax + __int16 v19; // ax + bool v20; // zf + _DWORD *v21; // eax + int v22; // eax + int v23; // eax + _DWORD *v24; // ecx + unsigned int v25; // eax + unsigned int v26; // edx + __int16 *v27; // eax + __int16 v28; // ax + bool v29; // zf + _DWORD *v30; // eax + int *v31; // eax + bool v33; // al + unsigned __int16 *v34; // eax + _DWORD *v35; // eax + _WORD *v36; // eax + unsigned int v37; // edx + unsigned int v38; // edx + int v39; // eax + bool v40; // cc + int v41; // edx + int v42; // eax + _DWORD *v43; // ecx + unsigned int v44; // eax + unsigned int v45; // edx + __int16 *v46; // eax + __int16 v47; // ax + bool v48; // zf + _DWORD *v49; // eax + unsigned __int16 *v50; // eax + _DWORD *v51; // eax + __int16 *v52; // eax + __int16 v53; // ax + bool v54; // zf + _DWORD *v55; // eax + bool v56; // bl + unsigned __int16 *v57; // eax + _DWORD *v58; // eax + size_t v59; // edx + size_t v60; // ecx + __int16 *v61; // eax + __int16 v62; // ax + bool v63; // zf + _DWORD *v64; // eax + bool v65; // dl + __int16 *v66; // eax + __int16 v67; // ax + bool v68; // zf + _DWORD *v69; // eax + bool v70; // cl + int v71; // edx + unsigned __int16 *v72; // eax + _DWORD *v73; // eax + _DWORD *v74; // eax + __int16 *v75; // eax + __int16 v76; // ax + bool v77; // zf + _DWORD *v78; // eax + bool v79; // bl + __int16 *v80; // eax + __int16 v81; // ax + bool v82; // zf + _DWORD *v83; // eax + bool v84; // dl + unsigned __int16 *v85; // eax + _DWORD *v86; // edx + __int16 *v87; // eax + __int16 v88; // ax + bool v89; // zf + _DWORD *v90; // eax + bool v91; // bl + char v92; // bl + unsigned int v93; // [esp+8h] [ebp-B0h] + std::locale::_Impl *v94; // [esp+14h] [ebp-A4h] + unsigned int v95; // [esp+1Ch] [ebp-9Ch] + int v96; // [esp+20h] [ebp-98h] + unsigned int v97; // [esp+24h] [ebp-94h] + bool v98; // [esp+2Dh] [ebp-8Bh] + char v99; // [esp+2Eh] [ebp-8Ah] + int v100; // [esp+30h] [ebp-88h] + char v101; // [esp+30h] [ebp-88h] + _DWORD *v102; // [esp+34h] [ebp-84h] + char v103; // [esp+38h] [ebp-80h] + int v104; // [esp+38h] [ebp-80h] + size_t v105; // [esp+38h] [ebp-80h] + char v106; // [esp+3Dh] [ebp-7Bh] + char v107; // [esp+3Eh] [ebp-7Ah] + char v108; // [esp+3Eh] [ebp-7Ah] + char v109; // [esp+3Eh] [ebp-7Ah] + char v110; // [esp+3Eh] [ebp-7Ah] + char v111; // [esp+40h] [ebp-78h] + char v112; // [esp+40h] [ebp-78h] + unsigned int v113; // [esp+40h] [ebp-78h] + bool v114; // [esp+44h] [ebp-74h] + char v115; // [esp+48h] [ebp-70h] + char v116; // [esp+48h] [ebp-70h] + bool v117; // [esp+48h] [ebp-70h] + int *v118; // [esp+4Ch] [ebp-6Ch] + unsigned int v119; // [esp+4Ch] [ebp-6Ch] + int v120; // [esp+50h] [ebp-68h] + _DWORD *v121; // [esp+54h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+58h] [ebp-60h] + bool lpuexcpta; // [esp+58h] [ebp-60h] + unsigned __int16 lpuexcptb; // [esp+58h] [ebp-60h] + char lpuexcptc; // [esp+58h] [ebp-60h] + struct _Unwind_Exception *lpuexcptd; // [esp+58h] [ebp-60h] + char lpuexcpte; // [esp+58h] [ebp-60h] + void *Block; // [esp+98h] [ebp-20h] BYREF + size_t v129; // [esp+9Ch] [ebp-1Ch] + int v130[5]; // [esp+A0h] [ebp-18h] BYREF + + v121 = a1; + v102 = a3; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v118 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)lpuexcpt); + v120 = *v118; + if ( !*v118 ) + { + v74 = operator new(0xA8u); + v74[1] = 0; + *v74 = &off_5605C0; + v74[2] = 0; + v74[3] = 0; + *((_BYTE *)v74 + 16) = 0; + v74[5] = 0; + v74[6] = 0; + v74[7] = 0; + v74[8] = 0; + v74[9] = 0; + *((_BYTE *)v74 + 164) = 0; + v94 = (std::locale::_Impl *)v74; + std::__numpunct_cache::_M_cache((int)v74, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v94, lpuexcpt, v93); + v120 = *v118; + } + v119 = 8; + v100 = *(_DWORD *)(a5 + 12) & 0x4A; + if ( v100 != 64 ) + { + v7 = 10; + if ( v100 == 8 ) + v7 = 16; + v119 = v7; + } + lpuexcpta = a2 == 0xFFFF; + if ( lpuexcpta && a1 != 0 ) + { + v75 = (__int16 *)a1[2]; + if ( (unsigned int)v75 >= a1[3] ) + v76 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v76 = *v75; + v77 = v76 == -1; + v78 = 0; + if ( !v77 ) + v78 = a1; + v79 = lpuexcpta && a1 != 0; + v121 = v78; + if ( !v77 ) + v79 = 0; + v103 = v79; + } + else + { + v103 = a2 == 0xFFFF; + } + v114 = a4 == -1; + if ( v114 && a3 != 0 ) + { + v80 = (__int16 *)a3[2]; + if ( (unsigned int)v80 >= a3[3] ) + v81 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v81 = *v80; + v82 = v81 == -1; + v83 = 0; + if ( !v82 ) + v83 = a3; + v84 = v114 && a3 != 0; + v102 = v83; + if ( !v82 ) + v84 = 0; + v115 = v84; + } + else + { + v115 = a4 == -1; + } + if ( v115 != v103 ) + { + if ( v121 && a2 == 0xFFFF ) + { + v72 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v72 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v72; + v73 = 0; + if ( lpuexcptb != 0xFFFF ) + v73 = v121; + v121 = v73; + } + else + { + lpuexcptb = a2; + } + v8 = *(_BYTE *)(v120 + 16); + v98 = *(_WORD *)(v120 + 112) == lpuexcptb; + if ( *(_WORD *)(v120 + 112) == lpuexcptb || *(_WORD *)(v120 + 114) == lpuexcptb ) + { + if ( (!v8 || *(_WORD *)(v120 + 38) != lpuexcptb) && *(_WORD *)(v120 + 36) != lpuexcptb ) + { + v9 = v121[2]; + v10 = v121[3]; + if ( v9 >= v10 ) + { + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v11 = (__int16 *)v121[2]; + v10 = v121[3]; + } + else + { + v11 = (__int16 *)(v9 + 2); + v121[2] = v11; + } + if ( (unsigned int)v11 >= v10 ) + v12 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + v12 = *v11; + v13 = v12 == -1; + v14 = 0; + if ( !v13 ) + v14 = v121; + v111 = v13; + v121 = v14; + if ( v114 && v102 != 0 ) + { + v87 = (__int16 *)v102[2]; + if ( (unsigned int)v87 >= v102[3] ) + v88 = (*(int (__fastcall **)(_DWORD *))(*v102 + 36))(v102); + else + v88 = *v87; + v89 = v88 == -1; + v90 = 0; + if ( !v89 ) + v90 = v102; + v91 = v114 && v102 != 0; + v102 = v90; + if ( !v89 ) + v91 = 0; + v116 = v91; + } + else + { + v116 = a4 == -1; + } + if ( v111 == v116 ) + { + v106 = 1; + v104 = 0; + v117 = 0; + goto LABEL_49; + } + if ( v121 ) + { + v85 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v85 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v85; + v86 = 0; + if ( lpuexcptb != 0xFFFF ) + v86 = v121; + v8 = *(_BYTE *)(v120 + 16); + v121 = v86; + } + else + { + lpuexcptb = -1; + v8 = *(_BYTE *)(v120 + 16); + } + } + } + else + { + v98 = 0; + } + v104 = 0; + v117 = 0; + while ( 1 ) + { + if ( v8 && *(_WORD *)(v120 + 38) == lpuexcptb || *(_WORD *)(v120 + 36) == lpuexcptb ) + { +LABEL_178: + v106 = 0; + goto LABEL_49; + } + if ( *(_WORD *)(v120 + 120) != lpuexcptb ) + break; + v33 = v119 == 10 || !v117; + if ( !v33 ) + goto LABEL_36; + v117 = v100 == 0 || v119 == 8; + if ( !v117 ) + { + ++v104; + v117 = v33; + goto LABEL_40; + } + v15 = v121; + v104 = 0; + v119 = 8; + v16 = v121[2]; + v17 = v121[3]; + if ( v16 < v17 ) + { +LABEL_41: + v18 = (__int16 *)(v16 + 2); + v15[2] = v18; + if ( v17 > (unsigned int)v18 ) + goto LABEL_42; + goto LABEL_85; + } +LABEL_84: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v18 = (__int16 *)v121[2]; + if ( v121[3] > (unsigned int)v18 ) + { +LABEL_42: + v19 = *v18; + goto LABEL_43; + } +LABEL_85: + v19 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); +LABEL_43: + v20 = v19 == -1; + v21 = 0; + if ( !v20 ) + v21 = v121; + v107 = v20; + v121 = v21; + if ( v114 && v102 != 0 ) + { + v52 = (__int16 *)v102[2]; + if ( (unsigned int)v52 >= v102[3] ) + v53 = (*(int (__fastcall **)(_DWORD *))(*v102 + 36))(v102); + else + v53 = *v52; + v54 = v53 == -1; + v55 = 0; + if ( !v54 ) + v55 = v102; + v56 = v114 && v102 != 0; + v102 = v55; + if ( !v54 ) + v56 = 0; + v112 = v56; + } + else + { + v112 = a4 == -1; + } + if ( v112 == v107 ) + { + v106 = 1; + goto LABEL_49; + } + lpuexcptb = -1; + if ( v121 ) + { + v34 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v34 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v34; + v35 = 0; + if ( lpuexcptb != 0xFFFF ) + v35 = v121; + v121 = v35; + } + if ( !v117 ) + { + v106 = 0; + goto LABEL_49; + } + v8 = *(_BYTE *)(v120 + 16); + } + if ( !v117 ) + goto LABEL_178; +LABEL_36: + if ( *(_WORD *)(v120 + 116) != lpuexcptb && *(_WORD *)(v120 + 118) != lpuexcptb ) + { + v106 = 0; + v117 = 1; + goto LABEL_49; + } + if ( v100 != 0 && v119 != 16 ) + { + v106 = 0; + v95 = v119; + v96 = v119; + v117 = 1; + goto LABEL_52; + } + v104 = 0; + v117 = 0; + v119 = 16; +LABEL_40: + v15 = v121; + v16 = v121[2]; + v17 = v121[3]; + if ( v16 < v17 ) + goto LABEL_41; + goto LABEL_84; + } + v98 = 0; + lpuexcptb = 0; + v106 = 1; + v104 = 0; + v117 = 0; +LABEL_49: + v22 = 22; + if ( v119 != 16 ) + v22 = v119; + v95 = v22; + v96 = v22; +LABEL_52: + v129 = 0; + Block = v130; + LOBYTE(v130[0]) = 0; + if ( *(_BYTE *)(v120 + 16) ) + std::string::reserve(&Block, 0x20u); + v97 = 0xFFFFFFFF / v119; + v99 = *(_BYTE *)(v120 + 164); + if ( !v99 ) + { + if ( !v106 ) + { + v101 = 0; + v113 = 0; + while ( v96 > 10 ) + { + if ( (unsigned __int16)(lpuexcptb - 48) <= 9u ) + goto LABEL_60; + if ( (unsigned __int16)(lpuexcptb - 97) > 5u ) + { + if ( (unsigned __int16)(lpuexcptb - 65) > 5u ) + goto LABEL_102; + v23 = lpuexcptb - 55; + goto LABEL_61; + } + v23 = lpuexcptb - 87; + if ( v97 < v113 ) + { +LABEL_62: + v24 = v121; + v101 = 1; + v25 = v121[2]; + v26 = v121[3]; + if ( v25 < v26 ) + goto LABEL_63; + goto LABEL_118; + } +LABEL_117: + v101 |= ~v23 < v119 * v113; + v24 = v121; + v113 = v119 * v113 + v23; + v26 = v121[3]; + v25 = v121[2]; + ++v104; + if ( v25 < v26 ) + { +LABEL_63: + v27 = (__int16 *)(v25 + 2); + v24[2] = v27; + goto LABEL_64; + } +LABEL_118: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v27 = (__int16 *)v121[2]; + v26 = v121[3]; +LABEL_64: + if ( v26 <= (unsigned int)v27 ) + v28 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + v28 = *v27; + v29 = v28 == -1; + v30 = 0; + if ( !v29 ) + v30 = v121; + v108 = v29; + v121 = v30; + if ( v114 && v102 != 0 ) + { + v66 = (__int16 *)v102[2]; + if ( (unsigned int)v66 >= v102[3] ) + v67 = (*(int (__fastcall **)(_DWORD *))(*v102 + 36))(v102); + else + v67 = *v66; + v68 = v67 == -1; + v69 = 0; + if ( !v68 ) + v69 = v102; + v70 = v114 && v102 != 0; + v102 = v69; + if ( !v68 ) + v70 = 0; + lpuexcptc = v70; + } + else + { + lpuexcptc = a4 == -1; + } + if ( v108 == lpuexcptc ) + { + v99 = 1; + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + goto LABEL_72; + } + if ( v121 ) + { + v57 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v57 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v57; + v58 = 0; + if ( lpuexcptb != 0xFFFF ) + v58 = v121; + v121 = v58; + } + else + { + lpuexcptb = -1; + } + } + if ( lpuexcptb <= 0x2Fu || (unsigned __int16)(v96 + 48) <= lpuexcptb ) + goto LABEL_102; +LABEL_60: + v23 = lpuexcptb - 48; +LABEL_61: + if ( v97 < v113 ) + goto LABEL_62; + goto LABEL_117; + } + v92 = v106; + v101 = 0; + v106 = 0; + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + v99 = v92; + v113 = 0; + goto LABEL_72; + } + if ( v106 ) + { + v113 = 0; + v101 = 0; + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + v99 = v106; + v106 = 0; +LABEL_72: + if ( lpuexcptd ) + goto LABEL_103; +LABEL_73: + if ( v117 || v104 ) + goto LABEL_111; + goto LABEL_75; + } + v101 = 0; + v113 = 0; + while ( 1 ) + { + if ( *(_BYTE *)(v120 + 16) && *(_WORD *)(v120 + 38) == lpuexcptb ) + { + v31 = (int *)Block; + lpuexcptd = (struct _Unwind_Exception *)v129; + if ( !v104 ) + { + v99 = 0; + v106 = *(_BYTE *)(v120 + 16); + goto LABEL_72; + } + v110 = v104; + v59 = 15; + if ( Block != v130 ) + v59 = v130[0]; + v105 = v129 + 1; + if ( v129 + 1 > v59 ) + { + std::string::_M_mutate((int)&Block, v129, 0, 0, 1u); + v31 = (int *)Block; + } + v60 = v105; + v104 = 0; + *((_BYTE *)lpuexcptd + (_DWORD)v31) = v110; + v129 = v60; + *((_BYTE *)Block + v60) = 0; +LABEL_123: + v43 = v121; + v44 = v121[2]; + v45 = v121[3]; + if ( v44 < v45 ) + goto LABEL_124; + goto LABEL_134; + } + if ( lpuexcptb == *(_WORD *)(v120 + 36) ) + break; + v36 = (_WORD *)(v120 + 120); + v37 = v95; + while ( *v36 != lpuexcptb ) + { + ++v36; + if ( !--v37 ) + goto LABEL_102; + } + v39 = (int)v36 - v120 - 120; + v40 = v39 <= 30; + v41 = (v39 >> 1) - 6; + v42 = v39 >> 1; + if ( !v40 ) + v42 = v41; + if ( v97 < v113 ) + { + v101 = v99; + goto LABEL_123; + } + v101 |= ~v42 < v119 * v113; + v43 = v121; + v113 = v119 * v113 + v42; + v45 = v121[3]; + v44 = v121[2]; + ++v104; + if ( v44 < v45 ) + { +LABEL_124: + v46 = (__int16 *)(v44 + 2); + v43[2] = v46; + goto LABEL_125; + } +LABEL_134: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v46 = (__int16 *)v121[2]; + v45 = v121[3]; +LABEL_125: + if ( v45 <= (unsigned int)v46 ) + v47 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + v47 = *v46; + v48 = v47 == -1; + v49 = 0; + if ( !v48 ) + v49 = v121; + v109 = v48; + v121 = v49; + if ( v114 && v102 != 0 ) + { + v61 = (__int16 *)v102[2]; + if ( (unsigned int)v61 >= v102[3] ) + v62 = (*(int (__fastcall **)(_DWORD *))(*v102 + 36))(v102); + else + v62 = *v61; + v63 = v62 == -1; + v64 = 0; + if ( !v63 ) + v64 = v102; + v65 = v114 && v102 != 0; + v102 = v64; + if ( !v63 ) + v65 = 0; + lpuexcpte = v65; + } + else + { + lpuexcpte = a4 == -1; + } + if ( v109 == lpuexcpte ) + { + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + goto LABEL_72; + } + if ( v121 ) + { + v50 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v50 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v50; + v51 = 0; + if ( lpuexcptb != 0xFFFF ) + v51 = v121; + v121 = v51; + } + else + { + lpuexcptb = -1; + } + } +LABEL_102: + v99 = 0; + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + if ( !v129 ) + goto LABEL_73; +LABEL_103: + v38 = 15; + if ( v31 != v130 ) + v38 = v130[0]; + if ( (unsigned int)lpuexcptd + 1 > v38 ) + { + std::string::_M_mutate((int)&Block, (size_t)lpuexcptd, 0, 0, 1u); + v31 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v31) = v104; + v129 = (size_t)lpuexcptd + 1; + *((_BYTE *)lpuexcptd + (_DWORD)Block + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v120 + 8), *(_DWORD *)(v120 + 12), (int)&Block) ) + *a6 = 4; + v31 = (int *)Block; + if ( !v117 && !(v129 | v104) ) + { +LABEL_75: + *a7 = 0; + *a6 = 4; + goto LABEL_76; + } +LABEL_111: + if ( v106 ) + goto LABEL_75; + if ( v101 ) + { + *a7 = -1; + *a6 = 4; + } + else + { + v71 = -v113; + if ( !v98 ) + v71 = v113; + *a7 = v71; + } +LABEL_76: + if ( v99 ) + *a6 |= 2u; + if ( v31 != v130 ) + operator delete(v31); + return v121; +} +// 4A66D0: variable 'v93' is possibly undefined +// 53F72C: using guessed type signed __int32 std::numpunct::id; +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (004A6AE0) -------------------------------------------------------- +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11]( + _DWORD *a1, + unsigned __int16 a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + int *a7) +{ + int v7; // eax + char v8; // al + unsigned int v9; // eax + unsigned int v10; // edx + __int16 *v11; // eax + __int16 v12; // ax + bool v13; // zf + _DWORD *v14; // eax + _DWORD *v15; // ebx + unsigned int v16; // eax + unsigned int v17; // edx + __int16 *v18; // eax + __int16 v19; // ax + bool v20; // zf + _DWORD *v21; // eax + int v22; // eax + int v23; // eax + _DWORD *v24; // ecx + unsigned int v25; // eax + unsigned int v26; // edx + __int16 *v27; // eax + __int16 v28; // ax + bool v29; // zf + _DWORD *v30; // eax + int *v31; // eax + bool v33; // al + unsigned __int16 *v34; // eax + _DWORD *v35; // eax + _WORD *v36; // eax + unsigned int v37; // edx + unsigned int v38; // edx + int v39; // eax + bool v40; // cc + int v41; // edx + int v42; // eax + _DWORD *v43; // ecx + unsigned int v44; // eax + unsigned int v45; // edx + __int16 *v46; // eax + __int16 v47; // ax + bool v48; // zf + _DWORD *v49; // eax + unsigned __int16 *v50; // eax + _DWORD *v51; // eax + __int16 *v52; // eax + __int16 v53; // ax + bool v54; // zf + _DWORD *v55; // eax + bool v56; // bl + unsigned __int16 *v57; // eax + _DWORD *v58; // eax + size_t v59; // edx + size_t v60; // edx + __int16 *v61; // eax + __int16 v62; // ax + bool v63; // zf + _DWORD *v64; // eax + bool v65; // bl + __int16 *v66; // eax + __int16 v67; // ax + bool v68; // zf + _DWORD *v69; // eax + bool v70; // bl + int v71; // edx + unsigned __int16 *v72; // eax + _DWORD *v73; // eax + _DWORD *v74; // eax + __int16 *v75; // eax + __int16 v76; // ax + bool v77; // zf + _DWORD *v78; // eax + bool v79; // cl + __int16 *v80; // eax + __int16 v81; // ax + bool v82; // zf + _DWORD *v83; // eax + bool v84; // cl + unsigned __int16 *v85; // eax + _DWORD *v86; // edx + __int16 *v87; // eax + __int16 v88; // ax + bool v89; // zf + _DWORD *v90; // eax + bool v91; // dl + char v92; // bl + unsigned int v93; // [esp+8h] [ebp-C0h] + std::locale::_Impl *v94; // [esp+1Ch] [ebp-ACh] + bool v95; // [esp+20h] [ebp-A8h] + unsigned int v96; // [esp+28h] [ebp-A0h] + unsigned int v97; // [esp+2Ch] [ebp-9Ch] + int v98; // [esp+30h] [ebp-98h] + unsigned int v99; // [esp+34h] [ebp-94h] + char v100; // [esp+3Eh] [ebp-8Ah] + int v101; // [esp+40h] [ebp-88h] + char v102; // [esp+40h] [ebp-88h] + _DWORD *v103; // [esp+44h] [ebp-84h] + char v104; // [esp+48h] [ebp-80h] + int v105; // [esp+48h] [ebp-80h] + size_t v106; // [esp+48h] [ebp-80h] + char v107; // [esp+4Dh] [ebp-7Bh] + char v108; // [esp+4Eh] [ebp-7Ah] + char v109; // [esp+4Eh] [ebp-7Ah] + char v110; // [esp+4Eh] [ebp-7Ah] + char v111; // [esp+4Eh] [ebp-7Ah] + char v112; // [esp+50h] [ebp-78h] + char v113; // [esp+50h] [ebp-78h] + unsigned int v114; // [esp+50h] [ebp-78h] + bool v115; // [esp+54h] [ebp-74h] + char v116; // [esp+58h] [ebp-70h] + char v117; // [esp+58h] [ebp-70h] + bool v118; // [esp+58h] [ebp-70h] + int *v119; // [esp+5Ch] [ebp-6Ch] + unsigned int v120; // [esp+5Ch] [ebp-6Ch] + int v121; // [esp+60h] [ebp-68h] + _DWORD *v122; // [esp+64h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+68h] [ebp-60h] + bool lpuexcpta; // [esp+68h] [ebp-60h] + unsigned __int16 lpuexcptb; // [esp+68h] [ebp-60h] + char lpuexcptc; // [esp+68h] [ebp-60h] + struct _Unwind_Exception *lpuexcptd; // [esp+68h] [ebp-60h] + char lpuexcpte; // [esp+68h] [ebp-60h] + void *Block; // [esp+A8h] [ebp-20h] BYREF + size_t v130; // [esp+ACh] [ebp-1Ch] + int v131[5]; // [esp+B0h] [ebp-18h] BYREF + + v122 = a1; + v103 = a3; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v119 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)lpuexcpt); + v121 = *v119; + if ( !*v119 ) + { + v74 = operator new(0xA8u); + v74[1] = 0; + *v74 = &off_5605C0; + v74[2] = 0; + v74[3] = 0; + *((_BYTE *)v74 + 16) = 0; + v74[5] = 0; + v74[6] = 0; + v74[7] = 0; + v74[8] = 0; + v74[9] = 0; + *((_BYTE *)v74 + 164) = 0; + v94 = (std::locale::_Impl *)v74; + std::__numpunct_cache::_M_cache((int)v74, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v94, lpuexcpt, v93); + v121 = *v119; + } + v120 = 8; + v101 = *(_DWORD *)(a5 + 12) & 0x4A; + if ( v101 != 64 ) + { + v7 = 10; + if ( v101 == 8 ) + v7 = 16; + v120 = v7; + } + lpuexcpta = a2 == 0xFFFF; + if ( lpuexcpta && a1 != 0 ) + { + v75 = (__int16 *)a1[2]; + if ( (unsigned int)v75 >= a1[3] ) + v76 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v76 = *v75; + v77 = v76 == -1; + v78 = 0; + if ( !v77 ) + v78 = a1; + v79 = lpuexcpta && a1 != 0; + v122 = v78; + if ( !v77 ) + v79 = 0; + v104 = v79; + } + else + { + v104 = a2 == 0xFFFF; + } + v115 = a4 == -1; + if ( v115 && a3 != 0 ) + { + v80 = (__int16 *)a3[2]; + if ( (unsigned int)v80 >= a3[3] ) + v81 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v81 = *v80; + v82 = v81 == -1; + v83 = 0; + if ( !v82 ) + v83 = a3; + v84 = v115 && a3 != 0; + v103 = v83; + if ( !v82 ) + v84 = 0; + v116 = v84; + } + else + { + v116 = a4 == -1; + } + if ( v116 != v104 ) + { + if ( v122 && a2 == 0xFFFF ) + { + v72 = (unsigned __int16 *)v122[2]; + if ( (unsigned int)v72 >= v122[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + lpuexcptb = *v72; + v73 = 0; + if ( lpuexcptb != 0xFFFF ) + v73 = v122; + v122 = v73; + } + else + { + lpuexcptb = a2; + } + v8 = *(_BYTE *)(v121 + 16); + v95 = *(_WORD *)(v121 + 112) == lpuexcptb; + if ( *(_WORD *)(v121 + 112) == lpuexcptb || *(_WORD *)(v121 + 114) == lpuexcptb ) + { + if ( (!v8 || *(_WORD *)(v121 + 38) != lpuexcptb) && *(_WORD *)(v121 + 36) != lpuexcptb ) + { + v9 = v122[2]; + v10 = v122[3]; + if ( v9 >= v10 ) + { + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v11 = (__int16 *)v122[2]; + v10 = v122[3]; + } + else + { + v11 = (__int16 *)(v9 + 2); + v122[2] = v11; + } + if ( (unsigned int)v11 >= v10 ) + v12 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + v12 = *v11; + v13 = v12 == -1; + v14 = 0; + if ( !v13 ) + v14 = v122; + v112 = v13; + v122 = v14; + if ( v115 && v103 != 0 ) + { + v87 = (__int16 *)v103[2]; + if ( (unsigned int)v87 >= v103[3] ) + v88 = (*(int (__fastcall **)(_DWORD *))(*v103 + 36))(v103); + else + v88 = *v87; + v89 = v88 == -1; + v90 = 0; + if ( !v89 ) + v90 = v103; + v91 = v115 && v103 != 0; + v103 = v90; + if ( !v89 ) + v91 = 0; + v117 = v91; + } + else + { + v117 = a4 == -1; + } + if ( v112 == v117 ) + { + v107 = 1; + v105 = 0; + v118 = 0; + goto LABEL_49; + } + if ( v122 ) + { + v85 = (unsigned __int16 *)v122[2]; + if ( (unsigned int)v85 >= v122[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + lpuexcptb = *v85; + v86 = 0; + if ( lpuexcptb != 0xFFFF ) + v86 = v122; + v8 = *(_BYTE *)(v121 + 16); + v122 = v86; + } + else + { + lpuexcptb = -1; + v8 = *(_BYTE *)(v121 + 16); + } + } + } + else + { + v95 = 0; + } + v105 = 0; + v118 = 0; + while ( 1 ) + { + if ( v8 && *(_WORD *)(v121 + 38) == lpuexcptb || *(_WORD *)(v121 + 36) == lpuexcptb ) + { +LABEL_178: + v107 = 0; + goto LABEL_49; + } + if ( *(_WORD *)(v121 + 120) != lpuexcptb ) + break; + v33 = v120 == 10 || !v118; + if ( !v33 ) + goto LABEL_36; + v118 = v101 == 0 || v120 == 8; + if ( !v118 ) + { + ++v105; + v118 = v33; + goto LABEL_40; + } + v15 = v122; + v105 = 0; + v120 = 8; + v16 = v122[2]; + v17 = v122[3]; + if ( v16 < v17 ) + { +LABEL_41: + v18 = (__int16 *)(v16 + 2); + v15[2] = v18; + if ( (unsigned int)v18 < v17 ) + goto LABEL_42; + goto LABEL_85; + } +LABEL_84: + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v18 = (__int16 *)v122[2]; + if ( (unsigned int)v18 < v122[3] ) + { +LABEL_42: + v19 = *v18; + goto LABEL_43; + } +LABEL_85: + v19 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); +LABEL_43: + v20 = v19 == -1; + v21 = 0; + if ( !v20 ) + v21 = v122; + v108 = v20; + v122 = v21; + if ( v115 && v103 != 0 ) + { + v52 = (__int16 *)v103[2]; + if ( (unsigned int)v52 >= v103[3] ) + v53 = (*(int (__fastcall **)(_DWORD *))(*v103 + 36))(v103); + else + v53 = *v52; + v54 = v53 == -1; + v55 = 0; + if ( !v54 ) + v55 = v103; + v56 = v115 && v103 != 0; + v103 = v55; + if ( !v54 ) + v56 = 0; + v113 = v56; + } + else + { + v113 = a4 == -1; + } + if ( v113 == v108 ) + { + v107 = 1; + goto LABEL_49; + } + lpuexcptb = -1; + if ( v122 ) + { + v34 = (unsigned __int16 *)v122[2]; + if ( (unsigned int)v34 >= v122[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + lpuexcptb = *v34; + v35 = 0; + if ( lpuexcptb != 0xFFFF ) + v35 = v122; + v122 = v35; + } + if ( !v118 ) + { + v107 = 0; + goto LABEL_49; + } + v8 = *(_BYTE *)(v121 + 16); + } + if ( !v118 ) + goto LABEL_178; +LABEL_36: + if ( *(_WORD *)(v121 + 116) != lpuexcptb && *(_WORD *)(v121 + 118) != lpuexcptb ) + { + v107 = 0; + v118 = 1; + goto LABEL_49; + } + if ( v101 != 0 && v120 != 16 ) + { + v107 = 0; + v96 = v120; + v98 = v120; + v118 = 1; + goto LABEL_52; + } + v105 = 0; + v118 = 0; + v120 = 16; +LABEL_40: + v15 = v122; + v16 = v122[2]; + v17 = v122[3]; + if ( v16 < v17 ) + goto LABEL_41; + goto LABEL_84; + } + v95 = 0; + lpuexcptb = 0; + v107 = 1; + v105 = 0; + v118 = 0; +LABEL_49: + v22 = 22; + if ( v120 != 16 ) + v22 = v120; + v96 = v22; + v98 = v22; +LABEL_52: + v130 = 0; + Block = v131; + LOBYTE(v131[0]) = 0; + if ( *(_BYTE *)(v121 + 16) ) + std::string::reserve(&Block, 0x20u); + v97 = v95 + 0x7FFFFFFF; + v99 = v97 / v120; + v100 = *(_BYTE *)(v121 + 164); + if ( !v100 ) + { + if ( !v107 ) + { + v102 = 0; + v114 = 0; + while ( v98 > 10 ) + { + if ( (unsigned __int16)(lpuexcptb - 48) <= 9u ) + goto LABEL_60; + if ( (unsigned __int16)(lpuexcptb - 97) > 5u ) + { + if ( (unsigned __int16)(lpuexcptb - 65) > 5u ) + goto LABEL_102; + v23 = lpuexcptb - 55; + goto LABEL_61; + } + v23 = lpuexcptb - 87; + if ( v99 < v114 ) + { +LABEL_62: + v24 = v122; + v102 = 1; + v25 = v122[2]; + v26 = v122[3]; + if ( v25 < v26 ) + goto LABEL_63; + goto LABEL_118; + } +LABEL_117: + v102 |= v97 - v23 < v120 * v114; + v24 = v122; + v114 = v120 * v114 + v23; + v26 = v122[3]; + v25 = v122[2]; + ++v105; + if ( v25 < v26 ) + { +LABEL_63: + v27 = (__int16 *)(v25 + 2); + v24[2] = v27; + goto LABEL_64; + } +LABEL_118: + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v27 = (__int16 *)v122[2]; + v26 = v122[3]; +LABEL_64: + if ( v26 <= (unsigned int)v27 ) + v28 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + v28 = *v27; + v29 = v28 == -1; + v30 = 0; + if ( !v29 ) + v30 = v122; + v109 = v29; + v122 = v30; + if ( v115 && v103 != 0 ) + { + v66 = (__int16 *)v103[2]; + if ( (unsigned int)v66 >= v103[3] ) + v67 = (*(int (__fastcall **)(_DWORD *))(*v103 + 36))(v103); + else + v67 = *v66; + v68 = v67 == -1; + v69 = 0; + if ( !v68 ) + v69 = v103; + v70 = v115 && v103 != 0; + v103 = v69; + if ( !v68 ) + v70 = 0; + lpuexcptc = v70; + } + else + { + lpuexcptc = a4 == -1; + } + if ( v109 == lpuexcptc ) + { + v100 = 1; + lpuexcptd = (struct _Unwind_Exception *)v130; + v31 = (int *)Block; + goto LABEL_72; + } + if ( v122 ) + { + v57 = (unsigned __int16 *)v122[2]; + if ( (unsigned int)v57 >= v122[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + lpuexcptb = *v57; + v58 = 0; + if ( lpuexcptb != 0xFFFF ) + v58 = v122; + v122 = v58; + } + else + { + lpuexcptb = -1; + } + } + if ( lpuexcptb <= 0x2Fu || (unsigned __int16)(v98 + 48) <= lpuexcptb ) + goto LABEL_102; +LABEL_60: + v23 = lpuexcptb - 48; +LABEL_61: + if ( v99 < v114 ) + goto LABEL_62; + goto LABEL_117; + } + v92 = v107; + v102 = 0; + v107 = 0; + lpuexcptd = (struct _Unwind_Exception *)v130; + v31 = (int *)Block; + v100 = v92; + v114 = 0; + goto LABEL_72; + } + if ( v107 ) + { + v114 = 0; + v102 = 0; + lpuexcptd = (struct _Unwind_Exception *)v130; + v31 = (int *)Block; + v100 = v107; + v107 = 0; +LABEL_72: + if ( lpuexcptd ) + goto LABEL_103; +LABEL_73: + if ( v118 || v105 ) + goto LABEL_111; + goto LABEL_75; + } + v102 = 0; + v114 = 0; + while ( 1 ) + { + if ( *(_BYTE *)(v121 + 16) && *(_WORD *)(v121 + 38) == lpuexcptb ) + { + v31 = (int *)Block; + lpuexcptd = (struct _Unwind_Exception *)v130; + if ( !v105 ) + { + v100 = 0; + v107 = *(_BYTE *)(v121 + 16); + goto LABEL_72; + } + v111 = v105; + v59 = 15; + if ( Block != v131 ) + v59 = v131[0]; + v106 = v130 + 1; + if ( v130 + 1 > v59 ) + { + std::string::_M_mutate((int)&Block, v130, 0, 0, 1u); + v31 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v31) = v111; + v60 = v106; + v105 = 0; + v130 = v60; + *((_BYTE *)Block + v60) = 0; +LABEL_123: + v43 = v122; + v44 = v122[2]; + v45 = v122[3]; + if ( v44 < v45 ) + goto LABEL_124; + goto LABEL_134; + } + if ( lpuexcptb == *(_WORD *)(v121 + 36) ) + break; + v36 = (_WORD *)(v121 + 120); + v37 = v96; + while ( *v36 != lpuexcptb ) + { + ++v36; + if ( !--v37 ) + goto LABEL_102; + } + v39 = (int)v36 - v121 - 120; + v40 = v39 <= 30; + v41 = (v39 >> 1) - 6; + v42 = v39 >> 1; + if ( !v40 ) + v42 = v41; + if ( v99 < v114 ) + { + v102 = v100; + goto LABEL_123; + } + v102 |= v97 - v42 < v120 * v114; + v43 = v122; + v114 = v120 * v114 + v42; + v45 = v122[3]; + v44 = v122[2]; + ++v105; + if ( v44 < v45 ) + { +LABEL_124: + v46 = (__int16 *)(v44 + 2); + v43[2] = v46; + goto LABEL_125; + } +LABEL_134: + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v46 = (__int16 *)v122[2]; + v45 = v122[3]; +LABEL_125: + if ( v45 <= (unsigned int)v46 ) + v47 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + v47 = *v46; + v48 = v47 == -1; + v49 = 0; + if ( !v48 ) + v49 = v122; + v110 = v48; + v122 = v49; + if ( v115 && v103 != 0 ) + { + v61 = (__int16 *)v103[2]; + if ( (unsigned int)v61 >= v103[3] ) + v62 = (*(int (__fastcall **)(_DWORD *))(*v103 + 36))(v103); + else + v62 = *v61; + v63 = v62 == -1; + v64 = 0; + if ( !v63 ) + v64 = v103; + v65 = v115 && v103 != 0; + v103 = v64; + if ( !v63 ) + v65 = 0; + lpuexcpte = v65; + } + else + { + lpuexcpte = a4 == -1; + } + if ( lpuexcpte == v110 ) + { + lpuexcptd = (struct _Unwind_Exception *)v130; + v31 = (int *)Block; + goto LABEL_72; + } + if ( v122 ) + { + v50 = (unsigned __int16 *)v122[2]; + if ( (unsigned int)v50 >= v122[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + lpuexcptb = *v50; + v51 = 0; + if ( lpuexcptb != 0xFFFF ) + v51 = v122; + v122 = v51; + } + else + { + lpuexcptb = -1; + } + } +LABEL_102: + v100 = 0; + lpuexcptd = (struct _Unwind_Exception *)v130; + v31 = (int *)Block; + if ( !v130 ) + goto LABEL_73; +LABEL_103: + v38 = 15; + if ( v31 != v131 ) + v38 = v131[0]; + if ( (unsigned int)lpuexcptd + 1 > v38 ) + { + std::string::_M_mutate((int)&Block, (size_t)lpuexcptd, 0, 0, 1u); + v31 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v31) = v105; + v130 = (size_t)lpuexcptd + 1; + *((_BYTE *)lpuexcptd + (_DWORD)Block + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v121 + 8), *(_DWORD *)(v121 + 12), (int)&Block) ) + *a6 = 4; + v31 = (int *)Block; + if ( !v118 && !(v130 | v105) ) + { +LABEL_75: + *a7 = 0; + *a6 = 4; + goto LABEL_76; + } +LABEL_111: + if ( v107 ) + goto LABEL_75; + if ( v102 ) + { + *a7 = v95 + 0x7FFFFFFF; + *a6 = 4; + } + else + { + v71 = -v114; + if ( !v95 ) + v71 = v114; + *a7 = v71; + } +LABEL_76: + if ( v100 ) + *a6 |= 2u; + if ( v31 != v131 ) + operator delete(v31); + return v122; +} +// 4A76E0: variable 'v93' is possibly undefined +// 53F72C: using guessed type signed __int32 std::numpunct::id; +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (004A7AF0) -------------------------------------------------------- +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11]( + _DWORD *a1, + unsigned __int16 a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + int *a7) +{ + int v7; // eax + char v8; // al + unsigned int v9; // eax + unsigned int v10; // edx + __int16 *v11; // eax + __int16 v12; // ax + bool v13; // zf + _DWORD *v14; // eax + _DWORD *v15; // ebx + unsigned int v16; // eax + unsigned int v17; // edx + __int16 *v18; // eax + __int16 v19; // ax + bool v20; // zf + _DWORD *v21; // eax + int v22; // eax + int v23; // eax + _DWORD *v24; // ecx + unsigned int v25; // eax + unsigned int v26; // edx + __int16 *v27; // eax + __int16 v28; // ax + bool v29; // zf + _DWORD *v30; // eax + int *v31; // eax + bool v33; // al + unsigned __int16 *v34; // eax + _DWORD *v35; // eax + _WORD *v36; // eax + unsigned int v37; // edx + unsigned int v38; // edx + int v39; // eax + bool v40; // cc + int v41; // edx + int v42; // eax + _DWORD *v43; // ecx + unsigned int v44; // eax + unsigned int v45; // edx + __int16 *v46; // eax + __int16 v47; // ax + bool v48; // zf + _DWORD *v49; // eax + unsigned __int16 *v50; // eax + _DWORD *v51; // eax + __int16 *v52; // eax + __int16 v53; // ax + bool v54; // zf + _DWORD *v55; // eax + bool v56; // bl + unsigned __int16 *v57; // eax + _DWORD *v58; // eax + size_t v59; // edx + size_t v60; // ecx + __int16 *v61; // eax + __int16 v62; // ax + bool v63; // zf + _DWORD *v64; // eax + bool v65; // dl + __int16 *v66; // eax + __int16 v67; // ax + bool v68; // zf + _DWORD *v69; // eax + bool v70; // cl + int v71; // edx + unsigned __int16 *v72; // eax + _DWORD *v73; // eax + _DWORD *v74; // eax + __int16 *v75; // eax + __int16 v76; // ax + bool v77; // zf + _DWORD *v78; // eax + bool v79; // bl + __int16 *v80; // eax + __int16 v81; // ax + bool v82; // zf + _DWORD *v83; // eax + bool v84; // dl + unsigned __int16 *v85; // eax + _DWORD *v86; // edx + __int16 *v87; // eax + __int16 v88; // ax + bool v89; // zf + _DWORD *v90; // eax + bool v91; // bl + char v92; // bl + unsigned int v93; // [esp+8h] [ebp-B0h] + std::locale::_Impl *v94; // [esp+14h] [ebp-A4h] + unsigned int v95; // [esp+1Ch] [ebp-9Ch] + int v96; // [esp+20h] [ebp-98h] + unsigned int v97; // [esp+24h] [ebp-94h] + bool v98; // [esp+2Dh] [ebp-8Bh] + char v99; // [esp+2Eh] [ebp-8Ah] + int v100; // [esp+30h] [ebp-88h] + char v101; // [esp+30h] [ebp-88h] + _DWORD *v102; // [esp+34h] [ebp-84h] + char v103; // [esp+38h] [ebp-80h] + int v104; // [esp+38h] [ebp-80h] + size_t v105; // [esp+38h] [ebp-80h] + char v106; // [esp+3Dh] [ebp-7Bh] + char v107; // [esp+3Eh] [ebp-7Ah] + char v108; // [esp+3Eh] [ebp-7Ah] + char v109; // [esp+3Eh] [ebp-7Ah] + char v110; // [esp+3Eh] [ebp-7Ah] + char v111; // [esp+40h] [ebp-78h] + char v112; // [esp+40h] [ebp-78h] + unsigned int v113; // [esp+40h] [ebp-78h] + bool v114; // [esp+44h] [ebp-74h] + char v115; // [esp+48h] [ebp-70h] + char v116; // [esp+48h] [ebp-70h] + bool v117; // [esp+48h] [ebp-70h] + int *v118; // [esp+4Ch] [ebp-6Ch] + unsigned int v119; // [esp+4Ch] [ebp-6Ch] + int v120; // [esp+50h] [ebp-68h] + _DWORD *v121; // [esp+54h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+58h] [ebp-60h] + bool lpuexcpta; // [esp+58h] [ebp-60h] + unsigned __int16 lpuexcptb; // [esp+58h] [ebp-60h] + char lpuexcptc; // [esp+58h] [ebp-60h] + struct _Unwind_Exception *lpuexcptd; // [esp+58h] [ebp-60h] + char lpuexcpte; // [esp+58h] [ebp-60h] + void *Block; // [esp+98h] [ebp-20h] BYREF + size_t v129; // [esp+9Ch] [ebp-1Ch] + int v130[5]; // [esp+A0h] [ebp-18h] BYREF + + v121 = a1; + v102 = a3; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v118 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)lpuexcpt); + v120 = *v118; + if ( !*v118 ) + { + v74 = operator new(0xA8u); + v74[1] = 0; + *v74 = &off_5605C0; + v74[2] = 0; + v74[3] = 0; + *((_BYTE *)v74 + 16) = 0; + v74[5] = 0; + v74[6] = 0; + v74[7] = 0; + v74[8] = 0; + v74[9] = 0; + *((_BYTE *)v74 + 164) = 0; + v94 = (std::locale::_Impl *)v74; + std::__numpunct_cache::_M_cache((int)v74, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v94, lpuexcpt, v93); + v120 = *v118; + } + v119 = 8; + v100 = *(_DWORD *)(a5 + 12) & 0x4A; + if ( v100 != 64 ) + { + v7 = 10; + if ( v100 == 8 ) + v7 = 16; + v119 = v7; + } + lpuexcpta = a2 == 0xFFFF; + if ( lpuexcpta && a1 != 0 ) + { + v75 = (__int16 *)a1[2]; + if ( (unsigned int)v75 >= a1[3] ) + v76 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v76 = *v75; + v77 = v76 == -1; + v78 = 0; + if ( !v77 ) + v78 = a1; + v79 = lpuexcpta && a1 != 0; + v121 = v78; + if ( !v77 ) + v79 = 0; + v103 = v79; + } + else + { + v103 = a2 == 0xFFFF; + } + v114 = a4 == -1; + if ( v114 && a3 != 0 ) + { + v80 = (__int16 *)a3[2]; + if ( (unsigned int)v80 >= a3[3] ) + v81 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v81 = *v80; + v82 = v81 == -1; + v83 = 0; + if ( !v82 ) + v83 = a3; + v84 = v114 && a3 != 0; + v102 = v83; + if ( !v82 ) + v84 = 0; + v115 = v84; + } + else + { + v115 = a4 == -1; + } + if ( v115 != v103 ) + { + if ( v121 && a2 == 0xFFFF ) + { + v72 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v72 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v72; + v73 = 0; + if ( lpuexcptb != 0xFFFF ) + v73 = v121; + v121 = v73; + } + else + { + lpuexcptb = a2; + } + v8 = *(_BYTE *)(v120 + 16); + v98 = *(_WORD *)(v120 + 112) == lpuexcptb; + if ( *(_WORD *)(v120 + 112) == lpuexcptb || *(_WORD *)(v120 + 114) == lpuexcptb ) + { + if ( (!v8 || *(_WORD *)(v120 + 38) != lpuexcptb) && *(_WORD *)(v120 + 36) != lpuexcptb ) + { + v9 = v121[2]; + v10 = v121[3]; + if ( v9 >= v10 ) + { + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v11 = (__int16 *)v121[2]; + v10 = v121[3]; + } + else + { + v11 = (__int16 *)(v9 + 2); + v121[2] = v11; + } + if ( (unsigned int)v11 >= v10 ) + v12 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + v12 = *v11; + v13 = v12 == -1; + v14 = 0; + if ( !v13 ) + v14 = v121; + v111 = v13; + v121 = v14; + if ( v114 && v102 != 0 ) + { + v87 = (__int16 *)v102[2]; + if ( (unsigned int)v87 >= v102[3] ) + v88 = (*(int (__fastcall **)(_DWORD *))(*v102 + 36))(v102); + else + v88 = *v87; + v89 = v88 == -1; + v90 = 0; + if ( !v89 ) + v90 = v102; + v91 = v114 && v102 != 0; + v102 = v90; + if ( !v89 ) + v91 = 0; + v116 = v91; + } + else + { + v116 = a4 == -1; + } + if ( v111 == v116 ) + { + v106 = 1; + v104 = 0; + v117 = 0; + goto LABEL_49; + } + if ( v121 ) + { + v85 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v85 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v85; + v86 = 0; + if ( lpuexcptb != 0xFFFF ) + v86 = v121; + v8 = *(_BYTE *)(v120 + 16); + v121 = v86; + } + else + { + lpuexcptb = -1; + v8 = *(_BYTE *)(v120 + 16); + } + } + } + else + { + v98 = 0; + } + v104 = 0; + v117 = 0; + while ( 1 ) + { + if ( v8 && *(_WORD *)(v120 + 38) == lpuexcptb || *(_WORD *)(v120 + 36) == lpuexcptb ) + { +LABEL_178: + v106 = 0; + goto LABEL_49; + } + if ( *(_WORD *)(v120 + 120) != lpuexcptb ) + break; + v33 = v119 == 10 || !v117; + if ( !v33 ) + goto LABEL_36; + v117 = v100 == 0 || v119 == 8; + if ( !v117 ) + { + ++v104; + v117 = v33; + goto LABEL_40; + } + v15 = v121; + v104 = 0; + v119 = 8; + v16 = v121[2]; + v17 = v121[3]; + if ( v16 < v17 ) + { +LABEL_41: + v18 = (__int16 *)(v16 + 2); + v15[2] = v18; + if ( v17 > (unsigned int)v18 ) + goto LABEL_42; + goto LABEL_85; + } +LABEL_84: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v18 = (__int16 *)v121[2]; + if ( v121[3] > (unsigned int)v18 ) + { +LABEL_42: + v19 = *v18; + goto LABEL_43; + } +LABEL_85: + v19 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); +LABEL_43: + v20 = v19 == -1; + v21 = 0; + if ( !v20 ) + v21 = v121; + v107 = v20; + v121 = v21; + if ( v114 && v102 != 0 ) + { + v52 = (__int16 *)v102[2]; + if ( (unsigned int)v52 >= v102[3] ) + v53 = (*(int (__fastcall **)(_DWORD *))(*v102 + 36))(v102); + else + v53 = *v52; + v54 = v53 == -1; + v55 = 0; + if ( !v54 ) + v55 = v102; + v56 = v114 && v102 != 0; + v102 = v55; + if ( !v54 ) + v56 = 0; + v112 = v56; + } + else + { + v112 = a4 == -1; + } + if ( v112 == v107 ) + { + v106 = 1; + goto LABEL_49; + } + lpuexcptb = -1; + if ( v121 ) + { + v34 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v34 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v34; + v35 = 0; + if ( lpuexcptb != 0xFFFF ) + v35 = v121; + v121 = v35; + } + if ( !v117 ) + { + v106 = 0; + goto LABEL_49; + } + v8 = *(_BYTE *)(v120 + 16); + } + if ( !v117 ) + goto LABEL_178; +LABEL_36: + if ( *(_WORD *)(v120 + 116) != lpuexcptb && *(_WORD *)(v120 + 118) != lpuexcptb ) + { + v106 = 0; + v117 = 1; + goto LABEL_49; + } + if ( v100 != 0 && v119 != 16 ) + { + v106 = 0; + v95 = v119; + v96 = v119; + v117 = 1; + goto LABEL_52; + } + v104 = 0; + v117 = 0; + v119 = 16; +LABEL_40: + v15 = v121; + v16 = v121[2]; + v17 = v121[3]; + if ( v16 < v17 ) + goto LABEL_41; + goto LABEL_84; + } + v98 = 0; + lpuexcptb = 0; + v106 = 1; + v104 = 0; + v117 = 0; +LABEL_49: + v22 = 22; + if ( v119 != 16 ) + v22 = v119; + v95 = v22; + v96 = v22; +LABEL_52: + v129 = 0; + Block = v130; + LOBYTE(v130[0]) = 0; + if ( *(_BYTE *)(v120 + 16) ) + std::string::reserve(&Block, 0x20u); + v97 = 0xFFFFFFFF / v119; + v99 = *(_BYTE *)(v120 + 164); + if ( !v99 ) + { + if ( !v106 ) + { + v101 = 0; + v113 = 0; + while ( v96 > 10 ) + { + if ( (unsigned __int16)(lpuexcptb - 48) <= 9u ) + goto LABEL_60; + if ( (unsigned __int16)(lpuexcptb - 97) > 5u ) + { + if ( (unsigned __int16)(lpuexcptb - 65) > 5u ) + goto LABEL_102; + v23 = lpuexcptb - 55; + goto LABEL_61; + } + v23 = lpuexcptb - 87; + if ( v97 < v113 ) + { +LABEL_62: + v24 = v121; + v101 = 1; + v25 = v121[2]; + v26 = v121[3]; + if ( v25 < v26 ) + goto LABEL_63; + goto LABEL_118; + } +LABEL_117: + v101 |= ~v23 < v119 * v113; + v24 = v121; + v113 = v119 * v113 + v23; + v26 = v121[3]; + v25 = v121[2]; + ++v104; + if ( v25 < v26 ) + { +LABEL_63: + v27 = (__int16 *)(v25 + 2); + v24[2] = v27; + goto LABEL_64; + } +LABEL_118: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v27 = (__int16 *)v121[2]; + v26 = v121[3]; +LABEL_64: + if ( v26 <= (unsigned int)v27 ) + v28 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + v28 = *v27; + v29 = v28 == -1; + v30 = 0; + if ( !v29 ) + v30 = v121; + v108 = v29; + v121 = v30; + if ( v114 && v102 != 0 ) + { + v66 = (__int16 *)v102[2]; + if ( (unsigned int)v66 >= v102[3] ) + v67 = (*(int (__fastcall **)(_DWORD *))(*v102 + 36))(v102); + else + v67 = *v66; + v68 = v67 == -1; + v69 = 0; + if ( !v68 ) + v69 = v102; + v70 = v114 && v102 != 0; + v102 = v69; + if ( !v68 ) + v70 = 0; + lpuexcptc = v70; + } + else + { + lpuexcptc = a4 == -1; + } + if ( v108 == lpuexcptc ) + { + v99 = 1; + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + goto LABEL_72; + } + if ( v121 ) + { + v57 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v57 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v57; + v58 = 0; + if ( lpuexcptb != 0xFFFF ) + v58 = v121; + v121 = v58; + } + else + { + lpuexcptb = -1; + } + } + if ( lpuexcptb <= 0x2Fu || (unsigned __int16)(v96 + 48) <= lpuexcptb ) + goto LABEL_102; +LABEL_60: + v23 = lpuexcptb - 48; +LABEL_61: + if ( v97 < v113 ) + goto LABEL_62; + goto LABEL_117; + } + v92 = v106; + v101 = 0; + v106 = 0; + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + v99 = v92; + v113 = 0; + goto LABEL_72; + } + if ( v106 ) + { + v113 = 0; + v101 = 0; + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + v99 = v106; + v106 = 0; +LABEL_72: + if ( lpuexcptd ) + goto LABEL_103; +LABEL_73: + if ( v117 || v104 ) + goto LABEL_111; + goto LABEL_75; + } + v101 = 0; + v113 = 0; + while ( 1 ) + { + if ( *(_BYTE *)(v120 + 16) && *(_WORD *)(v120 + 38) == lpuexcptb ) + { + v31 = (int *)Block; + lpuexcptd = (struct _Unwind_Exception *)v129; + if ( !v104 ) + { + v99 = 0; + v106 = *(_BYTE *)(v120 + 16); + goto LABEL_72; + } + v110 = v104; + v59 = 15; + if ( Block != v130 ) + v59 = v130[0]; + v105 = v129 + 1; + if ( v129 + 1 > v59 ) + { + std::string::_M_mutate((int)&Block, v129, 0, 0, 1u); + v31 = (int *)Block; + } + v60 = v105; + v104 = 0; + *((_BYTE *)lpuexcptd + (_DWORD)v31) = v110; + v129 = v60; + *((_BYTE *)Block + v60) = 0; +LABEL_123: + v43 = v121; + v44 = v121[2]; + v45 = v121[3]; + if ( v44 < v45 ) + goto LABEL_124; + goto LABEL_134; + } + if ( lpuexcptb == *(_WORD *)(v120 + 36) ) + break; + v36 = (_WORD *)(v120 + 120); + v37 = v95; + while ( *v36 != lpuexcptb ) + { + ++v36; + if ( !--v37 ) + goto LABEL_102; + } + v39 = (int)v36 - v120 - 120; + v40 = v39 <= 30; + v41 = (v39 >> 1) - 6; + v42 = v39 >> 1; + if ( !v40 ) + v42 = v41; + if ( v97 < v113 ) + { + v101 = v99; + goto LABEL_123; + } + v101 |= ~v42 < v119 * v113; + v43 = v121; + v113 = v119 * v113 + v42; + v45 = v121[3]; + v44 = v121[2]; + ++v104; + if ( v44 < v45 ) + { +LABEL_124: + v46 = (__int16 *)(v44 + 2); + v43[2] = v46; + goto LABEL_125; + } +LABEL_134: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v46 = (__int16 *)v121[2]; + v45 = v121[3]; +LABEL_125: + if ( v45 <= (unsigned int)v46 ) + v47 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + v47 = *v46; + v48 = v47 == -1; + v49 = 0; + if ( !v48 ) + v49 = v121; + v109 = v48; + v121 = v49; + if ( v114 && v102 != 0 ) + { + v61 = (__int16 *)v102[2]; + if ( (unsigned int)v61 >= v102[3] ) + v62 = (*(int (__fastcall **)(_DWORD *))(*v102 + 36))(v102); + else + v62 = *v61; + v63 = v62 == -1; + v64 = 0; + if ( !v63 ) + v64 = v102; + v65 = v114 && v102 != 0; + v102 = v64; + if ( !v63 ) + v65 = 0; + lpuexcpte = v65; + } + else + { + lpuexcpte = a4 == -1; + } + if ( v109 == lpuexcpte ) + { + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + goto LABEL_72; + } + if ( v121 ) + { + v50 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v50 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v50; + v51 = 0; + if ( lpuexcptb != 0xFFFF ) + v51 = v121; + v121 = v51; + } + else + { + lpuexcptb = -1; + } + } +LABEL_102: + v99 = 0; + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + if ( !v129 ) + goto LABEL_73; +LABEL_103: + v38 = 15; + if ( v31 != v130 ) + v38 = v130[0]; + if ( (unsigned int)lpuexcptd + 1 > v38 ) + { + std::string::_M_mutate((int)&Block, (size_t)lpuexcptd, 0, 0, 1u); + v31 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v31) = v104; + v129 = (size_t)lpuexcptd + 1; + *((_BYTE *)lpuexcptd + (_DWORD)Block + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v120 + 8), *(_DWORD *)(v120 + 12), (int)&Block) ) + *a6 = 4; + v31 = (int *)Block; + if ( !v117 && !(v129 | v104) ) + { +LABEL_75: + *a7 = 0; + *a6 = 4; + goto LABEL_76; + } +LABEL_111: + if ( v106 ) + goto LABEL_75; + if ( v101 ) + { + *a7 = -1; + *a6 = 4; + } + else + { + v71 = -v113; + if ( !v98 ) + v71 = v113; + *a7 = v71; + } +LABEL_76: + if ( v99 ) + *a6 |= 2u; + if ( v31 != v130 ) + operator delete(v31); + return v121; +} +// 4A86D0: variable 'v93' is possibly undefined +// 53F72C: using guessed type signed __int32 std::numpunct::id; +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (004A8AE0) -------------------------------------------------------- +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11]( + _DWORD *a1, + unsigned __int16 a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + _WORD *a7) +{ + int v7; // eax + char v8; // al + unsigned int v9; // eax + unsigned int v10; // edx + __int16 *v11; // eax + __int16 v12; // ax + bool v13; // zf + _DWORD *v14; // eax + _DWORD *v15; // ebx + unsigned int v16; // eax + unsigned int v17; // edx + __int16 *v18; // eax + __int16 v19; // ax + bool v20; // zf + _DWORD *v21; // eax + int v22; // eax + int v23; // eax + _DWORD *v24; // ecx + unsigned int v25; // eax + unsigned int v26; // edx + __int16 *v27; // eax + __int16 v28; // ax + bool v29; // zf + _DWORD *v30; // eax + int *v31; // eax + bool v33; // al + unsigned __int16 *v34; // eax + _DWORD *v35; // eax + _WORD *v36; // eax + int v37; // edx + unsigned int v38; // edx + int v39; // eax + bool v40; // cc + int v41; // edx + int v42; // eax + _DWORD *v43; // ecx + unsigned int v44; // eax + unsigned int v45; // edx + __int16 *v46; // eax + __int16 v47; // ax + bool v48; // zf + _DWORD *v49; // eax + unsigned __int16 *v50; // eax + _DWORD *v51; // eax + __int16 *v52; // eax + __int16 v53; // ax + bool v54; // zf + _DWORD *v55; // eax + bool v56; // bl + unsigned __int16 *v57; // eax + _DWORD *v58; // eax + size_t v59; // edx + size_t v60; // edx + __int16 *v61; // eax + __int16 v62; // ax + bool v63; // zf + _DWORD *v64; // eax + bool v65; // dl + __int16 *v66; // eax + __int16 v67; // ax + bool v68; // zf + _DWORD *v69; // eax + bool v70; // bl + int v71; // edx + unsigned __int16 *v72; // eax + _DWORD *v73; // eax + _DWORD *v74; // eax + __int16 *v75; // eax + __int16 v76; // ax + bool v77; // zf + _DWORD *v78; // eax + bool v79; // dl + __int16 *v80; // eax + __int16 v81; // ax + bool v82; // zf + _DWORD *v83; // eax + bool v84; // dl + unsigned __int16 *v85; // eax + _DWORD *v86; // edx + __int16 *v87; // eax + __int16 v88; // ax + bool v89; // zf + _DWORD *v90; // eax + bool v91; // dl + char v92; // bl + unsigned int v93; // [esp+8h] [ebp-B0h] + std::locale::_Impl *v94; // [esp+14h] [ebp-A4h] + int v95; // [esp+1Ch] [ebp-9Ch] + int v96; // [esp+20h] [ebp-98h] + int v97; // [esp+24h] [ebp-94h] + bool v98; // [esp+2Dh] [ebp-8Bh] + char v99; // [esp+2Eh] [ebp-8Ah] + int v100; // [esp+30h] [ebp-88h] + char v101; // [esp+30h] [ebp-88h] + _DWORD *v102; // [esp+34h] [ebp-84h] + char v103; // [esp+38h] [ebp-80h] + int v104; // [esp+38h] [ebp-80h] + size_t v105; // [esp+38h] [ebp-80h] + char v106; // [esp+3Dh] [ebp-7Bh] + char v107; // [esp+3Eh] [ebp-7Ah] + char v108; // [esp+3Eh] [ebp-7Ah] + char v109; // [esp+3Eh] [ebp-7Ah] + char v110; // [esp+3Eh] [ebp-7Ah] + char v111; // [esp+40h] [ebp-78h] + char v112; // [esp+40h] [ebp-78h] + unsigned __int16 v113; // [esp+40h] [ebp-78h] + bool v114; // [esp+44h] [ebp-74h] + char v115; // [esp+48h] [ebp-70h] + char v116; // [esp+48h] [ebp-70h] + bool v117; // [esp+48h] [ebp-70h] + int *v118; // [esp+4Ch] [ebp-6Ch] + int v119; // [esp+4Ch] [ebp-6Ch] + int v120; // [esp+50h] [ebp-68h] + _DWORD *v121; // [esp+54h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+58h] [ebp-60h] + bool lpuexcpta; // [esp+58h] [ebp-60h] + unsigned __int16 lpuexcptb; // [esp+58h] [ebp-60h] + char lpuexcptc; // [esp+58h] [ebp-60h] + struct _Unwind_Exception *lpuexcptd; // [esp+58h] [ebp-60h] + char lpuexcpte; // [esp+58h] [ebp-60h] + void *Block; // [esp+98h] [ebp-20h] BYREF + size_t v129; // [esp+9Ch] [ebp-1Ch] + int v130[5]; // [esp+A0h] [ebp-18h] BYREF + + v121 = a1; + v102 = a3; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v118 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)lpuexcpt); + v120 = *v118; + if ( !*v118 ) + { + v74 = operator new(0xA8u); + v74[1] = 0; + *v74 = &off_5605C0; + v74[2] = 0; + v74[3] = 0; + *((_BYTE *)v74 + 16) = 0; + v74[5] = 0; + v74[6] = 0; + v74[7] = 0; + v74[8] = 0; + v74[9] = 0; + *((_BYTE *)v74 + 164) = 0; + v94 = (std::locale::_Impl *)v74; + std::__numpunct_cache::_M_cache((int)v74, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v94, lpuexcpt, v93); + v120 = *v118; + } + v119 = 8; + v100 = *(_DWORD *)(a5 + 12) & 0x4A; + if ( v100 != 64 ) + { + v7 = 10; + if ( v100 == 8 ) + v7 = 16; + v119 = v7; + } + lpuexcpta = a2 == 0xFFFF; + if ( lpuexcpta && a1 != 0 ) + { + v75 = (__int16 *)a1[2]; + if ( (unsigned int)v75 >= a1[3] ) + v76 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v76 = *v75; + v77 = v76 == -1; + v78 = 0; + if ( !v77 ) + v78 = a1; + v79 = lpuexcpta && a1 != 0; + v121 = v78; + if ( !v77 ) + v79 = 0; + v103 = v79; + } + else + { + v103 = a2 == 0xFFFF; + } + v114 = a4 == -1; + if ( v114 && a3 != 0 ) + { + v80 = (__int16 *)a3[2]; + if ( (unsigned int)v80 >= a3[3] ) + v81 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v81 = *v80; + v82 = v81 == -1; + v83 = 0; + if ( !v82 ) + v83 = a3; + v84 = v114 && a3 != 0; + v102 = v83; + if ( !v82 ) + v84 = 0; + v115 = v84; + } + else + { + v115 = a4 == -1; + } + if ( v115 != v103 ) + { + if ( v121 && a2 == 0xFFFF ) + { + v72 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v72 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v72; + v73 = 0; + if ( lpuexcptb != 0xFFFF ) + v73 = v121; + v121 = v73; + } + else + { + lpuexcptb = a2; + } + v8 = *(_BYTE *)(v120 + 16); + v98 = *(_WORD *)(v120 + 112) == lpuexcptb; + if ( *(_WORD *)(v120 + 112) == lpuexcptb || *(_WORD *)(v120 + 114) == lpuexcptb ) + { + if ( (!v8 || *(_WORD *)(v120 + 38) != lpuexcptb) && *(_WORD *)(v120 + 36) != lpuexcptb ) + { + v9 = v121[2]; + v10 = v121[3]; + if ( v9 >= v10 ) + { + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v11 = (__int16 *)v121[2]; + v10 = v121[3]; + } + else + { + v11 = (__int16 *)(v9 + 2); + v121[2] = v11; + } + if ( (unsigned int)v11 >= v10 ) + v12 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + v12 = *v11; + v13 = v12 == -1; + v14 = 0; + if ( !v13 ) + v14 = v121; + v111 = v13; + v121 = v14; + if ( v114 && v102 != 0 ) + { + v87 = (__int16 *)v102[2]; + if ( (unsigned int)v87 >= v102[3] ) + v88 = (*(int (__fastcall **)(_DWORD *))(*v102 + 36))(v102); + else + v88 = *v87; + v89 = v88 == -1; + v90 = 0; + if ( !v89 ) + v90 = v102; + v91 = v114 && v102 != 0; + v102 = v90; + if ( !v89 ) + v91 = 0; + v116 = v91; + } + else + { + v116 = a4 == -1; + } + if ( v111 == v116 ) + { + v106 = 1; + v104 = 0; + v117 = 0; + goto LABEL_49; + } + if ( v121 ) + { + v85 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v85 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v85; + v86 = 0; + if ( lpuexcptb != 0xFFFF ) + v86 = v121; + v8 = *(_BYTE *)(v120 + 16); + v121 = v86; + } + else + { + lpuexcptb = -1; + v8 = *(_BYTE *)(v120 + 16); + } + } + } + else + { + v98 = 0; + } + v104 = 0; + v117 = 0; + while ( 1 ) + { + if ( v8 && *(_WORD *)(v120 + 38) == lpuexcptb || *(_WORD *)(v120 + 36) == lpuexcptb ) + { +LABEL_178: + v106 = 0; + goto LABEL_49; + } + if ( *(_WORD *)(v120 + 120) != lpuexcptb ) + break; + v33 = v119 == 10 || !v117; + if ( !v33 ) + goto LABEL_36; + v117 = v100 == 0 || v119 == 8; + if ( !v117 ) + { + ++v104; + v117 = v33; + goto LABEL_40; + } + v15 = v121; + v104 = 0; + v119 = 8; + v16 = v121[2]; + v17 = v121[3]; + if ( v16 < v17 ) + { +LABEL_41: + v18 = (__int16 *)(v16 + 2); + v15[2] = v18; + if ( v17 > (unsigned int)v18 ) + goto LABEL_42; + goto LABEL_85; + } +LABEL_84: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v18 = (__int16 *)v121[2]; + if ( v121[3] > (unsigned int)v18 ) + { +LABEL_42: + v19 = *v18; + goto LABEL_43; + } +LABEL_85: + v19 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); +LABEL_43: + v20 = v19 == -1; + v21 = 0; + if ( !v20 ) + v21 = v121; + v107 = v20; + v121 = v21; + if ( v114 && v102 != 0 ) + { + v52 = (__int16 *)v102[2]; + if ( (unsigned int)v52 >= v102[3] ) + v53 = (*(int (__fastcall **)(_DWORD *))(*v102 + 36))(v102); + else + v53 = *v52; + v54 = v53 == -1; + v55 = 0; + if ( !v54 ) + v55 = v102; + v56 = v114 && v102 != 0; + v102 = v55; + if ( !v54 ) + v56 = 0; + v112 = v56; + } + else + { + v112 = a4 == -1; + } + if ( v112 == v107 ) + { + v106 = 1; + goto LABEL_49; + } + lpuexcptb = -1; + if ( v121 ) + { + v34 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v34 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v34; + v35 = 0; + if ( lpuexcptb != 0xFFFF ) + v35 = v121; + v121 = v35; + } + if ( !v117 ) + { + v106 = 0; + goto LABEL_49; + } + v8 = *(_BYTE *)(v120 + 16); + } + if ( !v117 ) + goto LABEL_178; +LABEL_36: + if ( *(_WORD *)(v120 + 116) != lpuexcptb && *(_WORD *)(v120 + 118) != lpuexcptb ) + { + v106 = 0; + v117 = 1; + goto LABEL_49; + } + if ( v100 != 0 && v119 != 16 ) + { + v106 = 0; + v95 = v119; + v96 = v119; + v117 = 1; + goto LABEL_52; + } + v104 = 0; + v117 = 0; + v119 = 16; +LABEL_40: + v15 = v121; + v16 = v121[2]; + v17 = v121[3]; + if ( v16 < v17 ) + goto LABEL_41; + goto LABEL_84; + } + v98 = 0; + lpuexcptb = 0; + v106 = 1; + v104 = 0; + v117 = 0; +LABEL_49: + v22 = 22; + if ( v119 != 16 ) + v22 = v119; + v95 = v22; + v96 = v22; +LABEL_52: + v129 = 0; + Block = v130; + LOBYTE(v130[0]) = 0; + if ( *(_BYTE *)(v120 + 16) ) + std::string::reserve(&Block, 0x20u); + v97 = 0xFFFF / v119; + v99 = *(_BYTE *)(v120 + 164); + if ( !v99 ) + { + if ( !v106 ) + { + v101 = 0; + v113 = 0; + while ( v96 > 10 ) + { + if ( (unsigned __int16)(lpuexcptb - 48) <= 9u ) + goto LABEL_60; + if ( (unsigned __int16)(lpuexcptb - 97) > 5u ) + { + if ( (unsigned __int16)(lpuexcptb - 65) > 5u ) + goto LABEL_102; + v23 = lpuexcptb - 55; + goto LABEL_61; + } + v23 = lpuexcptb - 87; + if ( (unsigned __int16)v97 < v113 ) + { +LABEL_62: + v24 = v121; + v101 = 1; + v25 = v121[2]; + v26 = v121[3]; + if ( v25 < v26 ) + goto LABEL_63; + goto LABEL_118; + } +LABEL_117: + v101 |= (unsigned __int16)(v119 * v113) > 0xFFFF - v23; + v24 = v121; + v113 = v119 * v113 + v23; + v26 = v121[3]; + v25 = v121[2]; + ++v104; + if ( v25 < v26 ) + { +LABEL_63: + v27 = (__int16 *)(v25 + 2); + v24[2] = v27; + goto LABEL_64; + } +LABEL_118: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v27 = (__int16 *)v121[2]; + v26 = v121[3]; +LABEL_64: + if ( v26 <= (unsigned int)v27 ) + v28 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + v28 = *v27; + v29 = v28 == -1; + v30 = 0; + if ( !v29 ) + v30 = v121; + v108 = v29; + v121 = v30; + if ( v114 && v102 != 0 ) + { + v66 = (__int16 *)v102[2]; + if ( (unsigned int)v66 >= v102[3] ) + v67 = (*(int (__fastcall **)(_DWORD *))(*v102 + 36))(v102); + else + v67 = *v66; + v68 = v67 == -1; + v69 = 0; + if ( !v68 ) + v69 = v102; + v70 = v114 && v102 != 0; + v102 = v69; + if ( !v68 ) + v70 = 0; + lpuexcptc = v70; + } + else + { + lpuexcptc = a4 == -1; + } + if ( v108 == lpuexcptc ) + { + v99 = 1; + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + goto LABEL_72; + } + if ( v121 ) + { + v57 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v57 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v57; + v58 = 0; + if ( lpuexcptb != 0xFFFF ) + v58 = v121; + v121 = v58; + } + else + { + lpuexcptb = -1; + } + } + if ( lpuexcptb <= 0x2Fu || (unsigned __int16)(v96 + 48) <= lpuexcptb ) + goto LABEL_102; +LABEL_60: + v23 = lpuexcptb - 48; +LABEL_61: + if ( (unsigned __int16)v97 < v113 ) + goto LABEL_62; + goto LABEL_117; + } + v92 = v106; + v101 = 0; + v106 = 0; + v99 = v92; + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + v113 = 0; + goto LABEL_72; + } + if ( v106 ) + { + v101 = 0; + v113 = 0; + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + v99 = v106; + v106 = 0; +LABEL_72: + if ( lpuexcptd ) + goto LABEL_103; +LABEL_73: + if ( v117 || v104 ) + goto LABEL_111; + goto LABEL_75; + } + v101 = 0; + v113 = 0; + while ( 1 ) + { + if ( *(_BYTE *)(v120 + 16) && *(_WORD *)(v120 + 38) == lpuexcptb ) + { + v31 = (int *)Block; + lpuexcptd = (struct _Unwind_Exception *)v129; + if ( !v104 ) + { + v99 = 0; + v106 = *(_BYTE *)(v120 + 16); + goto LABEL_72; + } + v110 = v104; + v59 = 15; + if ( Block != v130 ) + v59 = v130[0]; + v105 = v129 + 1; + if ( v129 + 1 > v59 ) + { + std::string::_M_mutate((int)&Block, v129, 0, 0, 1u); + v31 = (int *)Block; + } + v60 = v105; + v104 = 0; + *((_BYTE *)lpuexcptd + (_DWORD)v31) = v110; + v129 = v60; + *((_BYTE *)Block + v60) = 0; +LABEL_123: + v43 = v121; + v44 = v121[2]; + v45 = v121[3]; + if ( v44 < v45 ) + goto LABEL_124; + goto LABEL_134; + } + if ( lpuexcptb == *(_WORD *)(v120 + 36) ) + break; + v36 = (_WORD *)(v120 + 120); + v37 = v95; + while ( *v36 != lpuexcptb ) + { + ++v36; + if ( !--v37 ) + goto LABEL_102; + } + v39 = (int)v36 - v120 - 120; + v40 = v39 <= 30; + v41 = (v39 >> 1) - 6; + v42 = v39 >> 1; + if ( !v40 ) + v42 = v41; + if ( (unsigned __int16)v97 < v113 ) + { + v101 = v99; + goto LABEL_123; + } + v101 |= (unsigned __int16)(v119 * v113) > 0xFFFF - v42; + v43 = v121; + v113 = v119 * v113 + v42; + v45 = v121[3]; + v44 = v121[2]; + ++v104; + if ( v44 < v45 ) + { +LABEL_124: + v46 = (__int16 *)(v44 + 2); + v43[2] = v46; + goto LABEL_125; + } +LABEL_134: + (*(void (__fastcall **)(_DWORD *))(*v121 + 40))(v121); + v46 = (__int16 *)v121[2]; + v45 = v121[3]; +LABEL_125: + if ( v45 <= (unsigned int)v46 ) + v47 = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + v47 = *v46; + v48 = v47 == -1; + v49 = 0; + if ( !v48 ) + v49 = v121; + v109 = v48; + v121 = v49; + if ( v114 && v102 != 0 ) + { + v61 = (__int16 *)v102[2]; + if ( (unsigned int)v61 >= v102[3] ) + v62 = (*(int (__fastcall **)(_DWORD *))(*v102 + 36))(v102); + else + v62 = *v61; + v63 = v62 == -1; + v64 = 0; + if ( !v63 ) + v64 = v102; + v65 = v114 && v102 != 0; + v102 = v64; + if ( !v63 ) + v65 = 0; + lpuexcpte = v65; + } + else + { + lpuexcpte = a4 == -1; + } + if ( v109 == lpuexcpte ) + { + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + goto LABEL_72; + } + if ( v121 ) + { + v50 = (unsigned __int16 *)v121[2]; + if ( (unsigned int)v50 >= v121[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v121 + 36))(v121); + else + lpuexcptb = *v50; + v51 = 0; + if ( lpuexcptb != 0xFFFF ) + v51 = v121; + v121 = v51; + } + else + { + lpuexcptb = -1; + } + } +LABEL_102: + v99 = 0; + lpuexcptd = (struct _Unwind_Exception *)v129; + v31 = (int *)Block; + if ( !v129 ) + goto LABEL_73; +LABEL_103: + v38 = 15; + if ( v31 != v130 ) + v38 = v130[0]; + if ( (unsigned int)lpuexcptd + 1 > v38 ) + { + std::string::_M_mutate((int)&Block, (size_t)lpuexcptd, 0, 0, 1u); + v31 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v31) = v104; + v129 = (size_t)lpuexcptd + 1; + *((_BYTE *)lpuexcptd + (_DWORD)Block + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v120 + 8), *(_DWORD *)(v120 + 12), (int)&Block) ) + *a6 = 4; + v31 = (int *)Block; + if ( !v117 && !(v129 | v104) ) + { +LABEL_75: + *a7 = 0; + *a6 = 4; + goto LABEL_76; + } +LABEL_111: + if ( v106 ) + goto LABEL_75; + if ( v101 ) + { + *a7 = -1; + *a6 = 4; + } + else + { + v71 = -v113; + if ( !v98 ) + LOWORD(v71) = v113; + *a7 = v71; + } +LABEL_76: + if ( v99 ) + *a6 |= 2u; + if ( v31 != v130 ) + operator delete(v31); + return v121; +} +// 4A96E0: variable 'v93' is possibly undefined +// 53F72C: using guessed type signed __int32 std::numpunct::id; +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (004A9AF0) -------------------------------------------------------- +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11]( + _DWORD *a1, + unsigned __int16 a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + int *a7) +{ + int v7; // eax + char v8; // al + unsigned int v9; // eax + unsigned int v10; // edx + __int16 *v11; // eax + __int16 v12; // ax + bool v13; // zf + _DWORD *v14; // eax + _DWORD *v15; // edi + unsigned int v16; // eax + unsigned int v17; // edx + __int16 *v18; // eax + __int16 v19; // ax + bool v20; // zf + _DWORD *v21; // eax + int v22; // eax + unsigned __int64 v23; // kr00_8 + int v24; // esi + _DWORD *v25; // ecx + unsigned int v26; // eax + unsigned int v27; // edx + __int16 *v28; // eax + __int16 v29; // ax + bool v30; // zf + _DWORD *v31; // eax + int *v32; // eax + bool v34; // al + unsigned __int16 *v35; // eax + _DWORD *v36; // eax + _WORD *v37; // eax + int v38; // edx + unsigned int v39; // edx + int v40; // ecx + unsigned int v41; // ebx + int v42; // eax + int v43; // esi + _DWORD *v44; // ebx + unsigned int v45; // eax + unsigned int v46; // edx + __int16 *v47; // eax + __int16 v48; // ax + bool v49; // zf + _DWORD *v50; // eax + unsigned __int16 *v51; // eax + _DWORD *v52; // eax + __int16 *v53; // eax + __int16 v54; // ax + bool v55; // zf + _DWORD *v56; // eax + bool v57; // si + unsigned __int16 *v58; // eax + _DWORD *v59; // eax + char v60; // bl + size_t v61; // edx + size_t v62; // ebx + __int16 *v63; // eax + __int16 v64; // ax + bool v65; // zf + _DWORD *v66; // eax + bool v67; // cl + __int16 *v68; // eax + __int16 v69; // ax + bool v70; // zf + _DWORD *v71; // eax + bool v72; // bl + unsigned __int16 *v73; // eax + _DWORD *v74; // eax + _DWORD *v75; // eax + __int16 *v76; // eax + __int16 v77; // ax + bool v78; // zf + _DWORD *v79; // eax + bool v80; // si + __int16 *v81; // eax + __int16 v82; // ax + bool v83; // zf + _DWORD *v84; // eax + bool v85; // si + unsigned __int16 *v86; // eax + _DWORD *v87; // edx + __int16 *v88; // eax + __int16 v89; // ax + bool v90; // zf + _DWORD *v91; // eax + bool v92; // bl + char v93; // bl + unsigned int v94; // [esp+8h] [ebp-D0h] + std::locale::_Impl *v95; // [esp+14h] [ebp-C4h] + int v96; // [esp+1Ch] [ebp-BCh] + unsigned __int64 v97; // [esp+20h] [ebp-B8h] + int v98; // [esp+28h] [ebp-B0h] + bool v99; // [esp+39h] [ebp-9Fh] + char v100; // [esp+3Ah] [ebp-9Eh] + _DWORD *v101; // [esp+3Ch] [ebp-9Ch] + int v102; // [esp+40h] [ebp-98h] + __int64 v103; // [esp+40h] [ebp-98h] + int v104; // [esp+48h] [ebp-90h] + size_t v105; // [esp+48h] [ebp-90h] + char v106; // [esp+4Ch] [ebp-8Ch] + char v107; // [esp+4Dh] [ebp-8Bh] + char v108; // [esp+4Dh] [ebp-8Bh] + char v109; // [esp+4Dh] [ebp-8Bh] + char v110; // [esp+4Eh] [ebp-8Ah] + char v111; // [esp+4Eh] [ebp-8Ah] + char v112; // [esp+4Eh] [ebp-8Ah] + char v113; // [esp+4Eh] [ebp-8Ah] + bool v114; // [esp+50h] [ebp-88h] + char v115; // [esp+54h] [ebp-84h] + char v116; // [esp+54h] [ebp-84h] + bool v117; // [esp+54h] [ebp-84h] + int *v118; // [esp+58h] [ebp-80h] + int v119; // [esp+58h] [ebp-80h] + unsigned __int64 v120; // [esp+58h] [ebp-80h] + int v121; // [esp+60h] [ebp-78h] + _DWORD *v122; // [esp+64h] [ebp-74h] + struct _Unwind_Exception *lpuexcpt; // [esp+68h] [ebp-70h] + bool lpuexcpta; // [esp+68h] [ebp-70h] + unsigned __int16 lpuexcptb; // [esp+68h] [ebp-70h] + char lpuexcptc; // [esp+68h] [ebp-70h] + struct _Unwind_Exception *lpuexcptd; // [esp+68h] [ebp-70h] + char lpuexcpte; // [esp+68h] [ebp-70h] + void *Block; // [esp+A8h] [ebp-30h] BYREF + size_t v130; // [esp+ACh] [ebp-2Ch] + int v131[10]; // [esp+B0h] [ebp-28h] BYREF + + v122 = a1; + v101 = a3; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v118 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)lpuexcpt); + v121 = *v118; + if ( !*v118 ) + { + v75 = operator new(0xA8u); + v75[1] = 0; + *v75 = &off_5605C0; + v75[2] = 0; + v75[3] = 0; + *((_BYTE *)v75 + 16) = 0; + v75[5] = 0; + v75[6] = 0; + v75[7] = 0; + v75[8] = 0; + v75[9] = 0; + *((_BYTE *)v75 + 164) = 0; + v95 = (std::locale::_Impl *)v75; + std::__numpunct_cache::_M_cache((int)v75, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v95, lpuexcpt, v94); + v121 = *v118; + } + v119 = 8; + v102 = *(_DWORD *)(a5 + 12) & 0x4A; + if ( v102 != 64 ) + { + v7 = 10; + if ( v102 == 8 ) + v7 = 16; + v119 = v7; + } + lpuexcpta = a2 == 0xFFFF; + if ( lpuexcpta && a1 != 0 ) + { + v76 = (__int16 *)a1[2]; + if ( (unsigned int)v76 >= a1[3] ) + v77 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v77 = *v76; + v78 = v77 == -1; + v79 = 0; + if ( !v78 ) + v79 = a1; + v80 = lpuexcpta && a1 != 0; + v122 = v79; + if ( !v78 ) + v80 = 0; + v107 = v80; + } + else + { + v107 = a2 == 0xFFFF; + } + v114 = a4 == -1; + if ( v114 && a3 != 0 ) + { + v81 = (__int16 *)a3[2]; + if ( (unsigned int)v81 >= a3[3] ) + v82 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v82 = *v81; + v83 = v82 == -1; + v84 = 0; + if ( !v83 ) + v84 = a3; + v85 = v114 && a3 != 0; + v101 = v84; + if ( !v83 ) + v85 = 0; + v115 = v85; + } + else + { + v115 = a4 == -1; + } + if ( v115 != v107 ) + { + if ( v122 && a2 == 0xFFFF ) + { + v73 = (unsigned __int16 *)v122[2]; + if ( (unsigned int)v73 >= v122[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + lpuexcptb = *v73; + v74 = 0; + if ( lpuexcptb != 0xFFFF ) + v74 = v122; + v122 = v74; + } + else + { + lpuexcptb = a2; + } + v8 = *(_BYTE *)(v121 + 16); + v99 = *(_WORD *)(v121 + 112) == lpuexcptb; + if ( *(_WORD *)(v121 + 112) == lpuexcptb || *(_WORD *)(v121 + 114) == lpuexcptb ) + { + if ( (!v8 || *(_WORD *)(v121 + 38) != lpuexcptb) && *(_WORD *)(v121 + 36) != lpuexcptb ) + { + v9 = v122[2]; + v10 = v122[3]; + if ( v9 >= v10 ) + { + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v11 = (__int16 *)v122[2]; + v10 = v122[3]; + } + else + { + v11 = (__int16 *)(v9 + 2); + v122[2] = v11; + } + if ( (unsigned int)v11 >= v10 ) + v12 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + v12 = *v11; + v13 = v12 == -1; + v14 = 0; + if ( !v13 ) + v14 = v122; + v110 = v13; + v122 = v14; + if ( v114 && v101 != 0 ) + { + v88 = (__int16 *)v101[2]; + if ( (unsigned int)v88 >= v101[3] ) + v89 = (*(int (__fastcall **)(_DWORD *))(*v101 + 36))(v101); + else + v89 = *v88; + v90 = v89 == -1; + v91 = 0; + if ( !v90 ) + v91 = v101; + v92 = v114 && v101 != 0; + v101 = v91; + if ( !v90 ) + v92 = 0; + v116 = v92; + } + else + { + v116 = a4 == -1; + } + if ( v110 == v116 ) + { + v106 = 1; + v104 = 0; + v117 = 0; + goto LABEL_49; + } + if ( v122 ) + { + v86 = (unsigned __int16 *)v122[2]; + if ( (unsigned int)v86 >= v122[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + lpuexcptb = *v86; + v87 = 0; + if ( lpuexcptb != 0xFFFF ) + v87 = v122; + v8 = *(_BYTE *)(v121 + 16); + v122 = v87; + } + else + { + lpuexcptb = -1; + v8 = *(_BYTE *)(v121 + 16); + } + } + } + else + { + v99 = 0; + } + v117 = 0; + v104 = 0; + while ( 1 ) + { + if ( v8 && *(_WORD *)(v121 + 38) == lpuexcptb || *(_WORD *)(v121 + 36) == lpuexcptb ) + { +LABEL_182: + v106 = 0; + goto LABEL_49; + } + if ( *(_WORD *)(v121 + 120) != lpuexcptb ) + break; + v34 = v119 == 10 || !v117; + if ( !v34 ) + goto LABEL_36; + v117 = v102 == 0 || v119 == 8; + if ( !v117 ) + { + ++v104; + v117 = v34; + goto LABEL_40; + } + v15 = v122; + v119 = 8; + v104 = 0; + v16 = v122[2]; + v17 = v122[3]; + if ( v16 < v17 ) + { +LABEL_41: + v18 = (__int16 *)(v16 + 2); + v15[2] = v18; + if ( (unsigned int)v18 < v17 ) + goto LABEL_42; + goto LABEL_87; + } +LABEL_86: + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v18 = (__int16 *)v122[2]; + if ( (unsigned int)v18 < v122[3] ) + { +LABEL_42: + v19 = *v18; + goto LABEL_43; + } +LABEL_87: + v19 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); +LABEL_43: + v20 = v19 == -1; + v21 = 0; + if ( !v20 ) + v21 = v122; + v108 = v20; + v122 = v21; + if ( v114 && v101 != 0 ) + { + v53 = (__int16 *)v101[2]; + if ( (unsigned int)v53 >= v101[3] ) + v54 = (*(int (__fastcall **)(_DWORD *))(*v101 + 36))(v101); + else + v54 = *v53; + v55 = v54 == -1; + v56 = 0; + if ( !v55 ) + v56 = v101; + v57 = v114 && v101 != 0; + v101 = v56; + if ( !v55 ) + v57 = 0; + v111 = v57; + } + else + { + v111 = a4 == -1; + } + if ( v111 == v108 ) + { + v106 = 1; + goto LABEL_49; + } + lpuexcptb = -1; + if ( v122 ) + { + v35 = (unsigned __int16 *)v122[2]; + if ( (unsigned int)v35 >= v122[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + lpuexcptb = *v35; + v36 = 0; + if ( lpuexcptb != 0xFFFF ) + v36 = v122; + v122 = v36; + } + if ( !v117 ) + { + v106 = 0; + goto LABEL_49; + } + v8 = *(_BYTE *)(v121 + 16); + } + if ( !v117 ) + goto LABEL_182; +LABEL_36: + if ( *(_WORD *)(v121 + 116) != lpuexcptb && *(_WORD *)(v121 + 118) != lpuexcptb ) + { + v106 = 0; + v117 = 1; + goto LABEL_49; + } + if ( v102 != 0 && v119 != 16 ) + { + v106 = 0; + v96 = v119; + v98 = v119; + v117 = 1; + goto LABEL_52; + } + v104 = 0; + v117 = 0; + v119 = 16; +LABEL_40: + v15 = v122; + v16 = v122[2]; + v17 = v122[3]; + if ( v16 < v17 ) + goto LABEL_41; + goto LABEL_86; + } + v99 = 0; + lpuexcptb = 0; + v106 = 1; + v104 = 0; + v117 = 0; +LABEL_49: + v22 = 22; + if ( v119 != 16 ) + v22 = v119; + v96 = v22; + v98 = v22; +LABEL_52: + v130 = 0; + Block = v131; + LOBYTE(v131[0]) = 0; + if ( *(_BYTE *)(v121 + 16) ) + std::string::reserve(&Block, 0x20u); + v97 = 0x8000000000000000LL; + if ( !v99 ) + v97 = 0x7FFFFFFFFFFFFFFFLL; + v103 = v119; + v23 = v97 / v119; + v100 = *(_BYTE *)(v121 + 164); + if ( !v100 ) + { + if ( !v106 ) + { + v109 = 0; + v120 = 0LL; + while ( v98 > 10 ) + { + if ( (unsigned __int16)(lpuexcptb - 48) <= 9u ) + goto LABEL_62; + if ( (unsigned __int16)(lpuexcptb - 97) > 5u ) + { + if ( (unsigned __int16)(lpuexcptb - 65) > 5u ) + goto LABEL_104; + v24 = lpuexcptb - 55; + } + else + { + v24 = lpuexcptb - 87; + } +LABEL_63: + if ( v23 >= v120 ) + { + v109 |= v97 - v24 < v103 * v120; + v25 = v122; + v120 = v103 * v120 + v24; + v26 = v122[2]; + v27 = v122[3]; + ++v104; + if ( v26 < v27 ) + { +LABEL_65: + v28 = (__int16 *)(v26 + 2); + v25[2] = v28; + goto LABEL_66; + } + } + else + { + v25 = v122; + v109 = 1; + v26 = v122[2]; + v27 = v122[3]; + if ( v26 < v27 ) + goto LABEL_65; + } + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v28 = (__int16 *)v122[2]; + v27 = v122[3]; +LABEL_66: + if ( v27 <= (unsigned int)v28 ) + v29 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + v29 = *v28; + v30 = v29 == -1; + v31 = 0; + if ( !v30 ) + v31 = v122; + v112 = v30; + v122 = v31; + if ( v114 && v101 != 0 ) + { + v68 = (__int16 *)v101[2]; + if ( (unsigned int)v68 >= v101[3] ) + v69 = (*(int (__fastcall **)(_DWORD *))(*v101 + 36))(v101); + else + v69 = *v68; + v70 = v69 == -1; + v71 = 0; + if ( !v70 ) + v71 = v101; + v72 = v114 && v101 != 0; + v101 = v71; + if ( !v70 ) + v72 = 0; + lpuexcptc = v72; + } + else + { + lpuexcptc = a4 == -1; + } + if ( v112 == lpuexcptc ) + { + v100 = 1; + lpuexcptd = (struct _Unwind_Exception *)v130; + v32 = (int *)Block; + goto LABEL_74; + } + if ( v122 ) + { + v58 = (unsigned __int16 *)v122[2]; + if ( (unsigned int)v58 >= v122[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + lpuexcptb = *v58; + v59 = 0; + if ( lpuexcptb != 0xFFFF ) + v59 = v122; + v122 = v59; + } + else + { + lpuexcptb = -1; + } + } + if ( lpuexcptb <= 0x2Fu || (unsigned __int16)(v98 + 48) <= lpuexcptb ) + goto LABEL_104; +LABEL_62: + v24 = lpuexcptb - 48; + goto LABEL_63; + } + v93 = v106; + v109 = 0; + v106 = 0; + lpuexcptd = (struct _Unwind_Exception *)v130; + v32 = (int *)Block; + v100 = v93; + v120 = 0LL; + goto LABEL_74; + } + if ( v106 ) + { + v120 = 0LL; + lpuexcptd = (struct _Unwind_Exception *)v130; + v32 = (int *)Block; + v100 = v106; + v109 = 0; + v106 = 0; +LABEL_74: + if ( lpuexcptd ) + goto LABEL_105; +LABEL_75: + if ( v117 || v104 ) + goto LABEL_113; + goto LABEL_77; + } + v109 = 0; + v120 = 0LL; + while ( 1 ) + { + if ( *(_BYTE *)(v121 + 16) && *(_WORD *)(v121 + 38) == lpuexcptb ) + { + v32 = (int *)Block; + lpuexcptd = (struct _Unwind_Exception *)v130; + if ( !v104 ) + { + v100 = 0; + v106 = *(_BYTE *)(v121 + 16); + goto LABEL_74; + } + v60 = v104; + v61 = 15; + if ( Block != v131 ) + v61 = v131[0]; + v105 = v130 + 1; + if ( v130 + 1 > v61 ) + { + std::string::_M_mutate((int)&Block, v130, 0, 0, 1u); + v32 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v32) = v60; + v62 = v105; + v104 = 0; + v130 = v62; + *((_BYTE *)Block + v62) = 0; +LABEL_127: + v44 = v122; + v45 = v122[2]; + v46 = v122[3]; + if ( v45 < v46 ) + goto LABEL_128; + goto LABEL_138; + } + if ( lpuexcptb == *(_WORD *)(v121 + 36) ) + break; + v37 = (_WORD *)(v121 + 120); + v38 = v96; + while ( *v37 != lpuexcptb ) + { + ++v37; + if ( !--v38 ) + goto LABEL_104; + } + v42 = (int)v37 - v121 - 120; + v43 = (v42 >> 1) - 6; + if ( v42 <= 30 ) + v43 = v42 >> 1; + if ( v23 < v120 ) + { + v109 = v100; + goto LABEL_127; + } + v44 = v122; + v109 |= v97 - v43 < v103 * v120; + v45 = v122[2]; + v46 = v122[3]; + v120 = v103 * v120 + v43; + ++v104; + if ( v45 < v46 ) + { +LABEL_128: + v47 = (__int16 *)(v45 + 2); + v44[2] = v47; + goto LABEL_129; + } +LABEL_138: + (*(void (__fastcall **)(_DWORD *))(*v122 + 40))(v122); + v47 = (__int16 *)v122[2]; + v46 = v122[3]; +LABEL_129: + if ( v46 <= (unsigned int)v47 ) + v48 = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + v48 = *v47; + v49 = v48 == -1; + v50 = 0; + if ( !v49 ) + v50 = v122; + v113 = v49; + v122 = v50; + if ( v114 && v101 != 0 ) + { + v63 = (__int16 *)v101[2]; + if ( (unsigned int)v63 >= v101[3] ) + v64 = (*(int (__fastcall **)(_DWORD *))(*v101 + 36))(v101); + else + v64 = *v63; + v65 = v64 == -1; + v66 = 0; + if ( !v65 ) + v66 = v101; + v67 = v114 && v101 != 0; + v101 = v66; + if ( !v65 ) + v67 = 0; + lpuexcpte = v67; + } + else + { + lpuexcpte = a4 == -1; + } + if ( lpuexcpte == v113 ) + { + lpuexcptd = (struct _Unwind_Exception *)v130; + v32 = (int *)Block; + goto LABEL_74; + } + if ( v122 ) + { + v51 = (unsigned __int16 *)v122[2]; + if ( (unsigned int)v51 >= v122[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v122 + 36))(v122); + else + lpuexcptb = *v51; + v52 = 0; + if ( lpuexcptb != 0xFFFF ) + v52 = v122; + v122 = v52; + } + else + { + lpuexcptb = -1; + } + } +LABEL_104: + v100 = 0; + lpuexcptd = (struct _Unwind_Exception *)v130; + v32 = (int *)Block; + if ( !v130 ) + goto LABEL_75; +LABEL_105: + v39 = 15; + if ( v32 != v131 ) + v39 = v131[0]; + if ( (unsigned int)lpuexcptd + 1 > v39 ) + { + std::string::_M_mutate((int)&Block, (size_t)lpuexcptd, 0, 0, 1u); + v32 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v32) = v104; + v130 = (size_t)lpuexcptd + 1; + *((_BYTE *)lpuexcptd + (_DWORD)Block + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v121 + 8), *(_DWORD *)(v121 + 12), (int)&Block) ) + *a6 = 4; + v32 = (int *)Block; + if ( !v117 && !(v130 | v104) ) + { +LABEL_77: + *a7 = 0; + a7[1] = 0; + *a6 = 4; + goto LABEL_78; + } +LABEL_113: + if ( v106 ) + goto LABEL_77; + if ( v109 ) + { + v40 = 0; + v41 = 0x80000000; + if ( !v99 ) + { + v40 = -1; + v41 = 0x7FFFFFFF; + } + *a7 = v40; + a7[1] = v41; + *a6 = 4; + } + else + { + if ( v99 ) + v120 = -(__int64)v120; + *(_QWORD *)a7 = v120; + } +LABEL_78: + if ( v100 ) + *a6 |= 2u; + if ( v32 != v131 ) + operator delete(v32); + return v122; +} +// 4AA912: variable 'v94' is possibly undefined +// 53F72C: using guessed type signed __int32 std::numpunct::id; +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (004AAD90) -------------------------------------------------------- +_DWORD *__stdcall std::num_get>::_M_extract_int[abi:cxx11]( + _DWORD *a1, + unsigned __int16 a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + int v7; // eax + char v8; // al + unsigned int v9; // eax + unsigned int v10; // edx + __int16 *v11; // eax + __int16 v12; // ax + bool v13; // zf + _DWORD *v14; // eax + _DWORD *v15; // edi + unsigned int v16; // eax + unsigned int v17; // edx + __int16 *v18; // eax + __int16 v19; // ax + bool v20; // zf + _DWORD *v21; // eax + int v22; // eax + unsigned __int64 v23; // kr08_8 + int v24; // esi + _DWORD *v25; // ecx + unsigned int v26; // eax + unsigned int v27; // edx + __int16 *v28; // eax + __int16 v29; // ax + bool v30; // zf + _DWORD *v31; // eax + int *v32; // eax + bool v34; // al + unsigned __int16 *v35; // eax + _DWORD *v36; // eax + _WORD *v37; // eax + int v38; // edx + unsigned int v39; // edx + int v40; // eax + int v41; // esi + _DWORD *v42; // ebx + unsigned int v43; // eax + unsigned int v44; // edx + __int16 *v45; // eax + __int16 v46; // ax + bool v47; // zf + _DWORD *v48; // eax + unsigned __int16 *v49; // eax + _DWORD *v50; // eax + __int16 *v51; // eax + __int16 v52; // ax + bool v53; // zf + _DWORD *v54; // eax + bool v55; // bl + unsigned __int16 *v56; // eax + _DWORD *v57; // eax + size_t v58; // edx + size_t v59; // edi + __int16 *v60; // eax + __int16 v61; // ax + bool v62; // zf + _DWORD *v63; // eax + bool v64; // cl + __int16 *v65; // eax + __int16 v66; // ax + bool v67; // zf + _DWORD *v68; // eax + bool v69; // bl + unsigned __int16 *v70; // eax + _DWORD *v71; // eax + _DWORD *v72; // eax + __int16 *v73; // eax + __int16 v74; // ax + bool v75; // zf + _DWORD *v76; // eax + bool v77; // bl + __int16 *v78; // eax + __int16 v79; // ax + bool v80; // zf + _DWORD *v81; // eax + bool v82; // cl + unsigned __int16 *v83; // eax + _DWORD *v84; // edx + __int16 *v85; // eax + __int16 v86; // ax + bool v87; // zf + _DWORD *v88; // eax + bool v89; // si + char v90; // bl + unsigned int v91; // [esp+8h] [ebp-D0h] + std::locale::_Impl *v92; // [esp+18h] [ebp-C0h] + int v93; // [esp+20h] [ebp-B8h] + int v94; // [esp+24h] [ebp-B4h] + bool v95; // [esp+35h] [ebp-A3h] + char v96; // [esp+36h] [ebp-A2h] + int v97; // [esp+38h] [ebp-A0h] + __int64 v98; // [esp+38h] [ebp-A0h] + _DWORD *v99; // [esp+40h] [ebp-98h] + int v100; // [esp+44h] [ebp-94h] + size_t v101; // [esp+44h] [ebp-94h] + char v102; // [esp+48h] [ebp-90h] + char v103; // [esp+49h] [ebp-8Fh] + char v104; // [esp+49h] [ebp-8Fh] + char v105; // [esp+49h] [ebp-8Fh] + char v106; // [esp+4Ah] [ebp-8Eh] + char v107; // [esp+4Ah] [ebp-8Eh] + char v108; // [esp+4Ah] [ebp-8Eh] + char v109; // [esp+4Ah] [ebp-8Eh] + char v110; // [esp+4Ah] [ebp-8Eh] + bool v111; // [esp+4Ch] [ebp-8Ch] + int *v112; // [esp+50h] [ebp-88h] + int v113; // [esp+50h] [ebp-88h] + unsigned __int64 v114; // [esp+50h] [ebp-88h] + char v115; // [esp+58h] [ebp-80h] + char v116; // [esp+58h] [ebp-80h] + bool v117; // [esp+58h] [ebp-80h] + int v118; // [esp+5Ch] [ebp-7Ch] + struct _Unwind_Exception *lpuexcpt; // [esp+60h] [ebp-78h] + bool lpuexcpta; // [esp+60h] [ebp-78h] + unsigned __int16 lpuexcptb; // [esp+60h] [ebp-78h] + char lpuexcptc; // [esp+60h] [ebp-78h] + struct _Unwind_Exception *lpuexcptd; // [esp+60h] [ebp-78h] + char lpuexcpte; // [esp+60h] [ebp-78h] + _DWORD *v125; // [esp+68h] [ebp-70h] + void *Block; // [esp+A8h] [ebp-30h] BYREF + size_t v127; // [esp+ACh] [ebp-2Ch] + int v128[10]; // [esp+B0h] [ebp-28h] BYREF + + v125 = a1; + v99 = a3; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v112 = (int *)(*(_DWORD *)(*(_DWORD *)(a5 + 108) + 12) + 4 * (_DWORD)lpuexcpt); + v118 = *v112; + if ( !*v112 ) + { + v72 = operator new(0xA8u); + v72[1] = 0; + *v72 = &off_5605C0; + v72[2] = 0; + v72[3] = 0; + *((_BYTE *)v72 + 16) = 0; + v72[5] = 0; + v72[6] = 0; + v72[7] = 0; + v72[8] = 0; + v72[9] = 0; + *((_BYTE *)v72 + 164) = 0; + v92 = (std::locale::_Impl *)v72; + std::__numpunct_cache::_M_cache((int)v72, a5 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a5 + 108), v92, lpuexcpt, v91); + v118 = *v112; + } + v113 = 8; + v97 = *(_DWORD *)(a5 + 12) & 0x4A; + if ( v97 != 64 ) + { + v7 = 10; + if ( v97 == 8 ) + v7 = 16; + v113 = v7; + } + lpuexcpta = a2 == 0xFFFF; + if ( lpuexcpta && a1 != 0 ) + { + v73 = (__int16 *)a1[2]; + if ( (unsigned int)v73 >= a1[3] ) + v74 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v74 = *v73; + v75 = v74 == -1; + v76 = 0; + if ( !v75 ) + v76 = a1; + v77 = lpuexcpta && a1 != 0; + v125 = v76; + if ( !v75 ) + v77 = 0; + v103 = v77; + } + else + { + v103 = a2 == 0xFFFF; + } + v111 = a4 == -1; + if ( v111 && a3 != 0 ) + { + v78 = (__int16 *)a3[2]; + if ( (unsigned int)v78 >= a3[3] ) + v79 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v79 = *v78; + v80 = v79 == -1; + v81 = 0; + if ( !v80 ) + v81 = a3; + v82 = v111 && a3 != 0; + v99 = v81; + if ( !v80 ) + v82 = 0; + v115 = v82; + } + else + { + v115 = a4 == -1; + } + if ( v115 != v103 ) + { + if ( v125 && a2 == 0xFFFF ) + { + v70 = (unsigned __int16 *)v125[2]; + if ( (unsigned int)v70 >= v125[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v125 + 36))(v125); + else + lpuexcptb = *v70; + v71 = 0; + if ( lpuexcptb != 0xFFFF ) + v71 = v125; + v125 = v71; + } + else + { + lpuexcptb = a2; + } + v8 = *(_BYTE *)(v118 + 16); + v95 = *(_WORD *)(v118 + 112) == lpuexcptb; + if ( *(_WORD *)(v118 + 112) == lpuexcptb || *(_WORD *)(v118 + 114) == lpuexcptb ) + { + if ( (!v8 || *(_WORD *)(v118 + 38) != lpuexcptb) && *(_WORD *)(v118 + 36) != lpuexcptb ) + { + v9 = v125[2]; + v10 = v125[3]; + if ( v9 >= v10 ) + { + (*(void (__fastcall **)(_DWORD *))(*v125 + 40))(v125); + v11 = (__int16 *)v125[2]; + v10 = v125[3]; + } + else + { + v11 = (__int16 *)(v9 + 2); + v125[2] = v11; + } + if ( (unsigned int)v11 >= v10 ) + v12 = (*(int (__fastcall **)(_DWORD *))(*v125 + 36))(v125); + else + v12 = *v11; + v13 = v12 == -1; + v14 = 0; + if ( !v13 ) + v14 = v125; + v106 = v13; + v125 = v14; + if ( v111 && v99 != 0 ) + { + v85 = (__int16 *)v99[2]; + if ( (unsigned int)v85 >= v99[3] ) + v86 = (*(int (__fastcall **)(_DWORD *))(*v99 + 36))(v99); + else + v86 = *v85; + v87 = v86 == -1; + v88 = 0; + if ( !v87 ) + v88 = v99; + v89 = v111 && v99 != 0; + v99 = v88; + if ( !v87 ) + v89 = 0; + v116 = v89; + } + else + { + v116 = a4 == -1; + } + if ( v106 == v116 ) + { + v102 = 1; + v100 = 0; + v117 = 0; + goto LABEL_49; + } + if ( v125 ) + { + v83 = (unsigned __int16 *)v125[2]; + if ( (unsigned int)v83 >= v125[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v125 + 36))(v125); + else + lpuexcptb = *v83; + v84 = 0; + if ( lpuexcptb != 0xFFFF ) + v84 = v125; + v8 = *(_BYTE *)(v118 + 16); + v125 = v84; + } + else + { + lpuexcptb = -1; + v8 = *(_BYTE *)(v118 + 16); + } + } + } + else + { + v95 = 0; + } + v117 = 0; + v100 = 0; + while ( 1 ) + { + if ( v8 && *(_WORD *)(v118 + 38) == lpuexcptb || *(_WORD *)(v118 + 36) == lpuexcptb ) + { +LABEL_179: + v102 = 0; + goto LABEL_49; + } + if ( *(_WORD *)(v118 + 120) != lpuexcptb ) + break; + v34 = v113 == 10 || !v117; + if ( !v34 ) + goto LABEL_36; + v117 = v97 == 0 || v113 == 8; + if ( !v117 ) + { + ++v100; + v117 = v34; + goto LABEL_40; + } + v100 = 0; + v15 = v125; + v113 = 8; + v16 = v125[2]; + v17 = v125[3]; + if ( v16 < v17 ) + { +LABEL_41: + v18 = (__int16 *)(v16 + 2); + v15[2] = v18; + if ( v17 > (unsigned int)v18 ) + goto LABEL_42; + goto LABEL_85; + } +LABEL_84: + (*(void (__fastcall **)(_DWORD *))(*v125 + 40))(v125); + v18 = (__int16 *)v125[2]; + if ( v125[3] > (unsigned int)v18 ) + { +LABEL_42: + v19 = *v18; + goto LABEL_43; + } +LABEL_85: + v19 = (*(int (__fastcall **)(_DWORD *))(*v125 + 36))(v125); +LABEL_43: + v20 = v19 == -1; + v21 = 0; + if ( !v20 ) + v21 = v125; + v104 = v20; + v125 = v21; + if ( v111 && v99 != 0 ) + { + v51 = (__int16 *)v99[2]; + if ( (unsigned int)v51 >= v99[3] ) + v52 = (*(int (__fastcall **)(_DWORD *))(*v99 + 36))(v99); + else + v52 = *v51; + v53 = v52 == -1; + v54 = 0; + if ( !v53 ) + v54 = v99; + v55 = v111 && v99 != 0; + v99 = v54; + if ( !v53 ) + v55 = 0; + v107 = v55; + } + else + { + v107 = a4 == -1; + } + if ( v107 == v104 ) + { + v102 = 1; + goto LABEL_49; + } + lpuexcptb = -1; + if ( v125 ) + { + v35 = (unsigned __int16 *)v125[2]; + if ( (unsigned int)v35 >= v125[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v125 + 36))(v125); + else + lpuexcptb = *v35; + v36 = 0; + if ( lpuexcptb != 0xFFFF ) + v36 = v125; + v125 = v36; + } + if ( !v117 ) + { + v102 = 0; + goto LABEL_49; + } + v8 = *(_BYTE *)(v118 + 16); + } + if ( !v117 ) + goto LABEL_179; +LABEL_36: + if ( *(_WORD *)(v118 + 116) != lpuexcptb && *(_WORD *)(v118 + 118) != lpuexcptb ) + { + v102 = 0; + v117 = 1; + goto LABEL_49; + } + if ( v97 != 0 && v113 != 16 ) + { + v102 = 0; + v93 = v113; + v94 = v113; + v117 = 1; + goto LABEL_52; + } + v100 = 0; + v117 = 0; + v113 = 16; +LABEL_40: + v15 = v125; + v16 = v125[2]; + v17 = v125[3]; + if ( v16 < v17 ) + goto LABEL_41; + goto LABEL_84; + } + v117 = 0; + v95 = 0; + lpuexcptb = 0; + v102 = 1; + v100 = 0; +LABEL_49: + v22 = 22; + if ( v113 != 16 ) + v22 = v113; + v93 = v22; + v94 = v22; +LABEL_52: + v127 = 0; + Block = v128; + LOBYTE(v128[0]) = 0; + if ( *(_BYTE *)(v118 + 16) ) + std::string::reserve(&Block, 0x20u); + v98 = v113; + v23 = 0xFFFFFFFFFFFFFFFFLL / v113; + v96 = *(_BYTE *)(v118 + 164); + if ( !v96 ) + { + if ( !v102 ) + { + v105 = 0; + v114 = 0LL; + while ( v94 > 10 ) + { + if ( (unsigned __int16)(lpuexcptb - 48) <= 9u ) + goto LABEL_60; + v24 = lpuexcptb - 87; + if ( (unsigned __int16)(lpuexcptb - 97) > 5u ) + { + if ( (unsigned __int16)(lpuexcptb - 65) > 5u ) + goto LABEL_102; + v24 = lpuexcptb - 55; + } +LABEL_61: + if ( v23 >= v114 ) + { + v105 |= __PAIR64__(~(v24 >> 31), ~v24) < v98 * v114; + v25 = v125; + ++v100; + v26 = v125[2]; + v27 = v125[3]; + v114 = v98 * v114 + v24; + if ( v26 < v27 ) + { +LABEL_63: + v28 = (__int16 *)(v26 + 2); + v25[2] = v28; + goto LABEL_64; + } + } + else + { + v25 = v125; + v105 = 1; + v26 = v125[2]; + v27 = v125[3]; + if ( v26 < v27 ) + goto LABEL_63; + } + (*(void (__fastcall **)(_DWORD *))(*v125 + 40))(v125); + v28 = (__int16 *)v125[2]; + v27 = v125[3]; +LABEL_64: + if ( v27 <= (unsigned int)v28 ) + v29 = (*(int (__fastcall **)(_DWORD *))(*v125 + 36))(v125); + else + v29 = *v28; + v30 = v29 == -1; + v31 = 0; + if ( !v30 ) + v31 = v125; + v108 = v30; + v125 = v31; + if ( v111 && v99 != 0 ) + { + v65 = (__int16 *)v99[2]; + if ( (unsigned int)v65 >= v99[3] ) + v66 = (*(int (__fastcall **)(_DWORD *))(*v99 + 36))(v99); + else + v66 = *v65; + v67 = v66 == -1; + v68 = 0; + if ( !v67 ) + v68 = v99; + v69 = v111 && v99 != 0; + v99 = v68; + if ( !v67 ) + v69 = 0; + lpuexcptc = v69; + } + else + { + lpuexcptc = a4 == -1; + } + if ( v108 == lpuexcptc ) + { + v96 = 1; + lpuexcptd = (struct _Unwind_Exception *)v127; + v32 = (int *)Block; + goto LABEL_72; + } + if ( v125 ) + { + v56 = (unsigned __int16 *)v125[2]; + if ( (unsigned int)v56 >= v125[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v125 + 36))(v125); + else + lpuexcptb = *v56; + v57 = 0; + if ( lpuexcptb != 0xFFFF ) + v57 = v125; + v125 = v57; + } + else + { + lpuexcptb = -1; + } + } + if ( lpuexcptb <= 0x2Fu || (unsigned __int16)(v94 + 48) <= lpuexcptb ) + goto LABEL_102; +LABEL_60: + v24 = lpuexcptb - 48; + goto LABEL_61; + } + v90 = v102; + v105 = 0; + v102 = 0; + lpuexcptd = (struct _Unwind_Exception *)v127; + v32 = (int *)Block; + v96 = v90; + v114 = 0LL; + goto LABEL_72; + } + if ( v102 ) + { + v114 = 0LL; + lpuexcptd = (struct _Unwind_Exception *)v127; + v32 = (int *)Block; + v96 = v102; + v105 = 0; + v102 = 0; +LABEL_72: + if ( lpuexcptd ) + goto LABEL_103; +LABEL_73: + if ( v117 || v100 ) + goto LABEL_111; + goto LABEL_75; + } + v105 = 0; + v114 = 0LL; + while ( 1 ) + { + if ( *(_BYTE *)(v118 + 16) && *(_WORD *)(v118 + 38) == lpuexcptb ) + { + v32 = (int *)Block; + lpuexcptd = (struct _Unwind_Exception *)v127; + if ( !v100 ) + { + v96 = 0; + v102 = *(_BYTE *)(v118 + 16); + goto LABEL_72; + } + v58 = 15; + v110 = v100; + if ( Block != v128 ) + v58 = v128[0]; + v101 = v127 + 1; + if ( v127 + 1 > v58 ) + { + std::string::_M_mutate((int)&Block, v127, 0, 0, 1u); + v32 = (int *)Block; + } + v59 = v101; + v100 = 0; + *((_BYTE *)lpuexcptd + (_DWORD)v32) = v110; + v127 = v59; + *((_BYTE *)Block + v59) = 0; +LABEL_126: + v42 = v125; + v43 = v125[2]; + v44 = v125[3]; + if ( v43 < v44 ) + goto LABEL_127; + goto LABEL_137; + } + if ( lpuexcptb == *(_WORD *)(v118 + 36) ) + break; + v37 = (_WORD *)(v118 + 120); + v38 = v93; + while ( *v37 != lpuexcptb ) + { + ++v37; + if ( !--v38 ) + goto LABEL_102; + } + v40 = (int)v37 - v118 - 120; + v41 = (v40 >> 1) - 6; + if ( v40 <= 30 ) + v41 = v40 >> 1; + if ( v23 < v114 ) + { + v105 = v96; + goto LABEL_126; + } + v105 |= __PAIR64__(~(v41 >> 31), ~v41) < v98 * v114; + v114 = v98 * v114 + v41; + ++v100; + v42 = v125; + v43 = v125[2]; + v44 = v125[3]; + if ( v43 < v44 ) + { +LABEL_127: + v45 = (__int16 *)(v43 + 2); + v42[2] = v45; + goto LABEL_128; + } +LABEL_137: + (*(void (__fastcall **)(_DWORD *))(*v125 + 40))(v125); + v45 = (__int16 *)v125[2]; + v44 = v125[3]; +LABEL_128: + if ( v44 <= (unsigned int)v45 ) + v46 = (*(int (__fastcall **)(_DWORD *))(*v125 + 36))(v125); + else + v46 = *v45; + v47 = v46 == -1; + v48 = 0; + if ( !v47 ) + v48 = v125; + v109 = v47; + v125 = v48; + if ( v111 && v99 != 0 ) + { + v60 = (__int16 *)v99[2]; + if ( (unsigned int)v60 >= v99[3] ) + v61 = (*(int (__fastcall **)(_DWORD *))(*v99 + 36))(v99); + else + v61 = *v60; + v62 = v61 == -1; + v63 = 0; + if ( !v62 ) + v63 = v99; + v64 = v111 && v99 != 0; + v99 = v63; + if ( !v62 ) + v64 = 0; + lpuexcpte = v64; + } + else + { + lpuexcpte = a4 == -1; + } + if ( v109 == lpuexcpte ) + { + lpuexcptd = (struct _Unwind_Exception *)v127; + v32 = (int *)Block; + goto LABEL_72; + } + if ( v125 ) + { + v49 = (unsigned __int16 *)v125[2]; + if ( (unsigned int)v49 >= v125[3] ) + lpuexcptb = (*(int (__fastcall **)(_DWORD *))(*v125 + 36))(v125); + else + lpuexcptb = *v49; + v50 = 0; + if ( lpuexcptb != 0xFFFF ) + v50 = v125; + v125 = v50; + } + else + { + lpuexcptb = -1; + } + } +LABEL_102: + v96 = 0; + lpuexcptd = (struct _Unwind_Exception *)v127; + v32 = (int *)Block; + if ( !v127 ) + goto LABEL_73; +LABEL_103: + v39 = 15; + if ( v32 != v128 ) + v39 = v128[0]; + if ( (unsigned int)lpuexcptd + 1 > v39 ) + { + std::string::_M_mutate((int)&Block, (size_t)lpuexcptd, 0, 0, 1u); + v32 = (int *)Block; + } + *((_BYTE *)lpuexcptd + (_DWORD)v32) = v100; + v127 = (size_t)lpuexcptd + 1; + *((_BYTE *)lpuexcptd + (_DWORD)Block + 1) = 0; + if ( !(unsigned __int8)std::__verify_grouping(*(char **)(v118 + 8), *(_DWORD *)(v118 + 12), (int)&Block) ) + *a6 = 4; + v32 = (int *)Block; + if ( !v117 && !(v127 | v100) ) + { +LABEL_75: + *a7 = 0; + a7[1] = 0; + *a6 = 4; + goto LABEL_76; + } +LABEL_111: + if ( v102 ) + goto LABEL_75; + if ( v105 ) + { + *a7 = -1; + a7[1] = -1; + *a6 = 4; + } + else + { + if ( v95 ) + v114 = -(__int64)v114; + *(_QWORD *)a7 = v114; + } +LABEL_76: + if ( v96 ) + *a6 |= 2u; + if ( v32 != v128 ) + operator delete(v32); + return v125; +} +// 4ABB6F: variable 'v91' is possibly undefined +// 53F72C: using guessed type signed __int32 std::numpunct::id; +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (004ABFD0) -------------------------------------------------------- +__int64 __stdcall std::num_get>::_M_extract_int( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + _DWORD *a5, + int *a6) +{ + int v6; // eax + char v7; // al + unsigned int v8; // eax + int v9; // eax + int v10; // eax + int v11; // eax + _DWORD *v12; // ecx + unsigned int v13; // eax + __int16 *v14; // eax + __int16 v15; // ax + char v16; // al + const char *v17; // eax + int v18; // edx + _DWORD *v19; // edx + int v20; // edx + _DWORD *v22; // ecx + unsigned int v23; // eax + __int16 *v24; // eax + __int16 v25; // ax + char v26; // al + bool v27; // al + char *v28; // eax + int v29; // edx + _WORD *v30; // eax + __int16 v31; // dx + _WORD *v32; // eax + _WORD *v33; // eax + __int16 v34; // dx + int v35; // eax + bool v36; // cc + int v37; // edx + int v38; // eax + _DWORD *v39; // ecx + unsigned int v40; // eax + __int16 *v41; // eax + __int16 v42; // ax + char v43; // al + _WORD *v44; // eax + char v45; // bl + const char *v46; // eax + _WORD *v47; // eax + __int16 v48; // dx + _WORD *v49; // eax + int v50; // edx + _WORD *v51; // eax + char v52; // bl + unsigned int v53; // [esp+4h] [ebp-94h] + bool v54; // [esp+1Bh] [ebp-7Dh] + int v55; // [esp+1Ch] [ebp-7Ch] + int v56; // [esp+20h] [ebp-78h] + unsigned int v57; // [esp+24h] [ebp-74h] + char v58; // [esp+28h] [ebp-70h] + char v59; // [esp+2Ah] [ebp-6Eh] + char v60; // [esp+2Bh] [ebp-6Dh] + char v61; // [esp+2Bh] [ebp-6Dh] + int v62; // [esp+2Ch] [ebp-6Ch] + char v63; // [esp+2Ch] [ebp-6Ch] + char v64; // [esp+2Ch] [ebp-6Ch] + int v65; // [esp+30h] [ebp-68h] + unsigned int v66; // [esp+34h] [ebp-64h] + char v67; // [esp+34h] [ebp-64h] + bool v68; // [esp+38h] [ebp-60h] + unsigned int v69; // [esp+3Ch] [ebp-5Ch] + unsigned __int16 lpuexcpt; // [esp+40h] [ebp-58h] + char lpuexcpta; // [esp+40h] [ebp-58h] + __int64 lpuexcptb; // [esp+40h] [ebp-58h] + char lpuexcptc; // [esp+40h] [ebp-58h] + std::string *lpuexcptd; // [esp+40h] [ebp-58h] + struct _Unwind_Exception *v75; // [esp+48h] [ebp-50h] + int v76; // [esp+8Bh] [ebp-Dh] BYREF + const char *v77[2]; // [esp+8Ch] [ebp-Ch] BYREF + + v75 = std::__use_cache>::operator()((int *)(a4 + 108)); + v6 = *(_DWORD *)(a4 + 12) & 0x4A; + v62 = v6; + if ( v6 == 64 ) + { + v69 = 8; +LABEL_4: + v60 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v60 ) + { + v65 = 0; + v68 = 0; + v55 = v69; + v56 = v69; + lpuexcpt = 0; + v54 = 0; + goto LABEL_18; + } + goto LABEL_5; + } + if ( v6 != 8 ) + { + v69 = 10; + goto LABEL_4; + } + v60 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v60 ) + { + v55 = 22; + lpuexcpt = 0; + v65 = 0; + v68 = 0; + v54 = 0; + v69 = 16; + v56 = 22; + goto LABEL_18; + } + v69 = 16; +LABEL_5: + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v51 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v51 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v51; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + v7 = *((_BYTE *)v75 + 16); + v54 = *((_WORD *)v75 + 56) == lpuexcpt; + if ( *((_WORD *)v75 + 56) != lpuexcpt && *((_WORD *)v75 + 57) != lpuexcpt + || v7 && *((_WORD *)v75 + 19) == lpuexcpt + || *((_WORD *)v75 + 18) == lpuexcpt ) + { + goto LABEL_49; + } + v8 = *(_DWORD *)(a1 + 8); + if ( v8 >= *(_DWORD *)(a1 + 12) ) + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + else + *(_DWORD *)(a1 + 8) = v8 + 2; + WORD2(a1) = -1; + v65 = 0; + v60 = std::istreambuf_iterator::equal(&a1, (int)&a2); + v68 = 0; + if ( !v60 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v7 = *((_BYTE *)v75 + 16); +LABEL_49: + v65 = 0; + v68 = 0; + while ( 1 ) + { + if ( v7 && *((_WORD *)v75 + 19) == lpuexcpt || *((_WORD *)v75 + 18) == lpuexcpt ) + { +LABEL_116: + v60 = 0; + goto LABEL_15; + } + if ( *((_WORD *)v75 + 60) != lpuexcpt ) + break; + v27 = v69 == 10 || !v68; + if ( !v27 ) + goto LABEL_55; + v68 = v62 == 0 || v69 == 8; + if ( !v68 ) + { + ++v65; + v68 = v27; + goto LABEL_59; + } + v22 = (_DWORD *)a1; + v65 = 0; + v69 = 8; + v23 = *(_DWORD *)(a1 + 8); + if ( v23 < *(_DWORD *)(a1 + 12) ) + { +LABEL_60: + v22[2] = v23 + 2; + WORD2(a1) = -1; + goto LABEL_61; + } +LABEL_71: + (*(void (__fastcall **)(_DWORD *))(*v22 + 40))(v22); + v22 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + v67 = 1; + goto LABEL_65; + } +LABEL_61: + v24 = (__int16 *)v22[2]; + if ( (unsigned int)v24 >= v22[3] ) + v25 = (*(int (__fastcall **)(_DWORD *))(*v22 + 36))(v22); + else + v25 = *v24; + v67 = 0; + if ( v25 == -1 ) + { + LODWORD(a1) = 0; + v67 = 1; + } +LABEL_65: + v26 = a3 == -1; + v61 = v26 & (a2 != 0); + if ( v61 ) + { + v30 = (_WORD *)a2[2]; + v31 = (unsigned int)v30 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v30; + v26 = 0; + if ( v31 == -1 ) + { + a2 = 0; + v26 = v61; + } + } + if ( v26 == v67 ) + { + v60 = 1; + goto LABEL_15; + } + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v49 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v49 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v49; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + if ( !v68 ) + goto LABEL_116; + v7 = *((_BYTE *)v75 + 16); + } + if ( !v68 ) + goto LABEL_116; +LABEL_55: + if ( *((_WORD *)v75 + 58) != lpuexcpt && *((_WORD *)v75 + 59) != lpuexcpt ) + { + v60 = 0; + v68 = 1; + goto LABEL_15; + } + if ( v62 != 0 && v69 != 16 ) + { + v60 = 0; + v68 = 1; + v55 = v69; + v56 = v69; + goto LABEL_18; + } + v65 = 0; + v68 = 0; + v69 = 16; +LABEL_59: + v22 = (_DWORD *)a1; + v23 = *(_DWORD *)(a1 + 8); + if ( v23 < *(_DWORD *)(a1 + 12) ) + goto LABEL_60; + goto LABEL_71; + } +LABEL_15: + v9 = 22; + if ( v69 != 16 ) + v9 = v69; + v55 = v9; + v56 = v9; +LABEL_18: + v77[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v75 + 16) ) + std::string::reserve((int *)v77, (std::string *)0x20, v53); + v57 = 0xFFFFFFFF / v69; + v63 = *((_BYTE *)v75 + 164); + if ( v63 ) + { + if ( v60 ) + { + v17 = v77[0]; + v66 = 0; + v59 = 0; + v63 = v60; + v18 = *((_DWORD *)v77[0] - 3); + v60 = 0; +LABEL_37: + if ( v18 ) + goto LABEL_86; + goto LABEL_38; + } + v59 = 0; + v66 = 0; + while ( !*((_BYTE *)v75 + 16) || *((_WORD *)v75 + 19) != lpuexcpt ) + { + if ( lpuexcpt == *((_WORD *)v75 + 18) ) + goto LABEL_85; + v28 = (char *)v75 + 120; + v29 = v55; + while ( lpuexcpt != *(_WORD *)v28 ) + { + v28 += 2; + if ( !--v29 ) + goto LABEL_85; + } + v35 = v28 - ((char *)v75 + 120); + v36 = v35 <= 30; + v37 = (v35 >> 1) - 6; + v38 = v35 >> 1; + if ( !v36 ) + v38 = v37; + if ( v57 < v66 ) + { + v59 = v63; + goto LABEL_123; + } + v59 |= ~v38 < v69 * v66; + v39 = (_DWORD *)a1; + v66 = v69 * v66 + v38; + ++v65; + v40 = *(_DWORD *)(a1 + 8); + if ( v40 < *(_DWORD *)(a1 + 12) ) + { +LABEL_124: + v39[2] = v40 + 2; + WORD2(a1) = -1; + goto LABEL_125; + } +LABEL_133: + (*(void (__fastcall **)(_DWORD *))(*v39 + 40))(v39); + v39 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + lpuexcptc = v63; + goto LABEL_129; + } +LABEL_125: + v41 = (__int16 *)v39[2]; + if ( (unsigned int)v41 >= v39[3] ) + v42 = (*(int (__fastcall **)(_DWORD *))(*v39 + 36))(v39); + else + v42 = *v41; + lpuexcptc = 0; + if ( v42 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v63; + } +LABEL_129: + v43 = a3 == -1; + v58 = v43 & (a2 != 0); + if ( v58 ) + { + v47 = (_WORD *)a2[2]; + v48 = (unsigned int)v47 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v47; + v43 = 0; + if ( v48 == -1 ) + { + a2 = 0; + v43 = v58; + } + } + if ( lpuexcptc == v43 ) + { + v17 = v77[0]; + v18 = *((_DWORD *)v77[0] - 3); + goto LABEL_37; + } + lpuexcpt = WORD2(a1); + if ( WORD2(a1) == 0xFFFF && (_DWORD)a1 ) + { + v44 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v44 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v44; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + } + v17 = v77[0]; + v18 = *((_DWORD *)v77[0] - 3); + if ( !v65 ) + { + v63 = 0; + v60 = *((_BYTE *)v75 + 16); + goto LABEL_37; + } + lpuexcptd = (std::string *)(v18 + 1); + if ( (unsigned int)(v18 + 1) > *((_DWORD *)v77[0] - 2) || *((int *)v77[0] - 1) > 0 ) + std::string::reserve((int *)v77, lpuexcptd, v53); + v45 = v65; + v65 = 0; + v77[0][*((_DWORD *)v77[0] - 3)] = v45; + v46 = v77[0]; + *((_DWORD *)v77[0] - 1) = 0; + *((_DWORD *)v46 - 3) = lpuexcptd; + *((_BYTE *)lpuexcptd + (_DWORD)v46) = 0; +LABEL_123: + v39 = (_DWORD *)a1; + v40 = *(_DWORD *)(a1 + 8); + if ( v40 < *(_DWORD *)(a1 + 12) ) + goto LABEL_124; + goto LABEL_133; + } + if ( v60 ) + { + v52 = v60; + v17 = v77[0]; + v59 = 0; + v60 = 0; + v63 = v52; + v18 = *((_DWORD *)v77[0] - 3); + v66 = 0; + goto LABEL_37; + } + v59 = 0; + v66 = 0; +LABEL_23: + v10 = lpuexcpt; + if ( v56 > 10 ) + { + if ( (unsigned __int16)(lpuexcpt - 48) <= 9u ) + { +LABEL_26: + v11 = lpuexcpt - 48; +LABEL_27: + if ( v57 >= v66 ) + goto LABEL_97; +LABEL_28: + v12 = (_DWORD *)a1; + v59 = 1; + v13 = *(_DWORD *)(a1 + 8); + if ( v13 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_98; +LABEL_29: + v12[2] = v13 + 2; + WORD2(a1) = -1; +LABEL_30: + v14 = (__int16 *)v12[2]; + if ( (unsigned int)v14 >= v12[3] ) + v15 = (*(int (__fastcall **)(_DWORD *))(*v12 + 36))(v12); + else + v15 = *v14; + lpuexcpta = 0; + if ( v15 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = 1; + } + goto LABEL_34; + } + while ( (unsigned __int16)(lpuexcpt - 97) <= 5u ) + { + v11 = v10 - 87; + if ( v57 < v66 ) + goto LABEL_28; +LABEL_97: + v59 |= ~v11 < v69 * v66; + v12 = (_DWORD *)a1; + v66 = v69 * v66 + v11; + ++v65; + v13 = *(_DWORD *)(a1 + 8); + if ( v13 < *(_DWORD *)(a1 + 12) ) + goto LABEL_29; +LABEL_98: + (*(void (__fastcall **)(_DWORD *))(*v12 + 40))(v12); + v12 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_30; + lpuexcpta = 1; +LABEL_34: + v16 = a3 == -1; + v64 = v16 & (a2 != 0); + if ( v64 ) + { + v33 = (_WORD *)a2[2]; + v34 = (unsigned int)v33 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v33; + v16 = 0; + if ( v34 == -1 ) + { + a2 = 0; + v16 = v64; + } + } + if ( lpuexcpta == v16 ) + { + v17 = v77[0]; + v63 = 1; + v18 = *((_DWORD *)v77[0] - 3); + goto LABEL_37; + } + lpuexcpt = WORD2(a1); + if ( !(_DWORD)a1 || WORD2(a1) != 0xFFFF ) + goto LABEL_23; + v32 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v32 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v32; + if ( lpuexcpt != 0xFFFF ) + goto LABEL_23; + LODWORD(a1) = 0; + v10 = 0xFFFF; + if ( v56 <= 10 ) + goto LABEL_85; + } + if ( (unsigned __int16)(lpuexcpt - 65) <= 5u ) + { + v11 = v10 - 55; + goto LABEL_27; + } + } + else if ( lpuexcpt > 0x2Fu && (unsigned __int16)(v56 + 48) > lpuexcpt ) + { + goto LABEL_26; + } +LABEL_85: + v17 = v77[0]; + v63 = 0; + if ( *((_DWORD *)v77[0] - 3) ) + { +LABEL_86: + std::string::push_back((int *)v77, (std::string *)(char)v65, v53); + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v75 + 2), *((_DWORD *)v75 + 3), v77) ) + *a5 = 4; + v17 = v77[0]; + if ( !v65 && !v68 && !*((_DWORD *)v77[0] - 3) ) + goto LABEL_40; + goto LABEL_91; + } +LABEL_38: + if ( !v65 && !v68 ) + goto LABEL_40; +LABEL_91: + if ( v60 ) + { +LABEL_40: + v19 = a5; + *a6 = 0; + *v19 = 4; + goto LABEL_41; + } + if ( v59 ) + { + *a6 = -1; + *a5 = 4; + } + else + { + v50 = -v66; + if ( !v54 ) + v50 = v66; + *a6 = v50; + } +LABEL_41: + if ( v63 ) + *a5 |= 2u; + lpuexcptb = a1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v17 - 1, 0xFFFFFFFF) > 0 ) + return lpuexcptb; +LABEL_156: + std::string::_Rep::_M_destroy((void *)(v17 - 12), (int)&v76); + return lpuexcptb; + } + v20 = *((_DWORD *)v17 - 1); + *((_DWORD *)v17 - 1) = v20 - 1; + if ( v20 <= 0 ) + goto LABEL_156; + return lpuexcptb; +} +// 4AC977: variable 'v53' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004ACC10) -------------------------------------------------------- +__int64 __stdcall std::num_get>::_M_extract_int( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + _DWORD *a5, + int *a6) +{ + int v6; // eax + char v7; // al + int v8; // eax + int v9; // eax + int v10; // eax + _DWORD *v11; // ecx + unsigned int v12; // eax + __int16 *v13; // eax + __int16 v14; // ax + char v15; // al + const char *v16; // eax + int v17; // edx + _DWORD *v18; // ecx + int v19; // edx + _DWORD *v21; // ecx + unsigned int v22; // eax + __int16 *v23; // eax + __int16 v24; // ax + char v25; // al + bool v26; // al + char *v27; // eax + int v28; // edx + _WORD *v29; // eax + __int16 v30; // dx + _WORD *v31; // eax + _WORD *v32; // eax + __int16 v33; // dx + int v34; // eax + bool v35; // cc + int v36; // edx + int v37; // eax + _DWORD *v38; // ecx + unsigned int v39; // eax + __int16 *v40; // eax + __int16 v41; // ax + char v42; // al + _WORD *v43; // eax + char v44; // bl + const char *v45; // eax + _WORD *v46; // eax + __int16 v47; // dx + _WORD *v48; // eax + int v49; // edx + _WORD *v50; // eax + char v51; // bl + unsigned int v52; // [esp+4h] [ebp-94h] + bool v53; // [esp+14h] [ebp-84h] + int v54; // [esp+18h] [ebp-80h] + unsigned int v55; // [esp+1Ch] [ebp-7Ch] + int v56; // [esp+20h] [ebp-78h] + unsigned int v57; // [esp+24h] [ebp-74h] + char v58; // [esp+28h] [ebp-70h] + char v59; // [esp+2Ah] [ebp-6Eh] + char v60; // [esp+2Bh] [ebp-6Dh] + char v61; // [esp+2Bh] [ebp-6Dh] + int v62; // [esp+2Ch] [ebp-6Ch] + char v63; // [esp+2Ch] [ebp-6Ch] + char v64; // [esp+2Ch] [ebp-6Ch] + int v65; // [esp+30h] [ebp-68h] + unsigned int v66; // [esp+34h] [ebp-64h] + char v67; // [esp+34h] [ebp-64h] + bool v68; // [esp+38h] [ebp-60h] + unsigned int v69; // [esp+3Ch] [ebp-5Ch] + unsigned __int16 lpuexcpt; // [esp+40h] [ebp-58h] + char lpuexcpta; // [esp+40h] [ebp-58h] + __int64 lpuexcptb; // [esp+40h] [ebp-58h] + char lpuexcptc; // [esp+40h] [ebp-58h] + std::string *lpuexcptd; // [esp+40h] [ebp-58h] + struct _Unwind_Exception *v75; // [esp+48h] [ebp-50h] + int v76; // [esp+8Bh] [ebp-Dh] BYREF + const char *v77[2]; // [esp+8Ch] [ebp-Ch] BYREF + + v75 = std::__use_cache>::operator()((int *)(a4 + 108)); + v6 = *(_DWORD *)(a4 + 12) & 0x4A; + v62 = v6; + if ( v6 == 64 ) + { + v69 = 8; +LABEL_4: + v60 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v60 ) + { + v65 = 0; + v68 = 0; + v54 = v69; + v56 = v69; + lpuexcpt = 0; + v53 = 0; + goto LABEL_16; + } + goto LABEL_5; + } + if ( v6 != 8 ) + { + v69 = 10; + goto LABEL_4; + } + v60 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v60 ) + { + v54 = 22; + lpuexcpt = 0; + v65 = 0; + v68 = 0; + v53 = 0; + v69 = 16; + v56 = 22; + goto LABEL_16; + } + v69 = 16; +LABEL_5: + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v50 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v50 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v50; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + v7 = *((_BYTE *)v75 + 16); + v53 = *((_WORD *)v75 + 56) == lpuexcpt; + if ( *((_WORD *)v75 + 56) != lpuexcpt && *((_WORD *)v75 + 57) != lpuexcpt + || v7 && *((_WORD *)v75 + 19) == lpuexcpt + || *((_WORD *)v75 + 18) == lpuexcpt ) + { + goto LABEL_47; + } + std::wstreambuf::sbumpc((_DWORD *)a1); + WORD2(a1) = -1; + v65 = 0; + v60 = std::istreambuf_iterator::equal(&a1, (int)&a2); + v68 = 0; + if ( !v60 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v7 = *((_BYTE *)v75 + 16); +LABEL_47: + v65 = 0; + v68 = 0; + while ( 1 ) + { + if ( v7 && *((_WORD *)v75 + 19) == lpuexcpt || *((_WORD *)v75 + 18) == lpuexcpt ) + { +LABEL_114: + v60 = 0; + goto LABEL_13; + } + if ( *((_WORD *)v75 + 60) != lpuexcpt ) + break; + v26 = v69 == 10 || !v68; + if ( !v26 ) + goto LABEL_53; + v68 = v62 == 0 || v69 == 8; + if ( !v68 ) + { + ++v65; + v68 = v26; + goto LABEL_57; + } + v21 = (_DWORD *)a1; + v65 = 0; + v69 = 8; + v22 = *(_DWORD *)(a1 + 8); + if ( v22 < *(_DWORD *)(a1 + 12) ) + { +LABEL_58: + v21[2] = v22 + 2; + WORD2(a1) = -1; + goto LABEL_59; + } +LABEL_69: + (*(void (__fastcall **)(_DWORD *))(*v21 + 40))(v21); + v21 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + v67 = 1; + goto LABEL_63; + } +LABEL_59: + v23 = (__int16 *)v21[2]; + if ( (unsigned int)v23 >= v21[3] ) + v24 = (*(int (__fastcall **)(_DWORD *))(*v21 + 36))(v21); + else + v24 = *v23; + v67 = 0; + if ( v24 == -1 ) + { + LODWORD(a1) = 0; + v67 = 1; + } +LABEL_63: + v25 = a3 == -1; + v61 = v25 & (a2 != 0); + if ( v61 ) + { + v29 = (_WORD *)a2[2]; + v30 = (unsigned int)v29 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v29; + v25 = 0; + if ( v30 == -1 ) + { + a2 = 0; + v25 = v61; + } + } + if ( v25 == v67 ) + { + v60 = 1; + goto LABEL_13; + } + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v48 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v48 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v48; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + if ( !v68 ) + goto LABEL_114; + v7 = *((_BYTE *)v75 + 16); + } + if ( !v68 ) + goto LABEL_114; +LABEL_53: + if ( *((_WORD *)v75 + 58) != lpuexcpt && *((_WORD *)v75 + 59) != lpuexcpt ) + { + v60 = 0; + v68 = 1; + goto LABEL_13; + } + if ( v69 != 16 && v62 != 0 ) + { + v60 = 0; + v68 = 1; + v54 = v69; + v56 = v69; + goto LABEL_16; + } + v65 = 0; + v68 = 0; + v69 = 16; +LABEL_57: + v21 = (_DWORD *)a1; + v22 = *(_DWORD *)(a1 + 8); + if ( v22 < *(_DWORD *)(a1 + 12) ) + goto LABEL_58; + goto LABEL_69; + } +LABEL_13: + v8 = 22; + if ( v69 != 16 ) + v8 = v69; + v54 = v8; + v56 = v8; +LABEL_16: + v77[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v75 + 16) ) + std::string::reserve((int *)v77, (std::string *)0x20, v52); + v55 = v53 + 0x7FFFFFFF; + v57 = v55 / v69; + v63 = *((_BYTE *)v75 + 164); + if ( v63 ) + { + if ( v60 ) + { + v16 = v77[0]; + v66 = 0; + v59 = 0; + v63 = v60; + v17 = *((_DWORD *)v77[0] - 3); + v60 = 0; +LABEL_35: + if ( v17 ) + goto LABEL_84; + goto LABEL_36; + } + v59 = 0; + v66 = 0; + while ( !*((_BYTE *)v75 + 16) || *((_WORD *)v75 + 19) != lpuexcpt ) + { + if ( lpuexcpt == *((_WORD *)v75 + 18) ) + goto LABEL_83; + v27 = (char *)v75 + 120; + v28 = v54; + while ( *(_WORD *)v27 != lpuexcpt ) + { + v27 += 2; + if ( !--v28 ) + goto LABEL_83; + } + v34 = v27 - ((char *)v75 + 120); + v35 = v34 <= 30; + v36 = (v34 >> 1) - 6; + v37 = v34 >> 1; + if ( !v35 ) + v37 = v36; + if ( v57 < v66 ) + { + v59 = v63; + goto LABEL_121; + } + v59 |= v55 - v37 < v69 * v66; + v38 = (_DWORD *)a1; + v66 = v69 * v66 + v37; + ++v65; + v39 = *(_DWORD *)(a1 + 8); + if ( v39 < *(_DWORD *)(a1 + 12) ) + { +LABEL_122: + v38[2] = v39 + 2; + WORD2(a1) = -1; + goto LABEL_123; + } +LABEL_131: + (*(void (__fastcall **)(_DWORD *))(*v38 + 40))(v38); + v38 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + lpuexcptc = v63; + goto LABEL_127; + } +LABEL_123: + v40 = (__int16 *)v38[2]; + if ( (unsigned int)v40 >= v38[3] ) + v41 = (*(int (__fastcall **)(_DWORD *))(*v38 + 36))(v38); + else + v41 = *v40; + lpuexcptc = 0; + if ( v41 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v63; + } +LABEL_127: + v42 = a3 == -1; + v58 = v42 & (a2 != 0); + if ( v58 ) + { + v46 = (_WORD *)a2[2]; + v47 = (unsigned int)v46 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v46; + v42 = 0; + if ( v47 == -1 ) + { + a2 = 0; + v42 = v58; + } + } + if ( v42 == lpuexcptc ) + { + v16 = v77[0]; + v17 = *((_DWORD *)v77[0] - 3); + goto LABEL_35; + } + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v43 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v43 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v43; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + } + v16 = v77[0]; + v17 = *((_DWORD *)v77[0] - 3); + if ( !v65 ) + { + v63 = 0; + v60 = *((_BYTE *)v75 + 16); + goto LABEL_35; + } + lpuexcptd = (std::string *)(v17 + 1); + if ( (unsigned int)(v17 + 1) > *((_DWORD *)v77[0] - 2) || *((int *)v77[0] - 1) > 0 ) + std::string::reserve((int *)v77, lpuexcptd, v52); + v44 = v65; + v65 = 0; + v77[0][*((_DWORD *)v77[0] - 3)] = v44; + v45 = v77[0]; + *((_DWORD *)v77[0] - 1) = 0; + *((_DWORD *)v45 - 3) = lpuexcptd; + *((_BYTE *)lpuexcptd + (_DWORD)v45) = 0; +LABEL_121: + v38 = (_DWORD *)a1; + v39 = *(_DWORD *)(a1 + 8); + if ( v39 < *(_DWORD *)(a1 + 12) ) + goto LABEL_122; + goto LABEL_131; + } + if ( v60 ) + { + v51 = v60; + v16 = v77[0]; + v59 = 0; + v60 = 0; + v63 = v51; + v17 = *((_DWORD *)v77[0] - 3); + v66 = 0; + goto LABEL_35; + } + v59 = 0; + v66 = 0; +LABEL_21: + v9 = lpuexcpt; + if ( v56 > 10 ) + { + if ( (unsigned __int16)(lpuexcpt - 48) <= 9u ) + { +LABEL_24: + v10 = lpuexcpt - 48; +LABEL_25: + if ( v57 >= v66 ) + goto LABEL_95; +LABEL_26: + v11 = (_DWORD *)a1; + v59 = 1; + v12 = *(_DWORD *)(a1 + 8); + if ( v12 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_96; +LABEL_27: + v11[2] = v12 + 2; + WORD2(a1) = -1; +LABEL_28: + v13 = (__int16 *)v11[2]; + if ( (unsigned int)v13 >= v11[3] ) + v14 = (*(int (__fastcall **)(_DWORD *))(*v11 + 36))(v11); + else + v14 = *v13; + lpuexcpta = 0; + if ( v14 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = 1; + } + goto LABEL_32; + } + while ( (unsigned __int16)(lpuexcpt - 97) <= 5u ) + { + v10 = v9 - 87; + if ( v57 < v66 ) + goto LABEL_26; +LABEL_95: + v59 |= v55 - v10 < v69 * v66; + v11 = (_DWORD *)a1; + v66 = v69 * v66 + v10; + ++v65; + v12 = *(_DWORD *)(a1 + 8); + if ( v12 < *(_DWORD *)(a1 + 12) ) + goto LABEL_27; +LABEL_96: + (*(void (__fastcall **)(_DWORD *))(*v11 + 40))(v11); + v11 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_28; + lpuexcpta = 1; +LABEL_32: + v15 = a3 == -1; + v64 = v15 & (a2 != 0); + if ( v64 ) + { + v32 = (_WORD *)a2[2]; + v33 = (unsigned int)v32 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v32; + v15 = 0; + if ( v33 == -1 ) + { + a2 = 0; + v15 = v64; + } + } + if ( v15 == lpuexcpta ) + { + v16 = v77[0]; + v63 = 1; + v17 = *((_DWORD *)v77[0] - 3); + goto LABEL_35; + } + lpuexcpt = WORD2(a1); + if ( WORD2(a1) != 0xFFFF || !(_DWORD)a1 ) + goto LABEL_21; + v31 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v31 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v31; + if ( lpuexcpt != 0xFFFF ) + goto LABEL_21; + LODWORD(a1) = 0; + v9 = 0xFFFF; + if ( v56 <= 10 ) + goto LABEL_83; + } + if ( (unsigned __int16)(lpuexcpt - 65) <= 5u ) + { + v10 = v9 - 55; + goto LABEL_25; + } + } + else if ( lpuexcpt > 0x2Fu && (unsigned __int16)(v56 + 48) > lpuexcpt ) + { + goto LABEL_24; + } +LABEL_83: + v16 = v77[0]; + v63 = 0; + if ( *((_DWORD *)v77[0] - 3) ) + { +LABEL_84: + std::string::push_back((int *)v77, (std::string *)(char)v65, v52); + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v75 + 2), *((_DWORD *)v75 + 3), v77) ) + *a5 = 4; + v16 = v77[0]; + if ( !v65 && !v68 && !*((_DWORD *)v77[0] - 3) ) + goto LABEL_38; + goto LABEL_89; + } +LABEL_36: + if ( !v65 && !v68 ) + goto LABEL_38; +LABEL_89: + if ( v60 ) + { +LABEL_38: + v18 = a5; + *a6 = 0; + *v18 = 4; + goto LABEL_39; + } + if ( v59 ) + { + *a6 = v53 + 0x7FFFFFFF; + *a5 = 4; + } + else + { + v49 = -v66; + if ( !v53 ) + v49 = v66; + *a6 = v49; + } +LABEL_39: + if ( v63 ) + *a5 |= 2u; + lpuexcptb = a1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v16 - 1, 0xFFFFFFFF) > 0 ) + return lpuexcptb; +LABEL_154: + std::string::_Rep::_M_destroy((void *)(v16 - 12), (int)&v76); + return lpuexcptb; + } + v19 = *((_DWORD *)v16 - 1); + *((_DWORD *)v16 - 1) = v19 - 1; + if ( v19 <= 0 ) + goto LABEL_154; + return lpuexcptb; +} +// 4AD5C7: variable 'v52' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004AD850) -------------------------------------------------------- +__int64 __stdcall std::num_get>::_M_extract_int( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + _DWORD *a5, + int *a6) +{ + int v6; // eax + char v7; // al + int v8; // eax + int v9; // eax + int v10; // eax + _DWORD *v11; // ecx + unsigned int v12; // eax + __int16 *v13; // eax + __int16 v14; // ax + char v15; // al + const char *v16; // eax + int v17; // edx + _DWORD *v18; // ecx + int v19; // edx + _DWORD *v21; // ecx + unsigned int v22; // eax + __int16 *v23; // eax + __int16 v24; // ax + char v25; // al + bool v26; // al + char *v27; // eax + int v28; // edx + _WORD *v29; // eax + __int16 v30; // dx + _WORD *v31; // eax + _WORD *v32; // eax + __int16 v33; // dx + int v34; // eax + bool v35; // cc + int v36; // edx + int v37; // eax + _DWORD *v38; // ecx + unsigned int v39; // eax + __int16 *v40; // eax + __int16 v41; // ax + char v42; // al + _WORD *v43; // eax + char v44; // bl + const char *v45; // eax + _WORD *v46; // eax + __int16 v47; // dx + _WORD *v48; // eax + int v49; // edx + _WORD *v50; // eax + char v51; // bl + unsigned int v52; // [esp+4h] [ebp-94h] + bool v53; // [esp+1Bh] [ebp-7Dh] + int v54; // [esp+1Ch] [ebp-7Ch] + int v55; // [esp+20h] [ebp-78h] + unsigned int v56; // [esp+24h] [ebp-74h] + char v57; // [esp+28h] [ebp-70h] + char v58; // [esp+2Ah] [ebp-6Eh] + char v59; // [esp+2Bh] [ebp-6Dh] + char v60; // [esp+2Bh] [ebp-6Dh] + int v61; // [esp+2Ch] [ebp-6Ch] + char v62; // [esp+2Ch] [ebp-6Ch] + char v63; // [esp+2Ch] [ebp-6Ch] + int v64; // [esp+30h] [ebp-68h] + unsigned int v65; // [esp+34h] [ebp-64h] + char v66; // [esp+34h] [ebp-64h] + bool v67; // [esp+38h] [ebp-60h] + unsigned int v68; // [esp+3Ch] [ebp-5Ch] + unsigned __int16 lpuexcpt; // [esp+40h] [ebp-58h] + char lpuexcpta; // [esp+40h] [ebp-58h] + __int64 lpuexcptb; // [esp+40h] [ebp-58h] + char lpuexcptc; // [esp+40h] [ebp-58h] + std::string *lpuexcptd; // [esp+40h] [ebp-58h] + struct _Unwind_Exception *v74; // [esp+48h] [ebp-50h] + int v75; // [esp+8Bh] [ebp-Dh] BYREF + const char *v76[2]; // [esp+8Ch] [ebp-Ch] BYREF + + v74 = std::__use_cache>::operator()((int *)(a4 + 108)); + v6 = *(_DWORD *)(a4 + 12) & 0x4A; + v61 = v6; + if ( v6 == 64 ) + { + v68 = 8; +LABEL_4: + v59 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v59 ) + { + v64 = 0; + v67 = 0; + v54 = v68; + v55 = v68; + lpuexcpt = 0; + v53 = 0; + goto LABEL_16; + } + goto LABEL_5; + } + if ( v6 != 8 ) + { + v68 = 10; + goto LABEL_4; + } + v59 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v59 ) + { + v54 = 22; + lpuexcpt = 0; + v64 = 0; + v67 = 0; + v53 = 0; + v68 = 16; + v55 = 22; + goto LABEL_16; + } + v68 = 16; +LABEL_5: + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v50 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v50 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v50; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + v7 = *((_BYTE *)v74 + 16); + v53 = *((_WORD *)v74 + 56) == lpuexcpt; + if ( *((_WORD *)v74 + 56) != lpuexcpt && *((_WORD *)v74 + 57) != lpuexcpt + || v7 && *((_WORD *)v74 + 19) == lpuexcpt + || *((_WORD *)v74 + 18) == lpuexcpt ) + { + goto LABEL_47; + } + std::wstreambuf::sbumpc((_DWORD *)a1); + WORD2(a1) = -1; + v64 = 0; + v59 = std::istreambuf_iterator::equal(&a1, (int)&a2); + v67 = 0; + if ( !v59 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v7 = *((_BYTE *)v74 + 16); +LABEL_47: + v64 = 0; + v67 = 0; + while ( 1 ) + { + if ( v7 && *((_WORD *)v74 + 19) == lpuexcpt || *((_WORD *)v74 + 18) == lpuexcpt ) + { +LABEL_114: + v59 = 0; + goto LABEL_13; + } + if ( *((_WORD *)v74 + 60) != lpuexcpt ) + break; + v26 = v68 == 10 || !v67; + if ( !v26 ) + goto LABEL_53; + v67 = v61 == 0 || v68 == 8; + if ( !v67 ) + { + ++v64; + v67 = v26; + goto LABEL_57; + } + v21 = (_DWORD *)a1; + v64 = 0; + v68 = 8; + v22 = *(_DWORD *)(a1 + 8); + if ( v22 < *(_DWORD *)(a1 + 12) ) + { +LABEL_58: + v21[2] = v22 + 2; + WORD2(a1) = -1; + goto LABEL_59; + } +LABEL_69: + (*(void (__fastcall **)(_DWORD *))(*v21 + 40))(v21); + v21 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + v66 = 1; + goto LABEL_63; + } +LABEL_59: + v23 = (__int16 *)v21[2]; + if ( (unsigned int)v23 >= v21[3] ) + v24 = (*(int (__fastcall **)(_DWORD *))(*v21 + 36))(v21); + else + v24 = *v23; + v66 = 0; + if ( v24 == -1 ) + { + LODWORD(a1) = 0; + v66 = 1; + } +LABEL_63: + v25 = a3 == -1; + v60 = v25 & (a2 != 0); + if ( v60 ) + { + v29 = (_WORD *)a2[2]; + v30 = (unsigned int)v29 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v29; + v25 = 0; + if ( v30 == -1 ) + { + a2 = 0; + v25 = v60; + } + } + if ( v66 == v25 ) + { + v59 = 1; + goto LABEL_13; + } + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v48 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v48 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v48; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + if ( !v67 ) + goto LABEL_114; + v7 = *((_BYTE *)v74 + 16); + } + if ( !v67 ) + goto LABEL_114; +LABEL_53: + if ( *((_WORD *)v74 + 58) != lpuexcpt && *((_WORD *)v74 + 59) != lpuexcpt ) + { + v59 = 0; + v67 = 1; + goto LABEL_13; + } + if ( v68 != 16 && v61 != 0 ) + { + v59 = 0; + v67 = 1; + v54 = v68; + v55 = v68; + goto LABEL_16; + } + v64 = 0; + v67 = 0; + v68 = 16; +LABEL_57: + v21 = (_DWORD *)a1; + v22 = *(_DWORD *)(a1 + 8); + if ( v22 < *(_DWORD *)(a1 + 12) ) + goto LABEL_58; + goto LABEL_69; + } +LABEL_13: + v8 = 22; + if ( v68 != 16 ) + v8 = v68; + v54 = v8; + v55 = v8; +LABEL_16: + v76[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v74 + 16) ) + std::string::reserve((int *)v76, (std::string *)0x20, v52); + v56 = 0xFFFFFFFF / v68; + v62 = *((_BYTE *)v74 + 164); + if ( v62 ) + { + if ( v59 ) + { + v16 = v76[0]; + v65 = 0; + v58 = 0; + v62 = v59; + v17 = *((_DWORD *)v76[0] - 3); + v59 = 0; +LABEL_35: + if ( v17 ) + goto LABEL_84; + goto LABEL_36; + } + v58 = 0; + v65 = 0; + while ( !*((_BYTE *)v74 + 16) || *((_WORD *)v74 + 19) != lpuexcpt ) + { + if ( lpuexcpt == *((_WORD *)v74 + 18) ) + goto LABEL_83; + v27 = (char *)v74 + 120; + v28 = v54; + while ( *(_WORD *)v27 != lpuexcpt ) + { + v27 += 2; + if ( !--v28 ) + goto LABEL_83; + } + v34 = v27 - ((char *)v74 + 120); + v35 = v34 <= 30; + v36 = (v34 >> 1) - 6; + v37 = v34 >> 1; + if ( !v35 ) + v37 = v36; + if ( v56 < v65 ) + { + v58 = v62; + goto LABEL_121; + } + v58 |= ~v37 < v68 * v65; + v38 = (_DWORD *)a1; + v65 = v68 * v65 + v37; + ++v64; + v39 = *(_DWORD *)(a1 + 8); + if ( v39 < *(_DWORD *)(a1 + 12) ) + { +LABEL_122: + v38[2] = v39 + 2; + WORD2(a1) = -1; + goto LABEL_123; + } +LABEL_131: + (*(void (__fastcall **)(_DWORD *))(*v38 + 40))(v38); + v38 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + lpuexcptc = v62; + goto LABEL_127; + } +LABEL_123: + v40 = (__int16 *)v38[2]; + if ( (unsigned int)v40 >= v38[3] ) + v41 = (*(int (__fastcall **)(_DWORD *))(*v38 + 36))(v38); + else + v41 = *v40; + lpuexcptc = 0; + if ( v41 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v62; + } +LABEL_127: + v42 = a3 == -1; + v57 = v42 & (a2 != 0); + if ( v57 ) + { + v46 = (_WORD *)a2[2]; + v47 = (unsigned int)v46 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v46; + v42 = 0; + if ( v47 == -1 ) + { + a2 = 0; + v42 = v57; + } + } + if ( v42 == lpuexcptc ) + { + v16 = v76[0]; + v17 = *((_DWORD *)v76[0] - 3); + goto LABEL_35; + } + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v43 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v43 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v43; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + } + v16 = v76[0]; + v17 = *((_DWORD *)v76[0] - 3); + if ( !v64 ) + { + v62 = 0; + v59 = *((_BYTE *)v74 + 16); + goto LABEL_35; + } + lpuexcptd = (std::string *)(v17 + 1); + if ( (unsigned int)(v17 + 1) > *((_DWORD *)v76[0] - 2) || *((int *)v76[0] - 1) > 0 ) + std::string::reserve((int *)v76, lpuexcptd, v52); + v44 = v64; + v64 = 0; + v76[0][*((_DWORD *)v76[0] - 3)] = v44; + v45 = v76[0]; + *((_DWORD *)v76[0] - 1) = 0; + *((_DWORD *)v45 - 3) = lpuexcptd; + *((_BYTE *)lpuexcptd + (_DWORD)v45) = 0; +LABEL_121: + v38 = (_DWORD *)a1; + v39 = *(_DWORD *)(a1 + 8); + if ( v39 < *(_DWORD *)(a1 + 12) ) + goto LABEL_122; + goto LABEL_131; + } + if ( v59 ) + { + v51 = v59; + v16 = v76[0]; + v58 = 0; + v59 = 0; + v62 = v51; + v17 = *((_DWORD *)v76[0] - 3); + v65 = 0; + goto LABEL_35; + } + v58 = 0; + v65 = 0; +LABEL_21: + v9 = lpuexcpt; + if ( v55 > 10 ) + { + if ( (unsigned __int16)(lpuexcpt - 48) <= 9u ) + { +LABEL_24: + v10 = lpuexcpt - 48; +LABEL_25: + if ( v56 >= v65 ) + goto LABEL_95; +LABEL_26: + v11 = (_DWORD *)a1; + v58 = 1; + v12 = *(_DWORD *)(a1 + 8); + if ( v12 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_96; +LABEL_27: + v11[2] = v12 + 2; + WORD2(a1) = -1; +LABEL_28: + v13 = (__int16 *)v11[2]; + if ( (unsigned int)v13 >= v11[3] ) + v14 = (*(int (__fastcall **)(_DWORD *))(*v11 + 36))(v11); + else + v14 = *v13; + lpuexcpta = 0; + if ( v14 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = 1; + } + goto LABEL_32; + } + while ( (unsigned __int16)(lpuexcpt - 97) <= 5u ) + { + v10 = v9 - 87; + if ( v56 < v65 ) + goto LABEL_26; +LABEL_95: + v58 |= ~v10 < v68 * v65; + v11 = (_DWORD *)a1; + v65 = v68 * v65 + v10; + ++v64; + v12 = *(_DWORD *)(a1 + 8); + if ( v12 < *(_DWORD *)(a1 + 12) ) + goto LABEL_27; +LABEL_96: + (*(void (__fastcall **)(_DWORD *))(*v11 + 40))(v11); + v11 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_28; + lpuexcpta = 1; +LABEL_32: + v15 = a3 == -1; + v63 = v15 & (a2 != 0); + if ( v63 ) + { + v32 = (_WORD *)a2[2]; + v33 = (unsigned int)v32 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v32; + v15 = 0; + if ( v33 == -1 ) + { + a2 = 0; + v15 = v63; + } + } + if ( v15 == lpuexcpta ) + { + v16 = v76[0]; + v62 = 1; + v17 = *((_DWORD *)v76[0] - 3); + goto LABEL_35; + } + lpuexcpt = WORD2(a1); + if ( WORD2(a1) != 0xFFFF || !(_DWORD)a1 ) + goto LABEL_21; + v31 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v31 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v31; + if ( lpuexcpt != 0xFFFF ) + goto LABEL_21; + LODWORD(a1) = 0; + v9 = 0xFFFF; + if ( v55 <= 10 ) + goto LABEL_83; + } + if ( (unsigned __int16)(lpuexcpt - 65) <= 5u ) + { + v10 = v9 - 55; + goto LABEL_25; + } + } + else if ( lpuexcpt > 0x2Fu && (unsigned __int16)(v55 + 48) > lpuexcpt ) + { + goto LABEL_24; + } +LABEL_83: + v16 = v76[0]; + v62 = 0; + if ( *((_DWORD *)v76[0] - 3) ) + { +LABEL_84: + std::string::push_back((int *)v76, (std::string *)(char)v64, v52); + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v74 + 2), *((_DWORD *)v74 + 3), v76) ) + *a5 = 4; + v16 = v76[0]; + if ( !v64 && !v67 && !*((_DWORD *)v76[0] - 3) ) + goto LABEL_38; + goto LABEL_89; + } +LABEL_36: + if ( !v64 && !v67 ) + goto LABEL_38; +LABEL_89: + if ( v59 ) + { +LABEL_38: + v18 = a5; + *a6 = 0; + *v18 = 4; + goto LABEL_39; + } + if ( v58 ) + { + *a6 = -1; + *a5 = 4; + } + else + { + v49 = -v65; + if ( !v53 ) + v49 = v65; + *a6 = v49; + } +LABEL_39: + if ( v62 ) + *a5 |= 2u; + lpuexcptb = a1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v16 - 1, 0xFFFFFFFF) > 0 ) + return lpuexcptb; +LABEL_154: + std::string::_Rep::_M_destroy((void *)(v16 - 12), (int)&v75); + return lpuexcptb; + } + v19 = *((_DWORD *)v16 - 1); + *((_DWORD *)v16 - 1) = v19 - 1; + if ( v19 <= 0 ) + goto LABEL_154; + return lpuexcptb; +} +// 4AE1E7: variable 'v52' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004AE460) -------------------------------------------------------- +__int64 __stdcall std::num_get>::_M_extract_int( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + _DWORD *a5, + _WORD *a6) +{ + int v6; // eax + char v7; // al + unsigned int v8; // eax + int v9; // eax + int v10; // eax + int v11; // eax + _DWORD *v12; // ecx + unsigned int v13; // eax + __int16 *v14; // eax + __int16 v15; // ax + char v16; // al + const char *v17; // eax + int v18; // edx + _DWORD *v19; // edx + int v20; // edx + _DWORD *v22; // ecx + unsigned int v23; // eax + __int16 *v24; // eax + __int16 v25; // ax + char v26; // al + bool v27; // al + char *v28; // eax + int v29; // edx + _WORD *v30; // eax + __int16 v31; // dx + _WORD *v32; // eax + _WORD *v33; // eax + __int16 v34; // dx + int v35; // eax + bool v36; // cc + int v37; // edx + int v38; // eax + _DWORD *v39; // ecx + unsigned int v40; // eax + __int16 *v41; // eax + __int16 v42; // ax + char v43; // al + _WORD *v44; // eax + char v45; // bl + const char *v46; // eax + _WORD *v47; // eax + __int16 v48; // dx + _WORD *v49; // eax + int v50; // edx + _WORD *v51; // eax + char v52; // bl + unsigned int v53; // [esp+4h] [ebp-94h] + int v54; // [esp+1Ch] [ebp-7Ch] + bool v55; // [esp+21h] [ebp-77h] + char v56; // [esp+22h] [ebp-76h] + int v57; // [esp+24h] [ebp-74h] + int v58; // [esp+28h] [ebp-70h] + int v59; // [esp+2Ch] [ebp-6Ch] + char v60; // [esp+2Ch] [ebp-6Ch] + char v61; // [esp+2Ch] [ebp-6Ch] + int v62; // [esp+30h] [ebp-68h] + char v63; // [esp+34h] [ebp-64h] + char v64; // [esp+35h] [ebp-63h] + char v65; // [esp+35h] [ebp-63h] + unsigned __int16 v66; // [esp+36h] [ebp-62h] + char v67; // [esp+36h] [ebp-62h] + bool v68; // [esp+38h] [ebp-60h] + int v69; // [esp+3Ch] [ebp-5Ch] + unsigned __int16 lpuexcpt; // [esp+40h] [ebp-58h] + char lpuexcpta; // [esp+40h] [ebp-58h] + __int64 lpuexcptb; // [esp+40h] [ebp-58h] + char lpuexcptc; // [esp+40h] [ebp-58h] + std::string *lpuexcptd; // [esp+40h] [ebp-58h] + struct _Unwind_Exception *v75; // [esp+48h] [ebp-50h] + int v76; // [esp+8Bh] [ebp-Dh] BYREF + const char *v77[2]; // [esp+8Ch] [ebp-Ch] BYREF + + v75 = std::__use_cache>::operator()((int *)(a4 + 108)); + v6 = *(_DWORD *)(a4 + 12) & 0x4A; + v59 = v6; + if ( v6 == 64 ) + { + v69 = 8; +LABEL_4: + v64 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v64 ) + { + v62 = 0; + v68 = 0; + v54 = v69; + v57 = v69; + lpuexcpt = 0; + v55 = 0; + goto LABEL_18; + } + goto LABEL_5; + } + if ( v6 != 8 ) + { + v69 = 10; + goto LABEL_4; + } + v64 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v64 ) + { + v54 = 22; + lpuexcpt = 0; + v62 = 0; + v68 = 0; + v55 = 0; + v69 = 16; + v57 = 22; + goto LABEL_18; + } + v69 = 16; +LABEL_5: + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v51 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v51 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v51; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + v7 = *((_BYTE *)v75 + 16); + v55 = *((_WORD *)v75 + 56) == lpuexcpt; + if ( *((_WORD *)v75 + 56) != lpuexcpt && *((_WORD *)v75 + 57) != lpuexcpt + || v7 && *((_WORD *)v75 + 19) == lpuexcpt + || *((_WORD *)v75 + 18) == lpuexcpt ) + { + goto LABEL_49; + } + v8 = *(_DWORD *)(a1 + 8); + if ( v8 >= *(_DWORD *)(a1 + 12) ) + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + else + *(_DWORD *)(a1 + 8) = v8 + 2; + WORD2(a1) = -1; + v62 = 0; + v64 = std::istreambuf_iterator::equal(&a1, (int)&a2); + v68 = 0; + if ( !v64 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v7 = *((_BYTE *)v75 + 16); +LABEL_49: + v62 = 0; + v68 = 0; + while ( 1 ) + { + if ( v7 && *((_WORD *)v75 + 19) == lpuexcpt || *((_WORD *)v75 + 18) == lpuexcpt ) + { +LABEL_116: + v64 = 0; + goto LABEL_15; + } + if ( *((_WORD *)v75 + 60) != lpuexcpt ) + break; + v27 = v69 == 10 || !v68; + if ( !v27 ) + goto LABEL_55; + v68 = v59 == 0 || v69 == 8; + if ( !v68 ) + { + ++v62; + v68 = v27; + goto LABEL_59; + } + v22 = (_DWORD *)a1; + v62 = 0; + v69 = 8; + v23 = *(_DWORD *)(a1 + 8); + if ( v23 < *(_DWORD *)(a1 + 12) ) + { +LABEL_60: + v22[2] = v23 + 2; + WORD2(a1) = -1; + goto LABEL_61; + } +LABEL_71: + (*(void (__fastcall **)(_DWORD *))(*v22 + 40))(v22); + v22 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + v67 = 1; + goto LABEL_65; + } +LABEL_61: + v24 = (__int16 *)v22[2]; + if ( (unsigned int)v24 >= v22[3] ) + v25 = (*(int (__fastcall **)(_DWORD *))(*v22 + 36))(v22); + else + v25 = *v24; + v67 = 0; + if ( v25 == -1 ) + { + LODWORD(a1) = 0; + v67 = 1; + } +LABEL_65: + v26 = a3 == -1; + v65 = v26 & (a2 != 0); + if ( v65 ) + { + v30 = (_WORD *)a2[2]; + v31 = (unsigned int)v30 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v30; + v26 = 0; + if ( v31 == -1 ) + { + a2 = 0; + v26 = v65; + } + } + if ( v26 == v67 ) + { + v64 = 1; + goto LABEL_15; + } + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v49 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v49 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v49; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + if ( !v68 ) + goto LABEL_116; + v7 = *((_BYTE *)v75 + 16); + } + if ( !v68 ) + goto LABEL_116; +LABEL_55: + if ( *((_WORD *)v75 + 58) != lpuexcpt && *((_WORD *)v75 + 59) != lpuexcpt ) + { + v64 = 0; + v68 = 1; + goto LABEL_15; + } + if ( v69 != 16 && v59 != 0 ) + { + v64 = 0; + v68 = 1; + v54 = v69; + v57 = v69; + goto LABEL_18; + } + v62 = 0; + v68 = 0; + v69 = 16; +LABEL_59: + v22 = (_DWORD *)a1; + v23 = *(_DWORD *)(a1 + 8); + if ( v23 < *(_DWORD *)(a1 + 12) ) + goto LABEL_60; + goto LABEL_71; + } +LABEL_15: + v9 = 22; + if ( v69 != 16 ) + v9 = v69; + v54 = v9; + v57 = v9; +LABEL_18: + v77[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v75 + 16) ) + std::string::reserve((int *)v77, (std::string *)0x20, v53); + v58 = 0xFFFF / v69; + v60 = *((_BYTE *)v75 + 164); + if ( v60 ) + { + if ( v64 ) + { + v17 = v77[0]; + v63 = 0; + v66 = 0; + v60 = v64; + v18 = *((_DWORD *)v77[0] - 3); + v64 = 0; +LABEL_37: + if ( v18 ) + goto LABEL_86; + goto LABEL_38; + } + v63 = 0; + v66 = 0; + while ( !*((_BYTE *)v75 + 16) || *((_WORD *)v75 + 19) != lpuexcpt ) + { + if ( lpuexcpt == *((_WORD *)v75 + 18) ) + goto LABEL_85; + v28 = (char *)v75 + 120; + v29 = v54; + while ( lpuexcpt != *(_WORD *)v28 ) + { + v28 += 2; + if ( !--v29 ) + goto LABEL_85; + } + v35 = v28 - ((char *)v75 + 120); + v36 = v35 <= 30; + v37 = (v35 >> 1) - 6; + v38 = v35 >> 1; + if ( !v36 ) + v38 = v37; + if ( (unsigned __int16)v58 < v66 ) + { + v63 = v60; + goto LABEL_123; + } + v63 |= (unsigned __int16)(v69 * v66) > 0xFFFF - v38; + v39 = (_DWORD *)a1; + v66 = v69 * v66 + v38; + ++v62; + v40 = *(_DWORD *)(a1 + 8); + if ( v40 < *(_DWORD *)(a1 + 12) ) + { +LABEL_124: + v39[2] = v40 + 2; + WORD2(a1) = -1; + goto LABEL_125; + } +LABEL_133: + (*(void (__fastcall **)(_DWORD *))(*v39 + 40))(v39); + v39 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + lpuexcptc = v60; + goto LABEL_129; + } +LABEL_125: + v41 = (__int16 *)v39[2]; + if ( (unsigned int)v41 >= v39[3] ) + v42 = (*(int (__fastcall **)(_DWORD *))(*v39 + 36))(v39); + else + v42 = *v41; + lpuexcptc = 0; + if ( v42 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v60; + } +LABEL_129: + v43 = a3 == -1; + v56 = v43 & (a2 != 0); + if ( v56 ) + { + v47 = (_WORD *)a2[2]; + v48 = (unsigned int)v47 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v47; + v43 = 0; + if ( v48 == -1 ) + { + a2 = 0; + v43 = v56; + } + } + if ( lpuexcptc == v43 ) + { + v17 = v77[0]; + v18 = *((_DWORD *)v77[0] - 3); + goto LABEL_37; + } + lpuexcpt = WORD2(a1); + if ( WORD2(a1) == 0xFFFF && (_DWORD)a1 ) + { + v44 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v44 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v44; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + } + v17 = v77[0]; + v18 = *((_DWORD *)v77[0] - 3); + if ( !v62 ) + { + v60 = 0; + v64 = *((_BYTE *)v75 + 16); + goto LABEL_37; + } + lpuexcptd = (std::string *)(v18 + 1); + if ( (unsigned int)(v18 + 1) > *((_DWORD *)v77[0] - 2) || *((int *)v77[0] - 1) > 0 ) + std::string::reserve((int *)v77, lpuexcptd, v53); + v45 = v62; + v62 = 0; + v77[0][*((_DWORD *)v77[0] - 3)] = v45; + v46 = v77[0]; + *((_DWORD *)v77[0] - 1) = 0; + *((_DWORD *)v46 - 3) = lpuexcptd; + *((_BYTE *)lpuexcptd + (_DWORD)v46) = 0; +LABEL_123: + v39 = (_DWORD *)a1; + v40 = *(_DWORD *)(a1 + 8); + if ( v40 < *(_DWORD *)(a1 + 12) ) + goto LABEL_124; + goto LABEL_133; + } + if ( v64 ) + { + v52 = v64; + v17 = v77[0]; + v63 = 0; + v64 = 0; + v60 = v52; + v18 = *((_DWORD *)v77[0] - 3); + v66 = 0; + goto LABEL_37; + } + v63 = 0; + v66 = 0; +LABEL_23: + v10 = lpuexcpt; + if ( v57 > 10 ) + { + if ( (unsigned __int16)(lpuexcpt - 48) <= 9u ) + { +LABEL_26: + v11 = lpuexcpt - 48; +LABEL_27: + if ( (unsigned __int16)v58 >= v66 ) + goto LABEL_97; +LABEL_28: + v12 = (_DWORD *)a1; + v63 = 1; + v13 = *(_DWORD *)(a1 + 8); + if ( v13 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_98; +LABEL_29: + v12[2] = v13 + 2; + WORD2(a1) = -1; +LABEL_30: + v14 = (__int16 *)v12[2]; + if ( (unsigned int)v14 >= v12[3] ) + v15 = (*(int (__fastcall **)(_DWORD *))(*v12 + 36))(v12); + else + v15 = *v14; + lpuexcpta = 0; + if ( v15 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = 1; + } + goto LABEL_34; + } + while ( (unsigned __int16)(lpuexcpt - 97) <= 5u ) + { + v11 = v10 - 87; + if ( (unsigned __int16)v58 < v66 ) + goto LABEL_28; +LABEL_97: + v63 |= (unsigned __int16)(v69 * v66) > 0xFFFF - v11; + v12 = (_DWORD *)a1; + v66 = v69 * v66 + v11; + ++v62; + v13 = *(_DWORD *)(a1 + 8); + if ( v13 < *(_DWORD *)(a1 + 12) ) + goto LABEL_29; +LABEL_98: + (*(void (__fastcall **)(_DWORD *))(*v12 + 40))(v12); + v12 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_30; + lpuexcpta = 1; +LABEL_34: + v16 = a3 == -1; + v61 = v16 & (a2 != 0); + if ( v61 ) + { + v33 = (_WORD *)a2[2]; + v34 = (unsigned int)v33 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v33; + v16 = 0; + if ( v34 == -1 ) + { + a2 = 0; + v16 = v61; + } + } + if ( lpuexcpta == v16 ) + { + v17 = v77[0]; + v60 = 1; + v18 = *((_DWORD *)v77[0] - 3); + goto LABEL_37; + } + lpuexcpt = WORD2(a1); + if ( !(_DWORD)a1 || WORD2(a1) != 0xFFFF ) + goto LABEL_23; + v32 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v32 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v32; + if ( lpuexcpt != 0xFFFF ) + goto LABEL_23; + LODWORD(a1) = 0; + v10 = 0xFFFF; + if ( v57 <= 10 ) + goto LABEL_85; + } + if ( (unsigned __int16)(lpuexcpt - 65) <= 5u ) + { + v11 = v10 - 55; + goto LABEL_27; + } + } + else if ( lpuexcpt > 0x2Fu && (unsigned __int16)(v57 + 48) > lpuexcpt ) + { + goto LABEL_26; + } +LABEL_85: + v17 = v77[0]; + v60 = 0; + if ( *((_DWORD *)v77[0] - 3) ) + { +LABEL_86: + std::string::push_back((int *)v77, (std::string *)(char)v62, v53); + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v75 + 2), *((_DWORD *)v75 + 3), v77) ) + *a5 = 4; + v17 = v77[0]; + if ( !v62 && !v68 && !*((_DWORD *)v77[0] - 3) ) + goto LABEL_40; + goto LABEL_91; + } +LABEL_38: + if ( !v62 && !v68 ) + goto LABEL_40; +LABEL_91: + if ( v64 ) + { +LABEL_40: + v19 = a5; + *a6 = 0; + *v19 = 4; + goto LABEL_41; + } + if ( v63 ) + { + *a6 = -1; + *a5 = 4; + } + else + { + v50 = -v66; + if ( !v55 ) + LOWORD(v50) = v66; + *a6 = v50; + } +LABEL_41: + if ( v60 ) + *a5 |= 2u; + lpuexcptb = a1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v17 - 1, 0xFFFFFFFF) > 0 ) + return lpuexcptb; +LABEL_156: + std::string::_Rep::_M_destroy((void *)(v17 - 12), (int)&v76); + return lpuexcptb; + } + v20 = *((_DWORD *)v17 - 1); + *((_DWORD *)v17 - 1) = v20 - 1; + if ( v20 <= 0 ) + goto LABEL_156; + return lpuexcptb; +} +// 4AEE07: variable 'v53' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004AF0A0) -------------------------------------------------------- +__int64 __stdcall std::num_get>::_M_extract_int( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + _DWORD *a5, + _DWORD *a6) +{ + int v6; // eax + char v7; // al + int v8; // eax + unsigned __int64 v9; // kr00_8 + int v10; // esi + int v11; // esi + _DWORD *v12; // ecx + unsigned int v13; // eax + __int16 *v14; // eax + __int16 v15; // ax + char v16; // al + const char *v17; // eax + int v18; // edx + _DWORD *v19; // edi + _DWORD *v20; // esi + int v21; // edx + _DWORD *v23; // ecx + unsigned int v24; // eax + __int16 *v25; // eax + __int16 v26; // ax + char v27; // al + bool v28; // al + char *v29; // eax + int v30; // edx + int v31; // ecx + unsigned int v32; // ebx + int *v33; // edi + _DWORD *v34; // ebx + _WORD *v35; // eax + __int16 v36; // dx + _WORD *v37; // eax + _WORD *v38; // eax + __int16 v39; // dx + int v40; // eax + int v41; // esi + _DWORD *v42; // ecx + unsigned int v43; // eax + __int16 *v44; // eax + __int16 v45; // ax + char v46; // al + _WORD *v47; // eax + char v48; // bl + const char *v49; // eax + _WORD *v50; // eax + __int16 v51; // dx + _WORD *v52; // eax + _WORD *v53; // eax + char v54; // bl + unsigned int v55; // [esp+4h] [ebp-B4h] + unsigned int v56; // [esp+4h] [ebp-B4h] + int v57; // [esp+14h] [ebp-A4h] + unsigned __int64 v58; // [esp+18h] [ebp-A0h] + bool v59; // [esp+21h] [ebp-97h] + char v60; // [esp+22h] [ebp-96h] + int v61; // [esp+24h] [ebp-94h] + char v62; // [esp+32h] [ebp-86h] + char v63; // [esp+33h] [ebp-85h] + char v64; // [esp+33h] [ebp-85h] + int v65; // [esp+34h] [ebp-84h] + char v66; // [esp+34h] [ebp-84h] + char v67; // [esp+34h] [ebp-84h] + __int64 v68; // [esp+38h] [ebp-80h] + char v69; // [esp+38h] [ebp-80h] + int v70; // [esp+40h] [ebp-78h] + bool v71; // [esp+44h] [ebp-74h] + int v72; // [esp+48h] [ebp-70h] + unsigned __int64 v73; // [esp+48h] [ebp-70h] + unsigned __int16 lpuexcpt; // [esp+50h] [ebp-68h] + char lpuexcpta; // [esp+50h] [ebp-68h] + __int64 lpuexcptb; // [esp+50h] [ebp-68h] + char lpuexcptc; // [esp+50h] [ebp-68h] + std::string *lpuexcptd; // [esp+50h] [ebp-68h] + struct _Unwind_Exception *v79; // [esp+58h] [ebp-60h] + int v80; // [esp+9Bh] [ebp-1Dh] BYREF + const char *v81[7]; // [esp+9Ch] [ebp-1Ch] BYREF + + v79 = std::__use_cache>::operator()((int *)(a4 + 108)); + v6 = *(_DWORD *)(a4 + 12) & 0x4A; + v65 = v6; + if ( v6 == 64 ) + { + v72 = 8; +LABEL_4: + v63 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v63 ) + { + v70 = 0; + v71 = 0; + v57 = v72; + v61 = v72; + lpuexcpt = 0; + v59 = 0; + goto LABEL_16; + } + goto LABEL_5; + } + if ( v6 != 8 ) + { + v72 = 10; + goto LABEL_4; + } + v63 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v63 ) + { + v70 = 0; + v57 = 22; + lpuexcpt = 0; + v71 = 0; + v59 = 0; + v72 = 16; + v61 = 22; + goto LABEL_16; + } + v72 = 16; +LABEL_5: + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v53 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v53 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v53; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + v7 = *((_BYTE *)v79 + 16); + v59 = *((_WORD *)v79 + 56) == lpuexcpt; + if ( *((_WORD *)v79 + 56) != lpuexcpt && *((_WORD *)v79 + 57) != lpuexcpt + || v7 && *((_WORD *)v79 + 19) == lpuexcpt + || *((_WORD *)v79 + 18) == lpuexcpt ) + { + goto LABEL_49; + } + std::wstreambuf::sbumpc((_DWORD *)a1); + WORD2(a1) = -1; + v70 = 0; + v63 = std::istreambuf_iterator::equal(&a1, (int)&a2); + v71 = 0; + if ( !v63 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v7 = *((_BYTE *)v79 + 16); +LABEL_49: + v70 = 0; + v71 = 0; + while ( 1 ) + { + if ( v7 && *((_WORD *)v79 + 19) == lpuexcpt || *((_WORD *)v79 + 18) == lpuexcpt ) + { +LABEL_118: + v63 = 0; + goto LABEL_13; + } + if ( *((_WORD *)v79 + 60) != lpuexcpt ) + break; + v28 = v72 == 10 || !v71; + if ( !v28 ) + goto LABEL_55; + v71 = v65 == 0 || v72 == 8; + if ( !v71 ) + { + ++v70; + v71 = v28; + goto LABEL_59; + } + v23 = (_DWORD *)a1; + v70 = 0; + v72 = 8; + v24 = *(_DWORD *)(a1 + 8); + if ( v24 < *(_DWORD *)(a1 + 12) ) + { +LABEL_60: + v23[2] = v24 + 2; + WORD2(a1) = -1; + goto LABEL_61; + } +LABEL_71: + (*(void (__fastcall **)(_DWORD *))(*v23 + 40))(v23); + v23 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + v69 = 1; + goto LABEL_65; + } +LABEL_61: + v25 = (__int16 *)v23[2]; + if ( (unsigned int)v25 >= v23[3] ) + v26 = (*(int (__fastcall **)(_DWORD *))(*v23 + 36))(v23); + else + v26 = *v25; + v69 = 0; + if ( v26 == -1 ) + { + LODWORD(a1) = 0; + v69 = 1; + } +LABEL_65: + v27 = a3 == -1; + v64 = v27 & (a2 != 0); + if ( v64 ) + { + v35 = (_WORD *)a2[2]; + v36 = (unsigned int)v35 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v35; + v27 = 0; + if ( v36 == -1 ) + { + a2 = 0; + v27 = v64; + } + } + if ( v27 == v69 ) + { + v63 = 1; + goto LABEL_13; + } + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v52 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v52 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v52; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + if ( !v71 ) + goto LABEL_118; + v7 = *((_BYTE *)v79 + 16); + } + if ( !v71 ) + goto LABEL_118; +LABEL_55: + if ( *((_WORD *)v79 + 58) != lpuexcpt && *((_WORD *)v79 + 59) != lpuexcpt ) + { + v63 = 0; + v71 = 1; + goto LABEL_13; + } + if ( v72 != 16 && v65 != 0 ) + { + v63 = 0; + v71 = 1; + v57 = v72; + v61 = v72; + goto LABEL_16; + } + v70 = 0; + v71 = 0; + v72 = 16; +LABEL_59: + v23 = (_DWORD *)a1; + v24 = *(_DWORD *)(a1 + 8); + if ( v24 < *(_DWORD *)(a1 + 12) ) + goto LABEL_60; + goto LABEL_71; + } +LABEL_13: + v8 = 22; + if ( v72 != 16 ) + v8 = v72; + v57 = v8; + v61 = v8; +LABEL_16: + v81[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v79 + 16) ) + std::string::reserve((int *)v81, (std::string *)0x20, v55); + v58 = 0x8000000000000000LL; + if ( !v59 ) + v58 = 0x7FFFFFFFFFFFFFFFLL; + v68 = v72; + v9 = v58 / v72; + v66 = *((_BYTE *)v79 + 164); + if ( v66 ) + { + if ( v63 ) + { + v17 = v81[0]; + v73 = 0LL; + v66 = v63; + v18 = *((_DWORD *)v81[0] - 3); + v62 = 0; + v63 = 0; +LABEL_37: + if ( v18 ) + goto LABEL_86; + goto LABEL_38; + } + v62 = 0; + v73 = 0LL; + while ( !*((_BYTE *)v79 + 16) || *((_WORD *)v79 + 19) != lpuexcpt ) + { + if ( lpuexcpt == *((_WORD *)v79 + 18) ) + goto LABEL_85; + v29 = (char *)v79 + 120; + v30 = v57; + while ( *(_WORD *)v29 != lpuexcpt ) + { + v29 += 2; + if ( !--v30 ) + goto LABEL_85; + } + v40 = v29 - ((char *)v79 + 120); + v41 = (v40 >> 1) - 6; + if ( v40 <= 30 ) + v41 = v40 >> 1; + if ( v9 < v73 ) + { + v62 = v66; + goto LABEL_125; + } + v62 |= v58 - v41 < v68 * v73; + v42 = (_DWORD *)a1; + v73 = v68 * v73 + v41; + ++v70; + v43 = *(_DWORD *)(a1 + 8); + if ( v43 < *(_DWORD *)(a1 + 12) ) + { +LABEL_126: + v42[2] = v43 + 2; + WORD2(a1) = -1; + goto LABEL_127; + } +LABEL_135: + (*(void (__fastcall **)(_DWORD *))(*v42 + 40))(v42); + v42 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + lpuexcptc = v66; + goto LABEL_131; + } +LABEL_127: + v44 = (__int16 *)v42[2]; + if ( (unsigned int)v44 >= v42[3] ) + v45 = (*(int (__fastcall **)(_DWORD *))(*v42 + 36))(v42); + else + v45 = *v44; + lpuexcptc = 0; + if ( v45 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v66; + } +LABEL_131: + v46 = a3 == -1; + v60 = v46 & (a2 != 0); + if ( v60 ) + { + v50 = (_WORD *)a2[2]; + v51 = (unsigned int)v50 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v50; + v46 = 0; + if ( v51 == -1 ) + { + a2 = 0; + v46 = v60; + } + } + if ( v46 == lpuexcptc ) + { + v17 = v81[0]; + v18 = *((_DWORD *)v81[0] - 3); + goto LABEL_37; + } + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v47 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v47 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v47; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + } + v17 = v81[0]; + v18 = *((_DWORD *)v81[0] - 3); + if ( !v70 ) + { + v66 = 0; + v63 = *((_BYTE *)v79 + 16); + goto LABEL_37; + } + lpuexcptd = (std::string *)(v18 + 1); + if ( (unsigned int)(v18 + 1) > *((_DWORD *)v81[0] - 2) || *((int *)v81[0] - 1) > 0 ) + std::string::reserve((int *)v81, lpuexcptd, v56); + v48 = v70; + v70 = 0; + v81[0][*((_DWORD *)v81[0] - 3)] = v48; + v49 = v81[0]; + *((_DWORD *)v81[0] - 1) = 0; + *((_DWORD *)v49 - 3) = lpuexcptd; + *((_BYTE *)lpuexcptd + (_DWORD)v49) = 0; +LABEL_125: + v42 = (_DWORD *)a1; + v43 = *(_DWORD *)(a1 + 8); + if ( v43 < *(_DWORD *)(a1 + 12) ) + goto LABEL_126; + goto LABEL_135; + } + if ( v63 ) + { + v54 = v63; + v17 = v81[0]; + v62 = 0; + v63 = 0; + v66 = v54; + v18 = *((_DWORD *)v81[0] - 3); + v73 = 0LL; + goto LABEL_37; + } + v62 = 0; + v73 = 0LL; +LABEL_23: + v10 = lpuexcpt; + if ( v61 > 10 ) + { + if ( (unsigned __int16)(lpuexcpt - 48) <= 9u ) + { +LABEL_26: + v11 = lpuexcpt - 48; + goto LABEL_27; + } + while ( 1 ) + { + if ( (unsigned __int16)(lpuexcpt - 97) > 5u ) + { + if ( (unsigned __int16)(lpuexcpt - 65) > 5u ) + goto LABEL_85; + v11 = v10 - 55; + } + else + { + v11 = v10 - 87; + } +LABEL_27: + if ( v9 >= v73 ) + { + v62 |= v58 - v11 < v68 * v73; + v12 = (_DWORD *)a1; + v73 = v68 * v73 + v11; + ++v70; + v13 = *(_DWORD *)(a1 + 8); + if ( v13 < *(_DWORD *)(a1 + 12) ) + { +LABEL_29: + v12[2] = v13 + 2; + WORD2(a1) = -1; + goto LABEL_30; + } + } + else + { + v12 = (_DWORD *)a1; + v62 = 1; + v13 = *(_DWORD *)(a1 + 8); + if ( v13 < *(_DWORD *)(a1 + 12) ) + goto LABEL_29; + } + (*(void (__fastcall **)(_DWORD *))(*v12 + 40))(v12); + v12 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + lpuexcpta = 1; + goto LABEL_34; + } +LABEL_30: + v14 = (__int16 *)v12[2]; + if ( (unsigned int)v14 >= v12[3] ) + v15 = (*(int (__fastcall **)(_DWORD *))(*v12 + 36))(v12); + else + v15 = *v14; + lpuexcpta = 0; + if ( v15 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = 1; + } +LABEL_34: + v16 = a3 == -1; + v67 = v16 & (a2 != 0); + if ( v67 ) + { + v38 = (_WORD *)a2[2]; + v39 = (unsigned int)v38 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v38; + v16 = 0; + if ( v39 == -1 ) + { + a2 = 0; + v16 = v67; + } + } + if ( v16 == lpuexcpta ) + { + v17 = v81[0]; + v66 = 1; + v18 = *((_DWORD *)v81[0] - 3); + goto LABEL_37; + } + lpuexcpt = WORD2(a1); + if ( WORD2(a1) != 0xFFFF || !(_DWORD)a1 ) + goto LABEL_23; + v37 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v37 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v37; + if ( lpuexcpt != 0xFFFF ) + goto LABEL_23; + LODWORD(a1) = 0; + v10 = 0xFFFF; + if ( v61 <= 10 ) + goto LABEL_85; + } + } + if ( lpuexcpt > 0x2Fu && (unsigned __int16)(v61 + 48) > lpuexcpt ) + goto LABEL_26; +LABEL_85: + v17 = v81[0]; + v66 = 0; + if ( *((_DWORD *)v81[0] - 3) ) + { +LABEL_86: + std::string::push_back((int *)v81, (std::string *)(char)v70, v56); + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v79 + 2), *((_DWORD *)v79 + 3), v81) ) + *a5 = 4; + v17 = v81[0]; + if ( !v70 && !v71 && !*((_DWORD *)v81[0] - 3) ) + goto LABEL_40; + goto LABEL_91; + } +LABEL_38: + if ( !v70 && !v71 ) + goto LABEL_40; +LABEL_91: + if ( v63 ) + { +LABEL_40: + v19 = a6; + v20 = a5; + *a6 = 0; + v19[1] = 0; + *v20 = 4; + goto LABEL_41; + } + if ( v62 ) + { + v31 = 0; + v32 = 0x80000000; + if ( !v59 ) + { + v31 = -1; + v32 = 0x7FFFFFFF; + } + v33 = a6; + a6[1] = v32; + v34 = a5; + *v33 = v31; + *v34 = 4; + } + else + { + if ( v59 ) + v73 = -(__int64)v73; + *(_QWORD *)a6 = v73; + } +LABEL_41: + if ( v66 ) + *a5 |= 2u; + lpuexcptb = a1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v17 - 1, 0xFFFFFFFF) > 0 ) + return lpuexcptb; +LABEL_158: + std::string::_Rep::_M_destroy((void *)(v17 - 12), (int)&v80); + return lpuexcptb; + } + v21 = *((_DWORD *)v17 - 1); + *((_DWORD *)v17 - 1) = v21 - 1; + if ( v21 <= 0 ) + goto LABEL_158; + return lpuexcptb; +} +// 4AFBA7: variable 'v55' is possibly undefined +// 4AF6E7: variable 'v56' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004AFE80) -------------------------------------------------------- +__int64 __stdcall std::num_get>::_M_extract_int( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + _DWORD *a5, + _DWORD *a6) +{ + int v6; // eax + char v7; // al + int v8; // eax + unsigned __int64 v9; // kr00_8 + int v10; // eax + int v11; // esi + _DWORD *v12; // ecx + unsigned int v13; // eax + __int16 *v14; // eax + __int16 v15; // ax + char v16; // al + const char *v17; // eax + int v18; // edx + _DWORD *v19; // ebx + _DWORD *v20; // edi + int v21; // edx + _DWORD *v23; // ecx + unsigned int v24; // eax + __int16 *v25; // eax + __int16 v26; // ax + char v27; // al + bool v28; // al + char *v29; // eax + int v30; // edx + _WORD *v31; // eax + __int16 v32; // dx + _WORD *v33; // eax + _WORD *v34; // eax + __int16 v35; // dx + int v36; // eax + int v37; // esi + _DWORD *v38; // ecx + unsigned int v39; // eax + __int16 *v40; // eax + __int16 v41; // ax + char v42; // al + _WORD *v43; // eax + char v44; // bl + const char *v45; // eax + _WORD *v46; // eax + __int16 v47; // dx + _WORD *v48; // eax + _DWORD *v49; // ebx + _DWORD *v50; // edi + _WORD *v51; // eax + char v52; // bl + unsigned int v53; // [esp+4h] [ebp-B4h] + unsigned int v54; // [esp+4h] [ebp-B4h] + bool v55; // [esp+1Fh] [ebp-99h] + int v56; // [esp+20h] [ebp-98h] + int v57; // [esp+24h] [ebp-94h] + char v58; // [esp+30h] [ebp-88h] + char v59; // [esp+32h] [ebp-86h] + char v60; // [esp+33h] [ebp-85h] + char v61; // [esp+33h] [ebp-85h] + int v62; // [esp+34h] [ebp-84h] + char v63; // [esp+34h] [ebp-84h] + char v64; // [esp+34h] [ebp-84h] + __int64 v65; // [esp+38h] [ebp-80h] + char v66; // [esp+38h] [ebp-80h] + int v67; // [esp+40h] [ebp-78h] + bool v68; // [esp+44h] [ebp-74h] + int v69; // [esp+48h] [ebp-70h] + unsigned __int64 v70; // [esp+48h] [ebp-70h] + unsigned __int16 lpuexcpt; // [esp+50h] [ebp-68h] + char lpuexcpta; // [esp+50h] [ebp-68h] + __int64 lpuexcptb; // [esp+50h] [ebp-68h] + char lpuexcptc; // [esp+50h] [ebp-68h] + std::string *lpuexcptd; // [esp+50h] [ebp-68h] + struct _Unwind_Exception *v76; // [esp+58h] [ebp-60h] + int v77; // [esp+9Bh] [ebp-1Dh] BYREF + const char *v78[7]; // [esp+9Ch] [ebp-1Ch] BYREF + + v76 = std::__use_cache>::operator()((int *)(a4 + 108)); + v6 = *(_DWORD *)(a4 + 12) & 0x4A; + v62 = v6; + if ( v6 == 64 ) + { + v69 = 8; +LABEL_4: + v60 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v60 ) + { + v67 = 0; + v68 = 0; + v56 = v69; + v57 = v69; + lpuexcpt = 0; + v55 = 0; + goto LABEL_16; + } + goto LABEL_5; + } + if ( v6 != 8 ) + { + v69 = 10; + goto LABEL_4; + } + v60 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v60 ) + { + v67 = 0; + v56 = 22; + lpuexcpt = 0; + v68 = 0; + v55 = 0; + v69 = 16; + v57 = 22; + goto LABEL_16; + } + v69 = 16; +LABEL_5: + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v51 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v51 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v51; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + v7 = *((_BYTE *)v76 + 16); + v55 = *((_WORD *)v76 + 56) == lpuexcpt; + if ( *((_WORD *)v76 + 56) != lpuexcpt && *((_WORD *)v76 + 57) != lpuexcpt + || v7 && *((_WORD *)v76 + 19) == lpuexcpt + || *((_WORD *)v76 + 18) == lpuexcpt ) + { + goto LABEL_47; + } + std::wstreambuf::sbumpc((_DWORD *)a1); + WORD2(a1) = -1; + v67 = 0; + v60 = std::istreambuf_iterator::equal(&a1, (int)&a2); + v68 = 0; + if ( !v60 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v7 = *((_BYTE *)v76 + 16); +LABEL_47: + v67 = 0; + v68 = 0; + while ( 1 ) + { + if ( v7 && *((_WORD *)v76 + 19) == lpuexcpt || *((_WORD *)v76 + 18) == lpuexcpt ) + { +LABEL_117: + v60 = 0; + goto LABEL_13; + } + if ( *((_WORD *)v76 + 60) != lpuexcpt ) + break; + v28 = v69 == 10 || !v68; + if ( !v28 ) + goto LABEL_53; + v68 = v62 == 0 || v69 == 8; + if ( !v68 ) + { + ++v67; + v68 = v28; + goto LABEL_57; + } + v23 = (_DWORD *)a1; + v67 = 0; + v69 = 8; + v24 = *(_DWORD *)(a1 + 8); + if ( v24 < *(_DWORD *)(a1 + 12) ) + { +LABEL_58: + v23[2] = v24 + 2; + WORD2(a1) = -1; + goto LABEL_59; + } +LABEL_69: + (*(void (__fastcall **)(_DWORD *))(*v23 + 40))(v23); + v23 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + v66 = 1; + goto LABEL_63; + } +LABEL_59: + v25 = (__int16 *)v23[2]; + if ( (unsigned int)v25 >= v23[3] ) + v26 = (*(int (__fastcall **)(_DWORD *))(*v23 + 36))(v23); + else + v26 = *v25; + v66 = 0; + if ( v26 == -1 ) + { + LODWORD(a1) = 0; + v66 = 1; + } +LABEL_63: + v27 = a3 == -1; + v61 = v27 & (a2 != 0); + if ( v61 ) + { + v31 = (_WORD *)a2[2]; + v32 = (unsigned int)v31 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v31; + v27 = 0; + if ( v32 == -1 ) + { + a2 = 0; + v27 = v61; + } + } + if ( v66 == v27 ) + { + v60 = 1; + goto LABEL_13; + } + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v48 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v48 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v48; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + if ( !v68 ) + goto LABEL_117; + v7 = *((_BYTE *)v76 + 16); + } + if ( !v68 ) + goto LABEL_117; +LABEL_53: + if ( *((_WORD *)v76 + 58) != lpuexcpt && *((_WORD *)v76 + 59) != lpuexcpt ) + { + v60 = 0; + v68 = 1; + goto LABEL_13; + } + if ( v69 != 16 && v62 != 0 ) + { + v60 = 0; + v68 = 1; + v56 = v69; + v57 = v69; + goto LABEL_16; + } + v67 = 0; + v68 = 0; + v69 = 16; +LABEL_57: + v23 = (_DWORD *)a1; + v24 = *(_DWORD *)(a1 + 8); + if ( v24 < *(_DWORD *)(a1 + 12) ) + goto LABEL_58; + goto LABEL_69; + } +LABEL_13: + v8 = 22; + if ( v69 != 16 ) + v8 = v69; + v56 = v8; + v57 = v8; +LABEL_16: + v78[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v76 + 16) ) + std::string::reserve((int *)v78, (std::string *)0x20, v53); + v65 = v69; + v9 = 0xFFFFFFFFFFFFFFFFLL / v69; + v63 = *((_BYTE *)v76 + 164); + if ( v63 ) + { + if ( v60 ) + { + v17 = v78[0]; + v70 = 0LL; + v63 = v60; + v18 = *((_DWORD *)v78[0] - 3); + v59 = 0; + v60 = 0; +LABEL_35: + if ( v18 ) + goto LABEL_84; + goto LABEL_36; + } + v59 = 0; + v70 = 0LL; + while ( !*((_BYTE *)v76 + 16) || *((_WORD *)v76 + 19) != lpuexcpt ) + { + if ( lpuexcpt == *((_WORD *)v76 + 18) ) + goto LABEL_83; + v29 = (char *)v76 + 120; + v30 = v56; + while ( *(_WORD *)v29 != lpuexcpt ) + { + v29 += 2; + if ( !--v30 ) + goto LABEL_83; + } + v36 = v29 - ((char *)v76 + 120); + v37 = (v36 >> 1) - 6; + if ( v36 <= 30 ) + v37 = v36 >> 1; + if ( v9 < v70 ) + { + v59 = v63; + goto LABEL_122; + } + v59 |= __PAIR64__(~(v37 >> 31), ~v37) < v65 * v70; + v38 = (_DWORD *)a1; + ++v67; + v70 = v65 * v70 + v37; + v39 = *(_DWORD *)(a1 + 8); + if ( v39 < *(_DWORD *)(a1 + 12) ) + { +LABEL_123: + v38[2] = v39 + 2; + WORD2(a1) = -1; + goto LABEL_124; + } +LABEL_132: + (*(void (__fastcall **)(_DWORD *))(*v38 + 40))(v38); + v38 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + lpuexcptc = v63; + goto LABEL_128; + } +LABEL_124: + v40 = (__int16 *)v38[2]; + if ( (unsigned int)v40 >= v38[3] ) + v41 = (*(int (__fastcall **)(_DWORD *))(*v38 + 36))(v38); + else + v41 = *v40; + lpuexcptc = 0; + if ( v41 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v63; + } +LABEL_128: + v42 = a3 == -1; + v58 = v42 & (a2 != 0); + if ( v58 ) + { + v46 = (_WORD *)a2[2]; + v47 = (unsigned int)v46 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v46; + v42 = 0; + if ( v47 == -1 ) + { + a2 = 0; + v42 = v58; + } + } + if ( v42 == lpuexcptc ) + { + v17 = v78[0]; + v18 = *((_DWORD *)v78[0] - 3); + goto LABEL_35; + } + lpuexcpt = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v43 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v43 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v43; + if ( lpuexcpt == 0xFFFF ) + LODWORD(a1) = 0; + } + } + v17 = v78[0]; + v18 = *((_DWORD *)v78[0] - 3); + if ( !v67 ) + { + v63 = 0; + v60 = *((_BYTE *)v76 + 16); + goto LABEL_35; + } + lpuexcptd = (std::string *)(v18 + 1); + if ( (unsigned int)(v18 + 1) > *((_DWORD *)v78[0] - 2) || *((int *)v78[0] - 1) > 0 ) + std::string::reserve((int *)v78, lpuexcptd, v54); + v44 = v67; + v67 = 0; + v78[0][*((_DWORD *)v78[0] - 3)] = v44; + v45 = v78[0]; + *((_DWORD *)v78[0] - 1) = 0; + *((_DWORD *)v45 - 3) = lpuexcptd; + *((_BYTE *)lpuexcptd + (_DWORD)v45) = 0; +LABEL_122: + v38 = (_DWORD *)a1; + v39 = *(_DWORD *)(a1 + 8); + if ( v39 < *(_DWORD *)(a1 + 12) ) + goto LABEL_123; + goto LABEL_132; + } + if ( v60 ) + { + v52 = v60; + v17 = v78[0]; + v59 = 0; + v60 = 0; + v63 = v52; + v18 = *((_DWORD *)v78[0] - 3); + v70 = 0LL; + goto LABEL_35; + } + v59 = 0; + v70 = 0LL; +LABEL_21: + v10 = lpuexcpt; + if ( v57 > 10 ) + { + if ( (unsigned __int16)(lpuexcpt - 48) <= 9u ) + { +LABEL_24: + v11 = lpuexcpt - 48; + goto LABEL_25; + } + while ( 1 ) + { + v11 = v10 - 87; + if ( (unsigned __int16)(lpuexcpt - 97) > 5u ) + { + if ( (unsigned __int16)(lpuexcpt - 65) > 5u ) + goto LABEL_83; + v11 = v10 - 55; + } +LABEL_25: + if ( v9 >= v70 ) + { + v59 |= __PAIR64__(~(v11 >> 31), ~v11) < v65 * v70; + v12 = (_DWORD *)a1; + ++v67; + v70 = v65 * v70 + v11; + v13 = *(_DWORD *)(a1 + 8); + if ( v13 < *(_DWORD *)(a1 + 12) ) + { +LABEL_27: + v12[2] = v13 + 2; + WORD2(a1) = -1; + goto LABEL_28; + } + } + else + { + v12 = (_DWORD *)a1; + v59 = 1; + v13 = *(_DWORD *)(a1 + 8); + if ( v13 < *(_DWORD *)(a1 + 12) ) + goto LABEL_27; + } + (*(void (__fastcall **)(_DWORD *))(*v12 + 40))(v12); + v12 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + lpuexcpta = 1; + goto LABEL_32; + } +LABEL_28: + v14 = (__int16 *)v12[2]; + if ( (unsigned int)v14 >= v12[3] ) + v15 = (*(int (__fastcall **)(_DWORD *))(*v12 + 36))(v12); + else + v15 = *v14; + lpuexcpta = 0; + if ( v15 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = 1; + } +LABEL_32: + v16 = a3 == -1; + v64 = v16 & (a2 != 0); + if ( v64 ) + { + v34 = (_WORD *)a2[2]; + v35 = (unsigned int)v34 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v34; + v16 = 0; + if ( v35 == -1 ) + { + a2 = 0; + v16 = v64; + } + } + if ( v16 == lpuexcpta ) + { + v17 = v78[0]; + v63 = 1; + v18 = *((_DWORD *)v78[0] - 3); + goto LABEL_35; + } + lpuexcpt = WORD2(a1); + if ( WORD2(a1) != 0xFFFF || !(_DWORD)a1 ) + goto LABEL_21; + v33 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v33 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v33; + if ( lpuexcpt != 0xFFFF ) + goto LABEL_21; + LODWORD(a1) = 0; + v10 = 0xFFFF; + if ( v57 <= 10 ) + goto LABEL_83; + } + } + if ( lpuexcpt > 0x2Fu && (unsigned __int16)(v57 + 48) > lpuexcpt ) + goto LABEL_24; +LABEL_83: + v17 = v78[0]; + v63 = 0; + if ( *((_DWORD *)v78[0] - 3) ) + { +LABEL_84: + std::string::push_back((int *)v78, (std::string *)(char)v67, v54); + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v76 + 2), *((_DWORD *)v76 + 3), v78) ) + *a5 = 4; + v17 = v78[0]; + if ( !v67 && !v68 && !*((_DWORD *)v78[0] - 3) ) + goto LABEL_38; + goto LABEL_89; + } +LABEL_36: + if ( !v67 && !v68 ) + goto LABEL_38; +LABEL_89: + if ( v60 ) + { +LABEL_38: + v19 = a6; + v20 = a5; + *a6 = 0; + v19[1] = 0; + *v20 = 4; + goto LABEL_39; + } + if ( v59 ) + { + v49 = a6; + v50 = a5; + *a6 = -1; + v49[1] = -1; + *v50 = 4; + } + else + { + if ( v55 ) + v70 = -(__int64)v70; + *(_QWORD *)a6 = v70; + } +LABEL_39: + if ( v63 ) + *a5 |= 2u; + lpuexcptb = a1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v17 - 1, 0xFFFFFFFF) > 0 ) + return lpuexcptb; +LABEL_155: + std::string::_Rep::_M_destroy((void *)(v17 - 12), (int)&v77); + return lpuexcptb; + } + v21 = *((_DWORD *)v17 - 1); + *((_DWORD *)v17 - 1) = v21 - 1; + if ( v21 <= 0 ) + goto LABEL_155; + return lpuexcptb; +} +// 4B0947: variable 'v53' is possibly undefined +// 4B0497: variable 'v54' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004B0C20) -------------------------------------------------------- +__int64 __stdcall std::num_get>::_M_extract_float( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + _DWORD *a5, + int *a6) +{ + char v6; // cl + int v7; // eax + _DWORD *v8; // ecx + unsigned int v9; // eax + __int16 *v10; // eax + __int16 v11; // ax + char v12; // al + int v13; // eax + int v14; // eax + char v16; // al + char *v17; // eax + bool v18; // zf + int v19; // eax + _DWORD *v20; // ecx + unsigned int v21; // eax + __int16 *v22; // eax + __int16 v23; // ax + char v24; // al + __int16 v25; // dx + _WORD *v26; // eax + unsigned int v27; // eax + __int16 v28; // ax + int v29; // eax + int v30; // eax + _DWORD *v31; // ecx + unsigned int v32; // eax + __int16 *v33; // eax + __int16 v34; // ax + char v35; // al + int v36; // eax + const char *v37; // eax + int v38; // eax + _WORD *v39; // eax + __int16 v40; // dx + char v41; // cl + const char *v42; // eax + std::string *v43; // ebx + int v44; // eax + _WORD *v45; // eax + __int16 v46; // dx + __int16 *v47; // eax + _WORD *v48; // eax + __int16 v49; // dx + _WORD *v50; // eax + __int16 v51; // dx + char v52; // al + char i; // dl + _DWORD *v54; // ecx + unsigned int v55; // eax + __int16 *v56; // eax + __int16 v57; // ax + char v58; // al + int v59; // eax + _WORD *v60; // eax + __int16 v61; // dx + _WORD *v62; // eax + bool v63; // al + unsigned int v64; // [esp+4h] [ebp-84h] + unsigned int v65; // [esp+4h] [ebp-84h] + unsigned int v66; // [esp+Ch] [ebp-7Ch] + int v67; // [esp+14h] [ebp-74h] + char v68; // [esp+14h] [ebp-74h] + int v69; // [esp+14h] [ebp-74h] + char v70; // [esp+1Bh] [ebp-6Dh] + char v71; // [esp+1Ch] [ebp-6Ch] + std::string *v72; // [esp+1Ch] [ebp-6Ch] + std::string *v73; // [esp+1Ch] [ebp-6Ch] + bool v74; // [esp+20h] [ebp-68h] + char v75; // [esp+20h] [ebp-68h] + std::string *v76; // [esp+20h] [ebp-68h] + char v77; // [esp+20h] [ebp-68h] + std::string *v78; // [esp+20h] [ebp-68h] + std::string *v79; // [esp+20h] [ebp-68h] + int v80; // [esp+24h] [ebp-64h] + int v81; // [esp+28h] [ebp-60h] + char v82; // [esp+28h] [ebp-60h] + char v83; // [esp+28h] [ebp-60h] + int v84; // [esp+28h] [ebp-60h] + char v85; // [esp+2Ch] [ebp-5Ch] + char v86; // [esp+2Ch] [ebp-5Ch] + char v87; // [esp+2Ch] [ebp-5Ch] + char v88; // [esp+2Ch] [ebp-5Ch] + std::string *v89; // [esp+2Ch] [ebp-5Ch] + struct _Unwind_Exception *v90; // [esp+30h] [ebp-58h] + __int64 v91; // [esp+30h] [ebp-58h] + __int16 lpuexcpt; // [esp+38h] [ebp-50h] + struct _Unwind_Exception *lpuexcpta; // [esp+38h] [ebp-50h] + char lpuexcptb; // [esp+38h] [ebp-50h] + struct _Unwind_Exception *lpuexcptc; // [esp+38h] [ebp-50h] + struct _Unwind_Exception *lpuexcptd; // [esp+38h] [ebp-50h] + char lpuexcpte; // [esp+38h] [ebp-50h] + struct _Unwind_Exception *lpuexcptf; // [esp+38h] [ebp-50h] + char lpuexcptg; // [esp+38h] [ebp-50h] + struct _Unwind_Exception *lpuexcpth; // [esp+38h] [ebp-50h] + struct _Unwind_Exception *lpuexcpti; // [esp+38h] [ebp-50h] + char lpuexcptj; // [esp+38h] [ebp-50h] + int v103; // [esp+7Bh] [ebp-Dh] BYREF + const char *v104[2]; // [esp+7Ch] [ebp-Ch] BYREF + + v90 = std::__use_cache>::operator()((int *)(a4 + 108)); + v74 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( v74 ) + { + v80 = 0; + lpuexcpt = 0; + v85 = 0; + goto LABEL_3; + } + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v51 = *((_WORD *)v90 + 57); + if ( v51 == lpuexcpt ) + { + v52 = *((_BYTE *)v90 + 16); + } + else + { + v52 = *((_BYTE *)v90 + 16); + if ( *((_WORD *)v90 + 56) != lpuexcpt ) + { +LABEL_144: + v80 = 0; + for ( i = 0; ; i = 1 ) + { + if ( v52 && *((_WORD *)v90 + 19) == lpuexcpt + || *((_WORD *)v90 + 18) == lpuexcpt + || *((_WORD *)v90 + 60) != lpuexcpt ) + { + v85 = i; + goto LABEL_3; + } + if ( i ) + { + v54 = (_DWORD *)a1; + ++v80; + v55 = *(_DWORD *)(a1 + 8); + if ( v55 < *(_DWORD *)(a1 + 12) ) + goto LABEL_151; + } + else + { + v84 = *(_DWORD *)(*a6 - 12); + v89 = (std::string *)(v84 + 1); + if ( (unsigned int)(v84 + 1) > *(_DWORD *)(*a6 - 8) || *(int *)(*a6 - 4) > 0 ) + std::string::reserve(a6, v89, v64); + ++v80; + *(_BYTE *)(*a6 + *(_DWORD *)(*a6 - 12)) = 48; + v59 = *a6; + *(_DWORD *)(v59 - 12) = v89; + *(_DWORD *)(v59 - 4) = 0; + *(_BYTE *)(v59 + v84 + 1) = 0; + v54 = (_DWORD *)a1; + v55 = *(_DWORD *)(a1 + 8); + if ( v55 < *(_DWORD *)(a1 + 12) ) + { +LABEL_151: + v54[2] = v55 + 2; + WORD2(a1) = -1; + goto LABEL_152; + } + } + (*(void (__fastcall **)(_DWORD *))(*v54 + 40))(v54); + v54 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + v88 = 1; + goto LABEL_156; + } +LABEL_152: + v56 = (__int16 *)v54[2]; + if ( (unsigned int)v56 >= v54[3] ) + v57 = (*(int (__fastcall **)(_DWORD *))(*v54 + 36))(v54); + else + v57 = *v56; + v88 = 0; + if ( v57 == -1 ) + { + LODWORD(a1) = 0; + v88 = 1; + } +LABEL_156: + v58 = a3 == -1; + v83 = v58 & (a2 != 0); + if ( v83 ) + { + v60 = (_WORD *)a2[2]; + v61 = (unsigned int)v60 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v60; + v58 = 0; + if ( v61 == -1 ) + { + a2 = 0; + v58 = v83; + } + } + if ( v58 == v88 ) + { + v85 = 1; + v74 = 1; + goto LABEL_3; + } + lpuexcpt = WORD2(a1); + if ( WORD2(a1) == 0xFFFF && (_DWORD)a1 ) + { + v62 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v62 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v62; + if ( lpuexcpt == -1 ) + LODWORD(a1) = 0; + } + v52 = *((_BYTE *)v90 + 16); + } + } + } + if ( v52 && *((_WORD *)v90 + 19) == lpuexcpt || *((_WORD *)v90 + 18) == lpuexcpt ) + goto LABEL_144; + std::string::push_back(a6, (std::string *)(2 * (v51 != lpuexcpt) + 43), v64); + std::wstreambuf::sbumpc((_DWORD *)a1); + WORD2(a1) = -1; + v63 = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( !v63 ) + { + lpuexcpt = std::istreambuf_iterator::_M_get((int)&a1); + v52 = *((_BYTE *)v90 + 16); + goto LABEL_144; + } + v85 = 0; + v74 = v63; + v80 = 0; +LABEL_3: + v104[0] = (const char *)std::string::_S_construct(0, 0); + if ( *((_BYTE *)v90 + 16) ) + std::string::reserve((int *)v104, (std::string *)0x20, v65); + v70 = *((_BYTE *)v90 + 164); + if ( !v70 ) + { + if ( !v74 ) + { + v75 = 0; + v71 = 0; +LABEL_8: + if ( (unsigned __int16)(lpuexcpt - 48) <= 9u ) + { + v86 = lpuexcpt; + v81 = *(_DWORD *)(*a6 - 12); + lpuexcpta = (struct _Unwind_Exception *)(v81 + 1); + if ( (unsigned int)(v81 + 1) > *(_DWORD *)(*a6 - 8) || *(int *)(*a6 - 4) > 0 ) + std::string::reserve(a6, lpuexcpta, v65); + v6 = v86; + v85 = 1; + *(_BYTE *)(*a6 + *(_DWORD *)(*a6 - 12)) = v6; + v7 = *a6; + *(_DWORD *)(v7 - 4) = 0; + *(_DWORD *)(v7 - 12) = lpuexcpta; + *(_BYTE *)(v7 + v81 + 1) = 0; + goto LABEL_13; + } + while ( 1 ) + { + if ( *((_WORD *)v90 + 18) == lpuexcpt && !((unsigned __int8)v75 | (unsigned __int8)v71) ) + { + v71 = 1; + std::string::push_back(a6, (std::string *)0x2E, v65); + v75 = 0; +LABEL_13: + v8 = (_DWORD *)a1; + v9 = *(_DWORD *)(a1 + 8); + if ( v9 >= *(_DWORD *)(a1 + 12) ) + goto LABEL_78; +LABEL_14: + v8[2] = v9 + 2; + WORD2(a1) = -1; +LABEL_15: + v10 = (__int16 *)v8[2]; + if ( (unsigned int)v10 >= v8[3] ) + v11 = (*(int (__fastcall **)(_DWORD *))(*v8 + 36))(v8); + else + v11 = *v10; + lpuexcptb = 0; + if ( v11 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptb = 1; + } + goto LABEL_19; + } + if ( *((_WORD *)v90 + 74) != lpuexcpt && *((_WORD *)v90 + 80) != lpuexcpt ) + goto LABEL_21; + v85 &= v75 ^ 1; + if ( !v85 ) + goto LABEL_21; + std::string::push_back(a6, (std::string *)0x65, v65); + v27 = *(_DWORD *)(a1 + 8); + if ( v27 >= *(_DWORD *)(a1 + 12) ) + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + else + *(_DWORD *)(a1 + 8) = v27 + 2; + WORD2(a1) = -1; + if ( std::istreambuf_iterator::equal(&a1, (int)&a2) ) + goto LABEL_200; + v28 = std::istreambuf_iterator::_M_get((int)&a1); + lpuexcpt = v28; + if ( *((_WORD *)v90 + 57) == v28 ) + { + v29 = 43; + } + else + { + if ( *((_WORD *)v90 + 56) != v28 ) + { + v75 = v85; + goto LABEL_8; + } + v29 = 45; + } + std::string::push_back(a6, (std::string *)v29, v65); + v8 = (_DWORD *)a1; + v75 = v85; + v9 = *(_DWORD *)(a1 + 8); + if ( v9 < *(_DWORD *)(a1 + 12) ) + goto LABEL_14; +LABEL_78: + (*(void (__fastcall **)(_DWORD *))(*v8 + 40))(v8); + v8 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_15; + lpuexcptb = 1; +LABEL_19: + v12 = a3 == -1; + v82 = v12 & (a2 != 0); + if ( v82 ) + { + v39 = (_WORD *)a2[2]; + v40 = (unsigned int)v39 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v39; + v12 = 0; + if ( v40 == -1 ) + { + a2 = 0; + v12 = v82; + } + } + if ( lpuexcptb == v12 ) + goto LABEL_21; + lpuexcpt = WORD2(a1); + if ( WORD2(a1) != 0xFFFF || !(_DWORD)a1 ) + goto LABEL_8; + v26 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v26 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v26; + if ( lpuexcpt != -1 ) + goto LABEL_8; + LODWORD(a1) = 0; + } + } +LABEL_203: + lpuexcptc = (struct _Unwind_Exception *)v104[0]; + if ( *((_DWORD *)v104[0] - 3) ) + goto LABEL_25; + goto LABEL_28; + } + if ( v74 ) + goto LABEL_203; + v75 = 0; + v71 = 0; + v16 = *((_BYTE *)v90 + 16); + while ( 1 ) + { + if ( v16 && *((_WORD *)v90 + 19) == lpuexcpt ) + { + v71 |= v75; + if ( v71 ) + { + lpuexcptc = (struct _Unwind_Exception *)v104[0]; + v36 = *((_DWORD *)v104[0] - 3); +LABEL_197: + if ( v36 ) + goto LABEL_26; + goto LABEL_28; + } + if ( !v80 ) + { + std::string::_M_mutate((char **)a6, 0, *(_DWORD *)(*a6 - 12), 0, v66); + lpuexcptc = (struct _Unwind_Exception *)v104[0]; + if ( *((_DWORD *)v104[0] - 3) ) + goto LABEL_25; + goto LABEL_28; + } + v78 = (std::string *)*((_DWORD *)v104[0] - 3); + lpuexcpti = (std::string *)((char *)v78 + 1); + if ( (unsigned int)v78 + 1 > *((_DWORD *)v104[0] - 2) || *((int *)v104[0] - 1) > 0 ) + std::string::reserve((int *)v104, lpuexcpti, v65); + v41 = v80; + v80 = 0; + v104[0][*((_DWORD *)v104[0] - 3)] = v41; + v42 = v104[0]; + *((_DWORD *)v104[0] - 3) = lpuexcpti; + v43 = v78; + *((_DWORD *)v42 - 1) = 0; + v75 = 0; + *((_BYTE *)v43 + (_DWORD)v42 + 1) = 0; +LABEL_84: + v31 = (_DWORD *)a1; + v32 = *(_DWORD *)(a1 + 8); + if ( v32 < *(_DWORD *)(a1 + 12) ) + goto LABEL_85; + goto LABEL_105; + } + v17 = (char *)v90 + 120; + if ( *((_WORD *)v90 + 18) != lpuexcpt ) + { + do + { + if ( *(_WORD *)v17 == lpuexcpt ) + { + v87 = ((v17 - ((char *)v90 + 120)) >> 1) + 48; + v67 = *(_DWORD *)(*a6 - 12); + lpuexcptf = (struct _Unwind_Exception *)(v67 + 1); + if ( (unsigned int)(v67 + 1) > *(_DWORD *)(*a6 - 8) || *(int *)(*a6 - 4) > 0 ) + std::string::reserve(a6, lpuexcptf, v65); + ++v80; + *(_BYTE *)(*a6 + *(_DWORD *)(*a6 - 12)) = v87; + v30 = *a6; + *(_DWORD *)(v30 - 12) = lpuexcptf; + *(_DWORD *)(v30 - 4) = 0; + *(_BYTE *)(v30 + v67 + 1) = 0; + v85 = v70; + goto LABEL_84; + } + v17 += 2; + } + while ( v17 != (char *)v90 + 140 ); + if ( *((_WORD *)v90 + 74) != lpuexcpt && *((_WORD *)v90 + 80) != lpuexcpt ) + break; + v18 = (((unsigned __int8)v75 ^ 1) & (unsigned __int8)v85) == 0; + v85 &= v75 ^ 1; + lpuexcptc = (struct _Unwind_Exception *)v104[0]; + v13 = *((_DWORD *)v104[0] - 3); + if ( v18 ) + goto LABEL_22; + if ( v13 && !v71 ) + std::string::push_back((int *)v104, (std::string *)(char)v80, v65); + v76 = *(std::string **)(*a6 - 12); + lpuexcptd = (std::string *)((char *)v76 + 1); + if ( (unsigned int)v76 + 1 > *(_DWORD *)(*a6 - 8) || *(int *)(*a6 - 4) > 0 ) + std::string::reserve(a6, lpuexcptd, v65); + *(_BYTE *)(*a6 + *(_DWORD *)(*a6 - 12)) = 101; + v19 = *a6; + *(_DWORD *)(v19 - 12) = lpuexcptd; + *(_DWORD *)(v19 - 4) = 0; + *((_BYTE *)v76 + v19 + 1) = 0; + v20 = (_DWORD *)a1; + v21 = *(_DWORD *)(a1 + 8); + if ( v21 >= *(_DWORD *)(a1 + 12) ) + { + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v20 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( (_DWORD)a1 ) + goto LABEL_49; + lpuexcpte = v85; + } + else + { + *(_DWORD *)(a1 + 8) = v21 + 2; + WORD2(a1) = -1; +LABEL_49: + v22 = (__int16 *)v20[2]; + if ( (unsigned int)v22 >= v20[3] ) + v23 = (*(int (__fastcall **)(_DWORD *))(*v20 + 36))(v20); + else + v23 = *v22; + lpuexcpte = 0; + if ( v23 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpte = v85; + } + } + v24 = a3 == -1; + v77 = v24 & (a2 != 0); + if ( v77 ) + { + v48 = (_WORD *)a2[2]; + v49 = (unsigned int)v48 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v48; + v24 = 0; + if ( v49 == -1 ) + { + a2 = 0; + v24 = v77; + } + } + if ( v24 == lpuexcpte ) + { +LABEL_200: + lpuexcptc = (struct _Unwind_Exception *)v104[0]; + if ( *((_DWORD *)v104[0] - 3) ) + goto LABEL_26; + goto LABEL_28; + } + lpuexcpt = WORD2(a1); + if ( WORD2(a1) == 0xFFFF && (_DWORD)a1 ) + { + v50 = *(_WORD **)(a1 + 8); + lpuexcpt = (unsigned int)v50 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v50; + if ( lpuexcpt == -1 ) + LODWORD(a1) = 0; + } + v25 = *((_WORD *)v90 + 57); + v16 = *((_BYTE *)v90 + 16); + if ( v25 != lpuexcpt && *((_WORD *)v90 + 56) != lpuexcpt ) + goto LABEL_59; + if ( v16 && *((_WORD *)v90 + 19) == lpuexcpt ) + { + v75 = *((_BYTE *)v90 + 16); + v85 = v75; + continue; + } + if ( *((_WORD *)v90 + 18) == lpuexcpt ) + { +LABEL_59: + v75 = v85; + continue; + } + lpuexcptj = 2 * (v25 != lpuexcpt) + 43; + v69 = *(_DWORD *)(*a6 - 12); + v79 = (std::string *)(v69 + 1); + if ( (unsigned int)(v69 + 1) > *(_DWORD *)(*a6 - 8) || *(int *)(*a6 - 4) > 0 ) + std::string::reserve(a6, v79, v65); + *(_BYTE *)(*a6 + *(_DWORD *)(*a6 - 12)) = lpuexcptj; + v44 = *a6; + *(_DWORD *)(v44 - 12) = v79; + *(_DWORD *)(v44 - 4) = 0; + *(_BYTE *)(v44 + v69 + 1) = 0; + v75 = v85; + goto LABEL_84; + } + v18 = ((unsigned __int8)v71 | (unsigned __int8)v75) == 0; + v75 |= v71; + lpuexcptc = (struct _Unwind_Exception *)v104[0]; + v36 = *((_DWORD *)v104[0] - 3); + if ( !v18 ) + goto LABEL_197; + if ( v36 ) + { + v72 = (std::string *)(v36 + 1); + if ( (unsigned int)(v36 + 1) > *((_DWORD *)v104[0] - 2) || *((int *)v104[0] - 1) > 0 ) + std::string::reserve((int *)v104, v72, v65); + v104[0][*((_DWORD *)v104[0] - 3)] = v80; + v37 = v104[0]; + *((_DWORD *)v104[0] - 1) = 0; + *((_DWORD *)v37 - 3) = v72; + *((_BYTE *)v72 + (_DWORD)v37) = 0; + } + v73 = *(std::string **)(*a6 - 12); + lpuexcpth = (std::string *)((char *)v73 + 1); + if ( (unsigned int)v73 + 1 > *(_DWORD *)(*a6 - 8) || *(int *)(*a6 - 4) > 0 ) + std::string::reserve(a6, lpuexcpth, v65); + *(_BYTE *)(*a6 + *(_DWORD *)(*a6 - 12)) = 46; + v38 = *a6; + *(_DWORD *)(v38 - 12) = lpuexcpth; + *(_DWORD *)(v38 - 4) = 0; + *((_BYTE *)v73 + v38 + 1) = 0; + v31 = (_DWORD *)a1; + v71 = v70; + v32 = *(_DWORD *)(a1 + 8); + if ( v32 < *(_DWORD *)(a1 + 12) ) + { +LABEL_85: + v31[2] = v32 + 2; + WORD2(a1) = -1; + goto LABEL_86; + } +LABEL_105: + (*(void (__fastcall **)(_DWORD *))(*v31 + 40))(v31); + v31 = (_DWORD *)a1; + WORD2(a1) = -1; + if ( !(_DWORD)a1 ) + { + lpuexcptg = v70; + goto LABEL_90; + } +LABEL_86: + v33 = (__int16 *)v31[2]; + if ( (unsigned int)v33 >= v31[3] ) + v34 = (*(int (__fastcall **)(_DWORD *))(*v31 + 36))(v31); + else + v34 = *v33; + lpuexcptg = 0; + if ( v34 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptg = v70; + } +LABEL_90: + v35 = a3 == -1; + v68 = v35 & (a2 != 0); + if ( v68 ) + { + v45 = (_WORD *)a2[2]; + v46 = (unsigned int)v45 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v45; + v35 = 0; + if ( v46 == -1 ) + { + a2 = 0; + v35 = v68; + } + } + if ( lpuexcptg == v35 ) + break; + lpuexcpt = WORD2(a1); + if ( WORD2(a1) == 0xFFFF && (_DWORD)a1 ) + { + v47 = *(__int16 **)(a1 + 8); + if ( (unsigned int)v47 >= *(_DWORD *)(a1 + 12) ) + lpuexcpt = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + else + lpuexcpt = *v47; + v16 = *((_BYTE *)v90 + 16); + if ( lpuexcpt == -1 ) + LODWORD(a1) = 0; + } + else + { + v16 = *((_BYTE *)v90 + 16); + } + } +LABEL_21: + lpuexcptc = (struct _Unwind_Exception *)v104[0]; + v13 = *((_DWORD *)v104[0] - 3); +LABEL_22: + if ( !v13 ) + goto LABEL_28; + if ( v71 || v75 ) + goto LABEL_26; +LABEL_25: + std::string::push_back((int *)v104, (std::string *)(char)v80, v65); + lpuexcptc = (struct _Unwind_Exception *)v104[0]; +LABEL_26: + if ( !(unsigned __int8)std::__verify_grouping(*((char **)v90 + 2), *((_DWORD *)v90 + 3), v104) ) + *a5 = 4; +LABEL_28: + v91 = a1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)lpuexcptc - 1, 0xFFFFFFFF) > 0 ) + return v91; +LABEL_141: + std::string::_Rep::_M_destroy((char *)lpuexcptc - 12, (int)&v103); + return v91; + } + v14 = *((_DWORD *)lpuexcptc - 1); + *((_DWORD *)lpuexcptc - 1) = v14 - 1; + if ( v14 <= 0 ) + goto LABEL_141; + return v91; +} +// 4B1644: variable 'v65' is possibly undefined +// 4B1765: variable 'v64' is possibly undefined +// 4B1B06: variable 'v66' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004B1B80) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int *a7) +{ + int (__stdcall *v7)(__int64, _DWORD *, __int16, int, _DWORD *, _DWORD *); // eax + int v8; // edi + int result; // eax + int v10; // ecx + int v11[8]; // [esp+4Ch] [ebp-20h] BYREF + + v7 = *(int (__stdcall **)(__int64, _DWORD *, __int16, int, _DWORD *, _DWORD *))(*(_DWORD *)this + 48); + if ( v7 != std::num_get>::do_get ) + return ((int (__stdcall *)(_DWORD, _DWORD, _DWORD *, int, int, _DWORD *, int *))v7)( + a2, + HIDWORD(a2), + a3, + a4, + a5, + a6, + a7); + v8 = *(_DWORD *)(a5 + 12); + *(_DWORD *)(a5 + 12) = v8 & 0xFFFFFFB5 | 8; + result = std::num_get>::_M_extract_int( + a2, + a3, + a4, + a5, + a6, + v11); + v10 = v11[0]; + *(_DWORD *)(a5 + 12) = v8; + *a7 = v10; + return result; +} +// 4B1B80: using guessed type int var_20[8]; + +//----- (004B1C50) -------------------------------------------------------- +int __fastcall std::num_get>::get(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 8))(a1); +} + +//----- (004B1C60) -------------------------------------------------------- +int __fastcall std::num_get>::get(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 40))(a1); +} + +//----- (004B1C70) -------------------------------------------------------- +int __fastcall std::num_get>::get(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 44))(a1); +} + +//----- (004B1C80) -------------------------------------------------------- +int __fastcall std::num_get>::get(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 36))(a1); +} + +//----- (004B1C90) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int *a7) +{ + int (__stdcall *v7)(int, int, int, int, int, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, int, int, int, int, int))(*(_DWORD *)this + 20); + if ( v7 == std::num_get>::do_get ) + return std::num_get>::_M_extract_int(a2, a3, a4, a5, a6, a7); + else + return v7(a2, HIDWORD(a2), (int)a3, a4, a5, (int)a6, (int)a7); +} +// 4B2BA0: using guessed type int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); + +//----- (004B1D10) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int *a7) +{ + int (__stdcall *v7)(int, int, int, int, int, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, int, int, int, int, int))(*(_DWORD *)this + 12); + if ( v7 == std::num_get>::do_get ) + return std::num_get>::_M_extract_int(a2, a3, a4, a5, a6, a7); + else + return v7(a2, HIDWORD(a2), (int)a3, a4, a5, (int)a6, (int)a7); +} +// 4B2BB0: using guessed type int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); + +//----- (004B1D90) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int *a7) +{ + int (__stdcall *v7)(int, int, int, int, int, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, int, int, int, int, int))(*(_DWORD *)this + 24); + if ( v7 == std::num_get>::do_get ) + return std::num_get>::_M_extract_int( + a2, + a3, + a4, + a5, + a6, + a7); + else + return v7(a2, HIDWORD(a2), (int)a3, a4, a5, (int)a6, (int)a7); +} +// 4B2BC0: using guessed type int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); + +//----- (004B1E10) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _WORD *a7) +{ + int (__stdcall *v7)(int, int, int, int, int, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, int, int, int, int, int))(*(_DWORD *)this + 16); + if ( v7 == std::num_get>::do_get ) + return std::num_get>::_M_extract_int( + a2, + a3, + a4, + a5, + a6, + a7); + else + return v7(a2, HIDWORD(a2), (int)a3, a4, a5, (int)a6, (int)a7); +} +// 4B2BD0: using guessed type int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); + +//----- (004B1E90) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + int (__stdcall *v7)(int, int, int, int, int, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, int, int, int, int, int))(*(_DWORD *)this + 28); + if ( v7 == std::num_get>::do_get ) + return std::num_get>::_M_extract_int(a2, a3, a4, a5, a6, a7); + else + return v7(a2, HIDWORD(a2), (int)a3, a4, a5, (int)a6, (int)a7); +} +// 4B2BE0: using guessed type int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); + +//----- (004B1F10) -------------------------------------------------------- +int __thiscall std::num_get>::get( + void *this, + __int64 a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7) +{ + int (__stdcall *v7)(int, int, int, int, int, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, int, int, int, int, int))(*(_DWORD *)this + 32); + if ( v7 == std::num_get>::do_get ) + return std::num_get>::_M_extract_int( + a2, + a3, + a4, + a5, + a6, + a7); + else + return v7(a2, HIDWORD(a2), (int)a3, a4, a5, (int)a6, (int)a7); +} +// 4B2BF0: using guessed type int __stdcall std::num_get>::do_get(int, int, int, int, int, int, int); + +//----- (004B1F90) -------------------------------------------------------- +int __stdcall std::num_get>::do_get( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + _DWORD *a5, + _DWORD *a6) +{ + int v6; // edi + int result; // eax + int v8[8]; // [esp+3Ch] [ebp-20h] BYREF + + v6 = *(_DWORD *)(a4 + 12); + *(_DWORD *)(a4 + 12) = v6 & 0xFFFFFFB5 | 8; + result = std::num_get>::_M_extract_int( + a1, + a2, + a3, + a4, + a5, + v8); + *(_DWORD *)(a4 + 12) = v6; + *a6 = v8[0]; + return result; +} +// 4B1F90: using guessed type int var_20[8]; + +//----- (004B2030) -------------------------------------------------------- +__int64 __stdcall std::num_get>::do_get( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + int *a5, + _BYTE *a6) +{ + _BYTE *v6; // edx + struct _Unwind_Exception *v8; // eax + int v9; // ecx + struct _Unwind_Exception *v10; // esi + int v11; // eax + bool v12; // dl + __int16 v13; // ax + unsigned int v14; // ebp + char v15; // di + unsigned int v16; // eax + bool v17; // cl + char v18; // si + char v19; // di + char v20; // al + char v21; // di + unsigned __int16 v22; // ax + __int16 *v23; // eax + __int16 v24; // cx + bool v25; // bl + struct _Unwind_Exception *v26; // esi + char v27; // dl + __int16 *v28; // eax + __int16 v29; // ax + unsigned __int16 *v30; // eax + int v31; // eax + __int16 v32; // ax + struct _Unwind_Exception *v33; // [esp+20h] [ebp-3Ch] + bool v34; // [esp+24h] [ebp-38h] + bool v35; // [esp+25h] [ebp-37h] + char v36; // [esp+26h] [ebp-36h] + bool v37; // [esp+27h] [ebp-35h] + bool v38; // [esp+27h] [ebp-35h] + bool v39; // [esp+27h] [ebp-35h] + __int64 v40; // [esp+28h] [ebp-34h] + unsigned int v41[8]; // [esp+3Ch] [ebp-20h] BYREF + + if ( (*(_BYTE *)(a4 + 12) & 1) == 0 ) + { + v41[0] = -1; + v40 = std::num_get>::_M_extract_int(a1, a2, a3, a4, a5, (int *)v41); + LODWORD(a1) = v40; + WORD2(a1) = WORD2(v40); + if ( v41[0] > 1 ) + { + *a6 = 1; + *a5 = 4; + if ( std::istreambuf_iterator::equal(&a1, (int)&a2) ) + *a5 |= 2u; + } + else + { + v6 = a6; + *a6 = v41[0]; + *v6 &= 1u; + } + return a1; + } + v8 = std::__use_cache>::operator()((int *)(a4 + 108)); + v9 = *((_DWORD *)v8 + 8); + v10 = v8; + v11 = *((_DWORD *)v8 + 6); + v12 = v9 == 0; + v35 = v11 == 0; + if ( !(v11 | v9) ) + goto LABEL_55; + v33 = v10; + v13 = WORD2(a1); + v14 = 0; + v36 = 1; + v34 = 1; + while ( 1 ) + { + v18 = v13 == -1; + v19 = v18 & ((_DWORD)a1 != 0); + if ( v19 ) + { + v28 = *(__int16 **)(a1 + 8); + if ( (unsigned int)v28 >= *(_DWORD *)(a1 + 12) ) + { + v38 = v12; + v29 = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 36))(a1); + v12 = v38; + } + else + { + v29 = *v28; + } + v18 = 0; + if ( v29 == -1 ) + { + LODWORD(a1) = 0; + v18 = v19; + } + } + v20 = a3 == -1; + v21 = v20 & (a2 != 0); + if ( v21 ) + { + v23 = (__int16 *)a2[2]; + if ( (unsigned int)v23 >= a2[3] ) + { + v37 = v12; + v32 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + v12 = v37; + v24 = v32; + } + else + { + v24 = *v23; + } + v20 = 0; + if ( v24 == -1 ) + break; + } + if ( v18 == v20 ) + goto LABEL_35; +LABEL_20: + v22 = WORD2(a1); + if ( WORD2(a1) == 0xFFFF && (_DWORD)a1 ) + { + v30 = *(unsigned __int16 **)(a1 + 8); + if ( (unsigned int)v30 >= *(_DWORD *)(a1 + 12) ) + { + v39 = v12; + v22 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + v12 = v39; + } + else + { + v22 = *v30; + } + if ( v22 == 0xFFFF ) + LODWORD(a1) = 0; + } + if ( !v12 ) + v34 = *(_WORD *)(*((_DWORD *)v33 + 7) + 2 * v14) == v22; + if ( !v34 ) + { + if ( v35 ) + { + if ( v36 ) + { + if ( *((_DWORD *)v33 + 6) == v14 && v14 ) + { + *a6 = 1; + v31 = 0; +LABEL_68: + *a5 = v31; + return a1; + } +LABEL_55: + *a6 = 0; + goto LABEL_56; + } +LABEL_57: + *a6 = 0; + *a5 = 4; + return a1; + } +LABEL_8: + v36 = *(_WORD *)(*((_DWORD *)v33 + 5) + 2 * v14) == v22; + goto LABEL_9; + } + if ( !v35 ) + goto LABEL_8; +LABEL_9: + v15 = v12 & (v36 ^ 1); + if ( v15 ) + { + if ( v34 ) + { + if ( *((_DWORD *)v33 + 8) == v14 && v14 ) + { + *a6 = 0; + v31 = 0; + goto LABEL_68; + } + goto LABEL_55; + } + goto LABEL_57; + } + if ( !(v34 | (unsigned __int8)v36) ) + goto LABEL_57; + ++v14; + v16 = *(_DWORD *)(a1 + 8); + if ( v16 >= *(_DWORD *)(a1 + 12) ) + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + else + *(_DWORD *)(a1 + 8) = v16 + 2; + WORD2(a1) = -1; + if ( !v34 ) + { + v12 = v36; +LABEL_30: + v35 = *((_DWORD *)v33 + 6) <= v14; + v36 |= v34; + v17 = v12 && v35; + goto LABEL_16; + } + v12 = *((_DWORD *)v33 + 8) <= v14; + if ( v36 ) + goto LABEL_30; + v17 = *((_DWORD *)v33 + 8) <= v14; + v35 = v34; +LABEL_16: + v13 = -1; + if ( v17 ) + { + v25 = v34; + v26 = v33; + v27 = v15; + goto LABEL_36; + } + } + a2 = 0; + if ( v18 != v21 ) + goto LABEL_20; +LABEL_35: + v25 = v34; + v26 = v33; + v27 = 1; +LABEL_36: + if ( v25 && *((_DWORD *)v26 + 8) == v14 && v14 ) + { + *a6 = 0; + if ( !v36 || *((_DWORD *)v26 + 6) != v14 ) + goto LABEL_71; +LABEL_56: + *a5 = 4; + return a1; + } + if ( v36 && *((_DWORD *)v26 + 6) == v14 && v14 ) + { + *a6 = 1; +LABEL_71: + v31 = 2 * (v27 != 0); + goto LABEL_68; + } + *a6 = 0; + if ( !v27 ) + goto LABEL_56; + *a5 = 6; + return a1; +} +// 4B2030: using guessed type unsigned int var_20[8]; + +//----- (004B24B0) -------------------------------------------------------- +std::locale::facet *__stdcall std::num_get>::do_get( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + _DWORD *a5, + double *a6) +{ + __int64 v6; // rax + char v7; // dl + int v8; // ecx + int v9; // eax + __int16 *v11; // eax + __int16 v12; // ax + __int16 *v13; // eax + __int16 v14; // ax + unsigned __int8 v15; // dl + bool v16; // zf + std::locale::facet *v17; // eax + unsigned int v18; // [esp+4h] [ebp-94h] + std::locale::facet *v19; // [esp+30h] [ebp-68h] + std::locale::facet *v20; // [esp+38h] [ebp-60h] + __int16 lpuexcpta; // [esp+40h] [ebp-58h] + unsigned __int8 lpuexcpt; // [esp+40h] [ebp-58h] + int v23; // [esp+88h] [ebp-10h] BYREF + int v24[3]; // [esp+8Ch] [ebp-Ch] BYREF + + v23 = (int)std::string::_S_construct(0, 0); + std::string::reserve(&v23, (std::string *)0x20, v18); + v6 = std::num_get>::_M_extract_float(a1, a2, a3, a4, a5, &v23); + lpuexcpta = WORD2(v6); + v20 = (std::locale::facet *)v6; + v19 = (std::locale::facet *)v6; + v24[0] = std::locale::facet::_S_get_c_locale(); + std::__convert_to_v((unsigned __int8 *)v23, a6, a5); + lpuexcpt = lpuexcpta == -1; + if ( (lpuexcpt & (v19 != 0)) != 0 ) + { + v13 = (__int16 *)*((_DWORD *)v20 + 2); + if ( (unsigned int)v13 >= *((_DWORD *)v20 + 3) ) + v14 = (*(int (__fastcall **)(std::locale::facet *))(*(_DWORD *)v20 + 36))(v20); + else + v14 = *v13; + v15 = lpuexcpt & (v20 != 0); + v16 = v14 == -1; + if ( v14 != -1 ) + v15 = 0; + v17 = 0; + if ( !v16 ) + v17 = v20; + lpuexcpt = v15; + v19 = v17; + } + v7 = a3 == -1; + if ( a2 && a3 == -1 ) + { + v11 = (__int16 *)a2[2]; + if ( (unsigned int)v11 >= a2[3] ) + v12 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + else + v12 = *v11; + v7 = v12 == -1; + } + if ( lpuexcpt == v7 ) + *a5 |= 2u; + v8 = v23; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v23 - 4), 0xFFFFFFFF) > 0 ) + return v19; +LABEL_10: + std::string::_Rep::_M_destroy((void *)(v8 - 12), (int)v24); + return v19; + } + v9 = *(_DWORD *)(v23 - 4); + *(_DWORD *)(v23 - 4) = v9 - 1; + if ( v9 <= 0 ) + goto LABEL_10; + return v19; +} +// 4B2530: variable 'v18' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 4B24B0: using guessed type int var_C[3]; + +//----- (004B2700) -------------------------------------------------------- +std::locale::facet *__stdcall std::num_get>::do_get( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + _DWORD *a5, + long double *a6) +{ + __int64 v6; // rax + char v7; // dl + char *v8; // ecx + int v9; // eax + __int16 *v11; // eax + __int16 v12; // ax + __int16 *v13; // eax + __int16 v14; // ax + unsigned __int8 v15; // dl + bool v16; // zf + std::locale::facet *v17; // eax + unsigned int v18; // [esp+4h] [ebp-94h] + std::locale::facet *v19; // [esp+30h] [ebp-68h] + std::locale::facet *v20; // [esp+38h] [ebp-60h] + __int16 lpuexcpta; // [esp+40h] [ebp-58h] + unsigned __int8 lpuexcpt; // [esp+40h] [ebp-58h] + char *String; // [esp+88h] [ebp-10h] BYREF + int v24[3]; // [esp+8Ch] [ebp-Ch] BYREF + + String = (char *)std::string::_S_construct(0, 0); + std::string::reserve((int *)&String, (std::string *)0x20, v18); + v6 = std::num_get>::_M_extract_float(a1, a2, a3, a4, a5, (int *)&String); + lpuexcpta = WORD2(v6); + v20 = (std::locale::facet *)v6; + v19 = (std::locale::facet *)v6; + v24[0] = std::locale::facet::_S_get_c_locale(); + std::__convert_to_v(String, a6, a5); + lpuexcpt = lpuexcpta == -1; + if ( (lpuexcpt & (v19 != 0)) != 0 ) + { + v13 = (__int16 *)*((_DWORD *)v20 + 2); + if ( (unsigned int)v13 >= *((_DWORD *)v20 + 3) ) + v14 = (*(int (__fastcall **)(std::locale::facet *))(*(_DWORD *)v20 + 36))(v20); + else + v14 = *v13; + v15 = lpuexcpt & (v20 != 0); + v16 = v14 == -1; + if ( v14 != -1 ) + v15 = 0; + v17 = 0; + if ( !v16 ) + v17 = v20; + lpuexcpt = v15; + v19 = v17; + } + v7 = a3 == -1; + if ( a2 && a3 == -1 ) + { + v11 = (__int16 *)a2[2]; + if ( (unsigned int)v11 >= a2[3] ) + v12 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + else + v12 = *v11; + v7 = v12 == -1; + } + if ( lpuexcpt == v7 ) + *a5 |= 2u; + v8 = String; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)String - 1, 0xFFFFFFFF) > 0 ) + return v19; +LABEL_10: + std::string::_Rep::_M_destroy(v8 - 12, (int)v24); + return v19; + } + v9 = *((_DWORD *)String - 1); + *((_DWORD *)String - 1) = v9 - 1; + if ( v9 <= 0 ) + goto LABEL_10; + return v19; +} +// 4B2780: variable 'v18' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 4B2700: using guessed type int var_C[3]; + +//----- (004B2950) -------------------------------------------------------- +std::locale::facet *__stdcall std::num_get>::do_get( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + _DWORD *a5, + float *a6) +{ + __int64 v6; // rax + char v7; // dl + int v8; // ecx + int v9; // eax + __int16 *v11; // eax + __int16 v12; // ax + __int16 *v13; // eax + __int16 v14; // ax + unsigned __int8 v15; // dl + bool v16; // zf + std::locale::facet *v17; // eax + unsigned int v18; // [esp+4h] [ebp-94h] + std::locale::facet *v19; // [esp+30h] [ebp-68h] + std::locale::facet *v20; // [esp+38h] [ebp-60h] + __int16 lpuexcpta; // [esp+40h] [ebp-58h] + unsigned __int8 lpuexcpt; // [esp+40h] [ebp-58h] + int v23; // [esp+88h] [ebp-10h] BYREF + int v24[3]; // [esp+8Ch] [ebp-Ch] BYREF + + v23 = (int)std::string::_S_construct(0, 0); + std::string::reserve(&v23, (std::string *)0x20, v18); + v6 = std::num_get>::_M_extract_float(a1, a2, a3, a4, a5, &v23); + lpuexcpta = WORD2(v6); + v20 = (std::locale::facet *)v6; + v19 = (std::locale::facet *)v6; + v24[0] = std::locale::facet::_S_get_c_locale(); + std::__convert_to_v((unsigned __int8 *)v23, a6, a5); + lpuexcpt = lpuexcpta == -1; + if ( (lpuexcpt & (v19 != 0)) != 0 ) + { + v13 = (__int16 *)*((_DWORD *)v20 + 2); + if ( (unsigned int)v13 >= *((_DWORD *)v20 + 3) ) + v14 = (*(int (__fastcall **)(std::locale::facet *))(*(_DWORD *)v20 + 36))(v20); + else + v14 = *v13; + v15 = lpuexcpt & (v20 != 0); + v16 = v14 == -1; + if ( v14 != -1 ) + v15 = 0; + v17 = 0; + if ( !v16 ) + v17 = v20; + lpuexcpt = v15; + v19 = v17; + } + v7 = a3 == -1; + if ( a2 && a3 == -1 ) + { + v11 = (__int16 *)a2[2]; + if ( (unsigned int)v11 >= a2[3] ) + v12 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + else + v12 = *v11; + v7 = v12 == -1; + } + if ( lpuexcpt == v7 ) + *a5 |= 2u; + v8 = v23; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v23 - 4), 0xFFFFFFFF) > 0 ) + return v19; +LABEL_10: + std::string::_Rep::_M_destroy((void *)(v8 - 12), (int)v24); + return v19; + } + v9 = *(_DWORD *)(v23 - 4); + *(_DWORD *)(v23 - 4) = v9 - 1; + if ( v9 <= 0 ) + goto LABEL_10; + return v19; +} +// 4B29D0: variable 'v18' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 4B2950: using guessed type int var_C[3]; + +//----- (004B2C00) -------------------------------------------------------- +_BYTE *__stdcall std::num_put>::_M_group_int( + char *a1, + int a2, + char a3, + int a4, + _BYTE *a5, + _BYTE *a6, + _DWORD *a7) +{ + _BYTE *result; // eax + + result = (_BYTE *)(std::__add_grouping(a5, a3, a1, a2, a6, &a6[*a7]) - a5); + *a7 = result; + return result; +} + +//----- (004B2C50) -------------------------------------------------------- +int __stdcall std::num_put>::_M_insert_int( + int a1, + int a2, + int *a3, + int a4, + int a5) +{ + struct _Unwind_Exception *v5; // esi + void *v6; // esp + void *v7; // esp + unsigned int v8; // eax + int v9; // eax + int v10; // ebx + char *v11; // edx + int v12; // esi + int v14; // eax + void *v15; // esp + void *v16; // esp + int v17; // eax + void *v18; // esp + void *v19; // esp + char *v20; // eax + _BYTE *v21; // eax + char v22; // al + int v23; // [esp-14h] [ebp-7Ch] + int v24; // [esp-Ch] [ebp-74h] + char v25[2]; // [esp+0h] [ebp-68h] BYREF + _BYTE v26[18]; // [esp+2h] [ebp-66h] BYREF + char v27[20]; // [esp+14h] [ebp-54h] BYREF + unsigned int v28; // [esp+28h] [ebp-40h] + int v29; // [esp+2Ch] [ebp-3Ch] + char *v30; // [esp+30h] [ebp-38h] + int v31; // [esp+34h] [ebp-34h] + unsigned int v32; // [esp+38h] [ebp-30h] + char *v33; // [esp+3Ch] [ebp-2Ch] + + v31 = a2; + v29 = a4; + v5 = std::__use_cache>::operator()(a3 + 27); + v33 = (char *)v5 + 38; + v32 = a3[3]; + v6 = alloca(32); + v7 = alloca(32); + v28 = v32 & 0x4A; + v8 = a5; + LOBYTE(v33) = v28 != 8 && v28 != 64; + if ( a5 <= 0 ) + { + v8 = -a5; + if ( v28 == 8 || v28 == 64 ) + v8 = a5; + } + v30 = v25; + v9 = std::__int_to_char(v27, v8, (int)v5 + 38, v32, (char)v33); + v10 = v9; + v11 = &v30[-v9 + 20]; + if ( !*((_BYTE *)v5 + 16) ) + { + if ( (_BYTE)v33 ) + goto LABEL_6; +LABEL_16: + if ( (v32 & 0x200) != 0 && a5 ) + { + if ( v28 == 64 ) + { + v22 = *((_BYTE *)v5 + 42); + ++v10; + --v11; + } + else + { + v10 += 2; + v11 -= 2; + v11[1] = *((_BYTE *)v5 + ((v32 >> 14) & 1) + 40); + v22 = *((_BYTE *)v5 + 42); + } + *v11 = v22; + } + goto LABEL_8; + } + v17 = 16 * ((unsigned int)(2 * v9 + 29) >> 4); + v18 = alloca(v17); + v19 = alloca(v17); + v23 = *((_DWORD *)v5 + 3); + v20 = (char *)*((_DWORD *)v5 + 2); + v30 = v26; + v21 = std::__add_grouping(v26, *((_BYTE *)v5 + 37), v20, v23, v11, &v11[v10]); + v11 = v30; + v10 = v21 - v30; + if ( !(_BYTE)v33 ) + goto LABEL_16; +LABEL_6: + if ( a5 < 0 ) + { + ++v10; + *--v11 = *((_BYTE *)v5 + 38); + } + else if ( (v32 & 0x800) != 0 ) + { + ++v10; + *--v11 = *((_BYTE *)v5 + 39); + v12 = a3[2]; + if ( v12 <= v10 ) + goto LABEL_9; + goto LABEL_13; + } +LABEL_8: + v12 = a3[2]; + if ( v12 <= v10 ) + goto LABEL_9; +LABEL_13: + v14 = 16 * ((unsigned int)(v12 + 27) >> 4); + v15 = alloca(v14); + v16 = alloca(v14); + v24 = v10; + v10 = v12; + v33 = v25; + std::__pad>::_S_pad(a3, (void *)(char)v29, v25, v11, v12, v24); + v11 = v33; +LABEL_9: + a3[2] = 0; + if ( !(_BYTE)v31 ) + (*(int (__thiscall **)(int, char *, int))(*(_DWORD *)a1 + 48))(a1, v11, v10); + return a1; +} +// 4B2C50: using guessed type char anonymous_0[20]; + +//----- (004B2EA0) -------------------------------------------------------- +int __stdcall std::num_put>::_M_insert_int( + int a1, + int a2, + _DWORD *a3, + int a4, + int a5) +{ + unsigned int v5; // ecx + void *v6; // esp + void *v7; // esp + struct _Unwind_Exception *v8; // edx + int v9; // eax + char v10; // bl + struct _Unwind_Exception *v11; // eax + char v12; // si + int v14; // eax + void *v15; // esp + void *v16; // esp + int v17; // eax + _BYTE *v18; // eax + int v19; // esi + int v20; // eax + void *v21; // esp + void *v22; // esp + _DWORD *v23; // eax + char v24[2]; // [esp+0h] [ebp-88h] BYREF + _BYTE v25[6]; // [esp+2h] [ebp-86h] BYREF + unsigned int v26; // [esp+8h] [ebp-80h] + char v27[16]; // [esp+14h] [ebp-74h] BYREF + int v28; // [esp+24h] [ebp-64h] + unsigned int v29; // [esp+28h] [ebp-60h] + unsigned int v30; // [esp+2Ch] [ebp-5Ch] + int v31; // [esp+30h] [ebp-58h] + int v32; // [esp+34h] [ebp-54h] + std::locale::_Impl *v33; // [esp+38h] [ebp-50h] + int *v34; // [esp+3Ch] [ebp-4Ch] + int v35; // [esp+40h] [ebp-48h] + int v36; // [esp+44h] [ebp-44h] + struct _Unwind_Exception *lpuexcpt; // [esp+48h] [ebp-40h] + + v35 = a1; + v32 = a2; + v31 = a4; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v34 = (int *)(*(_DWORD *)(a3[27] + 12) + 4 * (_DWORD)lpuexcpt); + v36 = *v34; + if ( !v36 ) + { + v23 = operator new(0x68u); + v23[1] = 0; + *v23 = &off_5605B0; + v23[2] = 0; + v23[3] = 0; + *((_BYTE *)v23 + 16) = 0; + v23[5] = 0; + v23[6] = 0; + v23[7] = 0; + v23[8] = 0; + *((_WORD *)v23 + 18) = 0; + *((_BYTE *)v23 + 100) = 0; + v33 = (std::locale::_Impl *)v23; + std::__numpunct_cache::_M_cache((int)v23, (int)(a3 + 27)); + std::locale::_Impl::_M_install_cache(a3[27], v33, lpuexcpt, v26); + v36 = *v34; + } + v5 = a3[3]; + v28 = v36 + 38; + v30 = v5; + v6 = alloca(32); + v7 = alloca(32); + v33 = (std::locale::_Impl *)v24; + v29 = v5 & 0x4A; + LOBYTE(v34) = v29 != 8 && v29 != 64; + lpuexcpt = (struct _Unwind_Exception *)std::__int_to_char(v27, a5, v36 + 38, v5, (char)v34); + v8 = (struct _Unwind_Exception *)(v33 - lpuexcpt + 20); + if ( *(_BYTE *)(v36 + 16) ) + { + v14 = 16 * ((unsigned int)(2 * (_DWORD)lpuexcpt + 29) >> 4); + v15 = alloca(v14); + v16 = alloca(v14); + v17 = *(_DWORD *)(v36 + 12); + lpuexcpt = (struct _Unwind_Exception *)v25; + v18 = std::__add_grouping(v25, *(_BYTE *)(v36 + 37), *(char **)(v36 + 8), v17, v8, (_BYTE *)v33 + 20); + v8 = lpuexcpt; + lpuexcpt = (struct _Unwind_Exception *)(v18 - (_BYTE *)lpuexcpt); + if ( (_BYTE)v34 ) + goto LABEL_5; + } + else if ( (_BYTE)v34 ) + { + goto LABEL_5; + } + if ( (v30 & 0x200) != 0 && a5 ) + { + if ( v29 == 64 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v8 = (struct _Unwind_Exception *)((char *)v8 - 1); + } + else + { + v8 = (struct _Unwind_Exception *)((char *)v8 - 2); + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 2); + *((_BYTE *)v8 + 1) = *(_BYTE *)(v28 + ((v30 >> 14) & 1) + 2); + } + *(_BYTE *)v8 = *(_BYTE *)(v36 + 42); + } +LABEL_5: + v9 = a3[2]; + v36 = v9; + if ( v9 > (int)lpuexcpt ) + { + v19 = v9; + v20 = 16 * ((unsigned int)(v9 + 27) >> 4); + v21 = alloca(v20); + v22 = alloca(v20); + v34 = (int *)v24; + std::__pad>::_S_pad(a3, (void *)(char)v31, v24, v8, v19, (int)lpuexcpt); + v8 = (struct _Unwind_Exception *)v34; + lpuexcpt = (struct _Unwind_Exception *)v36; + } + v10 = v32; + a3[2] = 0; + LOBYTE(v36) = v10; + if ( !v10 ) + { + v11 = (struct _Unwind_Exception *)(*(int (__thiscall **)(int, struct _Unwind_Exception *, struct _Unwind_Exception *))(*(_DWORD *)v35 + 48))( + v35, + v8, + lpuexcpt); + v12 = v36; + if ( lpuexcpt != v11 ) + v12 = 1; + LOBYTE(v36) = v12; + } + lpuexcpt = (struct _Unwind_Exception *)(unsigned __int8)v36; + return v35; +} +// 53F788: using guessed type signed __int32 std::numpunct::id; +// 5605B0: using guessed type int (*off_5605B0)(); +// 4B2EA0: using guessed type char anonymous_1[16]; + +//----- (004B3240) -------------------------------------------------------- +int __stdcall std::num_put>::_M_insert_int( + int a1, + int a2, + int *a3, + int a4, + __int64 a5) +{ + struct _Unwind_Exception *v5; // edi + void *v6; // esp + void *v7; // esp + __int64 v8; // rax + int v9; // eax + char *v10; // esi + int v11; // ebx + char *v12; // edx + int v13; // esi + int v15; // eax + void *v16; // esp + void *v17; // esp + int v18; // eax + void *v19; // esp + void *v20; // esp + _BYTE *v21; // eax + char v22; // al + int v23; // [esp-2Ch] [ebp-94h] + char v24[2]; // [esp-20h] [ebp-88h] BYREF + _BYTE v25[38]; // [esp-1Eh] [ebp-86h] BYREF + char v26[24]; // [esp+8h] [ebp-60h] BYREF + unsigned int v27; // [esp+20h] [ebp-48h] + int v28; // [esp+24h] [ebp-44h] + int v29; // [esp+28h] [ebp-40h] + unsigned int v30; // [esp+2Ch] [ebp-3Ch] + int v31; // [esp+30h] [ebp-38h] + int v32; // [esp+34h] [ebp-34h] + __int64 v33; // [esp+38h] [ebp-30h] + + v31 = a1; + v29 = a2; + v28 = a4; + v33 = a5; + v5 = std::__use_cache>::operator()(a3 + 27); + v32 = (int)v5 + 38; + v30 = a3[3]; + v6 = alloca(64); + v7 = alloca(64); + v27 = v30 & 0x4A; + v8 = a5; + LOBYTE(v32) = v27 != 8 && v27 != 64; + if ( ((HIDWORD(a5) | ((unsigned __int64)(a5 - 1) >> 32)) & 0x80000000) != 0LL && (_BYTE)v32 ) + v8 = -a5; + v9 = std::__int_to_char(v26, v8, HIDWORD(v8), (int)v5 + 38, v30, v32); + v10 = &v24[-v9]; + v11 = v9; + v12 = &v24[-v9 + 40]; + if ( !*((_BYTE *)v5 + 16) ) + { + if ( (_BYTE)v32 ) + goto LABEL_6; +LABEL_16: + if ( (v30 & 0x200) != 0 && v33 ) + { + if ( v27 == 64 ) + { + v22 = *((_BYTE *)v5 + 42); + ++v11; + --v12; + } + else + { + v11 += 2; + v12 -= 2; + v12[1] = *((_BYTE *)v5 + ((v30 >> 14) & 1) + 40); + v22 = *((_BYTE *)v5 + 42); + } + *v12 = v22; + } + goto LABEL_8; + } + v18 = 16 * ((unsigned int)(2 * v9 + 29) >> 4); + v19 = alloca(v18); + v20 = alloca(v18); + v21 = std::__add_grouping( + v25, + *((_BYTE *)v5 + 37), + *((char **)v5 + 2), + *((_DWORD *)v5 + 3), + v10 + 40, + &v12[v11]); + v12 = v25; + v11 = v21 - v25; + if ( !(_BYTE)v32 ) + goto LABEL_16; +LABEL_6: + if ( v33 < 0 ) + { + ++v11; + *--v12 = *((_BYTE *)v5 + 38); + } + else if ( (v30 & 0x800) != 0 ) + { + ++v11; + *--v12 = *((_BYTE *)v5 + 39); + v13 = a3[2]; + if ( v13 <= v11 ) + goto LABEL_9; + goto LABEL_13; + } +LABEL_8: + v13 = a3[2]; + if ( v13 <= v11 ) + goto LABEL_9; +LABEL_13: + v15 = 16 * ((unsigned int)(v13 + 27) >> 4); + v16 = alloca(v15); + v17 = alloca(v15); + v23 = v11; + v11 = v13; + std::__pad>::_S_pad(a3, (void *)(char)v28, v24, v12, v13, v23); + v12 = v24; +LABEL_9: + a3[2] = 0; + if ( !(_BYTE)v29 ) + (*(int (__thiscall **)(int, char *, int))(*(_DWORD *)v31 + 48))(v31, v12, v11); + return v31; +} +// 4B3240: using guessed type char anonymous_0[24]; + +//----- (004B34A0) -------------------------------------------------------- +int __stdcall std::num_put>::_M_insert_int( + int a1, + int a2, + _DWORD *a3, + int a4, + int a5, + int a6) +{ + unsigned int v6; // ecx + void *v7; // esp + void *v8; // esp + int v9; // ebx + struct _Unwind_Exception *v10; // edx + int v11; // eax + char v12; // bl + struct _Unwind_Exception *v13; // eax + char v14; // si + int v16; // eax + void *v17; // esp + void *v18; // esp + int v19; // eax + _BYTE *v20; // eax + int v21; // ebx + int v22; // eax + void *v23; // esp + void *v24; // esp + _DWORD *v25; // eax + char v26[2]; // [esp-20h] [ebp-B8h] BYREF + _BYTE v27[38]; // [esp-1Eh] [ebp-B6h] BYREF + unsigned int v28[9]; // [esp+8h] [ebp-90h] BYREF + int v29; // [esp+2Ch] [ebp-6Ch] + unsigned int v30; // [esp+30h] [ebp-68h] + unsigned int v31; // [esp+34h] [ebp-64h] + int v32; // [esp+38h] [ebp-60h] + int v33; // [esp+3Ch] [ebp-5Ch] + std::locale::_Impl *v34; // [esp+40h] [ebp-58h] + int *v35; // [esp+44h] [ebp-54h] + unsigned __int64 v36; // [esp+48h] [ebp-50h] + int v37; // [esp+50h] [ebp-48h] + int v38; // [esp+54h] [ebp-44h] + struct _Unwind_Exception *lpuexcpt; // [esp+58h] [ebp-40h] + + v37 = a1; + v33 = a2; + v32 = a4; + v36 = __PAIR64__(a5, a6); + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v35 = (int *)(*(_DWORD *)(a3[27] + 12) + 4 * (_DWORD)lpuexcpt); + v38 = *v35; + if ( !v38 ) + { + v25 = operator new(0x68u); + v25[1] = 0; + *v25 = &off_5605B0; + v25[2] = 0; + v25[3] = 0; + *((_BYTE *)v25 + 16) = 0; + v25[5] = 0; + v25[6] = 0; + v25[7] = 0; + v25[8] = 0; + *((_WORD *)v25 + 18) = 0; + *((_BYTE *)v25 + 100) = 0; + v34 = (std::locale::_Impl *)v25; + std::__numpunct_cache::_M_cache((int)v25, (int)(a3 + 27)); + std::locale::_Impl::_M_install_cache(a3[27], v34, lpuexcpt, v28[0]); + v38 = *v35; + } + v6 = a3[3]; + v29 = v38 + 38; + v31 = v6; + v7 = alloca(64); + v8 = alloca(64); + v34 = (std::locale::_Impl *)v26; + v30 = v6 & 0x4A; + LOBYTE(v35) = v30 != 8 && v30 != 64; + lpuexcpt = (struct _Unwind_Exception *)std::__int_to_char( + v28, + HIDWORD(v36), + v36, + v38 + 38, + v6, + (char)v35); + v9 = v34 - lpuexcpt; + v10 = (struct _Unwind_Exception *)(v34 - lpuexcpt + 40); + if ( *(_BYTE *)(v38 + 16) ) + { + v16 = 16 * ((unsigned int)(2 * (_DWORD)lpuexcpt + 29) >> 4); + v17 = alloca(v16); + v18 = alloca(v16); + v19 = *(_DWORD *)(v38 + 12); + lpuexcpt = (struct _Unwind_Exception *)v27; + v20 = std::__add_grouping( + v27, + *(_BYTE *)(v38 + 37), + *(char **)(v38 + 8), + v19, + (_BYTE *)(v9 + 40), + (_BYTE *)v34 + 40); + v10 = lpuexcpt; + lpuexcpt = (struct _Unwind_Exception *)(v20 - (_BYTE *)lpuexcpt); + if ( (_BYTE)v35 ) + goto LABEL_5; + } + else if ( (_BYTE)v35 ) + { + goto LABEL_5; + } + if ( (v31 & 0x200) != 0 && v36 ) + { + if ( v30 == 64 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v10 = (struct _Unwind_Exception *)((char *)v10 - 1); + } + else + { + v10 = (struct _Unwind_Exception *)((char *)v10 - 2); + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 2); + *((_BYTE *)v10 + 1) = *(_BYTE *)(v29 + ((v31 >> 14) & 1) + 2); + } + *(_BYTE *)v10 = *(_BYTE *)(v38 + 42); + } +LABEL_5: + v11 = a3[2]; + v38 = v11; + if ( v11 > (int)lpuexcpt ) + { + v21 = v11; + v22 = 16 * ((unsigned int)(v11 + 27) >> 4); + v23 = alloca(v22); + v24 = alloca(v22); + HIDWORD(v36) = v26; + std::__pad>::_S_pad(a3, (void *)(char)v32, v26, v10, v21, (int)lpuexcpt); + v10 = (struct _Unwind_Exception *)HIDWORD(v36); + lpuexcpt = (struct _Unwind_Exception *)v38; + } + v12 = v33; + a3[2] = 0; + LOBYTE(v38) = v12; + if ( !v12 ) + { + v13 = (struct _Unwind_Exception *)(*(int (__thiscall **)(int, struct _Unwind_Exception *, struct _Unwind_Exception *))(*(_DWORD *)v37 + 48))( + v37, + v10, + lpuexcpt); + v14 = v38; + if ( lpuexcpt != v13 ) + v14 = 1; + LOBYTE(v38) = v14; + } + lpuexcpt = (struct _Unwind_Exception *)(unsigned __int8)v38; + return v37; +} +// 53F788: using guessed type signed __int32 std::numpunct::id; +// 5605B0: using guessed type int (*off_5605B0)(); +// 4B34A0: using guessed type unsigned int anonymous_0[9]; + +//----- (004B3860) -------------------------------------------------------- +_BYTE *__stdcall std::num_put>::_M_group_float( + char *a1, + int a2, + char a3, + char *Src, + int a5, + _BYTE *a6, + _DWORD *a7) +{ + char *v7; // ebp + _BYTE *v8; // ecx + int v9; // eax + _BYTE *v10; // edx + _BYTE *result; // eax + _BYTE *v12; // [esp+2Ch] [ebp-20h] + + if ( Src ) + { + v7 = (char *)(Src - a6); + v8 = std::__add_grouping((_BYTE *)a5, a3, a1, a2, a6, Src); + v9 = 0; + v10 = &v8[-a5]; + if ( *a7 != Src - a6 ) + { + v12 = &v8[-a5]; + memcpy(v8, Src, *a7 - (_DWORD)v7); + v10 = v12; + v9 = *a7 - (_DWORD)v7; + } + result = &v10[v9]; + *a7 = result; + } + else + { + result = &std::__add_grouping((_BYTE *)a5, a3, a1, a2, a6, &a6[*a7])[-a5]; + *a7 = result; + } + return result; +} + +//----- (004B3930) -------------------------------------------------------- +int __thiscall std::num_put>::_M_insert_float( + void *this, + int a2, + int a3, + int *a4, + int a5, + char a6, + double a7) +{ + int v7; // ebx + void *v8; // esp + void *v9; // esp + int v10; // eax + _BYTE *v11; // eax + int v12; // ebx + _BYTE *v13; // esi + int v14; // eax + void *v15; // esp + char v16; // dl + void *v17; // esp + char *v18; // eax + void (__thiscall *v19)(_BYTE *, char *, char *, void *); // edx + char *v20; // eax + char *v21; // edx + struct _Unwind_Exception *v22; // ecx + signed int v23; // esi + int v25; // eax + void *v26; // esp + void *v27; // esp + int v28; // eax + void *v29; // esp + void *v30; // esp + char *v31; // ecx + int v32; // ebx + int v33; // eax + void *v34; // esp + void *v35; // esp + int v36; // eax + int v37; // eax + void *v38; // esp + void *v39; // esp + int v40; // [esp-2Ch] [ebp-B4h] + char v41; // [esp-20h] [ebp-A8h] BYREF + _BYTE v42[71]; // [esp-1Fh] [ebp-A7h] BYREF + char *v43; // [esp+28h] [ebp-60h] + int v44; // [esp+2Ch] [ebp-5Ch] + void *v45; // [esp+30h] [ebp-58h] + int v46; // [esp+34h] [ebp-54h] + size_t Size; // [esp+38h] [ebp-50h] + struct _Unwind_Exception *v48; // [esp+3Ch] [ebp-4Ch] + void *v49; // [esp+40h] [ebp-48h] + int v50; // [esp+44h] [ebp-44h] + int v51[2]; // [esp+48h] [ebp-40h] + size_t MaxCount; // [esp+58h] [ebp-30h] BYREF + int *c_locale; // [esp+5Ch] [ebp-2Ch] BYREF + char v54[40]; // [esp+60h] [ebp-28h] BYREF + + v45 = this; + v50 = a2; + *(double *)v51 = a7; + v46 = a3; + v44 = a5; + v49 = a4 + 27; + v48 = std::__use_cache>::operator()(a4 + 27); + v7 = a4[1]; + if ( v7 < 0 ) + v7 = 6; + std::__num_base::_S_format_float((std::__num_base *)a4, (const std::ios_base *)v54, (char *)a6); + v8 = alloca(64); + v9 = alloca(64); + if ( (a4[3] & 0x104) == 260 ) + { + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + v36 = std::__convert_from_v(&c_locale, &v41, 45, v54, v51[0], v51[1]); + MaxCount = v36; + if ( v36 > 44 ) + { + Size = v36 + 1; + v37 = 16 * ((unsigned int)(v36 + 28) >> 4); + v38 = alloca(v37); + v39 = alloca(v37); + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + MaxCount = std::__convert_from_v(&c_locale, &v41, Size, v54, v51[0], v51[1]); + } + } + else + { + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + v10 = std::__convert_from_v(&c_locale, &v41, 45, v54, v7, v51[0], v51[1]); + MaxCount = v10; + if ( v10 > 44 ) + { + Size = v10 + 1; + v25 = 16 * ((unsigned int)(v10 + 28) >> 4); + v26 = alloca(v25); + v27 = alloca(v25); + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + MaxCount = std::__convert_from_v(&c_locale, &v41, Size, v54, v7, v51[0], v51[1]); + } + } + v11 = std::use_facet>((int)v49); + v12 = MaxCount; + v13 = v11; + Size = MaxCount; + v14 = 16 * ((MaxCount + 27) >> 4); + v15 = alloca(v14); + v16 = v13[28]; + v17 = alloca(v14); + v49 = &v41; + v51[0] = (int)&v41; + v18 = &v42[MaxCount - 1]; + if ( v16 != 1 ) + { + if ( v16 ) + { + v19 = *(void (__thiscall **)(_BYTE *, char *, char *, void *))(*(_DWORD *)v13 + 28); + if ( (char *)v19 == (char *)std::ctype::do_widen ) + goto LABEL_9; + } + else + { + v43 = &v42[MaxCount - 1]; + std::ctype::_M_widen_init((int)v13); + v18 = v43; + v19 = *(void (__thiscall **)(_BYTE *, char *, char *, void *))(*(_DWORD *)v13 + 28); + if ( (char *)v19 == (char *)std::ctype::do_widen ) + { +LABEL_9: + v12 = MaxCount; + if ( v18 != &v41 ) + memcpy(v49, &v41, Size); + goto LABEL_11; + } + } + v19(v13, &v41, v18, v49); + v12 = MaxCount; + goto LABEL_11; + } + if ( v18 != &v41 ) + memcpy(v49, &v41, MaxCount); +LABEL_11: + if ( !v12 ) + { + if ( *((_BYTE *)v48 + 16) ) + { + v21 = 0; + goto LABEL_20; + } +LABEL_14: + v23 = a4[2]; + if ( v23 <= v12 ) + goto LABEL_15; + goto LABEL_23; + } + v20 = (char *)memchr(&v41, 46, v12); + v21 = v20; + if ( !v20 ) + { + if ( *((_BYTE *)v48 + 16) && (v12 <= 2 || v42[0] <= 57 && (unsigned __int8)(v42[1] - 48) <= 9u && v42[0] > 47) ) + goto LABEL_20; + goto LABEL_14; + } + v22 = v48; + v21 = (char *)v49 + v20 - &v41; + *v21 = *((_BYTE *)v48 + 36); + if ( !*((_BYTE *)v22 + 16) ) + goto LABEL_14; +LABEL_20: + v28 = 16 * ((unsigned int)(2 * v12 + 27) >> 4); + v29 = alloca(v28); + v30 = alloca(v28); + if ( ((v41 - 43) & 0xFD) != 0 ) + { + v31 = &v41; + v32 = 0; + } + else + { + v31 = v42; + MaxCount = v12 - 1; + v32 = 1; + v41 = *(_BYTE *)v49; + v51[0] = (int)v49 + 1; + } + std::num_put>::_M_group_float( + *((char **)v48 + 2), + *((_DWORD *)v48 + 3), + *((_BYTE *)v48 + 37), + v21, + (int)v31, + (_BYTE *)v51[0], + &MaxCount); + v12 = MaxCount + v32; + v51[0] = (int)&v41; + MaxCount = v12; + v23 = a4[2]; + if ( v23 <= v12 ) + goto LABEL_15; +LABEL_23: + v33 = 16 * ((unsigned int)(v23 + 27) >> 4); + v34 = alloca(v33); + v35 = alloca(v33); + v40 = v12; + v12 = v23; + std::__pad>::_S_pad(a4, (void *)(char)v44, &v41, (_BYTE *)v51[0], v23, v40); + MaxCount = v23; + v51[0] = (int)&v41; +LABEL_15: + a4[2] = 0; + if ( !(_BYTE)v46 ) + (*(int (__thiscall **)(int, int, int))(*(_DWORD *)v50 + 48))(v50, v51[0], v12); + return v50; +} + +//----- (004B3D90) -------------------------------------------------------- +int __thiscall std::num_put>::_M_insert_float( + void *this, + int a2, + int a3, + int *a4, + int a5, + char a6, + long double a7) +{ + int v7; // ebx + void *v8; // esp + void *v9; // esp + int v10; // eax + _BYTE *v11; // eax + int v12; // ebx + _BYTE *v13; // esi + int v14; // eax + void *v15; // esp + char v16; // dl + void *v17; // esp + char *v18; // eax + void (__thiscall *v19)(_BYTE *, char *, char *, void *); // edx + char *v20; // eax + char *v21; // edx + struct _Unwind_Exception *v22; // ecx + signed int v23; // esi + int v25; // eax + void *v26; // esp + void *v27; // esp + int v28; // eax + void *v29; // esp + void *v30; // esp + char *v31; // ecx + int v32; // ebx + int v33; // eax + void *v34; // esp + void *v35; // esp + int v36; // eax + int v37; // eax + void *v38; // esp + void *v39; // esp + int v44; // [esp-3Ch] [ebp-C4h] + char v45; // [esp-30h] [ebp-B8h] BYREF + _BYTE v46[91]; // [esp-2Fh] [ebp-B7h] BYREF + char *v47; // [esp+2Ch] [ebp-5Ch] + int v48; // [esp+30h] [ebp-58h] + void *v49; // [esp+34h] [ebp-54h] + size_t Size; // [esp+38h] [ebp-50h] + int v51; // [esp+3Ch] [ebp-4Ch] + struct _Unwind_Exception *v52; // [esp+40h] [ebp-48h] + void *v53; // [esp+44h] [ebp-44h] + int v54; // [esp+48h] [ebp-40h] + int v55; // [esp+4Ch] [ebp-3Ch] + size_t MaxCount; // [esp+58h] [ebp-30h] BYREF + int *c_locale; // [esp+5Ch] [ebp-2Ch] BYREF + char v58[40]; // [esp+60h] [ebp-28h] BYREF + + v49 = this; + v54 = a2; + v51 = a3; + v48 = a5; + v55 = (int)(a4 + 27); + v52 = std::__use_cache>::operator()(a4 + 27); + v7 = a4[1]; + if ( v7 < 0 ) + v7 = 6; + std::__num_base::_S_format_float((std::__num_base *)a4, (const std::ios_base *)v58, (char *)a6); + v8 = alloca(80); + v9 = alloca(80); + if ( (a4[3] & 0x104) == 260 ) + { + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + v36 = std::__convert_from_v(&c_locale, &v45, 54, v58, *(_QWORD *)&a7, HIDWORD(a7)); + MaxCount = v36; + if ( v36 > 53 ) + { + v53 = (void *)(v36 + 1); + v37 = 16 * ((unsigned int)(v36 + 28) >> 4); + v38 = alloca(v37); + v39 = alloca(v37); + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + MaxCount = std::__convert_from_v(&c_locale, &v45, (int)v53, v58, *(_QWORD *)&a7, HIDWORD(a7)); + } + } + else + { + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + v10 = std::__convert_from_v(&c_locale, &v45, 54, v58, v7, *(_QWORD *)&a7, HIDWORD(a7)); + MaxCount = v10; + if ( v10 > 53 ) + { + v53 = (void *)(v10 + 1); + v25 = 16 * ((unsigned int)(v10 + 28) >> 4); + v26 = alloca(v25); + v27 = alloca(v25); + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + MaxCount = std::__convert_from_v(&c_locale, &v45, (int)v53, v58, v7, *(_QWORD *)&a7, HIDWORD(a7)); + } + } + v11 = std::use_facet>(v55); + v12 = MaxCount; + v13 = v11; + Size = MaxCount; + v14 = 16 * ((MaxCount + 27) >> 4); + v15 = alloca(v14); + v16 = v13[28]; + v17 = alloca(v14); + v53 = &v45; + v55 = (int)&v45; + v18 = &v46[MaxCount - 1]; + if ( v16 != 1 ) + { + if ( v16 ) + { + v19 = *(void (__thiscall **)(_BYTE *, char *, char *, void *))(*(_DWORD *)v13 + 28); + if ( (char *)v19 == (char *)std::ctype::do_widen ) + goto LABEL_9; + } + else + { + v47 = &v46[MaxCount - 1]; + std::ctype::_M_widen_init((int)v13); + v18 = v47; + v19 = *(void (__thiscall **)(_BYTE *, char *, char *, void *))(*(_DWORD *)v13 + 28); + if ( (char *)v19 == (char *)std::ctype::do_widen ) + { +LABEL_9: + v12 = MaxCount; + if ( v18 != &v45 ) + memcpy(v53, &v45, Size); + goto LABEL_11; + } + } + v19(v13, &v45, v18, v53); + v12 = MaxCount; + goto LABEL_11; + } + if ( v18 != &v45 ) + memcpy(v53, &v45, MaxCount); +LABEL_11: + if ( !v12 ) + { + if ( *((_BYTE *)v52 + 16) ) + { + v21 = 0; + goto LABEL_20; + } +LABEL_14: + v23 = a4[2]; + if ( v23 <= v12 ) + goto LABEL_15; + goto LABEL_23; + } + v20 = (char *)memchr(&v45, 46, v12); + v21 = v20; + if ( !v20 ) + { + if ( *((_BYTE *)v52 + 16) && (v12 <= 2 || v46[0] <= 57 && (unsigned __int8)(v46[1] - 48) <= 9u && v46[0] > 47) ) + goto LABEL_20; + goto LABEL_14; + } + v22 = v52; + v21 = (char *)v53 + v20 - &v45; + *v21 = *((_BYTE *)v52 + 36); + if ( !*((_BYTE *)v22 + 16) ) + goto LABEL_14; +LABEL_20: + v28 = 16 * ((unsigned int)(2 * v12 + 27) >> 4); + v29 = alloca(v28); + v30 = alloca(v28); + if ( ((v45 - 43) & 0xFD) != 0 ) + { + v31 = &v45; + v32 = 0; + } + else + { + v31 = v46; + MaxCount = v12 - 1; + v32 = 1; + v45 = *(_BYTE *)v53; + v55 = (int)v53 + 1; + } + std::num_put>::_M_group_float( + *((char **)v52 + 2), + *((_DWORD *)v52 + 3), + *((_BYTE *)v52 + 37), + v21, + (int)v31, + (_BYTE *)v55, + &MaxCount); + v12 = MaxCount + v32; + v55 = (int)&v45; + MaxCount = v12; + v23 = a4[2]; + if ( v23 <= v12 ) + goto LABEL_15; +LABEL_23: + v33 = 16 * ((unsigned int)(v23 + 27) >> 4); + v34 = alloca(v33); + v35 = alloca(v33); + v44 = v12; + v12 = v23; + std::__pad>::_S_pad(a4, (void *)(char)v48, &v45, (_BYTE *)v55, v23, v44); + MaxCount = v23; + v55 = (int)&v45; +LABEL_15: + a4[2] = 0; + if ( !(_BYTE)v51 ) + (*(int (__thiscall **)(int, int, int))(*(_DWORD *)v54 + 48))(v54, v55, v12); + return v54; +} + +//----- (004B41F0) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + _DWORD *a4, + char a5, + int a6) +{ + int (__stdcall *v6)(int, int, _DWORD *, char, int); // eax + int v7; // edi + int result; // eax + + v6 = *(int (__stdcall **)(int, int, _DWORD *, char, int))(*(_DWORD *)this + 36); + if ( v6 != std::num_put>::do_put ) + return v6(a2, a3, a4, a5, a6); + v7 = a4[3]; + a4[3] = v7 & 0xFFFFBDB5 | 0x208; + result = std::num_put>::_M_insert_int(a2, a3, a4, a5, a6); + a4[3] = v7; + return result; +} + +//----- (004B4290) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + int a4, + char a5, + unsigned __int8 a6) +{ + return (*(int (__thiscall **)(void *, int, int, int, _DWORD, _DWORD))(*(_DWORD *)this + 8))(this, a2, a3, a4, a5, a6); +} + +//----- (004B42B0) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + int *a4, + char a5, + double a6) +{ + int (__thiscall *v6)(void *, int, int, int *, char, double); // eax + + v6 = *(int (__thiscall **)(void *, int, int, int *, char, double))(*(_DWORD *)this + 28); + if ( v6 == std::num_put>::do_put ) + return std::num_put>::_M_insert_float(this, a2, a3, a4, a5, 0, a6); + else + return ((int (__stdcall *)(int, int, int *, _DWORD, _DWORD, _DWORD))v6)(a2, a3, a4, a5, LODWORD(a6), HIDWORD(a6)); +} + +//----- (004B4320) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + int *a4, + char a5, + long double a6) +{ + int (__thiscall *v6)(void *, int, int, int *, char, long double); // eax + + v6 = *(int (__thiscall **)(void *, int, int, int *, char, long double))(*(_DWORD *)this + 32); + if ( v6 == std::num_put>::do_put ) + return std::num_put>::_M_insert_float(this, a2, a3, a4, a5, 76, a6); + else + return ((int (__stdcall *)(int, int, int *, _DWORD, _DWORD, _DWORD, _DWORD))v6)( + a2, + a3, + a4, + a5, + LODWORD(a6), + DWORD1(a6), + HIDWORD(a6)); +} + +//----- (004B4390) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + int *a4, + char a5, + int a6) +{ + int (__stdcall *v6)(int, int, int *, char, int); // eax + + v6 = *(int (__stdcall **)(int, int, int *, char, int))(*(_DWORD *)this + 12); + if ( v6 == std::num_put>::do_put ) + return std::num_put>::_M_insert_int(a2, a3, a4, a5, a6); + else + return v6(a2, a3, a4, a5, a6); +} + +//----- (004B43F0) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + _DWORD *a4, + char a5, + int a6) +{ + int (__stdcall *v6)(int, int, _DWORD *, char, int); // eax + + v6 = *(int (__stdcall **)(int, int, _DWORD *, char, int))(*(_DWORD *)this + 16); + if ( v6 == std::num_put>::do_put ) + return std::num_put>::_M_insert_int(a2, a3, a4, a5, a6); + else + return v6(a2, a3, a4, a5, a6); +} + +//----- (004B4450) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + int *a4, + char a5, + __int64 a6) +{ + int (__stdcall *v6)(int, int, int *, char, __int64); // eax + + v6 = *(int (__stdcall **)(int, int, int *, char, __int64))(*(_DWORD *)this + 20); + if ( v6 == std::num_put>::do_put ) + return std::num_put>::_M_insert_int(a2, a3, a4, a5, a6); + else + return ((int (__stdcall *)(int, int, int *, _DWORD, _DWORD, _DWORD))v6)(a2, a3, a4, a5, a6, HIDWORD(a6)); +} + +//----- (004B44C0) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + _DWORD *a4, + char a5, + int a6, + int a7) +{ + int (__stdcall *v7)(int, int, _DWORD *, char, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, _DWORD *, char, int, int))(*(_DWORD *)this + 24); + if ( v7 == std::num_put>::do_put ) + return std::num_put>::_M_insert_int(a2, a3, a4, a5, a6, a7); + else + return v7(a2, a3, a4, a5, a6, a7); +} + +//----- (004B4530) -------------------------------------------------------- +int __stdcall std::num_put>::_M_pad( + char a1, + int a2, + _DWORD *a3, + char *a4, + _BYTE *a5, + int *a6) +{ + int result; // eax + + result = std::__pad>::_S_pad(a3, (void *)a1, a4, a5, a2, *a6); + *a6 = a2; + return result; +} + +//----- (004B4580) -------------------------------------------------------- +int __stdcall std::num_put>::do_put(int a1, int a2, _DWORD *a3, char a4, int a5) +{ + int v5; // edi + int result; // eax + + v5 = a3[3]; + a3[3] = v5 & 0xFFFFBDB5 | 0x208; + result = std::num_put>::_M_insert_int(a1, a2, a3, a4, a5); + a3[3] = v5; + return result; +} + +//----- (004B4600) -------------------------------------------------------- +int *__stdcall std::num_put>::do_put(int *a1, int a2, int *a3, int a4, int a5) +{ + int v5; // edi + struct _Unwind_Exception *v7; // eax + int v8; // ecx + char v9; // dl + int v10; // ecx + int v11; // eax + size_t v12; // edx + int v13; // eax + void *v14; // esp + void *v15; // esp + char v16; // dl + int v17; // edi + int v18; // ecx + int v19; // eax + int v20; // edi + _BYTE v21[8]; // [esp+20h] [ebp-68h] BYREF + _BYTE *v22; // [esp+28h] [ebp-60h] + int v23; // [esp+2Ch] [ebp-5Ch] + char v24; // [esp+33h] [ebp-55h] + int v25; // [esp+34h] [ebp-54h] + int v26; // [esp+38h] [ebp-50h] + int v27; // [esp+3Ch] [ebp-4Ch] + + v5 = a3[3]; + v26 = a4; + if ( (v5 & 1) == 0 ) + return (int *)std::num_put>::_M_insert_int( + (int)a1, + a2, + a3, + (char)a4, + (unsigned __int8)a5); + v27 = a5; + v7 = std::__use_cache>::operator()(a3 + 27); + if ( (_BYTE)a5 ) + { + v8 = *((_DWORD *)v7 + 5); + v9 = a2; + v27 = *((_DWORD *)v7 + 6); + v25 = v8; + v10 = v27; + v11 = a3[2]; + if ( v27 < v11 ) + goto LABEL_5; +LABEL_10: + a3[2] = 0; + if ( !v9 ) + { + v19 = *a1; + LOBYTE(v26) = 0; + (*(int (__thiscall **)(int *, int, int))(v19 + 48))(a1, v25, v27); + } + return a1; + } + v18 = *((_DWORD *)v7 + 7); + v9 = a2; + v27 = *((_DWORD *)v7 + 8); + v25 = v18; + v10 = v27; + v11 = a3[2]; + if ( v27 >= v11 ) + goto LABEL_10; +LABEL_5: + v24 = v9; + v23 = v11 - v10; + v12 = v11 - v10; + v13 = 16 * ((unsigned int)(v11 - v10 + 27) >> 4); + v14 = alloca(v13); + v15 = alloca(v13); + v22 = v21; + memset(v21, (char)v26, v12); + v16 = v24; + a3[2] = 0; + if ( (v5 & 0xB0) == 32 ) + { + if ( !v16 ) + { + v20 = v27; + if ( v20 == (*(int (__thiscall **)(int *, int, int))(*a1 + 48))(a1, v25, v27) ) + (*(void (__thiscall **)(int *, _BYTE *, int))(*a1 + 48))(a1, v22, v23); + } + } + else if ( !v16 ) + { + v17 = v23; + if ( v17 == (*(int (__thiscall **)(int *, _BYTE *, int))(*a1 + 48))(a1, v22, v23) ) + (*(void (__thiscall **)(int *, int, int))(*a1 + 48))(a1, v25, v27); + } + return a1; +} + +//----- (004B4800) -------------------------------------------------------- +int __thiscall std::num_put>::do_put( + void *this, + int a2, + int a3, + int *a4, + char a5, + double a6) +{ + return std::num_put>::_M_insert_float(this, a2, a3, a4, a5, 0, a6); +} + +//----- (004B4850) -------------------------------------------------------- +int __thiscall std::num_put>::do_put( + void *this, + int a2, + int a3, + int *a4, + char a5, + long double a6) +{ + return std::num_put>::_M_insert_float(this, a2, a3, a4, a5, 76, a6); +} + +//----- (004B48A0) -------------------------------------------------------- +int __stdcall std::num_put>::do_put(int a1, int a2, int *a3, char a4, int a5) +{ + return std::num_put>::_M_insert_int(a1, a2, a3, a4, a5); +} + +//----- (004B48B0) -------------------------------------------------------- +int __stdcall std::num_put>::do_put(int a1, int a2, _DWORD *a3, char a4, int a5) +{ + return std::num_put>::_M_insert_int(a1, a2, a3, a4, a5); +} + +//----- (004B48C0) -------------------------------------------------------- +int __stdcall std::num_put>::do_put(int a1, int a2, int *a3, char a4, __int64 a5) +{ + return std::num_put>::_M_insert_int(a1, a2, a3, a4, a5); +} + +//----- (004B48D0) -------------------------------------------------------- +int __stdcall std::num_put>::do_put( + int a1, + int a2, + _DWORD *a3, + char a4, + int a5, + int a6) +{ + return std::num_put>::_M_insert_int(a1, a2, a3, a4, a5, a6); +} + +//----- (004B48E0) -------------------------------------------------------- +int __stdcall std::num_put>::_M_group_int( + char *a1, + int a2, + __int16 a3, + int a4, + _WORD *a5, + char *a6, + int *a7) +{ + int result; // eax + + result = std::__add_grouping(a5, a3, a1, a2, a6, &a6[2 * *a7]) - a5; + *a7 = result; + return result; +} + +//----- (004B4930) -------------------------------------------------------- +int __stdcall std::num_put>::_M_insert_int( + int a1, + int a2, + _DWORD *a3, + int a4, + int a5) +{ + void *v5; // esp + void *v6; // esp + unsigned int v7; // eax + int v8; // ecx + struct _Unwind_Exception *v9; // edx + int v10; // eax + char v11; // cl + struct _Unwind_Exception *v12; // eax + char v13; // bl + int v15; // ebx + int v16; // eax + void *v17; // esp + void *v18; // esp + int v19; // eax + void *v20; // esp + void *v21; // esp + int v22; // eax + char *v23; // eax + _DWORD *v24; // eax + __int16 v25; // [esp-20h] [ebp-A8h] BYREF + _WORD v26[18]; // [esp-1Ch] [ebp-A4h] BYREF + unsigned int v27; // [esp+8h] [ebp-80h] + unsigned int v28; // [esp+24h] [ebp-64h] + int v29; // [esp+28h] [ebp-60h] + int v30; // [esp+2Ch] [ebp-5Ch] + int v31; // [esp+30h] [ebp-58h] + unsigned int v32; // [esp+34h] [ebp-54h] + int v33; // [esp+38h] [ebp-50h] + std::locale::_Impl *v34; // [esp+3Ch] [ebp-4Ch] + int *v35; // [esp+40h] [ebp-48h] + int v36; // [esp+44h] [ebp-44h] + struct _Unwind_Exception *lpuexcpt; // [esp+48h] [ebp-40h] + + v33 = a1; + v30 = a2; + v29 = a4; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v35 = (int *)(*(_DWORD *)(a3[27] + 12) + 4 * (_DWORD)lpuexcpt); + v36 = *v35; + if ( !v36 ) + { + v24 = operator new(0xA8u); + v24[1] = 0; + *v24 = &off_5605C0; + v24[2] = 0; + v24[3] = 0; + *((_BYTE *)v24 + 16) = 0; + v24[5] = 0; + v24[6] = 0; + v24[7] = 0; + v24[8] = 0; + v24[9] = 0; + *((_BYTE *)v24 + 164) = 0; + v34 = (std::locale::_Impl *)v24; + std::__numpunct_cache::_M_cache((int)v24, (int)(a3 + 27)); + std::locale::_Impl::_M_install_cache(a3[27], v34, lpuexcpt, v27); + v36 = *v35; + } + v31 = v36 + 40; + v32 = a3[3]; + v5 = alloca(64); + v6 = alloca(64); + v28 = v32 & 0x4A; + v34 = (std::locale::_Impl *)&v25; + v7 = a5; + LOBYTE(v35) = v28 != 8 && v28 != 64; + if ( a5 <= 0 ) + { + v7 = -a5; + if ( v28 == 8 || v28 == 64 ) + v7 = a5; + } + v8 = std::__int_to_char((_WORD *)v34 + 20, v7, v31, v32, (char)v35); + lpuexcpt = (struct _Unwind_Exception *)v8; + v9 = (std::locale::_Impl *)((char *)v34 + 2 * (20 - v8)); + if ( !*(_BYTE *)(v36 + 16) ) + { + if ( (_BYTE)v35 ) + goto LABEL_8; +LABEL_20: + if ( (v32 & 0x200) != 0 && a5 ) + { + if ( v28 == 64 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v9 = (struct _Unwind_Exception *)((char *)v9 - 2); + } + else + { + v9 = (struct _Unwind_Exception *)((char *)v9 - 4); + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 2); + *((_WORD *)v9 + 1) = *(_WORD *)(v31 + 2 * ((v32 >> 14) & 1) + 4); + } + *(_WORD *)v9 = *(_WORD *)(v36 + 48); + } + goto LABEL_10; + } + v19 = 16 * ((unsigned int)(4 * v8 + 31) >> 4); + v20 = alloca(v19); + v21 = alloca(v19); + v22 = *(_DWORD *)(v36 + 12); + lpuexcpt = (struct _Unwind_Exception *)v26; + v23 = (char *)std::__add_grouping( + v26, + *(_WORD *)(v36 + 38), + *(char **)(v36 + 8), + v22, + (char *)v9, + (char *)v9 + 2 * v8); + v9 = lpuexcpt; + lpuexcpt = (struct _Unwind_Exception *)((v23 - (char *)lpuexcpt) >> 1); + if ( !(_BYTE)v35 ) + goto LABEL_20; +LABEL_8: + if ( a5 < 0 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v9 = (struct _Unwind_Exception *)((char *)v9 - 2); + *(_WORD *)v9 = *(_WORD *)(v36 + 40); + } + else if ( (v32 & 0x800) != 0 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v9 = (struct _Unwind_Exception *)((char *)v9 - 2); + *(_WORD *)v9 = *(_WORD *)(v36 + 42); + v10 = a3[2]; + v36 = v10; + if ( v10 <= (int)lpuexcpt ) + goto LABEL_11; + goto LABEL_17; + } +LABEL_10: + v10 = a3[2]; + v36 = v10; + if ( v10 <= (int)lpuexcpt ) + goto LABEL_11; +LABEL_17: + v15 = v10; + v16 = 16 * ((unsigned int)(2 * v10 + 27) >> 4); + v17 = alloca(v16); + v18 = alloca(v16); + v35 = (int *)&v25; + std::__pad>::_S_pad(a3, (void *)(unsigned __int16)v29, &v25, v9, v15, (int)lpuexcpt); + v9 = (struct _Unwind_Exception *)v35; + lpuexcpt = (struct _Unwind_Exception *)v36; +LABEL_11: + v11 = v30; + a3[2] = 0; + LOBYTE(v36) = v11; + if ( !v11 ) + { + v12 = (struct _Unwind_Exception *)(*(int (__thiscall **)(int, struct _Unwind_Exception *, struct _Unwind_Exception *))(*(_DWORD *)v33 + 48))( + v33, + v9, + lpuexcpt); + v13 = v36; + if ( v12 != lpuexcpt ) + v13 = 1; + LOBYTE(v36) = v13; + } + lpuexcpt = (struct _Unwind_Exception *)(unsigned __int8)v36; + return v33; +} +// 53F78C: using guessed type signed __int32 std::numpunct::id; +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (004B4D50) -------------------------------------------------------- +int __stdcall std::num_put>::_M_insert_int( + int a1, + int a2, + _DWORD *a3, + int a4, + int a5) +{ + unsigned int v5; // ecx + void *v6; // esp + void *v7; // esp + struct _Unwind_Exception *v8; // edx + int v9; // eax + char v10; // si + struct _Unwind_Exception *v11; // eax + char v12; // dl + int v14; // eax + void *v15; // esp + void *v16; // esp + int v17; // eax + char *v18; // eax + int v19; // esi + int v20; // eax + void *v21; // esp + void *v22; // esp + _DWORD *v23; // eax + char *v24; // [esp-2Ch] [ebp-B4h] + __int16 v25; // [esp-20h] [ebp-A8h] BYREF + _WORD v26[18]; // [esp-1Ch] [ebp-A4h] BYREF + unsigned int v27[7]; // [esp+8h] [ebp-80h] BYREF + int v28; // [esp+24h] [ebp-64h] + unsigned int v29; // [esp+28h] [ebp-60h] + unsigned int v30; // [esp+2Ch] [ebp-5Ch] + int v31; // [esp+30h] [ebp-58h] + int v32; // [esp+34h] [ebp-54h] + std::locale::_Impl *v33; // [esp+38h] [ebp-50h] + int *v34; // [esp+3Ch] [ebp-4Ch] + int v35; // [esp+40h] [ebp-48h] + int v36; // [esp+44h] [ebp-44h] + struct _Unwind_Exception *lpuexcpt; // [esp+48h] [ebp-40h] + + v35 = a1; + v32 = a2; + v31 = a4; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v34 = (int *)(*(_DWORD *)(a3[27] + 12) + 4 * (_DWORD)lpuexcpt); + v36 = *v34; + if ( !v36 ) + { + v23 = operator new(0xA8u); + v23[1] = 0; + *v23 = &off_5605C0; + v23[2] = 0; + v23[3] = 0; + *((_BYTE *)v23 + 16) = 0; + v23[5] = 0; + v23[6] = 0; + v23[7] = 0; + v23[8] = 0; + v23[9] = 0; + *((_BYTE *)v23 + 164) = 0; + v33 = (std::locale::_Impl *)v23; + std::__numpunct_cache::_M_cache((int)v23, (int)(a3 + 27)); + std::locale::_Impl::_M_install_cache(a3[27], v33, lpuexcpt, v27[0]); + v36 = *v34; + } + v5 = a3[3]; + v28 = v36 + 40; + v30 = v5; + v6 = alloca(64); + v7 = alloca(64); + v33 = (std::locale::_Impl *)&v25; + v29 = v5 & 0x4A; + LOBYTE(v34) = v29 != 8 && v29 != 64; + lpuexcpt = (struct _Unwind_Exception *)std::__int_to_char(v27, a5, v36 + 40, v5, (char)v34); + v8 = (std::locale::_Impl *)((char *)v33 + 2 * (20 - (_DWORD)lpuexcpt)); + if ( *(_BYTE *)(v36 + 16) ) + { + v14 = 16 * ((unsigned int)(4 * (_DWORD)lpuexcpt + 31) >> 4); + v15 = alloca(v14); + v16 = alloca(v14); + v24 = (char *)v8 + 2 * (_DWORD)lpuexcpt; + v17 = *(_DWORD *)(v36 + 12); + lpuexcpt = (struct _Unwind_Exception *)v26; + v18 = (char *)std::__add_grouping(v26, *(_WORD *)(v36 + 38), *(char **)(v36 + 8), v17, (char *)v8, v24); + v8 = lpuexcpt; + lpuexcpt = (struct _Unwind_Exception *)((v18 - (char *)lpuexcpt) >> 1); + if ( (_BYTE)v34 ) + goto LABEL_5; + } + else if ( (_BYTE)v34 ) + { + goto LABEL_5; + } + if ( (v30 & 0x200) != 0 && a5 ) + { + if ( v29 == 64 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v8 = (struct _Unwind_Exception *)((char *)v8 - 2); + } + else + { + v8 = (struct _Unwind_Exception *)((char *)v8 - 4); + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 2); + *((_WORD *)v8 + 1) = *(_WORD *)(v28 + 2 * ((v30 >> 14) & 1) + 4); + } + *(_WORD *)v8 = *(_WORD *)(v36 + 48); + } +LABEL_5: + v9 = a3[2]; + v36 = v9; + if ( v9 > (int)lpuexcpt ) + { + v19 = v9; + v20 = 16 * ((unsigned int)(2 * v9 + 27) >> 4); + v21 = alloca(v20); + v22 = alloca(v20); + v34 = (int *)&v25; + std::__pad>::_S_pad( + a3, + (void *)(unsigned __int16)v31, + &v25, + v8, + v19, + (int)lpuexcpt); + v8 = (struct _Unwind_Exception *)v34; + lpuexcpt = (struct _Unwind_Exception *)v36; + } + v10 = v32; + a3[2] = 0; + LOBYTE(v36) = v10; + if ( !v10 ) + { + v11 = (struct _Unwind_Exception *)(*(int (__thiscall **)(int, struct _Unwind_Exception *, struct _Unwind_Exception *))(*(_DWORD *)v35 + 48))( + v35, + v8, + lpuexcpt); + v12 = v36; + if ( v11 != lpuexcpt ) + v12 = 1; + LOBYTE(v36) = v12; + } + lpuexcpt = (struct _Unwind_Exception *)(unsigned __int8)v36; + return v35; +} +// 53F78C: using guessed type signed __int32 std::numpunct::id; +// 5605C0: using guessed type int (*off_5605C0)(); +// 4B4D50: using guessed type unsigned int anonymous_0[7]; + +//----- (004B5100) -------------------------------------------------------- +int __stdcall std::num_put>::_M_insert_int( + int a1, + int a2, + _DWORD *a3, + int a4, + __int64 a5) +{ + void *v5; // esp + void *v6; // esp + __int64 v7; // rax + int v8; // ecx + struct _Unwind_Exception *v9; // edx + int v10; // eax + char v11; // bl + struct _Unwind_Exception *v12; // eax + char v13; // bl + int v15; // edi + int v16; // eax + void *v17; // esp + void *v18; // esp + int v19; // eax + void *v20; // esp + void *v21; // esp + int v22; // eax + char *v23; // eax + _DWORD *v24; // eax + __int16 v25; // [esp-40h] [ebp-E8h] BYREF + _WORD v26[34]; // [esp-3Ch] [ebp-E4h] BYREF + unsigned int v27; // [esp+8h] [ebp-A0h] + unsigned int v28; // [esp+2Ch] [ebp-7Ch] + int v29; // [esp+30h] [ebp-78h] + int v30; // [esp+34h] [ebp-74h] + int v31; // [esp+38h] [ebp-70h] + unsigned int v32; // [esp+3Ch] [ebp-6Ch] + int v33; // [esp+40h] [ebp-68h] + std::locale::_Impl *v34; // [esp+44h] [ebp-64h] + __int64 v35; // [esp+48h] [ebp-60h] + int *v36; // [esp+50h] [ebp-58h] + int v37; // [esp+54h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+58h] [ebp-50h] + + v33 = a1; + v30 = a2; + v29 = a4; + v35 = a5; + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v36 = (int *)(*(_DWORD *)(a3[27] + 12) + 4 * (_DWORD)lpuexcpt); + v37 = *v36; + if ( !v37 ) + { + v24 = operator new(0xA8u); + v24[1] = 0; + *v24 = &off_5605C0; + v24[2] = 0; + v24[3] = 0; + *((_BYTE *)v24 + 16) = 0; + v24[5] = 0; + v24[6] = 0; + v24[7] = 0; + v24[8] = 0; + v24[9] = 0; + *((_BYTE *)v24 + 164) = 0; + v34 = (std::locale::_Impl *)v24; + std::__numpunct_cache::_M_cache((int)v24, (int)(a3 + 27)); + std::locale::_Impl::_M_install_cache(a3[27], v34, lpuexcpt, v27); + v37 = *v36; + } + v31 = v37 + 40; + v32 = a3[3]; + v5 = alloca(96); + v6 = alloca(96); + v28 = v32 & 0x4A; + v34 = (std::locale::_Impl *)&v25; + v7 = v35; + LOBYTE(v36) = v28 != 8 && v28 != 64; + if ( (HIDWORD(v35) | (((_DWORD)v35 != 0) + HIDWORD(v35) - 1)) < 0 && (_BYTE)v36 ) + v7 = -v35; + v8 = std::__int_to_char((_WORD *)v34 + 40, v7, HIDWORD(v7), v31, v32, (char)v36); + lpuexcpt = (struct _Unwind_Exception *)v8; + v9 = (std::locale::_Impl *)((char *)v34 + 2 * (40 - v8)); + if ( !*(_BYTE *)(v37 + 16) ) + { + if ( (_BYTE)v36 ) + goto LABEL_8; +LABEL_20: + if ( (v32 & 0x200) != 0 && v35 ) + { + if ( v28 == 64 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v9 = (struct _Unwind_Exception *)((char *)v9 - 2); + } + else + { + v9 = (struct _Unwind_Exception *)((char *)v9 - 4); + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 2); + *((_WORD *)v9 + 1) = *(_WORD *)(v31 + 2 * ((v32 >> 14) & 1) + 4); + } + *(_WORD *)v9 = *(_WORD *)(v37 + 48); + } + goto LABEL_10; + } + v19 = 16 * ((unsigned int)(4 * v8 + 31) >> 4); + v20 = alloca(v19); + v21 = alloca(v19); + v22 = *(_DWORD *)(v37 + 12); + lpuexcpt = (struct _Unwind_Exception *)v26; + v23 = (char *)std::__add_grouping( + v26, + *(_WORD *)(v37 + 38), + *(char **)(v37 + 8), + v22, + (char *)v9, + (char *)v9 + 2 * v8); + v9 = lpuexcpt; + lpuexcpt = (struct _Unwind_Exception *)((v23 - (char *)lpuexcpt) >> 1); + if ( !(_BYTE)v36 ) + goto LABEL_20; +LABEL_8: + if ( v35 < 0 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v9 = (struct _Unwind_Exception *)((char *)v9 - 2); + *(_WORD *)v9 = *(_WORD *)(v37 + 40); + } + else if ( (v32 & 0x800) != 0 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v9 = (struct _Unwind_Exception *)((char *)v9 - 2); + *(_WORD *)v9 = *(_WORD *)(v37 + 42); + v10 = a3[2]; + v37 = v10; + if ( v10 <= (int)lpuexcpt ) + goto LABEL_11; + goto LABEL_17; + } +LABEL_10: + v10 = a3[2]; + v37 = v10; + if ( v10 <= (int)lpuexcpt ) + goto LABEL_11; +LABEL_17: + v15 = v10; + v16 = 16 * ((unsigned int)(2 * v10 + 27) >> 4); + v17 = alloca(v16); + v18 = alloca(v16); + v36 = (int *)&v25; + std::__pad>::_S_pad(a3, (void *)(unsigned __int16)v29, &v25, v9, v15, (int)lpuexcpt); + v9 = (struct _Unwind_Exception *)v36; + lpuexcpt = (struct _Unwind_Exception *)v37; +LABEL_11: + v11 = v30; + a3[2] = 0; + LOBYTE(v37) = v11; + if ( !v11 ) + { + v12 = (struct _Unwind_Exception *)(*(int (__thiscall **)(int, struct _Unwind_Exception *, struct _Unwind_Exception *))(*(_DWORD *)v33 + 48))( + v33, + v9, + lpuexcpt); + v13 = v37; + if ( v12 != lpuexcpt ) + v13 = 1; + LOBYTE(v37) = v13; + } + lpuexcpt = (struct _Unwind_Exception *)(unsigned __int8)v37; + return v33; +} +// 53F78C: using guessed type signed __int32 std::numpunct::id; +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (004B5550) -------------------------------------------------------- +int __stdcall std::num_put>::_M_insert_int( + int a1, + int a2, + _DWORD *a3, + int a4, + int a5, + int a6) +{ + unsigned int v6; // ecx + void *v7; // esp + void *v8; // esp + struct _Unwind_Exception *v9; // edx + int v10; // eax + char v11; // si + struct _Unwind_Exception *v12; // eax + char v13; // dl + int v15; // eax + void *v16; // esp + void *v17; // esp + int v18; // eax + char *v19; // eax + int v20; // esi + int v21; // eax + void *v22; // esp + void *v23; // esp + _DWORD *v24; // eax + char *v25; // [esp-4Ch] [ebp-E4h] + __int16 v26; // [esp-40h] [ebp-D8h] BYREF + _WORD v27[34]; // [esp-3Ch] [ebp-D4h] BYREF + unsigned int v28; // [esp+8h] [ebp-90h] + __int16 v29[14]; // [esp+10h] [ebp-88h] BYREF + int v30; // [esp+2Ch] [ebp-6Ch] + unsigned int v31; // [esp+30h] [ebp-68h] + unsigned int v32; // [esp+34h] [ebp-64h] + int v33; // [esp+38h] [ebp-60h] + int v34; // [esp+3Ch] [ebp-5Ch] + std::locale::_Impl *v35; // [esp+40h] [ebp-58h] + int *v36; // [esp+44h] [ebp-54h] + unsigned __int64 v37; // [esp+48h] [ebp-50h] + int v38; // [esp+50h] [ebp-48h] + int v39; // [esp+54h] [ebp-44h] + struct _Unwind_Exception *lpuexcpt; // [esp+58h] [ebp-40h] + + v38 = a1; + v34 = a2; + v33 = a4; + v37 = __PAIR64__(a5, a6); + lpuexcpt = (struct _Unwind_Exception *)std::locale::id::_M_id(&std::numpunct::id); + v36 = (int *)(*(_DWORD *)(a3[27] + 12) + 4 * (_DWORD)lpuexcpt); + v39 = *v36; + if ( !v39 ) + { + v24 = operator new(0xA8u); + v24[1] = 0; + *v24 = &off_5605C0; + v24[2] = 0; + v24[3] = 0; + *((_BYTE *)v24 + 16) = 0; + v24[5] = 0; + v24[6] = 0; + v24[7] = 0; + v24[8] = 0; + v24[9] = 0; + *((_BYTE *)v24 + 164) = 0; + v35 = (std::locale::_Impl *)v24; + std::__numpunct_cache::_M_cache((int)v24, (int)(a3 + 27)); + std::locale::_Impl::_M_install_cache(a3[27], v35, lpuexcpt, v28); + v39 = *v36; + } + v6 = a3[3]; + v30 = v39 + 40; + v32 = v6; + v7 = alloca(96); + v8 = alloca(96); + v35 = (std::locale::_Impl *)&v26; + v31 = v6 & 0x4A; + LOBYTE(v36) = v31 != 8 && v31 != 64; + lpuexcpt = (struct _Unwind_Exception *)std::__int_to_char( + v29, + HIDWORD(v37), + v37, + v39 + 40, + v6, + (char)v36); + v9 = (std::locale::_Impl *)((char *)v35 + 2 * (40 - (_DWORD)lpuexcpt)); + if ( *(_BYTE *)(v39 + 16) ) + { + v15 = 16 * ((unsigned int)(4 * (_DWORD)lpuexcpt + 31) >> 4); + v16 = alloca(v15); + v17 = alloca(v15); + v25 = (char *)v9 + 2 * (_DWORD)lpuexcpt; + v18 = *(_DWORD *)(v39 + 12); + lpuexcpt = (struct _Unwind_Exception *)v27; + v19 = (char *)std::__add_grouping(v27, *(_WORD *)(v39 + 38), *(char **)(v39 + 8), v18, (char *)v9, v25); + v9 = lpuexcpt; + lpuexcpt = (struct _Unwind_Exception *)((v19 - (char *)lpuexcpt) >> 1); + if ( (_BYTE)v36 ) + goto LABEL_5; + } + else if ( (_BYTE)v36 ) + { + goto LABEL_5; + } + if ( (v32 & 0x200) != 0 && v37 ) + { + if ( v31 == 64 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v9 = (struct _Unwind_Exception *)((char *)v9 - 2); + } + else + { + v9 = (struct _Unwind_Exception *)((char *)v9 - 4); + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 2); + *((_WORD *)v9 + 1) = *(_WORD *)(v30 + 2 * ((v32 >> 14) & 1) + 4); + } + *(_WORD *)v9 = *(_WORD *)(v39 + 48); + } +LABEL_5: + v10 = a3[2]; + v39 = v10; + if ( v10 > (int)lpuexcpt ) + { + v20 = v10; + v21 = 16 * ((unsigned int)(2 * v10 + 27) >> 4); + v22 = alloca(v21); + v23 = alloca(v21); + HIDWORD(v37) = &v26; + std::__pad>::_S_pad( + a3, + (void *)(unsigned __int16)v33, + &v26, + v9, + v20, + (int)lpuexcpt); + v9 = (struct _Unwind_Exception *)HIDWORD(v37); + lpuexcpt = (struct _Unwind_Exception *)v39; + } + v11 = v34; + a3[2] = 0; + LOBYTE(v39) = v11; + if ( !v11 ) + { + v12 = (struct _Unwind_Exception *)(*(int (__thiscall **)(int, struct _Unwind_Exception *, struct _Unwind_Exception *))(*(_DWORD *)v38 + 48))( + v38, + v9, + lpuexcpt); + v13 = v39; + if ( v12 != lpuexcpt ) + v13 = 1; + LOBYTE(v39) = v13; + } + lpuexcpt = (struct _Unwind_Exception *)(unsigned __int8)v39; + return v38; +} +// 53F78C: using guessed type signed __int32 std::numpunct::id; +// 5605C0: using guessed type int (*off_5605C0)(); +// 4B5550: using guessed type __int16 anonymous_1[14]; + +//----- (004B5920) -------------------------------------------------------- +int __stdcall std::num_put>::_M_group_float( + char *a1, + int a2, + __int16 a3, + char *Src, + _WORD *a5, + char *a6, + _DWORD *a7) +{ + int v7; // ebx + _WORD *v8; // edx + int v9; // ebp + int v10; // eax + int result; // eax + + if ( Src ) + { + v7 = (Src - a6) >> 1; + v8 = std::__add_grouping(a5, a3, a1, a2, a6, Src); + v9 = v8 - a5; + v10 = 0; + if ( *a7 != v7 ) + { + memcpy(v8, Src, 2 * (*a7 - v7)); + v10 = *a7 - v7; + } + result = v9 + v10; + *a7 = result; + } + else + { + result = std::__add_grouping(a5, a3, a1, a2, a6, &a6[2 * *a7]) - a5; + *a7 = result; + } + return result; +} + +//----- (004B59F0) -------------------------------------------------------- +int *__thiscall std::num_put>::_M_insert_float( + void *this, + int *a2, + int a3, + std::__num_base *a4, + int a5, + void *a6, + double a7) +{ + int v7; // eax + int v8; // edx + void *v9; // esp + void *v10; // esp + int v11; // eax + void *v12; // ecx + int v13; // eax + void *v14; // esp + void *v15; // esp + char *v16; // edx + char v17; // cl + int v18; // eax + char v19; // dl + int v20; // eax + int v21; // eax + char v22; // bl + int v24; // eax + void *v25; // esp + void *v26; // esp + size_t v27; // esi + int v28; // eax + void *v29; // esp + void *v30; // esp + __int16 *v31; // ecx + int v32; // ecx + int v33; // eax + void *v34; // esp + void *v35; // esp + int v36; // eax + int v37; // eax + void *v38; // esp + void *v39; // esp + char v40; // al + _DWORD *v41; // eax + int v42; // esi + int v43; // [esp-34h] [ebp-ECh] + int v44; // [esp-30h] [ebp-E8h] + int v45; // [esp-2Ch] [ebp-E4h] + int v46; // [esp-28h] [ebp-E0h] + _DWORD v47[11]; // [esp-20h] [ebp-D8h] BYREF + _WORD *v48; // [esp+Ch] [ebp-ACh] + __int16 v49; // [esp+20h] [ebp-98h] BYREF + __int16 v50; // [esp+22h] [ebp-96h] BYREF + std::locale::_Impl *v51; // [esp+2Ch] [ebp-8Ch] + int v52; // [esp+30h] [ebp-88h] + int v53; // [esp+34h] [ebp-84h] + void *v54; // [esp+38h] [ebp-80h] + std::locale::facet *v55; // [esp+3Ch] [ebp-7Ch] + int v56; // [esp+40h] [ebp-78h] + int *v57; // [esp+44h] [ebp-74h] + int v58; // [esp+48h] [ebp-70h] + int v59; // [esp+4Ch] [ebp-6Ch] + size_t MaxCount[2]; // [esp+50h] [ebp-68h] + void *Buf; // [esp+58h] [ebp-60h] + int v62; // [esp+98h] [ebp-20h] BYREF + int *c_locale; // [esp+9Ch] [ebp-1Ch] BYREF + char v64[24]; // [esp+A0h] [ebp-18h] BYREF + + v54 = this; + v57 = a2; + *(double *)MaxCount = a7; + v56 = a3; + v53 = a5; + Buf = a6; + v59 = (int)a4 + 108; + v55 = (std::locale::facet *)std::locale::id::_M_id(&std::numpunct::id); + v52 = *(_DWORD *)(*((_DWORD *)a4 + 27) + 12) + 4 * (_DWORD)v55; + v58 = *(_DWORD *)v52; + if ( !v58 ) + { + v41 = operator new(0xA8u); + v42 = v59; + v41[1] = 0; + *v41 = &off_5605C0; + v41[2] = 0; + v41[3] = 0; + *((_BYTE *)v41 + 16) = 0; + v41[5] = 0; + v41[6] = 0; + v41[7] = 0; + v41[8] = 0; + v41[9] = 0; + *((_BYTE *)v41 + 164) = 0; + v51 = (std::locale::_Impl *)v41; + std::__numpunct_cache::_M_cache((int)v41, v42); + std::locale::_Impl::_M_install_cache(*((_DWORD *)a4 + 27), v51, v55, v47[10]); + v58 = *(_DWORD *)v52; + } + v7 = 6; + if ( *((int *)a4 + 1) >= 0 ) + v7 = *((_DWORD *)a4 + 1); + v55 = (std::locale::facet *)v7; + std::__num_base::_S_format_float(a4, (const std::ios_base *)v64, (char *)(char)Buf); + v8 = *((_DWORD *)a4 + 3) & 0x104; + v9 = alloca(64); + v10 = alloca(64); + Buf = v47; + if ( v8 == 260 ) + { + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + v36 = std::__convert_from_v(&c_locale, (char *)Buf, 45, v64, MaxCount[0], MaxCount[1]); + v62 = v36; + if ( v36 > 44 ) + { + v55 = (std::locale::facet *)(v36 + 1); + v37 = 16 * ((unsigned int)(v36 + 28) >> 4); + v38 = alloca(v37); + v39 = alloca(v37); + Buf = v47; + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + v62 = std::__convert_from_v(&c_locale, (char *)Buf, (int)v55, v64, MaxCount[0], MaxCount[1]); + } + } + else + { + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + v11 = std::__convert_from_v(&c_locale, (char *)Buf, 45, v64, v55, MaxCount[0], MaxCount[1]); + v62 = v11; + if ( v11 > 44 ) + { + v52 = v11 + 1; + v24 = 16 * ((unsigned int)(v11 + 28) >> 4); + v25 = alloca(v24); + v26 = alloca(v24); + Buf = v47; + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + v62 = std::__convert_from_v(&c_locale, (char *)Buf, v52, v64, v55, MaxCount[0], MaxCount[1]); + } + } + v12 = std::use_facet>(v59); + v13 = 16 * ((unsigned int)(2 * v62 + 27) >> 4); + v14 = alloca(v13); + v15 = alloca(v13); + v55 = (std::locale::facet *)v47; + v59 = (int)v47; + (*(void (__thiscall **)(void *, void *, char *, _DWORD *, int, int, int, int))(*(_DWORD *)v12 + 44))( + v12, + Buf, + (char *)Buf + v62, + v47, + v43, + v44, + v45, + v46); + MaxCount[0] = v62; + if ( !v62 ) + { + if ( *(_BYTE *)(v58 + 16) ) + { + v16 = 0; + goto LABEL_19; + } +LABEL_11: + v18 = *((_DWORD *)a4 + 2); + Buf = (void *)v18; + if ( v18 <= (int)MaxCount[0] ) + goto LABEL_12; + goto LABEL_22; + } + v16 = (char *)memchr(Buf, 46, MaxCount[0]); + v17 = *(_BYTE *)(v58 + 16); + if ( !v16 ) + { + if ( v17 ) + { + if ( (int)MaxCount[0] <= 2 ) + goto LABEL_19; + v40 = *((_BYTE *)Buf + 1); + if ( v40 <= 57 ) + { + LOBYTE(v52) = *((_BYTE *)Buf + 2); + if ( (unsigned __int8)(v52 - 48) <= 9u && v40 > 47 ) + goto LABEL_19; + } + } + goto LABEL_11; + } + v16 = (char *)v55 + 2 * (v16 - (_BYTE *)Buf); + *(_WORD *)v16 = *(_WORD *)(v58 + 36); + if ( !v17 ) + goto LABEL_11; +LABEL_19: + v27 = MaxCount[0]; + v28 = 16 * ((4 * MaxCount[0] + 27) >> 4); + v29 = alloca(v28); + v30 = alloca(v28); + v52 = (int)&v49; + if ( ((*(_BYTE *)Buf - 43) & 0xFD) != 0 ) + { + MaxCount[0] = 0; + v31 = (__int16 *)v52; + } + else + { + MaxCount[0] = 1; + v49 = *(_WORD *)v55; + v62 = v27 - 1; + v31 = &v50; + v59 = (int)v55 + 2; + } + std::num_put>::_M_group_float( + *(char **)(v58 + 8), + *(_DWORD *)(v58 + 12), + *(_WORD *)(v58 + 38), + v16, + v31, + (char *)v59, + &v62); + MaxCount[0] += v62; + v62 = MaxCount[0]; + v59 = v52; + v18 = *((_DWORD *)a4 + 2); + Buf = (void *)v18; + if ( v18 > (int)MaxCount[0] ) + { +LABEL_22: + v32 = v18; + v33 = 16 * ((unsigned int)(2 * v18 + 27) >> 4); + v34 = alloca(v33); + v35 = alloca(v33); + v48 = (_WORD *)v59; + v59 = (int)&v49; + std::__pad>::_S_pad( + a4, + (void *)(unsigned __int16)v53, + &v49, + v48, + v32, + MaxCount[0]); + v62 = (int)Buf; + MaxCount[0] = (size_t)Buf; + } +LABEL_12: + v19 = v56; + *((_DWORD *)a4 + 2) = 0; + LOBYTE(Buf) = v19; + if ( !v19 ) + { + v20 = *v57; + v47[8] = v59; + v47[9] = MaxCount[0]; + v21 = (*(int (__thiscall **)(int *, int, size_t))(v20 + 48))(v57, v59, MaxCount[0]); + v22 = (char)Buf; + if ( v21 != MaxCount[0] ) + v22 = 1; + LOBYTE(Buf) = v22; + } + MaxCount[0] = (unsigned __int8)Buf; + return v57; +} +// 4B5B72: variable 'v43' is possibly undefined +// 4B5B72: variable 'v44' is possibly undefined +// 4B5B72: variable 'v45' is possibly undefined +// 4B5B72: variable 'v46' is possibly undefined +// 53F78C: using guessed type signed __int32 std::numpunct::id; +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (004B6010) -------------------------------------------------------- +// bad sp value at call has been detected, the output may be wrong! +int __thiscall std::num_put>::_M_insert_float( + void *this, + int a2, + int a3, + int *a4, + int a5, + char a6, + long double a7) +{ + int v7; // esi + void *v8; // esp + void *v9; // esp + int v10; // eax + int *v11; // ecx + int v12; // eax + void *v13; // esp + void *v14; // esp + int v15; // eax + int v16; // esi + char *v17; // edx + char v18; // cl + signed int v19; // ebx + int v21; // eax + void *v22; // esp + void *v23; // esp + int v24; // eax + void *v25; // esp + void *v26; // esp + __int16 *v27; // ebx + int v28; // esi + int v29; // eax + void *v30; // esp + void *v31; // esp + int v32; // eax + int v33; // eax + void *v34; // esp + void *v35; // esp + int v36; // [esp-44h] [ebp-BCh] + int v37; // [esp-40h] [ebp-B8h] + int v41; // [esp-3Ch] [ebp-B4h] + int v43; // [esp-38h] [ebp-B0h] + int v44; // [esp-34h] [ebp-ACh] + __int16 v45; // [esp-30h] [ebp-A8h] BYREF + char v46; // [esp-2Eh] [ebp-A6h] BYREF + const std::ios_base *v47; // [esp+4h] [ebp-74h] + char *v48; // [esp+8h] [ebp-70h] + int v49; // [esp+14h] [ebp-64h] + __int16 v50; // [esp+20h] [ebp-58h] BYREF + __int16 v51; // [esp+22h] [ebp-56h] BYREF + int v52; // [esp+24h] [ebp-54h] + void *v53; // [esp+28h] [ebp-50h] + int v54; // [esp+2Ch] [ebp-4Ch] + int v55; // [esp+30h] [ebp-48h] + int v56; // [esp+34h] [ebp-44h] + struct _Unwind_Exception *v57; // [esp+38h] [ebp-40h] + int v58; // [esp+3Ch] [ebp-3Ch] + size_t MaxCount; // [esp+48h] [ebp-30h] BYREF + int *c_locale; // [esp+4Ch] [ebp-2Ch] BYREF + char v61[40]; // [esp+50h] [ebp-28h] BYREF + + v53 = this; + v56 = a2; + v54 = a3; + v52 = a5; + v58 = (int)(a4 + 27); + v57 = std::__use_cache>::operator()(a4 + 27); + v7 = a4[1]; + v48 = (char *)a6; + v47 = (const std::ios_base *)v61; + if ( v7 < 0 ) + v7 = 6; + std::__num_base::_S_format_float((std::__num_base *)a4, v47, v48); + v55 = a4[3]; + v8 = alloca(80); + v9 = alloca(80); + if ( (v55 & 0x104) == 260 ) + { + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + v32 = std::__convert_from_v(&c_locale, (char *)&v45, 54, v61, *(_QWORD *)&a7, HIDWORD(a7)); + MaxCount = v32; + if ( v32 > 53 ) + { + v55 = v32 + 1; + v33 = 16 * ((unsigned int)(v32 + 28) >> 4); + v34 = alloca(v33); + v35 = alloca(v33); + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + MaxCount = std::__convert_from_v(&c_locale, (char *)&v45, v55, v61, *(_QWORD *)&a7, HIDWORD(a7)); + } + } + else + { + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + v10 = std::__convert_from_v(&c_locale, (char *)&v45, 54, v61, v7, *(_QWORD *)&a7, HIDWORD(a7)); + MaxCount = v10; + if ( v10 > 53 ) + { + v55 = v10 + 1; + v21 = 16 * ((unsigned int)(v10 + 28) >> 4); + v22 = alloca(v21); + v23 = alloca(v21); + c_locale = (int *)std::locale::facet::_S_get_c_locale(); + MaxCount = std::__convert_from_v(&c_locale, (char *)&v45, v55, v61, v7, *(_QWORD *)&a7, HIDWORD(a7)); + } + } + v11 = (int *)std::use_facet>(v58); + v12 = 16 * ((2 * MaxCount + 27) >> 4); + v13 = alloca(v12); + v14 = alloca(v12); + v15 = *v11; + v58 = (int)&v45; + (*(void (__thiscall **)(int *, __int16 *, char *, __int16 *, int, int, int, int, int))(v15 + 44))( + v11, + &v45, + (char *)&v45 + MaxCount, + &v45, + v36, + v37, + v41, + v43, + v44); + v16 = MaxCount; + if ( !MaxCount ) + { + if ( *((_BYTE *)v57 + 16) ) + { + v17 = 0; + goto LABEL_15; + } +LABEL_9: + v19 = a4[2]; + if ( v16 >= v19 ) + goto LABEL_10; + goto LABEL_18; + } + v17 = (char *)memchr(&v45, 46, MaxCount); + v18 = *((_BYTE *)v57 + 16); + if ( !v17 ) + { + if ( v18 && (v16 <= 2 || SHIBYTE(v45) <= 57 && (unsigned __int8)(v46 - 48) <= 9u && SHIBYTE(v45) > 47) ) + goto LABEL_15; + goto LABEL_9; + } + v17 = (char *)(&v45 + v17 - (char *)&v45); + *(_WORD *)v17 = *((_WORD *)v57 + 18); + if ( !v18 ) + goto LABEL_9; +LABEL_15: + v24 = 16 * ((unsigned int)(4 * v16 + 27) >> 4); + v25 = alloca(v24); + v26 = alloca(v24); + if ( (((_BYTE)v45 - 43) & 0xFD) != 0 ) + { + v27 = &v50; + v28 = 0; + } + else + { + v27 = &v51; + v58 = (int)&v46; + v50 = v45; + MaxCount = v16 - 1; + v28 = 1; + } + v55 = (int)&v50; + std::num_put>::_M_group_float( + *((char **)v57 + 2), + *((_DWORD *)v57 + 3), + *((_WORD *)v57 + 19), + v17, + v27, + (char *)v58, + &MaxCount); + v16 = MaxCount + v28; + MaxCount = v16; + v58 = v55; + v19 = a4[2]; + if ( v16 >= v19 ) + goto LABEL_10; +LABEL_18: + v29 = 16 * ((unsigned int)(2 * v19 + 27) >> 4); + v30 = alloca(v29); + v31 = alloca(v29); + v49 = v16; + v16 = v19; + std::__pad>::_S_pad(a4, (void *)(unsigned __int16)v52, &v50, (_WORD *)v58, v19, v49); + MaxCount = v19; + v58 = (int)&v50; +LABEL_10: + a4[2] = 0; + if ( !(_BYTE)v54 ) + (*(int (__thiscall **)(int, int, int))(*(_DWORD *)v56 + 48))(v56, v58, v16); + return v56; +} +// 4B6138: bad sp value at call +// 4B6118: variable 'v36' is possibly undefined +// 4B6118: variable 'v37' is possibly undefined +// 4B6118: variable 'v41' is possibly undefined +// 4B6118: variable 'v43' is possibly undefined +// 4B6118: variable 'v44' is possibly undefined + +//----- (004B63F0) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + _DWORD *a4, + unsigned __int16 a5, + int a6) +{ + int (__stdcall *v6)(int, int, _DWORD *, unsigned __int16, int); // eax + int v7; // edi + int result; // eax + + v6 = *(int (__stdcall **)(int, int, _DWORD *, unsigned __int16, int))(*(_DWORD *)this + 36); + if ( v6 != std::num_put>::do_put ) + return v6(a2, a3, a4, a5, a6); + v7 = a4[3]; + a4[3] = v7 & 0xFFFFBDB5 | 0x208; + result = std::num_put>::_M_insert_int(a2, a3, a4, a5, a6); + a4[3] = v7; + return result; +} + +//----- (004B6490) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + int a4, + unsigned __int16 a5, + unsigned __int8 a6) +{ + return (*(int (__thiscall **)(void *, int, int, int, _DWORD, _DWORD))(*(_DWORD *)this + 8))(this, a2, a3, a4, a5, a6); +} + +//----- (004B64B0) -------------------------------------------------------- +int *__thiscall std::num_put>::put( + void *this, + int *a2, + int a3, + std::__num_base *a4, + unsigned __int16 a5, + double a6) +{ + int *(__thiscall *v6)(void *, int *, int, std::__num_base *, unsigned __int16, double); // eax + + v6 = *(int *(__thiscall **)(void *, int *, int, std::__num_base *, unsigned __int16, double))(*(_DWORD *)this + 28); + if ( v6 == std::num_put>::do_put ) + return std::num_put>::_M_insert_float(this, a2, a3, a4, a5, 0, a6); + else + return (int *)((int (__stdcall *)(int *, int, std::__num_base *, _DWORD, _DWORD, _DWORD))v6)( + a2, + a3, + a4, + a5, + LODWORD(a6), + HIDWORD(a6)); +} + +//----- (004B6520) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + int *a4, + unsigned __int16 a5, + long double a6) +{ + int (__thiscall *v6)(void *, int, int, int *, unsigned __int16, long double); // eax + + v6 = *(int (__thiscall **)(void *, int, int, int *, unsigned __int16, long double))(*(_DWORD *)this + 32); + if ( v6 == std::num_put>::do_put ) + return std::num_put>::_M_insert_float( + this, + a2, + a3, + a4, + a5, + 76, + a6); + else + return ((int (__stdcall *)(int, int, int *, _DWORD, _DWORD, _DWORD, _DWORD))v6)( + a2, + a3, + a4, + a5, + LODWORD(a6), + DWORD1(a6), + HIDWORD(a6)); +} + +//----- (004B6590) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + _DWORD *a4, + unsigned __int16 a5, + int a6) +{ + int (__stdcall *v6)(int, int, _DWORD *, unsigned __int16, int); // eax + + v6 = *(int (__stdcall **)(int, int, _DWORD *, unsigned __int16, int))(*(_DWORD *)this + 12); + if ( v6 == std::num_put>::do_put ) + return std::num_put>::_M_insert_int(a2, a3, a4, a5, a6); + else + return v6(a2, a3, a4, a5, a6); +} + +//----- (004B65F0) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + _DWORD *a4, + unsigned __int16 a5, + int a6) +{ + int (__stdcall *v6)(int, int, _DWORD *, unsigned __int16, int); // eax + + v6 = *(int (__stdcall **)(int, int, _DWORD *, unsigned __int16, int))(*(_DWORD *)this + 16); + if ( v6 == std::num_put>::do_put ) + return std::num_put>::_M_insert_int(a2, a3, a4, a5, a6); + else + return v6(a2, a3, a4, a5, a6); +} + +//----- (004B6650) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + _DWORD *a4, + unsigned __int16 a5, + __int64 a6) +{ + int (__stdcall *v6)(int, int, _DWORD *, unsigned __int16, __int64); // eax + + v6 = *(int (__stdcall **)(int, int, _DWORD *, unsigned __int16, __int64))(*(_DWORD *)this + 20); + if ( v6 == std::num_put>::do_put ) + return std::num_put>::_M_insert_int(a2, a3, a4, a5, a6); + else + return ((int (__stdcall *)(int, int, _DWORD *, _DWORD, _DWORD, _DWORD))v6)(a2, a3, a4, a5, a6, HIDWORD(a6)); +} + +//----- (004B66C0) -------------------------------------------------------- +int __thiscall std::num_put>::put( + void *this, + int a2, + int a3, + _DWORD *a4, + unsigned __int16 a5, + int a6, + int a7) +{ + int (__stdcall *v7)(int, int, _DWORD *, unsigned __int16, int, int); // eax + + v7 = *(int (__stdcall **)(int, int, _DWORD *, unsigned __int16, int, int))(*(_DWORD *)this + 24); + if ( v7 == std::num_put>::do_put ) + return std::num_put>::_M_insert_int( + a2, + a3, + a4, + a5, + a6, + a7); + else + return v7(a2, a3, a4, a5, a6, a7); +} + +//----- (004B6730) -------------------------------------------------------- +_WORD *__stdcall std::num_put>::_M_pad( + unsigned __int16 a1, + int a2, + _DWORD *a3, + _WORD *Size, + _WORD *a5, + int *a6) +{ + _WORD *result; // eax + + result = std::__pad>::_S_pad(a3, (void *)a1, Size, a5, a2, *a6); + *a6 = a2; + return result; +} + +//----- (004B6780) -------------------------------------------------------- +int __stdcall std::num_put>::do_put( + int a1, + int a2, + _DWORD *a3, + unsigned __int16 a4, + int a5) +{ + int v5; // edi + int result; // eax + + v5 = a3[3]; + a3[3] = v5 & 0xFFFFBDB5 | 0x208; + result = std::num_put>::_M_insert_int(a1, a2, a3, a4, a5); + a3[3] = v5; + return result; +} + +//----- (004B6800) -------------------------------------------------------- +int __stdcall std::num_put>::do_put( + int a1, + int a2, + _DWORD *a3, + unsigned __int16 a4, + int a5) +{ + int v5; // edi + struct _Unwind_Exception *v7; // eax + int v8; // ecx + int v9; // eax + int v10; // edx + int v11; // eax + int v12; // edx + int v13; // eax + void *v14; // esp + __int16 v15; // di + void *v16; // esp + __int16 *v17; // eax + int v18; // edi + int v19; // edi + int v20; // eax + char v21; // cl + int v22; // edi + int v23; // edi + int v24; // eax + char v25; // dl + int v26; // [esp+20h] [ebp-68h] BYREF + int *v27; // [esp+24h] [ebp-64h] + int v28; // [esp+28h] [ebp-60h] + int v29; // [esp+2Ch] [ebp-5Ch] + __int16 v30; // [esp+32h] [ebp-56h] + int v31; // [esp+34h] [ebp-54h] + int v32; // [esp+38h] [ebp-50h] + int v33; // [esp+3Ch] [ebp-4Ch] + + v5 = a3[3]; + v30 = a4; + v31 = v5; + if ( (v5 & 1) == 0 ) + return std::num_put>::_M_insert_int( + a1, + a2, + a3, + a4, + (unsigned __int8)a5); + v33 = a5; + v7 = std::__use_cache>::operator()(a3 + 27); + if ( (_BYTE)a5 ) + { + v8 = *((_DWORD *)v7 + 5); + v9 = *((_DWORD *)v7 + 6); + } + else + { + v8 = *((_DWORD *)v7 + 7); + v9 = *((_DWORD *)v7 + 8); + } + v29 = v8; + v32 = v9; + v10 = v9; + LOBYTE(v33) = a2; + v11 = a3[2]; + if ( v32 >= v11 ) + { + a3[2] = 0; + if ( !(_BYTE)a2 ) + LOBYTE(v33) = v32 != (*(int (__thiscall **)(int, int, int))(*(_DWORD *)a1 + 48))(a1, v29, v32); + return a1; + } + v12 = v11 - v10; + v28 = v12; + v13 = 16 * ((unsigned int)(2 * v12 + 27) >> 4); + v14 = alloca(v13); + v15 = v30; + v16 = alloca(v13); + v17 = (__int16 *)&v26; + v27 = &v26; + do + { + *v17++ = v15; + --v12; + } + while ( v12 ); + a3[2] = 0; + if ( (v31 & 0xB0) == 32 ) + { + if ( !(_BYTE)a2 ) + { + v22 = v32; + if ( v22 == (*(int (__thiscall **)(int, int, int))(*(_DWORD *)a1 + 48))(a1, v29, v32) ) + { + v23 = v28; + v24 = (*(int (__thiscall **)(int, int *, int))(*(_DWORD *)a1 + 48))(a1, v27, v28); + v25 = v33; + if ( v23 != v24 ) + v25 = 1; + LOBYTE(v33) = v25; + return a1; + } +LABEL_23: + LOBYTE(v33) = 1; + } + } + else if ( !(_BYTE)a2 ) + { + v18 = v28; + if ( v18 == (*(int (__thiscall **)(int, int *, int))(*(_DWORD *)a1 + 48))(a1, v27, v28) ) + { + v19 = v32; + v20 = (*(int (__thiscall **)(int, int, int))(*(_DWORD *)a1 + 48))(a1, v29, v32); + v21 = v33; + if ( v19 != v20 ) + v21 = 1; + LOBYTE(v33) = v21; + return a1; + } + goto LABEL_23; + } + return a1; +} + +//----- (004B6A30) -------------------------------------------------------- +int *__thiscall std::num_put>::do_put( + void *this, + int *a2, + int a3, + std::__num_base *a4, + unsigned __int16 a5, + double a6) +{ + return std::num_put>::_M_insert_float(this, a2, a3, a4, a5, 0, a6); +} + +//----- (004B6A80) -------------------------------------------------------- +int __thiscall std::num_put>::do_put( + void *this, + int a2, + int a3, + int *a4, + unsigned __int16 a5, + long double a6) +{ + return std::num_put>::_M_insert_float( + this, + a2, + a3, + a4, + a5, + 76, + a6); +} + +//----- (004B6AD0) -------------------------------------------------------- +int __stdcall std::num_put>::do_put( + int a1, + int a2, + _DWORD *a3, + unsigned __int16 a4, + int a5) +{ + return std::num_put>::_M_insert_int(a1, a2, a3, a4, a5); +} + +//----- (004B6AE0) -------------------------------------------------------- +int __stdcall std::num_put>::do_put( + int a1, + int a2, + _DWORD *a3, + unsigned __int16 a4, + int a5) +{ + return std::num_put>::_M_insert_int(a1, a2, a3, a4, a5); +} + +//----- (004B6AF0) -------------------------------------------------------- +int __stdcall std::num_put>::do_put( + int a1, + int a2, + _DWORD *a3, + unsigned __int16 a4, + __int64 a5) +{ + return std::num_put>::_M_insert_int(a1, a2, a3, a4, a5); +} + +//----- (004B6B00) -------------------------------------------------------- +int __stdcall std::num_put>::do_put( + int a1, + int a2, + _DWORD *a3, + unsigned __int16 a4, + int a5, + int a6) +{ + return std::num_put>::_M_insert_int( + a1, + a2, + a3, + a4, + a5, + a6); +} + +//----- (004B6B10) -------------------------------------------------------- +_DWORD *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + _DWORD *this, + int a2) +{ + _DWORD *v2; // esi + _DWORD *v3; // ebx + _DWORD *i; // edi + char v5; // al + _DWORD *v6; // edx + + v2 = this + 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v6 ) + { + v5 = std::operator<((int)(i + 4), a2); + v6 = (_DWORD *)i[3]; + if ( !v5 ) + v6 = (_DWORD *)i[2]; + if ( !v5 ) + v3 = i; + } + if ( v2 != v3 && (unsigned __int8)std::operator<(a2, (int)(v3 + 4)) ) + return v2; + return v3; +} + +//----- (004B6B70) -------------------------------------------------------- +const char *std::bad_cast::what() +{ + return "std::bad_cast"; +} + +//----- (004B6B80) -------------------------------------------------------- +int __fastcall std::ios_base::failure::what(int a1) +{ + return *(_DWORD *)(a1 + 4); +} + +//----- (004B6BA0) -------------------------------------------------------- +int __stdcall std::messages::_M_convert_to_char(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (004B6BB0) -------------------------------------------------------- +_DWORD *__thiscall std::messages::_M_convert_from_char(_DWORD *this, int a2, int a3) +{ + *this = std::string::_S_construct(0, 0); + return this; +} + +//----- (004B6BE0) -------------------------------------------------------- +void *__thiscall std::messages::get(void *this, int a2, int a3, int a4, int a5, int a6) +{ + (*(void (__thiscall **)(void *, int, int, int, int, int))(*(_DWORD *)a2 + 12))(this, a2, a3, a4, a5, a6); + return this; +} + +//----- (004B6C20) -------------------------------------------------------- +int __thiscall std::messages::open(void *this, int a2, int a3) +{ + int (__stdcall *v3)(int, int); // eax + + v3 = *(int (__stdcall **)(int, int))(*(_DWORD *)this + 8); + if ( v3 == std::messages::do_open ) + return 0; + else + return v3(a2, a3); +} + +//----- (004B6C40) -------------------------------------------------------- +int __thiscall std::messages::open(void *this, int a2, int a3, int a4) +{ + int (__stdcall *v4)(int, int); // edx + + v4 = *(int (__stdcall **)(int, int))(*(_DWORD *)this + 8); + if ( v4 == std::messages::do_open ) + return 0; + else + return v4(a2, a3); +} + +//----- (004B6C80) -------------------------------------------------------- +int (__stdcall *__thiscall std::messages::close(void *this, int a2))(int) +{ + int (__stdcall *result)(int); // eax + + result = *(int (__stdcall **)(int))(*(_DWORD *)this + 16); + if ( result != std::messages::do_close ) + return (int (__stdcall *)(int))result(a2); + return result; +} +// 4B6CD0: using guessed type int __stdcall std::messages::do_close(int); + +//----- (004B6CA0) -------------------------------------------------------- +_DWORD *__thiscall std::messages::do_get(_DWORD *this, int a2, int a3, int a4, int a5, std::string *a6) +{ + const std::string *v8; // [esp+4h] [ebp-18h] + + std::string::string(this, a6, v8); + return this; +} +// 4B6CAD: variable 'v8' is possibly undefined + +//----- (004B6CC0) -------------------------------------------------------- +int __stdcall std::messages::do_open(int a1, int a2) +{ + return 0; +} + +//----- (004B6CE0) -------------------------------------------------------- +int __stdcall std::messages::_M_convert_to_char(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (004B6CF0) -------------------------------------------------------- +_DWORD *__thiscall std::messages::_M_convert_from_char(_DWORD *this, int a2, int a3) +{ + *this = std::wstring::_S_construct(0, 0); + return this; +} + +//----- (004B6D20) -------------------------------------------------------- +void *__thiscall std::messages::get(void *this, int a2, int a3, int a4, int a5, int a6) +{ + (*(void (__thiscall **)(void *, int, int, int, int, int))(*(_DWORD *)a2 + 12))(this, a2, a3, a4, a5, a6); + return this; +} + +//----- (004B6D60) -------------------------------------------------------- +int __thiscall std::messages::open(void *this, int a2, int a3) +{ + int (__stdcall *v3)(int, int); // eax + + v3 = *(int (__stdcall **)(int, int))(*(_DWORD *)this + 8); + if ( v3 == std::messages::do_open ) + return 0; + else + return v3(a2, a3); +} + +//----- (004B6D80) -------------------------------------------------------- +int __thiscall std::messages::open(void *this, int a2, int a3, int a4) +{ + int (__stdcall *v4)(int, int); // edx + + v4 = *(int (__stdcall **)(int, int))(*(_DWORD *)this + 8); + if ( v4 == std::messages::do_open ) + return 0; + else + return v4(a2, a3); +} + +//----- (004B6DC0) -------------------------------------------------------- +int (__stdcall *__thiscall std::messages::close(void *this, int a2))(int) +{ + int (__stdcall *result)(int); // eax + + result = *(int (__stdcall **)(int))(*(_DWORD *)this + 16); + if ( result != std::messages::do_close ) + return (int (__stdcall *)(int))result(a2); + return result; +} +// 4B6E10: using guessed type int __stdcall std::messages::do_close(int); + +//----- (004B6DE0) -------------------------------------------------------- +_DWORD *__thiscall std::messages::do_get(_DWORD *this, int a2, int a3, int a4, int a5, _DWORD *a6) +{ + std::wstring::basic_string(this, a6); + return this; +} + +//----- (004B6E00) -------------------------------------------------------- +int __stdcall std::messages::do_open(int a1, int a2) +{ + return 0; +} + +//----- (004B6E20) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::do_grouping(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 8), (int)v4); + return this; +} +// 4B6E20: using guessed type int var_D[3]; + +//----- (004B6E50) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::do_truename(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 20), (int)v4); + return this; +} +// 4B6E50: using guessed type int var_D[3]; + +//----- (004B6E80) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::do_falsename(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 28), (int)v4); + return this; +} +// 4B6E80: using guessed type int var_D[3]; + +//----- (004B6EB0) -------------------------------------------------------- +int __fastcall std::numpunct::decimal_point(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 8); + if ( (char *)v1 == (char *)std::numpunct::do_decimal_point ) + return *(unsigned __int8 *)(a1[2] + 36); + else + return v1(); +} + +//----- (004B6ED0) -------------------------------------------------------- +int __fastcall std::numpunct::thousands_sep(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 12); + if ( (char *)v1 == (char *)std::numpunct::do_thousands_sep ) + return *(unsigned __int8 *)(a1[2] + 37); + else + return v1(); +} + +//----- (004B6EF0) -------------------------------------------------------- +int __fastcall std::numpunct::do_decimal_point(int a1) +{ + return *(unsigned __int8 *)(*(_DWORD *)(a1 + 8) + 36); +} + +//----- (004B6F00) -------------------------------------------------------- +int __fastcall std::numpunct::do_thousands_sep(int a1) +{ + return *(unsigned __int8 *)(*(_DWORD *)(a1 + 8) + 37); +} + +//----- (004B6F10) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::grouping(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 16); + if ( (char *)v3 == (char *)std::numpunct::do_grouping ) + std::string::string(this, *(char **)(a2[2] + 8), (int)v5); + else + v3(a2); + return this; +} +// 4B6F10: using guessed type int var_D[3]; + +//----- (004B6F70) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::truename(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 20); + if ( (char *)v3 == (char *)std::numpunct::do_truename ) + std::string::string(this, *(char **)(a2[2] + 20), (int)v5); + else + v3(a2); + return this; +} +// 4B6F70: using guessed type int var_D[3]; + +//----- (004B6FD0) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::falsename(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 24); + if ( (char *)v3 == (char *)std::numpunct::do_falsename ) + std::string::string(this, *(char **)(a2[2] + 28), (int)v5); + else + v3(a2); + return this; +} +// 4B6FD0: using guessed type int var_D[3]; + +//----- (004B7030) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::do_grouping(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::string::string(this, *(char **)(*(_DWORD *)(a2 + 8) + 8), (int)v4); + return this; +} +// 4B7030: using guessed type int var_D[3]; + +//----- (004B7060) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::do_truename(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::wstring::basic_string(this, *(wchar_t **)(*(_DWORD *)(a2 + 8) + 20), (int)v4); + return this; +} +// 4B7060: using guessed type int var_D[3]; + +//----- (004B7090) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::do_falsename(_DWORD *this, int a2) +{ + int v4[3]; // [esp+1Fh] [ebp-Dh] BYREF + + std::wstring::basic_string(this, *(wchar_t **)(*(_DWORD *)(a2 + 8) + 28), (int)v4); + return this; +} +// 4B7090: using guessed type int var_D[3]; + +//----- (004B70C0) -------------------------------------------------------- +int __fastcall std::numpunct::decimal_point(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 8); + if ( (char *)v1 == (char *)std::numpunct::do_decimal_point ) + return *(unsigned __int16 *)(a1[2] + 36); + else + return v1(); +} + +//----- (004B70E0) -------------------------------------------------------- +int __fastcall std::numpunct::thousands_sep(_DWORD *a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*a1 + 12); + if ( (char *)v1 == (char *)std::numpunct::do_thousands_sep ) + return *(unsigned __int16 *)(a1[2] + 38); + else + return v1(); +} + +//----- (004B7100) -------------------------------------------------------- +int __fastcall std::numpunct::do_decimal_point(int a1) +{ + return *(unsigned __int16 *)(*(_DWORD *)(a1 + 8) + 36); +} + +//----- (004B7110) -------------------------------------------------------- +int __fastcall std::numpunct::do_thousands_sep(int a1) +{ + return *(unsigned __int16 *)(*(_DWORD *)(a1 + 8) + 38); +} + +//----- (004B7120) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::grouping(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 16); + if ( (char *)v3 == (char *)std::numpunct::do_grouping ) + std::string::string(this, *(char **)(a2[2] + 8), (int)v5); + else + v3(a2); + return this; +} +// 4B7120: using guessed type int var_D[3]; + +//----- (004B7180) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::truename(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 20); + if ( (char *)v3 == (char *)std::numpunct::do_truename ) + std::wstring::basic_string(this, *(wchar_t **)(a2[2] + 20), (int)v5); + else + v3(a2); + return this; +} +// 4B7180: using guessed type int var_D[3]; + +//----- (004B71E0) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::falsename(_DWORD *this, _DWORD *a2) +{ + void (__stdcall *v3)(_DWORD *); // edx + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *(void (__stdcall **)(_DWORD *))(*a2 + 24); + if ( (char *)v3 == (char *)std::numpunct::do_falsename ) + std::wstring::basic_string(this, *(wchar_t **)(a2[2] + 28), (int)v5); + else + v3(a2); + return this; +} +// 4B71E0: using guessed type int var_D[3]; + +//----- (004B7240) -------------------------------------------------------- +int __fastcall std::time_get>::date_order(int a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*(_DWORD *)a1 + 8); + if ( v1 == std::time_get>::do_date_order ) + return 0; + else + return v1(); +} + +//----- (004B7260) -------------------------------------------------------- +int __stdcall std::time_get>::do_get_date( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + _DWORD *a6) +{ + _DWORD *v6; // eax + int v7; // esi + unsigned __int64 v8; // rax + char v10; // [esp+28h] [ebp-24h] + char v11; // [esp+28h] [ebp-24h] + + v6 = std::use_facet>(a4 + 108); + v8 = std::time_get>::_M_extract_via_format( + a1, + a2, + a3, + a4, + a5, + a6, + (char *)*(_DWORD *)(v6[2] + 8)); + v7 = v8; + BYTE4(v8) = HIDWORD(v8) == -1; + v10 = BYTE4(v8) & ((_DWORD)v8 != 0); + if ( v10 ) + { + BYTE4(v8) = 0; + if ( *(_DWORD *)(v8 + 8) >= *(_DWORD *)(v8 + 12) ) + { + LODWORD(v8) = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)v8 + 36))(v8); + BYTE4(v8) = 0; + if ( (_DWORD)v8 == -1 ) + BYTE4(v8) = v10; + if ( (_DWORD)v8 == -1 ) + v7 = 0; + } + } + LOBYTE(v8) = a3 == -1; + if ( a2 ) + { + if ( a3 == -1 ) + { + LOBYTE(v8) = 0; + if ( a2[2] >= a2[3] ) + { + v11 = BYTE4(v8); + LODWORD(v8) = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + BYTE4(v8) = v11; + LOBYTE(v8) = (_DWORD)v8 == -1; + } + } + } + if ( BYTE4(v8) == (_BYTE)v8 ) + *a5 |= 2u; + return v7; +} + +//----- (004B7370) -------------------------------------------------------- +int __stdcall std::time_get>::do_get_time( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + _DWORD *a6) +{ + _DWORD *v6; // eax + int v7; // esi + unsigned __int64 v8; // rax + char v10; // [esp+28h] [ebp-24h] + char v11; // [esp+28h] [ebp-24h] + + v6 = std::use_facet>(a4 + 108); + v8 = std::time_get>::_M_extract_via_format( + a1, + a2, + a3, + a4, + a5, + a6, + (char *)*(_DWORD *)(v6[2] + 16)); + v7 = v8; + BYTE4(v8) = HIDWORD(v8) == -1; + v10 = BYTE4(v8) & ((_DWORD)v8 != 0); + if ( v10 ) + { + BYTE4(v8) = 0; + if ( *(_DWORD *)(v8 + 8) >= *(_DWORD *)(v8 + 12) ) + { + LODWORD(v8) = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)v8 + 36))(v8); + BYTE4(v8) = 0; + if ( (_DWORD)v8 == -1 ) + BYTE4(v8) = v10; + if ( (_DWORD)v8 == -1 ) + v7 = 0; + } + } + LOBYTE(v8) = a3 == -1; + if ( a2 ) + { + if ( a3 == -1 ) + { + LOBYTE(v8) = 0; + if ( a2[2] >= a2[3] ) + { + v11 = BYTE4(v8); + LODWORD(v8) = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + BYTE4(v8) = v11; + LOBYTE(v8) = (_DWORD)v8 == -1; + } + } + } + if ( BYTE4(v8) == (_BYTE)v8 ) + *a5 |= 2u; + return v7; +} + +//----- (004B7480) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_year( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + int a7) +{ + int v7; // edx + _DWORD *v8; // ebx + int v9; // eax + char v10; // si + char v11; // al + int v13; // eax + bool v14; // zf + _DWORD *v15; // eax + _DWORD *v16; // [esp+34h] [ebp-38h] + char v17; // [esp+38h] [ebp-34h] + int v18; // [esp+48h] [ebp-24h] BYREF + int v19[8]; // [esp+4Ch] [ebp-20h] BYREF + + v19[0] = 0; + v8 = std::time_get>::_M_extract_num(a1, a2, a3, a4, &v18, 0, 9999, 4u, a5, v19); + v16 = v8; + if ( v19[0] ) + { + *a6 |= 4u; + } + else + { + v9 = v18 - 1900; + if ( v18 < 0 ) + v9 = v18 + 100; + *(_DWORD *)(a7 + 20) = v9; + } + v10 = v7 == -1; + v17 = (v8 != 0) & v10; + if ( v17 ) + { + v10 = 0; + if ( v8[2] >= v8[3] ) + { + v13 = (*(int (__fastcall **)(_DWORD *))(*v8 + 36))(v8); + v14 = v13 == -1; + if ( v13 == -1 ) + v10 = v17; + v15 = 0; + if ( !v14 ) + v15 = v8; + v16 = v15; + } + } + v11 = a4 == -1; + if ( a3 ) + { + if ( a4 == -1 ) + { + v11 = 0; + if ( a3[2] >= a3[3] ) + v11 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + } + } + if ( v10 == v11 ) + *a6 |= 2u; + return v16; +} +// 4B7513: variable 'v7' is possibly undefined +// 4B7480: using guessed type int var_20[8]; + +//----- (004B75D0) -------------------------------------------------------- +int __fastcall std::time_get>::get_weekday(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 20))(a1); +} + +//----- (004B75E0) -------------------------------------------------------- +int std::time_get>::do_date_order() +{ + return 0; +} + +//----- (004B75F0) -------------------------------------------------------- +int __fastcall std::time_get>::get_monthname(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 24))(a1); +} + +//----- (004B7600) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::_M_extract_num( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int *a5, + signed int a6, + int a7, + unsigned int a8, + int a9, + _DWORD *a10) +{ + unsigned int v10; // ebp + int v12; // eax + int v13; // edi + char v14; // al + unsigned __int8 v15; // al + unsigned int v16; // eax + bool v17; // dl + char v18; // bl + int v19; // ebx + char v20; // dl + int (__stdcall *v21)(unsigned __int8, int); // eax + int v23; // eax + char *v24; // eax + int v25; // eax + int v26; // eax + unsigned int v28; // [esp+20h] [ebp-2Ch] + _BYTE *v29; // [esp+24h] [ebp-28h] + bool v31; // [esp+2Fh] [ebp-1Dh] + + v10 = 10; + v29 = std::use_facet>(a9 + 108); + if ( a8 != 2 ) + { + v12 = 1; + if ( a8 == 4 ) + v12 = 1000; + v10 = v12; + } + v28 = 0; + v13 = 0; + while ( 1 ) + { + v17 = a2 == -1; + v18 = v17 && a1 != 0; + if ( v18 ) + { + if ( a1[2] >= a1[3] ) + { + v25 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v17 = a2 == -1; + if ( v25 != -1 ) + v18 = 0; + if ( v25 == -1 ) + a1 = 0; + } + else + { + v18 = 0; + } + } + else + { + v18 = a2 == -1; + } + if ( a3 && a4 == -1 ) + { + if ( a3[2] >= a3[3] ) + { + v31 = v17; + v23 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v17 = v31; + if ( v23 == -1 ) + { + a3 = 0; + v18 ^= 1u; + } + } + } + else + { + v18 ^= a4 == -1; + } + if ( v28 >= a8 || !v18 ) + break; + if ( a1 && v17 ) + { + v24 = (char *)a1[2]; + if ( (unsigned int)v24 >= a1[3] ) + { + v26 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + if ( v26 == -1 ) + { + v20 = -1; + v19 = 255; + a1 = 0; + } + else + { + v19 = (unsigned __int8)v26; + v20 = v26; + } + } + else + { + v19 = (unsigned __int8)*v24; + v20 = *v24; + } + } + else + { + v19 = (unsigned __int8)a2; + v20 = a2; + } + v14 = v29[v19 + 285]; + if ( !v14 ) + { + v21 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v29 + 32); + if ( v21 != std::ctype::do_narrow ) + v20 = v21(v20, 42); + if ( v20 == 42 ) + goto LABEL_27; + v29[v19 + 285] = v20; + v14 = v20; + } + v15 = v14 - 48; + if ( v15 > 9u ) + goto LABEL_27; + v13 = (char)v15 + 10 * v13; + if ( (int)(v13 * v10) > a7 || (int)(v10 + v13 * v10) <= a6 ) + goto LABEL_27; + v16 = a1[2]; + v10 /= 0xAu; + if ( v16 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v16 + 1; + ++v28; + a2 = -1; + } + if ( v28 == a8 ) + { +LABEL_30: + *a5 = v13; + return a1; + } +LABEL_27: + if ( a8 == 4 && v28 == 2 ) + { + v13 -= 100; + goto LABEL_30; + } + *a10 |= 4u; + return a1; +} + +//----- (004B78C0) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_weekday( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + int a6) +{ + _DWORD *v6; // eax + int v7; // edx + int v8; // eax + int v9; // edx + _DWORD *v10; // ecx + _DWORD *v11; // ebp + char v12; // dl + char v13; // al + int v15; // eax + int v16; // eax + char v17; // [esp+34h] [ebp-68h] + char v18; // [esp+34h] [ebp-68h] + _DWORD *v19; // [esp+38h] [ebp-64h] + unsigned int v20; // [esp+40h] [ebp-5Ch] BYREF + int v21; // [esp+44h] [ebp-58h] BYREF + int v22[21]; // [esp+48h] [ebp-54h] BYREF + + v21 = 0; + v6 = (_DWORD *)*((_DWORD *)std::use_facet>(a4 + 108) + 2); + v22[0] = v6[18]; + v22[1] = v6[19]; + v22[2] = v6[20]; + v22[3] = v6[21]; + v22[4] = v6[22]; + v22[5] = v6[23]; + v22[6] = v6[24]; + v22[7] = v6[11]; + v22[8] = v6[12]; + v22[9] = v6[13]; + v22[10] = v6[14]; + v22[11] = v6[15]; + v7 = v6[16]; + v8 = v6[17]; + v22[12] = v7; + v22[13] = v8; + v10 = (_DWORD *)std::time_get>::_M_extract_wday_or_month( + a1, + a2, + a3, + &v20, + (int)v22, + 7u, + a4, + &v21); + v11 = v10; + if ( v21 ) + *a5 |= 4u; + else + *(_DWORD *)(a6 + 24) = v20; + v12 = v9 == -1; + v17 = v12 & (v10 != 0); + if ( v17 ) + { + v12 = 0; + if ( v10[2] >= v10[3] ) + { + v11 = 0; + v19 = v10; + v16 = (*(int (**)(void))(*v10 + 36))(); + v12 = 0; + if ( v16 != -1 ) + v11 = v19; + if ( v16 == -1 ) + v12 = v17; + } + } + v13 = a3 == -1; + if ( a2 ) + { + if ( a3 == -1 ) + { + v13 = 0; + if ( a2[2] >= a2[3] ) + { + v18 = v12; + v15 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + v12 = v18; + v13 = v15 == -1; + } + } + } + if ( v12 == v13 ) + *a5 |= 2u; + return v11; +} +// 4B79CF: variable 'v9' is possibly undefined + +//----- (004B7A80) -------------------------------------------------------- +unsigned __int64 __stdcall std::time_get>::_M_extract_name( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int **a4, + int a5, + int a6, + int a7, + _DWORD *a8) +{ + _DWORD *v8; // edi + int v9; // ebx + _DWORD *v10; // edx + int v11; // eax + void *v12; // esp + void *v13; // esp + char v14; // bl + int v16; // edi + unsigned int v17; // ebx + int *v18; // esi + int v19; // edx + int v20; // eax + char v21; // al + int v22; // ecx + int *v23; // esi + int *v24; // edx + int v25; // esi + size_t v26; // eax + unsigned int v27; // ebx + unsigned int i; // esi + size_t v29; // eax + int v30; // esi + unsigned int v31; // edi + unsigned int v32; // eax + char v33; // di + unsigned int j; // edi + char v35; // si + _BYTE *v36; // eax + int v37; // eax + const char *v38; // edi + unsigned int v39; // ebx + size_t v40; // eax + unsigned int v41; // esi + int *v42; // edi + char v43; // bl + int v44; // ecx + char v45; // bl + int v46; // eax + _BYTE *v47; // eax + char v48; // dl + int v49; // eax + int v50; // eax + int v51; // eax + int v52; // eax + int v53; // eax + int v54; // eax + int v55; // eax + bool v56; // zf + _DWORD *v57; // eax + int v58; // eax + int v59; // eax + int v60; // eax + int v61; // eax + bool v62; // zf + _DWORD *v63; // eax + int v64; // eax + int v65; // eax + int v66; // [esp+10h] [ebp-38h] BYREF + _DWORD *v67; // [esp+18h] [ebp-30h] + int *v68; // [esp+1Ch] [ebp-2Ch] + int *v69; // [esp+20h] [ebp-28h] + _DWORD *v70; // [esp+24h] [ebp-24h] + int *v71; // [esp+28h] [ebp-20h] + unsigned int v72; // [esp+2Ch] [ebp-1Ch] + + v8 = a2; + v9 = a3; + v67 = a2; + v10 = std::use_facet>(a7 + 108); + v11 = 16 * ((unsigned int)(4 * a6 + 27) >> 4); + v12 = alloca(v11); + v13 = alloca(v11); + LOBYTE(v72) = HIDWORD(a1) == -1; + LOBYTE(v71) = v72 & ((_DWORD)a1 != 0); + if ( (_BYTE)v71 ) + { + LOBYTE(v72) = 0; + if ( *(_DWORD *)(a1 + 8) >= *(_DWORD *)(a1 + 12) ) + { + v53 = *(_DWORD *)a1; + v70 = v10; + v54 = (*(int (**)(void))(v53 + 36))(); + v10 = v70; + if ( v54 == -1 ) + { + LODWORD(a1) = 0; + LOBYTE(v72) = (_BYTE)v71; + } + } + } + LOBYTE(v70) = v9 == -1; + v14 = (unsigned __int8)v70 & (v8 != 0); + if ( v14 ) + { + if ( v8[2] >= v8[3] ) + { + v60 = *v8; + v71 = v10; + v61 = (*(int (__fastcall **)(_DWORD *))(v60 + 36))(v8); + v10 = v71; + v62 = v61 == -1; + if ( v61 != -1 ) + v14 = 0; + v63 = 0; + if ( !v62 ) + v63 = v8; + v67 = v63; + } + else + { + v14 = 0; + } + } + else + { + v14 = (char)v70; + } + if ( v14 == (_BYTE)v72 ) + goto LABEL_5; + v69 = v10; + LOBYTE(v72) = std::istreambuf_iterator::_M_get((int)&a1); + if ( !a6 ) + goto LABEL_5; + v71 = &v66; + v16 = 0; + v17 = 0; + v18 = v69; + v19 = a5; + do + { + while ( 1 ) + { + v22 = **(char **)(v19 + 4 * v16); + if ( (_BYTE)v22 == (_BYTE)v72 ) + break; + v20 = *v18; + a5 = v19; + v21 = (*(int (__thiscall **)(int *, int))(v20 + 8))(v18, v22); + v19 = a5; + if ( (_BYTE)v72 == v21 ) + break; + if ( a6 == ++v16 ) + goto LABEL_13; + } + v71[v17++] = v16++; + } + while ( a6 != v16 ); +LABEL_13: + v72 = 0; + v23 = v71; + if ( v17 <= 1 ) + goto LABEL_35; + v24 = v71; + do + { + v25 = *v24; + v68 = v24; + v26 = strlen(*(const char **)(a5 + 4 * v25)); + v71 = (int *)v17; + v69 = (int *)v25; + v27 = v26; + for ( i = 1; i < (unsigned int)v71; ++i ) + { + v29 = strlen(*(const char **)(a5 + 4 * v68[i])); + if ( v27 > v29 ) + v27 = v29; + } + v24 = v68; + v30 = (int)v69; + v31 = v27; + v17 = (unsigned int)v71; + v32 = *(_DWORD *)(a1 + 8); + if ( v32 >= *(_DWORD *)(a1 + 12) ) + { + v52 = *(_DWORD *)a1; + v71 = v68; + (*(void (__fastcall **)(_DWORD))(v52 + 40))(a1); + v24 = v71; + } + else + { + *(_DWORD *)(a1 + 8) = v32 + 1; + } + ++v72; + HIDWORD(a1) = -1; + if ( v72 >= v31 ) + goto LABEL_5; + LOBYTE(v71) = 1; + if ( (_DWORD)a1 ) + { + LOBYTE(v71) = 0; + if ( *(_DWORD *)(a1 + 8) >= *(_DWORD *)(a1 + 12) ) + { + v58 = *(_DWORD *)a1; + v69 = v24; + v59 = (*(int (**)(void))(v58 + 36))(); + v24 = v69; + if ( v59 == -1 ) + { + LODWORD(a1) = 0; + LOBYTE(v71) = 1; + } + } + } + v33 = (unsigned __int8)v70 & (v67 != 0); + if ( v33 ) + { + if ( v67[2] >= v67[3] ) + { + v69 = v24; + v55 = (*(int (__fastcall **)(_DWORD *))(*v67 + 36))(v67); + v24 = v69; + v56 = v55 == -1; + if ( v55 != -1 ) + v33 = 0; + v57 = 0; + if ( !v56 ) + v57 = v67; + v67 = v57; + } + else + { + v33 = 0; + } + } + else + { + v33 = (char)v70; + } + if ( (_BYTE)v71 == v33 ) + goto LABEL_5; + for ( j = 0; ; v30 = v24[j] ) + { + v35 = *(_BYTE *)(*(_DWORD *)(a5 + 4 * v30) + v72); + LOBYTE(v36) = BYTE4(a1); + if ( a1 > 0xFFFFFFFF00000000LL ) + { + v36 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v36 >= *(_DWORD *)(a1 + 12) ) + { + v51 = *(_DWORD *)a1; + v71 = v24; + v36 = (_BYTE *)(*(int (**)(void))(v51 + 36))(); + v24 = v71; + if ( v36 == (_BYTE *)-1 ) + LODWORD(a1) = 0; + } + else + { + LOBYTE(v36) = *v36; + } + } + if ( v35 == (_BYTE)v36 ) + break; + v24[j] = v24[--v17]; + if ( v17 <= j ) + goto LABEL_33; +LABEL_29: + ; + } + if ( v17 > ++j ) + goto LABEL_29; +LABEL_33: + ; + } + while ( v17 > 1 ); + v23 = v24; +LABEL_35: + if ( v17 == 1 ) + { + std::streambuf::sbumpc((_DWORD *)a1); + v37 = *v23; + HIDWORD(a1) = -1; + v38 = *(const char **)(a5 + 4 * v37); + v69 = (int *)v37; + v39 = v72 + 1; + v40 = strlen(v38); + v71 = (int *)v40; + if ( v72 + 1 < v40 ) + { + v72 = (unsigned int)v38; + v41 = v39; + v42 = v67; + while ( 1 ) + { + v48 = 1; + if ( (_DWORD)a1 ) + { + v48 = 0; + if ( *(_DWORD *)(a1 + 8) >= *(_DWORD *)(a1 + 12) ) + { + v49 = *(_DWORD *)a1; + LOBYTE(v68) = 0; + v50 = (*(int (**)(void))(v49 + 36))(); + v48 = (char)v68; + if ( v50 == -1 ) + { + LODWORD(a1) = 0; + v48 = 1; + } + } + } + v43 = (unsigned __int8)v70 & (v42 != 0); + if ( v43 ) + { + if ( v42[2] >= (unsigned int)v42[3] ) + { + v64 = *v42; + LOBYTE(v68) = v48; + v65 = (*(int (__fastcall **)(int *))(v64 + 36))(v42); + v48 = (char)v68; + if ( v65 != -1 ) + v43 = 0; + if ( v65 == -1 ) + v42 = 0; + } + else + { + v43 = 0; + } + } + else + { + v43 = (char)v70; + } + if ( v43 == v48 ) + goto LABEL_5; + v44 = a1; + v45 = *(_BYTE *)(v72 + v41); + LOBYTE(v46) = BYTE4(a1); + if ( a1 > 0xFFFFFFFF00000000LL ) + { + v47 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v47 < *(_DWORD *)(a1 + 12) ) + { + if ( v45 != *v47 ) + goto LABEL_5; + goto LABEL_44; + } + v46 = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 36))(a1); + if ( v46 == -1 ) + LODWORD(a1) = 0; + } + if ( v45 != (_BYTE)v46 ) + goto LABEL_5; + v44 = a1; + v47 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v47 >= *(_DWORD *)(a1 + 12) ) + { + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + goto LABEL_45; + } +LABEL_44: + *(_DWORD *)(v44 + 8) = v47 + 1; +LABEL_45: + HIDWORD(a1) = -1; + if ( (int *)++v41 == v71 ) + goto LABEL_81; + } + } + if ( v39 == v40 ) + { +LABEL_81: + *a4 = v69; + return a1; + } + } +LABEL_5: + *a8 |= 4u; + return a1; +} + +//----- (004B7F50) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_monthname( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + int a6) +{ + _DWORD *v6; // eax + int v7; // edx + int v8; // edx + int v9; // edx + _DWORD *v10; // ecx + _DWORD *v11; // ebp + char v12; // dl + char v13; // al + int v15; // eax + int v16; // eax + char v17; // [esp+34h] [ebp-98h] + char v18; // [esp+34h] [ebp-98h] + _DWORD *v19; // [esp+38h] [ebp-94h] + unsigned int v20; // [esp+48h] [ebp-84h] BYREF + int v21; // [esp+4Ch] [ebp-80h] BYREF + int v22[31]; // [esp+50h] [ebp-7Ch] BYREF + + v6 = (_DWORD *)*((_DWORD *)std::use_facet>(a4 + 108) + 2); + v22[0] = v6[37]; + v22[1] = v6[38]; + v22[2] = v6[39]; + v22[3] = v6[40]; + v22[4] = v6[41]; + v22[5] = v6[42]; + v22[6] = v6[43]; + v22[7] = v6[44]; + v22[8] = v6[45]; + v22[9] = v6[46]; + v22[10] = v6[47]; + v22[11] = v6[48]; + v22[12] = v6[25]; + v22[13] = v6[26]; + v22[14] = v6[27]; + v22[15] = v6[28]; + v7 = v6[29]; + v21 = 0; + v22[16] = v7; + v22[17] = v6[30]; + v22[18] = v6[31]; + v22[19] = v6[32]; + v22[20] = v6[33]; + v22[21] = v6[34]; + v8 = v6[35]; + v22[23] = v6[36]; + v22[22] = v8; + v10 = (_DWORD *)std::time_get>::_M_extract_wday_or_month( + a1, + a2, + a3, + &v20, + (int)v22, + 0xCu, + a4, + &v21); + v11 = v10; + if ( v21 ) + *a5 |= 4u; + else + *(_DWORD *)(a6 + 16) = v20; + v12 = v9 == -1; + v17 = v12 & (v10 != 0); + if ( v17 ) + { + v12 = 0; + if ( v10[2] >= v10[3] ) + { + v11 = 0; + v19 = v10; + v16 = (*(int (**)(void))(*v10 + 36))(); + v12 = 0; + if ( v16 != -1 ) + v11 = v19; + if ( v16 == -1 ) + v12 = v17; + } + } + v13 = a3 == -1; + if ( a2 ) + { + if ( a3 == -1 ) + { + v13 = 0; + if ( a2[2] >= a2[3] ) + { + v18 = v12; + v15 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + v12 = v18; + v13 = v15 == -1; + } + } + } + if ( v12 == v13 ) + *a5 |= 2u; + return v11; +} +// 4B80FC: variable 'v9' is possibly undefined + +//----- (004B81B0) -------------------------------------------------------- +unsigned __int64 __stdcall std::time_get>::_M_extract_via_format( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + _DWORD *a6, + char *a7) +{ + char *v7; // ebx + _DWORD *v8; // eax + size_t v9; // ebx + _BYTE *v10; // esi + size_t v11; // eax + _DWORD *v12; // ecx + int v13; // eax + char v14; // dl + char v15; // di + size_t v16; // edi + char *v17; // ebp + int v18; // edx + char v19; // al + char v20; // cl + int (__stdcall *v21)(unsigned __int8, int); // eax + _BYTE *v22; // eax + char v23; // bl + int v24; // eax + int v25; // ebp + char v26; // al + char v27; // dl + int (__stdcall *v28)(unsigned __int8, int); // eax + char v29; // al + int v31; // eax + int v32; // ebx + char v33; // dl + int (__stdcall *v34)(unsigned __int8, int); // eax + unsigned __int64 v35; // rax + int *v36; // eax + _DWORD *v37; // eax + int v38; // eax + unsigned __int64 v39; // rax + _DWORD *v40; // eax + char v41; // al + char *v42; // eax + unsigned __int64 v43; // rax + _DWORD *v44; // eax + int v45; // eax + unsigned __int64 v46; // rax + unsigned __int64 v47; // rax + unsigned __int64 v48; // rax + unsigned __int64 v49; // rax + unsigned __int64 v50; // rax + char v51; // al + char v52; // bp + char v53; // al + char v54; // bp + char v55; // al + unsigned __int64 v56; // rax + unsigned __int64 v57; // rax + _DWORD *v58; // eax + int (__stdcall *v59)(unsigned __int8); // edx + char *v60; // ecx + int (__stdcall *v61)(unsigned __int8); // edx + char *v62; // edx + char *Stra; // [esp+0h] [ebp-9Ch] + char *Str; // [esp+0h] [ebp-9Ch] + size_t v65; // [esp+30h] [ebp-6Ch] + _DWORD *v66; // [esp+38h] [ebp-64h] + char v67; // [esp+3Ch] [ebp-60h] + int v68; // [esp+3Ch] [ebp-60h] + int v69; // [esp+48h] [ebp-54h] BYREF + int *v70; // [esp+4Ch] [ebp-50h] BYREF + unsigned int v71; // [esp+50h] [ebp-4Ch] BYREF + int v72; // [esp+54h] [ebp-48h] + int v73; // [esp+58h] [ebp-44h] + int v74; // [esp+5Ch] [ebp-40h] + int v75; // [esp+60h] [ebp-3Ch] + int v76; // [esp+64h] [ebp-38h] + int v77; // [esp+68h] [ebp-34h] + int v78; // [esp+6Ch] [ebp-30h] + int v79; // [esp+70h] [ebp-2Ch] + int v80; // [esp+74h] [ebp-28h] + int v81; // [esp+78h] [ebp-24h] + int v82; // [esp+7Ch] [ebp-20h] + + v7 = (char *)(a4 + 108); + v8 = std::use_facet>(a4 + 108); + Stra = v7; + v9 = 0; + v66 = v8; + v10 = std::use_facet>((int)Stra); + v11 = strlen(a7); + v69 = 0; + v12 = (_DWORD *)a1; + v65 = v11; + v13 = HIDWORD(a1); + while ( 1 ) + { + v14 = v13 == -1; + v15 = v14 & (v12 != 0); + if ( v15 ) + { + v14 = 0; + if ( v12[2] >= v12[3] ) + { + v31 = (*(int (__thiscall **)(_DWORD *, char *))(*v12 + 36))(v12, Str); + v14 = 0; + if ( v31 == -1 ) + { + LODWORD(a1) = 0; + v14 = v15; + } + } + } + if ( a2 && a3 == -1 ) + { + if ( a2[2] >= a2[3] ) + { + v67 = v14; + v24 = (*(int (**)(void))(*a2 + 36))(); + v14 = v67; + if ( v24 == -1 ) + { + a2 = 0; + v14 = v67 ^ 1; + } + } + } + else + { + v14 ^= a3 == -1; + } + if ( v9 >= v65 || !v14 ) + break; + if ( v69 ) + goto LABEL_32; + v16 = v9 + 1; + v17 = &a7[v9]; + v18 = (unsigned __int8)a7[v9]; + v19 = v10[v18 + 285]; + v20 = a7[v9]; + if ( v19 ) + { +LABEL_14: + if ( v19 != 37 ) + goto LABEL_15; + v25 = (unsigned __int8)a7[v16]; + v26 = v10[v25 + 285]; + v27 = a7[v16]; + if ( !v26 ) + { + v28 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v10 + 32); + if ( v28 != std::ctype::do_narrow ) + v27 = ((int (__thiscall *)(_BYTE *, _DWORD, _DWORD))v28)(v10, v27, 0); + if ( !v27 ) + { +LABEL_43: + v69 |= 4u; + v13 = HIDWORD(a1); + goto LABEL_44; + } + v10[v25 + 285] = v27; + v26 = v27; + } + v70 = 0; + if ( (v26 == 69 || v26 == 79) + && (v16 = v9 + 2, v32 = (unsigned __int8)a7[v9 + 2], v26 = v10[v32 + 285], v33 = v32, !v26) ) + { + v34 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v10 + 32); + if ( v34 != std::ctype::do_narrow ) + v33 = ((int (__thiscall *)(_BYTE *, _DWORD, _DWORD))v34)(v10, (char)v32, 0); + if ( !v33 ) + goto LABEL_43; + v10[v32 + 285] = v33; + v29 = v33 - 65; + if ( (unsigned __int8)(v33 - 65) > 0x38u ) + goto LABEL_43; + } + else + { + v29 = v26 - 65; + } + switch ( v29 ) + { + case 0: + v44 = (_DWORD *)v66[2]; + v71 = v44[11]; + v72 = v44[12]; + v73 = v44[13]; + v74 = v44[14]; + v75 = v44[15]; + v76 = v44[16]; + v45 = v44[17]; + goto LABEL_63; + case 1: + v40 = (_DWORD *)v66[2]; + v71 = v40[25]; + v72 = v40[26]; + v73 = v40[27]; + v74 = v40[28]; + v75 = v40[29]; + v76 = v40[30]; + v77 = v40[31]; + v78 = v40[32]; + v79 = v40[33]; + v80 = v40[34]; + v81 = v40[35]; + v38 = v40[36]; + goto LABEL_52; + case 2: + case 24: + case 56: + LODWORD(v35) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + SHIDWORD(a1), + a2, + a3, + (int *)&v70, + 0, + 9999, + 4u, + a4, + &v69); + a1 = v35; + if ( v69 ) + goto LABEL_55; + v36 = v70 - 475; + if ( (int)v70 < 0 ) + v36 = v70 + 25; + a6[5] = v36; + v13 = HIDWORD(a1); + break; + case 3: + std::ctype::widen(v10, "%m/%d/%y", "%H:%M", &v71); + LODWORD(v43) = std::time_get>::_M_extract_via_format( + a1, + SHIDWORD(a1), + (int)a2, + a3, + a4, + (int)&v69, + (int)a6, + (char *)&v71); + goto LABEL_61; + case 7: + LODWORD(v46) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + SHIDWORD(a1), + a2, + a3, + (int *)&v70, + 0, + 23, + 2u, + a4, + &v69); + goto LABEL_67; + case 8: + LODWORD(v46) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + SHIDWORD(a1), + a2, + a3, + (int *)&v70, + 1, + 12, + 2u, + a4, + &v69); +LABEL_67: + a1 = v46; + if ( v69 ) + goto LABEL_55; + a6[2] = v70; + v13 = HIDWORD(a1); + break; + case 12: + LODWORD(v47) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + SHIDWORD(a1), + a2, + a3, + (int *)&v70, + 0, + 59, + 2u, + a4, + &v69); + a1 = v47; + if ( v69 ) + goto LABEL_55; + a6[1] = v70; + v13 = HIDWORD(a1); + break; + case 17: + std::ctype::widen(v10, "%H:%M", "%H:%M:%S", &v71); + LODWORD(v43) = std::time_get>::_M_extract_via_format( + a1, + SHIDWORD(a1), + (int)a2, + a3, + a4, + (int)&v69, + (int)a6, + (char *)&v71); + goto LABEL_61; + case 18: + LODWORD(v39) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + SHIDWORD(a1), + a2, + a3, + (int *)&v70, + 0, + 60, + 2u, + a4, + &v69); + a1 = v39; + if ( v69 ) + goto LABEL_55; + *a6 = v70; + v13 = HIDWORD(a1); + break; + case 19: + std::ctype::widen(v10, "%H:%M:%S", byte_557ACA, &v71); + LODWORD(v43) = std::time_get>::_M_extract_via_format( + a1, + SHIDWORD(a1), + (int)a2, + a3, + a4, + (int)&v69, + (int)a6, + (char *)&v71); + goto LABEL_61; + case 23: + v42 = *(char **)(v66[2] + 16); + goto LABEL_60; + case 25: + if ( (*(_BYTE *)(*((_DWORD *)v10 + 6) + 2 * (unsigned __int8)std::istreambuf_iterator::_M_get((int)&a1)) & 1) == 0 ) + goto LABEL_43; + a1 = std::time_get>::_M_extract_name( + a1, + a2, + a3, + (int **)&v71, + (int)std::__timepunct_cache::_S_timezones, + 14, + a4, + &v69); + if ( !std::istreambuf_iterator::equal(&a1, (int)&a2) && !(v71 | v69) ) + { + v52 = std::istreambuf_iterator::_M_get((int)&a1); + if ( v10[28] ) + { + v53 = v10[74]; + } + else + { + std::ctype::_M_widen_init((int)v10); + v59 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v10 + 24); + v53 = 45; + if ( v59 != std::ctype::do_widen ) + { + v53 = ((int (__thiscall *)(_BYTE *, int))v59)(v10, 45); + Str = v60; + } + } + if ( v52 == v53 ) + goto LABEL_94; + v54 = std::istreambuf_iterator::_M_get((int)&a1); + if ( v10[28] ) + { + v55 = v10[72]; + } + else + { + std::ctype::_M_widen_init((int)v10); + v61 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v10 + 24); + v55 = 43; + if ( v61 != std::ctype::do_widen ) + { + v55 = ((int (__thiscall *)(_BYTE *, int))v61)(v10, 43); + Str = v62; + } + } + if ( v54 == v55 ) + { +LABEL_94: + LODWORD(v56) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + SHIDWORD(a1), + a2, + a3, + (int *)&v71, + 0, + 23, + 2u, + a4, + &v69); + a1 = v56; + LODWORD(v57) = std::time_get>::_M_extract_num( + (_DWORD *)v56, + SHIDWORD(v56), + a2, + a3, + (int *)&v71, + 0, + 59, + 2u, + a4, + &v69); + a1 = v57; + } + } + goto LABEL_55; + case 32: + v58 = (_DWORD *)v66[2]; + v71 = v58[18]; + v72 = v58[19]; + v73 = v58[20]; + v74 = v58[21]; + v75 = v58[22]; + v76 = v58[23]; + v45 = v58[24]; +LABEL_63: + v77 = v45; + a1 = std::time_get>::_M_extract_name( + a1, + a2, + a3, + &v70, + (int)&v71, + 7, + a4, + &v69); + if ( v69 ) + goto LABEL_55; + a6[6] = v70; + v13 = HIDWORD(a1); + break; + case 33: + case 39: + v37 = (_DWORD *)v66[2]; + v71 = v37[37]; + v72 = v37[38]; + v73 = v37[39]; + v74 = v37[40]; + v75 = v37[41]; + v76 = v37[42]; + v77 = v37[43]; + v78 = v37[44]; + v79 = v37[45]; + v80 = v37[46]; + v81 = v37[47]; + v38 = v37[48]; +LABEL_52: + v82 = v38; + a1 = std::time_get>::_M_extract_name( + a1, + a2, + a3, + &v70, + (int)&v71, + 12, + a4, + &v69); + if ( v69 ) + goto LABEL_55; + a6[4] = v70; + v13 = HIDWORD(a1); + break; + case 34: + v42 = *(char **)(v66[2] + 24); + goto LABEL_60; + case 35: + LODWORD(v48) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + SHIDWORD(a1), + a2, + a3, + (int *)&v70, + 1, + 31, + 2u, + a4, + &v69); + a1 = v48; + if ( v69 ) + goto LABEL_55; + a6[3] = v70; + v13 = HIDWORD(a1); + break; + case 36: + if ( (*(_BYTE *)(*((_DWORD *)v10 + 6) + 2 * (unsigned __int8)std::istreambuf_iterator::_M_get((int)&a1)) & 0x20) != 0 ) + { + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + LODWORD(v49) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + -1, + a2, + a3, + (int *)&v70, + 1, + 9, + 1u, + a4, + &v69); + } + else + { + LODWORD(v49) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + SHIDWORD(a1), + a2, + a3, + (int *)&v70, + 10, + 31, + 2u, + a4, + &v69); + } + a1 = v49; + v13 = HIDWORD(v49); + if ( !v69 ) + a6[3] = v70; + break; + case 44: + LODWORD(v50) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + SHIDWORD(a1), + a2, + a3, + (int *)&v70, + 1, + 12, + 2u, + a4, + &v69); + a1 = v50; + if ( v69 ) + { +LABEL_55: + v13 = HIDWORD(a1); + } + else + { + a6[4] = (char *)v70 - 1; + v13 = HIDWORD(a1); + } + break; + case 45: + v51 = std::istreambuf_iterator::_M_get((int)&a1); + if ( (unsigned __int8)std::ctype::narrow(v10, v51, 0) != 10 ) + goto LABEL_43; + goto LABEL_58; + case 51: + v41 = std::istreambuf_iterator::_M_get((int)&a1); + if ( (unsigned __int8)std::ctype::narrow(v10, v41, 0) != 9 ) + goto LABEL_43; +LABEL_58: + std::streambuf::sbumpc((_DWORD *)a1); + v13 = -1; + HIDWORD(a1) = -1; + break; + case 55: + v42 = *(char **)(v66[2] + 8); +LABEL_60: + LODWORD(v43) = std::time_get>::_M_extract_via_format( + a1, + SHIDWORD(a1), + (int)a2, + a3, + a4, + (int)&v69, + (int)a6, + v42); +LABEL_61: + a1 = v43; + v13 = HIDWORD(v43); + break; + default: + goto LABEL_43; + } +LABEL_44: + v12 = (_DWORD *)a1; + v9 = v16 + 1; + } + else + { + v21 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v10 + 32); + if ( v21 != std::ctype::do_narrow ) + { + v68 = (unsigned __int8)a7[v9]; + v20 = ((int (__thiscall *)(_BYTE *, _DWORD, _DWORD))v21)(v10, (char)v18, 0); + v18 = v68; + } + if ( v20 ) + { + v10[v18 + 285] = v20; + v19 = v20; + goto LABEL_14; + } +LABEL_15: + LOBYTE(v22) = BYTE4(a1); + v23 = *v17; + v12 = (_DWORD *)a1; + if ( a1 > 0xFFFFFFFF00000000LL ) + { + v22 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v22 >= *(_DWORD *)(a1 + 12) ) + { + v22 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v22 == (_BYTE *)-1 ) + { + LODWORD(a1) = 0; + v12 = 0; + LOBYTE(v22) = -1; + } + else + { + v12 = (_DWORD *)a1; + } + } + else + { + LOBYTE(v22) = *v22; + } + } + if ( v23 == (_BYTE)v22 ) + { + std::streambuf::sbumpc(v12); + v9 = v16; + v13 = -1; + HIDWORD(a1) = -1; + v12 = (_DWORD *)a1; + } + else + { + v69 |= 4u; + v13 = HIDWORD(a1); + v9 = v16; + } + } + } + if ( v69 || v9 != v65 ) +LABEL_32: + *a5 |= 4u; + return a1; +} +// 4B83C4: variable 'Str' is possibly undefined +// 4B8536: variable 'v35' is possibly undefined +// 4B86F7: variable 'v39' is possibly undefined +// 4B8837: variable 'v43' is possibly undefined +// 4B89B3: variable 'v46' is possibly undefined +// 4B8A81: variable 'v47' is possibly undefined +// 4B8B86: variable 'v48' is possibly undefined +// 4B8C47: variable 'v49' is possibly undefined +// 4B8CDA: variable 'v50' is possibly undefined +// 4B8EFB: variable 'v56' is possibly undefined +// 4B8F11: variable 'v57' is possibly undefined +// 4B9061: variable 'v60' is possibly undefined +// 4B908F: variable 'v62' is possibly undefined +// 53F660: using guessed type void *std::__timepunct_cache::_S_timezones[2]; +// 557ACA: using guessed type _BYTE byte_557ACA[2]; + +//----- (004B90A0) -------------------------------------------------------- +int __stdcall std::time_get>::_M_extract_wday_or_month( + unsigned __int64 a1, + _DWORD *a2, + int a3, + unsigned int *a4, + int a5, + unsigned int a6, + int a7, + _DWORD *a8) +{ + _DWORD *v8; // esi + int v9; // ebx + int v10; // eax + void *v11; // esp + void *v12; // esp + unsigned __int8 v13; // dl + char v14; // bl + int v15; // eax + unsigned int v16; // edi + unsigned int v17; // esi + int *v18; // ecx + char v19; // dl + char v20; // bl + char v21; // bl + _BYTE *v22; // eax + unsigned int v23; // edx + unsigned int *v24; // ecx + unsigned int v25; // eax + int v26; // eax + int v27; // eax + unsigned int v29; // eax + int v30; // ebx + int v31; // edx + int *v32; // esi + int v33; // eax + char v34; // al + int v35; // ecx + int v36; // eax + void *v37; // esp + int v38; // esi + void *v39; // esp + int v40; // ecx + int *v41; // edi + int *v42; // ebx + int v43; // eax + unsigned __int8 v44; // di + int v45; // eax + int v46; // eax + int v47; // eax + int v48; // eax + bool v49; // zf + _DWORD *v50; // eax + int v51; // eax + int v52; // eax + bool v53; // zf + _DWORD *v54; // eax + int v55; // [esp+10h] [ebp-38h] BYREF + int *v56; // [esp+14h] [ebp-34h] + _DWORD *v57; // [esp+18h] [ebp-30h] + bool v58; // [esp+1Eh] [ebp-2Ah] + char v59; // [esp+1Fh] [ebp-29h] + int *v60; // [esp+20h] [ebp-28h] + int *v61; // [esp+24h] [ebp-24h] + int *v62; // [esp+28h] [ebp-20h] + int *v63; // [esp+2Ch] [ebp-1Ch] + + v8 = a2; + v9 = a3; + v57 = a2; + v60 = (int *)std::use_facet>(a7 + 108); + v10 = 16 * ((8 * a6 + 27) >> 4); + v11 = alloca(v10); + v12 = alloca(v10); + v13 = HIDWORD(a1) == -1; + v62 = &v55; + if ( (v13 & ((_DWORD)a1 != 0)) != 0 ) + { + v44 = v13 & ((_DWORD)a1 != 0); + v13 = 0; + if ( *(_DWORD *)(a1 + 8) >= *(_DWORD *)(a1 + 12) ) + { + v45 = *(_DWORD *)a1; + LOBYTE(v63) = 0; + v46 = (*(int (**)(void))(v45 + 36))(); + v13 = (unsigned __int8)v63; + if ( v46 == -1 ) + { + LODWORD(a1) = 0; + v13 = v44; + } + } + } + v58 = v9 == -1; + v14 = v58 && v8 != 0; + if ( v14 ) + { + if ( v8[2] >= v8[3] ) + { + v51 = *v8; + LOBYTE(v63) = v13; + v52 = (*(int (__fastcall **)(_DWORD *))(v51 + 36))(v8); + v13 = (unsigned __int8)v63; + v53 = v52 == -1; + if ( v52 != -1 ) + v14 = 0; + v54 = 0; + if ( !v53 ) + v54 = v8; + v57 = v54; + } + else + { + v14 = 0; + } + } + else + { + v14 = v58; + } + if ( v13 == v14 ) + { + v56 = 0; + v15 = HIDWORD(a1); + v16 = 0; + v17 = 0; + v18 = (int *)a1; + } + else + { + v30 = 0; + v16 = 0; + LOBYTE(v63) = std::istreambuf_iterator::_M_get((int)&a1); + v17 = 2 * a6; + if ( 2 * a6 ) + { + v61 = (int *)(2 * a6); + v31 = a5; + v32 = v60; + do + { + while ( 1 ) + { + v35 = **(char **)(v31 + 4 * v30); + if ( (_BYTE)v35 == (_BYTE)v63 ) + break; + v33 = *v32; + a5 = v31; + v34 = (*(int (__thiscall **)(int *, int))(v33 + 8))(v32, v35); + v31 = a5; + if ( (_BYTE)v63 == v34 ) + break; + if ( (int *)++v30 == v61 ) + goto LABEL_47; + } + v62[v16++] = v30++; + } + while ( (int *)v30 != v61 ); +LABEL_47: + v18 = (int *)a1; + if ( v16 ) + { + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v36 = 16 * ((4 * v16 + 27) >> 4); + v37 = alloca(v36); + v38 = a5; + v39 = alloca(v36); + v40 = (int)&v62[v16]; + v61 = (int *)v16; + v41 = v62; + v63 = (int *)v40; + v56 = &v55; + v42 = &v55; + do + { + v43 = *v41; + ++v42; + ++v41; + *(v42 - 1) = strlen(*(const char **)(v38 + 4 * v43)); + } + while ( v41 != v63 ); + v16 = (unsigned int)v61; + v18 = (int *)a1; + v15 = -1; + v17 = 1; + } + else + { + v56 = 0; + v15 = HIDWORD(a1); + v17 = 0; + } + } + else + { + v15 = HIDWORD(a1); + v18 = (int *)a1; + v56 = 0; + } + } + v19 = v15 == -1; + v20 = v19 & (v18 != 0); + if ( v20 ) + goto LABEL_23; +LABEL_7: + v21 = v58 && v57 != 0; + if ( !v21 ) + { + v21 = v58; + goto LABEL_9; + } + if ( v57[2] >= v57[3] ) + { + v47 = *v57; + LOBYTE(v63) = v19; + v48 = (*(int (__fastcall **)(_DWORD *))(v47 + 36))(v57); + v19 = (char)v63; + v49 = v48 == -1; + if ( v48 != -1 ) + v21 = 0; + v50 = 0; + if ( !v49 ) + v50 = v57; + v57 = v50; +LABEL_9: + if ( v21 == v19 ) + goto LABEL_29; +LABEL_10: + LOBYTE(v22) = BYTE4(a1); + if ( a1 > 0xFFFFFFFF00000000LL ) + { + v22 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v22 >= *(_DWORD *)(a1 + 12) ) + { + v22 = (_BYTE *)(*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v22 == (_BYTE *)-1 ) + { + LODWORD(a1) = 0; + v59 = -1; + goto LABEL_12; + } + } + else + { + LOBYTE(v22) = *v22; + } + } + v59 = (char)v22; +LABEL_12: + if ( !v16 ) + goto LABEL_31; + v23 = 0; + v60 = 0; + v63 = v56; + while ( 1 ) + { + while ( 1 ) + { + v24 = (unsigned int *)&v63[v23]; + if ( *v24 > v17 ) + break; + v60 = (int *)((char *)v60 + 1); + ++v23; +LABEL_15: + if ( v16 <= v23 ) + goto LABEL_19; + } + v61 = &v62[v23]; + if ( *(_BYTE *)(*(_DWORD *)(a5 + 4 * *v61) + v17) == v59 ) + { + ++v23; + goto LABEL_15; + } + *v61 = v62[--v16]; + *v24 = v63[v16]; + if ( v16 <= v23 ) + { +LABEL_19: + if ( v60 == (int *)v16 ) + goto LABEL_29; + v18 = (int *)a1; + v25 = *(_DWORD *)(a1 + 8); + if ( v25 >= *(_DWORD *)(a1 + 12) ) + { + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v18 = (int *)a1; + } + else + { + *(_DWORD *)(a1 + 8) = v25 + 1; + } + ++v17; + HIDWORD(a1) = -1; + v19 = 1; + v20 = v18 != 0; + if ( v18 ) + { +LABEL_23: + v19 = 0; + if ( v18[2] >= (unsigned int)v18[3] ) + { + v26 = *v18; + LOBYTE(v63) = 0; + v27 = (*(int (__fastcall **)(int *))(v26 + 36))(v18); + v19 = (char)v63; + if ( v27 == -1 ) + { + LODWORD(a1) = 0; + v19 = v20; + } + } + } + goto LABEL_7; + } + } + } + if ( v19 ) + goto LABEL_10; +LABEL_29: + if ( v16 == 1 ) + { + if ( *v56 != v17 ) + { +LABEL_31: + *a8 |= 4u; + return a1; + } + } + else if ( v16 != 2 || *v56 != v17 && v56[1] != v17 ) + { + goto LABEL_31; + } + v29 = *v62; + if ( *v62 >= a6 ) + v29 = *v62 - a6; + *a4 = v29; + return a1; +} + +//----- (004B94D0) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::get( + _DWORD *a1, + int a2, + _DWORD *a3, + int a4, + int a5, + _DWORD *a6, + _DWORD *a7, + unsigned __int8 *a8, + unsigned __int8 *a9) +{ + unsigned __int8 *v9; // edi + _DWORD *v11; // ebp + int v12; // edx + char v13; // dl + char v14; // bl + char v15; // dl + char v16; // bl + unsigned int v17; // eax + char v18; // dl + char v19; // bl + char v20; // bl + char v21; // dl + int (__stdcall *v22)(unsigned __int8, int); // eax + unsigned __int8 v23; // dl + int (__stdcall *v24)(unsigned __int8, int); // eax + int v25; // edi + int (__stdcall *v26)(unsigned __int8, int); // eax + _BYTE *v27; // eax + char v28; // dl + _BYTE *v29; // edi + char v30; // bl + unsigned __int64 v31; // rax + char v32; // al + unsigned __int8 *i; // edi + int j; // ebp + bool v36; // al + bool v37; // di + char v38; // dl + char v39; // bl + int v40; // eax + unsigned __int8 *v41; // eax + int (__stdcall *v42)(unsigned __int8); // eax + char *v43; // eax + int v44; // eax + int v45; // eax + bool v46; // zf + _DWORD *v47; // eax + char *v48; // eax + int v49; // eax + int v50; // eax + bool v51; // zf + _DWORD *v52; // eax + int v53; // eax + int v54; // eax + bool v55; // [esp+3Fh] [ebp-4Dh] + bool v57; // [esp+44h] [ebp-48h] + char v58; // [esp+44h] [ebp-48h] + _DWORD *v59; // [esp+44h] [ebp-48h] + char v60; // [esp+44h] [ebp-48h] + bool v62; // [esp+48h] [ebp-44h] + char v63; // [esp+48h] [ebp-44h] + int v64; // [esp+4Ch] [ebp-40h] + unsigned __int8 *v65; // [esp+4Ch] [ebp-40h] + char v66; // [esp+4Ch] [ebp-40h] + int v67; // [esp+50h] [ebp-3Ch] + unsigned __int8 v68; // [esp+50h] [ebp-3Ch] + char v69; // [esp+6Ch] [ebp-20h] BYREF + char v70; // [esp+6Dh] [ebp-1Fh] + char v71; // [esp+6Eh] [ebp-1Eh] + char v72; // [esp+6Fh] [ebp-1Dh] + unsigned __int8 *v73; // [esp+ACh] [ebp+20h] + + v9 = a8; + v11 = std::use_facet>(a5 + 108); + *a6 = 0; + if ( a8 == a9 ) + return a1; + v55 = a4 == -1; + while ( 1 ) + { + v57 = a2 == -1; + if ( !v57 || a1 == 0 ) + { + v18 = a2 == -1; + goto LABEL_19; + } + if ( a1[2] >= a1[3] ) + { + v49 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v18 = v57 && a1 != 0; + if ( v49 != -1 ) + v18 = 0; + if ( v49 == -1 ) + a1 = 0; +LABEL_19: + v19 = v55 && a3 != 0; + if ( !v19 ) + goto LABEL_20; + goto LABEL_85; + } + v18 = 0; + v19 = v55 && a3 != 0; + if ( !v19 ) + { +LABEL_20: + v19 = a4 == -1; + goto LABEL_21; + } +LABEL_85: + if ( a3[2] >= a3[3] ) + { + v66 = v18; + v50 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v18 = v66; + v51 = v50 == -1; + if ( v50 != -1 ) + v19 = 0; + v52 = 0; + if ( !v51 ) + v52 = a3; + a3 = v52; +LABEL_21: + if ( v18 == v19 ) + goto LABEL_87; + goto LABEL_22; + } + if ( !v18 ) + { +LABEL_87: + *a6 = 6; + return a1; + } +LABEL_22: + v20 = *((_BYTE *)v11 + *v9 + 285); + v64 = *v9; + v21 = *v9; + if ( !v20 ) + { + v22 = *(int (__stdcall **)(unsigned __int8, int))(*v11 + 32); + if ( v22 != std::ctype::do_narrow ) + v21 = ((int (__thiscall *)(_DWORD *, _DWORD, _DWORD))v22)(v11, v21, 0); + if ( !v21 ) + goto LABEL_3; + v20 = v21; + *((_BYTE *)v11 + v64 + 285) = v21; + } + if ( v20 == 37 ) + { + v65 = v9 + 1; + if ( a9 == v9 + 1 ) + break; + v67 = v9[1]; + v23 = v9[1]; + v58 = *((_BYTE *)v11 + v67 + 285); + if ( !v58 ) + { + v24 = *(int (__stdcall **)(unsigned __int8, int))(*v11 + 32); + if ( v24 != std::ctype::do_narrow ) + v23 = ((int (__thiscall *)(_DWORD *, _DWORD, _DWORD))v24)(v11, (char)v67, 0); + if ( !v23 ) + goto LABEL_89; + v58 = v23; + *((_BYTE *)v11 + v67 + 285) = v23; + } + if ( v58 == 69 || v58 == 79 ) + { + v65 = v9 + 2; + if ( a9 == v9 + 2 ) + break; + v25 = v9[2]; + v23 = v25; + if ( *((_BYTE *)v11 + v25 + 285) ) + { + v23 = *((_BYTE *)v11 + v25 + 285); + } + else + { + v26 = *(int (__stdcall **)(unsigned __int8, int))(*v11 + 32); + if ( v26 != std::ctype::do_narrow ) + v23 = ((int (__thiscall *)(_DWORD *, _DWORD, _DWORD))v26)(v11, (char)v25, 0); + if ( v23 ) + *((_BYTE *)v11 + v25 + 285) = v23; + } +LABEL_42: + v68 = v23; + v27 = std::use_facet>(a5 + 108); + v28 = v68; + v29 = v27; + *a6 = 0; + if ( v27[28] ) + { + v20 = v27[66]; + } + else + { + std::ctype::_M_widen_init((int)v27); + v28 = v68; + v42 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v29 + 24); + if ( v42 != std::ctype::do_widen ) + { + v20 = ((int (__fastcall *)(_BYTE *, _DWORD, int))v42)(v29, v68, 37); + v28 = v68; + } + } + v69 = v20; + if ( v58 ) + { + v71 = v28; + v72 = 0; + v70 = v58; + } + else + { + v70 = v28; + v71 = 0; + } + v31 = std::time_get>::_M_extract_via_format( + __PAIR64__(a2, (unsigned int)a1), + a3, + a4, + a5, + a6, + a7, + &v69); + a1 = (_DWORD *)v31; + v30 = HIDWORD(v31) == -1; + a2 = HIDWORD(v31); + BYTE4(v31) = v30 & ((_DWORD)v31 != 0); + if ( BYTE4(v31) ) + { + v30 = 0; + if ( *(_DWORD *)(v31 + 8) >= *(_DWORD *)(v31 + 12) ) + { + v60 = BYTE4(v31); + if ( (*(int (__fastcall **)(_DWORD))(*(_DWORD *)v31 + 36))(v31) == -1 ) + { + v30 = v60; + a1 = 0; + } + } + } + if ( a3 && a4 == -1 ) + { + v32 = 0; + if ( a3[2] >= a3[3] ) + v32 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3) == -1; + } + else + { + v32 = a4 == -1; + } + if ( v30 == v32 ) + *a6 |= 2u; + v9 = v65 + 1; + if ( a9 == v65 + 1 ) + return a1; + goto LABEL_16; + } + v23 = v58; +LABEL_89: + v58 = 0; + goto LABEL_42; + } +LABEL_3: + v12 = v11[6]; + if ( (*(_BYTE *)(v12 + 2 * *v9) & 0x20) != 0 ) + { + for ( i = v9 + 1; a9 != i; ++i ) + { + if ( (*(_BYTE *)(v12 + 2 * *i) & 0x20) == 0 ) + break; + } + v73 = i; + v59 = v11; + for ( j = a2; ; j = -1 ) + { + v36 = j == -1; + v37 = v36; + if ( v36 && a1 != 0 ) + { + if ( a1[2] >= a1[3] ) + { + v62 = v36 && a1 != 0; + v44 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v38 = v62; + if ( v44 != -1 ) + v38 = 0; + if ( v44 == -1 ) + a1 = 0; + } + else + { + v38 = 0; + } + } + else + { + v38 = j == -1; + } + v39 = v55 && a3 != 0; + if ( !v39 ) + break; + if ( a3[2] >= a3[3] ) + { + v63 = v38; + v45 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v38 = v63; + v46 = v45 == -1; + if ( v45 != -1 ) + v39 = 0; + v47 = 0; + if ( !v46 ) + v47 = a3; + a3 = v47; +LABEL_63: + if ( v38 == v39 ) + goto LABEL_76; + goto LABEL_64; + } + if ( !v38 ) + { +LABEL_76: + a2 = j; + v9 = v73; + v11 = v59; + goto LABEL_15; + } +LABEL_64: + if ( a1 && v37 ) + { + v41 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v41 < a1[3] ) + { + if ( (*(_BYTE *)(v59[6] + 2 * *v41) & 0x20) == 0 ) + { + a2 = -1; + v9 = v73; + v11 = v59; + goto LABEL_15; + } +LABEL_69: + a1[2] = v41 + 1; + continue; + } + v40 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + if ( v40 == -1 ) + a1 = 0; + } + else + { + LOBYTE(v40) = j; + } + if ( (*(_BYTE *)(v59[6] + 2 * (unsigned __int8)v40) & 0x20) == 0 ) + goto LABEL_76; + v41 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v41 < a1[3] ) + goto LABEL_69; + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + } + v39 = a4 == -1; + goto LABEL_63; + } + if ( a1 && a2 == -1 ) + { + v43 = (char *)a1[2]; + if ( (unsigned int)v43 >= a1[3] ) + { + v53 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v13 = v53; + if ( v53 == -1 ) + v13 = -1; + if ( v53 == -1 ) + a1 = 0; + } + else + { + v13 = *v43; + } + } + else + { + v13 = a2; + } + v14 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v11 + 16))(v11, v13); + if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD))(*v11 + 16))(v11, (char)*v9) != v14 ) + { + if ( a1 && a2 == -1 ) + { + v48 = (char *)a1[2]; + if ( (unsigned int)v48 >= a1[3] ) + { + v54 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v15 = v54; + if ( v54 == -1 ) + v15 = -1; + if ( v54 == -1 ) + a1 = 0; + } + else + { + v15 = *v48; + } + } + else + { + v15 = a2; + } + v16 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v11 + 8))(v11, v15); + if ( (*(unsigned __int8 (__thiscall **)(_DWORD *, _DWORD))(*v11 + 8))(v11, (char)*v9) != v16 ) + break; + } + v17 = a1[2]; + if ( v17 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v17 + 1; + a2 = -1; + ++v9; +LABEL_15: + if ( a9 == v9 ) + return a1; +LABEL_16: + if ( *a6 ) + return a1; + } + *a6 = 4; + return a1; +} +// 4B9AF9: conditional instruction was optimized away because eax.4==FFFFFFFF + +//----- (004B9CA0) -------------------------------------------------------- +int __stdcall std::time_get>::get( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + _DWORD *a6, + char a7, + char a8) +{ + _BYTE *v8; // ebp + char v9; // dl + int v10; // esi + unsigned __int64 v11; // rax + char v12; // bp + int (__stdcall *v14)(unsigned __int8); // eax + char v15; // [esp+20h] [ebp-3Ch] + char v16; // [esp+3Ch] [ebp-20h] BYREF + char v17; // [esp+3Dh] [ebp-1Fh] + char v18; // [esp+3Eh] [ebp-1Eh] + char v19; // [esp+3Fh] [ebp-1Dh] + + v8 = std::use_facet>(a4 + 108); + *a5 = 0; + if ( v8[28] ) + { + v9 = v8[66]; + } + else + { + std::ctype::_M_widen_init((int)v8); + v9 = 37; + v14 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v8 + 24); + if ( v14 != std::ctype::do_widen ) + v9 = ((int (__fastcall *)(_BYTE *, int, int))v14)(v8, 37, 37); + } + v16 = v9; + if ( a8 ) + { + v19 = 0; + v17 = a8; + v18 = a7; + } + else + { + v18 = 0; + v17 = a7; + } + v11 = std::time_get>::_M_extract_via_format(a1, a2, a3, a4, a5, a6, &v16); + v10 = v11; + BYTE4(v11) = HIDWORD(v11) == -1; + v12 = BYTE4(v11) & ((_DWORD)v11 != 0); + if ( v12 ) + { + BYTE4(v11) = 0; + if ( *(_DWORD *)(v11 + 8) >= *(_DWORD *)(v11 + 12) ) + { + LODWORD(v11) = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)v11 + 36))(v11); + BYTE4(v11) = 0; + if ( (_DWORD)v11 == -1 ) + { + BYTE4(v11) = v12; + v10 = 0; + } + } + } + LOBYTE(v11) = a3 == -1; + if ( a2 ) + { + if ( a3 == -1 ) + { + LOBYTE(v11) = 0; + if ( a2[2] >= a2[3] ) + { + v15 = BYTE4(v11); + LODWORD(v11) = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + BYTE4(v11) = v15; + LOBYTE(v11) = (_DWORD)v11 == -1; + } + } + } + if ( (_BYTE)v11 == BYTE4(v11) ) + *a5 |= 2u; + return v10; +} +// 4B9E49: conditional instruction was optimized away because eax.4==FFFFFFFF + +//----- (004B9E60) -------------------------------------------------------- +int __stdcall std::time_get>::do_get( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + _DWORD *a6, + char a7, + char a8) +{ + _BYTE *v8; // ebp + char v9; // dl + int v10; // esi + unsigned __int64 v11; // rax + char v12; // bp + int (__stdcall *v14)(unsigned __int8); // eax + char v15; // [esp+20h] [ebp-3Ch] + char v16; // [esp+3Ch] [ebp-20h] BYREF + char v17; // [esp+3Dh] [ebp-1Fh] + char v18; // [esp+3Eh] [ebp-1Eh] + char v19; // [esp+3Fh] [ebp-1Dh] + + v8 = std::use_facet>(a4 + 108); + *a5 = 0; + if ( v8[28] ) + { + v9 = v8[66]; + } + else + { + std::ctype::_M_widen_init((int)v8); + v9 = 37; + v14 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v8 + 24); + if ( v14 != std::ctype::do_widen ) + v9 = ((int (__fastcall *)(_BYTE *, int, int))v14)(v8, 37, 37); + } + v16 = v9; + if ( a8 ) + { + v19 = 0; + v17 = a8; + v18 = a7; + } + else + { + v18 = 0; + v17 = a7; + } + v11 = std::time_get>::_M_extract_via_format(a1, a2, a3, a4, a5, a6, &v16); + v10 = v11; + BYTE4(v11) = HIDWORD(v11) == -1; + v12 = BYTE4(v11) & ((_DWORD)v11 != 0); + if ( v12 ) + { + BYTE4(v11) = 0; + if ( *(_DWORD *)(v11 + 8) >= *(_DWORD *)(v11 + 12) ) + { + LODWORD(v11) = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)v11 + 36))(v11); + BYTE4(v11) = 0; + if ( (_DWORD)v11 == -1 ) + { + BYTE4(v11) = v12; + v10 = 0; + } + } + } + LOBYTE(v11) = a3 == -1; + if ( a2 ) + { + if ( a3 == -1 ) + { + LOBYTE(v11) = 0; + if ( a2[2] >= a2[3] ) + { + v15 = BYTE4(v11); + LODWORD(v11) = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + BYTE4(v11) = v15; + LOBYTE(v11) = (_DWORD)v11 == -1; + } + } + } + if ( BYTE4(v11) == (_BYTE)v11 ) + *a5 |= 2u; + return v10; +} +// 4BA009: conditional instruction was optimized away because eax.4==FFFFFFFF + +//----- (004BA020) -------------------------------------------------------- +int __fastcall std::time_get>::get_date(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 16))(a1); +} + +//----- (004BA030) -------------------------------------------------------- +int __fastcall std::time_get>::get_time(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 12))(a1); +} + +//----- (004BA040) -------------------------------------------------------- +int __fastcall std::time_get>::get_year(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 28))(a1); +} + +//----- (004BA050) -------------------------------------------------------- +int __fastcall std::time_get>::date_order(int a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*(_DWORD *)a1 + 8); + if ( v1 == std::time_get>::do_date_order ) + return 0; + else + return v1(); +} + +//----- (004BA070) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_date( + __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + _DWORD *a6) +{ + _DWORD *v6; // eax + __int64 v7; // rax + _DWORD *v8; // ecx + _DWORD *v9; // ebp + _BOOL2 v10; // bx + bool v11; // cl + __int16 *v13; // eax + __int16 v14; // ax + bool v15; // si + __int16 *v16; // eax + __int16 v17; // ax + _DWORD *v18; // [esp+30h] [ebp-2Ch] + + v6 = std::use_facet>(a4 + 108); + v7 = std::time_get>::_M_extract_via_format( + a1, + a2, + a3, + a4, + a5, + a6, + (wchar_t *)*(_DWORD *)(v6[2] + 8)); + v8 = (_DWORD *)v7; + v9 = (_DWORD *)v7; + v10 = WORD2(v7) == 0xFFFF; + if ( v10 && (_DWORD)v7 != 0 ) + { + v15 = v10 && (_DWORD)v7 != 0; + v16 = *(__int16 **)(v7 + 8); + if ( (unsigned int)v16 >= v8[3] ) + { + v18 = v8; + v17 = (*(int (**)(void))(*v8 + 36))(); + v8 = v18; + } + else + { + v17 = *v16; + } + LOBYTE(v10) = 0; + v9 = 0; + if ( v17 == -1 ) + LOBYTE(v10) = v15; + if ( v17 != -1 ) + v9 = v8; + } + v11 = (_WORD)a3 == 0xFFFF; + if ( a2 && (_WORD)a3 == 0xFFFF ) + { + v13 = (__int16 *)a2[2]; + if ( (unsigned int)v13 >= a2[3] ) + v14 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + else + v14 = *v13; + v11 = v14 == -1; + } + if ( v10 == v11 ) + *a5 |= 2u; + return v9; +} + +//----- (004BA1A0) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_time( + __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + _DWORD *a6) +{ + _DWORD *v6; // eax + __int64 v7; // rax + _DWORD *v8; // ecx + _DWORD *v9; // ebp + _BOOL2 v10; // bx + bool v11; // cl + __int16 *v13; // eax + __int16 v14; // ax + bool v15; // si + __int16 *v16; // eax + __int16 v17; // ax + _DWORD *v18; // [esp+30h] [ebp-2Ch] + + v6 = std::use_facet>(a4 + 108); + v7 = std::time_get>::_M_extract_via_format( + a1, + a2, + a3, + a4, + a5, + a6, + (wchar_t *)*(_DWORD *)(v6[2] + 16)); + v8 = (_DWORD *)v7; + v9 = (_DWORD *)v7; + v10 = WORD2(v7) == 0xFFFF; + if ( v10 && (_DWORD)v7 != 0 ) + { + v15 = v10 && (_DWORD)v7 != 0; + v16 = *(__int16 **)(v7 + 8); + if ( (unsigned int)v16 >= v8[3] ) + { + v18 = v8; + v17 = (*(int (**)(void))(*v8 + 36))(); + v8 = v18; + } + else + { + v17 = *v16; + } + LOBYTE(v10) = 0; + v9 = 0; + if ( v17 == -1 ) + LOBYTE(v10) = v15; + if ( v17 != -1 ) + v9 = v8; + } + v11 = (_WORD)a3 == 0xFFFF; + if ( a2 && (_WORD)a3 == 0xFFFF ) + { + v13 = (__int16 *)a2[2]; + if ( (unsigned int)v13 >= a2[3] ) + v14 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + else + v14 = *v13; + v11 = v14 == -1; + } + if ( v10 == v11 ) + *a5 |= 2u; + return v9; +} + +//----- (004BA2D0) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_year( + _DWORD *a1, + unsigned __int16 a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + int a7) +{ + __int16 v7; // dx + _DWORD *v8; // ecx + _DWORD *v9; // ebp + int v10; // ebx + char v11; // bl + char v12; // cl + __int16 *v14; // eax + __int16 v15; // ax + __int16 *v16; // eax + __int16 v17; // ax + bool v18; // zf + _DWORD *v19; // eax + char v20; // [esp+40h] [ebp-3Ch] + _DWORD *v21; // [esp+44h] [ebp-38h] + int v22; // [esp+58h] [ebp-24h] BYREF + int v23[8]; // [esp+5Ch] [ebp-20h] BYREF + + v23[0] = 0; + v8 = std::time_get>::_M_extract_num( + a1, + a2, + a3, + a4, + &v22, + 0, + 9999, + 4u, + a5, + v23); + v9 = v8; + if ( v23[0] ) + { + *a6 |= 4u; + } + else + { + v10 = v22 + 100; + if ( v22 >= 0 ) + v10 = v22 - 1900; + *(_DWORD *)(a7 + 20) = v10; + } + v11 = v7 == -1; + v20 = v11 & (v8 != 0); + if ( v20 ) + { + v16 = (__int16 *)v8[2]; + if ( (unsigned int)v16 >= v8[3] ) + { + v21 = v8; + v17 = (*(int (**)(void))(*v8 + 36))(); + v8 = v21; + } + else + { + v17 = *v16; + } + v18 = v17 == -1; + v11 = 0; + if ( v17 == -1 ) + v11 = v20; + v19 = 0; + if ( !v18 ) + v19 = v8; + v9 = v19; + } + v12 = a4 == -1; + if ( a3 && a4 == -1 ) + { + v14 = (__int16 *)a3[2]; + if ( (unsigned int)v14 >= a3[3] ) + v15 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v15 = *v14; + v12 = v15 == -1; + } + if ( v12 == v11 ) + *a6 |= 2u; + return v9; +} +// 4BA38D: variable 'v7' is possibly undefined +// 4BA2D0: using guessed type int var_20[8]; + +//----- (004BA440) -------------------------------------------------------- +int __fastcall std::time_get>::get_weekday(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 20))(a1); +} + +//----- (004BA450) -------------------------------------------------------- +int std::time_get>::do_date_order() +{ + return 0; +} + +//----- (004BA460) -------------------------------------------------------- +int __fastcall std::time_get>::get_monthname(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 24))(a1); +} + +//----- (004BA470) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::_M_extract_num( + _DWORD *a1, + unsigned __int16 a2, + _DWORD *a3, + __int16 a4, + int *a5, + signed int a6, + int a7, + unsigned int a8, + int a9, + _DWORD *a10) +{ + unsigned int v10; // ebp + int v12; // eax + int v13; // edi + char v14; // dl + char v15; // bl + int v16; // edx + unsigned __int8 v17; // al + unsigned int v18; // eax + __int16 *v19; // eax + __int16 v20; // ax + __int16 *v21; // eax + __int16 v22; // ax + bool v23; // zf + _DWORD *v24; // eax + unsigned __int16 *v26; // eax + bool v27; // [esp+1Bh] [ebp-31h] + unsigned int v28; // [esp+1Ch] [ebp-30h] + void *v30; // [esp+24h] [ebp-28h] + char v32; // [esp+2Eh] [ebp-1Eh] + char v33; // [esp+2Fh] [ebp-1Dh] + + v10 = 10; + v30 = std::use_facet>(a9 + 108); + if ( a8 != 2 ) + { + v12 = 1; + if ( a8 == 4 ) + v12 = 1000; + v10 = v12; + } + v28 = 0; + v32 = a4 == -1; + v13 = 0; + while ( 1 ) + { + v27 = a2 == 0xFFFF; + v14 = v27 && a1 != 0; + if ( v14 ) + break; + v14 = a2 == 0xFFFF; + v15 = v32 & (a3 != 0); + if ( v15 ) + goto LABEL_26; +LABEL_7: + if ( v14 == v32 ) + goto LABEL_33; +LABEL_8: + if ( v28 >= a8 ) + goto LABEL_33; + if ( a1 && a2 == 0xFFFF ) + { + v26 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v26 >= a1[3] ) + v16 = (*(unsigned __int16 (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v16 = *v26; + if ( (_WORD)v16 == 0xFFFF ) + a1 = 0; + } + else + { + v16 = a2; + } + v17 = (*(int (__thiscall **)(void *, int, int))(*(_DWORD *)v30 + 48))(v30, v16, 42) - 48; + if ( v17 > 9u ) + goto LABEL_34; + v13 = (char)v17 + 10 * v13; + if ( (int)(v13 * v10) > a7 || (int)(v10 + v13 * v10) <= a6 ) + goto LABEL_34; + v18 = a1[2]; + v10 /= 0xAu; + if ( v18 >= a1[3] ) + (*(void (__fastcall **)(_DWORD *))(*a1 + 40))(a1); + else + a1[2] = v18 + 2; + ++v28; + a2 = -1; + } + v19 = (__int16 *)a1[2]; + if ( (unsigned int)v19 >= a1[3] ) + { + v20 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + v14 = v27 && a1 != 0; + } + else + { + v20 = *v19; + } + if ( v20 == -1 ) + a1 = 0; + if ( v20 != -1 ) + v14 = 0; + v15 = v32 & (a3 != 0); + if ( !v15 ) + goto LABEL_7; +LABEL_26: + v21 = (__int16 *)a3[2]; + if ( (unsigned int)v21 >= a3[3] ) + { + v33 = v14; + v22 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + v14 = v33; + } + else + { + v22 = *v21; + } + v23 = v22 == -1; + v24 = 0; + if ( !v23 ) + v24 = a3; + a3 = v24; + if ( !v23 ) + v15 = 0; + if ( v14 != v15 ) + goto LABEL_8; +LABEL_33: + if ( v28 == a8 ) + { +LABEL_37: + *a5 = v13; + return a1; + } +LABEL_34: + if ( a8 == 4 && v28 == 2 ) + { + v13 -= 100; + goto LABEL_37; + } + *a10 |= 4u; + return a1; +} + +//----- (004BA6F0) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_weekday( + _DWORD *a1, + int a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + int a7) +{ + _DWORD *v7; // eax + int v8; // ecx + int v9; // eax + __int16 v10; // dx + _DWORD *v11; // ecx + _DWORD *v12; // ebp + char v13; // bl + char v14; // si + char v15; // cl + __int16 *v17; // eax + __int16 v18; // ax + __int16 *v19; // eax + __int16 v20; // ax + _DWORD *v21; // [esp+40h] [ebp-6Ch] + unsigned int v22; // [esp+50h] [ebp-5Ch] BYREF + int v23; // [esp+54h] [ebp-58h] BYREF + int v24[21]; // [esp+58h] [ebp-54h] BYREF + + v23 = 0; + v7 = (_DWORD *)*((_DWORD *)std::use_facet>(a5 + 108) + 2); + v24[0] = v7[18]; + v24[1] = v7[19]; + v24[2] = v7[20]; + v24[3] = v7[21]; + v24[4] = v7[22]; + v24[5] = v7[23]; + v24[6] = v7[24]; + v24[7] = v7[11]; + v24[8] = v7[12]; + v24[9] = v7[13]; + v24[10] = v7[14]; + v24[11] = v7[15]; + v8 = v7[16]; + v9 = v7[17]; + v24[12] = v8; + v24[13] = v9; + v11 = std::time_get>::_M_extract_wday_or_month( + a1, + a2, + a3, + a4, + &v22, + (int)v24, + 7u, + a5, + &v23); + v12 = v11; + if ( v23 ) + *a6 |= 4u; + else + *(_DWORD *)(a7 + 24) = v22; + v13 = v10 == -1; + v14 = v13 & (v11 != 0); + if ( v14 ) + { + v19 = (__int16 *)v11[2]; + if ( (unsigned int)v19 >= v11[3] ) + { + v21 = v11; + v20 = (*(int (**)(void))(*v11 + 36))(); + v11 = v21; + } + else + { + v20 = *v19; + } + v13 = 0; + v12 = 0; + if ( v20 == -1 ) + v13 = v14; + if ( v20 != -1 ) + v12 = v11; + } + v15 = a4 == -1; + if ( a3 && a4 == -1 ) + { + v17 = (__int16 *)a3[2]; + if ( (unsigned int)v17 >= a3[3] ) + v18 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v18 = *v17; + v15 = v18 == -1; + } + if ( v13 == v15 ) + *a6 |= 2u; + return v12; +} +// 4BA81D: variable 'v10' is possibly undefined + +//----- (004BA8E0) -------------------------------------------------------- +int __stdcall std::time_get>::_M_extract_name( + int *a1, + int a2, + _DWORD *a3, + int a4, + int **a5, + int a6, + int a7, + int a8, + _DWORD *a9) +{ + void *v9; // edi + int v10; // eax + void *v11; // esp + void *v12; // esp + int *v13; // edx + char v14; // bl + int v15; // eax + int v17; // ebx + int v18; // edx + size_t v19; // esi + __int16 v20; // ax + int v21; // ecx + int *v22; // edx + int *v23; // ebx + int *v24; // edi + size_t v25; // eax + unsigned int v26; // ebx + unsigned int v27; // esi + size_t v28; // eax + unsigned int v29; // edi + unsigned int v30; // eax + __int16 *v31; // eax + __int16 v32; // ax + bool v33; // zf + int v34; // eax + char v35; // di + char v36; // dl + int *v37; // ecx + size_t v38; // edi + int i; // eax + __int16 v40; // ax + __int16 *v41; // eax + unsigned int v42; // eax + int v43; // ebx + const wchar_t *v44; // edi + unsigned int v45; // ebx + int *v46; // esi + unsigned int v47; // eax + __int16 *v48; // eax + __int16 v49; // ax + char v50; // di + char v51; // dl + wchar_t v52; // di + __int16 v53; // ax + _WORD *v54; // eax + __int16 *v55; // eax + __int16 v56; // ax + bool v57; // zf + _DWORD *v58; // eax + int v59; // eax + __int16 *v60; // eax + __int16 v61; // ax + bool v62; // zf + int v63; // eax + char v64; // cl + __int16 *v65; // eax + __int16 v66; // ax + bool v67; // zf + _DWORD *v68; // eax + _WORD *v69; // eax + int v70; // eax + int v71; // eax + int v72; // eax + __int16 v73; // ax + __int16 *v74; // eax + __int16 v75; // ax + bool v76; // zf + _DWORD *v77; // eax + int v78; // [esp+10h] [ebp-38h] BYREF + _DWORD *v79; // [esp+14h] [ebp-34h] + bool v80; // [esp+1Bh] [ebp-2Dh] + int *v81; // [esp+1Ch] [ebp-2Ch] + int *v82; // [esp+20h] [ebp-28h] + int *v83; // [esp+24h] [ebp-24h] + const wchar_t *v84; // [esp+28h] [ebp-20h] + size_t v85; // [esp+2Ch] [ebp-1Ch] + + v81 = (int *)a4; + v78 = a2; + LOWORD(v84) = a2; + v82 = a1; + v79 = a3; + v9 = std::use_facet>(a8 + 108); + v10 = 16 * ((unsigned int)(4 * a7 + 27) >> 4); + v11 = alloca(v10); + v12 = alloca(v10); + v13 = &v78; + LOBYTE(v85) = (_WORD)a2 == 0xFFFF; + LOBYTE(v83) = v85 & (a1 != 0); + if ( (_BYTE)v83 ) + { + v60 = (__int16 *)a1[2]; + if ( (unsigned int)v60 >= a1[3] ) + { + v72 = *a1; + v82 = &v78; + v61 = (*(int (__fastcall **)(int *))(v72 + 36))(a1); + v13 = v82; + } + else + { + v61 = *v60; + } + v62 = v61 == -1; + v63 = 0; + v64 = (char)v83; + if ( !v62 ) + v63 = (int)a1; + v82 = (int *)v63; + if ( !v62 ) + v64 = 0; + LOBYTE(v83) = v64; + } + else + { + LOBYTE(v83) = v85; + } + v80 = (_WORD)v81 == 0xFFFF; + v14 = v80 && a3 != 0; + if ( v14 ) + { + v65 = (__int16 *)a3[2]; + if ( (unsigned int)v65 >= a3[3] ) + { + v71 = *a3; + v81 = v13; + v66 = (*(int (__fastcall **)(_DWORD *))(v71 + 36))(a3); + v13 = v81; + } + else + { + v66 = *v65; + } + v67 = v66 == -1; + v68 = 0; + if ( !v67 ) + v68 = a3; + v79 = v68; + if ( !v67 ) + v14 = 0; + } + else + { + v14 = v80; + } + if ( v14 == (_BYTE)v83 ) + goto LABEL_6; + if ( v82 && (_BYTE)v85 ) + { + v69 = (_WORD *)v82[2]; + if ( (unsigned int)v69 >= v82[3] ) + { + v83 = v13; + v73 = (*(int (__fastcall **)(int *))(*v82 + 36))(v82); + v13 = v83; + LOWORD(v85) = v73; + } + else + { + LOWORD(v85) = *v69; + } + v70 = 0; + if ( (_WORD)v85 != 0xFFFF ) + v70 = (int)v82; + v82 = (int *)v70; + } + else + { + LOWORD(v85) = (_WORD)v84; + } + if ( !a7 ) + goto LABEL_6; + v83 = v13; + v17 = 0; + v18 = a6; + v19 = 0; + do + { + while ( 1 ) + { + v21 = **(unsigned __int16 **)(v18 + 4 * v17); + if ( (_WORD)v21 == (_WORD)v85 ) + break; + a6 = v18; + v20 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v9 + 24))(v9, v21); + v18 = a6; + if ( v20 == (_WORD)v85 ) + break; + if ( a7 == ++v17 ) + goto LABEL_17; + } + v83[v19++] = v17++; + } + while ( a7 != v17 ); +LABEL_17: + v22 = v83; + v83 = 0; + if ( v19 <= 1 ) + goto LABEL_44; + v23 = v22; + do + { + v24 = v23; + v81 = (int *)*v23; + v25 = wcslen(*(const wchar_t **)(a6 + 4 * (_DWORD)v81)); + v85 = v19; + v26 = 1; + v27 = v25; + do + { + v28 = wcslen(*(const wchar_t **)(a6 + 4 * v24[v26])); + if ( v27 > v28 ) + v27 = v28; + ++v26; + } + while ( v26 < v85 ); + v23 = v24; + v29 = v27; + v19 = v85; + v30 = v82[2]; + if ( v30 >= v82[3] ) + (*(void (__fastcall **)(int *))(*v82 + 40))(v82); + else + v82[2] = v30 + 2; + v83 = (int *)((char *)v83 + 1); + if ( (unsigned int)v83 >= v29 ) + goto LABEL_73; + v31 = (__int16 *)v82[2]; + if ( (unsigned int)v31 >= v82[3] ) + v32 = (*(int (__fastcall **)(int *))(*v82 + 36))(v82); + else + v32 = *v31; + v33 = v32 == -1; + v34 = 0; + if ( !v33 ) + v34 = (int)v82; + v82 = (int *)v34; + v35 = v33; + v36 = v80 && v79 != 0; + if ( v36 ) + { + v55 = (__int16 *)v79[2]; + if ( (unsigned int)v55 >= v79[3] ) + { + LOBYTE(v85) = v80 && v79 != 0; + v56 = (*(int (__fastcall **)(_DWORD *))(*v79 + 36))(v79); + v36 = v85; + } + else + { + v56 = *v55; + } + v57 = v56 == -1; + v58 = 0; + if ( !v57 ) + v58 = v79; + v79 = v58; + if ( !v57 ) + v36 = 0; + if ( v35 == v36 ) + goto LABEL_73; + } + else if ( v33 == v80 ) + { + goto LABEL_73; + } + v37 = v82; + v38 = 0; + v84 = (const wchar_t *)(2 * (_DWORD)v83); + for ( i = (int)v81; ; i = v23[v38] ) + { + LOWORD(v85) = *(const wchar_t *)((char *)v84 + *(_DWORD *)(a6 + 4 * i)); + v40 = -1; + if ( v37 ) + { + v41 = (__int16 *)v37[2]; + if ( (unsigned int)v41 >= v37[3] ) + { + v59 = *v37; + v82 = v37; + v40 = (*(int (**)(void))(v59 + 36))(); + v37 = v82; + } + else + { + v40 = *v41; + } + if ( v40 == -1 ) + v37 = 0; + } + if ( (_WORD)v85 == v40 ) + break; + v23[v38] = v23[--v19]; + if ( v19 <= v38 ) + goto LABEL_42; +LABEL_34: + ; + } + if ( v19 > ++v38 ) + goto LABEL_34; +LABEL_42: + v82 = v37; + } + while ( v19 > 1 ); + LOWORD(v84) = -1; + v22 = v23; +LABEL_44: + if ( v19 == 1 ) + { + v42 = v82[2]; + if ( v42 >= v82[3] ) + { + v85 = (size_t)v22; + (*(void (__fastcall **)(int *))(*v82 + 40))(v82); + v22 = (int *)v85; + } + else + { + v82[2] = v42 + 2; + } + v43 = (int)v83; + v44 = *(const wchar_t **)(a6 + 4 * *v22); + v83 = (int *)*v22; + v45 = v43 + 1; + v85 = wcslen(v44); + if ( v45 < v85 ) + { + v84 = v44; + v46 = v82; + do + { + v48 = (__int16 *)v46[2]; + if ( (unsigned int)v48 >= v46[3] ) + v49 = (*(int (__fastcall **)(int *))(*v46 + 36))(v46); + else + v49 = *v48; + v50 = v49 == -1; + if ( v49 == -1 ) + v46 = 0; + v51 = v80 && v79 != 0; + if ( v51 ) + { + v74 = (__int16 *)v79[2]; + if ( (unsigned int)v74 >= v79[3] ) + { + LOBYTE(v82) = v80 && v79 != 0; + v75 = (*(int (__fastcall **)(_DWORD *))(*v79 + 36))(v79); + v51 = (char)v82; + } + else + { + v75 = *v74; + } + v76 = v75 == -1; + v77 = 0; + if ( !v76 ) + v77 = v79; + v79 = v77; + if ( !v76 ) + v51 = 0; + } + else + { + v51 = v80; + } + if ( v51 == v50 ) + goto LABEL_108; + v52 = v84[v45]; + v53 = -1; + if ( v46 ) + { + v54 = (_WORD *)v46[2]; + v53 = (unsigned int)v54 >= v46[3] ? (*(int (__fastcall **)(int *))(*v46 + 36))(v46) : *v54; + if ( v53 == -1 ) + v46 = 0; + } + if ( v52 != v53 ) + { +LABEL_108: + v82 = v46; + LOWORD(v84) = -1; + goto LABEL_6; + } + v47 = v46[2]; + if ( v47 >= v46[3] ) + (*(void (__fastcall **)(int *))(*v46 + 40))(v46); + else + v46[2] = v47 + 2; + ++v45; + } + while ( v45 < v85 ); + v82 = v46; + } + if ( v85 == v45 ) + { + *a5 = v83; + LOWORD(v84) = -1; + goto LABEL_7; + } +LABEL_73: + LOWORD(v84) = -1; + } +LABEL_6: + *a9 |= 4u; +LABEL_7: + HIWORD(v15) = HIWORD(v78); + LOWORD(v15) = (_WORD)v84; + v78 = v15; + return (int)v82; +} + +//----- (004BAE30) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get_monthname( + _DWORD *a1, + int a2, + _DWORD *a3, + __int16 a4, + int a5, + _DWORD *a6, + int a7) +{ + _DWORD *v7; // eax + int v8; // ecx + int v9; // ecx + __int16 v10; // dx + _DWORD *v11; // ecx + _DWORD *v12; // ebp + char v13; // bl + char v14; // si + char v15; // cl + __int16 *v17; // eax + __int16 v18; // ax + __int16 *v19; // eax + __int16 v20; // ax + _DWORD *v21; // [esp+40h] [ebp-9Ch] + unsigned int v22; // [esp+58h] [ebp-84h] BYREF + int v23; // [esp+5Ch] [ebp-80h] BYREF + int v24[31]; // [esp+60h] [ebp-7Ch] BYREF + + v7 = (_DWORD *)*((_DWORD *)std::use_facet>(a5 + 108) + 2); + v24[0] = v7[37]; + v24[1] = v7[38]; + v24[2] = v7[39]; + v24[3] = v7[40]; + v24[4] = v7[41]; + v24[5] = v7[42]; + v24[6] = v7[43]; + v24[7] = v7[44]; + v24[8] = v7[45]; + v24[9] = v7[46]; + v24[10] = v7[47]; + v24[11] = v7[48]; + v24[12] = v7[25]; + v24[13] = v7[26]; + v24[14] = v7[27]; + v24[15] = v7[28]; + v8 = v7[29]; + v23 = 0; + v24[16] = v8; + v24[17] = v7[30]; + v24[18] = v7[31]; + v24[19] = v7[32]; + v24[20] = v7[33]; + v24[21] = v7[34]; + v9 = v7[35]; + v24[23] = v7[36]; + v24[22] = v9; + v11 = std::time_get>::_M_extract_wday_or_month( + a1, + a2, + a3, + a4, + &v22, + (int)v24, + 0xCu, + a5, + &v23); + v12 = v11; + if ( v23 ) + *a6 |= 4u; + else + *(_DWORD *)(a7 + 16) = v22; + v13 = v10 == -1; + v14 = v13 & (v11 != 0); + if ( v14 ) + { + v19 = (__int16 *)v11[2]; + if ( (unsigned int)v19 >= v11[3] ) + { + v21 = v11; + v20 = (*(int (**)(void))(*v11 + 36))(); + v11 = v21; + } + else + { + v20 = *v19; + } + v13 = 0; + v12 = 0; + if ( v20 == -1 ) + v13 = v14; + if ( v20 != -1 ) + v12 = v11; + } + v15 = a4 == -1; + if ( a3 && a4 == -1 ) + { + v17 = (__int16 *)a3[2]; + if ( (unsigned int)v17 >= a3[3] ) + v18 = (*(int (__fastcall **)(_DWORD *))(*a3 + 36))(a3); + else + v18 = *v17; + v15 = v18 == -1; + } + if ( v13 == v15 ) + *a6 |= 2u; + return v12; +} +// 4BAFFA: variable 'v10' is possibly undefined + +//----- (004BB0C0) -------------------------------------------------------- +__int64 __stdcall std::time_get>::_M_extract_via_format( + __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + _DWORD *a6, + wchar_t *a7) +{ + wchar_t *v7; // ebx + _DWORD *v8; // eax + size_t v9; // ebx + void *v10; // esi + size_t v11; // eax + _DWORD *v12; // ecx + __int16 v13; // ax + char v14; // dl + char v15; // di + char v16; // al + char v17; // di + size_t v18; // edi + size_t v19; // ebp + char v20; // al + unsigned __int8 v21; // al + __int16 v22; // ax + wchar_t v23; // bx + _WORD *v25; // eax + __int16 v26; // ax + __int16 *v27; // eax + __int16 v28; // cx + __int16 *v29; // eax + __int16 v30; // dx + int *v31; // edx + _DWORD *v32; // eax + __int16 v33; // dx + _DWORD *v34; // eax + __int16 v35; // dx + __int16 v36; // dx + unsigned __int16 v37; // ax + __int16 v38; // dx + __int16 v39; // di + __int16 v40; // di + unsigned __int16 v41; // dx + __int16 v42; // dx + __int16 v43; // dx + __int16 v44; // dx + __int16 v45; // dx + __int16 v46; // dx + __int16 v47; // dx + __int16 v48; // dx + _DWORD *v49; // eax + __int16 v50; // dx + _DWORD *v51; // eax + __int16 v52; // dx + __int16 v53; // dx + unsigned __int16 v54; // ax + __int16 v55; // dx + __int16 v56; // dx + unsigned __int16 v57; // ax + unsigned __int16 v58; // ax + __int16 v59; // dx + __int16 v60; // dx + __int16 v61; // dx + __int16 v62; // ax + wchar_t *String; // [esp+20h] [ebp-15Ch] + size_t v64; // [esp+5Ch] [ebp-120h] + wchar_t *v65; // [esp+60h] [ebp-11Ch] + char v66; // [esp+60h] [ebp-11Ch] + _DWORD *v67; // [esp+6Ch] [ebp-110h] + int v68; // [esp+128h] [ebp-54h] BYREF + int *v69; // [esp+12Ch] [ebp-50h] BYREF + wchar_t v70[2]; // [esp+130h] [ebp-4Ch] BYREF + int v71; // [esp+134h] [ebp-48h] + int v72; // [esp+138h] [ebp-44h] + int v73; // [esp+13Ch] [ebp-40h] + int v74; // [esp+140h] [ebp-3Ch] + int v75; // [esp+144h] [ebp-38h] + int v76; // [esp+148h] [ebp-34h] + int v77; // [esp+14Ch] [ebp-30h] + int v78; // [esp+150h] [ebp-2Ch] + int v79; // [esp+154h] [ebp-28h] + int v80; // [esp+158h] [ebp-24h] + int v81; // [esp+15Ch] [ebp-20h] + + v7 = (wchar_t *)(a4 + 108); + v8 = std::use_facet>(a4 + 108); + String = v7; + v9 = 0; + v67 = v8; + v10 = std::use_facet>((int)String); + v11 = wcslen(a7); + v12 = (_DWORD *)a1; + v68 = 0; + v64 = v11; + v13 = WORD2(a1); + while ( 1 ) + { + v14 = v13 == -1; + v15 = v14 & (v12 != 0); + if ( v15 ) + { + v25 = (_WORD *)v12[2]; + v26 = (unsigned int)v25 >= v12[3] ? (*(int (__fastcall **)(_DWORD *))(*v12 + 36))(v12) : *v25; + v14 = 0; + if ( v26 == -1 ) + { + LODWORD(a1) = 0; + v14 = v15; + } + } + v16 = (_WORD)a3 == 0xFFFF; + v17 = v16 & (a2 != 0); + if ( v17 ) + { + v27 = (__int16 *)a2[2]; + if ( (unsigned int)v27 >= a2[3] ) + { + v66 = v14; + v62 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + v14 = v66; + v28 = v62; + } + else + { + v28 = *v27; + } + v16 = 0; + if ( v28 == -1 ) + { + a2 = 0; + v16 = v17; + } + } + if ( v14 == v16 || v9 >= v64 ) + break; + if ( v68 ) + goto LABEL_21; + v18 = v9; + v19 = v9 + 1; + v65 = &a7[v9]; + if ( (*(unsigned __int8 (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v10 + 48))(v10, *v65, 0) == 37 ) + { + v20 = (*(int (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v10 + 48))(v10, a7[v18 + 1], 0); + v69 = 0; + if ( v20 == 69 || v20 == 79 ) + { + v19 = v9 + 2; + v21 = (*(int (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v10 + 48))(v10, a7[v18 + 2], 0) - 65; + if ( v21 > 0x38u ) + { +LABEL_17: + v68 |= 4u; +LABEL_18: + v13 = WORD2(a1); + goto LABEL_19; + } + } + else + { + v21 = v20 - 65; + } + switch ( v21 ) + { + case 0u: + v49 = (_DWORD *)v67[2]; + *(_DWORD *)v70 = v49[11]; + v71 = v49[12]; + v72 = v49[13]; + v73 = v49[14]; + v74 = v49[15]; + v75 = v49[16]; + v76 = v49[17]; + LODWORD(a1) = std::time_get>::_M_extract_name( + (int *)a1, + SHIDWORD(a1), + a2, + a3, + &v69, + (int)v70, + 7, + a4, + &v68); + v13 = v50; + WORD2(a1) = v50; + if ( !v68 ) + goto LABEL_45; + break; + case 1u: + v51 = (_DWORD *)v67[2]; + *(_DWORD *)v70 = v51[25]; + v71 = v51[26]; + v72 = v51[27]; + v73 = v51[28]; + v74 = v51[29]; + v75 = v51[30]; + v76 = v51[31]; + v77 = v51[32]; + v78 = v51[33]; + v79 = v51[34]; + v80 = v51[35]; + v81 = v51[36]; + LODWORD(a1) = std::time_get>::_M_extract_name( + (int *)a1, + SHIDWORD(a1), + a2, + a3, + &v69, + (int)v70, + 12, + a4, + &v68); + v13 = v52; + WORD2(a1) = v52; + if ( !v68 ) + goto LABEL_43; + break; + case 2u: + case 0x18u: + case 0x38u: + LODWORD(a1) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + WORD2(a1), + a2, + a3, + (int *)&v69, + 0, + 9999, + 4u, + a4, + &v68); + v13 = v30; + WORD2(a1) = v30; + if ( !v68 ) + { + v31 = v69 - 475; + if ( (int)v69 < 0 ) + v31 = v69 + 25; + a6[5] = v31; + } + break; + case 3u: + (*(void (__thiscall **)(void *, const char *, const char *, wchar_t *))(*(_DWORD *)v10 + 44))( + v10, + "%m/%d/%y", + "%H:%M", + v70); + LODWORD(a1) = std::time_get>::_M_extract_via_format( + a1, + SHIDWORD(a1), + (int)a2, + a3, + a4, + (int)&v68, + (int)a6, + v70); + v13 = v53; + WORD2(a1) = v53; + break; + case 7u: + LODWORD(a1) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + WORD2(a1), + a2, + a3, + (int *)&v69, + 0, + 23, + 2u, + a4, + &v68); + v13 = v45; + WORD2(a1) = v45; + if ( !v68 ) + goto LABEL_57; + break; + case 8u: + LODWORD(a1) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + WORD2(a1), + a2, + a3, + (int *)&v69, + 1, + 12, + 2u, + a4, + &v68); + v13 = v46; + WORD2(a1) = v46; + if ( !v68 ) +LABEL_57: + a6[2] = v69; + break; + case 0xCu: + LODWORD(a1) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + WORD2(a1), + a2, + a3, + (int *)&v69, + 0, + 59, + 2u, + a4, + &v68); + v13 = v47; + WORD2(a1) = v47; + if ( !v68 ) + a6[1] = v69; + break; + case 0x11u: + (*(void (__thiscall **)(void *, const char *, const char *, wchar_t *))(*(_DWORD *)v10 + 44))( + v10, + "%H:%M", + "%H:%M:%S", + v70); + LODWORD(a1) = std::time_get>::_M_extract_via_format( + a1, + SHIDWORD(a1), + (int)a2, + a3, + a4, + (int)&v68, + (int)a6, + v70); + v13 = v48; + WORD2(a1) = v48; + break; + case 0x12u: + LODWORD(a1) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + WORD2(a1), + a2, + a3, + (int *)&v69, + 0, + 60, + 2u, + a4, + &v68); + v13 = v60; + WORD2(a1) = v60; + if ( !v68 ) + *a6 = v69; + break; + case 0x13u: + (*(void (__thiscall **)(void *, const char *, void *, wchar_t *))(*(_DWORD *)v10 + 44))( + v10, + "%H:%M:%S", + &unk_558106, + v70); + LODWORD(a1) = std::time_get>::_M_extract_via_format( + a1, + SHIDWORD(a1), + (int)a2, + a3, + a4, + (int)&v68, + (int)a6, + v70); + v13 = v61; + WORD2(a1) = v61; + break; + case 0x17u: + LODWORD(a1) = std::time_get>::_M_extract_via_format( + a1, + SHIDWORD(a1), + (int)a2, + a3, + a4, + (int)&v68, + (int)a6, + *(wchar_t **)(v67[2] + 16)); + v13 = v36; + WORD2(a1) = v36; + break; + case 0x19u: + v37 = std::istreambuf_iterator::_M_get((int)&a1); + if ( !(*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v10 + 8))(v10, 1, v37) ) + goto LABEL_17; + LODWORD(a1) = std::time_get>::_M_extract_name( + (int *)a1, + SHIDWORD(a1), + a2, + a3, + (int **)v70, + (int)std::__timepunct_cache::_S_timezones, + 14, + a4, + &v68); + WORD2(a1) = v38; + if ( !std::istreambuf_iterator::equal(&a1, (int)&a2) && !(*(_DWORD *)v70 | v68) ) + { + v39 = std::istreambuf_iterator::_M_get((int)&a1); + if ( v39 == (*(unsigned __int16 (__thiscall **)(void *, int))(*(_DWORD *)v10 + 40))(v10, 45) + || (v40 = std::istreambuf_iterator::_M_get((int)&a1), + v40 == (*(unsigned __int16 (__thiscall **)(void *, int))(*(_DWORD *)v10 + 40))(v10, 43)) ) + { + LODWORD(a1) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + WORD2(a1), + a2, + a3, + (int *)v70, + 0, + 23, + 2u, + a4, + &v68); + WORD2(a1) = v41; + LODWORD(a1) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + v41, + a2, + a3, + (int *)v70, + 0, + 59, + 2u, + a4, + &v68); + WORD2(a1) = v42; + } + } + goto LABEL_18; + case 0x20u: + v34 = (_DWORD *)v67[2]; + *(_DWORD *)v70 = v34[18]; + v71 = v34[19]; + v72 = v34[20]; + v73 = v34[21]; + v74 = v34[22]; + v75 = v34[23]; + v76 = v34[24]; + LODWORD(a1) = std::time_get>::_M_extract_name( + (int *)a1, + SHIDWORD(a1), + a2, + a3, + &v69, + (int)v70, + 7, + a4, + &v68); + v13 = v35; + WORD2(a1) = v35; + if ( !v68 ) +LABEL_45: + a6[6] = v69; + break; + case 0x21u: + case 0x27u: + v32 = (_DWORD *)v67[2]; + *(_DWORD *)v70 = v32[37]; + v71 = v32[38]; + v72 = v32[39]; + v73 = v32[40]; + v74 = v32[41]; + v75 = v32[42]; + v76 = v32[43]; + v77 = v32[44]; + v78 = v32[45]; + v79 = v32[46]; + v80 = v32[47]; + v81 = v32[48]; + LODWORD(a1) = std::time_get>::_M_extract_name( + (int *)a1, + SHIDWORD(a1), + a2, + a3, + &v69, + (int)v70, + 12, + a4, + &v68); + v13 = v33; + WORD2(a1) = v33; + if ( !v68 ) +LABEL_43: + a6[4] = v69; + break; + case 0x22u: + LODWORD(a1) = std::time_get>::_M_extract_via_format( + a1, + SHIDWORD(a1), + (int)a2, + a3, + a4, + (int)&v68, + (int)a6, + *(wchar_t **)(v67[2] + 24)); + v13 = v43; + WORD2(a1) = v43; + break; + case 0x23u: + LODWORD(a1) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + WORD2(a1), + a2, + a3, + (int *)&v69, + 1, + 31, + 2u, + a4, + &v68); + v13 = v44; + WORD2(a1) = v44; + if ( !v68 ) + goto LABEL_55; + break; + case 0x24u: + v54 = std::istreambuf_iterator::_M_get((int)&a1); + if ( (*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v10 + 8))(v10, 32, v54) ) + { + std::wstreambuf::sbumpc((_DWORD *)a1); + WORD2(a1) = -1; + LODWORD(a1) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + 0xFFFFu, + a2, + a3, + (int *)&v69, + 1, + 9, + 1u, + a4, + &v68); + } + else + { + LODWORD(a1) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + WORD2(a1), + a2, + a3, + (int *)&v69, + 10, + 31, + 2u, + a4, + &v68); + } + WORD2(a1) = v55; + v13 = v55; + if ( !v68 ) +LABEL_55: + a6[3] = v69; + break; + case 0x2Cu: + LODWORD(a1) = std::time_get>::_M_extract_num( + (_DWORD *)a1, + WORD2(a1), + a2, + a3, + (int *)&v69, + 1, + 12, + 2u, + a4, + &v68); + v13 = v56; + WORD2(a1) = v56; + if ( !v68 ) + a6[4] = (char *)v69 - 1; + break; + case 0x2Du: + v57 = std::istreambuf_iterator::_M_get((int)&a1); + if ( (*(unsigned __int8 (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v10 + 48))(v10, v57, 0) != 10 ) + goto LABEL_17; + goto LABEL_75; + case 0x33u: + v58 = std::istreambuf_iterator::_M_get((int)&a1); + if ( (*(unsigned __int8 (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v10 + 48))(v10, v58, 0) != 9 ) + goto LABEL_17; +LABEL_75: + std::wstreambuf::sbumpc((_DWORD *)a1); + v13 = -1; + WORD2(a1) = -1; + break; + case 0x37u: + LODWORD(a1) = std::time_get>::_M_extract_via_format( + a1, + SHIDWORD(a1), + (int)a2, + a3, + a4, + (int)&v68, + (int)a6, + *(wchar_t **)(v67[2] + 8)); + v13 = v59; + WORD2(a1) = v59; + break; + default: + goto LABEL_17; + } +LABEL_19: + v12 = (_DWORD *)a1; + v9 = v19 + 1; + } + else + { + v12 = (_DWORD *)a1; + v22 = WORD2(a1); + v23 = *v65; + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v29 = *(__int16 **)(a1 + 8); + if ( (unsigned int)v29 >= *(_DWORD *)(a1 + 12) ) + v22 = (*(int (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 36))(a1); + else + v22 = *v29; + if ( v22 == -1 ) + { + LODWORD(a1) = 0; + v12 = 0; + } + else + { + v12 = (_DWORD *)a1; + } + } + if ( v23 == v22 ) + { + std::wstreambuf::sbumpc(v12); + v9 = v19; + v12 = (_DWORD *)a1; + WORD2(a1) = -1; + v13 = -1; + } + else + { + v68 |= 4u; + v13 = WORD2(a1); + v9 = v19; + } + } + } + if ( v9 != v64 || v68 ) +LABEL_21: + *a5 |= 4u; + return a1; +} +// 4BB406: variable 'v30' is possibly undefined +// 4BB56A: variable 'v33' is possibly undefined +// 4BB66C: variable 'v35' is possibly undefined +// 4BB70F: variable 'v36' is possibly undefined +// 4BB7DC: variable 'v38' is possibly undefined +// 4BB8F6: variable 'v41' is possibly undefined +// 4BB96C: variable 'v42' is possibly undefined +// 4BB9FB: variable 'v43' is possibly undefined +// 4BBA9C: variable 'v44' is possibly undefined +// 4BBB56: variable 'v45' is possibly undefined +// 4BBC10: variable 'v46' is possibly undefined +// 4BBCB9: variable 'v47' is possibly undefined +// 4BBD7C: variable 'v48' is possibly undefined +// 4BBE65: variable 'v50' is possibly undefined +// 4BBF97: variable 'v52' is possibly undefined +// 4BC049: variable 'v53' is possibly undefined +// 4BC117: variable 'v55' is possibly undefined +// 4BC1C7: variable 'v56' is possibly undefined +// 4BC2EA: variable 'v59' is possibly undefined +// 4BC388: variable 'v60' is possibly undefined +// 4BC44A: variable 'v61' is possibly undefined +// 53F6A0: using guessed type wchar_t *std::__timepunct_cache::_S_timezones[3]; + +//----- (004BC560) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::_M_extract_wday_or_month( + _DWORD *a1, + int a2, + _DWORD *a3, + __int16 a4, + unsigned int *a5, + int a6, + unsigned int a7, + int a8, + _DWORD *a9) +{ + int v9; // eax + void *v10; // esp + void *v11; // esp + char v12; // dl + char v13; // di + char v14; // bl + unsigned int v15; // edi + int *v16; // esi + char v17; // dl + char v18; // bl + unsigned int v19; // edx + unsigned int *v20; // ecx + int v21; // ebx + unsigned int v22; // eax + __int16 *v23; // eax + __int16 v24; // ax + bool v25; // zf + _DWORD *v26; // eax + __int16 *v28; // eax + __int16 v29; // ax + bool v30; // zf + _DWORD *v31; // eax + __int16 *v32; // eax + _DWORD *v33; // eax + unsigned int v34; // eax + __int16 v35; // si + int v36; // edx + int v37; // ebx + int v38; // edi + __int16 v39; // ax + int v40; // ecx + unsigned int v41; // eax + int v42; // eax + void *v43; // esp + void *v44; // esp + int v45; // ebx + __int16 *v46; // eax + __int16 v47; // ax + bool v48; // zf + _DWORD *v49; // eax + _WORD *v50; // eax + __int16 v51; // ax + __int16 *v52; // eax + _DWORD *v53; // eax + int v54; // eax + _DWORD v55[2]; // [esp+10h] [ebp-48h] BYREF + _DWORD *v56; // [esp+18h] [ebp-40h] + char v57; // [esp+1Fh] [ebp-39h] + _DWORD *v58; // [esp+20h] [ebp-38h] + unsigned int v59; // [esp+24h] [ebp-34h] + __int16 v60; // [esp+28h] [ebp-30h] + __int16 v61; // [esp+2Ah] [ebp-2Eh] + int v62; // [esp+2Ch] [ebp-2Ch] + int *v63; // [esp+30h] [ebp-28h] + int *v64; // [esp+34h] [ebp-24h] + unsigned int v65; // [esp+38h] [ebp-20h] + unsigned int v66; // [esp+3Ch] [ebp-1Ch] + + v58 = a1; + v55[1] = a2; + v60 = a2; + v56 = a3; + v63 = (int *)std::use_facet>(a8 + 108); + v9 = 16 * ((8 * a7 + 27) >> 4); + v10 = alloca(v9); + v11 = alloca(v9); + v12 = (_WORD)a2 == 0xFFFF; + v64 = v55; + v13 = v12 & (a1 != 0); + if ( v13 ) + { + v50 = (_WORD *)v58[2]; + v51 = (unsigned int)v50 >= v58[3] ? (*(int (__fastcall **)(_DWORD *))(*v58 + 36))(v58) : *v50; + v12 = 0; + if ( v51 == -1 ) + { + v12 = v13; + v58 = 0; + v13 = 0; + } + } + v57 = a4 == -1; + v14 = v57 & (a3 != 0); + if ( v14 ) + { + v46 = (__int16 *)a3[2]; + if ( (unsigned int)v46 >= a3[3] ) + { + v54 = *a3; + LOBYTE(v66) = v12; + v47 = (*(int (__fastcall **)(_DWORD *))(v54 + 36))(a3); + v12 = v66; + } + else + { + v47 = *v46; + } + v48 = v47 == -1; + v49 = 0; + if ( !v48 ) + v49 = a3; + v56 = v49; + if ( !v48 ) + v14 = 0; + } + else + { + v14 = v57; + } + if ( v12 == v14 ) + { + v65 = 0; + v15 = 0; + v16 = 0; + goto LABEL_6; + } + v35 = v60; + if ( v13 ) + { + v52 = (__int16 *)v58[2]; + if ( (unsigned int)v52 >= v58[3] ) + v35 = (*(int (__fastcall **)(_DWORD *))(*v58 + 36))(v58); + else + v35 = *v52; + v53 = 0; + if ( v35 != -1 ) + v53 = v58; + v58 = v53; + } + v15 = 2 * a7; + if ( !(2 * a7) ) + { + v65 = 0; + v16 = 0; + goto LABEL_6; + } + v66 = 2 * a7; + v36 = a6; + v37 = 0; + v65 = 0; + v38 = (int)v63; + do + { + while ( 1 ) + { + v40 = **(unsigned __int16 **)(v36 + 4 * v37); + if ( (_WORD)v40 == v35 ) + break; + a6 = v36; + v39 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v38 + 24))(v38, v40); + v36 = a6; + if ( v39 == v35 ) + break; + if ( ++v37 == v66 ) + goto LABEL_62; + } + v41 = v65; + v64[v65] = v37++; + v65 = v41 + 1; + } + while ( v37 != v66 ); +LABEL_62: + v15 = 0; + v16 = 0; + if ( v65 ) + { + std::wstreambuf::sbumpc(v58); + v42 = 16 * ((4 * v65 + 27) >> 4); + v43 = alloca(v42); + v44 = alloca(v42); + v63 = v55; + v66 = (unsigned int)v55; + v45 = (int)v64; + do + { + *(_DWORD *)(v66 + 4 * v15) = wcslen(*(const wchar_t **)(a6 + 4 * *(_DWORD *)(v45 + 4 * v15))); + ++v15; + } + while ( v65 != v15 ); + v65 = 1; + v16 = v63; + v60 = -1; + } +LABEL_6: + while ( 2 ) + { + LOBYTE(v66) = v60 == -1; + v17 = v66 & (v58 != 0); + if ( v17 ) + { + v28 = (__int16 *)v58[2]; + if ( (unsigned int)v28 >= v58[3] ) + { + LOBYTE(v63) = v66 & (v58 != 0); + v29 = (*(int (__fastcall **)(_DWORD *))(*v58 + 36))(v58); + v17 = (char)v63; + } + else + { + v29 = *v28; + } + v30 = v29 == -1; + v31 = 0; + if ( !v30 ) + v31 = v58; + v58 = v31; + if ( !v30 ) + v17 = 0; + } + else + { + v17 = v66; + } + v18 = v57 & (v56 != 0); + if ( v18 ) + { + v23 = (__int16 *)v56[2]; + if ( (unsigned int)v23 >= v56[3] ) + { + LOBYTE(v63) = v17; + v24 = (*(int (__fastcall **)(_DWORD *))(*v56 + 36))(v56); + v17 = (char)v63; + } + else + { + v24 = *v23; + } + v25 = v24 == -1; + v26 = 0; + if ( !v25 ) + v26 = v56; + v56 = v26; + if ( !v25 ) + v18 = 0; + if ( v17 == v18 ) + break; + } + else if ( v17 == v57 ) + { + break; + } + if ( v58 && (_BYTE)v66 ) + { + v32 = (__int16 *)v58[2]; + if ( (unsigned int)v32 >= v58[3] ) + v61 = (*(int (__fastcall **)(_DWORD *))(*v58 + 36))(v58); + else + v61 = *v32; + v33 = 0; + if ( v61 != -1 ) + v33 = v58; + v58 = v33; + } + else + { + v61 = v60; + } + if ( !v15 ) + { +LABEL_34: + *a9 |= 4u; + return v58; + } + v66 = (unsigned int)v16; + v19 = 0; + v62 = 0; + v59 = 2 * v65; + do + { + while ( 1 ) + { + v20 = (unsigned int *)(v66 + 4 * v19); + if ( *v20 > v65 ) + break; + ++v62; + ++v19; +LABEL_16: + if ( v19 >= v15 ) + goto LABEL_20; + } + v21 = v64[v19]; + v63 = &v64[v19]; + if ( *(_WORD *)(*(_DWORD *)(a6 + 4 * v21) + v59) == v61 ) + { + ++v19; + goto LABEL_16; + } + *v63 = v64[--v15]; + *v20 = *(_DWORD *)(v66 + 4 * v15); + } + while ( v19 < v15 ); +LABEL_20: + v16 = (int *)v66; + if ( v15 != v62 ) + { + v22 = v58[2]; + if ( v22 >= v58[3] ) + (*(void (__fastcall **)(_DWORD *))(*v58 + 40))(v58); + else + v58[2] = v22 + 2; + ++v65; + v60 = -1; + continue; + } + break; + } + if ( v15 != 1 ) + { + if ( v15 == 2 && (*v16 == v65 || v16[1] == v65) ) + goto LABEL_52; + goto LABEL_34; + } + if ( *v16 != v65 ) + goto LABEL_34; +LABEL_52: + v34 = *v64; + if ( *v64 >= a7 ) + v34 = *v64 - a7; + *a5 = v34; + return v58; +} + +//----- (004BCA00) -------------------------------------------------------- +_DWORD *__thiscall std::time_get>::get( + void *this, + _DWORD *a2, + int a3, + _DWORD *a4, + int a5, + _DWORD *a6, + _DWORD *a7, + _DWORD *a8, + unsigned __int16 *a9, + unsigned __int16 *a10) +{ + unsigned __int16 *v10; // ebp + void *v12; // edi + int v13; // edx + __int16 v14; // bx + int v15; // edx + __int16 v16; // bx + unsigned int v17; // eax + char v18; // bl + char v19; // dl + char v20; // al + __int16 v21; // bx + void *v22; // eax + int v23; // edx + _DWORD *v24; // ebx + __int64 v25; // rax + char v26; // bp + char v28; // bl + char v29; // dl + int v30; // edx + unsigned int v31; // eax + __int16 *v32; // eax + __int16 v33; // ax + __int16 *v34; // eax + __int16 v35; // ax + bool v36; // zf + _DWORD *v37; // eax + unsigned __int16 *v38; // eax + unsigned __int16 *v39; // eax + void *v40; // eax + __int16 *v41; // eax + __int16 v42; // ax + bool v43; // zf + _DWORD *v44; // eax + __int16 *v45; // eax + __int16 v46; // ax + unsigned __int16 *v47; // eax + unsigned __int16 *v48; // eax + __int64 v49; // [esp+30h] [ebp-7Ch] + int v50; // [esp+30h] [ebp-7Ch] + __int16 v51; // [esp+56h] [ebp-56h] + unsigned __int16 v52; // [esp+5Ah] [ebp-52h] + unsigned __int16 *v54; // [esp+60h] [ebp-4Ch] + char v55; // [esp+60h] [ebp-4Ch] + unsigned __int16 *v56; // [esp+68h] [ebp-44h] + char v57; // [esp+70h] [ebp-3Ch] + __int16 v58; // [esp+76h] [ebp-36h] + wchar_t v60; // [esp+88h] [ebp-24h] BYREF + __int16 v61; // [esp+8Ah] [ebp-22h] + __int16 v62; // [esp+8Ch] [ebp-20h] + __int16 v63; // [esp+8Eh] [ebp-1Eh] + + v10 = a9; + v52 = a3; + HIWORD(v56) = a5; + v12 = std::use_facet>((int)(a6 + 27)); + *a7 = 0; + if ( a9 != a10 ) + { + BYTE1(v56) = (_WORD)a5 == 0xFFFF; + while ( 1 ) + { + v18 = v52 == 0xFFFF && a2 != 0; + if ( v18 ) + { + v45 = (__int16 *)a2[2]; + if ( (unsigned int)v45 >= a2[3] ) + v46 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + else + v46 = *v45; + if ( v46 == -1 ) + a2 = 0; + if ( v46 != -1 ) + v18 = 0; + } + else + { + v18 = v52 == 0xFFFF; + } + v19 = BYTE1(v56) & (a4 != 0); + if ( v19 ) + { + v41 = (__int16 *)a4[2]; + if ( (unsigned int)v41 >= a4[3] ) + { + v42 = (*(int (__fastcall **)(_DWORD *))(*a4 + 36))(a4); + v19 = BYTE1(v56) & (a4 != 0); + } + else + { + v42 = *v41; + } + v43 = v42 == -1; + v44 = 0; + if ( !v43 ) + v44 = a4; + a4 = v44; + if ( !v43 ) + v19 = 0; + if ( v19 == v18 ) + { +LABEL_81: + *a7 = 6; + return a2; + } + } + else if ( BYTE1(v56) == v18 ) + { + goto LABEL_81; + } + if ( (*(unsigned __int8 (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v12 + 48))(v12, *v10, 0) == 37 ) + { + v54 = v10 + 1; + if ( a10 == v10 + 1 ) + goto LABEL_114; + v20 = (*(int (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v12 + 48))(v12, v10[1], 0); + v21 = v20; + if ( v20 == 69 || v20 == 79 ) + { + if ( a10 == v10 + 2 ) + goto LABEL_114; + (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v12 + 48))(v12, v10[2]); + HIWORD(v39) = (unsigned int)(v10 + 2) >> 16; + LOWORD(v39) = v51; + v54 = v39; + HIWORD(v39) = HIWORD(v56); + LOWORD(v39) = HIWORD(a3); + v56 = v39; + HIWORD(v10) = HIWORD(v39); + v40 = std::use_facet>((int)this); + *a6 = 0; + v60 = (*(int (__thiscall **)(void *, int, int))(*(_DWORD *)v40 + 40))(v40, 37, v50); + HIWORD(v23) = v58; + if ( (_BYTE)v21 ) + { + v61 = v21; + v62 = (char)v51; + v63 = 0; +LABEL_27: + LOWORD(v10) = HIWORD(v56); + LODWORD(v49) = a2; + LOWORD(v23) = v52; + HIDWORD(v49) = v23; + v25 = std::time_get>::_M_extract_via_format( + v49, + a4, + (int)v10, + (int)a6, + a7, + a8, + &v60); + v24 = (_DWORD *)v25; + a2 = (_DWORD *)v25; + v52 = WORD2(v25); + BYTE4(v25) = WORD2(v25) == 0xFFFF; + v26 = BYTE4(v25) & ((_DWORD)v25 != 0); + if ( v26 ) + { + LODWORD(v25) = *(_DWORD *)(v25 + 8); + if ( (unsigned int)v25 >= v24[3] ) + LOWORD(v25) = (*(int (__fastcall **)(_DWORD *))(*v24 + 36))(v24); + else + LOWORD(v25) = *(_WORD *)v25; + BYTE4(v25) = 0; + a2 = 0; + if ( (_WORD)v25 == 0xFFFF ) + BYTE4(v25) = v26; + if ( (_WORD)v25 != 0xFFFF ) + a2 = v24; + } + if ( a4 && BYTE1(v56) ) + { + LODWORD(v25) = a4[2]; + if ( (unsigned int)v25 >= a4[3] ) + { + v57 = BYTE4(v25); + LOWORD(v25) = (*(int (__fastcall **)(_DWORD *))(*a4 + 36))(a4); + BYTE4(v25) = v57; + } + else + { + LOWORD(v25) = *(_WORD *)v25; + } + LOBYTE(v25) = (_WORD)v25 == 0xFFFF; + } + else + { + LOBYTE(v25) = BYTE1(v56); + } + if ( (_BYTE)v25 == BYTE4(v25) ) + *a7 |= 2u; + v10 = v54 + 1; + if ( a10 == v54 + 1 ) + return a2; + goto LABEL_16; + } + v21 = (char)v51; + } + else + { + HIWORD(v10) = HIWORD(a5); + v22 = std::use_facet>((int)(a6 + 27)); + *a7 = 0; + v60 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v22 + 40))(v22, 37); + HIWORD(v23) = HIWORD(a3); + } + v61 = v21; + v62 = 0; + goto LABEL_27; + } + if ( (*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v12 + 8))(v12, 32, *v10) ) + break; + if ( a2 && v52 == 0xFFFF ) + { + v47 = (unsigned __int16 *)a2[2]; + if ( (unsigned int)v47 >= a2[3] ) + v13 = (*(unsigned __int16 (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + else + v13 = *v47; + if ( (_WORD)v13 == 0xFFFF ) + a2 = 0; + } + else + { + v13 = v52; + } + v14 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v12 + 32))(v12, v13); + if ( (*(unsigned __int16 (__thiscall **)(void *, _DWORD))(*(_DWORD *)v12 + 32))(v12, *v10) != v14 ) + { + if ( a2 && v52 == 0xFFFF ) + { + v48 = (unsigned __int16 *)a2[2]; + if ( (unsigned int)v48 >= a2[3] ) + v15 = (*(unsigned __int16 (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + else + v15 = *v48; + if ( (_WORD)v15 == 0xFFFF ) + a2 = 0; + } + else + { + v15 = v52; + } + v16 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v12 + 24))(v12, v15); + if ( (*(unsigned __int16 (__thiscall **)(void *, _DWORD))(*(_DWORD *)v12 + 24))(v12, *v10) != v16 ) + { +LABEL_114: + *a7 = 4; + return a2; + } + } + v17 = a2[2]; + if ( v17 >= a2[3] ) + (*(void (__fastcall **)(_DWORD *))(*a2 + 40))(a2); + else + a2[2] = v17 + 2; + ++v10; + v52 = -1; +LABEL_15: + if ( a10 == v10 ) + return a2; +LABEL_16: + if ( *a7 ) + return a2; + } + for ( ++v10; a10 != v10; ++v10 ) + { + if ( !(*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v12 + 8))(v12, 32, *v10) ) + break; + } + while ( 1 ) + { + v28 = v52 == 0xFFFF && a2 != 0; + if ( v28 ) + { + v32 = (__int16 *)a2[2]; + if ( (unsigned int)v32 >= a2[3] ) + v33 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + else + v33 = *v32; + if ( v33 == -1 ) + a2 = 0; + if ( v33 != -1 ) + v28 = 0; + v29 = BYTE1(v56) & (a4 != 0); + if ( !v29 ) + { +LABEL_41: + if ( BYTE1(v56) == v28 ) + goto LABEL_15; + goto LABEL_42; + } + } + else + { + v28 = v52 == 0xFFFF; + v29 = BYTE1(v56) & (a4 != 0); + if ( !v29 ) + goto LABEL_41; + } + v34 = (__int16 *)a4[2]; + if ( (unsigned int)v34 >= a4[3] ) + { + v55 = v29; + v35 = (*(int (__fastcall **)(_DWORD *))(*a4 + 36))(a4); + v29 = v55; + } + else + { + v35 = *v34; + } + v36 = v35 == -1; + v37 = 0; + if ( !v36 ) + v37 = a4; + a4 = v37; + if ( !v36 ) + v29 = 0; + if ( v29 == v28 ) + goto LABEL_15; +LABEL_42: + if ( a2 && v52 == 0xFFFF ) + { + v38 = (unsigned __int16 *)a2[2]; + if ( (unsigned int)v38 >= a2[3] ) + v30 = (*(unsigned __int16 (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + else + v30 = *v38; + if ( (_WORD)v30 == 0xFFFF ) + a2 = 0; + } + else + { + v30 = v52; + } + if ( !(*(unsigned __int8 (__thiscall **)(void *, int, int))(*(_DWORD *)v12 + 8))(v12, 32, v30) ) + goto LABEL_15; + v31 = a2[2]; + if ( v31 >= a2[3] ) + (*(void (__fastcall **)(_DWORD *))(*a2 + 40))(a2); + else + a2[2] = v31 + 2; + v52 = -1; + } + } + return a2; +} +// 4BCEE5: variable 'v51' is possibly undefined +// 4BCF27: variable 'v50' is possibly undefined +// 4BCF34: variable 'v58' is possibly undefined + +//----- (004BD150) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::get( + __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + _DWORD *a6, + char a7, + char a8) +{ + void *v8; // eax + __int64 v9; // rax + _DWORD *v10; // ecx + _DWORD *v11; // ebp + _BOOL2 v12; // bx + bool v13; // si + bool v14; // cl + __int16 *v16; // eax + __int16 v17; // ax + __int16 *v18; // eax + __int16 v19; // ax + int v20; // [esp+34h] [ebp-3Ch] + wchar_t v21; // [esp+4Ch] [ebp-24h] BYREF + __int16 v22; // [esp+4Eh] [ebp-22h] + __int16 v23; // [esp+50h] [ebp-20h] + __int16 v24; // [esp+52h] [ebp-1Eh] + + v8 = std::use_facet>(a4 + 108); + *a5 = 0; + v21 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v8 + 40))(v8, 37); + if ( a8 ) + { + v23 = a7; + v22 = a8; + v24 = 0; + } + else + { + v22 = a7; + v23 = 0; + } + v9 = std::time_get>::_M_extract_via_format(a1, a2, a3, a4, a5, a6, &v21); + v10 = (_DWORD *)v9; + v11 = (_DWORD *)v9; + v12 = WORD2(v9) == 0xFFFF; + v13 = v12 && (_DWORD)v9 != 0; + if ( v13 ) + { + v18 = *(__int16 **)(v9 + 8); + if ( (unsigned int)v18 >= v10[3] ) + { + v20 = (int)v10; + v19 = (*(int (**)(void))(*v10 + 36))(); + v10 = (_DWORD *)v20; + } + else + { + v19 = *v18; + } + LOBYTE(v12) = 0; + v11 = 0; + if ( v19 == -1 ) + LOBYTE(v12) = v13; + if ( v19 != -1 ) + v11 = v10; + } + v14 = (_WORD)a3 == 0xFFFF; + if ( a2 && (_WORD)a3 == 0xFFFF ) + { + v16 = (__int16 *)a2[2]; + if ( (unsigned int)v16 >= a2[3] ) + v17 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + else + v17 = *v16; + v14 = v17 == -1; + } + if ( v12 == v14 ) + *a5 |= 2u; + return v11; +} + +//----- (004BD310) -------------------------------------------------------- +_DWORD *__stdcall std::time_get>::do_get( + __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + _DWORD *a6, + char a7, + char a8) +{ + void *v8; // eax + __int64 v9; // rax + _DWORD *v10; // ecx + _DWORD *v11; // ebp + _BOOL2 v12; // bx + bool v13; // si + bool v14; // cl + __int16 *v16; // eax + __int16 v17; // ax + __int16 *v18; // eax + __int16 v19; // ax + int v20; // [esp+34h] [ebp-3Ch] + wchar_t v21; // [esp+4Ch] [ebp-24h] BYREF + __int16 v22; // [esp+4Eh] [ebp-22h] + __int16 v23; // [esp+50h] [ebp-20h] + __int16 v24; // [esp+52h] [ebp-1Eh] + + v8 = std::use_facet>(a4 + 108); + *a5 = 0; + v21 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v8 + 40))(v8, 37); + if ( a8 ) + { + v23 = a7; + v22 = a8; + v24 = 0; + } + else + { + v22 = a7; + v23 = 0; + } + v9 = std::time_get>::_M_extract_via_format(a1, a2, a3, a4, a5, a6, &v21); + v10 = (_DWORD *)v9; + v11 = (_DWORD *)v9; + v12 = WORD2(v9) == 0xFFFF; + v13 = v12 && (_DWORD)v9 != 0; + if ( v13 ) + { + v18 = *(__int16 **)(v9 + 8); + if ( (unsigned int)v18 >= v10[3] ) + { + v20 = (int)v10; + v19 = (*(int (**)(void))(*v10 + 36))(); + v10 = (_DWORD *)v20; + } + else + { + v19 = *v18; + } + LOBYTE(v12) = 0; + v11 = 0; + if ( v19 == -1 ) + LOBYTE(v12) = v13; + if ( v19 != -1 ) + v11 = v10; + } + v14 = (_WORD)a3 == 0xFFFF; + if ( a2 && (_WORD)a3 == 0xFFFF ) + { + v16 = (__int16 *)a2[2]; + if ( (unsigned int)v16 >= a2[3] ) + v17 = (*(int (__fastcall **)(_DWORD *))(*a2 + 36))(a2); + else + v17 = *v16; + v14 = v17 == -1; + } + if ( v12 == v14 ) + *a5 |= 2u; + return v11; +} + +//----- (004BD4D0) -------------------------------------------------------- +int __fastcall std::time_get>::get_date(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 16))(a1); +} + +//----- (004BD4E0) -------------------------------------------------------- +int __fastcall std::time_get>::get_time(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 12))(a1); +} + +//----- (004BD4F0) -------------------------------------------------------- +int __fastcall std::time_get>::get_year(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 28))(a1); +} + +//----- (004BD500) -------------------------------------------------------- +_DWORD *__thiscall std::time_put>::put( + void *this, + _DWORD *a2, + int a3, + int a4, + char a5, + int a6, + unsigned __int8 *a7, + unsigned __int8 *a8) +{ + int v8; // ebp + unsigned __int8 *v9; // ebx + _BYTE *v10; // eax + _BYTE *v11; // esi + int v12; // edx + unsigned __int8 *v13; // edi + unsigned __int8 v14; // al + unsigned __int8 v15; // cl + int (__stdcall *v16)(unsigned __int8, int); // eax + int v17; // edx + signed __int8 v18; // al + unsigned __int8 v19; // cl + int (__stdcall *v20)(unsigned __int8, int); // eax + int v21; // ecx + int v22; // ebx + int v23; // edx + int v24; // ebx + __int64 v25; // rax + int v27; // edx + _BYTE *v28; // eax + int v29; // ecx + char v30; // dl + int (__stdcall *v31)(unsigned __int8, int); // eax + char v32; // al + int v33; // [esp+18h] [ebp-44h] + char v34; // [esp+27h] [ebp-35h] + int v37; // [esp+34h] [ebp-28h] + int v38; // [esp+34h] [ebp-28h] + int v39; // [esp+34h] [ebp-28h] + + v8 = a3; + v9 = a7; + v34 = a3; + v10 = std::use_facet>(a4 + 108); + if ( a7 != a8 ) + { + v11 = v10; + while ( 1 ) + { + v12 = *v9; + v13 = v9 + 1; + v14 = v11[v12 + 285]; + v15 = *v9; + if ( !v14 ) + { + v16 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v11 + 32); + if ( v16 != std::ctype::do_narrow ) + { + v38 = *v9; + v15 = ((int (__thiscall *)(_BYTE *, _DWORD, _DWORD))v16)(v11, (char)v12, 0); + v12 = v38; + } + if ( !v15 ) + goto LABEL_3; + v11[v12 + 285] = v15; + v14 = v15; + } + if ( v14 == 37 ) + { + if ( a8 == v13 ) + return a2; + v17 = v9[1]; + v18 = v11[v17 + 285]; + v19 = v9[1]; + if ( !v18 ) + { + v20 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v11 + 32); + if ( v20 != std::ctype::do_narrow ) + { + v39 = v9[1]; + v19 = ((int (__thiscall *)(_BYTE *, _DWORD, _DWORD))v20)(v11, (char)v17, 0); + v17 = v39; + } + if ( !v19 ) + { + v21 = 0; + v22 = 0; + goto LABEL_21; + } + v11[v17 + 285] = v19; + v18 = v19; + } + if ( v18 == 69 || v18 == 79 ) + { + v13 = v9 + 2; + if ( a8 == v9 + 2 ) + return a2; + v29 = v9[2]; + v22 = v18; + v37 = v29; + v30 = v29; + v21 = (char)v11[v29 + 285]; + if ( !(_BYTE)v21 ) + { + v21 = v30; + v31 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v11 + 32); + if ( v31 != std::ctype::do_narrow ) + { + v32 = ((int (__thiscall *)(_BYTE *, _DWORD, _DWORD))v31)(v11, v30, 0); + v21 = v32; + v30 = v32; + } + if ( v30 ) + v11[v37 + 285] = v30; + } + } + else + { + v21 = v18; + v22 = 0; + } +LABEL_21: + v23 = v8; + LOBYTE(v23) = v34; + v33 = v22; + v24 = v23; + v25 = ((__int64 (__thiscall *)(void *, _DWORD *, int, int, _DWORD, int, int, int))*(_DWORD *)(*(_DWORD *)this + 8))( + this, + a2, + v23, + a4, + a5, + a6, + v21, + v33); + LOBYTE(v24) = BYTE4(v25); + v8 = v24; + v9 = v13 + 1; + a2 = (_DWORD *)v25; + v34 = BYTE4(v25); + if ( a8 == v13 + 1 ) + return a2; + } + else + { +LABEL_3: + if ( v34 ) + { + ++v9; + } + else + { + v27 = *v9; + v28 = (_BYTE *)a2[5]; + if ( (unsigned int)v28 >= a2[6] ) + { + ++v9; + v34 = (*(int (__thiscall **)(_DWORD *, int))(*a2 + 52))(a2, v27) == -1; + } + else + { + *v28 = v27; + ++a2[5]; + ++v9; + } + } + if ( a8 == v9 ) + return a2; + } + } + } + return a2; +} + +//----- (004BD790) -------------------------------------------------------- +int __thiscall std::time_put>::put( + void *this, + int a2, + int a3, + int a4, + char a5, + int a6, + char a7, + char a8) +{ + return (*(int (__thiscall **)(void *, int, int, int, _DWORD, int, _DWORD, _DWORD))(*(_DWORD *)this + 8))( + this, + a2, + a3, + a4, + a5, + a6, + a7, + a8); +} + +//----- (004BD7B0) -------------------------------------------------------- +int __stdcall std::time_put>::do_put( + int a1, + char a2, + int a3, + int a4, + struct tm *a5, + char a6, + char a7) +{ + _BYTE *v7; // ebx + const char **v8; // eax + const char **v9; // edx + char v10; // cl + size_t v11; // eax + int (__stdcall *v13)(unsigned __int8); // eax + const char **v14; // [esp+1Ch] [ebp-B0h] + char Format; // [esp+2Ch] [ebp-A0h] BYREF + char v16; // [esp+2Dh] [ebp-9Fh] + char v17; // [esp+2Eh] [ebp-9Eh] + char v18; // [esp+2Fh] [ebp-9Dh] + char Buffer[156]; // [esp+30h] [ebp-9Ch] BYREF + + v7 = std::use_facet>(a3 + 108); + v8 = (const char **)std::use_facet>(a3 + 108); + v9 = v8; + if ( v7[28] ) + { + v10 = v7[66]; + } + else + { + v14 = v8; + std::ctype::_M_widen_init((int)v7); + v9 = v14; + v10 = 37; + v13 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v7 + 24); + if ( v13 != std::ctype::do_widen ) + { + v10 = ((int (__fastcall *)(_BYTE *, const char **, int))v13)(v7, v14, 37); + v9 = v14; + } + } + Format = v10; + if ( a7 ) + { + v16 = a7; + v18 = 0; + v17 = a6; + } + else + { + v17 = 0; + v16 = a6; + } + std::__timepunct::_M_put(v9, Buffer, 0x80u, &Format, a5); + v11 = strlen(Buffer); + if ( !a2 ) + (*(int (__thiscall **)(int, char *, size_t))(*(_DWORD *)a1 + 48))(a1, Buffer, v11); + return a1; +} + +//----- (004BD900) -------------------------------------------------------- +_DWORD *__thiscall std::time_put>::put( + void *this, + _DWORD *a2, + int a3, + int a4, + unsigned __int16 a5, + int a6, + unsigned __int16 *a7, + unsigned __int16 *a8) +{ + int v8; // ebp + unsigned __int16 *v9; // ebx + void *v10; // eax + void *v11; // esi + unsigned __int16 *v12; // edi + char v13; // al + int v14; // edx + int v15; // eax + int v16; // ecx + int v17; // ebp + __int64 v18; // rax + int v19; // ecx + int v21; // edx + _WORD *v22; // eax + char v23; // cl + char v26; // [esp+46h] [ebp-26h] + char v27; // [esp+47h] [ebp-25h] + + v8 = a3; + v9 = a7; + v26 = a3; + v10 = std::use_facet>(a4 + 108); + if ( a7 != a8 ) + { + v11 = v10; + do + { + while ( 1 ) + { + v12 = v9 + 1; + if ( (*(unsigned __int8 (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v11 + 48))(v11, *v9, 0) != 37 ) + break; + if ( a8 == v12 ) + return a2; + v13 = (*(int (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v11 + 48))(v11, v9[1], 0); + v14 = v13; + if ( v13 == 69 || (v15 = 0, (_BYTE)v14 == 79) ) + { + v27 = v14; + v12 = v9 + 2; + if ( a8 == v9 + 2 ) + return a2; + v23 = (*(int (__thiscall **)(void *, _DWORD, _DWORD))(*(_DWORD *)v11 + 48))(v11, v9[2], 0); + v15 = v27; + v14 = v23; + } + v16 = v8; + LOBYTE(v16) = v26; + v17 = v16; + v18 = ((__int64 (__thiscall *)(void *, _DWORD *, int, int, _DWORD, int, int, int))*(_DWORD *)(*(_DWORD *)this + 8))( + this, + a2, + v16, + a4, + a5, + a6, + v14, + v15); + v19 = v17; + v9 = v12 + 1; + LOBYTE(v19) = BYTE4(v18); + v8 = v19; + a2 = (_DWORD *)v18; + v26 = BYTE4(v18); + if ( a8 == v12 + 1 ) + return a2; + } + if ( v26 ) + { + ++v9; + } + else + { + v21 = *v9; + v22 = (_WORD *)a2[5]; + if ( (unsigned int)v22 >= a2[6] ) + { + LOWORD(v21) = (*(int (__thiscall **)(_DWORD *, int))(*a2 + 52))(a2, v21); + } + else + { + *v22 = v21; + a2[5] = v22 + 1; + } + ++v9; + v26 = (_WORD)v21 == 0xFFFF; + } + } + while ( a8 != v9 ); + } + return a2; +} + +//----- (004BDAC0) -------------------------------------------------------- +int __thiscall std::time_put>::put( + void *this, + int a2, + int a3, + int a4, + unsigned __int16 a5, + int a6, + char a7, + char a8) +{ + return (*(int (__thiscall **)(void *, int, int, int, _DWORD, int, _DWORD, _DWORD))(*(_DWORD *)this + 8))( + this, + a2, + a3, + a4, + a5, + a6, + a7, + a8); +} + +//----- (004BDAE0) -------------------------------------------------------- +int __stdcall std::time_put>::do_put( + int a1, + char a2, + int a3, + int a4, + struct tm *a5, + char a6, + char a7) +{ + const char **v7; // ebx + size_t v8; // eax + void *v10; // [esp+1Ch] [ebp-134h] + wchar_t Format; // [esp+2Ch] [ebp-124h] BYREF + __int16 v12; // [esp+2Eh] [ebp-122h] + __int16 v13; // [esp+30h] [ebp-120h] + __int16 v14; // [esp+32h] [ebp-11Eh] + wchar_t Buffer[142]; // [esp+34h] [ebp-11Ch] BYREF + + v10 = std::use_facet>(a3 + 108); + v7 = (const char **)std::use_facet>(a3 + 108); + Format = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v10 + 40))(v10, 37); + if ( a7 ) + { + v13 = a6; + v12 = a7; + v14 = 0; + } + else + { + v12 = a6; + v13 = 0; + } + std::__timepunct::_M_put(v7, Buffer, 0x80u, &Format, a5); + v8 = wcslen(Buffer); + if ( !a2 ) + (*(int (__thiscall **)(int, wchar_t *, size_t))(*(_DWORD *)a1 + 48))(a1, Buffer, v8); + return a1; +} + +//----- (004BDC00) -------------------------------------------------------- +const char *std::bad_alloc::what() +{ + return "std::bad_alloc"; +} + +//----- (004BDC10) -------------------------------------------------------- +int __fastcall std::ios::exceptions(int a1) +{ + return *(_DWORD *)(a1 + 16); +} + +//----- (004BDC20) -------------------------------------------------------- +int __fastcall std::ios::bad(int a1) +{ + return *(_DWORD *)(a1 + 20) & 1; +} + +//----- (004BDC30) -------------------------------------------------------- +int __fastcall std::ios::eof(int a1) +{ + return (*(_DWORD *)(a1 + 20) >> 1) & 1; +} + +//----- (004BDC40) -------------------------------------------------------- +int __fastcall std::ios::tie(int a1) +{ + return *(_DWORD *)(a1 + 112); +} + +//----- (004BDC50) -------------------------------------------------------- +bool __fastcall std::ios::fail(int a1) +{ + return (*(_BYTE *)(a1 + 20) & 5) != 0; +} + +//----- (004BDC60) -------------------------------------------------------- +int __fastcall std::ios::fill(int a1) +{ + int result; // eax + _BYTE *v3; // esi + int (__stdcall *v4)(unsigned __int8); // edx + + if ( *(_BYTE *)(a1 + 117) ) + return *(unsigned __int8 *)(a1 + 116); + v3 = *(_BYTE **)(a1 + 124); + if ( !v3 ) + std::__throw_bad_cast(); + if ( v3[28] ) + { + result = (unsigned __int8)v3[61]; + } + else + { + std::ctype::_M_widen_init(*(_DWORD *)(a1 + 124)); + v4 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v3 + 24); + result = 32; + if ( v4 != std::ctype::do_widen ) + result = ((int (__thiscall *)(_BYTE *, int))v4)(v3, 32); + } + *(_BYTE *)(a1 + 116) = result; + *(_BYTE *)(a1 + 117) = 1; + return result; +} + +//----- (004BDCD0) -------------------------------------------------------- +bool __fastcall std::ios::good(int a1) +{ + return *(_DWORD *)(a1 + 20) == 0; +} + +//----- (004BDCE0) -------------------------------------------------------- +int __fastcall std::ios::rdbuf(int a1) +{ + return *(_DWORD *)(a1 + 120); +} + +//----- (004BDCF0) -------------------------------------------------------- +int __thiscall std::ios::widen(int *this, int a2) +{ + _BYTE *v2; // ebx + int result; // eax + int (__stdcall *v4)(unsigned __int8); // edx + + v2 = (_BYTE *)this[31]; + if ( !v2 ) + std::__throw_bad_cast(); + if ( v2[28] ) + return (unsigned __int8)v2[(unsigned __int8)a2 + 29]; + std::ctype::_M_widen_init(this[31]); + v4 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v2 + 24); + result = a2; + if ( v4 != std::ctype::do_widen ) + return ((int (__thiscall *)(_BYTE *, _DWORD))v4)(v2, (char)a2); + return result; +} + +//----- (004BDD50) -------------------------------------------------------- +int __thiscall std::ios::narrow(_DWORD *this, int a2, int a3) +{ + int v3; // ebx + int result; // eax + int v5; // ecx + int (__stdcall *v6)(unsigned __int8, int); // eax + + v3 = this[31]; + if ( !v3 ) + std::__throw_bad_cast(); + result = *(unsigned __int8 *)(v3 + (unsigned __int8)a2 + 285); + if ( !(_BYTE)result ) + { + v5 = a2; + v6 = *(int (__stdcall **)(unsigned __int8, int))(*(_DWORD *)v3 + 32); + if ( v6 != std::ctype::do_narrow ) + v5 = ((int (__thiscall *)(int, _DWORD, _DWORD))v6)(v3, (char)a2, (char)a3); + result = a3; + if ( (_BYTE)a3 != (_BYTE)v5 ) + { + *(_BYTE *)(v3 + (unsigned __int8)a2 + 285) = v5; + return v5; + } + } + return result; +} + +//----- (004BDDC0) -------------------------------------------------------- +int __fastcall std::ios::rdstate(int a1) +{ + return *(_DWORD *)(a1 + 20); +} + +//----- (004BDDD0) -------------------------------------------------------- +int __fastcall std::ios::operator void *(int a1) +{ + int result; // eax + + result = 0; + if ( (*(_BYTE *)(a1 + 20) & 5) == 0 ) + return a1; + return result; +} + +//----- (004BDDE0) -------------------------------------------------------- +bool __fastcall std::ios::operator bool(int a1) +{ + return (*(_BYTE *)(a1 + 20) & 5) == 0; +} + +//----- (004BDDF0) -------------------------------------------------------- +bool __fastcall std::ios::operator!(int a1) +{ + return (*(_BYTE *)(a1 + 20) & 5) != 0; +} + +//----- (004BDE00) -------------------------------------------------------- +int __fastcall std::wios::exceptions(int a1) +{ + return *(_DWORD *)(a1 + 16); +} + +//----- (004BDE10) -------------------------------------------------------- +int __fastcall std::wios::bad(int a1) +{ + return *(_DWORD *)(a1 + 20) & 1; +} + +//----- (004BDE20) -------------------------------------------------------- +int __fastcall std::wios::eof(int a1) +{ + return (*(_DWORD *)(a1 + 20) >> 1) & 1; +} + +//----- (004BDE30) -------------------------------------------------------- +int __fastcall std::wios::tie(int a1) +{ + return *(_DWORD *)(a1 + 112); +} + +//----- (004BDE40) -------------------------------------------------------- +bool __fastcall std::wios::fail(int a1) +{ + return (*(_BYTE *)(a1 + 20) & 5) != 0; +} + +//----- (004BDE50) -------------------------------------------------------- +int __fastcall std::wios::fill(int a1) +{ + int result; // eax + int v3; // ecx + + if ( *(_BYTE *)(a1 + 118) ) + return *(unsigned __int16 *)(a1 + 116); + v3 = *(_DWORD *)(a1 + 124); + if ( !v3 ) + std::__throw_bad_cast(); + result = (*(int (__thiscall **)(int, int))(*(_DWORD *)v3 + 40))(v3, 32); + *(_BYTE *)(a1 + 118) = 1; + *(_WORD *)(a1 + 116) = result; + return result; +} + +//----- (004BDE90) -------------------------------------------------------- +bool __fastcall std::wios::good(int a1) +{ + return *(_DWORD *)(a1 + 20) == 0; +} + +//----- (004BDEA0) -------------------------------------------------------- +int __fastcall std::wios::rdbuf(int a1) +{ + return *(_DWORD *)(a1 + 120); +} + +//----- (004BDEB0) -------------------------------------------------------- +int __thiscall std::wios::widen(_DWORD *this, char a2) +{ + int v2; // ecx + + v2 = this[31]; + if ( !v2 ) + std::__throw_bad_cast(); + return (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 40))(v2, a2); +} + +//----- (004BDEE0) -------------------------------------------------------- +int __thiscall std::wios::narrow(_DWORD *this, unsigned __int16 a2, char a3) +{ + int v3; // ecx + + v3 = this[31]; + if ( !v3 ) + std::__throw_bad_cast(); + return (*(int (__thiscall **)(int, _DWORD, _DWORD))(*(_DWORD *)v3 + 48))(v3, a2, a3); +} + +//----- (004BDF20) -------------------------------------------------------- +int __fastcall std::wios::rdstate(int a1) +{ + return *(_DWORD *)(a1 + 20); +} + +//----- (004BDF30) -------------------------------------------------------- +int __fastcall std::wios::operator void *(int a1) +{ + int result; // eax + + result = 0; + if ( (*(_BYTE *)(a1 + 20) & 5) == 0 ) + return a1; + return result; +} + +//----- (004BDF40) -------------------------------------------------------- +bool __fastcall std::wios::operator bool(int a1) +{ + return (*(_BYTE *)(a1 + 20) & 5) == 0; +} + +//----- (004BDF50) -------------------------------------------------------- +bool __fastcall std::wios::operator!(int a1) +{ + return (*(_BYTE *)(a1 + 20) & 5) != 0; +} + +//----- (004BDF60) -------------------------------------------------------- +const char *_ZGTtNKSt9exception4whatEv() +{ + return "std::exception"; +} + +//----- (004BDF70) -------------------------------------------------------- +unsigned __int64 __stdcall std::money_get>::_M_extract( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + int *a6) +{ + char v6; // al + int v7; // eax + int v8; // eax + _DWORD *v9; // ecx + int v10; // eax + _BYTE *v11; // eax + int v12; // eax + int v13; // eax + _DWORD *v14; // ecx + int v15; // eax + unsigned int v16; // eax + char v17; // al + char v18; // al + _BYTE *v19; // eax + char v20; // al + char v21; // bl + int v22; // eax + int v23; // eax + _DWORD *v24; // ecx + int v25; // eax + int v26; // eax + _BYTE *v27; // eax + int v28; // eax + int v29; // eax + _DWORD *v30; // ecx + char v31; // al + int v32; // eax + unsigned __int8 *v33; // eax + int v34; // edx + char *v35; // eax + char v36; // al + int v38; // edx + std::string *v39; // eax + unsigned int first_not_of; // eax + unsigned int v41; // edx + int v42; // eax + _WORD *v43; // eax + int *v44; // eax + unsigned int v45; // [esp+4h] [ebp-94h] + unsigned int v46; // [esp+4h] [ebp-94h] + std::string *v47; // [esp+4h] [ebp-94h] + unsigned int v48; // [esp+8h] [ebp-90h] + char *v49; // [esp+8h] [ebp-90h] + unsigned int v50; // [esp+Ch] [ebp-8Ch] + char v51; // [esp+10h] [ebp-88h] + std::locale::_Impl *v52; // [esp+14h] [ebp-84h] + char v53; // [esp+18h] [ebp-80h] + _DWORD *v54; // [esp+1Ch] [ebp-7Ch] + unsigned int v55; // [esp+20h] [ebp-78h] + int v56; // [esp+28h] [ebp-70h] + bool v57; // [esp+2Ch] [ebp-6Ch] + char v58; // [esp+2Dh] [ebp-6Bh] + char v59; // [esp+2Eh] [ebp-6Ah] + char v60; // [esp+2Fh] [ebp-69h] + char v61; // [esp+30h] [ebp-68h] + int v62; // [esp+30h] [ebp-68h] + unsigned int v63; // [esp+30h] [ebp-68h] + char v64; // [esp+30h] [ebp-68h] + char v65; // [esp+30h] [ebp-68h] + char v66; // [esp+34h] [ebp-64h] + int v67; // [esp+34h] [ebp-64h] + char v68; // [esp+34h] [ebp-64h] + char v69; // [esp+34h] [ebp-64h] + char v70; // [esp+34h] [ebp-64h] + int v71; // [esp+34h] [ebp-64h] + unsigned int v72; // [esp+34h] [ebp-64h] + int *Buf; // [esp+38h] [ebp-60h] + unsigned int Bufa; // [esp+38h] [ebp-60h] + std::locale::facet *v75; // [esp+3Ch] [ebp-5Ch] + std::locale::facet *v76; // [esp+3Ch] [ebp-5Ch] + int lpuexcpt; // [esp+40h] [ebp-58h] + char lpuexcpta; // [esp+40h] [ebp-58h] + std::string *lpuexcptb; // [esp+40h] [ebp-58h] + char lpuexcptc; // [esp+40h] [ebp-58h] + char lpuexcptd; // [esp+40h] [ebp-58h] + std::string *lpuexcpte; // [esp+40h] [ebp-58h] + char lpuexcptf; // [esp+40h] [ebp-58h] + char lpuexcptg; // [esp+40h] [ebp-58h] + char lpuexcpth; // [esp+40h] [ebp-58h] + unsigned __int64 lpuexcpti; // [esp+40h] [ebp-58h] + int v87; // [esp+48h] [ebp-50h] + char v88[5]; // [esp+83h] [ebp-15h] BYREF + int v89; // [esp+88h] [ebp-10h] BYREF + int v90[2]; // [esp+8Ch] [ebp-Ch] + + lpuexcpt = a4 + 108; + v54 = std::use_facet>(a4 + 108); + v75 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + Buf = (int *)(*(_DWORD *)(*(_DWORD *)(a4 + 108) + 12) + 4 * (_DWORD)v75); + v87 = *Buf; + if ( !*Buf ) + { + v43 = operator new(0x44u); + *(_DWORD *)v43 = &off_5606D4; + v43[8] = 0; + *((_DWORD *)v43 + 1) = 0; + *((_DWORD *)v43 + 2) = 0; + *((_DWORD *)v43 + 3) = 0; + *((_BYTE *)v43 + 18) = 0; + *((_DWORD *)v43 + 5) = 0; + *((_DWORD *)v43 + 6) = 0; + *((_DWORD *)v43 + 7) = 0; + *((_DWORD *)v43 + 8) = 0; + *((_DWORD *)v43 + 9) = 0; + *((_DWORD *)v43 + 10) = 0; + *((_DWORD *)v43 + 11) = 0; + *((_DWORD *)v43 + 12) = 0; + *((_DWORD *)v43 + 13) = 0; + *((_BYTE *)v43 + 67) = 0; + v52 = (std::locale::_Impl *)v43; + std::__moneypunct_cache::_M_cache((int)v43, lpuexcpt); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a4 + 108), v52, v75, v48); + v87 = *Buf; + } + if ( *(_DWORD *)(v87 + 32) ) + v57 = *(_DWORD *)(v87 + 40) != 0; + else + v57 = 0; + *(_DWORD *)&v88[1] = std::string::_S_construct(0, 0); + if ( *(_BYTE *)(v87 + 16) ) + std::string::reserve((int *)&v88[1], (std::string *)0x20, v45); + v49 = v88; + v89 = (int)std::string::_S_construct(0, 0); + std::string::reserve(&v89, (std::string *)0x20, v46); + v60 = 0; + v56 = 0; + v76 = 0; + v90[0] = *(_DWORD *)(v87 + 52); + v53 = 0; + v55 = 0; + v58 = 0; + while ( 2 ) + { + switch ( *((_BYTE *)v90 + v56) ) + { + case 0: + v66 = 1; + goto LABEL_10; + case 1: + if ( std::istreambuf_iterator::equal(&a1, (int)&a2) + || (*(_BYTE *)(v54[6] + 2 * (unsigned __int8)std::istreambuf_iterator::_M_get((int)&a1)) & 0x20) == 0 ) + { + v66 = 0; + if ( v56 == 3 ) + { +LABEL_11: + v6 = v66 & (v55 > 1); + goto LABEL_12; + } + } + else + { + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v66 = 1; +LABEL_10: + if ( v56 == 3 ) + goto LABEL_11; + } + v29 = HIDWORD(a1); + v30 = (_DWORD *)a1; + while ( 1 ) + { + lpuexcpth = v29 == -1; + v65 = lpuexcpth & (v30 != 0); + if ( v65 ) + { + lpuexcpth = 0; + if ( v30[2] >= v30[3] ) + { + lpuexcpth = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v30 + 36))(v30) == -1 ) + { + LODWORD(a1) = 0; + lpuexcpth = v65; + } + } + } + v31 = a3 == -1; + v64 = v31 & (a2 != 0); + if ( v64 ) + { + v31 = 0; + if ( a2[2] >= a2[3] ) + { + v38 = (*(int (**)(void))(*a2 + 36))(); + v31 = 0; + if ( v38 == -1 ) + { + a2 = 0; + v31 = v64; + } + } + } + if ( lpuexcpth == v31 ) + goto LABEL_113; + v30 = (_DWORD *)a1; + LOBYTE(v32) = BYTE4(a1); + if ( (_DWORD)a1 && HIDWORD(a1) == -1 ) + { + v33 = *(unsigned __int8 **)(a1 + 8); + if ( (unsigned int)v33 < *(_DWORD *)(a1 + 12) ) + { + if ( (*(_BYTE *)(v54[6] + 2 * *v33) & 0x20) == 0 ) + goto LABEL_113; +LABEL_88: + v30[2] = v33 + 1; + goto LABEL_89; + } + v32 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v32 == -1 ) + LODWORD(a1) = 0; + } + if ( (*(_BYTE *)(v54[6] + 2 * (unsigned __int8)v32) & 0x20) == 0 ) + goto LABEL_113; + v30 = (_DWORD *)a1; + v33 = *(unsigned __int8 **)(a1 + 8); + if ( (unsigned int)v33 < *(_DWORD *)(a1 + 12) ) + goto LABEL_88; + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v30 = (_DWORD *)a1; +LABEL_89: + HIDWORD(a1) = -1; + v29 = -1; + } + case 2: + if ( (*(_BYTE *)(a4 + 13) & 2) != 0 ) + goto LABEL_65; + lpuexcptf = v56 == 0 || v55 > 1; + if ( lpuexcptf ) + goto LABEL_65; + if ( v56 == 1 ) + { + if ( v57 || LOBYTE(v90[0]) == 3 || BYTE2(v90[0]) == 1 ) + { +LABEL_65: + v24 = (_DWORD *)a1; + v72 = 0; + v63 = *(_DWORD *)(v87 + 24); + v25 = HIDWORD(a1); + while ( 2 ) + { + lpuexcptg = v25 == -1; + v59 = lpuexcptg & (v24 != 0); + if ( v59 ) + { + lpuexcptg = 0; + if ( v24[2] >= v24[3] ) + { + lpuexcptg = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v24 + 36))(v24) == -1 ) + { + LODWORD(a1) = 0; + lpuexcptg = v59; + } + } + } + if ( a2 && a3 == -1 ) + { + if ( a2[2] >= a2[3] ) + { + v28 = (*(int (**)(void))(*a2 + 36))(); + lpuexcptg ^= v28 == -1; + if ( v28 == -1 ) + a2 = 0; + } + } + else + { + lpuexcptg ^= a3 == -1; + } + lpuexcptf = (v72 < v63) & lpuexcptg; + if ( !lpuexcptf ) + { + if ( v72 == v63 ) + { +LABEL_160: + v66 = 1; + goto LABEL_114; + } +LABEL_143: + if ( !v72 ) + { + v66 = (*(_BYTE *)(a4 + 13) & 2) == 0; + lpuexcptf = (*(_BYTE *)(a4 + 13) & 2) != 0; + goto LABEL_114; + } +LABEL_107: + *a5 |= 4u; + goto LABEL_108; + } + LOBYTE(v26) = BYTE4(a1); + v24 = (_DWORD *)a1; + if ( a1 > 0xFFFFFFFF00000000LL ) + { + v27 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v27 >= *(_DWORD *)(a1 + 12) ) + { + v26 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v26 == -1 ) + LODWORD(a1) = 0; + goto LABEL_69; + } + if ( *v27 != *(_BYTE *)(*(_DWORD *)(v87 + 20) + v72) ) + goto LABEL_143; +LABEL_71: + v24[2] = v27 + 1; + } + else + { +LABEL_69: + if ( *(_BYTE *)(*(_DWORD *)(v87 + 20) + v72) != (_BYTE)v26 ) + goto LABEL_143; + v24 = (_DWORD *)a1; + v27 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v27 < *(_DWORD *)(a1 + 12) ) + goto LABEL_71; + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v24 = (_DWORD *)a1; + } + ++v72; + v25 = -1; + HIDWORD(a1) = -1; + continue; + } + } + v23 = 2; +LABEL_116: + v56 = v23; + continue; + } + v66 = 1; + if ( v56 == 2 ) + { + if ( HIBYTE(v90[0]) == 4 ) + goto LABEL_65; + v23 = 3; + if ( HIBYTE(v90[0]) == 3 && v57 ) + goto LABEL_65; + goto LABEL_116; + } +LABEL_114: + v23 = v56 + 1; + if ( v56 + 1 <= 3 && !lpuexcptf ) + goto LABEL_116; + v6 = v66 & (v55 > 1); +LABEL_12: + if ( !v6 ) + { + if ( v66 ) + { + if ( *(_DWORD *)(v89 - 12) > 1u ) + goto LABEL_161; + goto LABEL_149; + } + goto LABEL_107; + } + if ( v58 ) + v7 = *(_DWORD *)(v87 + 36); + else + v7 = *(_DWORD *)(v87 + 28); + v67 = v7; + v8 = HIDWORD(a1); + v9 = (_DWORD *)a1; + Bufa = 1; + while ( 2 ) + { + lpuexcpta = v8 == -1; + v61 = lpuexcpta & (v9 != 0); + if ( v61 ) + { + lpuexcpta = 0; + if ( v9[2] >= v9[3] ) + { + lpuexcpta = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v9 + 36))(v9) == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = v61; + } + } + } + if ( a2 && a3 == -1 ) + { + if ( a2[2] >= a2[3] ) + { + v12 = (*(int (**)(void))(*a2 + 36))(); + lpuexcpta ^= v12 == -1; + if ( v12 == -1 ) + a2 = 0; + } + } + else + { + lpuexcpta ^= a3 == -1; + } + if ( Bufa < v55 && lpuexcpta ) + { + v9 = (_DWORD *)a1; + LOBYTE(v10) = BYTE4(a1); + if ( !(_DWORD)a1 || HIDWORD(a1) != -1 ) + goto LABEL_21; + v11 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v11 < *(_DWORD *)(a1 + 12) ) + { + if ( *v11 != *(_BYTE *)(v67 + Bufa) ) + goto LABEL_107; + goto LABEL_23; + } + v10 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v10 == -1 ) + LODWORD(a1) = 0; +LABEL_21: + if ( *(_BYTE *)(v67 + Bufa) != (_BYTE)v10 ) + goto LABEL_107; + v9 = (_DWORD *)a1; + v11 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v11 >= *(_DWORD *)(a1 + 12) ) + { + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v9 = (_DWORD *)a1; + } + else + { +LABEL_23: + v9[2] = v11 + 1; + } + ++Bufa; + v8 = -1; + HIDWORD(a1) = -1; + continue; + } + break; + } + if ( Bufa != v55 ) + goto LABEL_107; + if ( *(_DWORD *)(v89 - 12) <= 1u ) + goto LABEL_149; +LABEL_161: + first_not_of = std::string::find_first_not_of(&v89, (std::string *)0x30, 0, (unsigned int)v49); + if ( first_not_of ) + { + v41 = *(_DWORD *)(v89 - 12); + if ( first_not_of == -1 ) + first_not_of = v41 - 1; + if ( first_not_of > v41 ) + first_not_of = *(_DWORD *)(v89 - 12); + std::string::_M_mutate((char **)&v89, 0, first_not_of, 0, v50); + } +LABEL_149: + if ( v58 ) + { + v44 = (int *)v89; + if ( *(int *)(v89 - 4) >= 0 ) + { + std::string::_M_leak_hard((char **)&v89); + v44 = (int *)v89; + } + if ( *(_BYTE *)v44 != 48 ) + { + if ( *(v44 - 1) >= 0 ) + std::string::_M_leak_hard((char **)&v89); + std::string::_M_replace_aux((char **)&v89, 0, 0, 1u, 45, v51); + *(_DWORD *)(v89 - 4) = -1; + } + } + if ( *(_DWORD *)(*(_DWORD *)&v88[1] - 12) ) + { + v39 = (std::string *)(char)v76; + if ( v60 ) + v39 = (std::string *)v53; + std::string::push_back((int *)&v88[1], v39, (char)v47); + if ( !(unsigned __int8)std::__verify_grouping( + *(char **)(v87 + 8), + *(_DWORD *)(v87 + 12), + (const char **)&v88[1]) ) + *a5 |= 4u; + } + if ( v60 && *(std::locale::facet **)(v87 + 44) != v76 ) + goto LABEL_107; + std::string::swap(a6, (std::string *)&v89, v47); +LABEL_108: + if ( std::istreambuf_iterator::equal(&a1, (int)&a2) ) + *a5 |= 2u; + lpuexcpti = a1; + std::string::_Rep::_M_dispose((volatile signed __int32 *)(v89 - 12), (int)v88); + std::string::_Rep::_M_dispose((volatile signed __int32 *)(*(_DWORD *)&v88[1] - 12), (int)&v89); + return lpuexcpti; + case 3: + if ( *(_DWORD *)(v87 + 32) ) + { + lpuexcptf = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( !lpuexcptf && **(_BYTE **)(v87 + 28) == (unsigned __int8)std::istreambuf_iterator::_M_get((int)&a1) ) + { + v55 = *(_DWORD *)(v87 + 32); + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v66 = 1; + goto LABEL_114; + } + if ( !*(_DWORD *)(v87 + 40) ) + { + if ( !*(_DWORD *)(v87 + 32) ) + goto LABEL_57; + goto LABEL_125; + } + } + else if ( !*(_DWORD *)(v87 + 40) ) + { + goto LABEL_57; + } + lpuexcptf = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( !lpuexcptf && **(_BYTE **)(v87 + 36) == (unsigned __int8)std::istreambuf_iterator::_M_get((int)&a1) ) + { + v55 = *(_DWORD *)(v87 + 40); + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v66 = 1; + v58 = 1; + goto LABEL_114; + } + if ( !*(_DWORD *)(v87 + 32) || *(_DWORD *)(v87 + 40) ) + { +LABEL_57: + lpuexcptf = v57; + v66 = !v57; + goto LABEL_114; + } +LABEL_125: + lpuexcptf = 0; + v66 = 1; + v58 = 1; + goto LABEL_114; + case 4: + v13 = HIDWORD(a1); + v14 = (_DWORD *)a1; + while ( 2 ) + { + lpuexcptc = v13 == -1; + v69 = lpuexcptc & (v14 != 0); + if ( v69 ) + { + lpuexcptc = 0; + if ( v14[2] >= v14[3] ) + { + lpuexcptc = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v14 + 36))(v14) == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v69; + } + } + } + v17 = a3 == -1; + v70 = v17 & (a2 != 0); + if ( v70 ) + { + v17 = 0; + if ( a2[2] >= a2[3] ) + { + v34 = (*(int (**)(void))(*a2 + 36))(); + v17 = 0; + if ( v34 == -1 ) + { + a2 = 0; + v17 = v70; + } + } + } + if ( lpuexcptc == v17 ) + goto LABEL_105; + v18 = BYTE4(a1); + if ( a1 <= 0xFFFFFFFF00000000LL ) + goto LABEL_43; + v35 = *(char **)(a1 + 8); + if ( (unsigned int)v35 >= *(_DWORD *)(a1 + 12) ) + { + v42 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcptd = v42; + if ( v42 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptd = -1; + } + } + else + { + v18 = *v35; +LABEL_43: + lpuexcptd = v18; + } + v19 = memchr((const void *)(v87 + 57), lpuexcptd, 0xAu); + if ( v19 ) + { + v68 = v19[(_DWORD)std::money_base::_S_atoms - 56 - v87]; + v62 = *(_DWORD *)(v89 - 12); + lpuexcptb = (std::string *)(v62 + 1); + if ( (unsigned int)(v62 + 1) > *(_DWORD *)(v89 - 8) || *(int *)(v89 - 4) > 0 ) + std::string::reserve(&v89, lpuexcptb, (unsigned int)v47); + v76 = (std::locale::facet *)((char *)v76 + 1); + *(_BYTE *)(v89 + *(_DWORD *)(v89 - 12)) = v68; + v15 = v89; + *(_DWORD *)(v89 - 12) = lpuexcptb; + *(_DWORD *)(v15 - 4) = 0; + *(_BYTE *)(v15 + v62 + 1) = 0; +LABEL_36: + v14 = (_DWORD *)a1; + v16 = *(_DWORD *)(a1 + 8); + if ( v16 < *(_DWORD *)(a1 + 12) ) + { +LABEL_37: + v14[2] = v16 + 1; +LABEL_38: + HIDWORD(a1) = -1; + v13 = -1; + continue; + } +LABEL_54: + (*(void (__fastcall **)(_DWORD *))(*v14 + 40))(v14); + v14 = (_DWORD *)a1; + goto LABEL_38; + } + break; + } + v66 = v60 | (*(_BYTE *)(v87 + 17) != (unsigned __int8)lpuexcptd); + if ( v66 ) + { + v20 = *(_BYTE *)(v87 + 16); + if ( v20 ) + { + if ( *(_BYTE *)(v87 + 18) != lpuexcptd ) + goto LABEL_172; + if ( v60 ) + { + v20 = v60; +LABEL_172: + v66 = v20; + if ( !*(_DWORD *)(v89 - 12) ) + goto LABEL_107; + goto LABEL_113; + } + if ( v76 ) + { + v71 = *(_DWORD *)(*(_DWORD *)&v88[1] - 12); + lpuexcpte = (std::string *)(v71 + 1); + if ( (unsigned int)(v71 + 1) > *(_DWORD *)(*(_DWORD *)&v88[1] - 8) || *(int *)(*(_DWORD *)&v88[1] - 4) > 0 ) + std::string::reserve((int *)&v88[1], lpuexcpte, (unsigned int)v47); + v21 = (char)v76; + v76 = 0; + *(_BYTE *)(*(_DWORD *)&v88[1] + *(_DWORD *)(*(_DWORD *)&v88[1] - 12)) = v21; + v22 = *(_DWORD *)&v88[1]; + *(_DWORD *)(*(_DWORD *)&v88[1] - 4) = 0; + *(_DWORD *)(v22 - 12) = lpuexcpte; + *(_BYTE *)(v22 + v71 + 1) = 0; + v14 = (_DWORD *)a1; + v16 = *(_DWORD *)(a1 + 8); + if ( v16 < *(_DWORD *)(a1 + 12) ) + goto LABEL_37; + goto LABEL_54; + } + v66 = 0; + } + } + else + { + if ( *(int *)(v87 + 44) > 0 ) + { + v36 = (char)v76; + v60 = 1; + v76 = 0; + v53 = v36; + goto LABEL_36; + } + v60 = 0; +LABEL_105: + v66 = 1; + } + if ( !*(_DWORD *)(v89 - 12) ) + goto LABEL_107; +LABEL_113: + lpuexcptf = v66 ^ 1; + goto LABEL_114; + default: + lpuexcptf = 0; + goto LABEL_160; + } + } +} +// 4BED35: variable 'v48' is possibly undefined +// 4BE03D: variable 'v45' is possibly undefined +// 4BE07B: variable 'v46' is possibly undefined +// 4BE233: variable 'v47' is possibly undefined +// 4BEB6A: variable 'v49' is possibly undefined +// 4BEBAB: variable 'v50' is possibly undefined +// 4BEDDF: variable 'v51' is possibly undefined +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 53F58C: using guessed type signed __int32 std::moneypunct::id; +// 5606D4: using guessed type int (*off_5606D4)(); + +//----- (004BEF60) -------------------------------------------------------- +unsigned __int64 __stdcall std::money_get>::_M_extract( + unsigned __int64 a1, + _DWORD *a2, + int a3, + int a4, + _DWORD *a5, + int *a6) +{ + char v6; // al + int v7; // eax + int v8; // eax + _DWORD *v9; // ecx + int v10; // eax + _BYTE *v11; // eax + int v12; // eax + int v13; // eax + _DWORD *v14; // ecx + int v15; // eax + unsigned int v16; // eax + char v17; // al + char v18; // al + _BYTE *v19; // eax + char v20; // al + char v21; // bl + int v22; // eax + int v23; // eax + _DWORD *v24; // ecx + int v25; // eax + int v26; // eax + _BYTE *v27; // eax + int v28; // eax + int v29; // eax + _DWORD *v30; // ecx + char v31; // al + int v32; // eax + unsigned __int8 *v33; // eax + int v34; // edx + char *v35; // eax + char v36; // al + int v38; // edx + std::string *v39; // eax + unsigned int first_not_of; // eax + unsigned int v41; // edx + int v42; // eax + _WORD *v43; // eax + int *v44; // eax + unsigned int v45; // [esp+4h] [ebp-94h] + unsigned int v46; // [esp+4h] [ebp-94h] + std::string *v47; // [esp+4h] [ebp-94h] + unsigned int v48; // [esp+8h] [ebp-90h] + char *v49; // [esp+8h] [ebp-90h] + unsigned int v50; // [esp+Ch] [ebp-8Ch] + char v51; // [esp+10h] [ebp-88h] + std::locale::_Impl *v52; // [esp+14h] [ebp-84h] + char v53; // [esp+18h] [ebp-80h] + _DWORD *v54; // [esp+1Ch] [ebp-7Ch] + unsigned int v55; // [esp+20h] [ebp-78h] + int v56; // [esp+28h] [ebp-70h] + bool v57; // [esp+2Ch] [ebp-6Ch] + char v58; // [esp+2Dh] [ebp-6Bh] + char v59; // [esp+2Eh] [ebp-6Ah] + char v60; // [esp+2Fh] [ebp-69h] + char v61; // [esp+30h] [ebp-68h] + int v62; // [esp+30h] [ebp-68h] + unsigned int v63; // [esp+30h] [ebp-68h] + char v64; // [esp+30h] [ebp-68h] + char v65; // [esp+30h] [ebp-68h] + char v66; // [esp+34h] [ebp-64h] + int v67; // [esp+34h] [ebp-64h] + char v68; // [esp+34h] [ebp-64h] + char v69; // [esp+34h] [ebp-64h] + char v70; // [esp+34h] [ebp-64h] + int v71; // [esp+34h] [ebp-64h] + unsigned int v72; // [esp+34h] [ebp-64h] + int *Buf; // [esp+38h] [ebp-60h] + unsigned int Bufa; // [esp+38h] [ebp-60h] + std::locale::facet *v75; // [esp+3Ch] [ebp-5Ch] + std::locale::facet *v76; // [esp+3Ch] [ebp-5Ch] + int lpuexcpt; // [esp+40h] [ebp-58h] + char lpuexcpta; // [esp+40h] [ebp-58h] + std::string *lpuexcptb; // [esp+40h] [ebp-58h] + char lpuexcptc; // [esp+40h] [ebp-58h] + char lpuexcptd; // [esp+40h] [ebp-58h] + std::string *lpuexcpte; // [esp+40h] [ebp-58h] + char lpuexcptf; // [esp+40h] [ebp-58h] + char lpuexcptg; // [esp+40h] [ebp-58h] + char lpuexcpth; // [esp+40h] [ebp-58h] + unsigned __int64 lpuexcpti; // [esp+40h] [ebp-58h] + int v87; // [esp+48h] [ebp-50h] + char v88[5]; // [esp+83h] [ebp-15h] BYREF + int v89; // [esp+88h] [ebp-10h] BYREF + int v90[2]; // [esp+8Ch] [ebp-Ch] + + lpuexcpt = a4 + 108; + v54 = std::use_facet>(a4 + 108); + v75 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + Buf = (int *)(*(_DWORD *)(*(_DWORD *)(a4 + 108) + 12) + 4 * (_DWORD)v75); + v87 = *Buf; + if ( !*Buf ) + { + v43 = operator new(0x44u); + *(_DWORD *)v43 = &off_5606E4; + v43[8] = 0; + *((_DWORD *)v43 + 1) = 0; + *((_DWORD *)v43 + 2) = 0; + *((_DWORD *)v43 + 3) = 0; + *((_BYTE *)v43 + 18) = 0; + *((_DWORD *)v43 + 5) = 0; + *((_DWORD *)v43 + 6) = 0; + *((_DWORD *)v43 + 7) = 0; + *((_DWORD *)v43 + 8) = 0; + *((_DWORD *)v43 + 9) = 0; + *((_DWORD *)v43 + 10) = 0; + *((_DWORD *)v43 + 11) = 0; + *((_DWORD *)v43 + 12) = 0; + *((_DWORD *)v43 + 13) = 0; + *((_BYTE *)v43 + 67) = 0; + v52 = (std::locale::_Impl *)v43; + std::__moneypunct_cache::_M_cache((int)v43, lpuexcpt); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a4 + 108), v52, v75, v48); + v87 = *Buf; + } + if ( *(_DWORD *)(v87 + 32) ) + v57 = *(_DWORD *)(v87 + 40) != 0; + else + v57 = 0; + *(_DWORD *)&v88[1] = std::string::_S_construct(0, 0); + if ( *(_BYTE *)(v87 + 16) ) + std::string::reserve((int *)&v88[1], (std::string *)0x20, v45); + v49 = v88; + v89 = (int)std::string::_S_construct(0, 0); + std::string::reserve(&v89, (std::string *)0x20, v46); + v60 = 0; + v56 = 0; + v76 = 0; + v90[0] = *(_DWORD *)(v87 + 52); + v53 = 0; + v55 = 0; + v58 = 0; + while ( 2 ) + { + switch ( *((_BYTE *)v90 + v56) ) + { + case 0: + v66 = 1; + goto LABEL_10; + case 1: + if ( std::istreambuf_iterator::equal(&a1, (int)&a2) + || (*(_BYTE *)(v54[6] + 2 * (unsigned __int8)std::istreambuf_iterator::_M_get((int)&a1)) & 0x20) == 0 ) + { + v66 = 0; + if ( v56 == 3 ) + { +LABEL_11: + v6 = v66 & (v55 > 1); + goto LABEL_12; + } + } + else + { + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v66 = 1; +LABEL_10: + if ( v56 == 3 ) + goto LABEL_11; + } + v29 = HIDWORD(a1); + v30 = (_DWORD *)a1; + while ( 1 ) + { + lpuexcpth = v29 == -1; + v65 = lpuexcpth & (v30 != 0); + if ( v65 ) + { + lpuexcpth = 0; + if ( v30[2] >= v30[3] ) + { + lpuexcpth = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v30 + 36))(v30) == -1 ) + { + LODWORD(a1) = 0; + lpuexcpth = v65; + } + } + } + v31 = a3 == -1; + v64 = v31 & (a2 != 0); + if ( v64 ) + { + v31 = 0; + if ( a2[2] >= a2[3] ) + { + v38 = (*(int (**)(void))(*a2 + 36))(); + v31 = 0; + if ( v38 == -1 ) + { + a2 = 0; + v31 = v64; + } + } + } + if ( lpuexcpth == v31 ) + goto LABEL_113; + v30 = (_DWORD *)a1; + LOBYTE(v32) = BYTE4(a1); + if ( (_DWORD)a1 && HIDWORD(a1) == -1 ) + { + v33 = *(unsigned __int8 **)(a1 + 8); + if ( (unsigned int)v33 < *(_DWORD *)(a1 + 12) ) + { + if ( (*(_BYTE *)(v54[6] + 2 * *v33) & 0x20) == 0 ) + goto LABEL_113; +LABEL_88: + v30[2] = v33 + 1; + goto LABEL_89; + } + v32 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v32 == -1 ) + LODWORD(a1) = 0; + } + if ( (*(_BYTE *)(v54[6] + 2 * (unsigned __int8)v32) & 0x20) == 0 ) + goto LABEL_113; + v30 = (_DWORD *)a1; + v33 = *(unsigned __int8 **)(a1 + 8); + if ( (unsigned int)v33 < *(_DWORD *)(a1 + 12) ) + goto LABEL_88; + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v30 = (_DWORD *)a1; +LABEL_89: + HIDWORD(a1) = -1; + v29 = -1; + } + case 2: + if ( (*(_BYTE *)(a4 + 13) & 2) != 0 ) + goto LABEL_65; + lpuexcptf = v56 == 0 || v55 > 1; + if ( lpuexcptf ) + goto LABEL_65; + if ( v56 == 1 ) + { + if ( v57 || LOBYTE(v90[0]) == 3 || BYTE2(v90[0]) == 1 ) + { +LABEL_65: + v24 = (_DWORD *)a1; + v72 = 0; + v63 = *(_DWORD *)(v87 + 24); + v25 = HIDWORD(a1); + while ( 2 ) + { + lpuexcptg = v25 == -1; + v59 = lpuexcptg & (v24 != 0); + if ( v59 ) + { + lpuexcptg = 0; + if ( v24[2] >= v24[3] ) + { + lpuexcptg = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v24 + 36))(v24) == -1 ) + { + LODWORD(a1) = 0; + lpuexcptg = v59; + } + } + } + if ( a2 && a3 == -1 ) + { + if ( a2[2] >= a2[3] ) + { + v28 = (*(int (**)(void))(*a2 + 36))(); + lpuexcptg ^= v28 == -1; + if ( v28 == -1 ) + a2 = 0; + } + } + else + { + lpuexcptg ^= a3 == -1; + } + lpuexcptf = (v72 < v63) & lpuexcptg; + if ( !lpuexcptf ) + { + if ( v72 == v63 ) + { +LABEL_160: + v66 = 1; + goto LABEL_114; + } +LABEL_143: + if ( !v72 ) + { + v66 = (*(_BYTE *)(a4 + 13) & 2) == 0; + lpuexcptf = (*(_BYTE *)(a4 + 13) & 2) != 0; + goto LABEL_114; + } +LABEL_107: + *a5 |= 4u; + goto LABEL_108; + } + LOBYTE(v26) = BYTE4(a1); + v24 = (_DWORD *)a1; + if ( a1 > 0xFFFFFFFF00000000LL ) + { + v27 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v27 >= *(_DWORD *)(a1 + 12) ) + { + v26 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v26 == -1 ) + LODWORD(a1) = 0; + goto LABEL_69; + } + if ( *v27 != *(_BYTE *)(*(_DWORD *)(v87 + 20) + v72) ) + goto LABEL_143; +LABEL_71: + v24[2] = v27 + 1; + } + else + { +LABEL_69: + if ( *(_BYTE *)(*(_DWORD *)(v87 + 20) + v72) != (_BYTE)v26 ) + goto LABEL_143; + v24 = (_DWORD *)a1; + v27 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v27 < *(_DWORD *)(a1 + 12) ) + goto LABEL_71; + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v24 = (_DWORD *)a1; + } + ++v72; + v25 = -1; + HIDWORD(a1) = -1; + continue; + } + } + v23 = 2; +LABEL_116: + v56 = v23; + continue; + } + v66 = 1; + if ( v56 == 2 ) + { + if ( HIBYTE(v90[0]) == 4 ) + goto LABEL_65; + v23 = 3; + if ( HIBYTE(v90[0]) == 3 && v57 ) + goto LABEL_65; + goto LABEL_116; + } +LABEL_114: + v23 = v56 + 1; + if ( v56 + 1 <= 3 && !lpuexcptf ) + goto LABEL_116; + v6 = v66 & (v55 > 1); +LABEL_12: + if ( !v6 ) + { + if ( v66 ) + { + if ( *(_DWORD *)(v89 - 12) > 1u ) + goto LABEL_161; + goto LABEL_149; + } + goto LABEL_107; + } + if ( v58 ) + v7 = *(_DWORD *)(v87 + 36); + else + v7 = *(_DWORD *)(v87 + 28); + v67 = v7; + v8 = HIDWORD(a1); + v9 = (_DWORD *)a1; + Bufa = 1; + while ( 2 ) + { + lpuexcpta = v8 == -1; + v61 = lpuexcpta & (v9 != 0); + if ( v61 ) + { + lpuexcpta = 0; + if ( v9[2] >= v9[3] ) + { + lpuexcpta = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v9 + 36))(v9) == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = v61; + } + } + } + if ( a2 && a3 == -1 ) + { + if ( a2[2] >= a2[3] ) + { + v12 = (*(int (**)(void))(*a2 + 36))(); + lpuexcpta ^= v12 == -1; + if ( v12 == -1 ) + a2 = 0; + } + } + else + { + lpuexcpta ^= a3 == -1; + } + if ( Bufa < v55 && lpuexcpta ) + { + v9 = (_DWORD *)a1; + LOBYTE(v10) = BYTE4(a1); + if ( !(_DWORD)a1 || HIDWORD(a1) != -1 ) + goto LABEL_21; + v11 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v11 < *(_DWORD *)(a1 + 12) ) + { + if ( *v11 != *(_BYTE *)(v67 + Bufa) ) + goto LABEL_107; + goto LABEL_23; + } + v10 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + if ( v10 == -1 ) + LODWORD(a1) = 0; +LABEL_21: + if ( *(_BYTE *)(v67 + Bufa) != (_BYTE)v10 ) + goto LABEL_107; + v9 = (_DWORD *)a1; + v11 = *(_BYTE **)(a1 + 8); + if ( (unsigned int)v11 >= *(_DWORD *)(a1 + 12) ) + { + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v9 = (_DWORD *)a1; + } + else + { +LABEL_23: + v9[2] = v11 + 1; + } + ++Bufa; + v8 = -1; + HIDWORD(a1) = -1; + continue; + } + break; + } + if ( Bufa != v55 ) + goto LABEL_107; + if ( *(_DWORD *)(v89 - 12) <= 1u ) + goto LABEL_149; +LABEL_161: + first_not_of = std::string::find_first_not_of(&v89, (std::string *)0x30, 0, (unsigned int)v49); + if ( first_not_of ) + { + v41 = *(_DWORD *)(v89 - 12); + if ( first_not_of == -1 ) + first_not_of = v41 - 1; + if ( first_not_of > v41 ) + first_not_of = *(_DWORD *)(v89 - 12); + std::string::_M_mutate((char **)&v89, 0, first_not_of, 0, v50); + } +LABEL_149: + if ( v58 ) + { + v44 = (int *)v89; + if ( *(int *)(v89 - 4) >= 0 ) + { + std::string::_M_leak_hard((char **)&v89); + v44 = (int *)v89; + } + if ( *(_BYTE *)v44 != 48 ) + { + if ( *(v44 - 1) >= 0 ) + std::string::_M_leak_hard((char **)&v89); + std::string::_M_replace_aux((char **)&v89, 0, 0, 1u, 45, v51); + *(_DWORD *)(v89 - 4) = -1; + } + } + if ( *(_DWORD *)(*(_DWORD *)&v88[1] - 12) ) + { + v39 = (std::string *)(char)v76; + if ( v60 ) + v39 = (std::string *)v53; + std::string::push_back((int *)&v88[1], v39, (char)v47); + if ( !(unsigned __int8)std::__verify_grouping( + *(char **)(v87 + 8), + *(_DWORD *)(v87 + 12), + (const char **)&v88[1]) ) + *a5 |= 4u; + } + if ( v60 && *(std::locale::facet **)(v87 + 44) != v76 ) + goto LABEL_107; + std::string::swap(a6, (std::string *)&v89, v47); +LABEL_108: + if ( std::istreambuf_iterator::equal(&a1, (int)&a2) ) + *a5 |= 2u; + lpuexcpti = a1; + std::string::_Rep::_M_dispose((volatile signed __int32 *)(v89 - 12), (int)v88); + std::string::_Rep::_M_dispose((volatile signed __int32 *)(*(_DWORD *)&v88[1] - 12), (int)&v89); + return lpuexcpti; + case 3: + if ( *(_DWORD *)(v87 + 32) ) + { + lpuexcptf = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( !lpuexcptf && **(_BYTE **)(v87 + 28) == (unsigned __int8)std::istreambuf_iterator::_M_get((int)&a1) ) + { + v55 = *(_DWORD *)(v87 + 32); + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v66 = 1; + goto LABEL_114; + } + if ( !*(_DWORD *)(v87 + 40) ) + { + if ( !*(_DWORD *)(v87 + 32) ) + goto LABEL_57; + goto LABEL_125; + } + } + else if ( !*(_DWORD *)(v87 + 40) ) + { + goto LABEL_57; + } + lpuexcptf = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( !lpuexcptf && **(_BYTE **)(v87 + 36) == (unsigned __int8)std::istreambuf_iterator::_M_get((int)&a1) ) + { + v55 = *(_DWORD *)(v87 + 40); + std::streambuf::sbumpc((_DWORD *)a1); + HIDWORD(a1) = -1; + v66 = 1; + v58 = 1; + goto LABEL_114; + } + if ( !*(_DWORD *)(v87 + 32) || *(_DWORD *)(v87 + 40) ) + { +LABEL_57: + lpuexcptf = v57; + v66 = !v57; + goto LABEL_114; + } +LABEL_125: + lpuexcptf = 0; + v66 = 1; + v58 = 1; + goto LABEL_114; + case 4: + v13 = HIDWORD(a1); + v14 = (_DWORD *)a1; + while ( 2 ) + { + lpuexcptc = v13 == -1; + v69 = lpuexcptc & (v14 != 0); + if ( v69 ) + { + lpuexcptc = 0; + if ( v14[2] >= v14[3] ) + { + lpuexcptc = 0; + if ( (*(int (__fastcall **)(_DWORD *))(*v14 + 36))(v14) == -1 ) + { + LODWORD(a1) = 0; + lpuexcptc = v69; + } + } + } + v17 = a3 == -1; + v70 = v17 & (a2 != 0); + if ( v70 ) + { + v17 = 0; + if ( a2[2] >= a2[3] ) + { + v34 = (*(int (**)(void))(*a2 + 36))(); + v17 = 0; + if ( v34 == -1 ) + { + a2 = 0; + v17 = v70; + } + } + } + if ( lpuexcptc == v17 ) + goto LABEL_105; + v18 = BYTE4(a1); + if ( a1 <= 0xFFFFFFFF00000000LL ) + goto LABEL_43; + v35 = *(char **)(a1 + 8); + if ( (unsigned int)v35 >= *(_DWORD *)(a1 + 12) ) + { + v42 = (*(int (**)(void))(*(_DWORD *)a1 + 36))(); + lpuexcptd = v42; + if ( v42 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptd = -1; + } + } + else + { + v18 = *v35; +LABEL_43: + lpuexcptd = v18; + } + v19 = memchr((const void *)(v87 + 57), lpuexcptd, 0xAu); + if ( v19 ) + { + v68 = v19[(_DWORD)std::money_base::_S_atoms - 56 - v87]; + v62 = *(_DWORD *)(v89 - 12); + lpuexcptb = (std::string *)(v62 + 1); + if ( (unsigned int)(v62 + 1) > *(_DWORD *)(v89 - 8) || *(int *)(v89 - 4) > 0 ) + std::string::reserve(&v89, lpuexcptb, (unsigned int)v47); + v76 = (std::locale::facet *)((char *)v76 + 1); + *(_BYTE *)(v89 + *(_DWORD *)(v89 - 12)) = v68; + v15 = v89; + *(_DWORD *)(v89 - 12) = lpuexcptb; + *(_DWORD *)(v15 - 4) = 0; + *(_BYTE *)(v15 + v62 + 1) = 0; +LABEL_36: + v14 = (_DWORD *)a1; + v16 = *(_DWORD *)(a1 + 8); + if ( v16 < *(_DWORD *)(a1 + 12) ) + { +LABEL_37: + v14[2] = v16 + 1; +LABEL_38: + HIDWORD(a1) = -1; + v13 = -1; + continue; + } +LABEL_54: + (*(void (__fastcall **)(_DWORD *))(*v14 + 40))(v14); + v14 = (_DWORD *)a1; + goto LABEL_38; + } + break; + } + v66 = v60 | (*(_BYTE *)(v87 + 17) != (unsigned __int8)lpuexcptd); + if ( v66 ) + { + v20 = *(_BYTE *)(v87 + 16); + if ( v20 ) + { + if ( *(_BYTE *)(v87 + 18) != lpuexcptd ) + goto LABEL_172; + if ( v60 ) + { + v20 = v60; +LABEL_172: + v66 = v20; + if ( !*(_DWORD *)(v89 - 12) ) + goto LABEL_107; + goto LABEL_113; + } + if ( v76 ) + { + v71 = *(_DWORD *)(*(_DWORD *)&v88[1] - 12); + lpuexcpte = (std::string *)(v71 + 1); + if ( (unsigned int)(v71 + 1) > *(_DWORD *)(*(_DWORD *)&v88[1] - 8) || *(int *)(*(_DWORD *)&v88[1] - 4) > 0 ) + std::string::reserve((int *)&v88[1], lpuexcpte, (unsigned int)v47); + v21 = (char)v76; + v76 = 0; + *(_BYTE *)(*(_DWORD *)&v88[1] + *(_DWORD *)(*(_DWORD *)&v88[1] - 12)) = v21; + v22 = *(_DWORD *)&v88[1]; + *(_DWORD *)(*(_DWORD *)&v88[1] - 4) = 0; + *(_DWORD *)(v22 - 12) = lpuexcpte; + *(_BYTE *)(v22 + v71 + 1) = 0; + v14 = (_DWORD *)a1; + v16 = *(_DWORD *)(a1 + 8); + if ( v16 < *(_DWORD *)(a1 + 12) ) + goto LABEL_37; + goto LABEL_54; + } + v66 = 0; + } + } + else + { + if ( *(int *)(v87 + 44) > 0 ) + { + v36 = (char)v76; + v60 = 1; + v76 = 0; + v53 = v36; + goto LABEL_36; + } + v60 = 0; +LABEL_105: + v66 = 1; + } + if ( !*(_DWORD *)(v89 - 12) ) + goto LABEL_107; +LABEL_113: + lpuexcptf = v66 ^ 1; + goto LABEL_114; + default: + lpuexcptf = 0; + goto LABEL_160; + } + } +} +// 4BFD25: variable 'v48' is possibly undefined +// 4BF02D: variable 'v45' is possibly undefined +// 4BF06B: variable 'v46' is possibly undefined +// 4BF223: variable 'v47' is possibly undefined +// 4BFB5A: variable 'v49' is possibly undefined +// 4BFB9B: variable 'v50' is possibly undefined +// 4BFDCF: variable 'v51' is possibly undefined +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 53F590: using guessed type signed __int32 std::moneypunct::id; +// 5606E4: using guessed type int (*off_5606E4)(); + +//----- (004BFF50) -------------------------------------------------------- +int __thiscall std::money_get>::get( + void *this, + int a2, + int a3, + int a4, + int a5, + unsigned __int8 a6) +{ + return (*(int (__thiscall **)(void *, int, int, int, int, _DWORD))(*(_DWORD *)this + 12))(this, a2, a3, a4, a5, a6); +} + +//----- (004BFF60) -------------------------------------------------------- +int __thiscall std::money_get>::get( + void *this, + int a2, + int a3, + int a4, + int a5, + unsigned __int8 a6) +{ + return (*(int (__thiscall **)(void *, int, int, int, int, _DWORD))(*(_DWORD *)this + 8))(this, a2, a3, a4, a5, a6); +} + +//----- (004BFF70) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +unsigned __int64 __stdcall std::money_get>::do_get( + unsigned __int64 a1, + _DWORD *a2, + int a3, + char a4, + int a5, + _DWORD *a6, + int *a7) +{ + unsigned __int64 v7; // rax + size_t v8; // eax + char v9; // al + void (__thiscall *v10)(_BYTE *, char *, char *, void *); // eax + int v11; // eax + char v13; // [esp+4h] [ebp-84h] + char *v14; // [esp+28h] [ebp-60h] + void *v15; // [esp+2Ch] [ebp-5Ch] + size_t Size; // [esp+30h] [ebp-58h] + _BYTE *v17; // [esp+34h] [ebp-54h] + char *Src; // [esp+38h] [ebp-50h] + int v19; // [esp+7Bh] [ebp-Dh] BYREF + int v20[3]; // [esp+7Ch] [ebp-Ch] BYREF + unsigned __int64 v21; // [esp+90h] [ebp+8h] + + v17 = std::use_facet>(a5 + 108); + v20[0] = (int)std::string::_S_construct(0, 0); + if ( a4 ) + v7 = std::money_get>::_M_extract(a1, a2, a3, a5, a6, v20); + else + v7 = std::money_get>::_M_extract(a1, a2, a3, a5, a6, v20); + v21 = v7; + Src = (char *)v20[0]; + v8 = *(_DWORD *)(v20[0] - 12); + Size = v8; + if ( v8 ) + { + std::string::resize(a7, v8, 0, v13); + v15 = (void *)*a7; + if ( *(int *)(*a7 - 4) >= 0 ) + { + std::string::_M_leak_hard((char **)a7); + v15 = (void *)*a7; + } + Src = (char *)v20[0]; + v14 = (char *)(Size + v20[0]); + v9 = v17[28]; + if ( v9 == 1 ) + { + if ( v14 != (char *)v20[0] ) + goto LABEL_11; + } + else + { + if ( !v9 ) + std::ctype::_M_widen_init((int)v17); + v10 = *(void (__thiscall **)(_BYTE *, char *, char *, void *))(*(_DWORD *)v17 + 28); + if ( (char *)v10 == (char *)std::ctype::do_widen ) + { + if ( v14 != Src ) + { +LABEL_11: + memcpy(v15, Src, Size); + Src = (char *)v20[0]; + goto LABEL_12; + } + } + else + { + v10(v17, Src, v14, v15); + } + Src = (char *)v20[0]; + } + } +LABEL_12: + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)Src - 1, 0xFFFFFFFF) > 0 ) + return v21; +LABEL_17: + std::string::_Rep::_M_destroy(Src - 12, (int)&v19); + return v21; + } + v11 = *((_DWORD *)Src - 1); + *((_DWORD *)Src - 1) = v11 - 1; + if ( v11 <= 0 ) + goto LABEL_17; + return v21; +} +// 4C01CF: positive sp value 4 has been found +// 4C0059: variable 'v13' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 4BFF70: using guessed type _DWORD *arg_8; + +//----- (004C01F0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +unsigned __int64 __stdcall std::money_get>::do_get( + unsigned __int64 a1, + _DWORD *a2, + int a3, + char a4, + int a5, + _DWORD *a6, + long double *a7) +{ + unsigned __int64 v7; // rax + char *v8; // ecx + int v9; // eax + char *String; // [esp+68h] [ebp-10h] BYREF + int v12[3]; // [esp+6Ch] [ebp-Ch] BYREF + unsigned __int64 v13; // [esp+80h] [ebp+8h] + + String = (char *)std::string::_S_construct(0, 0); + if ( a4 ) + v7 = std::money_get>::_M_extract(a1, a2, a3, a5, a6, (int *)&String); + else + v7 = std::money_get>::_M_extract(a1, a2, a3, a5, a6, (int *)&String); + v13 = v7; + v12[0] = std::locale::facet::_S_get_c_locale(); + std::__convert_to_v(String, a7, a6); + v8 = String; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)String - 1, 0xFFFFFFFF) > 0 ) + return v13; +LABEL_8: + std::string::_Rep::_M_destroy(v8 - 12, (int)v12); + return v13; + } + v9 = *((_DWORD *)String - 1); + *((_DWORD *)String - 1) = v9 - 1; + if ( v9 <= 0 ) + goto LABEL_8; + return v13; +} +// 4C0348: positive sp value 4 has been found +// 53E1E4: using guessed type int _CRT_MT; +// 4C01F0: using guessed type int var_C[3]; + +//----- (004C0360) -------------------------------------------------------- +__int64 __stdcall std::money_get>::_M_extract( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + _DWORD *a5, + int *a6) +{ + char v6; // al + int v7; // eax + __int16 v8; // ax + _DWORD *v9; // ecx + char v10; // al + __int16 v11; // ax + unsigned int v12; // eax + _WORD *v13; // eax + __int16 v14; // ax + __int16 v15; // ax + _DWORD *v16; // ecx + char v17; // al + unsigned __int16 v18; // dx + _WORD *v19; // eax + char v20; // al + char v21; // cl + int v22; // eax + unsigned int v23; // eax + int v24; // eax + _DWORD *v25; // ecx + __int16 i; // ax + bool v27; // al + __int16 v28; // ax + unsigned int v29; // eax + _WORD *v30; // eax + __int16 v31; // ax + __int16 v32; // ax + _DWORD *v33; // ecx + char v34; // al + unsigned __int16 v35; // ax + unsigned int v36; // eax + _WORD *v37; // eax + __int16 v38; // ax + int v39; // eax + __int16 *v40; // eax + __int16 v41; // dx + int v42; // eax + int v43; // edx + int v44; // eax + int v45; // edx + _WORD *v47; // eax + __int16 v48; // ax + _WORD *v49; // eax + char v50; // al + _WORD *v51; // eax + __int16 v52; // dx + _WORD *v53; // eax + unsigned __int16 v54; // ax + __int16 *v55; // eax + __int16 v56; // dx + std::string *v57; // eax + _WORD *v58; // eax + _WORD *v59; // eax + __int16 v60; // dx + __int16 *v61; // eax + unsigned int first_not_of; // eax + unsigned int v63; // edx + _DWORD *v64; // eax + int *v65; // eax + unsigned int v66; // [esp+4h] [ebp-94h] + unsigned int v67; // [esp+4h] [ebp-94h] + std::string *v68; // [esp+4h] [ebp-94h] + unsigned int v69; // [esp+8h] [ebp-90h] + unsigned int v70; // [esp+Ch] [ebp-8Ch] + std::locale::_Impl *v71; // [esp+10h] [ebp-88h] + char v72; // [esp+14h] [ebp-84h] + void *v73; // [esp+18h] [ebp-80h] + unsigned int v74; // [esp+1Ch] [ebp-7Ch] + int v75; // [esp+24h] [ebp-74h] + bool v76; // [esp+29h] [ebp-6Fh] + char v77; // [esp+2Ah] [ebp-6Eh] + char v78; // [esp+2Bh] [ebp-6Dh] + bool v79; // [esp+2Ch] [ebp-6Ch] + bool v80; // [esp+2Ch] [ebp-6Ch] + char v81; // [esp+30h] [ebp-68h] + char v82; // [esp+30h] [ebp-68h] + unsigned int v83; // [esp+30h] [ebp-68h] + char v84; // [esp+30h] [ebp-68h] + char v85; // [esp+30h] [ebp-68h] + int v86; // [esp+30h] [ebp-68h] + char v87; // [esp+34h] [ebp-64h] + int v88; // [esp+34h] [ebp-64h] + char v89; // [esp+34h] [ebp-64h] + char v90; // [esp+34h] [ebp-64h] + int v91; // [esp+34h] [ebp-64h] + unsigned int v92; // [esp+34h] [ebp-64h] + char v93; // [esp+34h] [ebp-64h] + int *v94; // [esp+38h] [ebp-60h] + unsigned int v95; // [esp+38h] [ebp-60h] + std::locale::facet *v96; // [esp+3Ch] [ebp-5Ch] + std::locale::facet *v97; // [esp+3Ch] [ebp-5Ch] + int lpuexcpt; // [esp+40h] [ebp-58h] + char lpuexcpta; // [esp+40h] [ebp-58h] + char lpuexcptb; // [esp+40h] [ebp-58h] + std::string *lpuexcptc; // [esp+40h] [ebp-58h] + char lpuexcptd; // [esp+40h] [ebp-58h] + bool lpuexcpte; // [esp+40h] [ebp-58h] + char lpuexcptf; // [esp+40h] [ebp-58h] + std::string *lpuexcptg; // [esp+40h] [ebp-58h] + __int64 lpuexcpth; // [esp+40h] [ebp-58h] + int v107; // [esp+48h] [ebp-50h] + char v108[5]; // [esp+83h] [ebp-15h] BYREF + int v109; // [esp+88h] [ebp-10h] BYREF + int v110[2]; // [esp+8Ch] [ebp-Ch] + + lpuexcpt = a4 + 108; + v73 = std::use_facet>(a4 + 108); + v96 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v94 = (int *)(*(_DWORD *)(*(_DWORD *)(a4 + 108) + 12) + 4 * (_DWORD)v96); + v107 = *v94; + if ( !*v94 ) + { + v64 = operator new(0x54u); + v64[1] = 0; + *v64 = &off_5606F4; + v64[2] = 0; + v64[3] = 0; + *((_BYTE *)v64 + 16) = 0; + *(_DWORD *)((char *)v64 + 18) = 0; + v64[6] = 0; + v64[7] = 0; + v64[8] = 0; + v64[9] = 0; + v64[10] = 0; + v64[11] = 0; + v64[12] = 0; + v64[13] = 0; + v64[14] = 0; + *((_BYTE *)v64 + 82) = 0; + v71 = (std::locale::_Impl *)v64; + std::__moneypunct_cache::_M_cache((int)v64, lpuexcpt); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a4 + 108), v71, v96, v69); + v107 = *v94; + } + if ( *(_DWORD *)(v107 + 36) ) + v76 = *(_DWORD *)(v107 + 44) != 0; + else + v76 = 0; + *(_DWORD *)&v108[1] = std::string::_S_construct(0, 0); + if ( *(_BYTE *)(v107 + 16) ) + std::string::reserve((int *)&v108[1], (std::string *)0x20, v66); + v109 = (int)std::string::_S_construct(0, 0); + std::string::reserve(&v109, (std::string *)0x20, v67); + v78 = 0; + v75 = 0; + v77 = 0; + v110[0] = *(_DWORD *)(v107 + 56); + v97 = 0; + v72 = 0; + v74 = 0; + while ( 2 ) + { + switch ( *((_BYTE *)v110 + v75) ) + { + case 0: + v87 = 1; + goto LABEL_10; + case 1: + if ( std::istreambuf_iterator::equal(&a1, (int)&a2) + || (v54 = std::istreambuf_iterator::_M_get((int)&a1), + (v87 = (*(int (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v73 + 8))(v73, 32, v54)) == 0) ) + { + v87 = 0; + if ( v75 == 3 ) + goto LABEL_11; + } + else + { + std::wstreambuf::sbumpc((_DWORD *)a1); + WORD2(a1) = -1; +LABEL_10: + if ( v75 == 3 ) + { +LABEL_11: + v6 = v87 & (v74 > 1); + goto LABEL_12; + } + } + v32 = WORD2(a1); + v33 = (_DWORD *)a1; + while ( 1 ) + { + lpuexcptf = v32 == -1; + v85 = lpuexcptf & (v33 != 0); + if ( v85 ) + { + v37 = (_WORD *)v33[2]; + v38 = (unsigned int)v37 >= v33[3] ? (*(int (__fastcall **)(_DWORD *))(*v33 + 36))(v33) : *v37; + lpuexcptf = 0; + if ( v38 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptf = v85; + } + } + v34 = a3 == -1; + v84 = v34 & (a2 != 0); + if ( v84 ) + { + v51 = (_WORD *)a2[2]; + v52 = (unsigned int)v51 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v51; + v34 = 0; + if ( v52 == -1 ) + { + a2 = 0; + v34 = v84; + } + } + if ( lpuexcptf == v34 ) + break; + v35 = WORD2(a1); + if ( WORD2(a1) == 0xFFFF && (_DWORD)a1 ) + { + v53 = *(_WORD **)(a1 + 8); + v35 = (unsigned int)v53 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v53; + if ( v35 == 0xFFFF ) + LODWORD(a1) = 0; + } + if ( !(*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v73 + 8))(v73, 32, v35) ) + break; + v33 = (_DWORD *)a1; + v36 = *(_DWORD *)(a1 + 8); + if ( v36 >= *(_DWORD *)(a1 + 12) ) + { + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v33 = (_DWORD *)a1; + } + else + { + *(_DWORD *)(a1 + 8) = v36 + 2; + } + WORD2(a1) = -1; + v32 = -1; + } +LABEL_120: + lpuexcptd = v87 ^ 1; + goto LABEL_121; + case 2: + if ( (*(_BYTE *)(a4 + 13) & 2) != 0 ) + goto LABEL_61; + lpuexcptd = v75 == 0 || v74 > 1; + if ( lpuexcptd ) + goto LABEL_61; + if ( v75 != 1 ) + { + v87 = 1; + if ( v75 != 2 ) + goto LABEL_121; + if ( HIBYTE(v110[0]) == 4 ) + goto LABEL_61; + v24 = 3; + if ( HIBYTE(v110[0]) == 3 && v76 ) + goto LABEL_61; +LABEL_123: + v75 = v24; + continue; + } + if ( !v76 && LOBYTE(v110[0]) != 3 && BYTE2(v110[0]) != 1 ) + { + v24 = 2; + goto LABEL_123; + } +LABEL_61: + v25 = (_DWORD *)a1; + v92 = 0; + v83 = *(_DWORD *)(v107 + 28); + for ( i = WORD2(a1); ; i = -1 ) + { + lpuexcpte = i == -1; + v80 = lpuexcpte && v25 != 0; + if ( v80 ) + { + v30 = (_WORD *)v25[2]; + v31 = (unsigned int)v30 >= v25[3] ? (*(int (__fastcall **)(_DWORD *))(*v25 + 36))(v25) : *v30; + lpuexcpte = 0; + if ( v31 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpte = v80; + } + } + v27 = a3 == -1; + v79 = v27 && a2 != 0; + if ( v79 ) + { + v59 = (_WORD *)a2[2]; + v60 = (unsigned int)v59 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v59; + v27 = 0; + if ( v60 == -1 ) + { + a2 = 0; + v27 = v79; + } + } + lpuexcptd = (v92 < v83) & (lpuexcpte ^ v27); + if ( !lpuexcptd ) + break; + v28 = WORD2(a1); + if ( (_DWORD)a1 + && WORD2(a1) == 0xFFFF + && ((v61 = *(__int16 **)(a1 + 8), (unsigned int)v61 >= *(_DWORD *)(a1 + 12)) + ? (v28 = (*(int (**)(void))(*(_DWORD *)a1 + 36))()) + : (v28 = *v61), + v28 == -1) ) + { + LODWORD(a1) = 0; + if ( *(_WORD *)(*(_DWORD *)(v107 + 24) + 2 * v92) != 0xFFFF ) + goto LABEL_171; + } + else if ( *(_WORD *)(*(_DWORD *)(v107 + 24) + 2 * v92) != v28 ) + { + goto LABEL_171; + } + v25 = (_DWORD *)a1; + v29 = *(_DWORD *)(a1 + 8); + if ( v29 >= *(_DWORD *)(a1 + 12) ) + { + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v25 = (_DWORD *)a1; + } + else + { + *(_DWORD *)(a1 + 8) = v29 + 2; + } + ++v92; + WORD2(a1) = -1; + } + if ( v92 == v83 ) + { +LABEL_181: + v87 = 1; + } + else + { +LABEL_171: + if ( v92 ) + goto LABEL_102; + v87 = (*(_BYTE *)(a4 + 13) & 2) == 0; + lpuexcptd = (*(_BYTE *)(a4 + 13) & 2) != 0; + } +LABEL_121: + v24 = v75 + 1; + if ( v75 + 1 <= 3 && !lpuexcptd ) + goto LABEL_123; + v6 = v87 & (v74 > 1); +LABEL_12: + if ( !v6 ) + { + if ( v87 ) + { + if ( *(_DWORD *)(v109 - 12) > 1u ) + goto LABEL_182; + goto LABEL_150; + } + goto LABEL_102; + } + if ( v77 ) + v7 = *(_DWORD *)(v107 + 40); + else + v7 = *(_DWORD *)(v107 + 32); + v88 = v7; + v8 = WORD2(a1); + v9 = (_DWORD *)a1; + v95 = 1; + while ( 2 ) + { + lpuexcpta = v8 == -1; + v82 = lpuexcpta & (v9 != 0); + if ( v82 ) + { + v13 = (_WORD *)v9[2]; + v14 = (unsigned int)v13 >= v9[3] ? (*(int (__fastcall **)(_DWORD *))(*v9 + 36))(v9) : *v13; + lpuexcpta = 0; + if ( v14 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = v82; + } + } + v10 = a3 == -1; + v81 = v10 & (a2 != 0); + if ( !v81 + || ((v55 = (__int16 *)a2[2], (unsigned int)v55 >= a2[3]) + ? (v56 = (*(int (**)(void))(*a2 + 36))()) + : (v56 = *v55), + v10 = 0, + v56 != -1) ) + { + if ( v95 >= v74 ) + break; + goto LABEL_18; + } + v10 = v81; + a2 = 0; + if ( v95 < v74 ) + { +LABEL_18: + if ( lpuexcpta == v10 ) + break; + v11 = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v58 = *(_WORD **)(a1 + 8); + v11 = (unsigned int)v58 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v58; + if ( v11 == -1 ) + LODWORD(a1) = 0; + } + if ( *(_WORD *)(v88 + 2 * v95) != v11 ) + goto LABEL_102; + v9 = (_DWORD *)a1; + v12 = *(_DWORD *)(a1 + 8); + if ( v12 >= *(_DWORD *)(a1 + 12) ) + { + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v9 = (_DWORD *)a1; + } + else + { + *(_DWORD *)(a1 + 8) = v12 + 2; + } + ++v95; + WORD2(a1) = -1; + v8 = -1; + continue; + } + break; + } + if ( v95 != v74 ) + goto LABEL_102; + if ( *(_DWORD *)(v109 - 12) <= 1u ) + goto LABEL_150; +LABEL_182: + first_not_of = std::string::find_first_not_of(&v109, (std::string *)0x30, 0, (unsigned int)v108); + if ( first_not_of ) + { + v63 = *(_DWORD *)(v109 - 12); + if ( first_not_of == -1 ) + first_not_of = v63 - 1; + if ( first_not_of > v63 ) + first_not_of = *(_DWORD *)(v109 - 12); + std::string::_M_mutate((char **)&v109, 0, first_not_of, 0, v70); + } +LABEL_150: + if ( v77 ) + { + v65 = (int *)v109; + if ( *(int *)(v109 - 4) >= 0 ) + { + std::string::_M_leak_hard((char **)&v109); + v65 = (int *)v109; + } + if ( *(_BYTE *)v65 != 48 ) + { + if ( *(v65 - 1) >= 0 ) + std::string::_M_leak_hard((char **)&v109); + std::string::_M_replace_aux((char **)&v109, 0, 0, 1u, 45, (char)v71); + *(_DWORD *)(v109 - 4) = -1; + } + } + if ( *(_DWORD *)(*(_DWORD *)&v108[1] - 12) ) + { + v57 = (std::string *)(char)v97; + if ( v78 ) + v57 = (std::string *)v72; + std::string::push_back((int *)&v108[1], v57, (char)v68); + if ( !(unsigned __int8)std::__verify_grouping( + *(char **)(v107 + 8), + *(_DWORD *)(v107 + 12), + (const char **)&v108[1]) ) + *a5 |= 4u; + } + if ( v78 && *(std::locale::facet **)(v107 + 48) != v97 ) + { +LABEL_102: + *a5 |= 4u; + goto LABEL_103; + } + std::string::swap(a6, (std::string *)&v109, v68); +LABEL_103: + if ( std::istreambuf_iterator::equal(&a1, (int)&a2) ) + *a5 |= 2u; + lpuexcpth = a1; + v42 = v109; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v109 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_179; + } + else + { + v43 = *(_DWORD *)(v109 - 4); + *(_DWORD *)(v109 - 4) = v43 - 1; + if ( v43 > 0 ) + goto LABEL_107; +LABEL_179: + std::string::_Rep::_M_destroy((void *)(v42 - 12), (int)v108); + } +LABEL_107: + v44 = *(_DWORD *)&v108[1]; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(*(_DWORD *)&v108[1] - 4), 0xFFFFFFFF) > 0 ) + return lpuexcpth; +LABEL_177: + std::string::_Rep::_M_destroy((void *)(v44 - 12), (int)&v109); + return lpuexcpth; + } + v45 = *(_DWORD *)(*(_DWORD *)&v108[1] - 4); + *(_DWORD *)(*(_DWORD *)&v108[1] - 4) = v45 - 1; + if ( v45 <= 0 ) + goto LABEL_177; + return lpuexcpth; + case 3: + if ( *(_DWORD *)(v107 + 36) ) + { + lpuexcptd = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( !lpuexcptd + && **(_WORD **)(v107 + 32) == (unsigned __int16)std::istreambuf_iterator::_M_get((int)&a1) ) + { + v74 = *(_DWORD *)(v107 + 36); + std::wstreambuf::sbumpc((_DWORD *)a1); + WORD2(a1) = -1; + goto LABEL_181; + } + if ( !*(_DWORD *)(v107 + 44) ) + { + if ( !*(_DWORD *)(v107 + 36) ) + goto LABEL_53; +LABEL_137: + lpuexcptd = 0; + v87 = 1; + v77 = 1; + goto LABEL_121; + } + } + else if ( !*(_DWORD *)(v107 + 44) ) + { + goto LABEL_53; + } + lpuexcptd = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( lpuexcptd + || **(_WORD **)(v107 + 40) != (unsigned __int16)std::istreambuf_iterator::_M_get((int)&a1) ) + { + if ( !*(_DWORD *)(v107 + 36) || *(_DWORD *)(v107 + 44) ) + { +LABEL_53: + lpuexcptd = v76; + v87 = !v76; + goto LABEL_121; + } + goto LABEL_137; + } + v74 = *(_DWORD *)(v107 + 44); + std::wstreambuf::sbumpc((_DWORD *)a1); + v87 = 1; + WORD2(a1) = -1; + v77 = 1; + goto LABEL_121; + case 4: + v15 = WORD2(a1); + v16 = (_DWORD *)a1; + while ( 2 ) + { + lpuexcptb = v15 == -1; + v89 = lpuexcptb & (v16 != 0); + if ( v89 ) + { + v47 = (_WORD *)v16[2]; + v48 = (unsigned int)v47 >= v16[3] ? (*(int (__fastcall **)(_DWORD *))(*v16 + 36))(v16) : *v47; + lpuexcptb = 0; + if ( v48 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptb = v89; + } + } + v17 = a3 == -1; + v90 = v17 & (a2 != 0); + if ( v90 + && ((v40 = (__int16 *)a2[2], (unsigned int)v40 >= a2[3]) + ? (v41 = (*(int (**)(void))(*a2 + 36))()) + : (v41 = *v40), + v17 = 0, + v41 == -1) ) + { + a2 = 0; + if ( lpuexcptb == v90 ) + goto LABEL_100; + } + else if ( lpuexcptb == v17 ) + { + goto LABEL_100; + } + v18 = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v49 = *(_WORD **)(a1 + 8); + v18 = (unsigned int)v49 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v49; + if ( v18 == 0xFFFF ) + LODWORD(a1) = 0; + } + v19 = (_WORD *)(v107 + 62); + do + { + if ( v18 == *v19 ) + { + v93 = std::money_base::_S_atoms[((int)v19 - v107 - 60) >> 1]; + v86 = *(_DWORD *)(v109 - 12); + lpuexcptg = (std::string *)(v86 + 1); + if ( (unsigned int)(v86 + 1) > *(_DWORD *)(v109 - 8) || *(int *)(v109 - 4) > 0 ) + std::string::reserve(&v109, lpuexcptg, (unsigned int)v68); + v97 = (std::locale::facet *)((char *)v97 + 1); + *(_BYTE *)(v109 + *(_DWORD *)(v109 - 12)) = v93; + v39 = v109; + *(_DWORD *)(v109 - 12) = lpuexcptg; + *(_DWORD *)(v39 - 4) = 0; + *(_BYTE *)(v39 + v86 + 1) = 0; + v16 = (_DWORD *)a1; + v23 = *(_DWORD *)(a1 + 8); + if ( v23 < *(_DWORD *)(a1 + 12) ) + goto LABEL_49; + goto LABEL_95; + } + ++v19; + } + while ( v19 != (_WORD *)(v107 + 82) ); + v20 = v78 | (*(_WORD *)(v107 + 18) != v18); + if ( !v20 ) + { + if ( *(int *)(v107 + 48) > 0 ) + { + v50 = (char)v97; + v78 = 1; + v97 = 0; + v72 = v50; + goto LABEL_48; + } + v78 = 0; +LABEL_100: + v87 = 1; +LABEL_101: + if ( !*(_DWORD *)(v109 - 12) ) + goto LABEL_102; + goto LABEL_120; + } + v87 = *(_BYTE *)(v107 + 16); + if ( v87 ) + { + if ( *(_WORD *)(v107 + 20) != v18 ) + goto LABEL_101; + if ( !v78 ) + { + if ( v97 ) + { + v91 = *(_DWORD *)(*(_DWORD *)&v108[1] - 12); + lpuexcptc = (std::string *)(v91 + 1); + if ( (unsigned int)(v91 + 1) > *(_DWORD *)(*(_DWORD *)&v108[1] - 8) + || *(int *)(*(_DWORD *)&v108[1] - 4) > 0 ) + { + std::string::reserve((int *)&v108[1], lpuexcptc, (unsigned int)v68); + } + v21 = (char)v97; + v97 = 0; + *(_BYTE *)(*(_DWORD *)&v108[1] + *(_DWORD *)(*(_DWORD *)&v108[1] - 12)) = v21; + v22 = *(_DWORD *)&v108[1]; + *(_DWORD *)(*(_DWORD *)&v108[1] - 12) = lpuexcptc; + *(_DWORD *)(v22 - 4) = 0; + *(_BYTE *)(v22 + v91 + 1) = 0; +LABEL_48: + v16 = (_DWORD *)a1; + v23 = *(_DWORD *)(a1 + 8); + if ( v23 < *(_DWORD *)(a1 + 12) ) + { +LABEL_49: + v16[2] = v23 + 2; +LABEL_50: + WORD2(a1) = -1; + v15 = -1; + continue; + } +LABEL_95: + (*(void (__fastcall **)(_DWORD *))(*v16 + 40))(v16); + v16 = (_DWORD *)a1; + goto LABEL_50; + } + v87 = 0; + goto LABEL_101; + } + v20 = v78; + } + break; + } + v87 = v20; + if ( !*(_DWORD *)(v109 - 12) ) + goto LABEL_102; + goto LABEL_120; + default: + lpuexcptd = 0; + v87 = 1; + goto LABEL_121; + } + } +} +// 4C110C: variable 'v69' is possibly undefined +// 4C042D: variable 'v66' is possibly undefined +// 4C046B: variable 'v67' is possibly undefined +// 4C06D2: variable 'v68' is possibly undefined +// 4C0F9B: variable 'v70' is possibly undefined +// 4C11D8: variable 'v71' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 53F594: using guessed type signed __int32 std::moneypunct::id; +// 5606F4: using guessed type int (*off_5606F4)(); + +//----- (004C13B0) -------------------------------------------------------- +__int64 __stdcall std::money_get>::_M_extract( + __int64 a1, + _DWORD *a2, + __int16 a3, + int a4, + _DWORD *a5, + int *a6) +{ + char v6; // al + int v7; // eax + __int16 v8; // ax + _DWORD *v9; // ecx + char v10; // al + __int16 v11; // ax + unsigned int v12; // eax + _WORD *v13; // eax + __int16 v14; // ax + __int16 v15; // ax + _DWORD *v16; // ecx + char v17; // al + unsigned __int16 v18; // dx + _WORD *v19; // eax + char v20; // al + char v21; // cl + int v22; // eax + unsigned int v23; // eax + int v24; // eax + _DWORD *v25; // ecx + __int16 i; // ax + bool v27; // al + __int16 v28; // ax + unsigned int v29; // eax + _WORD *v30; // eax + __int16 v31; // ax + __int16 v32; // ax + _DWORD *v33; // ecx + char v34; // al + unsigned __int16 v35; // ax + unsigned int v36; // eax + _WORD *v37; // eax + __int16 v38; // ax + int v39; // eax + __int16 *v40; // eax + __int16 v41; // dx + int v42; // eax + int v43; // edx + int v44; // eax + int v45; // edx + _WORD *v47; // eax + __int16 v48; // ax + _WORD *v49; // eax + char v50; // al + _WORD *v51; // eax + __int16 v52; // dx + _WORD *v53; // eax + unsigned __int16 v54; // ax + __int16 *v55; // eax + __int16 v56; // dx + std::string *v57; // eax + _WORD *v58; // eax + _WORD *v59; // eax + __int16 v60; // dx + __int16 *v61; // eax + unsigned int first_not_of; // eax + unsigned int v63; // edx + _DWORD *v64; // eax + int *v65; // eax + unsigned int v66; // [esp+4h] [ebp-94h] + unsigned int v67; // [esp+4h] [ebp-94h] + std::string *v68; // [esp+4h] [ebp-94h] + unsigned int v69; // [esp+8h] [ebp-90h] + unsigned int v70; // [esp+Ch] [ebp-8Ch] + std::locale::_Impl *v71; // [esp+10h] [ebp-88h] + char v72; // [esp+14h] [ebp-84h] + void *v73; // [esp+18h] [ebp-80h] + unsigned int v74; // [esp+1Ch] [ebp-7Ch] + int v75; // [esp+24h] [ebp-74h] + bool v76; // [esp+29h] [ebp-6Fh] + char v77; // [esp+2Ah] [ebp-6Eh] + char v78; // [esp+2Bh] [ebp-6Dh] + bool v79; // [esp+2Ch] [ebp-6Ch] + bool v80; // [esp+2Ch] [ebp-6Ch] + char v81; // [esp+30h] [ebp-68h] + char v82; // [esp+30h] [ebp-68h] + unsigned int v83; // [esp+30h] [ebp-68h] + char v84; // [esp+30h] [ebp-68h] + char v85; // [esp+30h] [ebp-68h] + int v86; // [esp+30h] [ebp-68h] + char v87; // [esp+34h] [ebp-64h] + int v88; // [esp+34h] [ebp-64h] + char v89; // [esp+34h] [ebp-64h] + char v90; // [esp+34h] [ebp-64h] + int v91; // [esp+34h] [ebp-64h] + unsigned int v92; // [esp+34h] [ebp-64h] + char v93; // [esp+34h] [ebp-64h] + int *v94; // [esp+38h] [ebp-60h] + unsigned int v95; // [esp+38h] [ebp-60h] + std::locale::facet *v96; // [esp+3Ch] [ebp-5Ch] + std::locale::facet *v97; // [esp+3Ch] [ebp-5Ch] + int lpuexcpt; // [esp+40h] [ebp-58h] + char lpuexcpta; // [esp+40h] [ebp-58h] + char lpuexcptb; // [esp+40h] [ebp-58h] + std::string *lpuexcptc; // [esp+40h] [ebp-58h] + char lpuexcptd; // [esp+40h] [ebp-58h] + bool lpuexcpte; // [esp+40h] [ebp-58h] + char lpuexcptf; // [esp+40h] [ebp-58h] + std::string *lpuexcptg; // [esp+40h] [ebp-58h] + __int64 lpuexcpth; // [esp+40h] [ebp-58h] + int v107; // [esp+48h] [ebp-50h] + char v108[5]; // [esp+83h] [ebp-15h] BYREF + int v109; // [esp+88h] [ebp-10h] BYREF + int v110[2]; // [esp+8Ch] [ebp-Ch] + + lpuexcpt = a4 + 108; + v73 = std::use_facet>(a4 + 108); + v96 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v94 = (int *)(*(_DWORD *)(*(_DWORD *)(a4 + 108) + 12) + 4 * (_DWORD)v96); + v107 = *v94; + if ( !*v94 ) + { + v64 = operator new(0x54u); + v64[1] = 0; + *v64 = &off_560704; + v64[2] = 0; + v64[3] = 0; + *((_BYTE *)v64 + 16) = 0; + *(_DWORD *)((char *)v64 + 18) = 0; + v64[6] = 0; + v64[7] = 0; + v64[8] = 0; + v64[9] = 0; + v64[10] = 0; + v64[11] = 0; + v64[12] = 0; + v64[13] = 0; + v64[14] = 0; + *((_BYTE *)v64 + 82) = 0; + v71 = (std::locale::_Impl *)v64; + std::__moneypunct_cache::_M_cache((int)v64, lpuexcpt); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a4 + 108), v71, v96, v69); + v107 = *v94; + } + if ( *(_DWORD *)(v107 + 36) ) + v76 = *(_DWORD *)(v107 + 44) != 0; + else + v76 = 0; + *(_DWORD *)&v108[1] = std::string::_S_construct(0, 0); + if ( *(_BYTE *)(v107 + 16) ) + std::string::reserve((int *)&v108[1], (std::string *)0x20, v66); + v109 = (int)std::string::_S_construct(0, 0); + std::string::reserve(&v109, (std::string *)0x20, v67); + v78 = 0; + v75 = 0; + v77 = 0; + v110[0] = *(_DWORD *)(v107 + 56); + v97 = 0; + v72 = 0; + v74 = 0; + while ( 2 ) + { + switch ( *((_BYTE *)v110 + v75) ) + { + case 0: + v87 = 1; + goto LABEL_10; + case 1: + if ( std::istreambuf_iterator::equal(&a1, (int)&a2) + || (v54 = std::istreambuf_iterator::_M_get((int)&a1), + (v87 = (*(int (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v73 + 8))(v73, 32, v54)) == 0) ) + { + v87 = 0; + if ( v75 == 3 ) + goto LABEL_11; + } + else + { + std::wstreambuf::sbumpc((_DWORD *)a1); + WORD2(a1) = -1; +LABEL_10: + if ( v75 == 3 ) + { +LABEL_11: + v6 = v87 & (v74 > 1); + goto LABEL_12; + } + } + v32 = WORD2(a1); + v33 = (_DWORD *)a1; + while ( 1 ) + { + lpuexcptf = v32 == -1; + v85 = lpuexcptf & (v33 != 0); + if ( v85 ) + { + v37 = (_WORD *)v33[2]; + v38 = (unsigned int)v37 >= v33[3] ? (*(int (__fastcall **)(_DWORD *))(*v33 + 36))(v33) : *v37; + lpuexcptf = 0; + if ( v38 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptf = v85; + } + } + v34 = a3 == -1; + v84 = v34 & (a2 != 0); + if ( v84 ) + { + v51 = (_WORD *)a2[2]; + v52 = (unsigned int)v51 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v51; + v34 = 0; + if ( v52 == -1 ) + { + a2 = 0; + v34 = v84; + } + } + if ( lpuexcptf == v34 ) + break; + v35 = WORD2(a1); + if ( WORD2(a1) == 0xFFFF && (_DWORD)a1 ) + { + v53 = *(_WORD **)(a1 + 8); + v35 = (unsigned int)v53 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v53; + if ( v35 == 0xFFFF ) + LODWORD(a1) = 0; + } + if ( !(*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v73 + 8))(v73, 32, v35) ) + break; + v33 = (_DWORD *)a1; + v36 = *(_DWORD *)(a1 + 8); + if ( v36 >= *(_DWORD *)(a1 + 12) ) + { + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v33 = (_DWORD *)a1; + } + else + { + *(_DWORD *)(a1 + 8) = v36 + 2; + } + WORD2(a1) = -1; + v32 = -1; + } +LABEL_120: + lpuexcptd = v87 ^ 1; + goto LABEL_121; + case 2: + if ( (*(_BYTE *)(a4 + 13) & 2) != 0 ) + goto LABEL_61; + lpuexcptd = v75 == 0 || v74 > 1; + if ( lpuexcptd ) + goto LABEL_61; + if ( v75 != 1 ) + { + v87 = 1; + if ( v75 != 2 ) + goto LABEL_121; + if ( HIBYTE(v110[0]) == 4 ) + goto LABEL_61; + v24 = 3; + if ( HIBYTE(v110[0]) == 3 && v76 ) + goto LABEL_61; +LABEL_123: + v75 = v24; + continue; + } + if ( !v76 && LOBYTE(v110[0]) != 3 && BYTE2(v110[0]) != 1 ) + { + v24 = 2; + goto LABEL_123; + } +LABEL_61: + v25 = (_DWORD *)a1; + v92 = 0; + v83 = *(_DWORD *)(v107 + 28); + for ( i = WORD2(a1); ; i = -1 ) + { + lpuexcpte = i == -1; + v80 = lpuexcpte && v25 != 0; + if ( v80 ) + { + v30 = (_WORD *)v25[2]; + v31 = (unsigned int)v30 >= v25[3] ? (*(int (__fastcall **)(_DWORD *))(*v25 + 36))(v25) : *v30; + lpuexcpte = 0; + if ( v31 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpte = v80; + } + } + v27 = a3 == -1; + v79 = v27 && a2 != 0; + if ( v79 ) + { + v59 = (_WORD *)a2[2]; + v60 = (unsigned int)v59 >= a2[3] ? (*(int (**)(void))(*a2 + 36))() : *v59; + v27 = 0; + if ( v60 == -1 ) + { + a2 = 0; + v27 = v79; + } + } + lpuexcptd = (v92 < v83) & (lpuexcpte ^ v27); + if ( !lpuexcptd ) + break; + v28 = WORD2(a1); + if ( (_DWORD)a1 + && WORD2(a1) == 0xFFFF + && ((v61 = *(__int16 **)(a1 + 8), (unsigned int)v61 >= *(_DWORD *)(a1 + 12)) + ? (v28 = (*(int (**)(void))(*(_DWORD *)a1 + 36))()) + : (v28 = *v61), + v28 == -1) ) + { + LODWORD(a1) = 0; + if ( *(_WORD *)(*(_DWORD *)(v107 + 24) + 2 * v92) != 0xFFFF ) + goto LABEL_171; + } + else if ( *(_WORD *)(*(_DWORD *)(v107 + 24) + 2 * v92) != v28 ) + { + goto LABEL_171; + } + v25 = (_DWORD *)a1; + v29 = *(_DWORD *)(a1 + 8); + if ( v29 >= *(_DWORD *)(a1 + 12) ) + { + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v25 = (_DWORD *)a1; + } + else + { + *(_DWORD *)(a1 + 8) = v29 + 2; + } + ++v92; + WORD2(a1) = -1; + } + if ( v92 == v83 ) + { +LABEL_181: + v87 = 1; + } + else + { +LABEL_171: + if ( v92 ) + goto LABEL_102; + v87 = (*(_BYTE *)(a4 + 13) & 2) == 0; + lpuexcptd = (*(_BYTE *)(a4 + 13) & 2) != 0; + } +LABEL_121: + v24 = v75 + 1; + if ( v75 + 1 <= 3 && !lpuexcptd ) + goto LABEL_123; + v6 = v87 & (v74 > 1); +LABEL_12: + if ( !v6 ) + { + if ( v87 ) + { + if ( *(_DWORD *)(v109 - 12) > 1u ) + goto LABEL_182; + goto LABEL_150; + } + goto LABEL_102; + } + if ( v77 ) + v7 = *(_DWORD *)(v107 + 40); + else + v7 = *(_DWORD *)(v107 + 32); + v88 = v7; + v8 = WORD2(a1); + v9 = (_DWORD *)a1; + v95 = 1; + while ( 2 ) + { + lpuexcpta = v8 == -1; + v82 = lpuexcpta & (v9 != 0); + if ( v82 ) + { + v13 = (_WORD *)v9[2]; + v14 = (unsigned int)v13 >= v9[3] ? (*(int (__fastcall **)(_DWORD *))(*v9 + 36))(v9) : *v13; + lpuexcpta = 0; + if ( v14 == -1 ) + { + LODWORD(a1) = 0; + lpuexcpta = v82; + } + } + v10 = a3 == -1; + v81 = v10 & (a2 != 0); + if ( !v81 + || ((v55 = (__int16 *)a2[2], (unsigned int)v55 >= a2[3]) + ? (v56 = (*(int (**)(void))(*a2 + 36))()) + : (v56 = *v55), + v10 = 0, + v56 != -1) ) + { + if ( v95 >= v74 ) + break; + goto LABEL_18; + } + v10 = v81; + a2 = 0; + if ( v95 < v74 ) + { +LABEL_18: + if ( lpuexcpta == v10 ) + break; + v11 = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v58 = *(_WORD **)(a1 + 8); + v11 = (unsigned int)v58 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v58; + if ( v11 == -1 ) + LODWORD(a1) = 0; + } + if ( *(_WORD *)(v88 + 2 * v95) != v11 ) + goto LABEL_102; + v9 = (_DWORD *)a1; + v12 = *(_DWORD *)(a1 + 8); + if ( v12 >= *(_DWORD *)(a1 + 12) ) + { + (*(void (__fastcall **)(_DWORD))(*(_DWORD *)a1 + 40))(a1); + v9 = (_DWORD *)a1; + } + else + { + *(_DWORD *)(a1 + 8) = v12 + 2; + } + ++v95; + WORD2(a1) = -1; + v8 = -1; + continue; + } + break; + } + if ( v95 != v74 ) + goto LABEL_102; + if ( *(_DWORD *)(v109 - 12) <= 1u ) + goto LABEL_150; +LABEL_182: + first_not_of = std::string::find_first_not_of(&v109, (std::string *)0x30, 0, (unsigned int)v108); + if ( first_not_of ) + { + v63 = *(_DWORD *)(v109 - 12); + if ( first_not_of == -1 ) + first_not_of = v63 - 1; + if ( first_not_of > v63 ) + first_not_of = *(_DWORD *)(v109 - 12); + std::string::_M_mutate((char **)&v109, 0, first_not_of, 0, v70); + } +LABEL_150: + if ( v77 ) + { + v65 = (int *)v109; + if ( *(int *)(v109 - 4) >= 0 ) + { + std::string::_M_leak_hard((char **)&v109); + v65 = (int *)v109; + } + if ( *(_BYTE *)v65 != 48 ) + { + if ( *(v65 - 1) >= 0 ) + std::string::_M_leak_hard((char **)&v109); + std::string::_M_replace_aux((char **)&v109, 0, 0, 1u, 45, (char)v71); + *(_DWORD *)(v109 - 4) = -1; + } + } + if ( *(_DWORD *)(*(_DWORD *)&v108[1] - 12) ) + { + v57 = (std::string *)(char)v97; + if ( v78 ) + v57 = (std::string *)v72; + std::string::push_back((int *)&v108[1], v57, (char)v68); + if ( !(unsigned __int8)std::__verify_grouping( + *(char **)(v107 + 8), + *(_DWORD *)(v107 + 12), + (const char **)&v108[1]) ) + *a5 |= 4u; + } + if ( v78 && *(std::locale::facet **)(v107 + 48) != v97 ) + { +LABEL_102: + *a5 |= 4u; + goto LABEL_103; + } + std::string::swap(a6, (std::string *)&v109, v68); +LABEL_103: + if ( std::istreambuf_iterator::equal(&a1, (int)&a2) ) + *a5 |= 2u; + lpuexcpth = a1; + v42 = v109; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v109 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_179; + } + else + { + v43 = *(_DWORD *)(v109 - 4); + *(_DWORD *)(v109 - 4) = v43 - 1; + if ( v43 > 0 ) + goto LABEL_107; +LABEL_179: + std::string::_Rep::_M_destroy((void *)(v42 - 12), (int)v108); + } +LABEL_107: + v44 = *(_DWORD *)&v108[1]; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(*(_DWORD *)&v108[1] - 4), 0xFFFFFFFF) > 0 ) + return lpuexcpth; +LABEL_177: + std::string::_Rep::_M_destroy((void *)(v44 - 12), (int)&v109); + return lpuexcpth; + } + v45 = *(_DWORD *)(*(_DWORD *)&v108[1] - 4); + *(_DWORD *)(*(_DWORD *)&v108[1] - 4) = v45 - 1; + if ( v45 <= 0 ) + goto LABEL_177; + return lpuexcpth; + case 3: + if ( *(_DWORD *)(v107 + 36) ) + { + lpuexcptd = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( !lpuexcptd + && **(_WORD **)(v107 + 32) == (unsigned __int16)std::istreambuf_iterator::_M_get((int)&a1) ) + { + v74 = *(_DWORD *)(v107 + 36); + std::wstreambuf::sbumpc((_DWORD *)a1); + WORD2(a1) = -1; + goto LABEL_181; + } + if ( !*(_DWORD *)(v107 + 44) ) + { + if ( !*(_DWORD *)(v107 + 36) ) + goto LABEL_53; +LABEL_137: + lpuexcptd = 0; + v87 = 1; + v77 = 1; + goto LABEL_121; + } + } + else if ( !*(_DWORD *)(v107 + 44) ) + { + goto LABEL_53; + } + lpuexcptd = std::istreambuf_iterator::equal(&a1, (int)&a2); + if ( lpuexcptd + || **(_WORD **)(v107 + 40) != (unsigned __int16)std::istreambuf_iterator::_M_get((int)&a1) ) + { + if ( !*(_DWORD *)(v107 + 36) || *(_DWORD *)(v107 + 44) ) + { +LABEL_53: + lpuexcptd = v76; + v87 = !v76; + goto LABEL_121; + } + goto LABEL_137; + } + v74 = *(_DWORD *)(v107 + 44); + std::wstreambuf::sbumpc((_DWORD *)a1); + v87 = 1; + WORD2(a1) = -1; + v77 = 1; + goto LABEL_121; + case 4: + v15 = WORD2(a1); + v16 = (_DWORD *)a1; + while ( 2 ) + { + lpuexcptb = v15 == -1; + v89 = lpuexcptb & (v16 != 0); + if ( v89 ) + { + v47 = (_WORD *)v16[2]; + v48 = (unsigned int)v47 >= v16[3] ? (*(int (__fastcall **)(_DWORD *))(*v16 + 36))(v16) : *v47; + lpuexcptb = 0; + if ( v48 == -1 ) + { + LODWORD(a1) = 0; + lpuexcptb = v89; + } + } + v17 = a3 == -1; + v90 = v17 & (a2 != 0); + if ( v90 + && ((v40 = (__int16 *)a2[2], (unsigned int)v40 >= a2[3]) + ? (v41 = (*(int (**)(void))(*a2 + 36))()) + : (v41 = *v40), + v17 = 0, + v41 == -1) ) + { + a2 = 0; + if ( lpuexcptb == v90 ) + goto LABEL_100; + } + else if ( lpuexcptb == v17 ) + { + goto LABEL_100; + } + v18 = WORD2(a1); + if ( (_DWORD)a1 && WORD2(a1) == 0xFFFF ) + { + v49 = *(_WORD **)(a1 + 8); + v18 = (unsigned int)v49 >= *(_DWORD *)(a1 + 12) ? (*(int (**)(void))(*(_DWORD *)a1 + 36))() : *v49; + if ( v18 == 0xFFFF ) + LODWORD(a1) = 0; + } + v19 = (_WORD *)(v107 + 62); + do + { + if ( v18 == *v19 ) + { + v93 = std::money_base::_S_atoms[((int)v19 - v107 - 60) >> 1]; + v86 = *(_DWORD *)(v109 - 12); + lpuexcptg = (std::string *)(v86 + 1); + if ( (unsigned int)(v86 + 1) > *(_DWORD *)(v109 - 8) || *(int *)(v109 - 4) > 0 ) + std::string::reserve(&v109, lpuexcptg, (unsigned int)v68); + v97 = (std::locale::facet *)((char *)v97 + 1); + *(_BYTE *)(v109 + *(_DWORD *)(v109 - 12)) = v93; + v39 = v109; + *(_DWORD *)(v109 - 12) = lpuexcptg; + *(_DWORD *)(v39 - 4) = 0; + *(_BYTE *)(v39 + v86 + 1) = 0; + v16 = (_DWORD *)a1; + v23 = *(_DWORD *)(a1 + 8); + if ( v23 < *(_DWORD *)(a1 + 12) ) + goto LABEL_49; + goto LABEL_95; + } + ++v19; + } + while ( v19 != (_WORD *)(v107 + 82) ); + v20 = v78 | (*(_WORD *)(v107 + 18) != v18); + if ( !v20 ) + { + if ( *(int *)(v107 + 48) > 0 ) + { + v50 = (char)v97; + v78 = 1; + v97 = 0; + v72 = v50; + goto LABEL_48; + } + v78 = 0; +LABEL_100: + v87 = 1; +LABEL_101: + if ( !*(_DWORD *)(v109 - 12) ) + goto LABEL_102; + goto LABEL_120; + } + v87 = *(_BYTE *)(v107 + 16); + if ( v87 ) + { + if ( *(_WORD *)(v107 + 20) != v18 ) + goto LABEL_101; + if ( !v78 ) + { + if ( v97 ) + { + v91 = *(_DWORD *)(*(_DWORD *)&v108[1] - 12); + lpuexcptc = (std::string *)(v91 + 1); + if ( (unsigned int)(v91 + 1) > *(_DWORD *)(*(_DWORD *)&v108[1] - 8) + || *(int *)(*(_DWORD *)&v108[1] - 4) > 0 ) + { + std::string::reserve((int *)&v108[1], lpuexcptc, (unsigned int)v68); + } + v21 = (char)v97; + v97 = 0; + *(_BYTE *)(*(_DWORD *)&v108[1] + *(_DWORD *)(*(_DWORD *)&v108[1] - 12)) = v21; + v22 = *(_DWORD *)&v108[1]; + *(_DWORD *)(*(_DWORD *)&v108[1] - 12) = lpuexcptc; + *(_DWORD *)(v22 - 4) = 0; + *(_BYTE *)(v22 + v91 + 1) = 0; +LABEL_48: + v16 = (_DWORD *)a1; + v23 = *(_DWORD *)(a1 + 8); + if ( v23 < *(_DWORD *)(a1 + 12) ) + { +LABEL_49: + v16[2] = v23 + 2; +LABEL_50: + WORD2(a1) = -1; + v15 = -1; + continue; + } +LABEL_95: + (*(void (__fastcall **)(_DWORD *))(*v16 + 40))(v16); + v16 = (_DWORD *)a1; + goto LABEL_50; + } + v87 = 0; + goto LABEL_101; + } + v20 = v78; + } + break; + } + v87 = v20; + if ( !*(_DWORD *)(v109 - 12) ) + goto LABEL_102; + goto LABEL_120; + default: + lpuexcptd = 0; + v87 = 1; + goto LABEL_121; + } + } +} +// 4C215C: variable 'v69' is possibly undefined +// 4C147D: variable 'v66' is possibly undefined +// 4C14BB: variable 'v67' is possibly undefined +// 4C1722: variable 'v68' is possibly undefined +// 4C1FEB: variable 'v70' is possibly undefined +// 4C2228: variable 'v71' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 53F598: using guessed type signed __int32 std::moneypunct::id; +// 560704: using guessed type int (*off_560704)(); + +//----- (004C2400) -------------------------------------------------------- +int __thiscall std::money_get>::get( + void *this, + int a2, + int a3, + int a4, + int a5, + unsigned __int8 a6) +{ + return (*(int (__thiscall **)(void *, int, int, int, int, _DWORD))(*(_DWORD *)this + 12))(this, a2, a3, a4, a5, a6); +} + +//----- (004C2410) -------------------------------------------------------- +int __thiscall std::money_get>::get( + void *this, + int a2, + int a3, + int a4, + int a5, + unsigned __int8 a6) +{ + return (*(int (__thiscall **)(void *, int, int, int, int, _DWORD))(*(_DWORD *)this + 8))(this, a2, a3, a4, a5, a6); +} + +//----- (004C2420) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +struct _Unwind_Exception *__stdcall std::money_get>::do_get( + __int64 a1, + _DWORD *a2, + __int16 a3, + char a4, + int a5, + _DWORD *a6, + int *a7) +{ + struct _Unwind_Exception *v7; // eax + int v8; // ecx + unsigned int v9; // eax + int v10; // eax + int v11; // eax + void *v13; // [esp+20h] [ebp-68h] + unsigned int v14; // [esp+28h] [ebp-60h] + struct _Unwind_Exception *lpuexcpt; // [esp+30h] [ebp-58h] + int v16; // [esp+7Bh] [ebp-Dh] BYREF + int v17[2]; // [esp+7Ch] [ebp-Ch] BYREF + + v13 = std::use_facet>(a5 + 108); + v17[0] = (int)std::string::_S_construct(0, 0); + if ( a4 ) + v7 = (struct _Unwind_Exception *)std::money_get>::_M_extract( + a1, + a2, + a3, + a5, + a6, + v17); + else + v7 = (struct _Unwind_Exception *)std::money_get>::_M_extract( + a1, + a2, + a3, + a5, + a6, + v17); + v8 = v17[0]; + lpuexcpt = v7; + v9 = *(_DWORD *)(v17[0] - 12); + v14 = v9; + if ( v9 ) + { + std::wstring::resize(a7, v9, 0); + v10 = *a7; + if ( *(int *)(*a7 - 4) >= 0 ) + { + std::wstring::_M_leak_hard((int **)a7); + v10 = *a7; + } + (*(void (__thiscall **)(void *, int, unsigned int, int))(*(_DWORD *)v13 + 44))(v13, v17[0], v17[0] + v14, v10); + v8 = v17[0]; + } + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v8 - 4), 0xFFFFFFFF) > 0 ) + return lpuexcpt; +LABEL_12: + std::string::_Rep::_M_destroy((void *)(v8 - 12), (int)&v16); + return lpuexcpt; + } + v11 = *(_DWORD *)(v8 - 4); + *(_DWORD *)(v8 - 4) = v11 - 1; + if ( v11 <= 0 ) + goto LABEL_12; + return lpuexcpt; +} +// 4C2637: positive sp value 4 has been found +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004C2650) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +struct _Unwind_Exception *__stdcall std::money_get>::do_get( + __int64 a1, + _DWORD *a2, + __int16 a3, + char a4, + int a5, + _DWORD *a6, + long double *a7) +{ + struct _Unwind_Exception *v7; // eax + char *v8; // ecx + int v9; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+30h] [ebp-58h] + char *String; // [esp+78h] [ebp-10h] BYREF + int c_locale; // [esp+7Ch] [ebp-Ch] BYREF + + String = (char *)std::string::_S_construct(0, 0); + if ( a4 ) + v7 = (struct _Unwind_Exception *)std::money_get>::_M_extract( + a1, + a2, + a3, + a5, + a6, + (int *)&String); + else + v7 = (struct _Unwind_Exception *)std::money_get>::_M_extract( + a1, + a2, + a3, + a5, + a6, + (int *)&String); + lpuexcpt = v7; + c_locale = std::locale::facet::_S_get_c_locale(); + std::__convert_to_v(String, a7, a6); + v8 = String; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)String - 1, 0xFFFFFFFF) > 0 ) + return lpuexcpt; +LABEL_8: + std::string::_Rep::_M_destroy(v8 - 12, (int)&c_locale); + return lpuexcpt; + } + v9 = *((_DWORD *)String - 1); + *((_DWORD *)String - 1) = v9 - 1; + if ( v9 <= 0 ) + goto LABEL_8; + return lpuexcpt; +} +// 4C27E0: positive sp value 4 has been found +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004C2800) -------------------------------------------------------- +int __thiscall std::money_put>::put( + void *this, + __int64 a2, + unsigned __int8 a3, + int a4, + char a5, + struct _Unwind_Exception **a6) +{ + __int64 (__stdcall *v6)(__int64, char, int, char, struct _Unwind_Exception **); // edx + + v6 = *(__int64 (__stdcall **)(__int64, char, int, char, struct _Unwind_Exception **))(*(_DWORD *)this + 12); + if ( v6 != std::money_put>::do_put ) + return ((int (__stdcall *)(_DWORD, _DWORD, _DWORD, int, _DWORD, struct _Unwind_Exception **))v6)( + a2, + HIDWORD(a2), + a3, + a4, + a5, + a6); + if ( a3 ) + return std::money_put>::_M_insert(a2, a4, a5, a6); + return std::money_put>::_M_insert(a2, a4, a5, a6); +} + +//----- (004C28A0) -------------------------------------------------------- +int __thiscall std::money_put>::put( + void *this, + int a2, + int a3, + unsigned __int8 a4, + int a5, + char a6) +{ + return (*(int (__thiscall **)(void *, int, int, _DWORD, int, _DWORD))(*(_DWORD *)this + 8))(this, a2, a3, a4, a5, a6); +} + +//----- (004C28C0) -------------------------------------------------------- +__int64 __stdcall std::money_put>::do_put( + __int64 a1, + char a2, + int a3, + char a4, + struct _Unwind_Exception **a5) +{ + if ( a2 ) + return std::money_put>::_M_insert(a1, a3, a4, a5); + else + return std::money_put>::_M_insert(a1, a3, a4, a5); +} + +//----- (004C2930) -------------------------------------------------------- +__int64 __thiscall std::money_put>::do_put( + void *this, + __int64 a2, + int a3, + int a4, + int a5, + long double a6) +{ + void *v6; // esp + void *v7; // esp + int v8; // eax + int v9; // eax + void *v10; // esp + void *v11; // esp + char v12; // al + void (__thiscall *v13)(_BYTE *, void *, char *, char *); // eax + __int64 v14; // rax + int *v15; // ecx + int v16; // eax + const std::locale *v18[22]; // [esp-30h] [ebp-C8h] BYREF + char *v19; // [esp+28h] [ebp-70h] + int v20; // [esp+2Ch] [ebp-6Ch] + int v21; // [esp+30h] [ebp-68h] + void *v22; // [esp+34h] [ebp-64h] + char *v23; // [esp+38h] [ebp-60h] + _BYTE *v24; // [esp+3Ch] [ebp-5Ch] + __int64 Size; // [esp+40h] [ebp-58h] + void *Src; // [esp+48h] [ebp-50h] + char v27[5]; // [esp+87h] [ebp-11h] BYREF + int *v28[3]; // [esp+8Ch] [ebp-Ch] BYREF + + v22 = this; + v21 = a3; + v20 = a5; + std::locale::locale((volatile signed __int32 **)&v27[1], (volatile signed __int32 **)(a4 + 108), v18[13]); + v24 = std::use_facet>((int)&v27[1]); + v6 = alloca(80); + v7 = alloca(80); + LODWORD(Size) = v18; + Src = v18; + v28[0] = (int *)std::locale::facet::_S_get_c_locale(); + v8 = std::__convert_from_v(v28, (char *)Size, 64, "%.*Lf", 0, a6); + LODWORD(Size) = v8; + if ( v8 > 63 ) + { + LODWORD(Size) = v8 + 1; + v9 = 16 * ((unsigned int)(v8 + 28) >> 4); + v10 = alloca(v9); + v11 = alloca(v9); + v23 = (char *)v18; + Src = v18; + v28[0] = (int *)std::locale::facet::_S_get_c_locale(); + LODWORD(Size) = std::__convert_from_v(v28, v23, Size, "%.*Lf", 0, a6); + } + std::string::string(v28, Size, 0, (int)v27); + v23 = (char *)v28[0]; + if ( *(v28[0] - 1) >= 0 ) + { + std::string::_M_leak_hard((char **)v28); + v23 = (char *)v28[0]; + } + v19 = (char *)Src + Size; + v12 = v24[28]; + if ( v12 == 1 ) + goto LABEL_8; + if ( v12 ) + { + v13 = *(void (__thiscall **)(_BYTE *, void *, char *, char *))(*(_DWORD *)v24 + 28); + if ( (char *)v13 == (char *)std::ctype::do_widen ) + goto LABEL_8; +LABEL_19: + v13(v24, Src, v19, v23); + goto LABEL_10; + } + std::ctype::_M_widen_init((int)v24); + v13 = *(void (__thiscall **)(_BYTE *, void *, char *, char *))(*(_DWORD *)v24 + 28); + if ( (char *)v13 != (char *)std::ctype::do_widen ) + goto LABEL_19; +LABEL_8: + if ( v19 != Src ) + memcpy(v23, Src, Size); +LABEL_10: + if ( (_BYTE)v21 ) + v14 = std::money_put>::_M_insert( + a2, + a4, + v20, + (struct _Unwind_Exception **)v28); + else + v14 = std::money_put>::_M_insert( + a2, + a4, + v20, + (struct _Unwind_Exception **)v28); + Size = v14; + v15 = v28[0]; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd(v28[0] - 1, 0xFFFFFFFF) > 0 ) + goto LABEL_14; +LABEL_17: + std::string::_Rep::_M_destroy(v15 - 3, (int)v27); + goto LABEL_14; + } + v16 = *(v28[0] - 1); + *(v28[0] - 1) = v16 - 1; + if ( v16 <= 0 ) + goto LABEL_17; +LABEL_14: + std::locale::~locale((_DWORD **)&v27[1]); + return Size; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004C2C40) -------------------------------------------------------- +__int64 __stdcall std::money_put>::_M_insert( + __int64 a1, + int a2, + char a3, + struct _Unwind_Exception **a4) +{ + int v4; // ecx + char *v5; // edx + struct _Unwind_Exception *v6; // eax + unsigned __int8 *v7; // ecx + int v9; // eax + bool v10; // sf + size_t v11; // eax + _BYTE *v12; // eax + int v13; // eax + size_t v14; // edx + size_t v15; // eax + bool v16; // dl + char v17; // al + unsigned int v18; // ecx + size_t v19; // edx + int v20; // eax + char v21; // dl + int v22; // ebx + _DWORD *v23; // eax + unsigned int v24; // [esp+4h] [ebp-B4h] + char v25; // [esp+4h] [ebp-B4h] + unsigned int v26; // [esp+4h] [ebp-B4h] + const std::string *v27; // [esp+4h] [ebp-B4h] + unsigned int v28; // [esp+8h] [ebp-B0h] + unsigned int *v29; // [esp+8h] [ebp-B0h] + char *v30; // [esp+8h] [ebp-B0h] + unsigned int v31; // [esp+8h] [ebp-B0h] + unsigned int v32; // [esp+Ch] [ebp-ACh] + char v33; // [esp+10h] [ebp-A8h] + char v34; // [esp+28h] [ebp-90h] + char *v35; // [esp+2Ch] [ebp-8Ch] + std::locale::_Impl *v36; // [esp+30h] [ebp-88h] + int v37; // [esp+34h] [ebp-84h] + size_t v38; // [esp+34h] [ebp-84h] + _BYTE *v39; // [esp+38h] [ebp-80h] + bool v40; // [esp+38h] [ebp-80h] + signed int v41; // [esp+3Ch] [ebp-7Ch] + int v42; // [esp+3Ch] [ebp-7Ch] + int *v43; // [esp+40h] [ebp-78h] + char *v44; // [esp+40h] [ebp-78h] + std::locale::facet *v45; // [esp+4Ch] [ebp-6Ch] + std::locale::facet *v46; // [esp+4Ch] [ebp-6Ch] + _DWORD *v47; // [esp+50h] [ebp-68h] + size_t v48; // [esp+50h] [ebp-68h] + size_t v49; // [esp+50h] [ebp-68h] + __int64 v50; // [esp+54h] [ebp-64h] + int v51; // [esp+5Ch] [ebp-5Ch] + struct _Unwind_Exception *lpuexcpt; // [esp+60h] [ebp-58h] + struct _Unwind_Exception *lpuexcpta; // [esp+60h] [ebp-58h] + char *lpuexcptb; // [esp+60h] [ebp-58h] + char lpuexcptc; // [esp+60h] [ebp-58h] + char v56[5]; // [esp+A3h] [ebp-15h] BYREF + unsigned int v57; // [esp+A8h] [ebp-10h] BYREF + int v58; // [esp+ACh] [ebp-Ch] BYREF + char v59; // [esp+B0h] [ebp-8h] BYREF + + v50 = a1; + v47 = std::use_facet>(a2 + 108); + v45 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v43 = (int *)(*(_DWORD *)(*(_DWORD *)(a2 + 108) + 12) + 4 * (_DWORD)v45); + v51 = *v43; + if ( !*v43 ) + { + v23 = operator new(0x44u); + *v23 = &off_5606D4; + v23[1] = 0; + v23[2] = 0; + v23[3] = 0; + *((_WORD *)v23 + 8) = 0; + *((_BYTE *)v23 + 18) = 0; + v23[5] = 0; + v23[6] = 0; + v23[7] = 0; + v23[8] = 0; + v23[9] = 0; + v23[10] = 0; + v23[11] = 0; + v23[12] = 0; + v23[13] = 0; + *((_BYTE *)v23 + 67) = 0; + v36 = (std::locale::_Impl *)v23; + std::__moneypunct_cache::_M_cache((int)v23, a2 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a2 + 108), v36, v45, v28); + v51 = *v43; + } + v4 = *((_DWORD *)*a4 - 3); + lpuexcpt = *a4; + if ( *(_BYTE *)*a4 == *(_BYTE *)(v51 + 56) ) + { + v58 = *(_DWORD *)(v51 + 52); + if ( !v4 ) + goto LABEL_10; + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v44 = *(char **)(v51 + 36); + v46 = *(std::locale::facet **)(v51 + 40); + } + else + { + v5 = *(char **)(v51 + 28); + v58 = *(_DWORD *)(v51 + 48); + v44 = v5; + v46 = *(std::locale::facet **)(v51 + 32); + } + v6 = lpuexcpt; + v7 = (unsigned __int8 *)lpuexcpt + v4; + if ( v7 > (unsigned __int8 *)lpuexcpt ) + { + do + { + if ( (*(_BYTE *)(v47[6] + 2 * *(unsigned __int8 *)v6) & 8) == 0 ) + break; + v6 = (struct _Unwind_Exception *)((char *)v6 + 1); + } + while ( v7 != (unsigned __int8 *)v6 ); + v48 = v6 - lpuexcpt; + if ( v6 != lpuexcpt ) + { + v29 = &v57; + *(_DWORD *)&v56[1] = std::string::_S_construct(0, 0); + std::string::reserve((int *)&v56[1], (std::string *)(2 * v48), v24); + v9 = *(_DWORD *)(v51 + 44); + v41 = v48 - v9; + if ( (int)(v48 - v9) > 0 ) + { + v10 = v9 < 0; + v11 = v48 - v9; + if ( v10 ) + v11 = v48; + v41 = v11; + if ( *(_DWORD *)(v51 + 12) ) + { + std::string::_M_replace_aux((char **)&v56[1], 0, *(_DWORD *)(*(_DWORD *)&v56[1] - 12), 2 * v11, 0, v33); + v37 = *(_DWORD *)(v51 + 12); + v35 = *(char **)(v51 + 8); + v34 = *(_BYTE *)(v51 + 18); + v12 = *(_BYTE **)&v56[1]; + if ( *(int *)(*(_DWORD *)&v56[1] - 4) >= 0 ) + { + std::string::_M_leak_hard((char **)&v56[1]); + v12 = *(_BYTE **)&v56[1]; + } + v39 = std::__add_grouping(v12, v34, v35, v37, lpuexcpt, (_BYTE *)lpuexcpt + v41); + v13 = *(_DWORD *)&v56[1]; + if ( *(int *)(*(_DWORD *)&v56[1] - 4) >= 0 ) + { + std::string::_M_leak_hard((char **)&v56[1]); + v13 = *(_DWORD *)&v56[1]; + } + v14 = (size_t)&v39[-v13]; + v15 = *(_DWORD *)(v13 - 12); + if ( v14 > v15 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + v14, + v15); + std::string::_M_mutate((char **)&v56[1], v14, v15 - v14, 0, v32); + v9 = *(_DWORD *)(v51 + 44); + } + else + { + std::string::assign((char **)&v56[1], lpuexcpt, v11, (unsigned int)&v57); + v9 = *(_DWORD *)(v51 + 44); + } + } + if ( v9 > 0 ) + { + std::string::push_back((int *)&v56[1], (std::string *)*(char *)(v51 + 17), v25); + if ( v41 < 0 ) + { + std::string::append((int *)&v56[1], -v41, *(_BYTE *)(v51 + 57), (char)v29); + std::string::append((int *)&v56[1], lpuexcpt, v48, v31); + } + else + { + std::string::append( + (int *)&v56[1], + (struct _Unwind_Exception *)((char *)lpuexcpt + v41), + *(_DWORD *)(v51 + 44), + (unsigned int)v29); + } + } + v42 = *(_DWORD *)(a2 + 12) & 0xB0; + lpuexcpta = (std::locale::facet *)((char *)v46 + *(_DWORD *)(*(_DWORD *)&v56[1] - 12)); + if ( (*(_DWORD *)(a2 + 12) & 0x200) != 0 ) + lpuexcpta = (std::locale::facet *)((char *)v46 + *(_DWORD *)(*(_DWORD *)&v56[1] - 12) + *(_DWORD *)(v51 + 24)); + v30 = v56; + v57 = (unsigned int)std::string::_S_construct(0, 0); + std::string::reserve((int *)&v57, (std::string *)(2 * (_DWORD)lpuexcpta), v26); + v49 = *(_DWORD *)(a2 + 8); + v16 = v49 > (unsigned int)lpuexcpta && v42 == 16; + v38 = v49 - (_DWORD)lpuexcpta; + lpuexcptb = (char *)&v58; + v40 = v16; + do + { + switch ( *lpuexcptb ) + { + case 0: + if ( v40 ) + { + v17 = a3; + goto LABEL_33; + } + break; + case 1: + v17 = a3; + if ( v40 ) +LABEL_33: + std::string::append((int *)&v57, v38, v17, (char)v30); + else + std::string::push_back((int *)&v57, (std::string *)a3, (char)v27); + break; + case 2: + if ( (*(_BYTE *)(a2 + 13) & 2) != 0 ) + std::string::append((int *)&v57, *(std::string **)(v51 + 20), *(_DWORD *)(v51 + 24), (unsigned int)v30); + break; + case 3: + if ( v46 ) + std::string::push_back((int *)&v57, (std::string *)*v44, (char)v27); + break; + case 4: + std::string::append((int *)&v57, (std::string *)&v56[1], v27); + break; + default: + break; + } + ++lpuexcptb; + } + while ( lpuexcptb != &v59 ); + if ( (unsigned int)v46 > 1 ) + { + std::string::append((int *)&v57, (std::string *)(v44 + 1), (size_t)v46 - 1, (unsigned int)v30); + v18 = v57; + v19 = *(_DWORD *)(v57 - 12); + if ( v49 > v19 ) + goto LABEL_40; + } + else + { + v18 = v57; + v19 = *(_DWORD *)(v57 - 12); + if ( v49 > v19 ) + { +LABEL_40: + if ( v42 == 32 ) + std::string::append((int *)&v57, v49 - v19, a3, (char)v30); + else + std::string::_M_replace_aux((char **)&v57, 0, 0, v49 - v19, a3, v33); + v18 = v57; + goto LABEL_43; + } + } + v49 = v19; +LABEL_43: + lpuexcptc = BYTE4(a1); + if ( !BYTE4(a1) ) + { + v20 = (*(int (__thiscall **)(_DWORD, unsigned int, size_t))(*(_DWORD *)a1 + 48))(a1, v18, v49); + v21 = 0; + v18 = v57; + if ( v20 != v49 ) + v21 = 1; + lpuexcptc = v21; + } + v22 = HIDWORD(a1); + LOBYTE(v22) = lpuexcptc; + HIDWORD(v50) = v22; + std::string::_Rep::_M_dispose((volatile signed __int32 *)(v18 - 12), (int)v56); + std::string::_Rep::_M_dispose((volatile signed __int32 *)(*(_DWORD *)&v56[1] - 12), (int)&v57); + } + } +LABEL_10: + *(_DWORD *)(a2 + 8) = 0; + return v50; +} +// 4C32D5: variable 'v28' is possibly undefined +// 4C2DB2: variable 'v24' is possibly undefined +// 4C2E12: variable 'v33' is possibly undefined +// 4C2EC2: variable 'v32' is possibly undefined +// 4C2F38: variable 'v26' is possibly undefined +// 4C2FAE: variable 'v27' is possibly undefined +// 4C2FE3: variable 'v30' is possibly undefined +// 4C3164: variable 'v25' is possibly undefined +// 4C318C: variable 'v29' is possibly undefined +// 4C334C: variable 'v31' is possibly undefined +// 53F58C: using guessed type signed __int32 std::moneypunct::id; +// 5606D4: using guessed type int (*off_5606D4)(); + +//----- (004C3450) -------------------------------------------------------- +__int64 __stdcall std::money_put>::_M_insert( + __int64 a1, + int a2, + char a3, + struct _Unwind_Exception **a4) +{ + int v4; // ecx + char *v5; // edx + struct _Unwind_Exception *v6; // eax + unsigned __int8 *v7; // ecx + int v9; // eax + bool v10; // sf + size_t v11; // eax + _BYTE *v12; // eax + int v13; // eax + size_t v14; // edx + size_t v15; // eax + bool v16; // dl + char v17; // al + unsigned int v18; // ecx + size_t v19; // edx + int v20; // eax + char v21; // dl + int v22; // ebx + _DWORD *v23; // eax + unsigned int v24; // [esp+4h] [ebp-B4h] + char v25; // [esp+4h] [ebp-B4h] + unsigned int v26; // [esp+4h] [ebp-B4h] + const std::string *v27; // [esp+4h] [ebp-B4h] + unsigned int v28; // [esp+8h] [ebp-B0h] + unsigned int *v29; // [esp+8h] [ebp-B0h] + char *v30; // [esp+8h] [ebp-B0h] + unsigned int v31; // [esp+8h] [ebp-B0h] + unsigned int v32; // [esp+Ch] [ebp-ACh] + char v33; // [esp+10h] [ebp-A8h] + char v34; // [esp+28h] [ebp-90h] + char *v35; // [esp+2Ch] [ebp-8Ch] + std::locale::_Impl *v36; // [esp+30h] [ebp-88h] + int v37; // [esp+34h] [ebp-84h] + size_t v38; // [esp+34h] [ebp-84h] + _BYTE *v39; // [esp+38h] [ebp-80h] + bool v40; // [esp+38h] [ebp-80h] + signed int v41; // [esp+3Ch] [ebp-7Ch] + int v42; // [esp+3Ch] [ebp-7Ch] + int *v43; // [esp+40h] [ebp-78h] + char *v44; // [esp+40h] [ebp-78h] + std::locale::facet *v45; // [esp+4Ch] [ebp-6Ch] + std::locale::facet *v46; // [esp+4Ch] [ebp-6Ch] + _DWORD *v47; // [esp+50h] [ebp-68h] + size_t v48; // [esp+50h] [ebp-68h] + size_t v49; // [esp+50h] [ebp-68h] + __int64 v50; // [esp+54h] [ebp-64h] + int v51; // [esp+5Ch] [ebp-5Ch] + struct _Unwind_Exception *lpuexcpt; // [esp+60h] [ebp-58h] + struct _Unwind_Exception *lpuexcpta; // [esp+60h] [ebp-58h] + char *lpuexcptb; // [esp+60h] [ebp-58h] + char lpuexcptc; // [esp+60h] [ebp-58h] + char v56[5]; // [esp+A3h] [ebp-15h] BYREF + unsigned int v57; // [esp+A8h] [ebp-10h] BYREF + int v58; // [esp+ACh] [ebp-Ch] BYREF + char v59; // [esp+B0h] [ebp-8h] BYREF + + v50 = a1; + v47 = std::use_facet>(a2 + 108); + v45 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v43 = (int *)(*(_DWORD *)(*(_DWORD *)(a2 + 108) + 12) + 4 * (_DWORD)v45); + v51 = *v43; + if ( !*v43 ) + { + v23 = operator new(0x44u); + *v23 = &off_5606E4; + v23[1] = 0; + v23[2] = 0; + v23[3] = 0; + *((_WORD *)v23 + 8) = 0; + *((_BYTE *)v23 + 18) = 0; + v23[5] = 0; + v23[6] = 0; + v23[7] = 0; + v23[8] = 0; + v23[9] = 0; + v23[10] = 0; + v23[11] = 0; + v23[12] = 0; + v23[13] = 0; + *((_BYTE *)v23 + 67) = 0; + v36 = (std::locale::_Impl *)v23; + std::__moneypunct_cache::_M_cache((int)v23, a2 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a2 + 108), v36, v45, v28); + v51 = *v43; + } + v4 = *((_DWORD *)*a4 - 3); + lpuexcpt = *a4; + if ( *(_BYTE *)*a4 == *(_BYTE *)(v51 + 56) ) + { + v58 = *(_DWORD *)(v51 + 52); + if ( !v4 ) + goto LABEL_10; + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 1); + v44 = *(char **)(v51 + 36); + v46 = *(std::locale::facet **)(v51 + 40); + } + else + { + v5 = *(char **)(v51 + 28); + v58 = *(_DWORD *)(v51 + 48); + v44 = v5; + v46 = *(std::locale::facet **)(v51 + 32); + } + v6 = lpuexcpt; + v7 = (unsigned __int8 *)lpuexcpt + v4; + if ( v7 > (unsigned __int8 *)lpuexcpt ) + { + do + { + if ( (*(_BYTE *)(v47[6] + 2 * *(unsigned __int8 *)v6) & 8) == 0 ) + break; + v6 = (struct _Unwind_Exception *)((char *)v6 + 1); + } + while ( v7 != (unsigned __int8 *)v6 ); + v48 = v6 - lpuexcpt; + if ( v6 != lpuexcpt ) + { + v29 = &v57; + *(_DWORD *)&v56[1] = std::string::_S_construct(0, 0); + std::string::reserve((int *)&v56[1], (std::string *)(2 * v48), v24); + v9 = *(_DWORD *)(v51 + 44); + v41 = v48 - v9; + if ( (int)(v48 - v9) > 0 ) + { + v10 = v9 < 0; + v11 = v48 - v9; + if ( v10 ) + v11 = v48; + v41 = v11; + if ( *(_DWORD *)(v51 + 12) ) + { + std::string::_M_replace_aux((char **)&v56[1], 0, *(_DWORD *)(*(_DWORD *)&v56[1] - 12), 2 * v11, 0, v33); + v37 = *(_DWORD *)(v51 + 12); + v35 = *(char **)(v51 + 8); + v34 = *(_BYTE *)(v51 + 18); + v12 = *(_BYTE **)&v56[1]; + if ( *(int *)(*(_DWORD *)&v56[1] - 4) >= 0 ) + { + std::string::_M_leak_hard((char **)&v56[1]); + v12 = *(_BYTE **)&v56[1]; + } + v39 = std::__add_grouping(v12, v34, v35, v37, lpuexcpt, (_BYTE *)lpuexcpt + v41); + v13 = *(_DWORD *)&v56[1]; + if ( *(int *)(*(_DWORD *)&v56[1] - 4) >= 0 ) + { + std::string::_M_leak_hard((char **)&v56[1]); + v13 = *(_DWORD *)&v56[1]; + } + v14 = (size_t)&v39[-v13]; + v15 = *(_DWORD *)(v13 - 12); + if ( v14 > v15 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + v14, + v15); + std::string::_M_mutate((char **)&v56[1], v14, v15 - v14, 0, v32); + v9 = *(_DWORD *)(v51 + 44); + } + else + { + std::string::assign((char **)&v56[1], lpuexcpt, v11, (unsigned int)&v57); + v9 = *(_DWORD *)(v51 + 44); + } + } + if ( v9 > 0 ) + { + std::string::push_back((int *)&v56[1], (std::string *)*(char *)(v51 + 17), v25); + if ( v41 < 0 ) + { + std::string::append((int *)&v56[1], -v41, *(_BYTE *)(v51 + 57), (char)v29); + std::string::append((int *)&v56[1], lpuexcpt, v48, v31); + } + else + { + std::string::append( + (int *)&v56[1], + (struct _Unwind_Exception *)((char *)lpuexcpt + v41), + *(_DWORD *)(v51 + 44), + (unsigned int)v29); + } + } + v42 = *(_DWORD *)(a2 + 12) & 0xB0; + lpuexcpta = (std::locale::facet *)((char *)v46 + *(_DWORD *)(*(_DWORD *)&v56[1] - 12)); + if ( (*(_DWORD *)(a2 + 12) & 0x200) != 0 ) + lpuexcpta = (std::locale::facet *)((char *)v46 + *(_DWORD *)(*(_DWORD *)&v56[1] - 12) + *(_DWORD *)(v51 + 24)); + v30 = v56; + v57 = (unsigned int)std::string::_S_construct(0, 0); + std::string::reserve((int *)&v57, (std::string *)(2 * (_DWORD)lpuexcpta), v26); + v49 = *(_DWORD *)(a2 + 8); + v16 = v49 > (unsigned int)lpuexcpta && v42 == 16; + v38 = v49 - (_DWORD)lpuexcpta; + lpuexcptb = (char *)&v58; + v40 = v16; + do + { + switch ( *lpuexcptb ) + { + case 0: + if ( v40 ) + { + v17 = a3; + goto LABEL_33; + } + break; + case 1: + v17 = a3; + if ( v40 ) +LABEL_33: + std::string::append((int *)&v57, v38, v17, (char)v30); + else + std::string::push_back((int *)&v57, (std::string *)a3, (char)v27); + break; + case 2: + if ( (*(_BYTE *)(a2 + 13) & 2) != 0 ) + std::string::append((int *)&v57, *(std::string **)(v51 + 20), *(_DWORD *)(v51 + 24), (unsigned int)v30); + break; + case 3: + if ( v46 ) + std::string::push_back((int *)&v57, (std::string *)*v44, (char)v27); + break; + case 4: + std::string::append((int *)&v57, (std::string *)&v56[1], v27); + break; + default: + break; + } + ++lpuexcptb; + } + while ( lpuexcptb != &v59 ); + if ( (unsigned int)v46 > 1 ) + { + std::string::append((int *)&v57, (std::string *)(v44 + 1), (size_t)v46 - 1, (unsigned int)v30); + v18 = v57; + v19 = *(_DWORD *)(v57 - 12); + if ( v49 > v19 ) + goto LABEL_40; + } + else + { + v18 = v57; + v19 = *(_DWORD *)(v57 - 12); + if ( v49 > v19 ) + { +LABEL_40: + if ( v42 == 32 ) + std::string::append((int *)&v57, v49 - v19, a3, (char)v30); + else + std::string::_M_replace_aux((char **)&v57, 0, 0, v49 - v19, a3, v33); + v18 = v57; + goto LABEL_43; + } + } + v49 = v19; +LABEL_43: + lpuexcptc = BYTE4(a1); + if ( !BYTE4(a1) ) + { + v20 = (*(int (__thiscall **)(_DWORD, unsigned int, size_t))(*(_DWORD *)a1 + 48))(a1, v18, v49); + v21 = 0; + v18 = v57; + if ( v20 != v49 ) + v21 = 1; + lpuexcptc = v21; + } + v22 = HIDWORD(a1); + LOBYTE(v22) = lpuexcptc; + HIDWORD(v50) = v22; + std::string::_Rep::_M_dispose((volatile signed __int32 *)(v18 - 12), (int)v56); + std::string::_Rep::_M_dispose((volatile signed __int32 *)(*(_DWORD *)&v56[1] - 12), (int)&v57); + } + } +LABEL_10: + *(_DWORD *)(a2 + 8) = 0; + return v50; +} +// 4C3AE5: variable 'v28' is possibly undefined +// 4C35C2: variable 'v24' is possibly undefined +// 4C3622: variable 'v33' is possibly undefined +// 4C36D2: variable 'v32' is possibly undefined +// 4C3748: variable 'v26' is possibly undefined +// 4C37BE: variable 'v27' is possibly undefined +// 4C37F3: variable 'v30' is possibly undefined +// 4C3974: variable 'v25' is possibly undefined +// 4C399C: variable 'v29' is possibly undefined +// 4C3B5C: variable 'v31' is possibly undefined +// 53F590: using guessed type signed __int32 std::moneypunct::id; +// 5606E4: using guessed type int (*off_5606E4)(); + +//----- (004C3C60) -------------------------------------------------------- +int __thiscall std::money_put>::put( + void *this, + __int64 a2, + unsigned __int8 a3, + int a4, + unsigned __int16 a5, + char **a6) +{ + __int64 (__stdcall *v6)(__int64, char, int, __int16, char **); // edx + + v6 = *(__int64 (__stdcall **)(__int64, char, int, __int16, char **))(*(_DWORD *)this + 12); + if ( v6 != std::money_put>::do_put ) + return ((int (__stdcall *)(_DWORD, _DWORD, _DWORD, int, _DWORD, char **))v6)(a2, HIDWORD(a2), a3, a4, a5, a6); + if ( a3 ) + return std::money_put>::_M_insert(a2, a4, a5, a6); + return std::money_put>::_M_insert(a2, a4, a5, a6); +} + +//----- (004C3D00) -------------------------------------------------------- +int __thiscall std::money_put>::put( + void *this, + int a2, + int a3, + unsigned __int8 a4, + int a5, + unsigned __int16 a6) +{ + return (*(int (__thiscall **)(void *, int, int, _DWORD, int, _DWORD))(*(_DWORD *)this + 8))(this, a2, a3, a4, a5, a6); +} + +//----- (004C3D20) -------------------------------------------------------- +__int64 __stdcall std::money_put>::do_put( + __int64 a1, + char a2, + int a3, + __int16 a4, + char **a5) +{ + if ( a2 ) + return std::money_put>::_M_insert(a1, a3, a4, a5); + else + return std::money_put>::_M_insert(a1, a3, a4, a5); +} + +//----- (004C3D90) -------------------------------------------------------- +__int64 __thiscall std::money_put>::do_put( + void *this, + __int64 a2, + int a3, + int a4, + int a5, + long double a6) +{ + void *v6; // esp + void *v7; // esp + int v8; // eax + int v9; // eax + void *v10; // esp + void *v11; // esp + int *v12; // eax + __int64 v13; // rax + int *v14; // ecx + int v15; // eax + int v17; // [esp-44h] [ebp-DCh] + int v18; // [esp-40h] [ebp-D8h] + int v19; // [esp-3Ch] [ebp-D4h] + int v20; // [esp-38h] [ebp-D0h] + int v21; // [esp-34h] [ebp-CCh] + char *v22[23]; // [esp-30h] [ebp-C8h] BYREF + char *v23; // [esp+2Ch] [ebp-6Ch] + int v24; // [esp+30h] [ebp-68h] + int v25; // [esp+34h] [ebp-64h] + void *v26; // [esp+38h] [ebp-60h] + void *v27; // [esp+3Ch] [ebp-5Ch] + __int64 lpuexcpt; // [esp+40h] [ebp-58h] + char **v29; // [esp+48h] [ebp-50h] + char v30[5]; // [esp+87h] [ebp-11h] BYREF + int *v31[2]; // [esp+8Ch] [ebp-Ch] BYREF + + v26 = this; + v25 = a3; + v24 = a5; + std::locale::locale( + (volatile signed __int32 **)&v30[1], + (volatile signed __int32 **)(a4 + 108), + (const std::locale *)v22[13]); + v27 = std::use_facet>((int)&v30[1]); + v6 = alloca(80); + v7 = alloca(80); + LODWORD(lpuexcpt) = v22; + v29 = v22; + v31[0] = (int *)std::locale::facet::_S_get_c_locale(); + v8 = std::__convert_from_v(v31, (char *)lpuexcpt, 64, "%.*Lf", 0, a6); + LODWORD(lpuexcpt) = v8; + if ( v8 > 63 ) + { + LODWORD(lpuexcpt) = v8 + 1; + v9 = 16 * ((unsigned int)(v8 + 28) >> 4); + v10 = alloca(v9); + v11 = alloca(v9); + v23 = (char *)v22; + v29 = v22; + v31[0] = (int *)std::locale::facet::_S_get_c_locale(); + LODWORD(lpuexcpt) = std::__convert_from_v(v31, v23, lpuexcpt, "%.*Lf", 0, a6); + } + std::wstring::basic_string(v31, lpuexcpt, 0, (int)v30); + v12 = v31[0]; + if ( *(v31[0] - 1) >= 0 ) + { + std::wstring::_M_leak_hard(v31); + v12 = v31[0]; + } + (*(void (__thiscall **)(void *, char **, char *, int *, int, int, int, int, int, char *, char *, char *, char *, char *, char *, char *, char *, char *, char *))(*(_DWORD *)v27 + 44))( + v27, + v29, + (char *)v29 + lpuexcpt, + v12, + v17, + v18, + v19, + v20, + v21, + v22[0], + v22[1], + v22[2], + v22[3], + v22[4], + v22[5], + v22[6], + v22[7], + v22[8], + v22[9]); + if ( (_BYTE)v25 ) + v13 = std::money_put>::_M_insert(a2, a4, v24, (char **)v31); + else + v13 = std::money_put>::_M_insert(a2, a4, v24, (char **)v31); + lpuexcpt = v13; + v14 = v31[0]; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd(v31[0] - 1, 0xFFFFFFFF) > 0 ) + goto LABEL_9; +LABEL_12: + std::wstring::_Rep::_M_destroy(v14 - 3, (int)v30); + goto LABEL_9; + } + v15 = *(v31[0] - 1); + *(v31[0] - 1) = v15 - 1; + if ( v15 <= 0 ) + goto LABEL_12; +LABEL_9: + std::locale::~locale((_DWORD **)&v30[1]); + return lpuexcpt; +} +// 4C3F0D: variable 'v17' is possibly undefined +// 4C3F0D: variable 'v18' is possibly undefined +// 4C3F0D: variable 'v19' is possibly undefined +// 4C3F0D: variable 'v20' is possibly undefined +// 4C3F0D: variable 'v21' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004C4060) -------------------------------------------------------- +__int64 __stdcall std::money_put>::_M_insert( + __int64 a1, + int a2, + __int16 a3, + char **a4) +{ + int v4; // eax + char *v6; // edx + int v7; // eax + bool v8; // sf + unsigned int v9; // eax + unsigned int v10; // ebx + _WORD *v11; // edx + _WORD *v12; // eax + int v13; // edx + int v14; // eax + unsigned int v15; // edx + unsigned int v16; // eax + bool v17; // dl + __int16 v18; // ax + int v19; // ecx + unsigned int v20; // edx + int v21; // eax + char v22; // bl + int v23; // edx + _DWORD *v24; // eax + unsigned int v25; // [esp+8h] [ebp-B0h] + __int16 v26; // [esp+28h] [ebp-90h] + char *v27; // [esp+2Ch] [ebp-8Ch] + std::locale::_Impl *v28; // [esp+30h] [ebp-88h] + int v29; // [esp+34h] [ebp-84h] + unsigned int v30; // [esp+34h] [ebp-84h] + _WORD *v31; // [esp+38h] [ebp-80h] + bool v32; // [esp+38h] [ebp-80h] + int v33; // [esp+3Ch] [ebp-7Ch] + int *v34; // [esp+48h] [ebp-70h] + int v35; // [esp+48h] [ebp-70h] + int v36; // [esp+48h] [ebp-70h] + int v37; // [esp+48h] [ebp-70h] + std::locale::facet *v38; // [esp+4Ch] [ebp-6Ch] + std::locale::facet *v39; // [esp+4Ch] [ebp-6Ch] + void *v40; // [esp+50h] [ebp-68h] + unsigned int v41; // [esp+50h] [ebp-68h] + unsigned int v42; // [esp+50h] [ebp-68h] + __int64 v43; // [esp+54h] [ebp-64h] + int v44; // [esp+5Ch] [ebp-5Ch] + char *lpuexcpt; // [esp+60h] [ebp-58h] + struct _Unwind_Exception *lpuexcpta; // [esp+60h] [ebp-58h] + char *lpuexcptb; // [esp+60h] [ebp-58h] + char lpuexcptc; // [esp+60h] [ebp-58h] + char v49[5]; // [esp+A3h] [ebp-15h] BYREF + int v50; // [esp+A8h] [ebp-10h] BYREF + int v51; // [esp+ACh] [ebp-Ch] BYREF + char v52; // [esp+B0h] [ebp-8h] BYREF + + v43 = a1; + v40 = std::use_facet>(a2 + 108); + v38 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v34 = (int *)(*(_DWORD *)(*(_DWORD *)(a2 + 108) + 12) + 4 * (_DWORD)v38); + v44 = *v34; + if ( !*v34 ) + { + v24 = operator new(0x54u); + v24[1] = 0; + *v24 = &off_5606F4; + v24[2] = 0; + v24[3] = 0; + *((_BYTE *)v24 + 16) = 0; + *(_DWORD *)((char *)v24 + 18) = 0; + v24[6] = 0; + v24[7] = 0; + v24[8] = 0; + v24[9] = 0; + v24[10] = 0; + v24[11] = 0; + v24[12] = 0; + v24[13] = 0; + v24[14] = 0; + *((_BYTE *)v24 + 82) = 0; + v28 = (std::locale::_Impl *)v24; + std::__moneypunct_cache::_M_cache((int)v24, a2 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a2 + 108), v28, v38, v25); + v44 = *v34; + } + lpuexcpt = *a4; + v4 = *((_DWORD *)*a4 - 3); + if ( *(_WORD *)*a4 == *(_WORD *)(v44 + 60) ) + { + v51 = *(_DWORD *)(v44 + 56); + v33 = *(_DWORD *)(v44 + 40); + v39 = *(std::locale::facet **)(v44 + 44); + v6 = lpuexcpt + 2; + if ( !v4 ) + v6 = lpuexcpt; + lpuexcpt = v6; + } + else + { + v51 = *(_DWORD *)(v44 + 52); + v33 = *(_DWORD *)(v44 + 32); + v39 = *(std::locale::facet **)(v44 + 36); + } + v35 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v40 + 20))(v40, 8) - (_DWORD)lpuexcpt; + v41 = v35 >> 1; + if ( v35 >> 1 ) + { + *(_DWORD *)&v49[1] = std::wstring::_S_construct(0, 0); + std::wstring::reserve((int *)&v49[1], v35); + v7 = *(_DWORD *)(v44 + 48); + v36 = v41 - v7; + if ( (int)(v41 - v7) > 0 ) + { + v8 = v7 < 0; + v9 = v41 - v7; + if ( v8 ) + v9 = v41; + v36 = v9; + v10 = v9; + if ( *(_DWORD *)(v44 + 12) ) + { + std::wstring::_M_replace_aux((int **)&v49[1], 0, *(_DWORD *)(*(_DWORD *)&v49[1] - 12), 2 * v9, 0); + v11 = *(_WORD **)&v49[1]; + v29 = *(_DWORD *)(v44 + 12); + v27 = *(char **)(v44 + 8); + v26 = *(_WORD *)(v44 + 20); + if ( *(int *)(*(_DWORD *)&v49[1] - 4) >= 0 ) + { + std::wstring::_M_leak_hard((int **)&v49[1]); + v11 = *(_WORD **)&v49[1]; + } + v12 = std::__add_grouping(v11, v26, v27, v29, lpuexcpt, &lpuexcpt[2 * v10]); + v13 = *(_DWORD *)&v49[1]; + v31 = v12; + if ( *(int *)(*(_DWORD *)&v49[1] - 4) >= 0 ) + { + std::wstring::_M_leak_hard((int **)&v49[1]); + v13 = *(_DWORD *)&v49[1]; + } + v14 = (int)v31 - v13; + v15 = *(_DWORD *)(v13 - 12); + v16 = v14 >> 1; + if ( v16 > v15 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + v16, + v15); + std::wstring::_M_mutate((int **)&v49[1], v16, v15 - v16, 0); + v7 = *(_DWORD *)(v44 + 48); + } + else + { + std::wstring::assign((int **)&v49[1], lpuexcpt, v9); + v7 = *(_DWORD *)(v44 + 48); + } + } + if ( v7 > 0 ) + { + std::wstring::push_back((int *)&v49[1], *(_WORD *)(v44 + 18)); + if ( v36 < 0 ) + { + std::wstring::append((int *)&v49[1], -v36, *(_WORD *)(v44 + 62)); + std::wstring::append((int *)&v49[1], lpuexcpt, v41); + } + else + { + std::wstring::append((int *)&v49[1], &lpuexcpt[2 * v36], *(_DWORD *)(v44 + 48)); + } + } + v37 = *(_DWORD *)(a2 + 12) & 0xB0; + lpuexcpta = (std::locale::facet *)((char *)v39 + *(_DWORD *)(*(_DWORD *)&v49[1] - 12)); + if ( (*(_DWORD *)(a2 + 12) & 0x200) != 0 ) + lpuexcpta = (std::locale::facet *)((char *)v39 + *(_DWORD *)(*(_DWORD *)&v49[1] - 12) + *(_DWORD *)(v44 + 28)); + v50 = (int)std::wstring::_S_construct(0, 0); + std::wstring::reserve(&v50, 2 * (_DWORD)lpuexcpta); + v42 = *(_DWORD *)(a2 + 8); + v17 = v42 > (unsigned int)lpuexcpta && v37 == 16; + v30 = v42 - (_DWORD)lpuexcpta; + lpuexcptb = (char *)&v51; + v32 = v17; + do + { + switch ( *lpuexcptb ) + { + case 0: + if ( v32 ) + { + v18 = a3; + goto LABEL_30; + } + break; + case 1: + v18 = a3; + if ( v32 ) +LABEL_30: + std::wstring::append(&v50, v30, v18); + else + std::wstring::push_back(&v50, a3); + break; + case 2: + if ( (*(_BYTE *)(a2 + 13) & 2) != 0 ) + std::wstring::append(&v50, *(char **)(v44 + 24), *(_DWORD *)(v44 + 28)); + break; + case 3: + if ( v39 ) + std::wstring::push_back(&v50, *(_WORD *)v33); + break; + case 4: + std::wstring::append(&v50, &v49[1]); + break; + default: + break; + } + ++lpuexcptb; + } + while ( lpuexcptb != &v52 ); + if ( (unsigned int)v39 > 1 ) + { + std::wstring::append(&v50, (char *)(v33 + 2), (unsigned int)v39 - 1); + v19 = v50; + v20 = *(_DWORD *)(v50 - 12); + if ( v42 > v20 ) + goto LABEL_37; + } + else + { + v19 = v50; + v20 = *(_DWORD *)(v50 - 12); + if ( v42 > v20 ) + { +LABEL_37: + if ( v37 == 32 ) + std::wstring::append(&v50, v42 - v20, a3); + else + std::wstring::_M_replace_aux((int **)&v50, 0, 0, v42 - v20, a3); + v19 = v50; + goto LABEL_40; + } + } + v42 = v20; +LABEL_40: + lpuexcptc = BYTE4(a1); + if ( !BYTE4(a1) ) + { + v21 = (*(int (__thiscall **)(_DWORD, int, unsigned int))(*(_DWORD *)a1 + 48))(a1, v19, v42); + v22 = 0; + v19 = v50; + if ( v21 != v42 ) + v22 = 1; + lpuexcptc = v22; + } + v23 = HIDWORD(a1); + LOBYTE(v23) = lpuexcptc; + HIDWORD(v43) = v23; + std::wstring::_Rep::_M_dispose((volatile signed __int32 *)(v19 - 12), (int)v49); + std::wstring::_Rep::_M_dispose((volatile signed __int32 *)(*(_DWORD *)&v49[1] - 12), (int)&v50); + } + *(_DWORD *)(a2 + 8) = 0; + return v43; +} +// 4C46FE: variable 'v25' is possibly undefined +// 53F594: using guessed type signed __int32 std::moneypunct::id; +// 5606F4: using guessed type int (*off_5606F4)(); + +//----- (004C4890) -------------------------------------------------------- +__int64 __stdcall std::money_put>::_M_insert( + __int64 a1, + int a2, + __int16 a3, + char **a4) +{ + int v4; // eax + char *v6; // edx + int v7; // eax + bool v8; // sf + unsigned int v9; // eax + unsigned int v10; // ebx + _WORD *v11; // edx + _WORD *v12; // eax + int v13; // edx + int v14; // eax + unsigned int v15; // edx + unsigned int v16; // eax + bool v17; // dl + __int16 v18; // ax + int v19; // ecx + unsigned int v20; // edx + int v21; // eax + char v22; // bl + int v23; // edx + _DWORD *v24; // eax + unsigned int v25; // [esp+8h] [ebp-B0h] + __int16 v26; // [esp+28h] [ebp-90h] + char *v27; // [esp+2Ch] [ebp-8Ch] + std::locale::_Impl *v28; // [esp+30h] [ebp-88h] + int v29; // [esp+34h] [ebp-84h] + unsigned int v30; // [esp+34h] [ebp-84h] + _WORD *v31; // [esp+38h] [ebp-80h] + bool v32; // [esp+38h] [ebp-80h] + int v33; // [esp+3Ch] [ebp-7Ch] + int *v34; // [esp+48h] [ebp-70h] + int v35; // [esp+48h] [ebp-70h] + int v36; // [esp+48h] [ebp-70h] + int v37; // [esp+48h] [ebp-70h] + std::locale::facet *v38; // [esp+4Ch] [ebp-6Ch] + std::locale::facet *v39; // [esp+4Ch] [ebp-6Ch] + void *v40; // [esp+50h] [ebp-68h] + unsigned int v41; // [esp+50h] [ebp-68h] + unsigned int v42; // [esp+50h] [ebp-68h] + __int64 v43; // [esp+54h] [ebp-64h] + int v44; // [esp+5Ch] [ebp-5Ch] + char *lpuexcpt; // [esp+60h] [ebp-58h] + struct _Unwind_Exception *lpuexcpta; // [esp+60h] [ebp-58h] + char *lpuexcptb; // [esp+60h] [ebp-58h] + char lpuexcptc; // [esp+60h] [ebp-58h] + char v49[5]; // [esp+A3h] [ebp-15h] BYREF + int v50; // [esp+A8h] [ebp-10h] BYREF + int v51; // [esp+ACh] [ebp-Ch] BYREF + char v52; // [esp+B0h] [ebp-8h] BYREF + + v43 = a1; + v40 = std::use_facet>(a2 + 108); + v38 = (std::locale::facet *)std::locale::id::_M_id(&std::moneypunct::id); + v34 = (int *)(*(_DWORD *)(*(_DWORD *)(a2 + 108) + 12) + 4 * (_DWORD)v38); + v44 = *v34; + if ( !*v34 ) + { + v24 = operator new(0x54u); + v24[1] = 0; + *v24 = &off_560704; + v24[2] = 0; + v24[3] = 0; + *((_BYTE *)v24 + 16) = 0; + *(_DWORD *)((char *)v24 + 18) = 0; + v24[6] = 0; + v24[7] = 0; + v24[8] = 0; + v24[9] = 0; + v24[10] = 0; + v24[11] = 0; + v24[12] = 0; + v24[13] = 0; + v24[14] = 0; + *((_BYTE *)v24 + 82) = 0; + v28 = (std::locale::_Impl *)v24; + std::__moneypunct_cache::_M_cache((int)v24, a2 + 108); + std::locale::_Impl::_M_install_cache(*(_DWORD *)(a2 + 108), v28, v38, v25); + v44 = *v34; + } + lpuexcpt = *a4; + v4 = *((_DWORD *)*a4 - 3); + if ( *(_WORD *)*a4 == *(_WORD *)(v44 + 60) ) + { + v51 = *(_DWORD *)(v44 + 56); + v33 = *(_DWORD *)(v44 + 40); + v39 = *(std::locale::facet **)(v44 + 44); + v6 = lpuexcpt + 2; + if ( !v4 ) + v6 = lpuexcpt; + lpuexcpt = v6; + } + else + { + v51 = *(_DWORD *)(v44 + 52); + v33 = *(_DWORD *)(v44 + 32); + v39 = *(std::locale::facet **)(v44 + 36); + } + v35 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v40 + 20))(v40, 8) - (_DWORD)lpuexcpt; + v41 = v35 >> 1; + if ( v35 >> 1 ) + { + *(_DWORD *)&v49[1] = std::wstring::_S_construct(0, 0); + std::wstring::reserve((int *)&v49[1], v35); + v7 = *(_DWORD *)(v44 + 48); + v36 = v41 - v7; + if ( (int)(v41 - v7) > 0 ) + { + v8 = v7 < 0; + v9 = v41 - v7; + if ( v8 ) + v9 = v41; + v36 = v9; + v10 = v9; + if ( *(_DWORD *)(v44 + 12) ) + { + std::wstring::_M_replace_aux((int **)&v49[1], 0, *(_DWORD *)(*(_DWORD *)&v49[1] - 12), 2 * v9, 0); + v11 = *(_WORD **)&v49[1]; + v29 = *(_DWORD *)(v44 + 12); + v27 = *(char **)(v44 + 8); + v26 = *(_WORD *)(v44 + 20); + if ( *(int *)(*(_DWORD *)&v49[1] - 4) >= 0 ) + { + std::wstring::_M_leak_hard((int **)&v49[1]); + v11 = *(_WORD **)&v49[1]; + } + v12 = std::__add_grouping(v11, v26, v27, v29, lpuexcpt, &lpuexcpt[2 * v10]); + v13 = *(_DWORD *)&v49[1]; + v31 = v12; + if ( *(int *)(*(_DWORD *)&v49[1] - 4) >= 0 ) + { + std::wstring::_M_leak_hard((int **)&v49[1]); + v13 = *(_DWORD *)&v49[1]; + } + v14 = (int)v31 - v13; + v15 = *(_DWORD *)(v13 - 12); + v16 = v14 >> 1; + if ( v16 > v15 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + v16, + v15); + std::wstring::_M_mutate((int **)&v49[1], v16, v15 - v16, 0); + v7 = *(_DWORD *)(v44 + 48); + } + else + { + std::wstring::assign((int **)&v49[1], lpuexcpt, v9); + v7 = *(_DWORD *)(v44 + 48); + } + } + if ( v7 > 0 ) + { + std::wstring::push_back((int *)&v49[1], *(_WORD *)(v44 + 18)); + if ( v36 < 0 ) + { + std::wstring::append((int *)&v49[1], -v36, *(_WORD *)(v44 + 62)); + std::wstring::append((int *)&v49[1], lpuexcpt, v41); + } + else + { + std::wstring::append((int *)&v49[1], &lpuexcpt[2 * v36], *(_DWORD *)(v44 + 48)); + } + } + v37 = *(_DWORD *)(a2 + 12) & 0xB0; + lpuexcpta = (std::locale::facet *)((char *)v39 + *(_DWORD *)(*(_DWORD *)&v49[1] - 12)); + if ( (*(_DWORD *)(a2 + 12) & 0x200) != 0 ) + lpuexcpta = (std::locale::facet *)((char *)v39 + *(_DWORD *)(*(_DWORD *)&v49[1] - 12) + *(_DWORD *)(v44 + 28)); + v50 = (int)std::wstring::_S_construct(0, 0); + std::wstring::reserve(&v50, 2 * (_DWORD)lpuexcpta); + v42 = *(_DWORD *)(a2 + 8); + v17 = v42 > (unsigned int)lpuexcpta && v37 == 16; + v30 = v42 - (_DWORD)lpuexcpta; + lpuexcptb = (char *)&v51; + v32 = v17; + do + { + switch ( *lpuexcptb ) + { + case 0: + if ( v32 ) + { + v18 = a3; + goto LABEL_30; + } + break; + case 1: + v18 = a3; + if ( v32 ) +LABEL_30: + std::wstring::append(&v50, v30, v18); + else + std::wstring::push_back(&v50, a3); + break; + case 2: + if ( (*(_BYTE *)(a2 + 13) & 2) != 0 ) + std::wstring::append(&v50, *(char **)(v44 + 24), *(_DWORD *)(v44 + 28)); + break; + case 3: + if ( v39 ) + std::wstring::push_back(&v50, *(_WORD *)v33); + break; + case 4: + std::wstring::append(&v50, &v49[1]); + break; + default: + break; + } + ++lpuexcptb; + } + while ( lpuexcptb != &v52 ); + if ( (unsigned int)v39 > 1 ) + { + std::wstring::append(&v50, (char *)(v33 + 2), (unsigned int)v39 - 1); + v19 = v50; + v20 = *(_DWORD *)(v50 - 12); + if ( v42 > v20 ) + goto LABEL_37; + } + else + { + v19 = v50; + v20 = *(_DWORD *)(v50 - 12); + if ( v42 > v20 ) + { +LABEL_37: + if ( v37 == 32 ) + std::wstring::append(&v50, v42 - v20, a3); + else + std::wstring::_M_replace_aux((int **)&v50, 0, 0, v42 - v20, a3); + v19 = v50; + goto LABEL_40; + } + } + v42 = v20; +LABEL_40: + lpuexcptc = BYTE4(a1); + if ( !BYTE4(a1) ) + { + v21 = (*(int (__thiscall **)(_DWORD, int, unsigned int))(*(_DWORD *)a1 + 48))(a1, v19, v42); + v22 = 0; + v19 = v50; + if ( v21 != v42 ) + v22 = 1; + lpuexcptc = v22; + } + v23 = HIDWORD(a1); + LOBYTE(v23) = lpuexcptc; + HIDWORD(v43) = v23; + std::wstring::_Rep::_M_dispose((volatile signed __int32 *)(v19 - 12), (int)v49); + std::wstring::_Rep::_M_dispose((volatile signed __int32 *)(*(_DWORD *)&v49[1] - 12), (int)&v50); + } + *(_DWORD *)(a2 + 8) = 0; + return v43; +} +// 4C4F2E: variable 'v25' is possibly undefined +// 53F598: using guessed type signed __int32 std::moneypunct::id; +// 560704: using guessed type int (*off_560704)(); + +//----- (004C50C0) -------------------------------------------------------- +bool __userpurge std::type_info::__do_catch@( + std::type_info *a1@, + std::type_info *this, + const type_info *a3, + void **a4, + unsigned int a5) +{ + bool result; // al + const char *Str1; // ecx + + result = 1; + if ( a1 != this ) + { + Str1 = (const char *)*((_DWORD *)a1 + 1); + result = 0; + if ( *Str1 != 42 ) + return strcmp(Str1, (const char *)((**((_BYTE **)this + 1) == 42) + *((_DWORD *)this + 1))) == 0; + } + return result; +} + +//----- (004C5100) -------------------------------------------------------- +int __stdcall std::type_info::__do_upcast(std::type_info *this, const __cxxabiv1::__class_type_info *a2, void **a3) +{ + return 0; +} + +//----- (004C5110) -------------------------------------------------------- +int std::type_info::__is_function_p() +{ + return 0; +} + +//----- (004C5120) -------------------------------------------------------- +bool __thiscall std::type_info::operator==(_DWORD *this, int a2) +{ + bool result; // al + const char *Str1; // ecx + + result = 1; + if ( (_DWORD *)a2 != this ) + { + Str1 = (const char *)this[1]; + result = 0; + if ( *Str1 != 42 ) + return strcmp(Str1, (const char *)((**(_BYTE **)(a2 + 4) == 42) + *(_DWORD *)(a2 + 4))) == 0; + } + return result; +} + +//----- (004C5160) -------------------------------------------------------- +int __cdecl std::wstring::_S_compare(int a1, int a2) +{ + return a1 - a2; +} + +//----- (004C5170) -------------------------------------------------------- +int __thiscall std::wstring::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (004C5180) -------------------------------------------------------- +int __thiscall std::wstring::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (004C5190) -------------------------------------------------------- +int *__fastcall std::wstring::_M_leak_hard(int **a1) +{ + int *result; // eax + + if ( *(*a1 - 1) > 0 ) + std::wstring::_M_mutate(a1, 0, 0, 0); + result = *a1; + *(*a1 - 1) = -1; + return result; +} + +//----- (004C51D0) -------------------------------------------------------- +_DWORD *__cdecl std::wstring::_S_construct(unsigned int a1, __int16 a2) +{ + _DWORD *v2; // eax + _WORD *v3; // ecx + unsigned int v4; // edx + + v2 = std::wstring::_Rep::_S_create(a1, 0); + if ( a1 ) + { + v3 = v2 + 3; + v4 = a1; + if ( a1 == 1 ) + { + *((_WORD *)v2 + 6) = a2; + } + else + { + do + { + *v3++ = a2; + --v4; + } + while ( v4 ); + } + } + v2[2] = 0; + *v2 = a1; + *((_WORD *)v2 + a1 + 6) = 0; + return v2 + 3; +} + +//----- (004C5240) -------------------------------------------------------- +_DWORD *__cdecl std::wstring::_S_construct<__gnu_cxx::__normal_iterator>(_WORD *Src, int a2) +{ + size_t Size; // esi + int v3; // ebp + int *v4; // eax + int *v5; // ebx + _DWORD *v6; // edx + _DWORD *v8; // [esp+1Ch] [ebp-20h] + + Size = a2 - (_DWORD)Src; + v3 = (a2 - (int)Src) >> 1; + v4 = std::wstring::_Rep::_S_create(v3, 0); + v5 = v4; + v6 = v4 + 3; + if ( v3 == 1 ) + { + *((_WORD *)v4 + 6) = *Src; + } + else if ( v3 ) + { + v8 = v4 + 3; + memcpy(v4 + 3, Src, Size); + v6 = v8; + } + v5[2] = 0; + *v5 = v3; + *(_WORD *)((char *)v5 + Size + 12) = 0; + return v6; +} + +//----- (004C52D0) -------------------------------------------------------- +_DWORD *__cdecl std::wstring::_S_construct(_WORD *Src, int a2) +{ + size_t Size; // esi + int v3; // ebp + int *v4; // eax + int *v5; // ebx + _DWORD *v6; // edx + _DWORD *v8; // [esp+1Ch] [ebp-20h] + + if ( a2 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + Size = a2 - (_DWORD)Src; + v3 = (a2 - (int)Src) >> 1; + v4 = std::wstring::_Rep::_S_create(v3, 0); + v5 = v4; + v6 = v4 + 3; + if ( v3 == 1 ) + { + *((_WORD *)v4 + 6) = *Src; + } + else if ( v3 ) + { + v8 = v4 + 3; + memcpy(v4 + 3, Src, Size); + v6 = v8; + } + v5[2] = 0; + *v5 = v3; + *(_WORD *)((char *)v5 + Size + 12) = 0; + return v6; +} + +//----- (004C5370) -------------------------------------------------------- +_DWORD *__cdecl std::wstring::_S_construct(_WORD *Src, int a2) +{ + size_t Size; // esi + int v3; // ebp + int *v4; // eax + int *v5; // ebx + _DWORD *v6; // edx + _DWORD *v8; // [esp+1Ch] [ebp-20h] + + if ( a2 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + Size = a2 - (_DWORD)Src; + v3 = (a2 - (int)Src) >> 1; + v4 = std::wstring::_Rep::_S_create(v3, 0); + v5 = v4; + v6 = v4 + 3; + if ( v3 == 1 ) + { + *((_WORD *)v4 + 6) = *Src; + } + else if ( v3 ) + { + v8 = v4 + 3; + memcpy(v4 + 3, Src, Size); + v6 = v8; + } + v5[2] = 0; + *v5 = v3; + *(_WORD *)((char *)v5 + Size + 12) = 0; + return v6; +} + +//----- (004C5410) -------------------------------------------------------- +void *std::wstring::_S_empty_rep() +{ + return &std::wstring::_Rep::_S_empty_rep_storage; +} + +//----- (004C5420) -------------------------------------------------------- +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size) +{ + int result; // eax + int v4; // ecx + + result = Size - (_DWORD)Src; + v4 = (int)(Size - (_DWORD)Src) >> 1; + if ( v4 == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( v4 ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (004C5460) -------------------------------------------------------- +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size) +{ + int result; // eax + int v4; // ecx + + result = Size - (_DWORD)Src; + v4 = (int)(Size - (_DWORD)Src) >> 1; + if ( v4 == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( v4 ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (004C54A0) -------------------------------------------------------- +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size) +{ + int result; // eax + int v4; // ecx + + result = Size - (_DWORD)Src; + v4 = (int)(Size - (_DWORD)Src) >> 1; + if ( v4 == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( v4 ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (004C54E0) -------------------------------------------------------- +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size) +{ + int result; // eax + int v4; // ecx + + result = Size - (_DWORD)Src; + v4 = (int)(Size - (_DWORD)Src) >> 1; + if ( v4 == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( v4 ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (004C5520) -------------------------------------------------------- +void __fastcall std::wstring::shrink_to_fit(int *a1) +{ + if ( *(_DWORD *)(*a1 - 12) < *(_DWORD *)(*a1 - 8) ) + std::wstring::reserve(a1, 0); +} + +//----- (004C55B0) -------------------------------------------------------- +int **__thiscall std::wstring::_M_replace_aux(int **this, int a2, int a3, unsigned int a4, __int16 a5) +{ + unsigned int v6; // ebx + _WORD *v7; // eax + + v6 = a4; + if ( a4 > a3 + 536870910 - *(*this - 3) ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace_aux"); + std::wstring::_M_mutate(this, a2, a3, a4); + if ( !a4 ) + return this; + v7 = (_WORD *)*this + a2; + if ( a4 != 1 ) + { + do + { + *v7++ = a5; + --v6; + } + while ( v6 ); + return this; + } + *v7 = a5; + return this; +} + +//----- (004C5640) -------------------------------------------------------- +int **__thiscall std::wstring::_M_replace_safe(int **this, int a2, int a3, _WORD *Src, int a5) +{ + std::wstring::_M_mutate(this, a2, a3, a5); + if ( !a5 ) + return this; + if ( a5 != 1 ) + { + memcpy((char *)*this + 2 * a2, Src, 2 * a5); + return this; + } + *((_WORD *)*this + a2) = *Src; + return this; +} + +//----- (004C56C0) -------------------------------------------------------- +_DWORD *__cdecl std::wstring::_S_construct_aux_2(unsigned int a1, __int16 a2) +{ + _DWORD *v2; // eax + _WORD *v3; // ecx + unsigned int v4; // edx + + v2 = std::wstring::_Rep::_S_create(a1, 0); + if ( a1 ) + { + v3 = v2 + 3; + v4 = a1; + if ( a1 == 1 ) + { + *((_WORD *)v2 + 6) = a2; + } + else + { + do + { + *v3++ = a2; + --v4; + } + while ( v4 ); + } + } + v2[2] = 0; + *v2 = a1; + *((_WORD *)v2 + a1 + 6) = 0; + return v2 + 3; +} + +//----- (004C5730) -------------------------------------------------------- +char *__thiscall std::wstring::at(int **this, unsigned int a2) +{ + int *v2; // eax + int *v5; // eax + + v2 = *this; + if ( a2 >= *(*this - 3) ) + std::__throw_out_of_range_fmt( + "basic_string::at: __n (which is %zu) >= this->size() (which is %zu)", + a2, + *(*this - 3)); + if ( *(v2 - 1) < 0 ) + return (char *)v2 + 2 * a2; + if ( *(v2 - 1) > 0 ) + std::wstring::_M_mutate(this, 0, 0, 0); + v5 = *this; + *(v5 - 1) = -1; + return (char *)v5 + 2 * a2; +} + +//----- (004C57B0) -------------------------------------------------------- +char *__fastcall std::wstring::end(int **a1) +{ + int *v1; // eax + int *v4; // eax + int v5; // edx + + v1 = *a1; + if ( *(*a1 - 1) < 0 ) + return (char *)v1 + 2 * *(v1 - 3); + if ( *(v1 - 1) > 0 ) + std::wstring::_M_mutate(a1, 0, 0, 0); + v4 = *a1; + v5 = *(*a1 - 3); + *(v4 - 1) = -1; + return (char *)v4 + 2 * v5; +} + +//----- (004C5800) -------------------------------------------------------- +void __thiscall std::wstring::_Rep::_M_destroy(void *Block, int a2) +{ + operator delete(Block); +} + +//----- (004C5820) -------------------------------------------------------- +void __thiscall std::wstring::_Rep::_M_dispose(volatile signed __int32 *Block, int a2) +{ + int v2; // eax + + if ( !_CRT_MT ) + { + v2 = *((_DWORD *)Block + 2); + *((_DWORD *)Block + 2) = v2 - 1; + if ( v2 > 0 ) + return; +LABEL_5: + operator delete((void *)Block); + return; + } + if ( _InterlockedExchangeAdd(Block + 2, 0xFFFFFFFF) <= 0 ) + goto LABEL_5; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004C5860) -------------------------------------------------------- +int __fastcall std::wstring::_Rep::_M_refcopy(int a1) +{ + if ( _CRT_MT ) + _InterlockedAdd((volatile signed __int32 *)(a1 + 8), 1u); + else + ++*(_DWORD *)(a1 + 8); + return a1 + 12; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004C5890) -------------------------------------------------------- +int __fastcall std::wstring::_Rep::_M_refdata(int a1) +{ + return a1 + 12; +} + +//----- (004C58A0) -------------------------------------------------------- +void *std::wstring::_Rep::_S_empty_rep() +{ + return &std::wstring::_Rep::_S_empty_rep_storage; +} + +//----- (004C58B0) -------------------------------------------------------- +void __fastcall std::wstring::_Rep::_M_set_leaked(int a1) +{ + *(_DWORD *)(a1 + 8) = -1; +} + +//----- (004C58C0) -------------------------------------------------------- +void __fastcall std::wstring::_Rep::_M_set_sharable(int a1) +{ + *(_DWORD *)(a1 + 8) = 0; +} + +//----- (004C58D0) -------------------------------------------------------- +int __thiscall std::wstring::_Rep::_M_set_length_and_sharable(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + this[2] = 0; + *this = a2; + *((_WORD *)this + a2 + 6) = 0; + return result; +} + +//----- (004C58F0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::_Rep::_M_grab(int this, int a2, int a3) +{ + _DWORD *result; // eax + + if ( *(int *)(this + 8) < 0 ) + return std::wstring::_Rep::_M_clone((int *)this, a2, 0); + if ( _CRT_MT ) + { + _InterlockedAdd((volatile signed __int32 *)(this + 8), 1u); + return (_DWORD *)(this + 12); + } + else + { + result = (_DWORD *)(this + 12); + ++*(_DWORD *)(this + 8); + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004C5940) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::_Rep::_M_clone(int *this, int a2, int a3) +{ + _DWORD *v4; // eax + int v5; // edx + _DWORD *v6; // ebx + int v7; // eax + + v4 = std::wstring::_Rep::_S_create(a3 + *this, this[1]); + v5 = 0; + v6 = v4; + v7 = *this; + if ( *this ) + { + if ( v7 == 1 ) + { + *((_WORD *)v6 + 6) = *((_WORD *)this + 6); + v5 = 2; + } + else + { + memcpy(v6 + 3, this + 3, 2 * v7); + v7 = *this; + v5 = 2 * *this; + } + } + *v6 = v7; + v6[2] = 0; + *(_WORD *)((char *)v6 + v5 + 12) = 0; + return v6 + 3; +} + +//----- (004C59C0) -------------------------------------------------------- +_DWORD *__cdecl std::wstring::_Rep::_S_create(unsigned int a1, unsigned int a2) +{ + unsigned int v2; // ebx + signed int v3; // eax + unsigned int v4; // ecx + _DWORD *result; // eax + + v2 = a1; + if ( a1 > 0x1FFFFFFE ) + std::__throw_length_error((std::length_error *)"basic_string::_S_create"); + if ( a1 <= a2 ) + { + v3 = 2 * a1 + 14; + } + else + { + if ( a1 < 2 * a2 ) + v2 = 2 * a2; + v3 = 2 * v2 + 14; + v4 = 2 * v2 + 30; + if ( v4 <= 0x1000 || v2 <= a2 ) + { + if ( v3 < 0 ) + std::__throw_bad_alloc(); + } + else + { + v2 += (4096 - (v4 & 0xFFF)) >> 1; + if ( v2 > 0x1FFFFFFE ) + v2 = 536870910; + v3 = 2 * v2 + 14; + } + } + result = operator new(v3); + result[1] = v2; + result[2] = 0; + return result; +} + +//----- (004C5A60) -------------------------------------------------------- +char *__fastcall std::wstring::back(int **a1) +{ + int *v1; // eax + int v2; // esi + int *v5; // eax + + v1 = *a1; + v2 = *(*a1 - 3) - 1; + if ( *(*a1 - 1) < 0 ) + return (char *)v1 + 2 * v2; + if ( *(v1 - 1) > 0 ) + std::wstring::_M_mutate(a1, 0, 0, 0); + v5 = *a1; + *(v5 - 1) = -1; + return (char *)v5 + 2 * v2; +} + +//----- (004C5AC0) -------------------------------------------------------- +int **__thiscall std::wstring::rend(int **this, int **a2) +{ + int *v3; // eax + int *v5; // eax + + v3 = *a2; + if ( *(*a2 - 1) >= 0 ) + { + if ( *(v3 - 1) > 0 ) + std::wstring::_M_mutate(a2, 0, 0, 0); + v5 = *a2; + *(v5 - 1) = -1; + *this = v5; + return this; + } + else + { + *this = v3; + return this; + } +} + +//----- (004C5B20) -------------------------------------------------------- +int __thiscall std::wstring::swap(int *this, int *a2) +{ + int result; // eax + int v3; // edx + + result = *this; + if ( *(int *)(*this - 4) < 0 ) + *(_DWORD *)(result - 4) = 0; + v3 = *a2; + if ( *(int *)(*a2 - 4) < 0 ) + *(_DWORD *)(v3 - 4) = 0; + *this = v3; + *a2 = result; + return result; +} + +//----- (004C5B50) -------------------------------------------------------- +int *__fastcall std::wstring::begin(int **a1) +{ + int *result; // eax + + result = *a1; + if ( *(*a1 - 1) >= 0 ) + { + if ( *(result - 1) > 0 ) + std::wstring::_M_mutate(a1, 0, 0, 0); + result = *a1; + *(*a1 - 1) = -1; + } + return result; +} + +//----- (004C5BA0) -------------------------------------------------------- +int __fastcall std::wstring::clear(int **a1) +{ + return std::wstring::_M_mutate(a1, 0, *(*a1 - 3), 0); +} + +//----- (004C5BD0) -------------------------------------------------------- +char *__thiscall std::wstring::erase(int **this, int a2) +{ + int v3; // esi + int *v4; // eax + + v3 = a2 - (_DWORD)*this; + std::wstring::_M_mutate(this, v3 >> 1, 1, 0); + v4 = *this; + *(v4 - 1) = -1; + return (char *)v4 + v3; +} + +//----- (004C5C10) -------------------------------------------------------- +char *__thiscall std::wstring::erase(int **this, char *a2, int a3) +{ + char *result; // eax + int v5; // ebx + int *v6; // eax + + result = a2; + if ( (a3 - (int)a2) >> 1 ) + { + v5 = a2 - (char *)*this; + std::wstring::_M_mutate(this, v5 >> 1, (a3 - (int)a2) >> 1, 0); + v6 = *this; + *(v6 - 1) = -1; + return (char *)v6 + v5; + } + return result; +} + +//----- (004C5C70) -------------------------------------------------------- +int **__thiscall std::wstring::erase(int **this, unsigned int a2, unsigned int a3) +{ + unsigned int v4; // ecx + int v5; // eax + + v4 = *(*this - 3); + v5 = v4 - a2; + if ( v4 - a2 > a3 ) + v5 = a3; + if ( a2 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + a2, + v4); + std::wstring::_M_mutate(this, a2, v5, 0); + return this; +} + +//----- (004C5CD0) -------------------------------------------------------- +int *__fastcall std::wstring::front(int **a1) +{ + int *result; // eax + + result = *a1; + if ( *(*a1 - 1) >= 0 ) + { + if ( *(result - 1) > 0 ) + std::wstring::_M_mutate(a1, 0, 0, 0); + result = *a1; + *(*a1 - 1) = -1; + } + return result; +} + +//----- (004C5D20) -------------------------------------------------------- +int *__thiscall std::wstring::append(int *this, wchar_t *String) +{ + unsigned int v3; // eax + + v3 = wcslen(String); + return std::wstring::append(this, (char *)String, v3); +} + +//----- (004C5D50) -------------------------------------------------------- +int *__thiscall std::wstring::append(int *this, char *a2, unsigned int a3) +{ + char *Src; // edi + unsigned int v5; // eax + int v6; // ebp + unsigned int v7; // ebp + _WORD *v8; // edx + char *v10; // edi + bool v11; // cc + + Src = a2; + if ( a3 ) + { + v5 = *this; + v6 = *(_DWORD *)(*this - 12); + if ( a3 > 536870910 - v6 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v7 = a3 + v6; + if ( v7 > *(_DWORD *)(v5 - 8) || (v11 = *(_DWORD *)(v5 - 4) <= 0, v5 = *this, !v11) ) + { + if ( v5 <= (unsigned int)a2 && (unsigned int)a2 <= v5 + 2 * *(_DWORD *)(v5 - 12) ) + { + v10 = &a2[-v5]; + std::wstring::reserve(this, v7); + v5 = *this; + Src = &v10[*this]; + v8 = (_WORD *)(*this + 2 * *(_DWORD *)(*this - 12)); + if ( a3 != 1 ) + goto LABEL_8; + goto LABEL_12; + } + std::wstring::reserve(this, v7); + v5 = *this; + } + v8 = (_WORD *)(v5 + 2 * *(_DWORD *)(v5 - 12)); + if ( a3 != 1 ) + { +LABEL_8: + memcpy(v8, Src, 2 * a3); + v5 = *this; +LABEL_9: + *(_DWORD *)(v5 - 4) = 0; + *(_DWORD *)(v5 - 12) = v7; + *(_WORD *)(v5 + 2 * v7) = 0; + return this; + } +LABEL_12: + *v8 = *(_WORD *)Src; + goto LABEL_9; + } + return this; +} + +//----- (004C5E30) -------------------------------------------------------- +int *__thiscall std::wstring::append(int *this, _DWORD *a2) +{ + int v3; // esi + unsigned int v4; // edi + int v5; // eax + _WORD *Src; // ecx + _WORD *v7; // edx + + v3 = *(_DWORD *)(*a2 - 12); + if ( v3 ) + { + v4 = v3 + *(_DWORD *)(*this - 12); + if ( v4 > *(_DWORD *)(*this - 8) || *(int *)(*this - 4) > 0 ) + { + std::wstring::reserve(this, v3 + *(_DWORD *)(*this - 12)); + v5 = *this; + Src = (_WORD *)*a2; + v7 = (_WORD *)(*this + 2 * *(_DWORD *)(*this - 12)); + if ( v3 == 1 ) + { +LABEL_9: + *v7 = *Src; + goto LABEL_5; + } + } + else + { + v5 = *this; + Src = (_WORD *)*a2; + v7 = (_WORD *)(*this + 2 * *(_DWORD *)(*this - 12)); + if ( v3 == 1 ) + goto LABEL_9; + } + memcpy(v7, Src, 2 * v3); + v5 = *this; +LABEL_5: + *(_DWORD *)(v5 - 4) = 0; + *(_DWORD *)(v5 - 12) = v4; + *(_WORD *)(v5 + 2 * v4) = 0; + } + return this; +} + +//----- (004C5EC0) -------------------------------------------------------- +int *__thiscall std::wstring::append(int *this, _DWORD *a2, unsigned int a3, unsigned int a4) +{ + unsigned int v4; // ebx + unsigned int v5; // ebx + unsigned int v7; // edx + _WORD *Src; // edi + int v9; // eax + _WORD *v10; // ecx + unsigned int v12; // [esp+1Ch] [ebp-20h] + unsigned int v13; // [esp+1Ch] [ebp-20h] + + v4 = *(_DWORD *)(*a2 - 12); + if ( a3 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::append", + a3, + *(_DWORD *)(*a2 - 12)); + v5 = v4 - a3; + if ( v5 > a4 ) + v5 = a4; + if ( v5 ) + { + v7 = v5 + *(_DWORD *)(*this - 12); + if ( v7 > *(_DWORD *)(*this - 8) || *(int *)(*this - 4) > 0 ) + { + v12 = v5 + *(_DWORD *)(*this - 12); + std::wstring::reserve(this, v12); + v7 = v12; + } + Src = (_WORD *)(*a2 + 2 * a3); + v9 = *this; + v10 = (_WORD *)(*this + 2 * *(_DWORD *)(*this - 12)); + if ( v5 == 1 ) + { + *v10 = *Src; + } + else + { + v13 = v7; + memcpy(v10, Src, 2 * v5); + v9 = *this; + v7 = v13; + } + *(_DWORD *)(v9 - 4) = 0; + *(_DWORD *)(v9 - 12) = v7; + *(_WORD *)(v9 + 2 * v7) = 0; + } + return this; +} + +//----- (004C5FA0) -------------------------------------------------------- +int *__thiscall std::wstring::append(int *this, unsigned int a2, __int16 a3) +{ + unsigned int v4; // ebx + __int16 v5; // dx + int v6; // ecx + int v7; // edi + unsigned int v8; // edi + int v9; // ecx + _WORD *v10; // eax + + v4 = a2; + v5 = a3; + if ( a2 ) + { + v6 = *this; + v7 = *(_DWORD *)(v6 - 12); + if ( a2 > 536870910 - v7 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v8 = a2 + v7; + if ( v8 > *(_DWORD *)(v6 - 8) || *(int *)(v6 - 4) > 0 ) + { + std::wstring::reserve(this, v8); + v5 = a3; + } + v9 = *this; + v10 = (_WORD *)(*this + 2 * *(_DWORD *)(*this - 12)); + if ( a2 == 1 ) + { + *v10 = v5; + *(_DWORD *)(v9 - 4) = 0; + *(_DWORD *)(v9 - 12) = v8; + *(_WORD *)(v9 + 2 * v8) = 0; + } + else + { + do + { + *v10++ = a3; + --v4; + } + while ( v4 ); + *(_DWORD *)(v9 - 4) = 0; + *(_DWORD *)(v9 - 12) = v8; + *(_WORD *)(v9 + 2 * v8) = 0; + } + } + return this; +} + +//----- (004C6060) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::assign(_DWORD *this, int *a2) +{ + _DWORD *result; // eax + int v3; // edx + int v4; // ecx + + result = this; + v3 = *this; + if ( *(int *)(*this - 4) < 0 ) + *(_DWORD *)(v3 - 4) = 0; + v4 = *a2; + if ( *(int *)(*a2 - 4) < 0 ) + *(_DWORD *)(v4 - 4) = 0; + *result = v4; + *a2 = v3; + return result; +} + +//----- (004C60A0) -------------------------------------------------------- +int **__thiscall std::wstring::assign(int **this, wchar_t *String) +{ + unsigned int v3; // eax + + v3 = wcslen(String); + return std::wstring::assign(this, (char *)String, v3); +} + +//----- (004C60D0) -------------------------------------------------------- +int **__thiscall std::wstring::assign(int **this, char *Src, unsigned int a3) +{ + int *v3; // eax + int v4; // edx + bool v6; // cc + int *v7; // eax + int *v8; // eax + unsigned int v10; // edx + + v3 = *this; + v4 = *(*this - 3); + if ( a3 > 0x1FFFFFFE ) + std::__throw_length_error((std::length_error *)"basic_string::assign"); + if ( v3 <= (int *)Src && (char *)v3 + 2 * v4 >= Src ) + { + v6 = *(v3 - 1) <= 0; + v7 = *this; + if ( !v6 ) + { + v4 = *(v7 - 3); + goto LABEL_6; + } + v10 = (Src - (char *)v7) >> 1; + if ( a3 <= v10 ) + { + if ( a3 != 1 ) + { + if ( a3 ) + { + memcpy(v7, Src, 2 * a3); + v7 = *this; + } + goto LABEL_15; + } + } + else + { + if ( !v10 ) + { +LABEL_15: + *(v7 - 1) = 0; + *(v7 - 3) = a3; + *((_WORD *)v7 + a3) = 0; + return this; + } + if ( a3 != 1 ) + { + if ( a3 ) + { + memmove(v7, Src, 2 * a3); + v7 = *this; + } + goto LABEL_15; + } + } + *(_WORD *)v7 = *(_WORD *)Src; + goto LABEL_15; + } +LABEL_6: + std::wstring::_M_mutate(this, 0, v4, a3); + if ( !a3 ) + return this; + v8 = *this; + if ( a3 != 1 ) + { + memcpy(v8, Src, 2 * a3); + return this; + } + *(_WORD *)v8 = *(_WORD *)Src; + return this; +} + +//----- (004C61F0) -------------------------------------------------------- +int *__thiscall std::wstring::assign(int *this, _DWORD *a2) +{ + _DWORD *v3; // esi + int v4; // eax + int v5; // edx + char v7[13]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = (_DWORD *)*a2; + if ( *this != *a2 ) + { + if ( (int)*(v3 - 1) < 0 ) + { + v3 = std::wstring::_Rep::_M_clone(v3 - 3, (int)v7, 0); + v4 = *this; + if ( !_CRT_MT ) + goto LABEL_6; + } + else + { + if ( _CRT_MT ) + _InterlockedAdd(v3 - 1, 1u); + else + ++*(v3 - 1); + v4 = *this; + if ( !_CRT_MT ) + { +LABEL_6: + v5 = *(_DWORD *)(v4 - 4); + *(_DWORD *)(v4 - 4) = v5 - 1; + if ( v5 > 0 ) + { +LABEL_7: + *this = (int)v3; + return this; + } +LABEL_11: + operator delete((void *)(v4 - 12)); + *this = (int)v3; + return this; + } + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v4 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_7; + goto LABEL_11; + } + return this; +} +// 53E1E4: using guessed type int _CRT_MT; +// 4C61F0: using guessed type char var_D[13]; + +//----- (004C62A0) -------------------------------------------------------- +int **__thiscall std::wstring::assign(int **this, _DWORD *a2, unsigned int a3, unsigned int a4) +{ + unsigned int v4; // eax + + v4 = *(_DWORD *)(*a2 - 12) - a3; + if ( v4 > a4 ) + v4 = a4; + if ( a3 > *(_DWORD *)(*a2 - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::assign", + a3, + *(_DWORD *)(*a2 - 12)); + return std::wstring::assign(this, (char *)(*a2 + 2 * a3), v4); +} + +//----- (004C6310) -------------------------------------------------------- +int **__thiscall std::wstring::assign(int **this, unsigned int a2, __int16 a3) +{ + unsigned int v3; // ebx + int *v5; // eax + + v3 = a2; + if ( a2 > 0x1FFFFFFE ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace_aux"); + std::wstring::_M_mutate(this, 0, *(*this - 3), a2); + if ( !a2 ) + return this; + v5 = *this; + if ( a2 != 1 ) + { + do + { + *(_WORD *)v5 = a3; + v5 = (int *)((char *)v5 + 2); + --v3; + } + while ( v3 ); + return this; + } + *(_WORD *)v5 = a3; + return this; +} + +//----- (004C6390) -------------------------------------------------------- +int **__thiscall std::wstring::insert(int **this, int a2, int *a3, unsigned int a4) +{ + return std::wstring::insert(this, (a2 - (int)*this) >> 1, a3, a4); +} + +//----- (004C63B0) -------------------------------------------------------- +int __thiscall std::wstring::insert(int **this, int a2, unsigned int a3, unsigned __int16 a4) +{ + unsigned int v5; // esi + int v6; // ebx + int result; // eax + unsigned __int16 *v8; // ebx + + v5 = a3; + v6 = a2 - (_DWORD)*this; + if ( a3 > 536870910 - *(*this - 3) ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace_aux"); + result = std::wstring::_M_mutate(this, v6 >> 1, 0, a3); + if ( a3 ) + { + v8 = (unsigned __int16 *)((char *)*this + v6); + if ( a3 == 1 ) + { + result = a4; + *v8 = a4; + } + else + { + do + { + *v8++ = a4; + --v5; + } + while ( v5 ); + } + } + return result; +} + +//----- (004C6440) -------------------------------------------------------- +_WORD *__thiscall std::wstring::insert(int **this, int a2, __int16 a3) +{ + int v3; // ebx + int *v5; // edx + _WORD *result; // eax + + v3 = a2 - (_DWORD)*this; + if ( *(*this - 3) == 536870910 ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace_aux"); + std::wstring::_M_mutate(this, (a2 - (int)*this) >> 1, 0, 1); + v5 = *this; + result = (_WORD *)((char *)*this + v3); + *result = a3; + *(v5 - 1) = -1; + return result; +} + +//----- (004C64A0) -------------------------------------------------------- +int **__thiscall std::wstring::insert(int **this, int a2, wchar_t *String) +{ + unsigned int v4; // eax + + v4 = wcslen(String); + return std::wstring::insert(this, a2, (int *)String, v4); +} + +//----- (004C64E0) -------------------------------------------------------- +int **__thiscall std::wstring::insert(int **this, unsigned int a2, int *Src, unsigned int a4) +{ + int *v5; // edx + unsigned int v6; // ecx + _WORD *v7; // eax + char *v9; // ebp + int v10; // edx + char *v11; // eax + _WORD *v12; // edi + char *v13; // ecx + size_t Size; // ecx + int v15; // edx + unsigned int v16; // esi + _WORD *v17; // ebp + _WORD *v18; // ecx + size_t v19; // [esp+18h] [ebp-24h] + int v20; // [esp+1Ch] [ebp-20h] + + v5 = *this; + v6 = *(*this - 3); + if ( a2 > v6 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::insert", + a2, + v6); + if ( a4 > 536870910 - v6 ) + std::__throw_length_error((std::length_error *)"basic_string::insert"); + if ( v5 <= Src && Src <= (int *)((char *)v5 + 2 * v6) && *(v5 - 1) <= 0 ) + { + v9 = (char *)((char *)Src - (char *)*this); + std::wstring::_M_mutate(this, a2, 0, a4); + v10 = 2 * a2; + v11 = &v9[(_DWORD)*this]; + v12 = (_WORD *)*this + a2; + v13 = &v11[2 * a4]; + if ( v13 > (char *)v12 ) + { + if ( v11 < (char *)v12 ) + { + Size = v10 - (_DWORD)v9; + v15 = (v10 - (int)v9) >> 1; + if ( v15 == 1 ) + { + *v12 = *(_WORD *)v11; + } + else if ( v15 ) + { + v20 = v15; + v19 = Size; + memcpy(v12, v11, Size); + v15 = v20; + Size = v19; + } + v16 = a4 - v15; + v17 = &v12[a4]; + v18 = (_WORD *)((char *)v12 + Size); + if ( a4 - v15 == 1 ) + { + *v18 = *v17; + } + else if ( v16 ) + { + memcpy(v18, v17, 2 * v16); + } + } + else if ( a4 == 1 ) + { + *v12 = *(_WORD *)v13; + } + else if ( a4 ) + { + memcpy(v12, &v11[2 * a4], 2 * a4); + } + } + else if ( a4 == 1 ) + { + *v12 = *(_WORD *)v11; + } + else if ( a4 ) + { + memcpy(v12, v11, 2 * a4); + } + return this; + } + std::wstring::_M_mutate(this, a2, 0, a4); + if ( !a4 ) + return this; + v7 = (_WORD *)*this + a2; + if ( a4 != 1 ) + { + memcpy(v7, Src, 2 * a4); + return this; + } + *v7 = *(_WORD *)Src; + return this; +} + +//----- (004C66C0) -------------------------------------------------------- +int **__thiscall std::wstring::insert(int **this, int a2, int **a3) +{ + return std::wstring::insert(this, a2, *a3, *(*a3 - 3)); +} + +//----- (004C66F0) -------------------------------------------------------- +int **__thiscall std::wstring::insert(int **this, int a2, _DWORD *a3, unsigned int a4, unsigned int a5) +{ + unsigned int v5; // eax + + v5 = *(_DWORD *)(*a3 - 12) - a4; + if ( v5 > a5 ) + v5 = a5; + if ( a4 > *(_DWORD *)(*a3 - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::insert", + a4, + *(_DWORD *)(*a3 - 12)); + return std::wstring::insert(this, a2, (int *)(*a3 + 2 * a4), v5); +} + +//----- (004C6760) -------------------------------------------------------- +int **__thiscall std::wstring::insert(int **this, unsigned int a2, unsigned int a3, __int16 a4) +{ + if ( a2 > *(*this - 3) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::insert", + a2, + *(*this - 3)); + return std::wstring::_M_replace_aux(this, a2, 0, a3, a4); +} + +//----- (004C67C0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::rbegin(_DWORD *this, int **a2) +{ + int *v3; // eax + + v3 = *a2; + if ( *(*a2 - 1) >= 0 ) + { + if ( *(v3 - 1) > 0 ) + std::wstring::_M_mutate(a2, 0, 0, 0); + v3 = *a2; + *(*a2 - 1) = -1; + } + *this = (char *)v3 + 2 * *(v3 - 3); + return this; +} + +//----- (004C6830) -------------------------------------------------------- +int *__thiscall std::wstring::resize(int *this, unsigned int a2) +{ + int *result; // eax + unsigned int v3; // edx + + result = (int *)a2; + v3 = *(_DWORD *)(*this - 12); + if ( a2 > 0x1FFFFFFE ) + std::__throw_length_error((std::length_error *)"basic_string::resize"); + if ( a2 > v3 ) + return std::wstring::append(this, a2 - v3, 0); + if ( a2 < v3 ) + return (int *)std::wstring::_M_mutate((int **)this, a2, v3 - a2, 0); + return result; +} + +//----- (004C68A0) -------------------------------------------------------- +int *__thiscall std::wstring::resize(int *this, unsigned int a2, __int16 a3) +{ + int *result; // eax + unsigned int v4; // edx + + result = (int *)a2; + v4 = *(_DWORD *)(*this - 12); + if ( a2 > 0x1FFFFFFE ) + std::__throw_length_error((std::length_error *)"basic_string::resize"); + if ( a2 > v4 ) + return std::wstring::append(this, a2 - v4, a3); + if ( a2 < v4 ) + return (int *)std::wstring::_M_mutate((int **)this, a2, v4 - a2, 0); + return result; +} + +//----- (004C6920) -------------------------------------------------------- +int __cdecl std::wstring::_M_copy(_WORD *a1, unsigned __int16 *Src, size_t Size) +{ + int result; // eax + + result = Size; + if ( Size == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( Size ) + { + return (int)memcpy(a1, Src, 2 * Size); + } + return result; +} + +//----- (004C6960) -------------------------------------------------------- +int __thiscall std::wstring::_M_data(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (004C6970) -------------------------------------------------------- +int *__fastcall std::wstring::_M_leak(int **a1) +{ + int *result; // eax + + result = *a1; + if ( *(*a1 - 1) >= 0 ) + { + if ( *(result - 1) > 0 ) + std::wstring::_M_mutate(a1, 0, 0, 0); + result = *a1; + *(*a1 - 1) = -1; + } + return result; +} + +//----- (004C69C0) -------------------------------------------------------- +int __cdecl std::wstring::_M_move(_WORD *a1, unsigned __int16 *Src, size_t Size) +{ + int result; // eax + + result = Size; + if ( Size == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( Size ) + { + return (int)memmove(a1, Src, 2 * Size); + } + return result; +} + +//----- (004C6A00) -------------------------------------------------------- +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD *a4, int a5) +{ + return std::wstring::replace(this, (a2 - (int)*this) >> 1, (a3 - a2) >> 1, a4, (a5 - (int)a4) >> 1); +} + +//----- (004C6A30) -------------------------------------------------------- +int **__thiscall std::wstring::replace(int **this, int a2, int a3, wchar_t *String) +{ + unsigned int v5; // eax + + v5 = wcslen(String); + return std::wstring::replace(this, (a2 - (int)*this) >> 1, (a3 - a2) >> 1, String, v5); +} + +//----- (004C6A80) -------------------------------------------------------- +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD *a4, int a5) +{ + return std::wstring::replace(this, (a2 - (int)*this) >> 1, (a3 - a2) >> 1, a4, (a5 - (int)a4) >> 1); +} + +//----- (004C6AB0) -------------------------------------------------------- +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD *a4, unsigned int a5) +{ + return std::wstring::replace(this, (a2 - (int)*this) >> 1, (a3 - a2) >> 1, a4, a5); +} + +//----- (004C6AD0) -------------------------------------------------------- +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD **a4) +{ + return std::wstring::replace(this, (a2 - (int)*this) >> 1, (a3 - a2) >> 1, *a4, *((_DWORD *)*a4 - 3)); +} + +//----- (004C6B10) -------------------------------------------------------- +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD *a4, int a5) +{ + return std::wstring::replace(this, (a2 - (int)*this) >> 1, (a3 - a2) >> 1, a4, (a5 - (int)a4) >> 1); +} + +//----- (004C6B40) -------------------------------------------------------- +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD *a4, int a5) +{ + return std::wstring::replace(this, (a2 - (int)*this) >> 1, (a3 - a2) >> 1, a4, (a5 - (int)a4) >> 1); +} + +//----- (004C6B70) -------------------------------------------------------- +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD *a4, int a5) +{ + return std::wstring::replace(this, (a2 - (int)*this) >> 1, (a3 - a2) >> 1, a4, (2 * a5) >> 1); +} + +//----- (004C6BA0) -------------------------------------------------------- +int **__thiscall std::wstring::replace(int **this, int a2, int a3, unsigned int a4, __int16 a5) +{ + unsigned int v6; // esi + int v7; // ebx + _WORD *v8; // ebx + + v6 = a4; + v7 = a2 - (_DWORD)*this; + if ( a4 > ((a3 - a2) >> 1) + 536870910 - *(*this - 3) ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace_aux"); + std::wstring::_M_mutate(this, (a2 - (int)*this) >> 1, (a3 - a2) >> 1, a4); + if ( !a4 ) + return this; + v8 = (_WORD *)((char *)*this + v7); + if ( a4 != 1 ) + { + do + { + *v8++ = a5; + --v6; + } + while ( v6 ); + return this; + } + *v8 = a5; + return this; +} + +//----- (004C6C40) -------------------------------------------------------- +int **__thiscall std::wstring::replace(int **this, int a2, int a3, wchar_t *String) +{ + unsigned int v5; // eax + + v5 = wcslen(String); + return std::wstring::replace(this, a2, a3, String, v5); +} + +//----- (004C6C80) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +int **__thiscall std::wstring::replace(int **this, unsigned int a2, unsigned int a3, _WORD *Src, unsigned int a5) +{ + int *v5; // edx + unsigned int v6; // eax + int v7; // ecx + int *v9; // edx + _WORD *v10; // eax + int v11; // eax + int Size; // [esp+18h] [ebp-60h] + int v13; // [esp+1Ch] [ebp-5Ch] + _DWORD *v14; // [esp+1Ch] [ebp-5Ch] + int v15; // [esp+20h] [ebp-58h] + int v16; // [esp+24h] [ebp-54h] + + v5 = *this; + v6 = *(*this - 3); + if ( a2 > v6 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + *(*this - 3)); + v7 = v6 - a2; + if ( v6 - a2 > a3 ) + v7 = a3; + v16 = v7; + if ( v7 - v6 + 536870910 < a5 ) + std::__throw_length_error((std::length_error *)"basic_string::replace"); + if ( v5 > (int *)Src || Src > (_WORD *)v5 + v6 || *(v5 - 1) > 0 ) + { + std::wstring::_M_mutate(this, a2, v7, a5); + if ( a5 ) + { + if ( a5 == 1 ) + *((_WORD *)*this + a2) = *Src; + else + memcpy((char *)*this + 2 * a2, Src, 2 * a5); + } + return this; + } + v9 = *this; + Size = 2 * a5; + v15 = 2 * a2; + if ( &Src[a5] <= (_WORD *)*this + a2 ) + { + v13 = ((char *)Src - (char *)v9) >> 1; +LABEL_15: + std::wstring::_M_mutate(this, a2, v7, a5); + v10 = (_WORD *)((char *)*this + v15); + if ( a5 == 1 ) + { + *v10 = *((_WORD *)*this + v13); + } + else if ( a5 ) + { + memcpy(v10, (char *)*this + 2 * v13, Size); + } + return this; + } + if ( Src >= (_WORD *)v9 + a2 + v7 ) + { + v13 = a5 + (((char *)Src - (char *)v9) >> 1) - v7; + goto LABEL_15; + } + v14 = std::wstring::_S_construct(Src, (int)&Src[a5]); + std::wstring::_M_mutate(this, a2, v16, a5); + if ( a5 ) + { + if ( a5 == 1 ) + *((_WORD *)*this + a2) = *(_WORD *)v14; + else + memcpy((char *)*this + v15, v14, Size); + } + if ( _CRT_MT ) + { + v11 = _InterlockedExchangeAdd(v14 - 1, 0xFFFFFFFF); + } + else + { + v11 = *(v14 - 1); + *(v14 - 1) = v11 - 1; + } + if ( v11 <= 0 ) + operator delete(v14 - 3); + return this; +} +// 4C6F5A: positive sp value 4 has been found +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004C6F70) -------------------------------------------------------- +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _WORD **a4) +{ + return std::wstring::replace(this, a2, a3, *a4, *((_DWORD *)*a4 - 3)); +} + +//----- (004C6FB0) -------------------------------------------------------- +int **__thiscall std::wstring::replace(int **this, int a2, int a3, _DWORD *a4, unsigned int a5, unsigned int a6) +{ + unsigned int v6; // eax + + v6 = *(_DWORD *)(*a4 - 12) - a5; + if ( v6 > a6 ) + v6 = a6; + if ( a5 > *(_DWORD *)(*a4 - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a5, + *(_DWORD *)(*a4 - 12)); + return std::wstring::replace(this, a2, a3, (_WORD *)(*a4 + 2 * a5), v6); +} + +//----- (004C7020) -------------------------------------------------------- +int **__thiscall std::wstring::replace(int **this, unsigned int a2, unsigned int a3, unsigned int a4, __int16 a5) +{ + unsigned int v5; // eax + + v5 = *(*this - 3) - a2; + if ( v5 > a3 ) + v5 = a3; + if ( a2 > *(*this - 3) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + *(*this - 3)); + return std::wstring::_M_replace_aux(this, a2, v5, a4, a5); +} + +//----- (004C7090) -------------------------------------------------------- +void __thiscall std::wstring::reserve(int *this, unsigned int a2) +{ + int v3; // ecx + unsigned int v4; // eax + unsigned int v5; // edx + int *v6; // ecx + _DWORD *v7; // esi + int v8; // eax + int v9; // edx + char v10[13]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = *this; + v4 = a2; + if ( a2 == *(_DWORD *)(v3 - 8) ) + { + if ( *(int *)(v3 - 4) <= 0 ) + return; + v3 = *this; + } + v5 = *(_DWORD *)(v3 - 12); + v6 = (int *)(v3 - 12); + if ( a2 < v5 ) + v4 = v5; + v7 = std::wstring::_Rep::_M_clone(v6, (int)v10, v4 - v5); + v8 = *this; + if ( _CRT_MT ) + { + v9 = _InterlockedExchangeAdd((volatile signed __int32 *)(v8 - 4), 0xFFFFFFFF); + } + else + { + v9 = *(_DWORD *)(v8 - 4); + *(_DWORD *)(v8 - 4) = v9 - 1; + } + if ( v9 <= 0 ) + operator delete((void *)(v8 - 12)); + *this = (int)v7; +} +// 53E1E4: using guessed type int _CRT_MT; +// 4C7090: using guessed type char var_D[13]; + +//----- (004C7120) -------------------------------------------------------- +int __fastcall std::wstring::pop_back(int **a1) +{ + unsigned int v1; // eax + + v1 = *(*a1 - 3); + if ( v1 - 1 > v1 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + 0xFFFFFFFF, + 0); + return std::wstring::_M_mutate(a1, v1 - 1, 1, 0); +} + +//----- (004C7180) -------------------------------------------------------- +int __cdecl std::wstring::_M_assign(_WORD *a1, int a2, __int16 a3) +{ + int result; // eax + _WORD *v4; // edx + + result = a2; + v4 = a1; + if ( a2 == 1 ) + { + *a1 = a3; + } + else if ( a2 ) + { + do + { + *v4++ = a3; + --result; + } + while ( result ); + } + return result; +} + +//----- (004C71C0) -------------------------------------------------------- +int __thiscall std::wstring::_M_mutate(int **this, int a2, int a3, int a4) +{ + int *v5; // eax + int v6; // edi + unsigned int v7; // ecx + unsigned int v8; // ebx + int v9; // edi + _DWORD *v10; // eax + _DWORD *v11; // ecx + char *v12; // ebp + int *v13; // eax + _WORD *v14; // ecx + int v15; // edx + int result; // eax + void *v17; // [esp+18h] [ebp-34h] + _WORD *Src; // [esp+18h] [ebp-34h] + _DWORD *v19; // [esp+1Ch] [ebp-30h] + + v5 = *this; + v6 = *(*this - 3); + v7 = *(*this - 2); + v8 = v6 + a4 - a3; + v17 = (void *)(a2 + a3); + v9 = v6 - (a2 + a3); + if ( v8 > v7 ) + { +LABEL_4: + v10 = std::wstring::_Rep::_S_create(v8, v7); + v11 = v10; + if ( a2 ) + { + v13 = *this; + v12 = (char *)(v11 + 3); + if ( a2 == 1 ) + { + *((_WORD *)v11 + 6) = *(_WORD *)v13; + } + else + { + v19 = v11; + memcpy(v12, v13, 2 * a2); + v13 = *this; + v11 = v19; + } + } + else + { + v12 = (char *)(v10 + 3); + v13 = *this; + } + if ( v9 ) + { + Src = (_WORD *)v13 + (_DWORD)v17; + v14 = (_WORD *)v11 + a2 + a4 + 6; + if ( v9 == 1 ) + { + *v14 = *Src; + } + else + { + memcpy(v14, Src, 2 * v9); + v13 = *this; + } + } + if ( _CRT_MT ) + { + v15 = _InterlockedExchangeAdd(v13 - 1, 0xFFFFFFFF); + } + else + { + v15 = *(v13 - 1); + *(v13 - 1) = v15 - 1; + } + if ( v15 <= 0 ) + operator delete(v13 - 3); + *this = (int *)v12; + goto LABEL_14; + } + if ( *(v5 - 1) > 0 ) + { + v7 = *(*this - 2); + goto LABEL_4; + } + v12 = (char *)*this; + if ( v9 && a4 != a3 ) + { + if ( v9 == 1 ) + { + *(_WORD *)&v12[2 * a2 + 2 * a4] = *(_WORD *)&v12[2 * (_DWORD)v17]; + } + else + { + memmove(&v12[2 * a2 + 2 * a4], &v12[2 * (_DWORD)v17], 2 * v9); + v12 = (char *)*this; + } + } +LABEL_14: + result = 0; + *((_DWORD *)v12 - 1) = 0; + *((_DWORD *)v12 - 3) = v8; + *(_WORD *)&v12[2 * v8] = 0; + return result; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004C7380) -------------------------------------------------------- +int __thiscall std::wstring::push_back(int *this, __int16 a2) +{ + int v3; // edx + int v4; // ebx + int result; // eax + + v3 = *(_DWORD *)(*this - 12); + v4 = v3 + 1; + if ( (unsigned int)(v3 + 1) > *(_DWORD *)(*this - 8) || *(int *)(*this - 4) > 0 ) + std::wstring::reserve(this, v3 + 1); + result = *this; + *(_WORD *)(result + 2 * *(_DWORD *)(*this - 12)) = a2; + *(_DWORD *)(result - 4) = 0; + *(_DWORD *)(result - 12) = v4; + *(_WORD *)(result + 2 * v4) = 0; + return result; +} + +//----- (004C73D0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2) +{ + char *v2; // eax + _WORD *result; // eax + + *this = *a2; + v2 = (char *)operator new(0xEu); + *((_DWORD *)v2 + 1) = 0; + result = v2 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *a2 = result; + return result; +} + +//----- (004C7410) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, int a3) +{ + char *v3; // eax + _WORD *result; // eax + + *this = *a2; + v3 = (char *)operator new(0xEu); + *((_DWORD *)v3 + 1) = 0; + result = v3 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *a2 = result; + return result; +} + +//----- (004C7450) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, wchar_t *String, int a3) +{ + int v3; // eax + _DWORD *result; // eax + + v3 = -2; + if ( String ) + v3 = (int)&String[wcslen(String)]; + result = std::wstring::_S_construct(String, v3); + *this = result; + return result; +} + +//----- (004C74A0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4) +{ + _DWORD *result; // eax + + result = std::wstring::_S_construct(a2, (int)&a2[a3]); + *this = result; + return result; +} + +//----- (004C74E0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2) +{ + char *v3; // eax + _WORD *result; // eax + + v3 = (char *)operator new(0xEu); + *((_DWORD *)v3 + 1) = 0; + result = v3 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *this = result; + return result; +} + +//----- (004C7520) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + char v4[13]; // [esp+1Fh] [ebp-Dh] BYREF + + result = (_DWORD *)*a2; + if ( *(int *)(*a2 - 4) < 0 ) + { + result = std::wstring::_Rep::_M_clone(result - 3, (int)v4, 0); + *this = result; + } + else + { + if ( _CRT_MT ) + _InterlockedAdd(result - 1, 1u); + else + ++*(result - 1); + *this = result; + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; +// 4C7520: using guessed type char var_D[13]; + +//----- (004C7590) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, int a3) +{ + _DWORD *result; // eax + + result = (_DWORD *)*a2; + if ( *(int *)(*a2 - 4) < 0 ) + { + result = std::wstring::_Rep::_M_clone(result - 3, a3, 0); + *this = result; + } + else + { + if ( _CRT_MT ) + _InterlockedAdd(result - 1, 1u); + else + ++*(result - 1); + *this = result; + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004C7600) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4) +{ + unsigned int v5; // edx + _DWORD *result; // eax + + v5 = *(_DWORD *)(*a2 - 12); + if ( a3 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + *(_DWORD *)(*a2 - 12)); + result = std::wstring::_S_construct((_WORD *)(*a2 + 2 * a3), *a2 + 2 * v5); + *this = result; + return result; +} + +//----- (004C7660) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, int *a2, unsigned int a3, unsigned int a4) +{ + int v5; // ecx + unsigned int v6; // eax + int v7; // eax + _DWORD *result; // eax + + v5 = *a2; + v6 = *(_DWORD *)(*a2 - 12) - a3; + if ( v6 > a4 ) + v6 = a4; + v7 = v5 + 2 * (a3 + v6); + if ( a3 > *(_DWORD *)(*a2 - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + *(_DWORD *)(*a2 - 12)); + result = std::wstring::_S_construct((_WORD *)(v5 + 2 * a3), v7); + *this = result; + return result; +} + +//----- (004C76D0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, int *a2, unsigned int a3, unsigned int a4, int a5) +{ + int v6; // ecx + unsigned int v7; // eax + int v8; // eax + _DWORD *result; // eax + + v6 = *a2; + v7 = *(_DWORD *)(*a2 - 12) - a3; + if ( v7 > a4 ) + v7 = a4; + v8 = v6 + 2 * (a3 + v7); + if ( a3 > *(_DWORD *)(*a2 - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + *(_DWORD *)(*a2 - 12)); + result = std::wstring::_S_construct((_WORD *)(v6 + 2 * a3), v8); + *this = result; + return result; +} + +//----- (004C7740) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4) +{ + _DWORD *result; // eax + + result = std::wstring::_S_construct(a2, (int)&a2[a3]); + *this = result; + return result; +} + +//----- (004C7780) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, unsigned int a2, __int16 a3, int a4) +{ + _DWORD *result; // eax + + result = std::wstring::_S_construct(a2, a3); + *this = result; + return result; +} + +//----- (004C77B0) -------------------------------------------------------- +_WORD *__fastcall std::wstring::basic_string(_DWORD *a1) +{ + char *v2; // eax + _WORD *result; // eax + + v2 = (char *)operator new(0xEu); + *((_DWORD *)v2 + 1) = 0; + result = v2 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *a1 = result; + return result; +} + +//----- (004C77F0) -------------------------------------------------------- +int __thiscall std::wstring::basic_string<__gnu_cxx::__normal_iterator>( + _DWORD *this, + _WORD *Src, + int a3, + int a4) +{ + size_t Size; // esi + int v6; // ebp + _DWORD *v7; // ebx + void *v8; // ecx + int result; // eax + + Size = a3 - (_DWORD)Src; + v6 = (a3 - (int)Src) >> 1; + v7 = std::wstring::_Rep::_S_create(v6, 0); + v8 = v7 + 3; + if ( v6 == 1 ) + { + *((_WORD *)v7 + 6) = *Src; + } + else if ( v6 ) + { + memcpy(v8, Src, Size); + v8 = v7 + 3; + } + result = 0; + v7[2] = 0; + *v7 = v6; + *(_WORD *)((char *)v7 + Size + 12) = 0; + *this = v8; + return result; +} + +//----- (004C7880) -------------------------------------------------------- +int __thiscall std::wstring::basic_string(_DWORD *this, _WORD *Src, int a3, int a4) +{ + size_t Size; // esi + int v6; // ebp + int *v7; // eax + int *v8; // ebx + _DWORD *v9; // ecx + int result; // eax + _DWORD *v11; // [esp+1Ch] [ebp-20h] + + if ( !Src && a3 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + Size = a3 - (_DWORD)Src; + v6 = (a3 - (int)Src) >> 1; + v7 = std::wstring::_Rep::_S_create(v6, 0); + v8 = v7; + v9 = v7 + 3; + if ( v6 == 1 ) + { + *((_WORD *)v7 + 6) = *Src; + } + else if ( v6 ) + { + v11 = v7 + 3; + memcpy(v7 + 3, Src, Size); + v9 = v11; + } + result = 0; + v8[2] = 0; + *v8 = v6; + *(_WORD *)((char *)v8 + Size + 12) = 0; + *this = v9; + return result; +} + +//----- (004C7930) -------------------------------------------------------- +int __thiscall std::wstring::basic_string(_DWORD *this, _WORD *Src, int a3, int a4) +{ + size_t Size; // esi + int v6; // ebp + int *v7; // eax + int *v8; // ebx + _DWORD *v9; // ecx + int result; // eax + _DWORD *v11; // [esp+1Ch] [ebp-20h] + + if ( !Src && a3 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + Size = a3 - (_DWORD)Src; + v6 = (a3 - (int)Src) >> 1; + v7 = std::wstring::_Rep::_S_create(v6, 0); + v8 = v7; + v9 = v7 + 3; + if ( v6 == 1 ) + { + *((_WORD *)v7 + 6) = *Src; + } + else if ( v6 ) + { + v11 = v7 + 3; + memcpy(v7 + 3, Src, Size); + v9 = v11; + } + result = 0; + v8[2] = 0; + *v8 = v6; + *(_WORD *)((char *)v8 + Size + 12) = 0; + *this = v9; + return result; +} + +//----- (004C79E0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2) +{ + char *v2; // eax + _WORD *result; // eax + + *this = *a2; + v2 = (char *)operator new(0xEu); + *((_DWORD *)v2 + 1) = 0; + result = v2 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *a2 = result; + return result; +} + +//----- (004C7A20) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, int a3) +{ + char *v3; // eax + _WORD *result; // eax + + *this = *a2; + v3 = (char *)operator new(0xEu); + *((_DWORD *)v3 + 1) = 0; + result = v3 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *a2 = result; + return result; +} + +//----- (004C7A60) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, wchar_t *String, int a3) +{ + int v3; // eax + _DWORD *result; // eax + + v3 = -2; + if ( String ) + v3 = (int)&String[wcslen(String)]; + result = std::wstring::_S_construct(String, v3); + *this = result; + return result; +} + +//----- (004C7AB0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4) +{ + _DWORD *result; // eax + + result = std::wstring::_S_construct(a2, (int)&a2[a3]); + *this = result; + return result; +} + +//----- (004C7AF0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2) +{ + char *v3; // eax + _WORD *result; // eax + + v3 = (char *)operator new(0xEu); + *((_DWORD *)v3 + 1) = 0; + result = v3 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *this = result; + return result; +} + +//----- (004C7B30) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + char v4[13]; // [esp+1Fh] [ebp-Dh] BYREF + + result = (_DWORD *)*a2; + if ( *(int *)(*a2 - 4) < 0 ) + { + result = std::wstring::_Rep::_M_clone(result - 3, (int)v4, 0); + *this = result; + } + else + { + if ( _CRT_MT ) + _InterlockedAdd(result - 1, 1u); + else + ++*(result - 1); + *this = result; + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; +// 4C7B30: using guessed type char var_D[13]; + +//----- (004C7BA0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, int a3) +{ + _DWORD *result; // eax + + result = (_DWORD *)*a2; + if ( *(int *)(*a2 - 4) < 0 ) + { + result = std::wstring::_Rep::_M_clone(result - 3, a3, 0); + *this = result; + } + else + { + if ( _CRT_MT ) + _InterlockedAdd(result - 1, 1u); + else + ++*(result - 1); + *this = result; + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004C7C10) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4) +{ + unsigned int v5; // edx + _DWORD *result; // eax + + v5 = *(_DWORD *)(*a2 - 12); + if ( a3 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + *(_DWORD *)(*a2 - 12)); + result = std::wstring::_S_construct((_WORD *)(*a2 + 2 * a3), *a2 + 2 * v5); + *this = result; + return result; +} + +//----- (004C7C70) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, int *a2, unsigned int a3, unsigned int a4) +{ + int v5; // ecx + unsigned int v6; // eax + int v7; // eax + _DWORD *result; // eax + + v5 = *a2; + v6 = *(_DWORD *)(*a2 - 12) - a3; + if ( v6 > a4 ) + v6 = a4; + v7 = v5 + 2 * (a3 + v6); + if ( a3 > *(_DWORD *)(*a2 - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + *(_DWORD *)(*a2 - 12)); + result = std::wstring::_S_construct((_WORD *)(v5 + 2 * a3), v7); + *this = result; + return result; +} + +//----- (004C7CE0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, int *a2, unsigned int a3, unsigned int a4, int a5) +{ + int v6; // ecx + unsigned int v7; // eax + int v8; // eax + _DWORD *result; // eax + + v6 = *a2; + v7 = *(_DWORD *)(*a2 - 12) - a3; + if ( v7 > a4 ) + v7 = a4; + v8 = v6 + 2 * (a3 + v7); + if ( a3 > *(_DWORD *)(*a2 - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + *(_DWORD *)(*a2 - 12)); + result = std::wstring::_S_construct((_WORD *)(v6 + 2 * a3), v8); + *this = result; + return result; +} + +//----- (004C7D50) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4) +{ + _DWORD *result; // eax + + result = std::wstring::_S_construct(a2, (int)&a2[a3]); + *this = result; + return result; +} + +//----- (004C7D90) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, unsigned int a2, __int16 a3, int a4) +{ + _DWORD *result; // eax + + result = std::wstring::_S_construct(a2, a3); + *this = result; + return result; +} + +//----- (004C7DC0) -------------------------------------------------------- +_WORD *__fastcall std::wstring::basic_string(_DWORD *a1) +{ + char *v2; // eax + _WORD *result; // eax + + v2 = (char *)operator new(0xEu); + *((_DWORD *)v2 + 1) = 0; + result = v2 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *a1 = result; + return result; +} + +//----- (004C7E00) -------------------------------------------------------- +int __thiscall std::wstring::basic_string<__gnu_cxx::__normal_iterator>( + _DWORD *this, + _WORD *Src, + int a3, + int a4) +{ + size_t Size; // esi + int v6; // ebp + _DWORD *v7; // ebx + void *v8; // ecx + int result; // eax + + Size = a3 - (_DWORD)Src; + v6 = (a3 - (int)Src) >> 1; + v7 = std::wstring::_Rep::_S_create(v6, 0); + v8 = v7 + 3; + if ( v6 == 1 ) + { + *((_WORD *)v7 + 6) = *Src; + } + else if ( v6 ) + { + memcpy(v8, Src, Size); + v8 = v7 + 3; + } + result = 0; + v7[2] = 0; + *v7 = v6; + *(_WORD *)((char *)v7 + Size + 12) = 0; + *this = v8; + return result; +} + +//----- (004C7E90) -------------------------------------------------------- +int __thiscall std::wstring::basic_string(_DWORD *this, _WORD *Src, int a3, int a4) +{ + size_t Size; // esi + int v6; // ebp + int *v7; // eax + int *v8; // ebx + _DWORD *v9; // ecx + int result; // eax + _DWORD *v11; // [esp+1Ch] [ebp-20h] + + if ( !Src && a3 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + Size = a3 - (_DWORD)Src; + v6 = (a3 - (int)Src) >> 1; + v7 = std::wstring::_Rep::_S_create(v6, 0); + v8 = v7; + v9 = v7 + 3; + if ( v6 == 1 ) + { + *((_WORD *)v7 + 6) = *Src; + } + else if ( v6 ) + { + v11 = v7 + 3; + memcpy(v7 + 3, Src, Size); + v9 = v11; + } + result = 0; + v8[2] = 0; + *v8 = v6; + *(_WORD *)((char *)v8 + Size + 12) = 0; + *this = v9; + return result; +} + +//----- (004C7F40) -------------------------------------------------------- +int __thiscall std::wstring::basic_string(_DWORD *this, _WORD *Src, int a3, int a4) +{ + size_t Size; // esi + int v6; // ebp + int *v7; // eax + int *v8; // ebx + _DWORD *v9; // ecx + int result; // eax + _DWORD *v11; // [esp+1Ch] [ebp-20h] + + if ( !Src && a3 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + Size = a3 - (_DWORD)Src; + v6 = (a3 - (int)Src) >> 1; + v7 = std::wstring::_Rep::_S_create(v6, 0); + v8 = v7; + v9 = v7 + 3; + if ( v6 == 1 ) + { + *((_WORD *)v7 + 6) = *Src; + } + else if ( v6 ) + { + v11 = v7 + 3; + memcpy(v7 + 3, Src, Size); + v9 = v11; + } + result = 0; + v8[2] = 0; + *v8 = v6; + *(_WORD *)((char *)v8 + Size + 12) = 0; + *this = v9; + return result; +} + +//----- (004C7FF0) -------------------------------------------------------- +void __fastcall std::wstring::~wstring(int *a1) +{ + int v1; // eax + int v2; // edx + + v1 = *a1; + if ( !_CRT_MT ) + { + v2 = *(_DWORD *)(v1 - 4); + *(_DWORD *)(v1 - 4) = v2 - 1; + if ( v2 > 0 ) + return; +LABEL_5: + operator delete((void *)(v1 - 12)); + return; + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v1 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_5; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004C8030) -------------------------------------------------------- +void __fastcall std::wstring::~wstring(int *a1) +{ + int v1; // eax + int v2; // edx + + v1 = *a1; + if ( !_CRT_MT ) + { + v2 = *(_DWORD *)(v1 - 4); + *(_DWORD *)(v1 - 4) = v2 - 1; + if ( v2 > 0 ) + return; +LABEL_5: + operator delete((void *)(v1 - 12)); + return; + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v1 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_5; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004C8070) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::operator=(_DWORD *this, int *a2) +{ + _DWORD *result; // eax + int v3; // edx + int v4; // ecx + + result = this; + v3 = *this; + if ( *(int *)(*this - 4) < 0 ) + *(_DWORD *)(v3 - 4) = 0; + v4 = *a2; + if ( *(int *)(*a2 - 4) < 0 ) + *(_DWORD *)(v4 - 4) = 0; + *result = v4; + *a2 = v3; + return result; +} + +//----- (004C80B0) -------------------------------------------------------- +int **__thiscall std::wstring::operator=(int **this, wchar_t *String) +{ + unsigned int v3; // eax + + v3 = wcslen(String); + return std::wstring::assign(this, (char *)String, v3); +} + +//----- (004C80E0) -------------------------------------------------------- +int *__thiscall std::wstring::operator=(int *this, _DWORD *a2) +{ + _DWORD *v3; // esi + int v4; // eax + int v5; // edx + char v7[13]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = (_DWORD *)*a2; + if ( *this != *a2 ) + { + if ( (int)*(v3 - 1) < 0 ) + { + v3 = std::wstring::_Rep::_M_clone(v3 - 3, (int)v7, 0); + v4 = *this; + if ( !_CRT_MT ) + goto LABEL_6; + } + else + { + if ( _CRT_MT ) + _InterlockedAdd(v3 - 1, 1u); + else + ++*(v3 - 1); + v4 = *this; + if ( !_CRT_MT ) + { +LABEL_6: + v5 = *(_DWORD *)(v4 - 4); + *(_DWORD *)(v4 - 4) = v5 - 1; + if ( v5 > 0 ) + { +LABEL_7: + *this = (int)v3; + return this; + } +LABEL_11: + operator delete((void *)(v4 - 12)); + *this = (int)v3; + return this; + } + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v4 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_7; + goto LABEL_11; + } + return this; +} +// 53E1E4: using guessed type int _CRT_MT; +// 4C80E0: using guessed type char var_D[13]; + +//----- (004C8190) -------------------------------------------------------- +int **__thiscall std::wstring::operator=(int **this, char *a2, int a3) +{ + std::wstring::assign(this, a2, a3); + return this; +} + +//----- (004C81C0) -------------------------------------------------------- +int **__thiscall std::wstring::operator=(int **this, __int16 a2) +{ + std::wstring::_M_mutate(this, 0, *(*this - 3), 1); + *(_WORD *)*this = a2; + return this; +} + +//----- (004C8200) -------------------------------------------------------- +char *__thiscall std::wstring::operator[](int **this, int a2) +{ + int *v2; // eax + int *v5; // eax + + v2 = *this; + if ( *(*this - 1) < 0 ) + return (char *)v2 + 2 * a2; + if ( *(v2 - 1) > 0 ) + std::wstring::_M_mutate(this, 0, 0, 0); + v5 = *this; + *(v5 - 1) = -1; + return (char *)v5 + 2 * a2; +} + +//----- (004C8260) -------------------------------------------------------- +int *__thiscall std::wstring::operator+=(int *this, wchar_t *String) +{ + unsigned int v3; // eax + + v3 = wcslen(String); + return std::wstring::append(this, (char *)String, v3); +} + +//----- (004C82B0) -------------------------------------------------------- +int *__thiscall std::wstring::operator+=(int *this, __int16 a2) +{ + int v3; // edx + int v4; // esi + int v5; // eax + + v3 = *(_DWORD *)(*this - 12); + v4 = v3 + 1; + if ( (unsigned int)(v3 + 1) > *(_DWORD *)(*this - 8) || *(int *)(*this - 4) > 0 ) + std::wstring::reserve(this, v3 + 1); + v5 = *this; + *(_WORD *)(v5 + 2 * *(_DWORD *)(*this - 12)) = a2; + *(_DWORD *)(v5 - 4) = 0; + *(_DWORD *)(v5 - 12) = v4; + *(_WORD *)(v5 + 2 * v4) = 0; + return this; +} + +//----- (004C8310) -------------------------------------------------------- +void __userpurge std::iostream::swap(_DWORD *a1@, std::iostream *this, std::iostream *a3) +{ + std::ios_base *v4; // esi + std::ios_base *v5; // ebx + int v6; // edx + char v7; // cl + char v8; // cl + int v9; // edx + std::ios_base *v10; // [esp+4h] [ebp-68h] + + v4 = (std::ios_base *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + v5 = (std::iostream *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)); + std::ios_base::_M_swap(v4, v5, v10); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + std::ios::_M_cache_locale(v5, (int)v5 + 108); + v6 = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = *((_DWORD *)v5 + 28); + *((_DWORD *)v5 + 28) = v6; + v7 = *((_BYTE *)v4 + 116); + *((_BYTE *)v4 + 116) = *((_BYTE *)v5 + 116); + LOBYTE(v6) = *((_BYTE *)v5 + 117); + *((_BYTE *)v5 + 116) = v7; + v8 = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 117) = v6; + v9 = a1[1]; + *((_BYTE *)v5 + 117) = v8; + a1[1] = *((_DWORD *)this + 1); + *((_DWORD *)this + 1) = v9; +} +// 4C834D: variable 'v10' is possibly undefined + +//----- (004C83D0) -------------------------------------------------------- +void __thiscall std::iostream::iostream(_DWORD *this, int *a2) +{ + int v2; // eax + int v3; // eax + std::ios_base *v4; // ecx + int v5; // eax + std::ios_base *v6; // [esp+4h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-48h] + _DWORD *v8; // [esp+14h] [ebp-44h] + + v8 = this + 3; + std::ios_base::ios_base(this + 3); + *((_WORD *)this + 64) = 0; + v2 = a2[1]; + *this = &unk_55B3C0; + this[1] = v2; + this[31] = 0; + v3 = *a2; + this[33] = 0; + this[34] = 0; + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(v3 - 12)); + this[3] = &unk_55B3D4; + this[35] = 0; + this[36] = 0; + lpuexcpt = v4; + std::ios_base::_M_move((int)v8, v4, v6); + std::ios::_M_cache_locale(v8, (int)(this + 30)); + this[33] = 0; + v5 = *((_DWORD *)lpuexcpt + 28); + *((_DWORD *)lpuexcpt + 28) = 0; + this[31] = v5; + *((_WORD *)this + 64) = *((_WORD *)lpuexcpt + 58); + a2[1] = 0; + *this = &off_55FE04; + this[3] = off_55FE2C; + this[2] = off_55FE18; +} +// 4C8472: variable 'v6' is possibly undefined +// 55FE04: using guessed type void (__cdecl *off_55FE04)(std::iostream *__hidden this); +// 55FE18: using guessed type void (__cdecl *off_55FE18[2])(std::iostream *__hidden this); +// 55FE2C: using guessed type void (__cdecl *off_55FE2C[2])(std::iostream *__hidden this); + +//----- (004C8520) -------------------------------------------------------- +void __thiscall std::iostream::iostream(_DWORD *this, int a2) +{ + int v2; // [esp+14h] [ebp-44h] + + v2 = (int)(this + 3); + std::ios_base::ios_base(this + 3); + this[31] = 0; + *((_WORD *)this + 64) = 0; + this[33] = 0; + this[34] = 0; + this[35] = 0; + this[36] = 0; + *this = &unk_55B3C0; + this[3] = &unk_55B3D4; + this[1] = 0; + std::ios::init(v2, a2); + this[2] = &unk_55B3E8; + this[3] = &unk_55B3FC; + std::ios::init(v2, a2); + *this = &off_55FE04; + this[3] = off_55FE2C; + this[2] = off_55FE18; +} +// 55FE04: using guessed type void (__cdecl *off_55FE04)(std::iostream *__hidden this); +// 55FE18: using guessed type void (__cdecl *off_55FE18[2])(std::iostream *__hidden this); +// 55FE2C: using guessed type void (__cdecl *off_55FE2C[2])(std::iostream *__hidden this); + +//----- (004C8660) -------------------------------------------------------- +void __fastcall std::iostream::iostream(int a1) +{ + int v1; // [esp+14h] [ebp-44h] + + v1 = a1 + 12; + std::ios_base::ios_base((_DWORD *)(a1 + 12)); + *(_DWORD *)(a1 + 124) = 0; + *(_WORD *)(a1 + 128) = 0; + *(_DWORD *)(a1 + 132) = 0; + *(_DWORD *)(a1 + 136) = 0; + *(_DWORD *)(a1 + 140) = 0; + *(_DWORD *)(a1 + 144) = 0; + *(_DWORD *)a1 = &unk_55B3C0; + *(_DWORD *)(a1 + 12) = &unk_55B3D4; + *(_DWORD *)(a1 + 4) = 0; + std::ios::init(v1, 0); + *(_DWORD *)(a1 + 8) = &unk_55B3E8; + *(_DWORD *)(a1 + 12) = &unk_55B3FC; + std::ios::init(v1, 0); + *(_DWORD *)a1 = &off_55FE04; + *(_DWORD *)(a1 + 12) = off_55FE2C; + *(_DWORD *)(a1 + 8) = off_55FE18; +} +// 55FE04: using guessed type void (__cdecl *off_55FE04)(std::iostream *__hidden this); +// 55FE18: using guessed type void (__cdecl *off_55FE18[2])(std::iostream *__hidden this); +// 55FE2C: using guessed type void (__cdecl *off_55FE2C[2])(std::iostream *__hidden this); + +//----- (004C87A0) -------------------------------------------------------- +int __thiscall std::iostream::iostream(int *this, int *a2, _DWORD *a3) +{ + int v4; // eax + int v5; // edi + int v6; // edx + __int16 v7; // ax + int v8; // eax + int v9; // edx + int v10; // eax + int v11; // edx + int result; // eax + std::ios_base *v13; // [esp+4h] [ebp-38h] + std::ios_base *v14; // [esp+1Ch] [ebp-20h] + + v4 = a2[1]; + *this = v4; + *(int *)((char *)this + *(_DWORD *)(v4 - 12)) = a2[2]; + this[1] = a3[1]; + v5 = (int)this + *(_DWORD *)(v4 - 12); + v14 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move(v5, v14, v13); + std::ios::_M_cache_locale((_DWORD *)v5, v5 + 108); + *(_DWORD *)(v5 + 120) = 0; + v6 = *((_DWORD *)v14 + 28); + *((_DWORD *)v14 + 28) = 0; + v7 = *((_WORD *)v14 + 58); + *(_DWORD *)(v5 + 112) = v6; + *(_WORD *)(v5 + 116) = v7; + v8 = a2[3]; + a3[1] = 0; + v9 = a2[4]; + this[2] = v8; + *(int *)((char *)this + *(_DWORD *)(v8 - 12) + 8) = v9; + v10 = *a2; + v11 = a2[5]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v10 - 12)) = v11; + result = a2[6]; + this[2] = result; + return result; +} +// 4C87DB: variable 'v13' is possibly undefined + +//----- (004C8850) -------------------------------------------------------- +void __thiscall std::iostream::iostream(int *this, int *a2, int a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + _DWORD *v8; // ecx + int v9; // eax + int v10; // edx + + v4 = a2[1]; + v5 = a2[2]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v4 - 12), a3); + v7 = a2[3]; + this[2] = v7; + v8 = (int *)((char *)this + *(_DWORD *)(v7 - 12) + 8); + *v8 = a2[4]; + std::ios::init((int)v8, a3); + v9 = *a2; + v10 = a2[5]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v9 - 12)) = v10; + this[2] = a2[6]; +} + +//----- (004C8950) -------------------------------------------------------- +void __thiscall std::iostream::iostream(_DWORD *ecx0, std::iostream *this) +{ + int v3; // eax + int v4; // ecx + int v5; // edx + int v6; // eax + _DWORD *v7; // ecx + int v8; // eax + int v9; // edx + + v3 = *((_DWORD *)this + 1); + v4 = *((_DWORD *)this + 2); + v5 = *(_DWORD *)(v3 - 12); + *ecx0 = v3; + *(_DWORD *)((char *)ecx0 + v5) = v4; + ecx0[1] = 0; + std::ios::init((int)ecx0 + *(_DWORD *)(v3 - 12), 0); + v6 = *((_DWORD *)this + 3); + ecx0[2] = v6; + v7 = (_DWORD *)((char *)ecx0 + *(_DWORD *)(v6 - 12) + 8); + *v7 = *((_DWORD *)this + 4); + std::ios::init((int)v7, 0); + v8 = *(_DWORD *)this; + v9 = *((_DWORD *)this + 5); + *ecx0 = *(_DWORD *)this; + *(_DWORD *)((char *)ecx0 + *(_DWORD *)(v8 - 12)) = v9; + ecx0[2] = *((_DWORD *)this + 6); +} + +//----- (004C8A50) -------------------------------------------------------- +void __fastcall std::iostream::~iostream(_DWORD *a1) +{ + _DWORD *v2; // ecx + + v2 = a1 + 3; + *(v2 - 1) = &unk_55B3E8; + *(v2 - 3) = &unk_55B3C0; + *(v2 - 2) = 0; + *v2 = &off_560E20; + std::ios_base::~ios_base((int)v2); + operator delete(a1); +} +// 560E20: using guessed type int (*off_560E20)(); + +//----- (004C8A90) -------------------------------------------------------- +void __fastcall std::iostream::~iostream(int a1) +{ + _DWORD *v1; // ecx + + *(_DWORD *)(a1 + 8) = &unk_55B3E8; + v1 = (_DWORD *)(a1 + 12); + *(v1 - 3) = &unk_55B3C0; + *(v1 - 2) = 0; + *v1 = &off_560E20; + std::ios_base::~ios_base((int)v1); +} +// 560E20: using guessed type int (*off_560E20)(); + +//----- (004C8AC0) -------------------------------------------------------- +void __thiscall std::iostream::~iostream(_DWORD *ecx0, std::iostream *this) +{ + int v2; // edx + int v3; // edx + int v4; // edx + + v2 = *(_DWORD *)this; + *ecx0 = *(_DWORD *)this; + *(_DWORD *)((char *)ecx0 + *(_DWORD *)(v2 - 12)) = *((_DWORD *)this + 5); + ecx0[2] = *((_DWORD *)this + 6); + v3 = *((_DWORD *)this + 3); + ecx0[2] = v3; + *(_DWORD *)((char *)ecx0 + *(_DWORD *)(v3 - 12) + 8) = *((_DWORD *)this + 4); + v4 = *((_DWORD *)this + 1); + *ecx0 = v4; + *(_DWORD *)((char *)ecx0 + *(_DWORD *)(v4 - 12)) = *((_DWORD *)this + 2); + ecx0[1] = 0; +} + +//----- (004C8B10) -------------------------------------------------------- +_DWORD *__thiscall std::iostream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // edx + char v6; // cl + char v7; // cl + int v8; // edx + std::ios_base *v10; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v10); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + v8 = this[1]; + *((_BYTE *)v4 + 117) = v7; + this[1] = a2[1]; + a2[1] = v8; + return this; +} +// 4C8B4D: variable 'v10' is possibly undefined + +//----- (004C8BD0) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2) +{ + char *v2; // edi + int v3; // ecx + bool v5; // [esp+8h] [ebp-80h] + char v7; // [esp+6Bh] [ebp-1Dh] BYREF + int v8[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v7, this, 0, v5); + if ( v7 ) + { + v8[0] = 0; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 48))( + v3, + *((_DWORD *)v2 + 30), + -1, + 0, + -1, + (int)this + *(_DWORD *)(*(_DWORD *)this - 12), + v8, + a2); + if ( v8[0] ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v8[0]); + } + return this; +} +// 4C8C1A: variable 'v5' is possibly undefined +// 4C8BD0: using guessed type int var_1C[7]; + +//----- (004C8D90) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2) +{ + char *v2; // edi + int v3; // ecx + bool v5; // [esp+8h] [ebp-80h] + char v7; // [esp+6Bh] [ebp-1Dh] BYREF + int v8[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v7, this, 0, v5); + if ( v7 ) + { + v8[0] = 0; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 8))( + v3, + *((_DWORD *)v2 + 30), + -1, + 0, + -1, + (int)this + *(_DWORD *)(*(_DWORD *)this - 12), + v8, + a2); + if ( v8[0] ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v8[0]); + } + return this; +} +// 4C8DDA: variable 'v5' is possibly undefined +// 4C8D90: using guessed type int var_1C[7]; + +//----- (004C8F50) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2) +{ + char *v2; // edi + int v3; // ecx + bool v5; // [esp+8h] [ebp-80h] + char v7; // [esp+6Bh] [ebp-1Dh] BYREF + int v8[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v7, this, 0, v5); + if ( v7 ) + { + v8[0] = 0; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 40))( + v3, + *((_DWORD *)v2 + 30), + -1, + 0, + -1, + (int)this + *(_DWORD *)(*(_DWORD *)this - 12), + v8, + a2); + if ( v8[0] ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v8[0]); + } + return this; +} +// 4C8F9A: variable 'v5' is possibly undefined +// 4C8F50: using guessed type int var_1C[7]; + +//----- (004C9110) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2) +{ + char *v2; // edi + int v3; // ecx + bool v5; // [esp+8h] [ebp-80h] + char v7; // [esp+6Bh] [ebp-1Dh] BYREF + int v8[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v7, this, 0, v5); + if ( v7 ) + { + v8[0] = 0; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 44))( + v3, + *((_DWORD *)v2 + 30), + -1, + 0, + -1, + (int)this + *(_DWORD *)(*(_DWORD *)this - 12), + v8, + a2); + if ( v8[0] ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v8[0]); + } + return this; +} +// 4C915A: variable 'v5' is possibly undefined +// 4C9110: using guessed type int var_1C[7]; + +//----- (004C92D0) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2) +{ + char *v2; // edi + int v3; // ecx + bool v5; // [esp+8h] [ebp-80h] + char v7; // [esp+6Bh] [ebp-1Dh] BYREF + int v8[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v7, this, 0, v5); + if ( v7 ) + { + v8[0] = 0; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 36))( + v3, + *((_DWORD *)v2 + 30), + -1, + 0, + -1, + (int)this + *(_DWORD *)(*(_DWORD *)this - 12), + v8, + a2); + if ( v8[0] ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v8[0]); + } + return this; +} +// 4C931A: variable 'v5' is possibly undefined +// 4C92D0: using guessed type int var_1C[7]; + +//----- (004C9490) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2) +{ + char *v2; // edi + int v3; // ecx + bool v5; // [esp+8h] [ebp-80h] + char v7; // [esp+6Bh] [ebp-1Dh] BYREF + int v8[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v7, this, 0, v5); + if ( v7 ) + { + v8[0] = 0; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 20))( + v3, + *((_DWORD *)v2 + 30), + -1, + 0, + -1, + (int)this + *(_DWORD *)(*(_DWORD *)this - 12), + v8, + a2); + if ( v8[0] ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v8[0]); + } + return this; +} +// 4C94DA: variable 'v5' is possibly undefined +// 4C9490: using guessed type int var_1C[7]; + +//----- (004C9650) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2) +{ + char *v2; // edi + int v3; // ecx + bool v5; // [esp+8h] [ebp-80h] + char v7; // [esp+6Bh] [ebp-1Dh] BYREF + int v8[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v7, this, 0, v5); + if ( v7 ) + { + v8[0] = 0; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 12))( + v3, + *((_DWORD *)v2 + 30), + -1, + 0, + -1, + (int)this + *(_DWORD *)(*(_DWORD *)this - 12), + v8, + a2); + if ( v8[0] ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v8[0]); + } + return this; +} +// 4C969A: variable 'v5' is possibly undefined +// 4C9650: using guessed type int var_1C[7]; + +//----- (004C9810) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2) +{ + char *v2; // edi + int v3; // ecx + bool v5; // [esp+8h] [ebp-80h] + char v7; // [esp+6Bh] [ebp-1Dh] BYREF + int v8[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v7, this, 0, v5); + if ( v7 ) + { + v8[0] = 0; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 24))( + v3, + *((_DWORD *)v2 + 30), + -1, + 0, + -1, + (int)this + *(_DWORD *)(*(_DWORD *)this - 12), + v8, + a2); + if ( v8[0] ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v8[0]); + } + return this; +} +// 4C985A: variable 'v5' is possibly undefined +// 4C9810: using guessed type int var_1C[7]; + +//----- (004C99D0) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2) +{ + char *v2; // edi + int v3; // ecx + bool v5; // [esp+8h] [ebp-80h] + char v7; // [esp+6Bh] [ebp-1Dh] BYREF + int v8[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v7, this, 0, v5); + if ( v7 ) + { + v8[0] = 0; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 16))( + v3, + *((_DWORD *)v2 + 30), + -1, + 0, + -1, + (int)this + *(_DWORD *)(*(_DWORD *)this - 12), + v8, + a2); + if ( v8[0] ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v8[0]); + } + return this; +} +// 4C9A1A: variable 'v5' is possibly undefined +// 4C99D0: using guessed type int var_1C[7]; + +//----- (004C9B90) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2) +{ + char *v2; // edi + int v3; // ecx + bool v5; // [esp+8h] [ebp-80h] + char v7; // [esp+6Bh] [ebp-1Dh] BYREF + int v8[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v7, this, 0, v5); + if ( v7 ) + { + v8[0] = 0; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 28))( + v3, + *((_DWORD *)v2 + 30), + -1, + 0, + -1, + (int)this + *(_DWORD *)(*(_DWORD *)this - 12), + v8, + a2); + if ( v8[0] ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v8[0]); + } + return this; +} +// 4C9BDA: variable 'v5' is possibly undefined +// 4C9B90: using guessed type int var_1C[7]; + +//----- (004C9D50) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::_M_extract(std::istream::sentry *this, int a2) +{ + char *v2; // edi + int v3; // ecx + bool v5; // [esp+8h] [ebp-80h] + char v7; // [esp+6Bh] [ebp-1Dh] BYREF + int v8[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v7, this, 0, v5); + if ( v7 ) + { + v8[0] = 0; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 32))( + v3, + *((_DWORD *)v2 + 30), + -1, + 0, + -1, + (int)this + *(_DWORD *)(*(_DWORD *)this - 12), + v8, + a2); + if ( v8[0] ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v8[0]); + } + return this; +} +// 4C9D9A: variable 'v5' is possibly undefined +// 4C9D50: using guessed type int var_1C[7]; + +//----- (004C9F10) -------------------------------------------------------- +std::istream::sentry *__userpurge std::istream::get@( + std::istream::sentry *a1@, + std::istream *this, + char *a3, + int a4) +{ + int v4; // eax + _BYTE *v5; // esi + unsigned __int8 v7; // al + int (__stdcall *v9)(unsigned __int8); // edx + char v10; // [esp+Ch] [ebp-10h] + + v4 = *(_DWORD *)(*(_DWORD *)a1 - 12); + v5 = *(_BYTE **)((char *)a1 + v4 + 124); + if ( !v5 ) + std::__throw_bad_cast(); + if ( v5[28] ) + { + v7 = v5[39]; + } + else + { + std::ctype::_M_widen_init(*(_DWORD *)((char *)a1 + v4 + 124)); + v9 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v5 + 24); + v7 = 10; + if ( v9 != std::ctype::do_widen ) + v7 = ((int (__thiscall *)(_BYTE *, int))v9)(v5, 10); + } + return std::istream::get(a1, this, a3, v7, v10); +} +// 4C9F43: variable 'v10' is possibly undefined + +//----- (004C9F90) -------------------------------------------------------- +std::istream::sentry *__userpurge std::istream::get@( + std::istream::sentry *a1@, + std::istream *this, + char *a3, + unsigned __int8 a4, + char a5) +{ + int v6; // edx + unsigned __int8 *v7; // eax + int v8; // eax + unsigned __int8 *v9; // eax + unsigned int v10; // edx + unsigned int v11; // eax + bool v12; // [esp+8h] [ebp-80h] + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-64h] + char v15[25]; // [esp+6Fh] [ebp-19h] BYREF + + *((_DWORD *)a1 + 1) = 0; + std::istream::sentry::sentry(v15, a1, (std::istream *)1, v12); + if ( !v15[0] ) + { + if ( (int)a3 > 0 ) + *(_BYTE *)this = 0; + goto LABEL_4; + } + lpuexcpt = *(struct _Unwind_Exception **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v7 = (unsigned __int8 *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v7 < *((_DWORD *)lpuexcpt + 3) ) + { + v8 = *v7; + if ( (int)a3 <= *((_DWORD *)a1 + 1) + 1 ) + goto LABEL_7; + goto LABEL_13; + } + v8 = (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + v6 = *((_DWORD *)a1 + 1); + if ( (int)a3 <= v6 + 1 ) + { +LABEL_6: + if ( v8 != -1 ) + goto LABEL_7; + } + else if ( v8 != -1 ) + { +LABEL_13: + if ( a4 != v8 ) + { + while ( 1 ) + { + this = (std::istream *)((char *)this + 1); + *((_BYTE *)this - 1) = v8; + v10 = *((_DWORD *)lpuexcpt + 3); + ++*((_DWORD *)a1 + 1); + v11 = *((_DWORD *)lpuexcpt + 2); + if ( v11 < v10 ) + { + v9 = (unsigned __int8 *)(v11 + 1); + *((_DWORD *)lpuexcpt + 2) = v9; + } + else + { + if ( (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 40))(lpuexcpt) == -1 ) + goto LABEL_21; + v9 = (unsigned __int8 *)*((_DWORD *)lpuexcpt + 2); + v10 = *((_DWORD *)lpuexcpt + 3); + } + if ( (unsigned int)v9 >= v10 ) + { + v8 = (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + v6 = *((_DWORD *)a1 + 1); + if ( v6 + 1 >= (int)a3 ) + goto LABEL_6; + if ( v8 == -1 ) + { +LABEL_21: + if ( (int)a3 > 0 ) + { + v6 = 2; + *(_BYTE *)this = 0; + if ( *((_DWORD *)a1 + 1) ) + goto LABEL_10; + goto LABEL_23; + } + if ( !*((_DWORD *)a1 + 1) ) + { + v6 = 2; +LABEL_23: + v6 |= 4u; + goto LABEL_10; + } +LABEL_33: + v6 = 2; + goto LABEL_10; + } + } + else + { + v8 = *v9; + v6 = *((_DWORD *)a1 + 1); + if ( v6 + 1 >= (int)a3 ) + break; + } + if ( v8 == a4 ) + { + if ( (int)a3 > 0 ) + { + *(_BYTE *)this = 0; + v6 = *((_DWORD *)a1 + 1); + } + if ( !v6 ) + goto LABEL_23; + return a1; + } + } + } +LABEL_7: + if ( (int)a3 > 0 ) + { + *(_BYTE *)this = 0; + if ( *((_DWORD *)a1 + 1) ) + return a1; + goto LABEL_9; + } +LABEL_4: + if ( *((_DWORD *)a1 + 1) ) + return a1; +LABEL_9: + v6 = 4; + goto LABEL_10; + } + if ( (int)a3 <= 0 ) + { + if ( v6 ) + goto LABEL_33; + } + else + { + *(_BYTE *)this = 0; + if ( *((_DWORD *)a1 + 1) ) + goto LABEL_33; + } + v6 = 6; +LABEL_10: + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | v6); + return a1; +} +// 4C9FE7: variable 'v12' is possibly undefined +// 4C9F90: using guessed type char var_19[25]; + +//----- (004CA2F0) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::get(std::istream::sentry *this, _DWORD *a2) +{ + int v2; // eax + _BYTE *v3; // esi + unsigned __int8 v5; // al + int (__stdcall *v7)(unsigned __int8); // edx + + v2 = *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *(_BYTE **)((char *)this + v2 + 124); + if ( !v3 ) + std::__throw_bad_cast(); + if ( v3[28] ) + { + v5 = v3[39]; + } + else + { + std::ctype::_M_widen_init(*(_DWORD *)((char *)this + v2 + 124)); + v7 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v3 + 24); + v5 = 10; + if ( v7 != std::ctype::do_widen ) + v5 = ((int (__thiscall *)(_BYTE *, int))v7)(v3, 10); + } + return std::istream::get(this, a2, v5); +} + +//----- (004CA370) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::get(std::istream::sentry *this, _DWORD *a2, unsigned __int8 a3) +{ + int v3; // eax + unsigned __int8 *v5; // eax + int v6; // edx + int v7; // eax + unsigned int v8; // edx + unsigned int v9; // eax + unsigned __int8 *v10; // eax + int v11; // edx + _BYTE *v12; // edx + bool v13; // [esp+8h] [ebp-70h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-64h] + char v16[25]; // [esp+5Fh] [ebp-19h] BYREF + + *((_DWORD *)this + 1) = 0; + std::istream::sentry::sentry(v16, this, (std::istream *)1, v13); + if ( v16[0] ) + { + lpuexcpt = *(struct _Unwind_Exception **)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 120); + v5 = (unsigned __int8 *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v5 >= *((_DWORD *)lpuexcpt + 3) ) + { + v6 = (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + v7 = (unsigned __int8)v6; + if ( v6 == -1 ) + { +LABEL_20: + v3 = *((_DWORD *)this + 1) == 0 ? 6 : 2; + goto LABEL_4; + } + } + else + { + v6 = *v5; + v7 = v6; + } + if ( v6 != a3 ) + { + do + { + v12 = (_BYTE *)a2[5]; + if ( (unsigned int)v12 < a2[6] ) + { + *v12 = v7; + ++a2[5]; + } + else if ( (*(int (__thiscall **)(_DWORD *, int))(*a2 + 52))(a2, v7) == -1 ) + { + break; + } + ++*((_DWORD *)this + 1); + v8 = *((_DWORD *)lpuexcpt + 3); + v9 = *((_DWORD *)lpuexcpt + 2); + if ( v9 >= v8 ) + { + if ( (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 40))(lpuexcpt) == -1 ) + goto LABEL_20; + v10 = (unsigned __int8 *)*((_DWORD *)lpuexcpt + 2); + v8 = *((_DWORD *)lpuexcpt + 3); + } + else + { + v10 = (unsigned __int8 *)(v9 + 1); + *((_DWORD *)lpuexcpt + 2) = v10; + } + if ( (unsigned int)v10 >= v8 ) + { + v11 = (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + v7 = (unsigned __int8)v11; + if ( v11 == -1 ) + goto LABEL_20; + } + else + { + v7 = *v10; + v11 = (unsigned __int8)v7; + } + } + while ( a3 != v11 ); + } + } + if ( !*((_DWORD *)this + 1) ) + { + v3 = 4; +LABEL_4: + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v3); + } + return this; +} +// 4CA3C7: variable 'v13' is possibly undefined +// 4CA370: using guessed type char var_19[25]; + +//----- (004CA600) -------------------------------------------------------- +std::istream::sentry *__userpurge std::istream::get@(std::istream::sentry *a1@, std::istream *this, char *a3) +{ + int v3; // eax + _DWORD *v5; // ecx + char *v6; // eax + char v7; // dl + int v8; // eax + bool v9; // [esp+8h] [ebp-70h] + char v11[25]; // [esp+5Fh] [ebp-19h] BYREF + + *((_DWORD *)a1 + 1) = 0; + std::istream::sentry::sentry(v11, a1, (std::istream *)1, v9); + if ( v11[0] ) + { + v5 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v6 = (char *)v5[2]; + if ( (unsigned int)v6 >= v5[3] ) + { + v8 = (*(int (__fastcall **)(_DWORD *))(*v5 + 40))(v5); + if ( v8 == -1 ) + { + v3 = *((_DWORD *)a1 + 1) == 0 ? 6 : 2; + goto LABEL_4; + } + v7 = v8; + } + else + { + v7 = *v6; + v5[2] = v6 + 1; + } + *((_DWORD *)a1 + 1) = 1; + *(_BYTE *)this = v7; + if ( *((_DWORD *)a1 + 1) ) + return a1; +LABEL_3: + v3 = 4; +LABEL_4: + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | v3); + return a1; + } + if ( !*((_DWORD *)a1 + 1) ) + goto LABEL_3; + return a1; +} +// 4CA651: variable 'v9' is possibly undefined +// 4CA600: using guessed type char var_19[25]; + +//----- (004CA7D0) -------------------------------------------------------- +int __fastcall std::istream::get(std::istream::sentry *a1) +{ + _DWORD *v1; // ecx + unsigned __int8 *v2; // eax + struct _Unwind_Exception *v3; // edi + int v5; // eax + bool v6; // [esp+8h] [ebp-70h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-64h] + char v9[25]; // [esp+5Fh] [ebp-19h] BYREF + + *((_DWORD *)a1 + 1) = 0; + std::istream::sentry::sentry(v9, a1, (std::istream *)1, v6); + if ( !v9[0] ) + { + if ( *((_DWORD *)a1 + 1) ) + return -1; + v5 = 4; +LABEL_8: + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | v5); + return -1; + } + v1 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v2 = (unsigned __int8 *)v1[2]; + if ( (unsigned int)v2 >= v1[3] ) + { + lpuexcpt = (struct _Unwind_Exception *)(*(int (__fastcall **)(_DWORD *))(*v1 + 40))(v1); + if ( lpuexcpt != (struct _Unwind_Exception *)-1 ) + goto LABEL_4; + v5 = *((_DWORD *)a1 + 1) == 0 ? 6 : 2; + goto LABEL_8; + } + v3 = (struct _Unwind_Exception *)*v2; + v1[2] = v2 + 1; + lpuexcpt = v3; +LABEL_4: + *((_DWORD *)a1 + 1) = 1; + return (int)lpuexcpt; +} +// 4CA821: variable 'v6' is possibly undefined +// 4CA7D0: using guessed type char var_19[25]; + +//----- (004CA990) -------------------------------------------------------- +int __fastcall std::istream::peek(std::istream::sentry *a1) +{ + _DWORD *v1; // ecx + unsigned __int8 *v2; // eax + bool v4; // [esp+8h] [ebp-70h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-64h] + char v7[25]; // [esp+5Fh] [ebp-19h] BYREF + + *((_DWORD *)a1 + 1) = 0; + std::istream::sentry::sentry(v7, a1, (std::istream *)1, v4); + if ( !v7[0] ) + return -1; + v1 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v2 = (unsigned __int8 *)v1[2]; + if ( (unsigned int)v2 < v1[3] ) + return *v2; + lpuexcpt = (struct _Unwind_Exception *)(*(int (__fastcall **)(_DWORD *))(*v1 + 36))(v1); + if ( lpuexcpt == (struct _Unwind_Exception *)-1 ) + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 2); + return (int)lpuexcpt; +} +// 4CA9E1: variable 'v4' is possibly undefined +// 4CA990: using guessed type char var_19[25]; + +//----- (004CAB30) -------------------------------------------------------- +std::istream::sentry *__userpurge std::istream::read@( + std::istream::sentry *a1@, + std::istream *this, + char *a3, + int a4) +{ + int v4; // ecx + char *v5; // eax + bool v7; // [esp+8h] [ebp-70h] + char v9[25]; // [esp+5Fh] [ebp-19h] BYREF + + *((_DWORD *)a1 + 1) = 0; + std::istream::sentry::sentry(v9, a1, (std::istream *)1, v7); + if ( v9[0] ) + { + v4 = *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v5 = (char *)(*(int (__thiscall **)(int, std::istream *, char *))(*(_DWORD *)v4 + 32))(v4, this, a3); + *((_DWORD *)a1 + 1) = v5; + if ( a3 != v5 ) + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 6); + } + return a1; +} +// 4CAB81: variable 'v7' is possibly undefined +// 4CAB30: using guessed type char var_19[25]; + +//----- (004CACC0) -------------------------------------------------------- +void __userpurge std::istream::swap(_DWORD *a1@, std::istream *this, std::istream *a3) +{ + std::ios_base *v4; // esi + std::ios_base *v5; // ebx + int v6; // edx + char v7; // cl + char v8; // cl + int v9; // edx + std::ios_base *v10; // [esp+4h] [ebp-68h] + + v4 = (std::ios_base *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + v5 = (std::istream *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)); + std::ios_base::_M_swap(v4, v5, v10); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + std::ios::_M_cache_locale(v5, (int)v5 + 108); + v6 = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = *((_DWORD *)v5 + 28); + *((_DWORD *)v5 + 28) = v6; + v7 = *((_BYTE *)v4 + 116); + *((_BYTE *)v4 + 116) = *((_BYTE *)v5 + 116); + LOBYTE(v6) = *((_BYTE *)v5 + 117); + *((_BYTE *)v5 + 116) = v7; + v8 = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 117) = v6; + v9 = a1[1]; + *((_BYTE *)v5 + 117) = v8; + a1[1] = *((_DWORD *)this + 1); + *((_DWORD *)this + 1) = v9; +} +// 4CACFD: variable 'v10' is possibly undefined + +//----- (004CAD80) -------------------------------------------------------- +int __fastcall std::istream::sync(std::istream::sentry *a1) +{ + int v1; // ecx + bool v3; // [esp+8h] [ebp-70h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-64h] + char v6[25]; // [esp+5Fh] [ebp-19h] BYREF + + std::istream::sentry::sentry(v6, a1, (std::istream *)1, v3); + if ( !v6[0] ) + return -1; + v1 = *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + if ( !v1 ) + return -1; + lpuexcpt = (struct _Unwind_Exception *)(*(int (__fastcall **)(int))(*(_DWORD *)v1 + 24))(v1); + if ( lpuexcpt != (struct _Unwind_Exception *)-1 ) + return 0; + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 1); + return (int)lpuexcpt; +} +// 4CADCA: variable 'v3' is possibly undefined +// 4CAD80: using guessed type char var_19[25]; + +//----- (004CAF10) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::seekg(std::istream::sentry *this, int a2, int a3, int a4, int a5) +{ + char *v5; // edi + _DWORD *v6; // eax + int v7; // edi + void (__thiscall *v8)(int *, _DWORD *, int, int, int, int, int); // eax + _DWORD *v10; // [esp+0h] [ebp-B8h] + bool v11; // [esp+8h] [ebp-B0h] + char v13; // [esp+7Fh] [ebp-39h] BYREF + int v14[14]; // [esp+80h] [ebp-38h] BYREF + + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((_BYTE *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) & 0xFFFFFFFD); + std::istream::sentry::sentry(&v13, this, (std::istream *)1, v11); + if ( v13 ) + { + v5 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + if ( (v5[20] & 5) == 0 ) + { + v6 = (_DWORD *)*((_DWORD *)v5 + 30); + v7 = *v6; + v14[6] = a4; + v10 = v6; + v8 = *(void (__thiscall **)(int *, _DWORD *, int, int, int, int, int))(v7 + 20); + v14[4] = a2; + v14[5] = a3; + v14[7] = a5; + v8(v14, v10, a2, a3, a4, a5, 8); + if ( (v14[0] & v14[1]) == -1 ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | 4); + } + } + return this; +} +// 4CAF9F: variable 'v11' is possibly undefined + +//----- (004CB150) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::seekg(std::istream::sentry *this, int a2, int a3, int a4) +{ + char *v4; // edi + bool v6; // [esp+8h] [ebp-90h] + char v8; // [esp+6Fh] [ebp-29h] BYREF + int v9[10]; // [esp+70h] [ebp-28h] BYREF + + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((_BYTE *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) & 0xFFFFFFFD); + std::istream::sentry::sentry(&v8, this, (std::istream *)1, v6); + if ( v8 ) + { + v4 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + if ( (v4[20] & 5) == 0 ) + { + (*(void (__thiscall **)(int *, _DWORD, int, int, int, int))(**((_DWORD **)v4 + 30) + 16))( + v9, + *((_DWORD *)v4 + 30), + a2, + a3, + a4, + 8); + if ( (v9[0] & v9[1]) == -1 ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | 4); + } + } + return this; +} +// 4CB1C4: variable 'v6' is possibly undefined + +//----- (004CB320) -------------------------------------------------------- +_DWORD *__thiscall std::istream::tellg(_DWORD *ecx0, std::istream *this) +{ + char *v2; // esi + bool v4; // [esp+8h] [ebp-90h] + char v6; // [esp+6Fh] [ebp-29h] BYREF + int v7[10]; // [esp+70h] [ebp-28h] BYREF + + *ecx0 = -1; + ecx0[1] = -1; + ecx0[2] = 0; + std::istream::sentry::sentry(&v6, this, (std::istream *)1, v4); + if ( v6 ) + { + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + if ( (v2[20] & 5) == 0 ) + { + (*(void (__thiscall **)(int *, _DWORD, _DWORD, _DWORD, int, int))(**((_DWORD **)v2 + 30) + 16))( + v7, + *((_DWORD *)v2 + 30), + 0, + 0, + 1, + 8); + *ecx0 = v7[0]; + ecx0[1] = v7[1]; + ecx0[2] = v7[2]; + } + } + return ecx0; +} +// 4CB384: variable 'v4' is possibly undefined + +//----- (004CB4D0) -------------------------------------------------------- +std::istream::sentry *__fastcall std::istream::unget(std::istream::sentry *a1) +{ + int v2; // eax + _DWORD *v3; // ecx + _DWORD *v4; // eax + unsigned int v5; // eax + bool v7; // [esp+8h] [ebp-70h] + char v9[25]; // [esp+5Fh] [ebp-19h] BYREF + + v2 = *(_DWORD *)a1; + *((_DWORD *)a1 + 1) = 0; + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(v2 - 12)), + *(_DWORD *)((_BYTE *)a1 + *(_DWORD *)(v2 - 12) + 20) & 0xFFFFFFFD); + std::istream::sentry::sentry(v9, a1, (std::istream *)1, v7); + if ( v9[0] ) + { + v3 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v4 = (_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)); + if ( v3 ) + { + v5 = v3[2]; + if ( v3[1] < v5 ) + { + v3[2] = v5 - 1; + return a1; + } + if ( (*(int (__thiscall **)(_DWORD *, int))(*v3 + 44))(v3, -1) != -1 ) + return a1; + v4 = (_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)); + } + std::ios::clear(v4, v4[5] | 1); + } + return a1; +} +// 4CB53C: variable 'v7' is possibly undefined +// 4CB4D0: using guessed type char var_19[25]; + +//----- (004CB680) -------------------------------------------------------- +std::istream::sentry *__userpurge std::istream::ignore@( + std::istream::sentry *a1@, + std::istream *this, + int a3) +{ + unsigned __int8 *v4; // eax + int v5; // edx + int i; // eax + unsigned int v7; // ebx + unsigned int v8; // edx + int v9; // ecx + unsigned __int8 *v10; // edx + unsigned __int8 *v11; // edx + bool v12; // [esp+8h] [ebp-80h] + _DWORD *v13; // [esp+1Ch] [ebp-6Ch] + char v14; // [esp+23h] [ebp-65h] + char lpuexcpt; // [esp+24h] [ebp-64h] + std::istream::sentry *v16; // [esp+28h] [ebp-60h] + char v17[25]; // [esp+6Fh] [ebp-19h] BYREF + + v16 = a1; + if ( this == (std::istream *)1 ) + return std::istream::ignore(a1); + *((_DWORD *)a1 + 1) = 0; + std::istream::sentry::sentry(v17, a1, (std::istream *)1, v12); + if ( (int)this > 0 ) + { + lpuexcpt = v17[0]; + if ( v17[0] ) + { + v13 = *(_DWORD **)((char *)v16 + *(_DWORD *)(*(_DWORD *)v16 - 12) + 120); + v4 = (unsigned __int8 *)v13[2]; + if ( (unsigned int)v4 >= v13[3] ) + v5 = (*(int (__fastcall **)(_DWORD *))(*v13 + 36))(v13); + else + v5 = *v4; + v14 = 0; + for ( i = *((_DWORD *)v16 + 1); ; i = 0x80000000 ) + { + while ( 2 ) + { + if ( (int)this > i ) + { + while ( 1 ) + { + if ( v5 == -1 ) + goto LABEL_23; + v7 = v13[3]; + v8 = v13[2]; + v9 = (int)this - i; + if ( (int)this - i > (int)(v7 - v8) ) + v9 = v13[3] - v8; + if ( v9 <= 1 ) + break; + v10 = (unsigned __int8 *)(v9 + v8); + i += v9; + v13[2] = v10; + *((_DWORD *)v16 + 1) = i; + if ( v7 <= (unsigned int)v10 ) + goto LABEL_26; + v5 = *v10; + if ( (int)this <= i ) + goto LABEL_16; + } + *((_DWORD *)v16 + 1) = i + 1; + if ( v8 >= v7 ) + { + if ( (*(int (__fastcall **)(_DWORD *))(*v13 + 40))(v13) == -1 ) + { +LABEL_23: + if ( v14 ) + *((_DWORD *)v16 + 1) = 0x7FFFFFFF; + goto LABEL_25; + } + v11 = (unsigned __int8 *)v13[2]; + v7 = v13[3]; + } + else + { + v11 = (unsigned __int8 *)(v8 + 1); + v13[2] = v11; + } + if ( v7 > (unsigned int)v11 ) + { + v5 = *v11; + i = *((_DWORD *)v16 + 1); + continue; + } +LABEL_26: + v5 = (*(int (__fastcall **)(_DWORD *))(*v13 + 36))(v13); + i = *((_DWORD *)v16 + 1); + continue; + } + break; + } +LABEL_16: + if ( this != (std::istream *)0x7FFFFFFF ) + break; + if ( v5 == -1 ) + goto LABEL_23; + *((_DWORD *)v16 + 1) = 0x80000000; + v14 = lpuexcpt; + } + if ( v14 ) + *((_DWORD *)v16 + 1) = 0x7FFFFFFF; + if ( v5 == -1 ) +LABEL_25: + std::ios::clear( + (std::istream::sentry *)((char *)v16 + *(_DWORD *)(*(_DWORD *)v16 - 12)), + *(_DWORD *)((char *)v16 + *(_DWORD *)(*(_DWORD *)v16 - 12) + 20) | 2); + } + } + return v16; +} +// 4CB6D7: variable 'v12' is possibly undefined +// 4CB680: using guessed type char var_19[25]; + +//----- (004CB980) -------------------------------------------------------- +std::istream::sentry *__userpurge std::istream::ignore@( + std::istream::sentry *a1@, + std::istream *this, + int a3, + int a4) +{ + unsigned __int8 *v5; // eax + int v6; // eax + unsigned __int8 *v7; // ebx + signed int v8; // edi + _BYTE *v9; // eax + _DWORD *v10; // edx + signed int v11; // ecx + unsigned __int8 *v12; // ebx + unsigned int v13; // eax + unsigned __int8 *v14; // eax + int v15; // [esp+4h] [ebp-94h] + bool v16; // [esp+8h] [ebp-90h] + unsigned int v17; // [esp+24h] [ebp-74h] + _DWORD *v18; // [esp+2Ch] [ebp-6Ch] + char v19; // [esp+32h] [ebp-66h] + char v20; // [esp+33h] [ebp-65h] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + std::istream::sentry *v22; // [esp+38h] [ebp-60h] + char v23[25]; // [esp+7Fh] [ebp-19h] BYREF + + v22 = a1; + if ( a3 == -1 ) + return std::istream::ignore(a1, this, v15); + *((_DWORD *)a1 + 1) = 0; + std::istream::sentry::sentry(v23, a1, (std::istream *)1, v16); + if ( (int)this > 0 ) + { + v20 = v23[0]; + if ( v23[0] ) + { + v18 = *(_DWORD **)((char *)v22 + *(_DWORD *)(*(_DWORD *)v22 - 12) + 120); + v5 = (unsigned __int8 *)v18[2]; + if ( (unsigned int)v5 >= v18[3] ) + v6 = (*(int (__fastcall **)(_DWORD *))(*v18 + 36))(v18); + else + v6 = *v5; + v19 = 0; +LABEL_9: + for ( lpuexcpt = (struct _Unwind_Exception *)*((_DWORD *)v22 + 1); + (int)this <= (int)lpuexcpt; + lpuexcpt = (struct _Unwind_Exception *)0x80000000 ) + { +LABEL_19: + if ( this != (std::istream *)0x7FFFFFFF ) + { + if ( v19 ) + goto LABEL_25; + goto LABEL_26; + } + if ( v6 == -1 ) + { +LABEL_33: + if ( v19 ) + *((_DWORD *)v22 + 1) = 0x7FFFFFFF; + goto LABEL_35; + } + if ( v6 == a3 ) + { + if ( !v19 ) + { +LABEL_29: + if ( lpuexcpt != (struct _Unwind_Exception *)0x7FFFFFFF ) +LABEL_30: + *((_DWORD *)v22 + 1) = (char *)lpuexcpt + 1; + v13 = v18[2]; + if ( v13 >= v18[3] ) + (*(void (__fastcall **)(_DWORD *))(*v18 + 40))(v18); + else + v18[2] = v13 + 1; + return v22; + } +LABEL_25: + *((_DWORD *)v22 + 1) = 0x7FFFFFFF; +LABEL_26: + if ( v6 == -1 ) + { +LABEL_35: + std::ios::clear( + (std::istream::sentry *)((char *)v22 + *(_DWORD *)(*(_DWORD *)v22 - 12)), + *(_DWORD *)((char *)v22 + *(_DWORD *)(*(_DWORD *)v22 - 12) + 20) | 2); + return v22; + } + if ( v6 != a3 ) + return v22; +LABEL_28: + lpuexcpt = (struct _Unwind_Exception *)*((_DWORD *)v22 + 1); + goto LABEL_29; + } + *((_DWORD *)v22 + 1) = 0x80000000; + v19 = v20; + } + while ( 1 ) + { + if ( v6 == -1 ) + goto LABEL_33; + if ( v6 == a3 ) + break; + v7 = (unsigned __int8 *)v18[2]; + v17 = v18[3]; + v8 = v17 - (_DWORD)v7; + if ( this - lpuexcpt <= (int)(v17 - (_DWORD)v7) ) + v8 = this - lpuexcpt; + if ( v8 <= 1 ) + { + *((_DWORD *)v22 + 1) = (char *)lpuexcpt + 1; + if ( v17 > (unsigned int)v7 ) + { + v10 = v18; + v14 = v7 + 1; + v18[2] = v7 + 1; + goto LABEL_38; + } + if ( (*(int (__fastcall **)(_DWORD *))(*v18 + 40))(v18) != -1 ) + { + v14 = (unsigned __int8 *)v18[2]; + v17 = v18[3]; +LABEL_38: + if ( v17 > (unsigned int)v14 ) + { + v6 = *v14; + lpuexcpt = (struct _Unwind_Exception *)*((_DWORD *)v22 + 1); + goto LABEL_9; + } +LABEL_40: + v6 = (*(int (__fastcall **)(_DWORD *, _DWORD *))(*v18 + 36))(v18, v10); + lpuexcpt = (struct _Unwind_Exception *)*((_DWORD *)v22 + 1); + goto LABEL_9; + } + goto LABEL_33; + } + v9 = memchr(v7, (char)a3, v8); + v10 = v18; + v11 = v9 - v7; + if ( !v9 ) + v11 = v8; + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + v11); + v12 = &v7[v11]; + v18[2] = v12; + *((_DWORD *)v22 + 1) = lpuexcpt; + if ( v17 <= (unsigned int)v12 ) + goto LABEL_40; + v6 = *v12; + if ( (int)this <= (int)lpuexcpt ) + goto LABEL_19; + } + if ( this == (std::istream *)0x7FFFFFFF ) + { + if ( !v19 ) + goto LABEL_30; + goto LABEL_25; + } + if ( v19 ) + goto LABEL_25; + goto LABEL_28; + } + } + return v22; +} +// 4CB9DA: variable 'v16' is possibly undefined +// 4CBA20: variable 'v15' is possibly undefined +// 4CBC37: variable 'v10' is possibly undefined +// 4CB980: using guessed type char var_19[25]; + +//----- (004CBD90) -------------------------------------------------------- +std::istream::sentry *__fastcall std::istream::ignore(std::istream::sentry *a1) +{ + _DWORD *v2; // ecx + unsigned int v3; // eax + bool v4; // [esp+8h] [ebp-70h] + char v6[25]; // [esp+5Fh] [ebp-19h] BYREF + + *((_DWORD *)a1 + 1) = 0; + std::istream::sentry::sentry(v6, a1, (std::istream *)1, v4); + if ( v6[0] ) + { + v2 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v3 = v2[2]; + if ( v3 >= v2[3] ) + { + if ( (*(int (__fastcall **)(_DWORD *))(*v2 + 40))(v2) == -1 ) + { + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 2); + return a1; + } + } + else + { + v2[2] = v3 + 1; + } + *((_DWORD *)a1 + 1) = 1; + } + return a1; +} +// 4CBDE1: variable 'v4' is possibly undefined +// 4CBD90: using guessed type char var_19[25]; + +//----- (004CBF20) -------------------------------------------------------- +void __userpurge std::istream::sentry::sentry(_BYTE *a1@, std::istream::sentry *this, std::istream *a3, bool a4) +{ + char *v4; // ecx + int v5; // eax + _BYTE *v6; // eax + unsigned int v7; // eax + unsigned int v8; // edx + unsigned __int8 *v9; // eax + int v10; // [esp+10h] [ebp-58h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + + *a1 = 0; + v4 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v5 = *((_DWORD *)v4 + 5); + if ( v5 ) + goto LABEL_6; + if ( *((_DWORD *)v4 + 28) ) + { + std::ostream::flush(*((_DWORD **)v4 + 28)); + v4 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + if ( (_BYTE)a3 || (v4[13] & 0x10) == 0 ) + goto LABEL_5; + } + else if ( (_BYTE)a3 || (v4[13] & 0x10) == 0 ) + { + goto LABEL_9; + } + lpuexcpt = (struct _Unwind_Exception *)*((_DWORD *)v4 + 30); + v6 = (_BYTE *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v6 >= *((_DWORD *)lpuexcpt + 3) ) + { + v6 = (_BYTE *)(*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + v4 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v10 = *((_DWORD *)v4 + 31); + if ( v10 ) + { + if ( v6 == (_BYTE *)-1 ) + { +LABEL_20: + v5 = *((_DWORD *)v4 + 5) | 2; + goto LABEL_6; + } + goto LABEL_12; + } +LABEL_27: + std::__throw_bad_cast(); + } + LOBYTE(v6) = *v6; + v10 = *((_DWORD *)v4 + 31); + if ( !v10 ) + goto LABEL_27; +LABEL_12: + while ( (*(_BYTE *)(*(_DWORD *)(v10 + 24) + 2 * (unsigned __int8)v6) & 0x20) != 0 ) + { + while ( 1 ) + { + v7 = *((_DWORD *)lpuexcpt + 2); + v8 = *((_DWORD *)lpuexcpt + 3); + if ( v7 >= v8 ) + { + if ( (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 40))(lpuexcpt) == -1 ) + goto LABEL_19; + v9 = (unsigned __int8 *)*((_DWORD *)lpuexcpt + 2); + v8 = *((_DWORD *)lpuexcpt + 3); + } + else + { + v9 = (unsigned __int8 *)(v7 + 1); + *((_DWORD *)lpuexcpt + 2) = v9; + } + if ( (unsigned int)v9 >= v8 ) + break; + if ( (*(_BYTE *)(*(_DWORD *)(v10 + 24) + 2 * *v9) & 0x20) == 0 ) + goto LABEL_17; + } + v6 = (_BYTE *)(*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + if ( v6 == (_BYTE *)-1 ) + { +LABEL_19: + v4 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + goto LABEL_20; + } + } +LABEL_17: + v4 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); +LABEL_5: + v5 = *((_DWORD *)v4 + 5); + if ( v5 ) + { +LABEL_6: + std::ios::clear(v4, v5 | 4); + return; + } +LABEL_9: + *a1 = 1; +} + +//----- (004CC1B0) -------------------------------------------------------- +void __userpurge std::istream::sentry::sentry(_BYTE *a1@, std::istream::sentry *this, std::istream *a3, bool a4) +{ + char *v4; // ecx + int v5; // eax + _BYTE *v6; // eax + unsigned int v7; // eax + unsigned int v8; // edx + unsigned __int8 *v9; // eax + int v10; // [esp+10h] [ebp-58h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + + *a1 = 0; + v4 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v5 = *((_DWORD *)v4 + 5); + if ( v5 ) + goto LABEL_6; + if ( *((_DWORD *)v4 + 28) ) + { + std::ostream::flush(*((_DWORD **)v4 + 28)); + v4 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + if ( (_BYTE)a3 || (v4[13] & 0x10) == 0 ) + goto LABEL_5; + } + else if ( (_BYTE)a3 || (v4[13] & 0x10) == 0 ) + { + goto LABEL_9; + } + lpuexcpt = (struct _Unwind_Exception *)*((_DWORD *)v4 + 30); + v6 = (_BYTE *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v6 >= *((_DWORD *)lpuexcpt + 3) ) + { + v6 = (_BYTE *)(*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + v4 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v10 = *((_DWORD *)v4 + 31); + if ( v10 ) + { + if ( v6 == (_BYTE *)-1 ) + { +LABEL_20: + v5 = *((_DWORD *)v4 + 5) | 2; + goto LABEL_6; + } + goto LABEL_12; + } +LABEL_27: + std::__throw_bad_cast(); + } + LOBYTE(v6) = *v6; + v10 = *((_DWORD *)v4 + 31); + if ( !v10 ) + goto LABEL_27; +LABEL_12: + while ( (*(_BYTE *)(*(_DWORD *)(v10 + 24) + 2 * (unsigned __int8)v6) & 0x20) != 0 ) + { + while ( 1 ) + { + v7 = *((_DWORD *)lpuexcpt + 2); + v8 = *((_DWORD *)lpuexcpt + 3); + if ( v7 >= v8 ) + { + if ( (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 40))(lpuexcpt) == -1 ) + goto LABEL_19; + v9 = (unsigned __int8 *)*((_DWORD *)lpuexcpt + 2); + v8 = *((_DWORD *)lpuexcpt + 3); + } + else + { + v9 = (unsigned __int8 *)(v7 + 1); + *((_DWORD *)lpuexcpt + 2) = v9; + } + if ( (unsigned int)v9 >= v8 ) + break; + if ( (*(_BYTE *)(*(_DWORD *)(v10 + 24) + 2 * *v9) & 0x20) == 0 ) + goto LABEL_17; + } + v6 = (_BYTE *)(*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + if ( v6 == (_BYTE *)-1 ) + { +LABEL_19: + v4 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + goto LABEL_20; + } + } +LABEL_17: + v4 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); +LABEL_5: + v5 = *((_DWORD *)v4 + 5); + if ( v5 ) + { +LABEL_6: + std::ios::clear(v4, v5 | 4); + return; + } +LABEL_9: + *a1 = 1; +} + +//----- (004CC440) -------------------------------------------------------- +std::istream::sentry *__userpurge std::istream::getline@( + std::istream::sentry *a1@, + std::istream *this, + char *a3, + int a4) +{ + int v4; // eax + _BYTE *v5; // esi + unsigned __int8 v7; // al + int (__stdcall *v9)(unsigned __int8); // edx + char v10; // [esp+Ch] [ebp-10h] + + v4 = *(_DWORD *)(*(_DWORD *)a1 - 12); + v5 = *(_BYTE **)((char *)a1 + v4 + 124); + if ( !v5 ) + std::__throw_bad_cast(); + if ( v5[28] ) + { + v7 = v5[39]; + } + else + { + std::ctype::_M_widen_init(*(_DWORD *)((char *)a1 + v4 + 124)); + v9 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v5 + 24); + v7 = 10; + if ( v9 != std::ctype::do_widen ) + v7 = ((int (__thiscall *)(_BYTE *, int))v9)(v5, 10); + } + return std::istream::getline(a1, this, a3, v7, v10); +} +// 4CC473: variable 'v10' is possibly undefined + +//----- (004CC4C0) -------------------------------------------------------- +std::istream::sentry *__userpurge std::istream::getline@( + std::istream::sentry *a1@, + std::istream *this, + char *a3, + unsigned __int8 a4, + char a5) +{ + int v5; // edx + size_t v6; // edx + _DWORD *v8; // eax + char *v9; // esi + size_t v10; // eax + int v11; // ecx + unsigned __int8 *v12; // eax + unsigned __int8 *v13; // edx + char *v14; // eax + signed int v15; // edx + unsigned int v16; // edx + unsigned int v17; // eax + unsigned __int8 *v18; // eax + size_t v19; // ebx + bool v20; // [esp+8h] [ebp-90h] + std::istream *v21; // [esp+1Ch] [ebp-7Ch] + _DWORD *v22; // [esp+28h] [ebp-70h] + unsigned int v23; // [esp+2Ch] [ebp-6Ch] + char *Buf; // [esp+34h] [ebp-64h] + size_t MaxCount; // [esp+38h] [ebp-60h] + char v27[25]; // [esp+7Fh] [ebp-19h] BYREF + + *((_DWORD *)a1 + 1) = 0; + std::istream::sentry::sentry(v27, a1, (std::istream *)1, v20); + if ( v27[0] ) + { + v8 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v9 = (char *)v8[2]; + v22 = v8; + Buf = v9; + v23 = v8[3]; + if ( (unsigned int)v9 < v23 ) + { + v10 = *((_DWORD *)a1 + 1); + v11 = (unsigned __int8)*v9; + v6 = v10 + 1; + if ( (int)a3 > (int)(v10 + 1) ) + goto LABEL_11; +LABEL_31: + if ( a4 != v11 ) + { + if ( (int)a3 <= 0 ) + { + v5 = 4; + v10 = *((_DWORD *)a1 + 1); + goto LABEL_38; + } + v5 = 4; + *(_BYTE *)this = 0; +LABEL_5: + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | v5); + return a1; + } + Buf = (char *)v22[2]; + v23 = v22[3]; + goto LABEL_43; + } + v11 = (*(int (__fastcall **)(_DWORD *))(*v8 + 36))(v8); + v10 = *((_DWORD *)a1 + 1); + v19 = v10; + v6 = v10 + 1; + if ( (int)a3 <= (int)(v10 + 1) ) + { +LABEL_50: + if ( v11 != -1 ) + goto LABEL_31; + if ( (int)a3 <= 0 ) + { + v10 = v19; + v5 = 2; + goto LABEL_38; + } + } + else + { + if ( v11 != -1 ) + { + Buf = (char *)v22[2]; + v23 = v22[3]; +LABEL_11: + if ( a4 == v11 ) + { +LABEL_43: + *((_DWORD *)a1 + 1) = v6; + if ( (unsigned int)Buf < v23 ) + { + v22[2] = Buf + 1; + if ( (int)a3 > 0 ) + { + *(_BYTE *)this = 0; + if ( !*((_DWORD *)a1 + 1) ) + goto LABEL_4; + return a1; + } + goto LABEL_7; + } + (*(void (__fastcall **)(_DWORD *))(*v22 + 40))(v22); + if ( (int)a3 > 0 ) + { + *(_BYTE *)this = 0; + if ( !*((_DWORD *)a1 + 1) ) + goto LABEL_4; + return a1; + } +LABEL_6: + v6 = *((_DWORD *)a1 + 1); +LABEL_7: + if ( !v6 ) + goto LABEL_4; + return a1; + } + while ( 1 ) + { + v14 = &a3[-v10 - 1]; + v15 = v23 - (_DWORD)Buf; + if ( (int)v14 <= (int)(v23 - (_DWORD)Buf) ) + v15 = (signed int)v14; + MaxCount = v15; + if ( v15 > 1 ) + { + v12 = (unsigned __int8 *)memchr(Buf, (char)a4, v15); + v13 = v12; + if ( !v12 || (MaxCount = v12 - (unsigned __int8 *)Buf, v12 != (unsigned __int8 *)Buf) ) + { + memcpy(this, Buf, MaxCount); + v13 = (unsigned __int8 *)(v22[2] + MaxCount); + v23 = v22[3]; + } + this = (std::istream *)((char *)this + MaxCount); + v22[2] = v13; + v10 = *((_DWORD *)a1 + 1) + MaxCount; + *((_DWORD *)a1 + 1) = v10; + if ( (unsigned int)v13 < v23 ) + { + v11 = *v13; + goto LABEL_17; + } + v11 = (*(int (__fastcall **)(_DWORD *))(*v22 + 36))(v22); + } + else + { + v21 = (std::istream *)((char *)this + 1); + *(_BYTE *)this = v11; + v16 = v22[3]; + ++*((_DWORD *)a1 + 1); + v17 = v22[2]; + if ( v17 >= v16 ) + { + if ( (*(int (__fastcall **)(_DWORD *))(*v22 + 40))(v22) == -1 ) + goto LABEL_35; + v18 = (unsigned __int8 *)v22[2]; + v16 = v22[3]; + } + else + { + v18 = (unsigned __int8 *)(v17 + 1); + v22[2] = v18; + } + if ( (unsigned int)v18 < v16 ) + { + v11 = *v18; + this = (std::istream *)((char *)this + 1); + v10 = *((_DWORD *)a1 + 1); +LABEL_17: + v6 = v10 + 1; + if ( (int)a3 <= (int)(v10 + 1) ) + goto LABEL_31; + goto LABEL_18; + } + v11 = (*(int (__fastcall **)(_DWORD *))(*v22 + 36))(v22); + this = (std::istream *)((char *)this + 1); + } + v19 = *((_DWORD *)a1 + 1); + v10 = v19; + v6 = v19 + 1; + if ( (int)(v19 + 1) >= (int)a3 ) + goto LABEL_50; + if ( v11 == -1 ) + { + v21 = this; +LABEL_35: + if ( (int)a3 > 0 ) + *(_BYTE *)v21 = 0; + v5 = 2; + v10 = *((_DWORD *)a1 + 1); +LABEL_38: + if ( !v10 ) + v5 |= 4u; + goto LABEL_5; + } +LABEL_18: + Buf = (char *)v22[2]; + v23 = v22[3]; + if ( a4 == v11 ) + goto LABEL_43; + } + } + if ( (int)a3 <= 0 ) + { + v5 = 2; + goto LABEL_38; + } + } + v5 = 2; + *(_BYTE *)this = 0; + if ( !*((_DWORD *)a1 + 1) ) + v5 = 6; + goto LABEL_5; + } + if ( (int)a3 <= 0 ) + goto LABEL_6; + *(_BYTE *)this = 0; + if ( !*((_DWORD *)a1 + 1) ) + { +LABEL_4: + v5 = 4; + goto LABEL_5; + } + return a1; +} +// 4CC51F: variable 'v20' is possibly undefined +// 4CC4C0: using guessed type char var_19[25]; + +//----- (004CC9F0) -------------------------------------------------------- +std::istream::sentry *__userpurge std::istream::putback@( + std::istream::sentry *a1@, + std::istream *this, + char a3) +{ + int v4; // eax + _DWORD *v5; // ecx + _DWORD *v6; // eax + unsigned int v7; // eax + bool v9; // [esp+8h] [ebp-70h] + char v11[25]; // [esp+5Fh] [ebp-19h] BYREF + + v4 = *(_DWORD *)a1; + *((_DWORD *)a1 + 1) = 0; + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(v4 - 12)), + *(_DWORD *)((_BYTE *)a1 + *(_DWORD *)(v4 - 12) + 20) & 0xFFFFFFFD); + std::istream::sentry::sentry(v11, a1, (std::istream *)1, v9); + if ( v11[0] ) + { + v5 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v6 = (_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)); + if ( v5 ) + { + v7 = v5[2]; + if ( v5[1] < v7 && (_BYTE)this == *(_BYTE *)(v7 - 1) ) + { + v5[2] = v7 - 1; + return a1; + } + if ( (*(int (__thiscall **)(_DWORD *, _DWORD))(*v5 + 44))(v5, (unsigned __int8)this) != -1 ) + return a1; + v6 = (_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)); + } + std::ios::clear(v6, v6[5] | 1); + } + return a1; +} +// 4CCA62: variable 'v9' is possibly undefined +// 4CC9F0: using guessed type char var_19[25]; + +//----- (004CCBB0) -------------------------------------------------------- +struct _Unwind_Exception *__userpurge std::istream::readsome@( + std::istream::sentry *a1@, + std::istream *this, + char *a3, + int a4) +{ + _DWORD *v5; // ecx + char *v6; // eax + int v7; // ecx + bool v8; // [esp+8h] [ebp-70h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-64h] + char v11[25]; // [esp+5Fh] [ebp-19h] BYREF + + *((_DWORD *)a1 + 1) = 0; + std::istream::sentry::sentry(v11, a1, (std::istream *)1, v8); + if ( !v11[0] ) + return (struct _Unwind_Exception *)*((_DWORD *)a1 + 1); + v5 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v6 = (char *)(v5[3] - v5[2]); + if ( !v6 ) + v6 = (char *)(*(int (__fastcall **)(_DWORD *))(*v5 + 28))(v5); + if ( (int)v6 <= 0 ) + { + if ( v6 == (char *)-1 ) + { + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 2); + return (struct _Unwind_Exception *)*((_DWORD *)a1 + 1); + } + return (struct _Unwind_Exception *)*((_DWORD *)a1 + 1); + } + if ( (int)v6 > (int)a3 ) + v6 = a3; + v7 = *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + lpuexcpt = (struct _Unwind_Exception *)(*(int (__thiscall **)(int, std::istream *, char *))(*(_DWORD *)v7 + 32))( + v7, + this, + v6); + *((_DWORD *)a1 + 1) = lpuexcpt; + return lpuexcpt; +} +// 4CCC01: variable 'v8' is possibly undefined +// 4CCBB0: using guessed type char var_19[25]; + +//----- (004CCD90) -------------------------------------------------------- +void __thiscall std::istream::istream(_DWORD *this, int *a2) +{ + int v2; // eax + int v3; // eax + std::ios_base *v4; // ecx + int v5; // eax + std::ios_base *v6; // [esp+4h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-48h] + _DWORD *v8; // [esp+14h] [ebp-44h] + + v8 = this + 2; + std::ios_base::ios_base(this + 2); + *((_WORD *)this + 62) = 0; + v2 = a2[1]; + *this = &off_55FE40; + this[1] = v2; + this[30] = 0; + v3 = *a2; + this[32] = 0; + this[33] = 0; + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(v3 - 12)); + this[2] = off_55FE54; + this[34] = 0; + this[35] = 0; + lpuexcpt = v4; + std::ios_base::_M_move((int)v8, v4, v6); + std::ios::_M_cache_locale(v8, (int)(this + 29)); + this[32] = 0; + v5 = *((_DWORD *)lpuexcpt + 28); + *((_DWORD *)lpuexcpt + 28) = 0; + this[30] = v5; + *((_WORD *)this + 62) = *((_WORD *)lpuexcpt + 58); + a2[1] = 0; +} +// 4CCE2F: variable 'v6' is possibly undefined +// 55FE40: using guessed type void (__cdecl *off_55FE40)(std::istream *__hidden this); +// 55FE54: using guessed type void (__cdecl *off_55FE54[2])(std::istream *__hidden this); + +//----- (004CCEC0) -------------------------------------------------------- +void __thiscall std::istream::istream(_DWORD *this, int a2) +{ + int v2; // [esp+14h] [ebp-44h] + + v2 = (int)(this + 2); + std::ios_base::ios_base(this + 2); + this[30] = 0; + *((_WORD *)this + 62) = 0; + this[32] = 0; + this[33] = 0; + this[34] = 0; + this[35] = 0; + *this = &off_55FE40; + this[2] = off_55FE54; + this[1] = 0; + std::ios::init(v2, a2); +} +// 55FE40: using guessed type void (__cdecl *off_55FE40)(std::istream *__hidden this); +// 55FE54: using guessed type void (__cdecl *off_55FE54[2])(std::istream *__hidden this); + +//----- (004CCFA0) -------------------------------------------------------- +void __fastcall std::istream::istream(int a1) +{ + int v1; // [esp+14h] [ebp-44h] + + v1 = a1 + 8; + std::ios_base::ios_base((_DWORD *)(a1 + 8)); + *(_DWORD *)(a1 + 120) = 0; + *(_WORD *)(a1 + 124) = 0; + *(_DWORD *)(a1 + 128) = 0; + *(_DWORD *)(a1 + 132) = 0; + *(_DWORD *)(a1 + 136) = 0; + *(_DWORD *)(a1 + 140) = 0; + *(_DWORD *)a1 = &off_55FE40; + *(_DWORD *)(a1 + 8) = off_55FE54; + *(_DWORD *)(a1 + 4) = 0; + std::ios::init(v1, 0); +} +// 55FE40: using guessed type void (__cdecl *off_55FE40)(std::istream *__hidden this); +// 55FE54: using guessed type void (__cdecl *off_55FE54[2])(std::istream *__hidden this); + +//----- (004CD080) -------------------------------------------------------- +int __thiscall std::istream::istream(int *this, int *a2, _DWORD *a3) +{ + int v3; // eax + int v4; // edx + int v5; // ebx + std::ios_base *v6; // edi + int v7; // eax + int result; // eax + std::ios_base *v9; // [esp+4h] [ebp-18h] + + v3 = *a2; + v4 = a2[1]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v3 - 12)) = v4; + this[1] = a3[1]; + v5 = (int)this + *(_DWORD *)(v3 - 12); + v6 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move(v5, v6, v9); + std::ios::_M_cache_locale((_DWORD *)v5, v5 + 108); + v7 = *((_DWORD *)v6 + 28); + *(_DWORD *)(v5 + 120) = 0; + *((_DWORD *)v6 + 28) = 0; + *(_DWORD *)(v5 + 112) = v7; + result = *((unsigned __int16 *)v6 + 58); + a3[1] = 0; + *(_WORD *)(v5 + 116) = result; + return result; +} +// 4CD0B2: variable 'v9' is possibly undefined + +//----- (004CD100) -------------------------------------------------------- +BOOL __thiscall std::istream::istream(int *this, int *a2, int a3) +{ + int v3; // eax + int v4; // edx + int v5; // ebx + + v3 = *a2; + v4 = a2[1]; + v5 = *(_DWORD *)(*a2 - 12); + *this = *a2; + *(int *)((char *)this + v5) = v4; + this[1] = 0; + return std::ios::init((int)this + *(_DWORD *)(v3 - 12), a3); +} + +//----- (004CD140) -------------------------------------------------------- +BOOL __thiscall std::istream::istream(_DWORD *ecx0, std::istream *this) +{ + int v2; // eax + int v3; // edx + int v4; // ebx + + v2 = *(_DWORD *)this; + v3 = *((_DWORD *)this + 1); + v4 = *(_DWORD *)(*(_DWORD *)this - 12); + *ecx0 = *(_DWORD *)this; + *(_DWORD *)((char *)ecx0 + v4) = v3; + ecx0[1] = 0; + return std::ios::init((int)ecx0 + *(_DWORD *)(v2 - 12), 0); +} + +//----- (004CD170) -------------------------------------------------------- +void __fastcall std::istream::~istream(_DWORD *a1) +{ + _DWORD *v2; // ecx + + v2 = a1 + 2; + *(v2 - 2) = &off_55FE40; + *(v2 - 1) = 0; + *v2 = &off_560E20; + std::ios_base::~ios_base((int)v2); + operator delete(a1); +} +// 55FE40: using guessed type void (__cdecl *off_55FE40)(std::istream *__hidden this); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (004CD1A0) -------------------------------------------------------- +void __fastcall std::istream::~istream(_DWORD *a1) +{ + _DWORD *v1; // ecx + + *a1 = &off_55FE40; + v1 = a1 + 2; + *(v1 - 1) = 0; + *v1 = &off_560E20; + std::ios_base::~ios_base((int)v1); +} +// 55FE40: using guessed type void (__cdecl *off_55FE40)(std::istream *__hidden this); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (004CD1C0) -------------------------------------------------------- +void __thiscall std::istream::~istream(_DWORD *ecx0, std::istream *this) +{ + int v2; // eax + + v2 = *(_DWORD *)this; + *ecx0 = *(_DWORD *)this; + *(_DWORD *)((char *)ecx0 + *(_DWORD *)(v2 - 12)) = *((_DWORD *)this + 1); + ecx0[1] = 0; +} + +//----- (004CD1E0) -------------------------------------------------------- +_DWORD *__thiscall std::istream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // edx + char v6; // cl + char v7; // cl + int v8; // edx + std::ios_base *v10; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v10); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + v8 = this[1]; + *((_BYTE *)v4 + 117) = v7; + this[1] = a2[1]; + a2[1] = v8; + return this; +} +// 4CD21D: variable 'v10' is possibly undefined + +//----- (004CD2A0) -------------------------------------------------------- +int __thiscall std::istream::operator>>(void *this, int (__cdecl *a2)(void *)) +{ + return a2(this); +} + +//----- (004CD2B0) -------------------------------------------------------- +char *__thiscall std::istream::operator>>(char *this, void (__cdecl *a2)(char *)) +{ + a2(&this[*(_DWORD *)(*(_DWORD *)this - 12)]); + return this; +} + +//----- (004CD2D0) -------------------------------------------------------- +char *__thiscall std::istream::operator>>(char *this, void (__cdecl *a2)(char *)) +{ + a2(&this[*(_DWORD *)(*(_DWORD *)this - 12)]); + return this; +} + +//----- (004CD2F0) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::operator>>(std::istream::sentry *this, _DWORD *a2) +{ + char *v2; // ecx + int v3; // eax + bool v5; // [esp+8h] [ebp-70h] + char v7; // [esp+5Eh] [ebp-1Ah] BYREF + char v8[25]; // [esp+5Fh] [ebp-19h] BYREF + + std::istream::sentry::sentry(&v7, this, 0, v5); + if ( v7 ) + { + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + if ( !a2 ) + { + v3 = 4; + goto LABEL_9; + } + if ( !std::__copy_streambufs_eof>(*((_DWORD **)v2 + 30), a2, v8) ) + { + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = v8[0] == 0 ? 4 : 6; + goto LABEL_9; + } + if ( v8[0] ) + { + v3 = 2; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); +LABEL_9: + std::ios::clear(v2, *((_DWORD *)v2 + 5) | v3); + } + } + else if ( !a2 ) + { + v3 = 4; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + goto LABEL_9; + } + return this; +} +// 4CD33A: variable 'v5' is possibly undefined +// 4CD2F0: using guessed type char var_19[25]; + +//----- (004CD510) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::operator>>(std::istream::sentry *this, _DWORD *a2) +{ + char *v2; // edi + int v3; // ecx + bool v5; // [esp+8h] [ebp-80h] + char v7; // [esp+67h] [ebp-21h] BYREF + int v8; // [esp+68h] [ebp-20h] BYREF + int v9[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v7, this, 0, v5); + if ( v7 ) + { + v8 = 0; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int *))(*(_DWORD *)v3 + 12))( + v3, + *((_DWORD *)v2 + 30), + -1, + 0, + -1, + (int)this + *(_DWORD *)(*(_DWORD *)this - 12), + &v8, + v9); + *a2 = v9[0]; + if ( v8 ) + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v8); + } + return this; +} +// 4CD55A: variable 'v5' is possibly undefined +// 4CD510: using guessed type int var_1C[7]; + +//----- (004CD710) -------------------------------------------------------- +std::istream::sentry *__thiscall std::istream::operator>>(std::istream::sentry *this, _WORD *a2) +{ + char *v2; // edi + int v3; // ecx + int v4; // eax + bool v6; // [esp+8h] [ebp-80h] + char v8; // [esp+67h] [ebp-21h] BYREF + int v9; // [esp+68h] [ebp-20h] BYREF + int v10[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v8, this, 0, v6); + if ( v8 ) + { + v9 = 0; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int *))(*(_DWORD *)v3 + 12))( + v3, + *((_DWORD *)v2 + 30), + -1, + 0, + -1, + (int)this + *(_DWORD *)(*(_DWORD *)this - 12), + &v9, + v10); + v4 = v9; + if ( v10[0] >= -32768 ) + { + if ( v10[0] > 0x7FFF ) + { + v9 |= 4u; + v4 = v9; + *a2 = 0x7FFF; + goto LABEL_9; + } + *a2 = v10[0]; + } + else + { + v4 = v9 | 4; + v9 |= 4u; + *a2 = 0x8000; + } + if ( !v4 ) + return this; +LABEL_9: + std::ios::clear( + (std::istream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | v4); + } + return this; +} +// 4CD823: conditional instruction was optimized away because eax.4>=4u +// 4CD75A: variable 'v6' is possibly undefined +// 4CD710: using guessed type int var_1C[7]; + +//----- (004CD950) -------------------------------------------------------- +std::ostream::sentry *__userpurge std::ostream::put@(std::ostream::sentry *a1@, std::ostream *this, char a3) +{ + _DWORD *v3; // ecx + _BYTE *v4; // eax + int v5; // ecx + int v7; // [esp+0h] [ebp-78h] + std::ostream *v8; // [esp+4h] [ebp-74h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-64h] + char v11[4]; // [esp+58h] [ebp-20h] BYREF + _DWORD *v12; // [esp+5Ch] [ebp-1Ch] + + std::ostream::sentry::sentry((int)v11, a1, v8); + if ( v11[0] ) + { + v3 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v4 = (_BYTE *)v3[5]; + if ( (unsigned int)v4 >= v3[6] ) + { + if ( (*(int (__thiscall **)(_DWORD *, _DWORD))(*v3 + 52))(v3, (unsigned __int8)this) == -1 ) + std::ios::clear( + (std::ostream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 1); + } + else + { + *v4 = (_BYTE)this; + ++v3[5]; + } + } + lpuexcpt = (struct _Unwind_Exception *)((char *)v12 + *(_DWORD *)(*v12 - 12)); + if ( (*((_BYTE *)lpuexcpt + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v5 = *((_DWORD *)lpuexcpt + 30); + if ( v5 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v5 + 24))(v5, v7) == -1 ) + std::ios::clear( + (_DWORD *)((char *)v12 + *(_DWORD *)(*v12 - 12)), + *(_DWORD *)((char *)v12 + *(_DWORD *)(*v12 - 12) + 20) | 1); + } + } + return a1; +} +// 4CD998: variable 'v8' is possibly undefined +// 4CD9F4: variable 'v7' is possibly undefined +// 4CD950: using guessed type char var_20[4]; + +//----- (004CDB40) -------------------------------------------------------- +void __userpurge std::ostream::swap(_DWORD *a1@, std::ostream *this, std::ostream *a3) +{ + std::ios_base *v3; // ebx + std::ios_base *v4; // esi + int v5; // eax + char v6; // dl + char v7; // dl + std::ios_base *v8; // [esp+4h] [ebp-58h] + + v3 = (std::ios_base *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + v4 = (std::ostream *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)); + std::ios_base::_M_swap(v3, v4, v8); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + *((_BYTE *)v4 + 117) = v7; +} +// 4CDB77: variable 'v8' is possibly undefined + +//----- (004CDBE0) -------------------------------------------------------- +_DWORD *__fastcall std::ostream::flush(_DWORD *a1) +{ + int v1; // ecx + + v1 = *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 120); + if ( v1 && (*(int (__fastcall **)(int))(*(_DWORD *)v1 + 24))(v1) == -1 ) + std::ios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 1); + return a1; +} + +//----- (004CDD30) -------------------------------------------------------- +_DWORD *__thiscall std::ostream::seekp(_DWORD *this, int a2, int a3, int a4, int a5) +{ + char *v5; // edi + _DWORD *v6; // eax + int v7; // edi + void (__thiscall *v8)(int *, _DWORD *, int, int, int, int, int); // eax + _DWORD *v10; // [esp+0h] [ebp-A8h] + int v12[14]; // [esp+70h] [ebp-38h] BYREF + + v5 = (char *)this + *(_DWORD *)(*this - 12); + if ( (v5[20] & 5) == 0 ) + { + v6 = (_DWORD *)*((_DWORD *)v5 + 30); + v7 = *v6; + v12[6] = a4; + v10 = v6; + v8 = *(void (__thiscall **)(int *, _DWORD *, int, int, int, int, int))(v7 + 20); + v12[4] = a2; + v12[5] = a3; + v12[7] = a5; + v8(v12, v10, a2, a3, a4, a5, 16); + if ( (v12[0] & v12[1]) == -1 ) + std::ios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 4); + } + return this; +} + +//----- (004CDEF0) -------------------------------------------------------- +_DWORD *__thiscall std::ostream::seekp(_DWORD *this, int a2, int a3, int a4) +{ + char *v4; // edi + int v7[10]; // [esp+60h] [ebp-28h] BYREF + + v4 = (char *)this + *(_DWORD *)(*this - 12); + if ( (v4[20] & 5) == 0 ) + { + (*(void (__thiscall **)(int *, _DWORD, int, int, int, int))(**((_DWORD **)v4 + 30) + 16))( + v7, + *((_DWORD *)v4 + 30), + a2, + a3, + a4, + 16); + if ( (v7[0] & v7[1]) == -1 ) + std::ios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 4); + } + return this; +} + +//----- (004CE080) -------------------------------------------------------- +_DWORD *__thiscall std::ostream::tellp(_DWORD *ecx0, std::ostream *this) +{ + int v2; // eax + char *v3; // esi + int v6[10]; // [esp+60h] [ebp-28h] BYREF + + v2 = *(_DWORD *)this; + *ecx0 = -1; + ecx0[1] = -1; + v3 = (char *)this + *(_DWORD *)(v2 - 12); + ecx0[2] = 0; + if ( (v3[20] & 5) == 0 ) + { + (*(void (__thiscall **)(int *, _DWORD, _DWORD, _DWORD, int, int))(**((_DWORD **)v3 + 30) + 16))( + v6, + *((_DWORD *)v3 + 30), + 0, + 0, + 1, + 16); + *ecx0 = v6[0]; + ecx0[1] = v6[1]; + ecx0[2] = v6[2]; + } + return ecx0; +} + +//----- (004CE200) -------------------------------------------------------- +std::ostream::sentry *__userpurge std::ostream::write@( + std::ostream::sentry *a1@, + std::ostream *this, + const char *a3, + int a4) +{ + int v4; // ecx + int v5; // ecx + int v7; // [esp+0h] [ebp-78h] + std::ostream *v8; // [esp+4h] [ebp-74h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-64h] + char v11[4]; // [esp+58h] [ebp-20h] BYREF + _DWORD *v12; // [esp+5Ch] [ebp-1Ch] + + std::ostream::sentry::sentry((int)v11, a1, v8); + if ( v11[0] ) + { + v4 = *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + if ( a3 != (const char *)(*(int (__thiscall **)(int, std::ostream *, const char *))(*(_DWORD *)v4 + 48))( + v4, + this, + a3) ) + std::ios::clear( + (std::ostream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 1); + } + lpuexcpt = (struct _Unwind_Exception *)((char *)v12 + *(_DWORD *)(*v12 - 12)); + if ( (*((_BYTE *)lpuexcpt + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v5 = *((_DWORD *)lpuexcpt + 30); + if ( v5 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v5 + 24))(v5, v7) == -1 ) + std::ios::clear( + (_DWORD *)((char *)v12 + *(_DWORD *)(*v12 - 12)), + *(_DWORD *)((char *)v12 + *(_DWORD *)(*v12 - 12) + 20) | 1); + } + } + return a1; +} +// 4CE242: variable 'v8' is possibly undefined +// 4CE2AF: variable 'v7' is possibly undefined +// 4CE200: using guessed type char var_20[4]; + +//----- (004CE3D0) -------------------------------------------------------- +int __userpurge std::ostream::sentry::sentry@(int a1@, std::ostream::sentry *this, std::ostream *a3) +{ + int v4; // eax + char *v5; // ecx + int result; // eax + + *(_BYTE *)a1 = 0; + v4 = *(_DWORD *)this; + *(_DWORD *)(a1 + 4) = this; + v5 = (char *)this + *(_DWORD *)(v4 - 12); + result = *((_DWORD *)v5 + 5); + if ( *((_DWORD *)v5 + 28) ) + { + if ( result ) + return std::ios::clear(v5, result | 4); + std::ostream::flush(*((_DWORD **)v5 + 28)); + result = *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20); + v5 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + } + if ( result ) + return std::ios::clear(v5, result | 4); + *(_BYTE *)a1 = 1; + return result; +} + +//----- (004CE430) -------------------------------------------------------- +int __userpurge std::ostream::sentry::sentry@(int a1@, std::ostream::sentry *this, std::ostream *a3) +{ + int v4; // eax + char *v5; // ecx + int result; // eax + + *(_BYTE *)a1 = 0; + v4 = *(_DWORD *)this; + *(_DWORD *)(a1 + 4) = this; + v5 = (char *)this + *(_DWORD *)(v4 - 12); + result = *((_DWORD *)v5 + 5); + if ( *((_DWORD *)v5 + 28) ) + { + if ( result ) + return std::ios::clear(v5, result | 4); + std::ostream::flush(*((_DWORD **)v5 + 28)); + result = *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20); + v5 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + } + if ( result ) + return std::ios::clear(v5, result | 4); + *(_BYTE *)a1 = 1; + return result; +} + +//----- (004CE490) -------------------------------------------------------- +void __fastcall std::ostream::sentry::~sentry(int a1) +{ + int v2; // ebx + int v3; // ecx + _DWORD *v4; // ecx + + if ( (*(_BYTE *)(*(_DWORD *)(**(_DWORD **)(a1 + 4) - 12) + *(_DWORD *)(a1 + 4) + 13) & 0x20) != 0 ) + { + v2 = *(_DWORD *)(**(_DWORD **)(a1 + 4) - 12) + *(_DWORD *)(a1 + 4); + if ( !std::uncaught_exception() ) + { + v3 = *(_DWORD *)(v2 + 120); + if ( v3 ) + { + if ( (*(int (__fastcall **)(int))(*(_DWORD *)v3 + 24))(v3) == -1 ) + { + v4 = (_DWORD *)(*(_DWORD *)(**(_DWORD **)(a1 + 4) - 12) + *(_DWORD *)(a1 + 4)); + std::ios::clear(v4, v4[5] | 1); + } + } + } + } +} + +//----- (004CE520) -------------------------------------------------------- +void __fastcall std::ostream::sentry::~sentry(int a1) +{ + int v2; // ebx + int v3; // ecx + _DWORD *v4; // ecx + + if ( (*(_BYTE *)(*(_DWORD *)(**(_DWORD **)(a1 + 4) - 12) + *(_DWORD *)(a1 + 4) + 13) & 0x20) != 0 ) + { + v2 = *(_DWORD *)(**(_DWORD **)(a1 + 4) - 12) + *(_DWORD *)(a1 + 4); + if ( !std::uncaught_exception() ) + { + v3 = *(_DWORD *)(v2 + 120); + if ( v3 ) + { + if ( (*(int (__fastcall **)(int))(*(_DWORD *)v3 + 24))(v3) == -1 ) + { + v4 = (_DWORD *)(*(_DWORD *)(**(_DWORD **)(a1 + 4) - 12) + *(_DWORD *)(a1 + 4)); + std::ios::clear(v4, v4[5] | 1); + } + } + } + } +} + +//----- (004CE5B0) -------------------------------------------------------- +const char *__userpurge std::ostream::_M_write@(_DWORD *a1@, std::ostream *this, const char *a3, int a4) +{ + int v5; // ecx + const char *result; // eax + + v5 = *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 120); + result = (const char *)(*(int (__thiscall **)(int, std::ostream *, const char *))(*(_DWORD *)v5 + 48))(v5, this, a3); + if ( a3 != result ) + return (const char *)std::ios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 1); + return result; +} + +//----- (004CE600) -------------------------------------------------------- +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, int a2) +{ + int v2; // ecx + char v3; // dl + int v4; // ecx + char v6; // al + int v7; // eax + int (__stdcall *v8)(unsigned __int8); // edx + int v9; // [esp+0h] [ebp-98h] + std::ostream *v10; // [esp+4h] [ebp-94h] + _BYTE *v11; // [esp+2Ch] [ebp-6Ch] + int v12; // [esp+30h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+34h] [ebp-64h] + char v16[4]; // [esp+78h] [ebp-20h] BYREF + _DWORD *v17; // [esp+7Ch] [ebp-1Ch] + + std::ostream::sentry::sentry((int)v16, this, v10); + if ( v16[0] ) + { + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)); + v12 = *((_DWORD *)lpuexcpt + 32); + if ( !v12 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 117) ) + { + v2 = *((char *)lpuexcpt + 116); + } + else + { + v11 = (_BYTE *)*((_DWORD *)lpuexcpt + 31); + if ( !v11 ) + std::__throw_bad_cast(); + if ( v11[28] ) + { + v2 = (char)v11[61]; + v6 = v11[61]; + } + else + { + std::ctype::_M_widen_init((int)v11); + v2 = 32; + v8 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v11 + 24); + v6 = 32; + if ( v8 != std::ctype::do_widen ) + { + v6 = ((int (__thiscall *)(_BYTE *, int))v8)(v11, 32); + v2 = v6; + } + } + *((_BYTE *)lpuexcpt + 116) = v6; + v7 = *(_DWORD *)this; + *((_BYTE *)lpuexcpt + 117) = 1; + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(v7 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, int, int))(*(_DWORD *)v12 + 36))( + v12, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v2, + a2); + if ( v3 ) + std::ios::clear( + (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v17 + *(_DWORD *)(*v17 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpta + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v9) == -1 ) + std::ios::clear( + (_DWORD *)((char *)v17 + *(_DWORD *)(*v17 - 12)), + *(_DWORD *)((char *)v17 + *(_DWORD *)(*v17 - 12) + 20) | 1); + } + } + return this; +} +// 4CE645: variable 'v10' is possibly undefined +// 4CE6C8: variable 'v3' is possibly undefined +// 4CE71C: variable 'v9' is possibly undefined +// 4CE600: using guessed type char var_20[4]; + +//----- (004CE8B0) -------------------------------------------------------- +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, unsigned __int8 a2) +{ + int v2; // ecx + char v3; // dl + int v4; // ecx + char v6; // al + int v7; // eax + int (__stdcall *v8)(unsigned __int8); // edx + int v9; // [esp+0h] [ebp-98h] + std::ostream *v10; // [esp+4h] [ebp-94h] + _BYTE *v11; // [esp+28h] [ebp-70h] + int v12; // [esp+2Ch] [ebp-6Ch] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+34h] [ebp-64h] + char v16[4]; // [esp+78h] [ebp-20h] BYREF + _DWORD *v17; // [esp+7Ch] [ebp-1Ch] + + std::ostream::sentry::sentry((int)v16, this, v10); + if ( v16[0] ) + { + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)); + v12 = *((_DWORD *)lpuexcpt + 32); + if ( !v12 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 117) ) + { + v2 = *((char *)lpuexcpt + 116); + } + else + { + v11 = (_BYTE *)*((_DWORD *)lpuexcpt + 31); + if ( !v11 ) + std::__throw_bad_cast(); + if ( v11[28] ) + { + v2 = (char)v11[61]; + v6 = v11[61]; + } + else + { + std::ctype::_M_widen_init((int)v11); + v2 = 32; + v8 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v11 + 24); + v6 = 32; + if ( v8 != std::ctype::do_widen ) + { + v6 = ((int (__thiscall *)(_BYTE *, int))v8)(v11, 32); + v2 = v6; + } + } + *((_BYTE *)lpuexcpt + 116) = v6; + v7 = *(_DWORD *)this; + *((_BYTE *)lpuexcpt + 117) = 1; + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(v7 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, int, _DWORD))(*(_DWORD *)v12 + 8))( + v12, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v2, + a2); + if ( v3 ) + std::ios::clear( + (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v17 + *(_DWORD *)(*v17 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpta + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v9) == -1 ) + std::ios::clear( + (_DWORD *)((char *)v17 + *(_DWORD *)(*v17 - 12)), + *(_DWORD *)((char *)v17 + *(_DWORD *)(*v17 - 12) + 20) | 1); + } + } + return this; +} +// 4CE8FB: variable 'v10' is possibly undefined +// 4CE985: variable 'v3' is possibly undefined +// 4CE9D9: variable 'v9' is possibly undefined +// 4CE8B0: using guessed type char var_20[4]; + +//----- (004CEB70) -------------------------------------------------------- +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, double a2) +{ + int v2; // ecx + char v3; // dl + int v4; // ecx + char v6; // al + int v7; // eax + int (__stdcall *v8)(unsigned __int8); // edx + int v9; // [esp+0h] [ebp-98h] + std::ostream *v10; // [esp+4h] [ebp-94h] + _BYTE *v11; // [esp+24h] [ebp-74h] + int v12; // [esp+30h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+34h] [ebp-64h] + char v16[4]; // [esp+78h] [ebp-20h] BYREF + _DWORD *v17; // [esp+7Ch] [ebp-1Ch] + + std::ostream::sentry::sentry((int)v16, this, v10); + if ( v16[0] ) + { + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)); + v12 = *((_DWORD *)lpuexcpt + 32); + if ( !v12 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 117) ) + { + v2 = *((char *)lpuexcpt + 116); + } + else + { + v11 = (_BYTE *)*((_DWORD *)lpuexcpt + 31); + if ( !v11 ) + std::__throw_bad_cast(); + if ( v11[28] ) + { + v2 = (char)v11[61]; + v6 = v11[61]; + } + else + { + std::ctype::_M_widen_init((int)v11); + v2 = 32; + v8 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v11 + 24); + v6 = 32; + if ( v8 != std::ctype::do_widen ) + { + v6 = ((int (__thiscall *)(_BYTE *, int))v8)(v11, 32); + v2 = v6; + } + } + *((_BYTE *)lpuexcpt + 116) = v6; + v7 = *(_DWORD *)this; + *((_BYTE *)lpuexcpt + 117) = 1; + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(v7 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, int, _DWORD, _DWORD))(*(_DWORD *)v12 + 28))( + v12, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v2, + LODWORD(a2), + HIDWORD(a2)); + if ( v3 ) + std::ios::clear( + (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v17 + *(_DWORD *)(*v17 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpta + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v9) == -1 ) + std::ios::clear( + (_DWORD *)((char *)v17 + *(_DWORD *)(*v17 - 12)), + *(_DWORD *)((char *)v17 + *(_DWORD *)(*v17 - 12) + 20) | 1); + } + } + return this; +} +// 4CEBBB: variable 'v10' is possibly undefined +// 4CEC38: variable 'v3' is possibly undefined +// 4CEC8C: variable 'v9' is possibly undefined +// 4CEB70: using guessed type char var_20[4]; + +//----- (004CEE20) -------------------------------------------------------- +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, long double a2) +{ + int v2; // ecx + char v3; // dl + int v4; // ecx + char v6; // al + int v7; // eax + int (__stdcall *v8)(unsigned __int8); // edx + int v9; // [esp+0h] [ebp-98h] + std::ostream *v10; // [esp+4h] [ebp-94h] + _BYTE *v12; // [esp+2Ch] [ebp-6Ch] + int v13; // [esp+30h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+34h] [ebp-64h] + char v17[4]; // [esp+78h] [ebp-20h] BYREF + _DWORD *v18; // [esp+7Ch] [ebp-1Ch] + + std::ostream::sentry::sentry((int)v17, this, v10); + if ( v17[0] ) + { + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)); + v13 = *((_DWORD *)lpuexcpt + 32); + if ( !v13 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 117) ) + { + v2 = *((char *)lpuexcpt + 116); + } + else + { + v12 = (_BYTE *)*((_DWORD *)lpuexcpt + 31); + if ( !v12 ) + std::__throw_bad_cast(); + if ( v12[28] ) + { + v2 = (char)v12[61]; + v6 = v12[61]; + } + else + { + std::ctype::_M_widen_init((int)v12); + v2 = 32; + v8 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v12 + 24); + v6 = 32; + if ( v8 != std::ctype::do_widen ) + { + v6 = ((int (__thiscall *)(_BYTE *, int))v8)(v12, 32); + v2 = v6; + } + } + *((_BYTE *)lpuexcpt + 116) = v6; + v7 = *(_DWORD *)this; + *((_BYTE *)lpuexcpt + 117) = 1; + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(v7 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, int, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v13 + 32))( + v13, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v2, + LODWORD(a2), + DWORD1(a2), + HIDWORD(a2)); + if ( v3 ) + std::ios::clear( + (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v18 + *(_DWORD *)(*v18 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpta + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v9) == -1 ) + std::ios::clear( + (_DWORD *)((char *)v18 + *(_DWORD *)(*v18 - 12)), + *(_DWORD *)((char *)v18 + *(_DWORD *)(*v18 - 12) + 20) | 1); + } + } + return this; +} +// 4CEE65: variable 'v10' is possibly undefined +// 4CEEE2: variable 'v3' is possibly undefined +// 4CEF36: variable 'v9' is possibly undefined +// 4CEE20: using guessed type char var_20[4]; + +//----- (004CF0D0) -------------------------------------------------------- +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, int a2) +{ + int v2; // ecx + char v3; // dl + int v4; // ecx + char v6; // al + int v7; // eax + int (__stdcall *v8)(unsigned __int8); // edx + int v9; // [esp+0h] [ebp-98h] + std::ostream *v10; // [esp+4h] [ebp-94h] + _BYTE *v11; // [esp+2Ch] [ebp-6Ch] + int v12; // [esp+30h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+34h] [ebp-64h] + char v16[4]; // [esp+78h] [ebp-20h] BYREF + _DWORD *v17; // [esp+7Ch] [ebp-1Ch] + + std::ostream::sentry::sentry((int)v16, this, v10); + if ( v16[0] ) + { + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)); + v12 = *((_DWORD *)lpuexcpt + 32); + if ( !v12 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 117) ) + { + v2 = *((char *)lpuexcpt + 116); + } + else + { + v11 = (_BYTE *)*((_DWORD *)lpuexcpt + 31); + if ( !v11 ) + std::__throw_bad_cast(); + if ( v11[28] ) + { + v2 = (char)v11[61]; + v6 = v11[61]; + } + else + { + std::ctype::_M_widen_init((int)v11); + v2 = 32; + v8 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v11 + 24); + v6 = 32; + if ( v8 != std::ctype::do_widen ) + { + v6 = ((int (__thiscall *)(_BYTE *, int))v8)(v11, 32); + v2 = v6; + } + } + *((_BYTE *)lpuexcpt + 116) = v6; + v7 = *(_DWORD *)this; + *((_BYTE *)lpuexcpt + 117) = 1; + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(v7 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, int, int))(*(_DWORD *)v12 + 12))( + v12, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v2, + a2); + if ( v3 ) + std::ios::clear( + (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v17 + *(_DWORD *)(*v17 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpta + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v9) == -1 ) + std::ios::clear( + (_DWORD *)((char *)v17 + *(_DWORD *)(*v17 - 12)), + *(_DWORD *)((char *)v17 + *(_DWORD *)(*v17 - 12) + 20) | 1); + } + } + return this; +} +// 4CF115: variable 'v10' is possibly undefined +// 4CF198: variable 'v3' is possibly undefined +// 4CF1EC: variable 'v9' is possibly undefined +// 4CF0D0: using guessed type char var_20[4]; + +//----- (004CF380) -------------------------------------------------------- +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, int a2) +{ + int v2; // ecx + char v3; // dl + int v4; // ecx + char v6; // al + int v7; // eax + int (__stdcall *v8)(unsigned __int8); // edx + int v9; // [esp+0h] [ebp-98h] + std::ostream *v10; // [esp+4h] [ebp-94h] + _BYTE *v11; // [esp+2Ch] [ebp-6Ch] + int v12; // [esp+30h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+34h] [ebp-64h] + char v16[4]; // [esp+78h] [ebp-20h] BYREF + _DWORD *v17; // [esp+7Ch] [ebp-1Ch] + + std::ostream::sentry::sentry((int)v16, this, v10); + if ( v16[0] ) + { + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)); + v12 = *((_DWORD *)lpuexcpt + 32); + if ( !v12 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 117) ) + { + v2 = *((char *)lpuexcpt + 116); + } + else + { + v11 = (_BYTE *)*((_DWORD *)lpuexcpt + 31); + if ( !v11 ) + std::__throw_bad_cast(); + if ( v11[28] ) + { + v2 = (char)v11[61]; + v6 = v11[61]; + } + else + { + std::ctype::_M_widen_init((int)v11); + v2 = 32; + v8 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v11 + 24); + v6 = 32; + if ( v8 != std::ctype::do_widen ) + { + v6 = ((int (__thiscall *)(_BYTE *, int))v8)(v11, 32); + v2 = v6; + } + } + *((_BYTE *)lpuexcpt + 116) = v6; + v7 = *(_DWORD *)this; + *((_BYTE *)lpuexcpt + 117) = 1; + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(v7 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, int, int))(*(_DWORD *)v12 + 16))( + v12, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v2, + a2); + if ( v3 ) + std::ios::clear( + (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v17 + *(_DWORD *)(*v17 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpta + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v9) == -1 ) + std::ios::clear( + (_DWORD *)((char *)v17 + *(_DWORD *)(*v17 - 12)), + *(_DWORD *)((char *)v17 + *(_DWORD *)(*v17 - 12) + 20) | 1); + } + } + return this; +} +// 4CF3C5: variable 'v10' is possibly undefined +// 4CF448: variable 'v3' is possibly undefined +// 4CF49C: variable 'v9' is possibly undefined +// 4CF380: using guessed type char var_20[4]; + +//----- (004CF630) -------------------------------------------------------- +std::ostream::sentry *__thiscall std::ostream::_M_insert(std::ostream::sentry *this, int a2, int a3) +{ + int v3; // ecx + char v4; // dl + int v5; // ecx + char v7; // al + int v8; // eax + int (__stdcall *v9)(unsigned __int8); // edx + int v10; // [esp+0h] [ebp-98h] + std::ostream *v11; // [esp+4h] [ebp-94h] + _BYTE *v12; // [esp+24h] [ebp-74h] + int v13; // [esp+30h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+34h] [ebp-64h] + char v17[4]; // [esp+78h] [ebp-20h] BYREF + _DWORD *v18; // [esp+7Ch] [ebp-1Ch] + + std::ostream::sentry::sentry((int)v17, this, v11); + if ( v17[0] ) + { + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)); + v13 = *((_DWORD *)lpuexcpt + 32); + if ( !v13 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 117) ) + { + v3 = *((char *)lpuexcpt + 116); + } + else + { + v12 = (_BYTE *)*((_DWORD *)lpuexcpt + 31); + if ( !v12 ) + std::__throw_bad_cast(); + if ( v12[28] ) + { + v3 = (char)v12[61]; + v7 = v12[61]; + } + else + { + std::ctype::_M_widen_init((int)v12); + v3 = 32; + v9 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v12 + 24); + v7 = 32; + if ( v9 != std::ctype::do_widen ) + { + v7 = ((int (__thiscall *)(_BYTE *, int))v9)(v12, 32); + v3 = v7; + } + } + *((_BYTE *)lpuexcpt + 116) = v7; + v8 = *(_DWORD *)this; + *((_BYTE *)lpuexcpt + 117) = 1; + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(v8 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, int, int, int))(*(_DWORD *)v13 + 20))( + v13, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v3, + a2, + a3); + if ( v4 ) + std::ios::clear( + (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v18 + *(_DWORD *)(*v18 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v5 = *((_DWORD *)lpuexcpta + 30); + if ( v5 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v5 + 24))(v5, v10) == -1 ) + std::ios::clear( + (_DWORD *)((char *)v18 + *(_DWORD *)(*v18 - 12)), + *(_DWORD *)((char *)v18 + *(_DWORD *)(*v18 - 12) + 20) | 1); + } + } + return this; +} +// 4CF681: variable 'v11' is possibly undefined +// 4CF709: variable 'v4' is possibly undefined +// 4CF75D: variable 'v10' is possibly undefined +// 4CF630: using guessed type char var_20[4]; + +//----- (004CF8F0) -------------------------------------------------------- +std::ostream::sentry *__thiscall std::ostream::_M_insert( + std::ostream::sentry *this, + int a2, + int a3) +{ + int v3; // ecx + char v4; // dl + int v5; // ecx + char v7; // al + int v8; // eax + int (__stdcall *v9)(unsigned __int8); // edx + int v10; // [esp+0h] [ebp-98h] + std::ostream *v11; // [esp+4h] [ebp-94h] + _BYTE *v12; // [esp+24h] [ebp-74h] + int v13; // [esp+30h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+34h] [ebp-64h] + char v17[4]; // [esp+78h] [ebp-20h] BYREF + _DWORD *v18; // [esp+7Ch] [ebp-1Ch] + + std::ostream::sentry::sentry((int)v17, this, v11); + if ( v17[0] ) + { + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)); + v13 = *((_DWORD *)lpuexcpt + 32); + if ( !v13 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 117) ) + { + v3 = *((char *)lpuexcpt + 116); + } + else + { + v12 = (_BYTE *)*((_DWORD *)lpuexcpt + 31); + if ( !v12 ) + std::__throw_bad_cast(); + if ( v12[28] ) + { + v3 = (char)v12[61]; + v7 = v12[61]; + } + else + { + std::ctype::_M_widen_init((int)v12); + v3 = 32; + v9 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v12 + 24); + v7 = 32; + if ( v9 != std::ctype::do_widen ) + { + v7 = ((int (__thiscall *)(_BYTE *, int))v9)(v12, 32); + v3 = v7; + } + } + *((_BYTE *)lpuexcpt + 116) = v7; + v8 = *(_DWORD *)this; + *((_BYTE *)lpuexcpt + 117) = 1; + lpuexcpt = (std::ostream::sentry *)((char *)this + *(_DWORD *)(v8 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, int, int, int))(*(_DWORD *)v13 + 24))( + v13, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v3, + a2, + a3); + if ( v4 ) + std::ios::clear( + (std::ostream::sentry *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v18 + *(_DWORD *)(*v18 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v5 = *((_DWORD *)lpuexcpta + 30); + if ( v5 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v5 + 24))(v5, v10) == -1 ) + std::ios::clear( + (_DWORD *)((char *)v18 + *(_DWORD *)(*v18 - 12)), + *(_DWORD *)((char *)v18 + *(_DWORD *)(*v18 - 12) + 20) | 1); + } + } + return this; +} +// 4CF941: variable 'v11' is possibly undefined +// 4CF9C9: variable 'v4' is possibly undefined +// 4CFA1D: variable 'v10' is possibly undefined +// 4CF8F0: using guessed type char var_20[4]; + +//----- (004CFBB0) -------------------------------------------------------- +void __thiscall std::ostream::ostream(_DWORD *this, _DWORD *a2) +{ + int v2; // eax + std::ios_base *v3; // [esp+4h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-48h] + _DWORD *v5; // [esp+14h] [ebp-44h] + + v5 = this + 1; + std::ios_base::ios_base(this + 1); + *((_WORD *)this + 60) = 0; + this[29] = 0; + this[31] = 0; + this[32] = 0; + this[33] = 0; + this[34] = 0; + *this = &off_55FE68; + this[1] = off_55FE7C; + lpuexcpt = (struct _Unwind_Exception *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_move((int)v5, lpuexcpt, v3); + std::ios::_M_cache_locale(v5, (int)(this + 28)); + v2 = *((_DWORD *)lpuexcpt + 28); + this[31] = 0; + *((_DWORD *)lpuexcpt + 28) = 0; + this[29] = v2; + *((_WORD *)this + 60) = *((_WORD *)lpuexcpt + 58); +} +// 4CFC42: variable 'v3' is possibly undefined +// 55FE68: using guessed type void (__cdecl *off_55FE68)(std::ostream *__hidden this); +// 55FE7C: using guessed type void (__cdecl *off_55FE7C[2])(std::ostream *__hidden this); + +//----- (004CFCC0) -------------------------------------------------------- +void __thiscall std::ostream::ostream(_DWORD *this, int a2) +{ + int v2; // [esp+14h] [ebp-44h] + + v2 = (int)(this + 1); + std::ios_base::ios_base(this + 1); + this[29] = 0; + *((_WORD *)this + 60) = 0; + this[31] = 0; + this[32] = 0; + this[33] = 0; + this[34] = 0; + *this = &off_55FE68; + this[1] = off_55FE7C; + std::ios::init(v2, a2); +} +// 55FE68: using guessed type void (__cdecl *off_55FE68)(std::ostream *__hidden this); +// 55FE7C: using guessed type void (__cdecl *off_55FE7C[2])(std::ostream *__hidden this); + +//----- (004CFDA0) -------------------------------------------------------- +int __userpurge std::ostream::ostream@(int a1@, std::ostream *this, std::iostream *a3) +{ + int result; // eax + + std::ios_base::ios_base((_DWORD *)(a1 + 4)); + result = 0; + *(_DWORD *)(a1 + 116) = 0; + *(_WORD *)(a1 + 120) = 0; + *(_DWORD *)(a1 + 124) = 0; + *(_DWORD *)(a1 + 128) = 0; + *(_DWORD *)(a1 + 132) = 0; + *(_DWORD *)(a1 + 136) = 0; + *(_DWORD *)a1 = &off_55FE68; + *(_DWORD *)(a1 + 4) = off_55FE7C; + return result; +} +// 55FE68: using guessed type void (__cdecl *off_55FE68)(std::ostream *__hidden this); +// 55FE7C: using guessed type void (__cdecl *off_55FE7C[2])(std::ostream *__hidden this); + +//----- (004CFE00) -------------------------------------------------------- +void __fastcall std::ostream::ostream(int a1) +{ + int v1; // [esp+14h] [ebp-44h] + + v1 = a1 + 4; + std::ios_base::ios_base((_DWORD *)(a1 + 4)); + *(_DWORD *)(a1 + 116) = 0; + *(_WORD *)(a1 + 120) = 0; + *(_DWORD *)(a1 + 124) = 0; + *(_DWORD *)(a1 + 128) = 0; + *(_DWORD *)(a1 + 132) = 0; + *(_DWORD *)(a1 + 136) = 0; + *(_DWORD *)a1 = &off_55FE68; + *(_DWORD *)(a1 + 4) = off_55FE7C; + std::ios::init(v1, 0); +} +// 55FE68: using guessed type void (__cdecl *off_55FE68)(std::ostream *__hidden this); +// 55FE7C: using guessed type void (__cdecl *off_55FE7C[2])(std::ostream *__hidden this); + +//----- (004CFEE0) -------------------------------------------------------- +int __thiscall std::ostream::ostream(_DWORD *this, _DWORD *a2, _DWORD *a3) +{ + int v3; // eax + int v4; // ebx + std::ios_base *v5; // esi + int v6; // eax + int result; // eax + std::ios_base *v8; // [esp+4h] [ebp-18h] + + v3 = a2[1]; + v4 = (int)this + *(_DWORD *)(*a2 - 12); + *this = *a2; + *(_DWORD *)v4 = v3; + v5 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move(v4, v5, v8); + std::ios::_M_cache_locale((_DWORD *)v4, v4 + 108); + v6 = *((_DWORD *)v5 + 28); + *(_DWORD *)(v4 + 120) = 0; + *((_DWORD *)v5 + 28) = 0; + *(_DWORD *)(v4 + 112) = v6; + result = *((unsigned __int16 *)v5 + 58); + *(_WORD *)(v4 + 116) = result; + return result; +} +// 4CFF05: variable 'v8' is possibly undefined + +//----- (004CFF50) -------------------------------------------------------- +BOOL __thiscall std::ostream::ostream(int *this, int *a2, int a3) +{ + int v3; // edx + int v4; // eax + _DWORD *v5; // ecx + + v3 = *a2; + v4 = a2[1]; + *this = *a2; + v5 = (int *)((char *)this + *(_DWORD *)(v3 - 12)); + *v5 = v4; + return std::ios::init((int)v5, a3); +} + +//----- (004CFF80) -------------------------------------------------------- +int __thiscall std::ostream::ostream(_DWORD *ecx0, std::ostream *this, std::iostream *a3) +{ + int v3; // edx + int result; // eax + + v3 = *(_DWORD *)this; + result = *((_DWORD *)this + 1); + *ecx0 = *(_DWORD *)this; + *(_DWORD *)((char *)ecx0 + *(_DWORD *)(v3 - 12)) = result; + return result; +} + +//----- (004CFFA0) -------------------------------------------------------- +BOOL __thiscall std::ostream::ostream(_DWORD *ecx0, std::ostream *this) +{ + int v2; // edx + int v3; // eax + _DWORD *v4; // ecx + + v2 = *(_DWORD *)this; + v3 = *((_DWORD *)this + 1); + *ecx0 = *(_DWORD *)this; + v4 = (_DWORD *)((char *)ecx0 + *(_DWORD *)(v2 - 12)); + *v4 = v3; + return std::ios::init((int)v4, 0); +} + +//----- (004CFFC0) -------------------------------------------------------- +void __fastcall std::ostream::~ostream(_DWORD *a1) +{ + _DWORD *v2; // ecx + + v2 = a1 + 1; + *(v2 - 1) = &off_55FE68; + *v2 = &off_560E20; + std::ios_base::~ios_base((int)v2); + operator delete(a1); +} +// 55FE68: using guessed type void (__cdecl *off_55FE68)(std::ostream *__hidden this); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (004CFFF0) -------------------------------------------------------- +void __fastcall std::ostream::~ostream(_DWORD *a1) +{ + _DWORD *v1; // ecx + + *a1 = &off_55FE68; + v1 = a1 + 1; + *v1 = &off_560E20; + std::ios_base::~ios_base((int)v1); +} +// 55FE68: using guessed type void (__cdecl *off_55FE68)(std::ostream *__hidden this); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (004D0010) -------------------------------------------------------- +void __thiscall std::ostream::~ostream(_DWORD *ecx0, std::ostream *this) +{ + int v2; // eax + + v2 = *(_DWORD *)this; + *ecx0 = *(_DWORD *)this; + *(_DWORD *)((char *)ecx0 + *(_DWORD *)(v2 - 12)) = *((_DWORD *)this + 1); +} + +//----- (004D0030) -------------------------------------------------------- +_DWORD *__thiscall std::ostream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // ebx + std::ios_base *v4; // esi + int v5; // eax + char v6; // dl + char v7; // dl + std::ios_base *v9; // [esp+4h] [ebp-18h] + + v3 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + v4 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + std::ios_base::_M_swap(v4, v3, v9); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + v5 = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = v5; + v6 = *((_BYTE *)v4 + 116); + *((_BYTE *)v4 + 116) = *((_BYTE *)v3 + 116); + LOBYTE(v5) = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 116) = v6; + v7 = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 117) = v5; + *((_BYTE *)v3 + 117) = v7; + return this; +} +// 4D006A: variable 'v9' is possibly undefined + +//----- (004D00E0) -------------------------------------------------------- +int __thiscall std::ostream::operator<<(void *this, int (__cdecl *a2)(void *)) +{ + return a2(this); +} + +//----- (004D00F0) -------------------------------------------------------- +char *__thiscall std::ostream::operator<<(char *this, void (__cdecl *a2)(char *)) +{ + a2(&this[*(_DWORD *)(*(_DWORD *)this - 12)]); + return this; +} + +//----- (004D0110) -------------------------------------------------------- +char *__thiscall std::ostream::operator<<(char *this, void (__cdecl *a2)(char *)) +{ + a2(&this[*(_DWORD *)(*(_DWORD *)this - 12)]); + return this; +} + +//----- (004D0140) -------------------------------------------------------- +std::ostream::sentry *__thiscall std::ostream::operator<<(std::ostream::sentry *this, _DWORD *a2) +{ + char *v2; // ecx + int v3; // eax + int v4; // ecx + int v6; // [esp+0h] [ebp-78h] + std::ostream *v7; // [esp+4h] [ebp-74h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-64h] + char v10; // [esp+57h] [ebp-21h] BYREF + char v11[4]; // [esp+58h] [ebp-20h] BYREF + _DWORD *v12; // [esp+5Ch] [ebp-1Ch] + + std::ostream::sentry::sentry((int)v11, this, v7); + if ( v11[0] ) + { + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + if ( !a2 ) + { + v3 = 1; + goto LABEL_13; + } + if ( !std::__copy_streambufs_eof>(a2, *((_DWORD **)v2 + 30), &v10) ) + { + v3 = 4; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); +LABEL_13: + std::ios::clear(v2, *((_DWORD *)v2 + 5) | v3); + } + } + else if ( !a2 ) + { + v3 = 1; + v2 = (char *)this + *(_DWORD *)(*(_DWORD *)this - 12); + goto LABEL_13; + } + lpuexcpt = (struct _Unwind_Exception *)((char *)v12 + *(_DWORD *)(*v12 - 12)); + if ( (*((_BYTE *)lpuexcpt + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpt + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v6) == -1 ) + std::ios::clear( + (_DWORD *)((char *)v12 + *(_DWORD *)(*v12 - 12)), + *(_DWORD *)((char *)v12 + *(_DWORD *)(*v12 - 12) + 20) | 1); + } + } + return this; +} +// 4D0182: variable 'v7' is possibly undefined +// 4D021B: variable 'v6' is possibly undefined +// 4D0140: using guessed type char var_20[4]; + +//----- (004D0350) -------------------------------------------------------- +std::ostream::sentry *__thiscall std::ostream::operator<<(std::ostream::sentry *this, unsigned __int8 a2) +{ + return std::ostream::_M_insert(this, a2); +} + +//----- (004D0380) -------------------------------------------------------- +std::ostream::sentry *__thiscall std::ostream::operator<<(std::ostream::sentry *this, float a2) +{ + return std::ostream::_M_insert(this, a2); +} + +//----- (004D03E0) -------------------------------------------------------- +std::ostream::sentry *__thiscall std::ostream::operator<<(std::ostream::sentry *this, unsigned __int16 a2) +{ + int v2; // eax + + v2 = *(_DWORD *)((_BYTE *)this + *(_DWORD *)(*(_DWORD *)this - 12) + 12) & 0x4A; + if ( v2 == 64 || v2 == 8 ) + return std::ostream::_M_insert(this, a2); + else + return std::ostream::_M_insert(this, (__int16)a2); +} + +//----- (004D0420) -------------------------------------------------------- +std::ostream::sentry *__thiscall std::ostream::operator<<(std::ostream::sentry *this, unsigned __int16 a2) +{ + return std::ostream::_M_insert(this, a2); +} + +//----- (004D0450) -------------------------------------------------------- +char *__cdecl std::string::_S_compare(std::string *this, unsigned int a2) +{ + return (char *)this - a2; +} + +//----- (004D0460) -------------------------------------------------------- +int __thiscall std::string::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (004D0470) -------------------------------------------------------- +int __thiscall std::string::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (004D0480) -------------------------------------------------------- +char *__fastcall std::string::_M_leak_hard(char **a1) +{ + char *result; // eax + unsigned int v3; // [esp+Ch] [ebp-10h] + + if ( *((int *)*a1 - 1) > 0 ) + std::string::_M_mutate(a1, 0, 0, 0, v3); + result = *a1; + *((_DWORD *)*a1 - 1) = -1; + return result; +} +// 4D04A6: variable 'v3' is possibly undefined + +//----- (004D04C0) -------------------------------------------------------- +_DWORD *__cdecl std::string::_S_construct(size_t Size, char a2) +{ + _DWORD *v2; // ebx + _DWORD *result; // eax + + v2 = std::string::_Rep::_S_create(Size, 0); + if ( Size ) + { + if ( Size == 1 ) + *((_BYTE *)v2 + 12) = a2; + else + memset(v2 + 3, a2, Size); + } + v2[2] = 0; + result = v2 + 3; + *v2 = Size; + *((_BYTE *)v2 + Size + 12) = 0; + return result; +} + +//----- (004D0530) -------------------------------------------------------- +int __cdecl std::string::_S_construct<__gnu_cxx::__normal_iterator>(_BYTE *Src, int a2) +{ + size_t Size; // ebx + size_t *v3; // eax + size_t *v4; // esi + int v5; // ebp + int result; // eax + + Size = a2 - (_DWORD)Src; + v3 = std::string::_Rep::_S_create(a2 - (_DWORD)Src, 0); + v4 = v3; + v5 = (int)(v3 + 3); + if ( a2 - (_DWORD)Src == 1 ) + { + *((_BYTE *)v3 + 12) = *Src; + } + else if ( Size ) + { + memcpy(v3 + 3, Src, Size); + } + v4[2] = 0; + result = v5; + *v4 = Size; + *((_BYTE *)v4 + Size + 12) = 0; + return result; +} + +//----- (004D05A0) -------------------------------------------------------- +int __cdecl std::string::_S_construct(_BYTE *Src, int a2) +{ + size_t Size; // ebx + size_t *v3; // eax + size_t *v4; // esi + int v5; // ebp + int result; // eax + + if ( a2 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + Size = a2 - (_DWORD)Src; + v3 = std::string::_Rep::_S_create(a2 - (_DWORD)Src, 0); + v4 = v3; + v5 = (int)(v3 + 3); + if ( a2 - (_DWORD)Src == 1 ) + { + *((_BYTE *)v3 + 12) = *Src; + } + else if ( Size ) + { + memcpy(v3 + 3, Src, Size); + } + v4[2] = 0; + result = v5; + *v4 = Size; + *((_BYTE *)v4 + Size + 12) = 0; + return result; +} + +//----- (004D0630) -------------------------------------------------------- +int __cdecl std::string::_S_construct(_BYTE *Src, int a2) +{ + size_t Size; // ebx + size_t *v3; // eax + size_t *v4; // esi + int v5; // ebp + int result; // eax + + if ( a2 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + Size = a2 - (_DWORD)Src; + v3 = std::string::_Rep::_S_create(a2 - (_DWORD)Src, 0); + v4 = v3; + v5 = (int)(v3 + 3); + if ( a2 - (_DWORD)Src == 1 ) + { + *((_BYTE *)v3 + 12) = *Src; + } + else if ( Size ) + { + memcpy(v3 + 3, Src, Size); + } + v4[2] = 0; + result = v5; + *v4 = Size; + *((_BYTE *)v4 + Size + 12) = 0; + return result; +} + +//----- (004D06C0) -------------------------------------------------------- +void *std::string::_S_empty_rep() +{ + return &std::string::_Rep::_S_empty_rep_storage; +} + +//----- (004D06D0) -------------------------------------------------------- +int __cdecl std::string::_S_copy_chars(_BYTE *a1, unsigned __int8 *Src, size_t Size) +{ + int result; // eax + + result = Size - (_DWORD)Src; + if ( Size - (_DWORD)Src == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( result ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (004D0710) -------------------------------------------------------- +int __cdecl std::string::_S_copy_chars(_BYTE *a1, unsigned __int8 *Src, size_t Size) +{ + int result; // eax + + result = Size - (_DWORD)Src; + if ( Size - (_DWORD)Src == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( result ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (004D0750) -------------------------------------------------------- +size_t __cdecl std::string::_S_copy_chars(std::string *this, char *Src, size_t Size) +{ + size_t result; // eax + + result = Size - (_DWORD)Src; + if ( Size - (_DWORD)Src == 1 ) + { + result = (unsigned __int8)*Src; + *(_BYTE *)this = result; + } + else if ( result ) + { + return (size_t)memcpy(this, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (004D0790) -------------------------------------------------------- +size_t __cdecl std::string::_S_copy_chars(std::string *this, char *Src, size_t Size) +{ + size_t result; // eax + + result = Size - (_DWORD)Src; + if ( Size - (_DWORD)Src == 1 ) + { + result = (unsigned __int8)*Src; + *(_BYTE *)this = result; + } + else if ( result ) + { + return (size_t)memcpy(this, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (004D07D0) -------------------------------------------------------- +void __fastcall std::string::shrink_to_fit(int *a1) +{ + unsigned int v1; // [esp+4h] [ebp-64h] + + if ( *(_DWORD *)(*a1 - 12) < *(_DWORD *)(*a1 - 8) ) + std::string::reserve(a1, 0, v1); +} +// 4D0839: variable 'v1' is possibly undefined + +//----- (004D0860) -------------------------------------------------------- +char **__userpurge std::string::_M_replace_aux@( + char **a1@, + std::string *this, + unsigned int a3, + size_t Size, + char a5, + char a6) +{ + _BYTE *v7; // edi + unsigned int v9; // [esp+Ch] [ebp-20h] + + if ( Size > a3 + 1073741820 - *((_DWORD *)*a1 - 3) ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace_aux"); + std::string::_M_mutate(a1, (size_t)this, a3, Size, v9); + if ( !Size ) + return a1; + v7 = (char *)this + (_DWORD)*a1; + if ( Size != 1 ) + { + memset(v7, a5, Size); + return a1; + } + *v7 = a5; + return a1; +} +// 4D0895: variable 'v9' is possibly undefined + +//----- (004D08F0) -------------------------------------------------------- +char **__userpurge std::string::_M_replace_safe@( + char **a1@, + std::string *this, + unsigned int a3, + _BYTE *Src, + size_t Size, + unsigned int a6) +{ + _BYTE *v7; // edi + unsigned int v9; // [esp+Ch] [ebp-10h] + + std::string::_M_mutate(a1, (size_t)this, a3, Size, v9); + if ( !Size ) + return a1; + v7 = (char *)this + (_DWORD)*a1; + if ( Size != 1 ) + { + memcpy(v7, Src, Size); + return a1; + } + *v7 = *Src; + return a1; +} +// 4D090F: variable 'v9' is possibly undefined + +//----- (004D0960) -------------------------------------------------------- +_DWORD *__cdecl std::string::_S_construct_aux_2(size_t Size, char a2) +{ + _DWORD *v2; // ebx + _DWORD *result; // eax + + v2 = std::string::_Rep::_S_create(Size, 0); + if ( Size ) + { + if ( Size == 1 ) + *((_BYTE *)v2 + 12) = a2; + else + memset(v2 + 3, a2, Size); + } + v2[2] = 0; + result = v2 + 3; + *v2 = Size; + *((_BYTE *)v2 + Size + 12) = 0; + return result; +} + +//----- (004D09D0) -------------------------------------------------------- +char *__userpurge std::string::at@(char **a1@, unsigned int this, unsigned int a3) +{ + char *v3; // eax + char *v6; // eax + unsigned int v7; // [esp+Ch] [ebp-10h] + + v3 = *a1; + if ( this >= *((_DWORD *)*a1 - 3) ) + std::__throw_out_of_range_fmt( + "basic_string::at: __n (which is %zu) >= this->size() (which is %zu)", + this, + *((_DWORD *)*a1 - 3)); + if ( *((int *)v3 - 1) < 0 ) + return &v3[this]; + if ( *((int *)v3 - 1) > 0 ) + std::string::_M_mutate(a1, 0, 0, 0, v7); + v6 = *a1; + *((_DWORD *)v6 - 1) = -1; + return &v6[this]; +} +// 4D0A18: variable 'v7' is possibly undefined + +//----- (004D0A50) -------------------------------------------------------- +char *__fastcall std::string::end(char **a1) +{ + char *v1; // eax + char *v4; // eax + unsigned int v5; // [esp+Ch] [ebp-10h] + + v1 = *a1; + if ( *((int *)*a1 - 1) < 0 ) + return &v1[*((_DWORD *)v1 - 3)]; + if ( *((int *)v1 - 1) > 0 ) + std::string::_M_mutate(a1, 0, 0, 0, v5); + v4 = *a1; + *((_DWORD *)v4 - 1) = -1; + return &v4[*((_DWORD *)v4 - 3)]; +} +// 4D0A84: variable 'v5' is possibly undefined + +//----- (004D0AA0) -------------------------------------------------------- +void __thiscall std::string::_Rep::_M_destroy(void *Block, int a2) +{ + operator delete(Block); +} + +//----- (004D0AC0) -------------------------------------------------------- +void __thiscall std::string::_Rep::_M_dispose(volatile signed __int32 *Block, int a2) +{ + int v2; // eax + + if ( !_CRT_MT ) + { + v2 = *((_DWORD *)Block + 2); + *((_DWORD *)Block + 2) = v2 - 1; + if ( v2 > 0 ) + return; +LABEL_5: + operator delete((void *)Block); + return; + } + if ( _InterlockedExchangeAdd(Block + 2, 0xFFFFFFFF) <= 0 ) + goto LABEL_5; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004D0B00) -------------------------------------------------------- +int __fastcall std::string::_Rep::_M_refcopy(int a1) +{ + if ( _CRT_MT ) + _InterlockedAdd((volatile signed __int32 *)(a1 + 8), 1u); + else + ++*(_DWORD *)(a1 + 8); + return a1 + 12; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004D0B30) -------------------------------------------------------- +int __fastcall std::string::_Rep::_M_refdata(int a1) +{ + return a1 + 12; +} + +//----- (004D0B40) -------------------------------------------------------- +void *std::string::_Rep::_S_empty_rep() +{ + return &std::string::_Rep::_S_empty_rep_storage; +} + +//----- (004D0B50) -------------------------------------------------------- +void __fastcall std::string::_Rep::_M_set_leaked(int a1) +{ + *(_DWORD *)(a1 + 8) = -1; +} + +//----- (004D0B60) -------------------------------------------------------- +void __fastcall std::string::_Rep::_M_set_sharable(int a1) +{ + *(_DWORD *)(a1 + 8) = 0; +} + +//----- (004D0B70) -------------------------------------------------------- +std::string::_Rep *__userpurge std::string::_Rep::_M_set_length_and_sharable@( + _DWORD *a1@, + std::string::_Rep *this, + unsigned int a3) +{ + std::string::_Rep *result; // eax + + result = this; + a1[2] = 0; + *a1 = this; + *((_BYTE *)this + (_DWORD)a1 + 12) = 0; + return result; +} + +//----- (004D0B90) -------------------------------------------------------- +volatile signed __int32 *__thiscall std::string::_Rep::_M_grab(volatile signed __int32 *this, int a2, int a3) +{ + volatile signed __int32 *result; // eax + + if ( *((int *)this + 2) < 0 ) + return std::string::_Rep::_M_clone((int)this, a2, 0); + if ( _CRT_MT ) + { + _InterlockedAdd(this + 2, 1u); + return this + 3; + } + else + { + result = this + 3; + ++*((_DWORD *)this + 2); + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004D0BE0) -------------------------------------------------------- +_DWORD *__thiscall std::string::_Rep::_M_clone(int this, int a2, int a3) +{ + _DWORD *v4; // ebx + size_t v5; // eax + + v4 = std::string::_Rep::_S_create(a3 + *(_DWORD *)this, *(_DWORD *)(this + 4)); + v5 = *(_DWORD *)this; + if ( *(_DWORD *)this ) + { + if ( v5 == 1 ) + *((_BYTE *)v4 + 12) = *(_BYTE *)(this + 12); + else + memcpy(v4 + 3, (const void *)(this + 12), *(_DWORD *)this); + v5 = *(_DWORD *)this; + } + *v4 = v5; + v4[2] = 0; + *((_BYTE *)v4 + v5 + 12) = 0; + return v4 + 3; +} + +//----- (004D0C60) -------------------------------------------------------- +_DWORD *__cdecl std::string::_Rep::_S_create(unsigned int a1, unsigned int a2) +{ + unsigned int v2; // ebx + size_t v3; // eax + _DWORD *result; // eax + + v2 = a1; + if ( a1 > 0x3FFFFFFC ) + std::__throw_length_error((std::length_error *)"basic_string::_S_create"); + if ( a1 <= a2 ) + { + v3 = a1 + 13; + } + else + { + if ( a1 < 2 * a2 ) + v2 = 2 * a2; + if ( v2 + 29 <= 0x1000 || v2 <= a2 ) + { + v3 = v2 + 13; + if ( (int)(v2 + 13) < 0 ) + std::__throw_bad_alloc(); + } + else + { + v2 = v2 + 4096 - (((_WORD)v2 + 29) & 0xFFF); + if ( v2 > 0x3FFFFFFC ) + v2 = 1073741820; + v3 = v2 + 13; + } + } + result = operator new(v3); + result[1] = v2; + result[2] = 0; + return result; +} + +//----- (004D0CF0) -------------------------------------------------------- +char *__fastcall std::string::back(char **a1) +{ + char *v1; // eax + int v2; // esi + char *v5; // eax + unsigned int v6; // [esp+Ch] [ebp-10h] + + v1 = *a1; + v2 = *((_DWORD *)*a1 - 3) - 1; + if ( *((int *)*a1 - 1) < 0 ) + return &v1[v2]; + if ( *((int *)v1 - 1) > 0 ) + std::string::_M_mutate(a1, 0, 0, 0, v6); + v5 = *a1; + *((_DWORD *)v5 - 1) = -1; + return &v5[v2]; +} +// 4D0D30: variable 'v6' is possibly undefined + +//----- (004D0D50) -------------------------------------------------------- +char **__thiscall std::string::rend(char **ecx0, char **this) +{ + char *v3; // eax + char *v5; // eax + unsigned int v6; // [esp+Ch] [ebp-10h] + + v3 = *this; + if ( *((int *)*this - 1) >= 0 ) + { + if ( *((int *)v3 - 1) > 0 ) + std::string::_M_mutate(this, 0, 0, 0, v6); + v5 = *this; + *((_DWORD *)v5 - 1) = -1; + *ecx0 = v5; + return ecx0; + } + else + { + *ecx0 = v3; + return ecx0; + } +} +// 4D0D90: variable 'v6' is possibly undefined + +//----- (004D0DB0) -------------------------------------------------------- +int __userpurge std::string::swap@(int *a1@, std::string *this, std::string *a3) +{ + int result; // eax + int v4; // edx + + result = *a1; + if ( *(int *)(*a1 - 4) < 0 ) + *(_DWORD *)(result - 4) = 0; + v4 = *(_DWORD *)this; + if ( *(int *)(*(_DWORD *)this - 4) < 0 ) + *(_DWORD *)(v4 - 4) = 0; + *a1 = v4; + *(_DWORD *)this = result; + return result; +} + +//----- (004D0DE0) -------------------------------------------------------- +char *__fastcall std::string::begin(char **a1) +{ + char *result; // eax + unsigned int v3; // [esp+Ch] [ebp-10h] + + result = *a1; + if ( *((int *)*a1 - 1) >= 0 ) + { + if ( *((int *)result - 1) > 0 ) + std::string::_M_mutate(a1, 0, 0, 0, v3); + result = *a1; + *((_DWORD *)*a1 - 1) = -1; + } + return result; +} +// 4D0E14: variable 'v3' is possibly undefined + +//----- (004D0E30) -------------------------------------------------------- +void __fastcall std::string::clear(char **a1) +{ + unsigned int v1; // [esp+Ch] [ebp-10h] + + std::string::_M_mutate(a1, 0, *((_DWORD *)*a1 - 3), 0, v1); +} +// 4D0E4B: variable 'v1' is possibly undefined + +//----- (004D0E60) -------------------------------------------------------- +char *__thiscall std::string::erase(char **this, int a2) +{ + size_t v3; // esi + char *v4; // eax + unsigned int v6; // [esp+Ch] [ebp-10h] + + v3 = a2 - (_DWORD)*this; + std::string::_M_mutate(this, v3, 1u, 0, v6); + v4 = *this; + *((_DWORD *)v4 - 1) = -1; + return &v4[v3]; +} +// 4D0E82: variable 'v6' is possibly undefined + +//----- (004D0EA0) -------------------------------------------------------- +char *__thiscall std::string::erase(char **this, char *a2, char *a3) +{ + char *result; // eax + size_t v5; // ebx + char *v6; // eax + unsigned int v7; // [esp+Ch] [ebp-10h] + + result = a2; + if ( a3 != a2 ) + { + v5 = a2 - *this; + std::string::_M_mutate(this, v5, a3 - a2, 0, v7); + v6 = *this; + *((_DWORD *)v6 - 1) = -1; + return &v6[v5]; + } + return result; +} +// 4D0ED5: variable 'v7' is possibly undefined + +//----- (004D0EF0) -------------------------------------------------------- +char **__userpurge std::string::erase@(char **a1@, std::string *this, unsigned int a3, unsigned int a4) +{ + unsigned int v5; // ecx + unsigned int v6; // eax + unsigned int v8; // [esp+Ch] [ebp-10h] + + v5 = *((_DWORD *)*a1 - 3); + v6 = v5 - (_DWORD)this; + if ( v5 - (unsigned int)this > a3 ) + v6 = a3; + if ( (unsigned int)this > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + (size_t)this, + v5); + std::string::_M_mutate(a1, (size_t)this, v6, 0, v8); + return a1; +} +// 4D0F22: variable 'v8' is possibly undefined + +//----- (004D0F50) -------------------------------------------------------- +char *__fastcall std::string::front(char **a1) +{ + char *result; // eax + unsigned int v3; // [esp+Ch] [ebp-10h] + + result = *a1; + if ( *((int *)*a1 - 1) >= 0 ) + { + if ( *((int *)result - 1) > 0 ) + std::string::_M_mutate(a1, 0, 0, 0, v3); + result = *a1; + *((_DWORD *)*a1 - 1) = -1; + } + return result; +} +// 4D0F84: variable 'v3' is possibly undefined + +//----- (004D0FA0) -------------------------------------------------------- +int *__userpurge std::string::append@(int *a1@, std::string *this, const char *a3) +{ + size_t v4; // eax + unsigned int v6; // [esp+8h] [ebp-14h] + + v4 = strlen((const char *)this); + return std::string::append(a1, this, v4, v6); +} +// 4D0FBC: variable 'v6' is possibly undefined + +//----- (004D0FD0) -------------------------------------------------------- +int *__userpurge std::string::append@(int *a1@, std::string *this, size_t Size, unsigned int a4) +{ + std::string *v5; // ebp + unsigned int v6; // eax + int v7; // esi + std::string *v8; // esi + _BYTE *v9; // eax + int v10; // eax + char *v12; // ebp + bool v13; // cc + void *Src; // [esp+4h] [ebp-28h] + + v5 = this; + if ( Size ) + { + v6 = *a1; + v7 = *(_DWORD *)(*a1 - 12); + if ( Size > 1073741820 - v7 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v8 = (std::string *)(Size + v7); + if ( (unsigned int)v8 > *(_DWORD *)(v6 - 8) || (v13 = *(_DWORD *)(v6 - 4) <= 0, v6 = *a1, !v13) ) + { + if ( v6 <= (unsigned int)this && (unsigned int)this <= v6 + *(_DWORD *)(v6 - 12) ) + { + v12 = (char *)this - v6; + std::string::reserve(a1, v8, (unsigned int)Src); + v5 = (std::string *)&v12[*a1]; + v9 = (_BYTE *)(*(_DWORD *)(*a1 - 12) + *a1); + if ( Size != 1 ) + goto LABEL_8; + goto LABEL_12; + } + std::string::reserve(a1, v8, (unsigned int)Src); + v6 = *a1; + } + v9 = (_BYTE *)(*(_DWORD *)(v6 - 12) + v6); + if ( Size != 1 ) + { +LABEL_8: + memcpy(v9, v5, Size); +LABEL_9: + v10 = *a1; + *(_DWORD *)(v10 - 4) = 0; + *(_DWORD *)(v10 - 12) = v8; + *((_BYTE *)v8 + v10) = 0; + return a1; + } +LABEL_12: + *v9 = *(_BYTE *)v5; + goto LABEL_9; + } + return a1; +} +// 4D1012: variable 'Src' is possibly undefined + +//----- (004D10A0) -------------------------------------------------------- +int *__userpurge std::string::append@(int *a1@, std::string *this, const std::string *a3) +{ + size_t Size; // esi + size_t v5; // edi + _BYTE *v6; // edx + _BYTE *v7; // eax + int v8; // eax + void *Src; // [esp+4h] [ebp-28h] + + Size = *(_DWORD *)(*(_DWORD *)this - 12); + if ( Size ) + { + v5 = Size + *(_DWORD *)(*a1 - 12); + if ( v5 > *(_DWORD *)(*a1 - 8) || *(int *)(*a1 - 4) > 0 ) + { + std::string::reserve(a1, (std::string *)(Size + *(_DWORD *)(*a1 - 12)), (unsigned int)Src); + v6 = *(_BYTE **)this; + v7 = (_BYTE *)(*(_DWORD *)(*a1 - 12) + *a1); + if ( Size == 1 ) + { +LABEL_9: + *v7 = *v6; + goto LABEL_5; + } + } + else + { + v6 = *(_BYTE **)this; + v7 = (_BYTE *)(*(_DWORD *)(*a1 - 12) + *a1); + if ( Size == 1 ) + goto LABEL_9; + } + memcpy(v7, v6, Size); +LABEL_5: + v8 = *a1; + *(_DWORD *)(v8 - 4) = 0; + *(_DWORD *)(v8 - 12) = v5; + *(_BYTE *)(v8 + v5) = 0; + } + return a1; +} +// 4D10C8: variable 'Src' is possibly undefined + +//----- (004D1130) -------------------------------------------------------- +int *__userpurge std::string::append@( + int *a1@, + std::string *this, + const std::string *a3, + size_t a4, + unsigned int a5) +{ + unsigned int v5; // ebx + size_t Size; // ebx + std::string *v8; // edx + _BYTE *v9; // edi + _BYTE *v10; // eax + int v11; // eax + void *Src; // [esp+4h] [ebp-38h] + std::string *v14; // [esp+1Ch] [ebp-20h] + std::string *v15; // [esp+1Ch] [ebp-20h] + + v5 = *(_DWORD *)(*(_DWORD *)this - 12); + if ( (unsigned int)a3 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::append", + (size_t)a3, + *(_DWORD *)(*(_DWORD *)this - 12)); + Size = v5 - (_DWORD)a3; + if ( Size > a4 ) + Size = a4; + if ( Size ) + { + v8 = (std::string *)(Size + *(_DWORD *)(*a1 - 12)); + if ( (unsigned int)v8 > *(_DWORD *)(*a1 - 8) || *(int *)(*a1 - 4) > 0 ) + { + v14 = (std::string *)(Size + *(_DWORD *)(*a1 - 12)); + std::string::reserve(a1, v14, (unsigned int)Src); + v8 = v14; + } + v9 = (char *)a3 + *(_DWORD *)this; + v10 = (_BYTE *)(*(_DWORD *)(*a1 - 12) + *a1); + if ( Size == 1 ) + { + *v10 = *v9; + } + else + { + v15 = v8; + memcpy(v10, v9, Size); + v8 = v15; + } + v11 = *a1; + *(_DWORD *)(v11 - 4) = 0; + *(_DWORD *)(v11 - 12) = v8; + *((_BYTE *)v8 + v11) = 0; + } + return a1; +} +// 4D117A: variable 'Src' is possibly undefined + +//----- (004D1210) -------------------------------------------------------- +int *__userpurge std::string::append@(int *a1@, size_t this, char a3, char a4) +{ + int v5; // edx + int v6; // esi + std::string *v7; // esi + _BYTE *v8; // eax + int v9; // eax + int Val; // [esp+4h] [ebp-28h] + + if ( this ) + { + v5 = *a1; + v6 = *(_DWORD *)(*a1 - 12); + if ( this > 1073741820 - v6 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v7 = (std::string *)(this + v6); + if ( (unsigned int)v7 > *(_DWORD *)(v5 - 8) || *(int *)(v5 - 4) > 0 ) + std::string::reserve(a1, v7, Val); + v8 = (_BYTE *)(*(_DWORD *)(*a1 - 12) + *a1); + if ( this == 1 ) + *v8 = a3; + else + memset(v8, a3, this); + v9 = *a1; + *(_DWORD *)(v9 - 4) = 0; + *(_DWORD *)(v9 - 12) = v7; + *((_BYTE *)v7 + v9) = 0; + } + return a1; +} +// 4D1248: variable 'Val' is possibly undefined + +//----- (004D12B0) -------------------------------------------------------- +_DWORD *__thiscall std::string::assign(_DWORD *this, int *a2) +{ + _DWORD *result; // eax + int v3; // edx + int v4; // ecx + + result = this; + v3 = *this; + if ( *(int *)(*this - 4) < 0 ) + *(_DWORD *)(v3 - 4) = 0; + v4 = *a2; + if ( *(int *)(*a2 - 4) < 0 ) + *(_DWORD *)(v4 - 4) = 0; + *result = v4; + *a2 = v3; + return result; +} + +//----- (004D12F0) -------------------------------------------------------- +char **__userpurge std::string::assign@(char **a1@, std::string *this, const char *a3) +{ + size_t v4; // eax + unsigned int v6; // [esp+8h] [ebp-14h] + + v4 = strlen((const char *)this); + return std::string::assign(a1, this, v4, v6); +} +// 4D130C: variable 'v6' is possibly undefined + +//----- (004D1320) -------------------------------------------------------- +char **__userpurge std::string::assign@(char **a1@, std::string *this, size_t Size, unsigned int a4) +{ + char *v4; // eax + unsigned int v5; // edx + bool v7; // cc + char *v8; // eax + char *v9; // eax + unsigned int v11; // [esp+Ch] [ebp-10h] + + v4 = *a1; + v5 = *((_DWORD *)*a1 - 3); + if ( Size > 0x3FFFFFFC ) + std::__throw_length_error((std::length_error *)"basic_string::assign"); + if ( v4 <= (char *)this && &v4[v5] >= (char *)this ) + { + v7 = *((_DWORD *)v4 - 1) <= 0; + v8 = *a1; + if ( !v7 ) + { + v5 = *((_DWORD *)v8 - 3); + goto LABEL_6; + } + if ( Size <= this - (std::string *)v8 ) + { + if ( Size != 1 ) + { + if ( Size ) + { + memcpy(v8, this, Size); + v8 = *a1; + } + goto LABEL_15; + } + } + else + { + if ( this == (std::string *)v8 ) + { +LABEL_15: + *((_DWORD *)v8 - 1) = 0; + *((_DWORD *)v8 - 3) = Size; + v8[Size] = 0; + return a1; + } + if ( Size != 1 ) + { + if ( Size ) + { + memmove(v8, this, Size); + v8 = *a1; + } + goto LABEL_15; + } + } + *v8 = *(_BYTE *)this; + v8 = *a1; + goto LABEL_15; + } +LABEL_6: + std::string::_M_mutate(a1, 0, v5, Size, v11); + if ( !Size ) + return a1; + v9 = *a1; + if ( Size != 1 ) + { + memcpy(v9, this, Size); + return a1; + } + *v9 = *(_BYTE *)this; + return a1; +} +// 4D1371: variable 'v11' is possibly undefined + +//----- (004D1430) -------------------------------------------------------- +int *__userpurge std::string::assign@(int *a1@, std::string *this, const std::string *a3) +{ + _DWORD *v4; // esi + int v5; // eax + int v6; // edx + char v8[13]; // [esp+1Fh] [ebp-Dh] BYREF + + v4 = *(_DWORD **)this; + if ( *a1 != *(_DWORD *)this ) + { + if ( (int)*(v4 - 1) < 0 ) + { + v4 = std::string::_Rep::_M_clone((int)(v4 - 3), (int)v8, 0); + v5 = *a1; + if ( !_CRT_MT ) + goto LABEL_6; + } + else + { + if ( _CRT_MT ) + _InterlockedAdd(v4 - 1, 1u); + else + ++*(v4 - 1); + v5 = *a1; + if ( !_CRT_MT ) + { +LABEL_6: + v6 = *(_DWORD *)(v5 - 4); + *(_DWORD *)(v5 - 4) = v6 - 1; + if ( v6 > 0 ) + { +LABEL_7: + *a1 = (int)v4; + return a1; + } +LABEL_11: + operator delete((void *)(v5 - 12)); + *a1 = (int)v4; + return a1; + } + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v5 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_7; + goto LABEL_11; + } + return a1; +} +// 53E1E4: using guessed type int _CRT_MT; +// 4D1430: using guessed type char var_D[13]; + +//----- (004D14E0) -------------------------------------------------------- +char **__userpurge std::string::assign@( + char **a1@, + std::string *this, + const std::string *a3, + size_t a4, + unsigned int a5) +{ + size_t v5; // eax + unsigned int v7; // [esp+8h] [ebp-14h] + + v5 = *(_DWORD *)(*(_DWORD *)this - 12) - (_DWORD)a3; + if ( v5 > a4 ) + v5 = a4; + if ( (unsigned int)a3 > *(_DWORD *)(*(_DWORD *)this - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::assign", + (size_t)a3, + *(_DWORD *)(*(_DWORD *)this - 12)); + return std::string::assign(a1, (const std::string *)((char *)a3 + *(_DWORD *)this), v5, v7); +} +// 4D1511: variable 'v7' is possibly undefined + +//----- (004D1550) -------------------------------------------------------- +char **__userpurge std::string::assign@(char **a1@, size_t this, char a3, char a4) +{ + char *v5; // edx + unsigned int v7; // [esp+Ch] [ebp-10h] + + if ( this > 0x3FFFFFFC ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace_aux"); + std::string::_M_mutate(a1, 0, *((_DWORD *)*a1 - 3), this, v7); + if ( !this ) + return a1; + v5 = *a1; + if ( this != 1 ) + { + memset(v5, a3, this); + return a1; + } + *v5 = a3; + return a1; +} +// 4D157C: variable 'v7' is possibly undefined + +//----- (004D15D0) -------------------------------------------------------- +char **__userpurge std::string::insert@(char **a1@, std::string *a2, char *a3, size_t a4, unsigned int a5) +{ + return std::string::insert(a1, a2 - (std::string *)*a1, a3, a4, a5); +} + +//----- (004D15E0) -------------------------------------------------------- +char *__thiscall std::string::insert(char **this, int a2, char a3) +{ + int v3; // esi + char *v5; // eax + unsigned int v7; // [esp+Ch] [ebp-10h] + + v3 = a2 - (_DWORD)*this; + if ( *((_DWORD *)*this - 3) == 1073741820 ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace_aux"); + std::string::_M_mutate(this, a2 - (_DWORD)*this, 0, 1u, v7); + (*this)[v3] = a3; + v5 = *this; + *((_DWORD *)v5 - 1) = -1; + return &v5[v3]; +} +// 4D1610: variable 'v7' is possibly undefined + +//----- (004D1640) -------------------------------------------------------- +void __thiscall std::string::insert(char **this, int a2, size_t Size, char a4) +{ + size_t v4; // esi + char *v6; // esi + unsigned int v7; // [esp+Ch] [ebp-20h] + + v4 = a2 - (_DWORD)*this; + if ( Size > 1073741820 - *((_DWORD *)*this - 3) ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace_aux"); + std::string::_M_mutate(this, v4, 0, Size, v7); + if ( Size ) + { + v6 = &(*this)[v4]; + if ( Size == 1 ) + *v6 = a4; + else + memset(v6, a4, Size); + } +} +// 4D1674: variable 'v7' is possibly undefined + +//----- (004D16D0) -------------------------------------------------------- +char **__userpurge std::string::insert@(char **a1@, std::string *this, char *Str, const char *a4) +{ + size_t v5; // eax + unsigned int v7; // [esp+Ch] [ebp-10h] + + v5 = strlen(Str); + return std::string::insert(a1, (unsigned int)this, Str, v5, v7); +} +// 4D16F4: variable 'v7' is possibly undefined + +//----- (004D1710) -------------------------------------------------------- +char **__userpurge std::string::insert@( + char **a1@, + unsigned int this, + char *Src, + size_t Size, + unsigned int a5) +{ + char *v5; // edx + unsigned int v6; // eax + char *v8; // edi + std::string *v10; // ebp + char *v11; // eax + char *v12; // edx + size_t v13; // edi + char *v14; // esi + char *v15; // edx + size_t v16; // eax + unsigned int v17; // [esp+Ch] [ebp-30h] + char *v18; // [esp+1Ch] [ebp-20h] + + v5 = *a1; + v6 = *((_DWORD *)*a1 - 3); + if ( this > v6 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::insert", + this, + *((_DWORD *)*a1 - 3)); + if ( Size > 1073741820 - v6 ) + std::__throw_length_error((std::length_error *)"basic_string::insert"); + if ( v5 <= Src && Src <= &v5[v6] && *((int *)v5 - 1) <= 0 ) + { + v10 = (std::string *)(Src - *a1); + std::string::_M_mutate(a1, this, 0, Size, v17); + v11 = (char *)v10 + (_DWORD)*a1; + v12 = &(*a1)[this]; + if ( &v11[Size] > v12 ) + { + if ( v11 < v12 ) + { + v13 = this - (_DWORD)v10; + if ( this - (_DWORD)v10 == 1 ) + { + *v12 = *v11; + } + else if ( v13 ) + { + v18 = &(*a1)[this]; + memcpy(v12, v11, v13); + v12 = v18; + } + v14 = &v12[Size]; + v15 = &v12[v13]; + v16 = Size - v13; + if ( Size - v13 == 1 ) + { + *v15 = *v14; + } + else if ( v16 ) + { + memcpy(v15, v14, v16); + } + } + else if ( Size == 1 ) + { + *v12 = v11[1]; + } + else if ( Size ) + { + memcpy(v12, &v11[Size], Size); + } + } + else if ( Size == 1 ) + { + *v12 = *v11; + } + else if ( Size ) + { + memcpy(v12, v11, Size); + } + return a1; + } + std::string::_M_mutate(a1, this, 0, Size, v17); + if ( !Size ) + return a1; + v8 = &(*a1)[this]; + if ( Size != 1 ) + { + memcpy(v8, Src, Size); + return a1; + } + *v8 = *Src; + return a1; +} +// 4D1763: variable 'v17' is possibly undefined + +//----- (004D18C0) -------------------------------------------------------- +char **__userpurge std::string::insert@(char **a1@, std::string *this, char **a3, const std::string *a4) +{ + unsigned int v5; // [esp+Ch] [ebp-10h] + + return std::string::insert(a1, (unsigned int)this, *a3, *((_DWORD *)*a3 - 3), v5); +} +// 4D18DB: variable 'v5' is possibly undefined + +//----- (004D18F0) -------------------------------------------------------- +char **__userpurge std::string::insert@( + char **a1@, + std::string *this, + _DWORD *a3, + const std::string *a4, + size_t a5, + unsigned int a6) +{ + size_t v6; // eax + unsigned int v8; // [esp+Ch] [ebp-10h] + + v6 = *(_DWORD *)(*a3 - 12) - (_DWORD)a4; + if ( v6 > a5 ) + v6 = a5; + if ( (unsigned int)a4 > *(_DWORD *)(*a3 - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::insert", + (size_t)a4, + *(_DWORD *)(*a3 - 12)); + return std::string::insert(a1, (unsigned int)this, (char *)a4 + *a3, v6, v8); +} +// 4D1929: variable 'v8' is possibly undefined + +//----- (004D1960) -------------------------------------------------------- +char **__userpurge std::string::insert@(char **a1@, std::string *this, size_t Size, char a4, char a5) +{ + unsigned int v5; // edx + _BYTE *v7; // edi + unsigned int v9; // [esp+Ch] [ebp-20h] + + v5 = *((_DWORD *)*a1 - 3); + if ( (unsigned int)this > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::insert", + (size_t)this, + *((_DWORD *)*a1 - 3)); + if ( Size > 1073741820 - v5 ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace_aux"); + std::string::_M_mutate(a1, (size_t)this, 0, Size, v9); + if ( !Size ) + return a1; + v7 = (char *)this + (_DWORD)*a1; + if ( Size != 1 ) + { + memset(v7, a4, Size); + return a1; + } + *v7 = a4; + return a1; +} +// 4D1998: variable 'v9' is possibly undefined + +//----- (004D1A10) -------------------------------------------------------- +_DWORD *__thiscall std::string::rbegin(_DWORD *ecx0, char **this) +{ + char *v3; // eax + char *v5; // eax + unsigned int v6; // [esp+Ch] [ebp-10h] + + v3 = *this; + if ( *((int *)*this - 1) >= 0 ) + { + if ( *((int *)v3 - 1) > 0 ) + std::string::_M_mutate(this, 0, 0, 0, v6); + v5 = *this; + *((_DWORD *)v5 - 1) = -1; + *ecx0 = &v5[*((_DWORD *)v5 - 3)]; + return ecx0; + } + else + { + *ecx0 = &v3[*((_DWORD *)v3 - 3)]; + return ecx0; + } +} +// 4D1A58: variable 'v6' is possibly undefined + +//----- (004D1A80) -------------------------------------------------------- +void __userpurge std::string::resize(int *a1@, std::string *this, unsigned int a3) +{ + unsigned int v3; // edx + char v4; // [esp+8h] [ebp-14h] + unsigned int v5; // [esp+Ch] [ebp-10h] + + v3 = *(_DWORD *)(*a1 - 12); + if ( (unsigned int)this > 0x3FFFFFFC ) + std::__throw_length_error((std::length_error *)"basic_string::resize"); + if ( (unsigned int)this > v3 ) + { + std::string::append(a1, (size_t)this - v3, 0, v4); + } + else if ( (unsigned int)this < v3 ) + { + std::string::_M_mutate((char **)a1, (size_t)this, v3 - (_DWORD)this, 0, v5); + } +} +// 4D1AB1: variable 'v5' is possibly undefined +// 4D1ACD: variable 'v4' is possibly undefined + +//----- (004D1AF0) -------------------------------------------------------- +void __userpurge std::string::resize(int *a1@, size_t this, char a3, char a4) +{ + unsigned int v4; // edx + unsigned int v5; // [esp+Ch] [ebp-10h] + + v4 = *(_DWORD *)(*a1 - 12); + if ( this > 0x3FFFFFFC ) + std::__throw_length_error((std::length_error *)"basic_string::resize"); + if ( this > v4 ) + { + std::string::append(a1, this - v4, a3, a4); + } + else if ( this < v4 ) + { + std::string::_M_mutate((char **)a1, this, v4 - this, 0, v5); + } +} +// 4D1B29: variable 'v5' is possibly undefined + +//----- (004D1B70) -------------------------------------------------------- +size_t __cdecl std::string::_M_copy(std::string *this, char *Src, size_t Size) +{ + size_t result; // eax + + result = Size; + if ( Size == 1 ) + { + result = (unsigned __int8)*Src; + *(_BYTE *)this = result; + } + else if ( Size ) + { + return (size_t)memcpy(this, Src, Size); + } + return result; +} + +//----- (004D1BB0) -------------------------------------------------------- +std::string *__userpurge std::string::_M_data@(_DWORD *a1@, std::string *this, char *a3) +{ + std::string *result; // eax + + result = this; + *a1 = this; + return result; +} + +//----- (004D1BC0) -------------------------------------------------------- +char *__fastcall std::string::_M_leak(char **a1) +{ + char *result; // eax + unsigned int v3; // [esp+Ch] [ebp-10h] + + result = *a1; + if ( *((int *)*a1 - 1) >= 0 ) + { + if ( *((int *)result - 1) > 0 ) + std::string::_M_mutate(a1, 0, 0, 0, v3); + result = *a1; + *((_DWORD *)*a1 - 1) = -1; + } + return result; +} +// 4D1BF4: variable 'v3' is possibly undefined + +//----- (004D1C10) -------------------------------------------------------- +size_t __cdecl std::string::_M_move(std::string *this, char *Src, size_t Size) +{ + size_t result; // eax + + result = Size; + if ( Size == 1 ) + { + result = (unsigned __int8)*Src; + *(_BYTE *)this = result; + } + else if ( Size ) + { + return (size_t)memmove(this, Src, Size); + } + return result; +} + +//----- (004D1C50) -------------------------------------------------------- +char **__userpurge std::string::replace@( + char **a1@, + std::string *a2, + int a3, + char *a4, + int a5, + unsigned int a6) +{ + return std::string::replace(a1, a2 - (std::string *)*a1, a3 - (_DWORD)a2, a4, a5 - (_DWORD)a4, a6); +} + +//----- (004D1C70) -------------------------------------------------------- +char **__thiscall std::string::replace(char **this, int a2, int a3, char *Str) +{ + size_t Size; // eax + unsigned int v7; // [esp+10h] [ebp-Ch] + + Size = strlen(Str); + return std::string::replace(this, a2 - (_DWORD)*this, a3 - a2, Str, Size, v7); +} +// 4D1CA1: variable 'v7' is possibly undefined + +//----- (004D1CC0) -------------------------------------------------------- +char **__userpurge std::string::replace@( + char **a1@, + std::string *a2, + int a3, + char *a4, + int a5, + unsigned int a6) +{ + return std::string::replace(a1, a2 - (std::string *)*a1, a3 - (_DWORD)a2, a4, a5 - (_DWORD)a4, a6); +} + +//----- (004D1CE0) -------------------------------------------------------- +char **__userpurge std::string::replace@( + char **a1@, + std::string *a2, + int a3, + char *a4, + size_t a5, + unsigned int a6) +{ + return std::string::replace(a1, a2 - (std::string *)*a1, a3 - (_DWORD)a2, a4, a5, a6); +} + +//----- (004D1D00) -------------------------------------------------------- +char **__thiscall std::string::replace(char **this, int a2, int a3, char **a4) +{ + unsigned int v5; // [esp+10h] [ebp-Ch] + + return std::string::replace(this, a2 - (_DWORD)*this, a3 - a2, *a4, *((_DWORD *)*a4 - 3), v5); +} +// 4D1D28: variable 'v5' is possibly undefined + +//----- (004D1D40) -------------------------------------------------------- +char **__userpurge std::string::replace@( + char **a1@, + std::string *a2, + int a3, + char *a4, + int a5, + unsigned int a6) +{ + return std::string::replace(a1, a2 - (std::string *)*a1, a3 - (_DWORD)a2, a4, a5 - (_DWORD)a4, a6); +} + +//----- (004D1D60) -------------------------------------------------------- +char **__userpurge std::string::replace@( + char **a1@, + std::string *a2, + int a3, + char *a4, + int a5, + unsigned int a6) +{ + return std::string::replace(a1, a2 - (std::string *)*a1, a3 - (_DWORD)a2, a4, a5 - (_DWORD)a4, a6); +} + +//----- (004D1D80) -------------------------------------------------------- +char **__userpurge std::string::replace@( + char **a1@, + std::string *a2, + int a3, + char *a4, + size_t a5, + unsigned int a6) +{ + return std::string::replace(a1, a2 - (std::string *)*a1, a3 - (_DWORD)a2, a4, a5, a6); +} + +//----- (004D1DA0) -------------------------------------------------------- +char **__thiscall std::string::replace(char **this, int a2, int a3, size_t Size, char a5) +{ + char *v6; // ecx + size_t v7; // esi + char *v8; // esi + unsigned int v10; // [esp+Ch] [ebp-20h] + + v6 = *this; + v7 = a2 - (_DWORD)v6; + if ( Size > a3 - a2 + 1073741820 - *((_DWORD *)v6 - 3) ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace_aux"); + std::string::_M_mutate(this, v7, a3 - a2, Size, v10); + if ( !Size ) + return this; + v8 = &(*this)[v7]; + if ( Size != 1 ) + { + memset(v8, a5, Size); + return this; + } + *v8 = a5; + return this; +} +// 4D1DD9: variable 'v10' is possibly undefined + +//----- (004D1E30) -------------------------------------------------------- +char **__userpurge std::string::replace@( + char **a1@, + std::string *this, + unsigned int a3, + char *Str, + const char *a5) +{ + size_t Size; // eax + unsigned int v8; // [esp+10h] [ebp-Ch] + + Size = strlen(Str); + return std::string::replace(a1, (unsigned int)this, a3, Str, Size, v8); +} +// 4D1E5C: variable 'v8' is possibly undefined + +//----- (004D1E70) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +char **__userpurge std::string::replace@( + char **a1@, + unsigned int this, + unsigned int a3, + char *Src, + size_t Size, + unsigned int a6) +{ + char *v6; // edx + unsigned int v7; // eax + unsigned int v8; // ecx + char *v10; // eax + char *v11; // edx + int v12; // eax + unsigned int v13; // [esp+8h] [ebp-60h] + char *v14; // [esp+10h] [ebp-58h] + char *v15; // [esp+10h] [ebp-58h] + unsigned int v16; // [esp+14h] [ebp-54h] + + v6 = *a1; + v7 = *((_DWORD *)*a1 - 3); + if ( this > v7 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + this, + *((_DWORD *)*a1 - 3)); + v8 = v7 - this; + if ( v7 - this > a3 ) + v8 = a3; + v16 = v8; + if ( Size > v8 - v7 + 1073741820 ) + std::__throw_length_error((std::length_error *)"basic_string::replace"); + if ( v6 > Src || Src > &v6[v7] || *((int *)v6 - 1) > 0 ) + { + std::string::_M_mutate(a1, this, v8, Size, v13); + if ( Size ) + { + if ( Size == 1 ) + (*a1)[this] = *Src; + else + memcpy(&(*a1)[this], Src, Size); + } + return a1; + } + v10 = *a1; + if ( &Src[Size] <= &(*a1)[this] ) + { + v14 = (char *)(Src - v10); +LABEL_15: + std::string::_M_mutate(a1, this, v8, Size, v13); + v11 = &v14[(_DWORD)*a1]; + if ( Size == 1 ) + { + (*a1)[this] = *v11; + } + else if ( Size ) + { + memcpy(&(*a1)[this], v11, Size); + } + return a1; + } + if ( Src >= &v10[this + v8] ) + { + v14 = (char *)(Src - v10 + Size - v8); + goto LABEL_15; + } + LOBYTE(v13) = 0; + v15 = (char *)std::string::_S_construct(Src, (int)&Src[Size]); + std::string::_M_mutate(a1, this, v16, Size, v13); + if ( Size ) + { + if ( Size == 1 ) + (*a1)[this] = *v15; + else + memcpy(&(*a1)[this], v15, Size); + } + if ( _CRT_MT ) + { + v12 = _InterlockedExchangeAdd((volatile signed __int32 *)v15 - 1, 0xFFFFFFFF); + } + else + { + v12 = *((_DWORD *)v15 - 1); + *((_DWORD *)v15 - 1) = v12 - 1; + } + if ( v12 <= 0 ) + operator delete(v15 - 12); + return a1; +} +// 4D2139: positive sp value 4 has been found +// 4D1F06: variable 'v13' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004D2150) -------------------------------------------------------- +char **__userpurge std::string::replace@( + char **a1@, + std::string *this, + unsigned int a3, + char **a4, + const std::string *a5) +{ + unsigned int v6; // [esp+10h] [ebp-Ch] + + return std::string::replace(a1, (unsigned int)this, a3, *a4, *((_DWORD *)*a4 - 3), v6); +} +// 4D2173: variable 'v6' is possibly undefined + +//----- (004D2190) -------------------------------------------------------- +char **__userpurge std::string::replace@( + char **a1@, + std::string *this, + unsigned int a3, + _DWORD *a4, + const std::string *a5, + size_t a6, + unsigned int a7) +{ + size_t Size; // eax + unsigned int v9; // [esp+10h] [ebp-Ch] + + Size = *(_DWORD *)(*a4 - 12) - (_DWORD)a5; + if ( Size > a6 ) + Size = a6; + if ( (unsigned int)a5 > *(_DWORD *)(*a4 - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + (size_t)a5, + *(_DWORD *)(*a4 - 12)); + return std::string::replace(a1, (unsigned int)this, a3, (char *)a5 + *a4, Size, v9); +} +// 4D21D1: variable 'v9' is possibly undefined + +//----- (004D2200) -------------------------------------------------------- +char **__userpurge std::string::replace@( + char **a1@, + std::string *this, + unsigned int a3, + size_t a4, + char a5, + char a6) +{ + unsigned int v6; // eax + + v6 = *((_DWORD *)*a1 - 3) - (_DWORD)this; + if ( v6 > a3 ) + v6 = a3; + if ( (unsigned int)this > *((_DWORD *)*a1 - 3) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + (size_t)this, + *((_DWORD *)*a1 - 3)); + return std::string::_M_replace_aux(a1, this, v6, a4, a5, a6); +} + +//----- (004D2270) -------------------------------------------------------- +void __userpurge std::string::reserve(int *a1@, std::string *this, unsigned int a3) +{ + int v4; // ecx + std::string *v5; // eax + unsigned int v6; // edx + int v7; // ecx + _DWORD *v8; // esi + int v9; // eax + int v10; // edx + char v11[13]; // [esp+1Fh] [ebp-Dh] BYREF + + v4 = *a1; + v5 = this; + if ( this == *(std::string **)(v4 - 8) ) + { + if ( *(int *)(v4 - 4) <= 0 ) + return; + v4 = *a1; + } + v6 = *(_DWORD *)(v4 - 12); + v7 = v4 - 12; + if ( (unsigned int)this < v6 ) + v5 = (std::string *)v6; + v8 = std::string::_Rep::_M_clone(v7, (int)v11, (int)v5 - v6); + v9 = *a1; + if ( _CRT_MT ) + { + v10 = _InterlockedExchangeAdd((volatile signed __int32 *)(v9 - 4), 0xFFFFFFFF); + } + else + { + v10 = *(_DWORD *)(v9 - 4); + *(_DWORD *)(v9 - 4) = v10 - 1; + } + if ( v10 <= 0 ) + operator delete((void *)(v9 - 12)); + *a1 = (int)v8; +} +// 53E1E4: using guessed type int _CRT_MT; +// 4D2270: using guessed type char var_D[13]; + +//----- (004D2300) -------------------------------------------------------- +void __fastcall std::string::pop_back(char **a1) +{ + unsigned int v1; // eax + unsigned int v2; // [esp+Ch] [ebp-10h] + + v1 = *((_DWORD *)*a1 - 3); + if ( v1 - 1 > v1 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + 0xFFFFFFFF, + 0); + std::string::_M_mutate(a1, v1 - 1, 1u, 0, v2); +} +// 4D2322: variable 'v2' is possibly undefined + +//----- (004D2360) -------------------------------------------------------- +char *__cdecl std::string::_M_assign(std::string *this, char *Val, size_t Size) +{ + char *result; // eax + + result = Val; + if ( Val == (char *)1 ) + { + *(_BYTE *)this = Size; + } + else if ( Val ) + { + return (char *)memset(this, (char)Size, (size_t)Val); + } + return result; +} + +//----- (004D23A0) -------------------------------------------------------- +void __userpurge std::string::_M_mutate( + char **a1@, + size_t this, + unsigned int a3, + unsigned int a4, + unsigned int a5) +{ + int v6; // edi + unsigned int v7; // edx + unsigned int v8; // esi + size_t Size; // edi + _DWORD *v10; // edx + char *v11; // ebp + size_t v12; // ecx + char *Src; // eax + char *v14; // eax + int v15; // edx + char *v16; // eax + char *v17; // edx + char *v18; // ecx + _DWORD *v19; // [esp+18h] [ebp-34h] + + v6 = *((_DWORD *)*a1 - 3); + v7 = *((_DWORD *)*a1 - 2); + v8 = v6 + a4 - a3; + Size = v6 - (this + a3); + if ( v8 > v7 ) + { +LABEL_4: + v10 = std::string::_Rep::_S_create(v8, v7); + v11 = (char *)(v10 + 3); + v12 = this + a3; + if ( this ) + { + Src = *a1; + v11 = (char *)(v10 + 3); + if ( this == 1 ) + { + *((_BYTE *)v10 + 12) = *Src; + v14 = *a1; + if ( !Size ) + goto LABEL_8; + goto LABEL_12; + } + v19 = v10; + memcpy(v11, Src, this); + v12 = this + a3; + v10 = v19; + } + v14 = *a1; + if ( !Size ) + goto LABEL_8; +LABEL_12: + v16 = &v14[v12]; + v17 = (char *)v10 + this + a4 + 12; + if ( Size != 1 ) + { + memcpy(v17, v16, Size); + v14 = *a1; + if ( !_CRT_MT ) + { +LABEL_9: + v15 = *((_DWORD *)v14 - 1); + *((_DWORD *)v14 - 1) = v15 - 1; + if ( v15 > 0 ) + { +LABEL_10: + *a1 = v11; + goto LABEL_11; + } +LABEL_15: + operator delete(v14 - 12); + goto LABEL_10; + } +LABEL_14: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)v14 - 1, 0xFFFFFFFF) > 0 ) + goto LABEL_10; + goto LABEL_15; + } + *v17 = *v16; + v14 = *a1; +LABEL_8: + if ( !_CRT_MT ) + goto LABEL_9; + goto LABEL_14; + } + if ( *((int *)*a1 - 1) > 0 ) + { + v7 = *((_DWORD *)*a1 - 2); + goto LABEL_4; + } + v11 = *a1; + if ( Size && a4 != a3 ) + { + v18 = &v11[this + a3]; + if ( Size == 1 ) + v11[this + a4] = *v18; + else + memmove(&v11[this + a4], v18, Size); + v11 = *a1; + } +LABEL_11: + *((_DWORD *)v11 - 1) = 0; + *((_DWORD *)v11 - 3) = v8; + v11[v8] = 0; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004D2550) -------------------------------------------------------- +int __userpurge std::string::push_back@(int *a1@, std::string *this, char a3) +{ + int v4; // edi + int result; // eax + unsigned int v6; // [esp+4h] [ebp-28h] + + v4 = *(_DWORD *)(*a1 - 12); + if ( (unsigned int)(v4 + 1) > *(_DWORD *)(*a1 - 8) || *(int *)(*a1 - 4) > 0 ) + std::string::reserve(a1, (std::string *)(v4 + 1), v6); + *(_BYTE *)(*a1 + *(_DWORD *)(*a1 - 12)) = (_BYTE)this; + result = *a1; + *(_DWORD *)(result - 4) = 0; + *(_DWORD *)(result - 12) = v4 + 1; + *(_BYTE *)(result + v4 + 1) = 0; + return result; +} +// 4D2576: variable 'v6' is possibly undefined + +//----- (004D25B0) -------------------------------------------------------- +_BYTE *__thiscall std::string::string(_DWORD *this, _DWORD *a2) +{ + char *v2; // eax + _BYTE *result; // eax + + *this = *a2; + v2 = (char *)operator new(0xDu); + *((_DWORD *)v2 + 1) = 0; + result = v2 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *a2 = result; + return result; +} + +//----- (004D25F0) -------------------------------------------------------- +_BYTE *__thiscall std::string::string(_DWORD *this, _DWORD *a2, int a3) +{ + char *v3; // eax + _BYTE *result; // eax + + *this = *a2; + v3 = (char *)operator new(0xDu); + *((_DWORD *)v3 + 1) = 0; + result = v3 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *a2 = result; + return result; +} + +//----- (004D2630) -------------------------------------------------------- +int __thiscall std::string::string(_DWORD *this, char *Str, int a3) +{ + int v3; // eax + int result; // eax + + v3 = -1; + if ( Str ) + v3 = (int)&Str[strlen(Str)]; + result = std::string::_S_construct(Str, v3); + *this = result; + return result; +} + +//----- (004D2680) -------------------------------------------------------- +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, size_t Size, int a4) +{ + int result; // eax + int v6; // ebx + int v7; // edx + int v8; // [esp+1Ch] [ebp-20h] + + if ( &Src[Size] && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + result = (int)std::string::_Rep::_S_create(Size, 0); + v6 = result; + v7 = result + 12; + if ( Size == 1 ) + { + result = *Src; + *(_BYTE *)(v6 + 12) = result; + } + else if ( Size ) + { + v8 = result + 12; + result = (int)memcpy((void *)(result + 12), Src, Size); + v7 = v8; + } + *(_DWORD *)(v6 + 8) = 0; + *(_DWORD *)v6 = Size; + *(_BYTE *)(v6 + Size + 12) = 0; + *this = v7; + return result; +} + +//----- (004D2720) -------------------------------------------------------- +_BYTE *__thiscall std::string::string(_DWORD *this, int a2) +{ + char *v3; // eax + _BYTE *result; // eax + + v3 = (char *)operator new(0xDu); + *((_DWORD *)v3 + 1) = 0; + result = v3 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *this = result; + return result; +} + +//----- (004D2760) -------------------------------------------------------- +_DWORD *__userpurge std::string::string@(_DWORD *a1@, std::string *this, const std::string *a3) +{ + _DWORD *result; // eax + char v5[13]; // [esp+1Fh] [ebp-Dh] BYREF + + result = *(_DWORD **)this; + if ( *(int *)(*(_DWORD *)this - 4) < 0 ) + { + result = std::string::_Rep::_M_clone((int)(result - 3), (int)v5, 0); + *a1 = result; + } + else + { + if ( _CRT_MT ) + _InterlockedAdd(result - 1, 1u); + else + ++*(result - 1); + *a1 = result; + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; +// 4D2760: using guessed type char var_D[13]; + +//----- (004D27D0) -------------------------------------------------------- +_DWORD *__thiscall std::string::string(_DWORD *this, _DWORD *a2, int a3) +{ + _DWORD *result; // eax + + result = (_DWORD *)*a2; + if ( *(int *)(*a2 - 4) < 0 ) + { + result = std::string::_Rep::_M_clone((int)(result - 3), a3, 0); + *this = result; + } + else + { + if ( _CRT_MT ) + _InterlockedAdd(result - 1, 1u); + else + ++*(result - 1); + *this = result; + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004D2840) -------------------------------------------------------- +int __thiscall std::string::string(int *this, _DWORD *a2, unsigned int a3, int a4) +{ + unsigned int v5; // edx + int result; // eax + + v5 = *(_DWORD *)(*a2 - 12); + if ( a3 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + *(_DWORD *)(*a2 - 12)); + result = std::string::_S_construct((_BYTE *)(a3 + *a2), *a2 + v5); + *this = result; + return result; +} + +//----- (004D28A0) -------------------------------------------------------- +int __userpurge std::string::string@( + int *a1@, + std::string *this, + const std::string *a3, + unsigned int a4, + unsigned int a5) +{ + int v6; // edx + unsigned int v7; // eax + char *v8; // eax + int result; // eax + + v6 = *(_DWORD *)this; + v7 = *(_DWORD *)(*(_DWORD *)this - 12) - (_DWORD)a3; + if ( v7 > a4 ) + v7 = a4; + v8 = (char *)a3 + v7 + v6; + if ( (unsigned int)a3 > *(_DWORD *)(*(_DWORD *)this - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + (size_t)a3, + *(_DWORD *)(*(_DWORD *)this - 12)); + result = std::string::_S_construct((_BYTE *)a3 + v6, (int)v8); + *a1 = result; + return result; +} + +//----- (004D2910) -------------------------------------------------------- +int __thiscall std::string::string(int *this, int *a2, unsigned int a3, unsigned int a4, int a5) +{ + int v6; // edx + unsigned int v7; // eax + int v8; // eax + int result; // eax + + v6 = *a2; + v7 = *(_DWORD *)(*a2 - 12) - a3; + if ( v7 > a4 ) + v7 = a4; + v8 = v6 + a3 + v7; + if ( a3 > *(_DWORD *)(*a2 - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + *(_DWORD *)(*a2 - 12)); + result = std::string::_S_construct((_BYTE *)(a3 + v6), v8); + *this = result; + return result; +} + +//----- (004D2980) -------------------------------------------------------- +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, size_t Size, int a4) +{ + int result; // eax + int v6; // ebx + int v7; // edx + int v8; // [esp+1Ch] [ebp-20h] + + if ( &Src[Size] && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + result = (int)std::string::_Rep::_S_create(Size, 0); + v6 = result; + v7 = result + 12; + if ( Size == 1 ) + { + result = *Src; + *(_BYTE *)(v6 + 12) = result; + } + else if ( Size ) + { + v8 = result + 12; + result = (int)memcpy((void *)(result + 12), Src, Size); + v7 = v8; + } + *(_DWORD *)(v6 + 8) = 0; + *(_DWORD *)v6 = Size; + *(_BYTE *)(v6 + Size + 12) = 0; + *this = v7; + return result; +} + +//----- (004D2A20) -------------------------------------------------------- +char *__thiscall std::string::string(_DWORD *this, size_t Size, char *a3, int a4) +{ + char *result; // eax + int v6; // ebx + void *v7; // edx + char *v8; // [esp+1Ch] [ebp-20h] + + result = (char *)std::string::_Rep::_S_create(Size, 0); + v6 = (int)result; + v7 = result + 12; + if ( Size ) + { + if ( Size == 1 ) + { + result = a3; + *(_BYTE *)(v6 + 12) = (_BYTE)a3; + } + else + { + v8 = result + 12; + result = (char *)memset(v7, (char)a3, Size); + v7 = v8; + } + } + *(_DWORD *)(v6 + 8) = 0; + *(_DWORD *)v6 = Size; + *(_BYTE *)(v6 + Size + 12) = 0; + *this = v7; + return result; +} + +//----- (004D2AA0) -------------------------------------------------------- +_BYTE *__fastcall std::string::string(_DWORD *a1) +{ + char *v2; // eax + _BYTE *result; // eax + + v2 = (char *)operator new(0xDu); + *((_DWORD *)v2 + 1) = 0; + result = v2 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *a1 = result; + return result; +} + +//----- (004D2AE0) -------------------------------------------------------- +int __thiscall std::string::string<__gnu_cxx::__normal_iterator>( + _DWORD *this, + unsigned __int8 *Src, + int a3, + int a4) +{ + size_t Size; // ebx + int result; // eax + int v7; // esi + int v8; // edx + int v9; // [esp+1Ch] [ebp-20h] + + Size = a3 - (_DWORD)Src; + result = (int)std::string::_Rep::_S_create(a3 - (_DWORD)Src, 0); + v7 = result; + v8 = result + 12; + if ( a3 - (_DWORD)Src == 1 ) + { + result = *Src; + *(_BYTE *)(v7 + 12) = result; + } + else if ( Size ) + { + v9 = result + 12; + result = (int)memcpy((void *)(result + 12), Src, Size); + v8 = v9; + } + *(_DWORD *)(v7 + 8) = 0; + *(_DWORD *)v7 = Size; + *(_BYTE *)(v7 + Size + 12) = 0; + *this = v8; + return result; +} + +//----- (004D2B70) -------------------------------------------------------- +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, int a3, int a4) +{ + size_t Size; // ebx + int result; // eax + int v7; // esi + int v8; // edx + int v9; // [esp+1Ch] [ebp-20h] + + if ( a3 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + Size = a3 - (_DWORD)Src; + result = (int)std::string::_Rep::_S_create(a3 - (_DWORD)Src, 0); + v7 = result; + v8 = result + 12; + if ( a3 - (_DWORD)Src == 1 ) + { + result = *Src; + *(_BYTE *)(v7 + 12) = result; + } + else if ( Size ) + { + v9 = result + 12; + result = (int)memcpy((void *)(result + 12), Src, Size); + v8 = v9; + } + *(_DWORD *)(v7 + 8) = 0; + *(_DWORD *)v7 = Size; + *(_BYTE *)(v7 + Size + 12) = 0; + *this = v8; + return result; +} + +//----- (004D2C10) -------------------------------------------------------- +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, int a3, int a4) +{ + size_t Size; // ebx + int result; // eax + int v7; // esi + int v8; // edx + int v9; // [esp+1Ch] [ebp-20h] + + if ( a3 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + Size = a3 - (_DWORD)Src; + result = (int)std::string::_Rep::_S_create(a3 - (_DWORD)Src, 0); + v7 = result; + v8 = result + 12; + if ( a3 - (_DWORD)Src == 1 ) + { + result = *Src; + *(_BYTE *)(v7 + 12) = result; + } + else if ( Size ) + { + v9 = result + 12; + result = (int)memcpy((void *)(result + 12), Src, Size); + v8 = v9; + } + *(_DWORD *)(v7 + 8) = 0; + *(_DWORD *)v7 = Size; + *(_BYTE *)(v7 + Size + 12) = 0; + *this = v8; + return result; +} + +//----- (004D2CB0) -------------------------------------------------------- +_BYTE *__thiscall std::string::string(_DWORD *this, _DWORD *a2) +{ + char *v2; // eax + _BYTE *result; // eax + + *this = *a2; + v2 = (char *)operator new(0xDu); + *((_DWORD *)v2 + 1) = 0; + result = v2 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *a2 = result; + return result; +} + +//----- (004D2CF0) -------------------------------------------------------- +_BYTE *__thiscall std::string::string(_DWORD *this, _DWORD *a2, int a3) +{ + char *v3; // eax + _BYTE *result; // eax + + *this = *a2; + v3 = (char *)operator new(0xDu); + *((_DWORD *)v3 + 1) = 0; + result = v3 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *a2 = result; + return result; +} + +//----- (004D2D30) -------------------------------------------------------- +int __thiscall std::string::string(_DWORD *this, char *Str, int a3) +{ + int v3; // eax + int result; // eax + + v3 = -1; + if ( Str ) + v3 = (int)&Str[strlen(Str)]; + result = std::string::_S_construct(Str, v3); + *this = result; + return result; +} + +//----- (004D2D80) -------------------------------------------------------- +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, size_t Size, int a4) +{ + int result; // eax + int v6; // ebx + int v7; // edx + int v8; // [esp+1Ch] [ebp-20h] + + if ( &Src[Size] && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + result = (int)std::string::_Rep::_S_create(Size, 0); + v6 = result; + v7 = result + 12; + if ( Size == 1 ) + { + result = *Src; + *(_BYTE *)(v6 + 12) = result; + } + else if ( Size ) + { + v8 = result + 12; + result = (int)memcpy((void *)(result + 12), Src, Size); + v7 = v8; + } + *(_DWORD *)(v6 + 8) = 0; + *(_DWORD *)v6 = Size; + *(_BYTE *)(v6 + Size + 12) = 0; + *this = v7; + return result; +} + +//----- (004D2E20) -------------------------------------------------------- +_BYTE *__thiscall std::string::string(_DWORD *this, int a2) +{ + char *v3; // eax + _BYTE *result; // eax + + v3 = (char *)operator new(0xDu); + *((_DWORD *)v3 + 1) = 0; + result = v3 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *this = result; + return result; +} + +//----- (004D2E60) -------------------------------------------------------- +_DWORD *__userpurge std::string::string@(_DWORD *a1@, std::string *this, const std::string *a3) +{ + _DWORD *result; // eax + char v5[13]; // [esp+1Fh] [ebp-Dh] BYREF + + result = *(_DWORD **)this; + if ( *(int *)(*(_DWORD *)this - 4) < 0 ) + { + result = std::string::_Rep::_M_clone((int)(result - 3), (int)v5, 0); + *a1 = result; + } + else + { + if ( _CRT_MT ) + _InterlockedAdd(result - 1, 1u); + else + ++*(result - 1); + *a1 = result; + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; +// 4D2E60: using guessed type char var_D[13]; + +//----- (004D2ED0) -------------------------------------------------------- +_DWORD *__thiscall std::string::string(_DWORD *this, _DWORD *a2, int a3) +{ + _DWORD *result; // eax + + result = (_DWORD *)*a2; + if ( *(int *)(*a2 - 4) < 0 ) + { + result = std::string::_Rep::_M_clone((int)(result - 3), a3, 0); + *this = result; + } + else + { + if ( _CRT_MT ) + _InterlockedAdd(result - 1, 1u); + else + ++*(result - 1); + *this = result; + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004D2F40) -------------------------------------------------------- +int __thiscall std::string::string(int *this, _DWORD *a2, unsigned int a3, int a4) +{ + unsigned int v5; // edx + int result; // eax + + v5 = *(_DWORD *)(*a2 - 12); + if ( a3 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + *(_DWORD *)(*a2 - 12)); + result = std::string::_S_construct((_BYTE *)(a3 + *a2), *a2 + v5); + *this = result; + return result; +} + +//----- (004D2FA0) -------------------------------------------------------- +int __userpurge std::string::string@( + int *a1@, + std::string *this, + const std::string *a3, + unsigned int a4, + unsigned int a5) +{ + int v6; // edx + unsigned int v7; // eax + char *v8; // eax + int result; // eax + + v6 = *(_DWORD *)this; + v7 = *(_DWORD *)(*(_DWORD *)this - 12) - (_DWORD)a3; + if ( v7 > a4 ) + v7 = a4; + v8 = (char *)a3 + v7 + v6; + if ( (unsigned int)a3 > *(_DWORD *)(*(_DWORD *)this - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + (size_t)a3, + *(_DWORD *)(*(_DWORD *)this - 12)); + result = std::string::_S_construct((_BYTE *)a3 + v6, (int)v8); + *a1 = result; + return result; +} + +//----- (004D3010) -------------------------------------------------------- +int __thiscall std::string::string(int *this, int *a2, unsigned int a3, unsigned int a4, int a5) +{ + int v6; // edx + unsigned int v7; // eax + int v8; // eax + int result; // eax + + v6 = *a2; + v7 = *(_DWORD *)(*a2 - 12) - a3; + if ( v7 > a4 ) + v7 = a4; + v8 = v6 + a3 + v7; + if ( a3 > *(_DWORD *)(*a2 - 12) ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + *(_DWORD *)(*a2 - 12)); + result = std::string::_S_construct((_BYTE *)(a3 + v6), v8); + *this = result; + return result; +} + +//----- (004D3080) -------------------------------------------------------- +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, size_t Size, int a4) +{ + int result; // eax + int v6; // ebx + int v7; // edx + int v8; // [esp+1Ch] [ebp-20h] + + if ( &Src[Size] && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + result = (int)std::string::_Rep::_S_create(Size, 0); + v6 = result; + v7 = result + 12; + if ( Size == 1 ) + { + result = *Src; + *(_BYTE *)(v6 + 12) = result; + } + else if ( Size ) + { + v8 = result + 12; + result = (int)memcpy((void *)(result + 12), Src, Size); + v7 = v8; + } + *(_DWORD *)(v6 + 8) = 0; + *(_DWORD *)v6 = Size; + *(_BYTE *)(v6 + Size + 12) = 0; + *this = v7; + return result; +} + +//----- (004D3120) -------------------------------------------------------- +char *__thiscall std::string::string(_DWORD *this, size_t Size, char *a3, int a4) +{ + char *result; // eax + int v6; // ebx + void *v7; // edx + char *v8; // [esp+1Ch] [ebp-20h] + + result = (char *)std::string::_Rep::_S_create(Size, 0); + v6 = (int)result; + v7 = result + 12; + if ( Size ) + { + if ( Size == 1 ) + { + result = a3; + *(_BYTE *)(v6 + 12) = (_BYTE)a3; + } + else + { + v8 = result + 12; + result = (char *)memset(v7, (char)a3, Size); + v7 = v8; + } + } + *(_DWORD *)(v6 + 8) = 0; + *(_DWORD *)v6 = Size; + *(_BYTE *)(v6 + Size + 12) = 0; + *this = v7; + return result; +} + +//----- (004D31A0) -------------------------------------------------------- +_BYTE *__fastcall std::string::string(_DWORD *a1) +{ + char *v2; // eax + _BYTE *result; // eax + + v2 = (char *)operator new(0xDu); + *((_DWORD *)v2 + 1) = 0; + result = v2 + 12; + *((_DWORD *)result - 1) = 0; + *((_DWORD *)result - 3) = 0; + *result = 0; + *a1 = result; + return result; +} + +//----- (004D31E0) -------------------------------------------------------- +int __thiscall std::string::string<__gnu_cxx::__normal_iterator>( + _DWORD *this, + unsigned __int8 *Src, + int a3, + int a4) +{ + size_t Size; // ebx + int result; // eax + int v7; // esi + int v8; // edx + int v9; // [esp+1Ch] [ebp-20h] + + Size = a3 - (_DWORD)Src; + result = (int)std::string::_Rep::_S_create(a3 - (_DWORD)Src, 0); + v7 = result; + v8 = result + 12; + if ( a3 - (_DWORD)Src == 1 ) + { + result = *Src; + *(_BYTE *)(v7 + 12) = result; + } + else if ( Size ) + { + v9 = result + 12; + result = (int)memcpy((void *)(result + 12), Src, Size); + v8 = v9; + } + *(_DWORD *)(v7 + 8) = 0; + *(_DWORD *)v7 = Size; + *(_BYTE *)(v7 + Size + 12) = 0; + *this = v8; + return result; +} + +//----- (004D3270) -------------------------------------------------------- +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, int a3, int a4) +{ + size_t Size; // ebx + int result; // eax + int v7; // esi + int v8; // edx + int v9; // [esp+1Ch] [ebp-20h] + + if ( a3 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + Size = a3 - (_DWORD)Src; + result = (int)std::string::_Rep::_S_create(a3 - (_DWORD)Src, 0); + v7 = result; + v8 = result + 12; + if ( a3 - (_DWORD)Src == 1 ) + { + result = *Src; + *(_BYTE *)(v7 + 12) = result; + } + else if ( Size ) + { + v9 = result + 12; + result = (int)memcpy((void *)(result + 12), Src, Size); + v8 = v9; + } + *(_DWORD *)(v7 + 8) = 0; + *(_DWORD *)v7 = Size; + *(_BYTE *)(v7 + Size + 12) = 0; + *this = v8; + return result; +} + +//----- (004D3310) -------------------------------------------------------- +int __thiscall std::string::string(_DWORD *this, unsigned __int8 *Src, int a3, int a4) +{ + size_t Size; // ebx + int result; // eax + int v7; // esi + int v8; // edx + int v9; // [esp+1Ch] [ebp-20h] + + if ( a3 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_S_construct null not valid"); + Size = a3 - (_DWORD)Src; + result = (int)std::string::_Rep::_S_create(a3 - (_DWORD)Src, 0); + v7 = result; + v8 = result + 12; + if ( a3 - (_DWORD)Src == 1 ) + { + result = *Src; + *(_BYTE *)(v7 + 12) = result; + } + else if ( Size ) + { + v9 = result + 12; + result = (int)memcpy((void *)(result + 12), Src, Size); + v8 = v9; + } + *(_DWORD *)(v7 + 8) = 0; + *(_DWORD *)v7 = Size; + *(_BYTE *)(v7 + Size + 12) = 0; + *this = v8; + return result; +} + +//----- (004D33B0) -------------------------------------------------------- +void __fastcall std::string::~string(int *a1) +{ + int v1; // eax + int v2; // edx + + v1 = *a1; + if ( !_CRT_MT ) + { + v2 = *(_DWORD *)(v1 - 4); + *(_DWORD *)(v1 - 4) = v2 - 1; + if ( v2 > 0 ) + return; +LABEL_5: + operator delete((void *)(v1 - 12)); + return; + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v1 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_5; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004D33F0) -------------------------------------------------------- +void __fastcall std::string::~string(int *a1) +{ + int v1; // eax + int v2; // edx + + v1 = *a1; + if ( !_CRT_MT ) + { + v2 = *(_DWORD *)(v1 - 4); + *(_DWORD *)(v1 - 4) = v2 - 1; + if ( v2 > 0 ) + return; +LABEL_5: + operator delete((void *)(v1 - 12)); + return; + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v1 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_5; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004D3430) -------------------------------------------------------- +_DWORD *__thiscall std::string::operator=(_DWORD *this, int *a2) +{ + _DWORD *result; // eax + int v3; // edx + int v4; // ecx + + result = this; + v3 = *this; + if ( *(int *)(*this - 4) < 0 ) + *(_DWORD *)(v3 - 4) = 0; + v4 = *a2; + if ( *(int *)(*a2 - 4) < 0 ) + *(_DWORD *)(v4 - 4) = 0; + *result = v4; + *a2 = v3; + return result; +} + +//----- (004D3470) -------------------------------------------------------- +char **__thiscall std::string::operator=(char **this, std::string *Str) +{ + size_t v3; // eax + unsigned int v5; // [esp+8h] [ebp-14h] + + v3 = strlen((const char *)Str); + return std::string::assign(this, Str, v3, v5); +} +// 4D348C: variable 'v5' is possibly undefined + +//----- (004D34A0) -------------------------------------------------------- +int *__thiscall std::string::operator=(int *this, _DWORD *a2) +{ + _DWORD *v3; // esi + int v4; // eax + int v5; // edx + char v7[13]; // [esp+1Fh] [ebp-Dh] BYREF + + v3 = (_DWORD *)*a2; + if ( *this != *a2 ) + { + if ( (int)*(v3 - 1) < 0 ) + { + v3 = std::string::_Rep::_M_clone((int)(v3 - 3), (int)v7, 0); + v4 = *this; + if ( !_CRT_MT ) + goto LABEL_6; + } + else + { + if ( _CRT_MT ) + _InterlockedAdd(v3 - 1, 1u); + else + ++*(v3 - 1); + v4 = *this; + if ( !_CRT_MT ) + { +LABEL_6: + v5 = *(_DWORD *)(v4 - 4); + *(_DWORD *)(v4 - 4) = v5 - 1; + if ( v5 > 0 ) + { +LABEL_7: + *this = (int)v3; + return this; + } +LABEL_11: + operator delete((void *)(v4 - 12)); + *this = (int)v3; + return this; + } + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v4 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_7; + goto LABEL_11; + } + return this; +} +// 53E1E4: using guessed type int _CRT_MT; +// 4D34A0: using guessed type char var_D[13]; + +//----- (004D3550) -------------------------------------------------------- +char **__thiscall std::string::operator=(char **this, std::string *a2, size_t a3) +{ + unsigned int v5; // [esp+8h] [ebp-14h] + + std::string::assign(this, a2, a3, v5); + return this; +} +// 4D3565: variable 'v5' is possibly undefined + +//----- (004D3580) -------------------------------------------------------- +char **__thiscall std::string::operator=(char **this, char a2) +{ + unsigned int v4; // [esp+Ch] [ebp-10h] + + std::string::_M_mutate(this, 0, *((_DWORD *)*this - 3), 1u, v4); + **this = a2; + return this; +} +// 4D35A3: variable 'v4' is possibly undefined + +//----- (004D35C0) -------------------------------------------------------- +char *__thiscall std::string::operator[](char **this, int a2) +{ + char *v2; // eax + char *v5; // eax + unsigned int v6; // [esp+Ch] [ebp-10h] + + v2 = *this; + if ( *((int *)*this - 1) < 0 ) + return &v2[a2]; + if ( *((int *)v2 - 1) > 0 ) + std::string::_M_mutate(this, 0, 0, 0, v6); + v5 = *this; + *((_DWORD *)v5 - 1) = -1; + return &v5[a2]; +} +// 4D3600: variable 'v6' is possibly undefined + +//----- (004D3620) -------------------------------------------------------- +int *__thiscall std::string::operator+=(int *this, std::string *Str) +{ + size_t v3; // eax + unsigned int v5; // [esp+8h] [ebp-14h] + + v3 = strlen((const char *)Str); + return std::string::append(this, Str, v3, v5); +} +// 4D363C: variable 'v5' is possibly undefined + +//----- (004D3670) -------------------------------------------------------- +int *__thiscall std::string::operator+=(int *this, char a2) +{ + int v3; // edi + int v4; // eax + unsigned int v6; // [esp+4h] [ebp-28h] + + v3 = *(_DWORD *)(*this - 12); + if ( (unsigned int)(v3 + 1) > *(_DWORD *)(*this - 8) || *(int *)(*this - 4) > 0 ) + std::string::reserve(this, (std::string *)(v3 + 1), v6); + *(_BYTE *)(*this + *(_DWORD *)(*this - 12)) = a2; + v4 = *this; + *(_DWORD *)(v4 - 4) = 0; + *(_DWORD *)(v4 - 12) = v3 + 1; + *(_BYTE *)(v4 + v3 + 1) = 0; + return this; +} +// 4D3696: variable 'v6' is possibly undefined + +//----- (004D36D0) -------------------------------------------------------- +int __cdecl std::__num_base::_S_format_float(std::__num_base *this, const std::ios_base *a2, char *a3) +{ + int result; // eax + char *v4; // edx + int v5; // edi + _BYTE *v6; // ecx + _BYTE *v7; // esi + int v8; // edx + + result = *((_DWORD *)this + 3); + v4 = (char *)a2 + 1; + *(_BYTE *)a2 = 37; + if ( (result & 0x800) != 0 ) + { + *((_BYTE *)a2 + 1) = 43; + v4 = (char *)a2 + 2; + } + if ( (result & 0x400) != 0 ) + *v4++ = 35; + v5 = result & 0x104; + if ( v5 == 260 ) + { + v6 = v4; + if ( !(_BYTE)a3 ) + goto LABEL_16; +LABEL_12: + *v6++ = (_BYTE)a3; + v7 = v6 + 1; + if ( v5 != 4 ) + goto LABEL_8; +LABEL_13: + *v6 = 102; + *v7 = 0; + return result; + } + v6 = v4 + 2; + *(_WORD *)v4 = 10798; + if ( (_BYTE)a3 ) + goto LABEL_12; + v7 = v4 + 3; + if ( v5 == 4 ) + goto LABEL_13; +LABEL_8: + v8 = result & 0x4000; + if ( v5 == 256 ) + { + result = v8 == 0 ? 101 : 69; + *v6 = result; + *v7 = 0; + return result; + } + if ( v5 != 260 ) + { + result = v8 == 0 ? 103 : 71; + *v6 = result; + *v7 = 0; + return result; + } + v4 = v6; +LABEL_16: + result = (result & 0x4000) == 0 ? 97 : 65; + *v4 = result; + v4[1] = 0; + return result; +} + +//----- (004D37C0) -------------------------------------------------------- +void __fastcall std::bad_typeid::~bad_typeid(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_55FE8C; + std::exception::~exception(Block); + operator delete(a1); +} +// 4D37CC: variable 'Block' is possibly undefined +// 55FE8C: using guessed type void (__cdecl *off_55FE8C)(std::bad_typeid *__hidden this); + +//----- (004D37F0) -------------------------------------------------------- +void __cdecl std::bad_typeid::~bad_typeid(std::exception *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FE8C; + std::exception::~exception(a1); +} +// 4D37F0: variable 'v1' is possibly undefined +// 55FE8C: using guessed type void (__cdecl *off_55FE8C)(std::bad_typeid *__hidden this); + +//----- (004D3800) -------------------------------------------------------- +int __cdecl std::money_base::_S_construct_pattern() +{ + return std::money_base::_S_default_pattern; +} +// 55AF40: using guessed type int std::money_base::_S_default_pattern; + +//----- (004D3810) -------------------------------------------------------- +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3) +{ + _DWORD *v4; // eax + char *v5; // esi + _DWORD *v6; // eax + int result; // eax + + v4 = (_DWORD *)this[2]; + if ( !v4 ) + { + v4 = operator new(0x44u); + *v4 = &off_5606D4; + v4[1] = 0; + v4[2] = 0; + v4[3] = 0; + *((_WORD *)v4 + 8) = 0; + *((_BYTE *)v4 + 18) = 0; + v4[5] = 0; + v4[6] = 0; + v4[7] = 0; + v4[8] = 0; + v4[9] = 0; + v4[10] = 0; + v4[11] = 0; + v4[12] = 0; + v4[13] = 0; + *((_BYTE *)v4 + 67) = 0; + this[2] = v4; + } + *((_BYTE *)v4 + 17) = 46; + v5 = std::money_base::_S_atoms; + *(_BYTE *)(this[2] + 18) = 44; + v6 = (_DWORD *)this[2]; + v6[2] = &unk_556C0C; + v6[3] = 0; + v6[5] = &unk_556C0C; + v6[6] = 0; + v6[7] = &unk_556C0C; + v6[8] = 0; + v6[9] = &unk_556C0C; + v6[10] = 0; + v6[11] = 0; + v6[12] = std::money_base::_S_default_pattern; + *(_DWORD *)(this[2] + 52) = std::money_base::_S_default_pattern; + for ( result = 0; result != 11; ++result ) + *(_BYTE *)(this[2] + result + 56) = v5[result]; + return result; +} +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 55AF40: using guessed type int std::money_base::_S_default_pattern; +// 5606D4: using guessed type int (*off_5606D4)(); + +//----- (004D3930) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FEA0; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FEA0: using guessed type int (*off_55FEA0)(); + +//----- (004D39D0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55FEA0; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55FEA0: using guessed type int (*off_55FEA0)(); + +//----- (004D3A70) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FEA0; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FEA0: using guessed type int (*off_55FEA0)(); + +//----- (004D3B10) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FEA0; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FEA0: using guessed type int (*off_55FEA0)(); + +//----- (004D3BB0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55FEA0; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55FEA0: using guessed type int (*off_55FEA0)(); + +//----- (004D3C50) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FEA0; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FEA0: using guessed type int (*off_55FEA0)(); + +//----- (004D3CF0) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + std::moneypunct::~moneypunct(a1); + operator delete(a1); +} + +//----- (004D3D80) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + void *v1; // edx + void (__fastcall *v2)(void *); // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + void *Block; // [esp+14h] [ebp-48h] + + v1 = (void *)a1[2]; + *a1 = &off_55FEA0; + Block = v1; + if ( v1 ) + { + v2 = *(void (__fastcall **)(void *))(*(_DWORD *)v1 + 4); + if ( v2 == std::__moneypunct_cache::~__moneypunct_cache ) + { + std::__moneypunct_cache::~__moneypunct_cache((std::locale::facet *)lpfctx); + operator delete(Block); + } + else + { + v2(v1); + } + } + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4D3DDF: variable 'lpfctx' is possibly undefined +// 55FEA0: using guessed type int (*off_55FEA0)(); + +//----- (004D3E80) -------------------------------------------------------- +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3) +{ + _DWORD *v4; // eax + char *v5; // esi + _DWORD *v6; // eax + int result; // eax + + v4 = (_DWORD *)this[2]; + if ( !v4 ) + { + v4 = operator new(0x44u); + *v4 = &off_5606E4; + v4[1] = 0; + v4[2] = 0; + v4[3] = 0; + *((_WORD *)v4 + 8) = 0; + *((_BYTE *)v4 + 18) = 0; + v4[5] = 0; + v4[6] = 0; + v4[7] = 0; + v4[8] = 0; + v4[9] = 0; + v4[10] = 0; + v4[11] = 0; + v4[12] = 0; + v4[13] = 0; + *((_BYTE *)v4 + 67) = 0; + this[2] = v4; + } + *((_BYTE *)v4 + 17) = 46; + v5 = std::money_base::_S_atoms; + *(_BYTE *)(this[2] + 18) = 44; + v6 = (_DWORD *)this[2]; + v6[2] = &unk_556C0C; + v6[3] = 0; + v6[5] = &unk_556C0C; + v6[6] = 0; + v6[7] = &unk_556C0C; + v6[8] = 0; + v6[9] = &unk_556C0C; + v6[10] = 0; + v6[11] = 0; + v6[12] = std::money_base::_S_default_pattern; + *(_DWORD *)(this[2] + 52) = std::money_base::_S_default_pattern; + for ( result = 0; result != 11; ++result ) + *(_BYTE *)(this[2] + result + 56) = v5[result]; + return result; +} +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 55AF40: using guessed type int std::money_base::_S_default_pattern; +// 5606E4: using guessed type int (*off_5606E4)(); + +//----- (004D3FA0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FED4; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FED4: using guessed type int (*off_55FED4)(); + +//----- (004D4040) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55FED4; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55FED4: using guessed type int (*off_55FED4)(); + +//----- (004D40E0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FED4; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FED4: using guessed type int (*off_55FED4)(); + +//----- (004D4180) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FED4; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FED4: using guessed type int (*off_55FED4)(); + +//----- (004D4220) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55FED4; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55FED4: using guessed type int (*off_55FED4)(); + +//----- (004D42C0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FED4; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FED4: using guessed type int (*off_55FED4)(); + +//----- (004D4360) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + std::moneypunct::~moneypunct(a1); + operator delete(a1); +} + +//----- (004D43F0) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + void *v1; // edx + void (__fastcall *v2)(void *); // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + void *Block; // [esp+14h] [ebp-48h] + + v1 = (void *)a1[2]; + *a1 = &off_55FED4; + Block = v1; + if ( v1 ) + { + v2 = *(void (__fastcall **)(void *))(*(_DWORD *)v1 + 4); + if ( v2 == std::__moneypunct_cache::~__moneypunct_cache ) + { + std::__moneypunct_cache::~__moneypunct_cache((std::locale::facet *)lpfctx); + operator delete(Block); + } + else + { + v2(v1); + } + } + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4D444F: variable 'lpfctx' is possibly undefined +// 55FED4: using guessed type int (*off_55FED4)(); + +//----- (004D44F0) -------------------------------------------------------- +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3) +{ + _DWORD *v4; // eax + char *v5; // ebx + int v6; // ecx + int result; // eax + + v4 = (_DWORD *)this[2]; + if ( !v4 ) + { + v4 = operator new(0x54u); + v4[1] = 0; + *v4 = &off_5606F4; + v4[2] = 0; + v4[3] = 0; + *((_BYTE *)v4 + 16) = 0; + *(_DWORD *)((char *)v4 + 18) = 0; + v4[6] = 0; + v4[7] = 0; + v4[8] = 0; + v4[9] = 0; + v4[10] = 0; + v4[11] = 0; + v4[12] = 0; + v4[13] = 0; + v4[14] = 0; + *((_BYTE *)v4 + 82) = 0; + this[2] = v4; + } + *(_DWORD *)((char *)v4 + 18) = 2883630; + v4[2] = &unk_556C0C; + v5 = std::money_base::_S_atoms; + v4[13] = std::money_base::_S_default_pattern; + v4[3] = 0; + v4[6] = &unk_556C0E; + v4[7] = 0; + v4[8] = &unk_556C0E; + v4[9] = 0; + v4[10] = &unk_556C0E; + v4[11] = 0; + v4[12] = 0; + *(_DWORD *)(this[2] + 56) = std::money_base::_S_default_pattern; + v6 = this[2]; + for ( result = 0; result != 11; ++result ) + *(_WORD *)(v6 + 2 * result + 60) = v5[result]; + return result; +} +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 55AF40: using guessed type int std::money_base::_S_default_pattern; +// 5606F4: using guessed type int (*off_5606F4)(); + +//----- (004D4610) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FF08; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FF08: using guessed type int (*off_55FF08)(); + +//----- (004D46B0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55FF08; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55FF08: using guessed type int (*off_55FF08)(); + +//----- (004D4750) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FF08; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FF08: using guessed type int (*off_55FF08)(); + +//----- (004D47F0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FF08; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FF08: using guessed type int (*off_55FF08)(); + +//----- (004D4890) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55FF08; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55FF08: using guessed type int (*off_55FF08)(); + +//----- (004D4930) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FF08; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FF08: using guessed type int (*off_55FF08)(); + +//----- (004D49D0) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + std::moneypunct::~moneypunct(a1); + operator delete(a1); +} + +//----- (004D4A60) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + void *v1; // edx + void (__fastcall *v2)(void *); // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + void *Block; // [esp+14h] [ebp-48h] + + v1 = (void *)a1[2]; + *a1 = &off_55FF08; + Block = v1; + if ( v1 ) + { + v2 = *(void (__fastcall **)(void *))(*(_DWORD *)v1 + 4); + if ( v2 == std::__moneypunct_cache::~__moneypunct_cache ) + { + std::__moneypunct_cache::~__moneypunct_cache((std::locale::facet *)lpfctx); + operator delete(Block); + } + else + { + v2(v1); + } + } + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4D4ABF: variable 'lpfctx' is possibly undefined +// 55FF08: using guessed type int (*off_55FF08)(); + +//----- (004D4B60) -------------------------------------------------------- +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3) +{ + _DWORD *v4; // eax + char *v5; // ebx + int v6; // ecx + int result; // eax + + v4 = (_DWORD *)this[2]; + if ( !v4 ) + { + v4 = operator new(0x54u); + v4[1] = 0; + *v4 = &off_560704; + v4[2] = 0; + v4[3] = 0; + *((_BYTE *)v4 + 16) = 0; + *(_DWORD *)((char *)v4 + 18) = 0; + v4[6] = 0; + v4[7] = 0; + v4[8] = 0; + v4[9] = 0; + v4[10] = 0; + v4[11] = 0; + v4[12] = 0; + v4[13] = 0; + v4[14] = 0; + *((_BYTE *)v4 + 82) = 0; + this[2] = v4; + } + *(_DWORD *)((char *)v4 + 18) = 2883630; + v4[2] = &unk_556C0C; + v5 = std::money_base::_S_atoms; + v4[13] = std::money_base::_S_default_pattern; + v4[3] = 0; + v4[6] = &unk_556C0E; + v4[7] = 0; + v4[8] = &unk_556C0E; + v4[9] = 0; + v4[10] = &unk_556C0E; + v4[11] = 0; + v4[12] = 0; + *(_DWORD *)(this[2] + 56) = std::money_base::_S_default_pattern; + v6 = this[2]; + for ( result = 0; result != 11; ++result ) + *(_WORD *)(v6 + 2 * result + 60) = v5[result]; + return result; +} +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 55AF40: using guessed type int std::money_base::_S_default_pattern; +// 560704: using guessed type int (*off_560704)(); + +//----- (004D4C80) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FF3C; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FF3C: using guessed type int (*off_55FF3C)(); + +//----- (004D4D20) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55FF3C; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55FF3C: using guessed type int (*off_55FF3C)(); + +//----- (004D4DC0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FF3C; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FF3C: using guessed type int (*off_55FF3C)(); + +//----- (004D4E60) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FF3C; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FF3C: using guessed type int (*off_55FF3C)(); + +//----- (004D4F00) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55FF3C; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55FF3C: using guessed type int (*off_55FF3C)(); + +//----- (004D4FA0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FF3C; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55FF3C: using guessed type int (*off_55FF3C)(); + +//----- (004D5040) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + std::moneypunct::~moneypunct(a1); + operator delete(a1); +} + +//----- (004D50D0) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + void *v1; // edx + void (__fastcall *v2)(void *); // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + void *Block; // [esp+14h] [ebp-48h] + + v1 = (void *)a1[2]; + *a1 = &off_55FF3C; + Block = v1; + if ( v1 ) + { + v2 = *(void (__fastcall **)(void *))(*(_DWORD *)v1 + 4); + if ( v2 == std::__moneypunct_cache::~__moneypunct_cache ) + { + std::__moneypunct_cache::~__moneypunct_cache((std::locale::facet *)lpfctx); + operator delete(Block); + } + else + { + v2(v1); + } + } + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4D512F: variable 'lpfctx' is possibly undefined +// 55FF3C: using guessed type int (*off_55FF3C)(); + +//----- (004D51D0) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_initialize_timepunct(_DWORD *this, int a2) +{ + _DWORD *result; // eax + + result = (_DWORD *)this[2]; + if ( !result ) + { + result = operator new(0xC8u); + result[1] = 0; + *result = &off_5605E4; + result[2] = 0; + result[3] = 0; + result[4] = 0; + result[5] = 0; + result[6] = 0; + result[7] = 0; + result[8] = 0; + result[9] = 0; + result[10] = 0; + result[11] = 0; + result[12] = 0; + result[13] = 0; + result[14] = 0; + result[15] = 0; + result[16] = 0; + result[17] = 0; + result[18] = 0; + result[19] = 0; + result[20] = 0; + result[21] = 0; + result[22] = 0; + result[23] = 0; + result[24] = 0; + result[25] = 0; + result[26] = 0; + result[27] = 0; + result[28] = 0; + result[29] = 0; + result[30] = 0; + result[31] = 0; + result[32] = 0; + result[33] = 0; + result[34] = 0; + result[35] = 0; + result[36] = 0; + result[37] = 0; + result[38] = 0; + result[39] = 0; + result[40] = 0; + result[41] = 0; + result[42] = 0; + result[43] = 0; + result[44] = 0; + result[45] = 0; + result[46] = 0; + result[47] = 0; + result[48] = 0; + *((_BYTE *)result + 196) = 0; + this[2] = result; + } + result[2] = "%m/%d/%y"; + result[3] = "%m/%d/%y"; + result[4] = "%H:%M:%S"; + result[5] = "%H:%M:%S"; + result[6] = &off_559FE2; + result[7] = &off_559FE2; + result[8] = 5611491; + result[9] = &unk_559FE6; + result[10] = &off_559FE2; + result[11] = "Sunday"; + result[12] = "Monday"; + result[13] = "Tuesday"; + result[14] = "Wednesday"; + result[15] = "Thursday"; + result[16] = "Friday"; + result[17] = "Saturday"; + result[18] = &off_55A022; + result[19] = &off_55A026; + result[20] = &off_55A02A; + result[21] = &off_55A02E; + result[22] = &off_55A032; + result[23] = &off_55A036; + result[24] = &off_55A03A; + result[25] = "January"; + result[26] = "February"; + result[27] = "March"; + result[28] = "April"; + result[29] = "May"; + result[30] = "June"; + result[31] = "July"; + result[32] = "August"; + result[33] = "September"; + result[34] = "October"; + result[35] = "November"; + result[36] = "December"; + result[37] = &off_55A094; + result[38] = &off_55A098; + result[39] = &off_55A09C; + result[40] = &off_55A0A0; + result[41] = "May"; + result[42] = &off_55A0A4; + result[43] = &off_55A0A8; + result[44] = &off_55A0AC; + result[45] = &off_55A0B0; + result[46] = &off_55A0B4; + result[47] = &off_55A0B8; + result[48] = &off_55A0BC; + return result; +} +// 559FE2: using guessed type void *off_559FE2; +// 55A022: using guessed type void *off_55A022; +// 55A026: using guessed type void *off_55A026; +// 55A02A: using guessed type void *off_55A02A; +// 55A02E: using guessed type void *off_55A02E; +// 55A032: using guessed type void *off_55A032; +// 55A036: using guessed type void *off_55A036; +// 55A03A: using guessed type void *off_55A03A; +// 55A094: using guessed type void *off_55A094; +// 55A098: using guessed type void *off_55A098; +// 55A09C: using guessed type void *off_55A09C; +// 55A0A0: using guessed type void *off_55A0A0; +// 55A0A4: using guessed type void *off_55A0A4; +// 55A0A8: using guessed type void *off_55A0A8; +// 55A0AC: using guessed type void *off_55A0AC; +// 55A0B0: using guessed type void *off_55A0B0; +// 55A0B4: using guessed type void *off_55A0B4; +// 55A0B8: using guessed type void *off_55A0B8; +// 55A0BC: using guessed type void *off_55A0BC; +// 5605E4: using guessed type int (*off_5605E4)(); + +//----- (004D5510) -------------------------------------------------------- +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FF70; + this[2] = a2; + this[4] = std::locale::facet::_S_get_c_name(); + std::__timepunct::_M_initialize_timepunct(this, 0); +} +// 55FF70: using guessed type int (*off_55FF70)(); + +//----- (004D55B0) -------------------------------------------------------- +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, char *Str1, int a4) +{ + unsigned int v4; // [esp+8h] [ebp-50h] + void *Size; // [esp+10h] [ebp-48h] + const char *c_name; // [esp+14h] [ebp-44h] + + this[1] = a4 != 0; + *this = &off_55FF70; + this[2] = 0; + c_name = (const char *)std::locale::facet::_S_get_c_name(); + if ( !strcmp(Str1, c_name) ) + { + this[4] = c_name; + } + else + { + v4 = strlen(Str1) + 1; + Size = (void *)operator new[](v4); + memcpy(Size, Str1, v4); + this[4] = Size; + } + std::__timepunct::_M_initialize_timepunct(this, a2); +} +// 55FF70: using guessed type int (*off_55FF70)(); + +//----- (004D5710) -------------------------------------------------------- +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FF70; + this[2] = 0; + this[4] = std::locale::facet::_S_get_c_name(); + std::__timepunct::_M_initialize_timepunct(this, 0); +} +// 55FF70: using guessed type int (*off_55FF70)(); + +//----- (004D57B0) -------------------------------------------------------- +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FF70; + this[2] = a2; + this[4] = std::locale::facet::_S_get_c_name(); + std::__timepunct::_M_initialize_timepunct(this, 0); +} +// 55FF70: using guessed type int (*off_55FF70)(); + +//----- (004D5850) -------------------------------------------------------- +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, char *Str1, int a4) +{ + unsigned int v4; // [esp+8h] [ebp-50h] + void *Size; // [esp+10h] [ebp-48h] + const char *c_name; // [esp+14h] [ebp-44h] + + this[1] = a4 != 0; + *this = &off_55FF70; + this[2] = 0; + c_name = (const char *)std::locale::facet::_S_get_c_name(); + if ( !strcmp(Str1, c_name) ) + { + this[4] = c_name; + } + else + { + v4 = strlen(Str1) + 1; + Size = (void *)operator new[](v4); + memcpy(Size, Str1, v4); + this[4] = Size; + } + std::__timepunct::_M_initialize_timepunct(this, a2); +} +// 55FF70: using guessed type int (*off_55FF70)(); + +//----- (004D59B0) -------------------------------------------------------- +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FF70; + this[2] = 0; + this[4] = std::locale::facet::_S_get_c_name(); + std::__timepunct::_M_initialize_timepunct(this, 0); +} +// 55FF70: using guessed type int (*off_55FF70)(); + +//----- (004D5A50) -------------------------------------------------------- +void __fastcall std::__timepunct::~__timepunct(_DWORD *Block) +{ + std::__timepunct::~__timepunct(Block); + operator delete(Block); +} + +//----- (004D5A70) -------------------------------------------------------- +void __fastcall std::__timepunct::~__timepunct(_DWORD *a1) +{ + int **v2; // esi + void *v3; // esi + void (__fastcall *v4)(_DWORD *); // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + struct SjLj_Function_Context *lpfctxa; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FF70; + v2 = (int **)a1[4]; + if ( v2 != std::locale::facet::_S_get_c_name() && v2 ) + operator delete[](v2); + v3 = (void *)a1[2]; + if ( v3 ) + { + v4 = *(void (__fastcall **)(_DWORD *))(*(_DWORD *)v3 + 4); + if ( v4 == std::__timepunct_cache::~__timepunct_cache ) + { + *(_DWORD *)v3 = &off_5605E4; + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(v3); + } + else + { + v4((_DWORD *)a1[2]); + } + } + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 3)); + std::locale::facet::~facet((std::locale::facet *)lpfctxa); +} +// 4D5ACD: variable 'lpfctx' is possibly undefined +// 4D5AEF: variable 'lpfctxa' is possibly undefined +// 55FF70: using guessed type int (*off_55FF70)(); +// 5605E4: using guessed type int (*off_5605E4)(); + +//----- (004D5B10) -------------------------------------------------------- +void __fastcall std::__timepunct::~__timepunct(_DWORD *a1) +{ + int **v2; // esi + void *v3; // esi + void (__fastcall *v4)(_DWORD *); // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + struct SjLj_Function_Context *lpfctxa; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FF70; + v2 = (int **)a1[4]; + if ( v2 != std::locale::facet::_S_get_c_name() && v2 ) + operator delete[](v2); + v3 = (void *)a1[2]; + if ( v3 ) + { + v4 = *(void (__fastcall **)(_DWORD *))(*(_DWORD *)v3 + 4); + if ( v4 == std::__timepunct_cache::~__timepunct_cache ) + { + *(_DWORD *)v3 = &off_5605E4; + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(v3); + } + else + { + v4((_DWORD *)a1[2]); + } + } + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 3)); + std::locale::facet::~facet((std::locale::facet *)lpfctxa); +} +// 4D5B6D: variable 'lpfctx' is possibly undefined +// 4D5B8F: variable 'lpfctxa' is possibly undefined +// 55FF70: using guessed type int (*off_55FF70)(); +// 5605E4: using guessed type int (*off_5605E4)(); + +//----- (004D5BB0) -------------------------------------------------------- +_DWORD *__thiscall std::__timepunct::_M_initialize_timepunct(_DWORD *this, int a2) +{ + _DWORD *result; // eax + + result = (_DWORD *)this[2]; + if ( !result ) + { + result = operator new(0xC8u); + result[1] = 0; + *result = &off_5605F4; + result[2] = 0; + result[3] = 0; + result[4] = 0; + result[5] = 0; + result[6] = 0; + result[7] = 0; + result[8] = 0; + result[9] = 0; + result[10] = 0; + result[11] = 0; + result[12] = 0; + result[13] = 0; + result[14] = 0; + result[15] = 0; + result[16] = 0; + result[17] = 0; + result[18] = 0; + result[19] = 0; + result[20] = 0; + result[21] = 0; + result[22] = 0; + result[23] = 0; + result[24] = 0; + result[25] = 0; + result[26] = 0; + result[27] = 0; + result[28] = 0; + result[29] = 0; + result[30] = 0; + result[31] = 0; + result[32] = 0; + result[33] = 0; + result[34] = 0; + result[35] = 0; + result[36] = 0; + result[37] = 0; + result[38] = 0; + result[39] = 0; + result[40] = 0; + result[41] = 0; + result[42] = 0; + result[43] = 0; + result[44] = 0; + result[45] = 0; + result[46] = 0; + result[47] = 0; + result[48] = 0; + *((_BYTE *)result + 196) = 0; + this[2] = result; + } + result[2] = &off_55A0C0; + result[3] = &off_55A0C0; + result[4] = &off_55A0D2; + result[5] = &off_55A0D2; + result[6] = &unk_55A0E4; + result[7] = &unk_55A0E4; + result[8] = &off_55A0E6; + result[9] = L"PM"; + result[10] = &unk_55A0E4; + result[11] = &off_55A0F2; + result[12] = &off_55A100; + result[13] = &off_55A10E; + result[14] = &off_55A11E; + result[15] = &off_55A132; + result[16] = &off_55A144; + result[17] = &off_55A152; + result[18] = &off_55A164; + result[19] = &off_55A16C; + result[20] = &off_55A174; + result[21] = &off_55A17C; + result[22] = &off_55A184; + result[23] = &off_55A18C; + result[24] = &off_55A194; + result[25] = &off_55A19C; + result[26] = &off_55A1AC; + result[27] = &off_55A1BE; + result[28] = &off_55A1CA; + result[29] = &off_55A1D6; + result[30] = &off_55A1DE; + result[31] = &off_55A1E8; + result[32] = &off_55A1F2; + result[33] = &off_55A200; + result[34] = &off_55A214; + result[35] = &off_55A224; + result[36] = &off_55A236; + result[37] = &off_55A248; + result[38] = &off_55A250; + result[39] = &off_55A258; + result[40] = &off_55A260; + result[41] = &off_55A1D6; + result[42] = &off_55A268; + result[43] = &off_55A270; + result[44] = &off_55A278; + result[45] = &off_55A280; + result[46] = &off_55A288; + result[47] = &off_55A290; + result[48] = &off_55A298; + return result; +} +// 55A0C0: using guessed type void *off_55A0C0; +// 55A0D2: using guessed type void *off_55A0D2; +// 55A0E6: using guessed type void *off_55A0E6; +// 55A0EC: using guessed type wchar_t aPm[3]; +// 55A0F2: using guessed type void *off_55A0F2; +// 55A100: using guessed type void *off_55A100; +// 55A10E: using guessed type void *off_55A10E; +// 55A11E: using guessed type void *off_55A11E; +// 55A132: using guessed type void *off_55A132; +// 55A144: using guessed type void *off_55A144; +// 55A152: using guessed type void *off_55A152; +// 55A164: using guessed type void *off_55A164; +// 55A16C: using guessed type void *off_55A16C; +// 55A174: using guessed type void *off_55A174; +// 55A17C: using guessed type void *off_55A17C; +// 55A184: using guessed type void *off_55A184; +// 55A18C: using guessed type void *off_55A18C; +// 55A194: using guessed type void *off_55A194; +// 55A19C: using guessed type void *off_55A19C; +// 55A1AC: using guessed type void *off_55A1AC; +// 55A1BE: using guessed type void *off_55A1BE; +// 55A1CA: using guessed type void *off_55A1CA; +// 55A1D6: using guessed type void *off_55A1D6; +// 55A1DE: using guessed type void *off_55A1DE; +// 55A1E8: using guessed type void *off_55A1E8; +// 55A1F2: using guessed type void *off_55A1F2; +// 55A200: using guessed type void *off_55A200; +// 55A214: using guessed type void *off_55A214; +// 55A224: using guessed type void *off_55A224; +// 55A236: using guessed type void *off_55A236; +// 55A248: using guessed type void *off_55A248; +// 55A250: using guessed type void *off_55A250; +// 55A258: using guessed type void *off_55A258; +// 55A260: using guessed type void *off_55A260; +// 55A268: using guessed type void *off_55A268; +// 55A270: using guessed type void *off_55A270; +// 55A278: using guessed type void *off_55A278; +// 55A280: using guessed type void *off_55A280; +// 55A288: using guessed type void *off_55A288; +// 55A290: using guessed type void *off_55A290; +// 55A298: using guessed type void *off_55A298; +// 5605F4: using guessed type int (*off_5605F4)(); + +//----- (004D5EF0) -------------------------------------------------------- +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FF80; + this[2] = a2; + this[4] = std::locale::facet::_S_get_c_name(); + std::__timepunct::_M_initialize_timepunct(this, 0); +} +// 55FF80: using guessed type int (*off_55FF80)(); + +//----- (004D5F90) -------------------------------------------------------- +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, char *Str1, int a4) +{ + unsigned int v4; // [esp+8h] [ebp-50h] + void *Size; // [esp+10h] [ebp-48h] + const char *c_name; // [esp+14h] [ebp-44h] + + this[1] = a4 != 0; + *this = &off_55FF80; + this[2] = 0; + c_name = (const char *)std::locale::facet::_S_get_c_name(); + if ( !strcmp(Str1, c_name) ) + { + this[4] = c_name; + } + else + { + v4 = strlen(Str1) + 1; + Size = (void *)operator new[](v4); + memcpy(Size, Str1, v4); + this[4] = Size; + } + std::__timepunct::_M_initialize_timepunct(this, a2); +} +// 55FF80: using guessed type int (*off_55FF80)(); + +//----- (004D60F0) -------------------------------------------------------- +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FF80; + this[2] = 0; + this[4] = std::locale::facet::_S_get_c_name(); + std::__timepunct::_M_initialize_timepunct(this, 0); +} +// 55FF80: using guessed type int (*off_55FF80)(); + +//----- (004D6190) -------------------------------------------------------- +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FF80; + this[2] = a2; + this[4] = std::locale::facet::_S_get_c_name(); + std::__timepunct::_M_initialize_timepunct(this, 0); +} +// 55FF80: using guessed type int (*off_55FF80)(); + +//----- (004D6230) -------------------------------------------------------- +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2, char *Str1, int a4) +{ + unsigned int v4; // [esp+8h] [ebp-50h] + void *Size; // [esp+10h] [ebp-48h] + const char *c_name; // [esp+14h] [ebp-44h] + + this[1] = a4 != 0; + *this = &off_55FF80; + this[2] = 0; + c_name = (const char *)std::locale::facet::_S_get_c_name(); + if ( !strcmp(Str1, c_name) ) + { + this[4] = c_name; + } + else + { + v4 = strlen(Str1) + 1; + Size = (void *)operator new[](v4); + memcpy(Size, Str1, v4); + this[4] = Size; + } + std::__timepunct::_M_initialize_timepunct(this, a2); +} +// 55FF80: using guessed type int (*off_55FF80)(); + +//----- (004D6390) -------------------------------------------------------- +void __thiscall std::__timepunct::__timepunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FF80; + this[2] = 0; + this[4] = std::locale::facet::_S_get_c_name(); + std::__timepunct::_M_initialize_timepunct(this, 0); +} +// 55FF80: using guessed type int (*off_55FF80)(); + +//----- (004D6430) -------------------------------------------------------- +void __fastcall std::__timepunct::~__timepunct(_DWORD *Block) +{ + std::__timepunct::~__timepunct(Block); + operator delete(Block); +} + +//----- (004D6450) -------------------------------------------------------- +void __fastcall std::__timepunct::~__timepunct(_DWORD *a1) +{ + int **v2; // esi + void *v3; // esi + void (__fastcall *v4)(_DWORD *); // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + struct SjLj_Function_Context *lpfctxa; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FF80; + v2 = (int **)a1[4]; + if ( v2 != std::locale::facet::_S_get_c_name() && v2 ) + operator delete[](v2); + v3 = (void *)a1[2]; + if ( v3 ) + { + v4 = *(void (__fastcall **)(_DWORD *))(*(_DWORD *)v3 + 4); + if ( v4 == std::__timepunct_cache::~__timepunct_cache ) + { + *(_DWORD *)v3 = &off_5605F4; + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(v3); + } + else + { + v4((_DWORD *)a1[2]); + } + } + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 3)); + std::locale::facet::~facet((std::locale::facet *)lpfctxa); +} +// 4D64AD: variable 'lpfctx' is possibly undefined +// 4D64CF: variable 'lpfctxa' is possibly undefined +// 55FF80: using guessed type int (*off_55FF80)(); +// 5605F4: using guessed type int (*off_5605F4)(); + +//----- (004D64F0) -------------------------------------------------------- +void __fastcall std::__timepunct::~__timepunct(_DWORD *a1) +{ + int **v2; // esi + void *v3; // esi + void (__fastcall *v4)(_DWORD *); // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + struct SjLj_Function_Context *lpfctxa; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FF80; + v2 = (int **)a1[4]; + if ( v2 != std::locale::facet::_S_get_c_name() && v2 ) + operator delete[](v2); + v3 = (void *)a1[2]; + if ( v3 ) + { + v4 = *(void (__fastcall **)(_DWORD *))(*(_DWORD *)v3 + 4); + if ( v4 == std::__timepunct_cache::~__timepunct_cache ) + { + *(_DWORD *)v3 = &off_5605F4; + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(v3); + } + else + { + v4((_DWORD *)a1[2]); + } + } + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 3)); + std::locale::facet::~facet((std::locale::facet *)lpfctxa); +} +// 4D654D: variable 'lpfctx' is possibly undefined +// 4D656F: variable 'lpfctxa' is possibly undefined +// 55FF80: using guessed type int (*off_55FF80)(); +// 5605F4: using guessed type int (*off_5605F4)(); + +//----- (004D6590) -------------------------------------------------------- +void __userpurge std::logic_error::logic_error(_DWORD *a1@, std::logic_error *this, const char *a3) +{ + int v3; // [esp+5Fh] [ebp-9h] BYREF + + *a1 = &off_55FF90; + std::string::string((char *)this, (int)&v3); +} +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); + +//----- (004D6620) -------------------------------------------------------- +void __thiscall std::logic_error::logic_error(_DWORD *this, int a2) +{ + unsigned int v2; // [esp+8h] [ebp-50h] + + *this = &off_55FF90; + std::__cow_string::__cow_string(this + 1, *(std::__cow_string **)a2, *(_DWORD *)(a2 + 4), v2); +} +// 4D6674: variable 'v2' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); + +//----- (004D66B0) -------------------------------------------------------- +void __userpurge std::logic_error::logic_error(_DWORD *a1@, std::logic_error *this, const std::logic_error *a3) +{ + const std::string *v3; // [esp+4h] [ebp-58h] + + *a1 = &off_55FF90; + std::string::string(a1 + 1, (std::logic_error *)((char *)this + 4), v3); +} +// 4D66EE: variable 'v3' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); + +//----- (004D6710) -------------------------------------------------------- +void __userpurge std::logic_error::logic_error(_DWORD *a1@, std::logic_error *this, const std::string *a3) +{ + const std::string *v3; // [esp+4h] [ebp-54h] + + *a1 = &off_55FF90; + std::string::string(a1 + 1, this, v3); +} +// 4D6758: variable 'v3' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); + +//----- (004D6790) -------------------------------------------------------- +void __fastcall std::logic_error::~logic_error(void *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + std::logic_error::~logic_error(Block); + operator delete(a1); +} +// 4D6796: variable 'Block' is possibly undefined + +//----- (004D67B0) -------------------------------------------------------- +void __cdecl std::logic_error::~logic_error(std::exception *a1) +{ + _DWORD *v1; // ecx + int v2; // eax + int v3; // ecx + int v4; // eax + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v2 = _CRT_MT; + *v1 = &off_55FF90; + v3 = v1[1]; + if ( v2 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v3 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v4 = *(_DWORD *)(v3 - 4); + *(_DWORD *)(v3 - 4) = v4 - 1; + if ( v4 > 0 ) + { +LABEL_3: + std::exception::~exception(a1); + return; + } + } + std::string::_Rep::_M_destroy((void *)(v3 - 12), (int)v5); + std::exception::~exception(a1); +} +// 4D67BB: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 4D67B0: using guessed type int var_D[3]; + +//----- (004D6810) -------------------------------------------------------- +int *__thiscall std::logic_error::operator=(int *this, int a2) +{ + const std::string *v4; // [esp+4h] [ebp-58h] + + std::string::assign(this + 1, (std::string *)(a2 + 4), v4); + return this; +} +// 4D6848: variable 'v4' is possibly undefined + +//----- (004D6870) -------------------------------------------------------- +int *__thiscall std::logic_error::operator=(int *this, int a2) +{ + const std::string *v4; // [esp+4h] [ebp-58h] + + std::string::assign(this + 1, (std::string *)(a2 + 4), v4); + return this; +} +// 4D68A8: variable 'v4' is possibly undefined + +//----- (004D68D0) -------------------------------------------------------- +void __userpurge std::range_error::range_error(_DWORD *a1@, std::range_error *this, const char *a3) +{ + int v4; // [esp+5Fh] [ebp-9h] BYREF + + *a1 = &off_5601E8; + std::string::string(a1 + 1, (char *)this, (int)&v4); + *a1 = &off_55FFA4; +} +// 55FFA4: using guessed type void (__cdecl *off_55FFA4)(std::range_error *__hidden this); +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); + +//----- (004D6960) -------------------------------------------------------- +void __thiscall std::range_error::range_error(_DWORD *this, int a2) +{ + unsigned int v2; // [esp+8h] [ebp-50h] + + *this = &off_5601E8; + std::__cow_string::__cow_string(this + 1, *(std::__cow_string **)a2, *(_DWORD *)(a2 + 4), v2); + *this = &off_55FFA4; +} +// 4D69B4: variable 'v2' is possibly undefined +// 55FFA4: using guessed type void (__cdecl *off_55FFA4)(std::range_error *__hidden this); +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); + +//----- (004D6A00) -------------------------------------------------------- +void __userpurge std::range_error::range_error(_DWORD *a1@, std::range_error *this, const std::string *a3) +{ + const std::string *v3; // [esp+4h] [ebp-54h] + + *a1 = &off_5601E8; + std::string::string(a1 + 1, this, v3); + *a1 = &off_55FFA4; +} +// 4D6A48: variable 'v3' is possibly undefined +// 55FFA4: using guessed type void (__cdecl *off_55FFA4)(std::range_error *__hidden this); +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); + +//----- (004D6A90) -------------------------------------------------------- +void __fastcall std::range_error::~range_error(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_55FFA4; + std::runtime_error::~runtime_error(Block); + operator delete(a1); +} +// 4D6A9C: variable 'Block' is possibly undefined +// 55FFA4: using guessed type void (__cdecl *off_55FFA4)(std::range_error *__hidden this); + +//----- (004D6AB0) -------------------------------------------------------- +void __cdecl std::range_error::~range_error(std::exception *a1) +{ + _DWORD *v1; // ecx + int v2; // eax + int v3; // ecx + int v4; // eax + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v2 = _CRT_MT; + *v1 = &off_5601E8; + v3 = v1[1]; + if ( v2 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v3 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v4 = *(_DWORD *)(v3 - 4); + *(_DWORD *)(v3 - 4) = v4 - 1; + if ( v4 > 0 ) + { +LABEL_3: + std::exception::~exception(a1); + return; + } + } + std::string::_Rep::_M_destroy((void *)(v3 - 12), (int)v5); + std::exception::~exception(a1); +} +// 4D6ABB: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 4D6AB0: using guessed type int var_D[3]; + +//----- (004D6B10) -------------------------------------------------------- +int __usercall std::_Destroy_aux::__destroy *>@( + int a1@, + int a2, + int a3) +{ + volatile signed __int32 **v4; // ecx + + while ( a2 != a3 ) + { + v4 = (volatile signed __int32 **)(a2 + 4); + a2 += 8; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v4); + } + return a1; +} + +//----- (004D6B30) -------------------------------------------------------- +int __usercall std::_Destroy_aux::__destroy *>@( + int a1@, + int a2, + int a3) +{ + volatile signed __int32 **v4; // ecx + + while ( a2 != a3 ) + { + v4 = (volatile signed __int32 **)(a2 + 4); + a2 += 8; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v4); + } + return a1; +} + +//----- (004D6B50) -------------------------------------------------------- +int __usercall std::_Destroy_aux::__destroy *>@( + int a1@, + int a2, + int a3) +{ + volatile signed __int32 **v4; // ecx + + while ( a2 != a3 ) + { + v4 = (volatile signed __int32 **)(a2 + 4); + a2 += 8; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v4); + } + return a1; +} + +//----- (004D6B70) -------------------------------------------------------- +void __cdecl std::_Destroy_aux::__destroy(void **a1, char **a2) +{ + char *v3; // edi + char *i; // esi + volatile signed __int32 **v5; // ecx + + while ( a1 != (void **)a2 ) + { + v3 = (char *)a1[1]; + for ( i = (char *)*a1; v3 != i; i += 8 ) + { + v5 = (volatile signed __int32 **)(i + 4); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v5); + } + if ( *a1 ) + operator delete(*a1); + a1 += 3; + } +} + +//----- (004D6BB4) -------------------------------------------------------- +int __usercall std::_Destroy_aux::__destroy@(int a1@, void **a2, void **a3) +{ + void **v4; // ecx + + while ( a2 != a3 ) + { + v4 = a2; + a2 += 16; + night::ns_sourcemap::~ns_sourcemap(v4); + } + return a1; +} + +//----- (004D6BD4) -------------------------------------------------------- +int __usercall std::_Destroy_aux::__destroy@(int a1@, void **a2, void **a3) +{ + void **v4; // ecx + + while ( a2 != a3 ) + { + v4 = a2; + a2 += 6; + std::string::_M_dispose(v4); + } + return a1; +} + +//----- (004D6C00) -------------------------------------------------------- +unsigned __int8 *__usercall std::`anonymous namespace'::utf16_span@( + unsigned __int8 *a1@, + unsigned __int8 *a2@, + unsigned int a3@, + unsigned int a4, + char a5) +{ + unsigned int v6; // ebp + unsigned int v7; // esi + unsigned int v8; // ebx + unsigned int utf8_code; // eax + unsigned __int8 *v11[6]; // [esp+8h] [ebp-18h] BYREF + + v11[0] = a1; + v6 = a4; + v11[1] = a2; + if ( (a5 & 4) != 0 + && (unsigned int)(a2 - a1) > 2 + && *(_WORD *)a1 == std::`anonymous namespace'::utf8_bom + && a1[2] == 0xBF ) + { + v11[0] = a1 + 3; + } + if ( a3 > 1 ) + { + v7 = 0; + v8 = 1; + while ( 1 ) + { + utf8_code = std::`anonymous namespace'::read_utf8_code_point(v11, a4); + if ( a4 < utf8_code ) + return v11[0]; + if ( utf8_code <= 0xFFFF ) + v8 = v7; + v7 = v8 + 1; + v8 += 2; + if ( v8 >= a3 ) + goto LABEL_10; + } + } + v8 = 1; +LABEL_10: + if ( a3 != v8 ) + return v11[0]; + if ( a4 >= 0xFFFF ) + v6 = 0xFFFF; + std::`anonymous namespace'::read_utf8_code_point(v11, v6); + return v11[0]; +} +// 55AF54: using guessed type __int16 std::`anonymous namespace'::utf8_bom; + +//----- (004D6CD0) -------------------------------------------------------- +int __cdecl std::`anonymous namespace'::__x86_rdrand() +{ + bool v0; // cf + int v1; // edx + int v4; // [esp+1Ch] [ebp-10h] + + v0 = 0; + v1 = 100; + while ( 1 ) + { + __asm { rdrand eax } + v4 = _EAX; + if ( v0 ) + _EAX = 1; + if ( _EAX ) + break; + v0 = v1-- == 0; + if ( !v1 ) + std::__throw_runtime_error((std::runtime_error *)"random_device: rdrand failed"); + } + return v4; +} + +//----- (004D6D10) -------------------------------------------------------- +int __cdecl std::`anonymous namespace'::__x86_rdseed(std::_anonymous_namespace_ *this) +{ + bool v1; // cf + int v3; // eax + + v1 = 0; + __asm { rdseed eax } + v3 = 99; + do + { + _mm_pause(); + __asm { rdseed edx } + if ( v1 ) + return _EDX; + v1 = v3-- == 0; + } + while ( v3 ); + if ( !this ) + std::__throw_runtime_error((std::runtime_error *)"random_device: rdseed failed"); + return ((int (__cdecl *)(_DWORD))this)(0); +} + +//----- (004D6D70) -------------------------------------------------------- +int __cdecl std::`anonymous namespace'::__winxp_rand_s() +{ + int v1[4]; // [esp+1Ch] [ebp-10h] BYREF + + if ( _rand_s((int)v1) ) + std::__throw_runtime_error((std::runtime_error *)"random_device: rand_s failed"); + return v1[0]; +} +// 53E258: using guessed type int (__cdecl *_rand_s)(int); +// 4D6D70: using guessed type int var_10[4]; + +//----- (004D6DA0) -------------------------------------------------------- +int __usercall std::`anonymous namespace'::read_utf16_bom@(int a1@, int *a2@) +{ + int result; // eax + _WORD *v4; // ebx + + result = *a2; + if ( (*a2 & 4) != 0 ) + { + v4 = *(_WORD **)a1; + if ( (unsigned int)(*(_DWORD *)(a1 + 4) - *(_DWORD *)a1) > 1 ) + { + if ( *v4 == 0xFFFE ) + { + result &= ~1u; + *(_DWORD *)a1 = v4 + 1; + *a2 = result; + } + else if ( *v4 == 0xFEFF ) + { + result |= 1u; + *(_DWORD *)a1 = v4 + 1; + *a2 = result; + } + } + } + return result; +} + +//----- (004D6DF0) -------------------------------------------------------- +int __cdecl std::`anonymous namespace'::__x86_rdseed_rdrand() +{ + bool v0; // cf + int v2; // eax + + v0 = 0; + __asm { rdseed eax } + v2 = 99; + do + { + _mm_pause(); + __asm { rdseed edx } + if ( v0 ) + return _EDX; + v0 = v2-- == 0; + } + while ( v2 ); + return std::`anonymous namespace'::__x86_rdrand(); +} + +//----- (004D6E30) -------------------------------------------------------- +int __usercall std::`anonymous namespace'::read_utf8_code_point@( + unsigned __int8 **a1@, + unsigned int a2@) +{ + unsigned __int8 *v2; // edx + unsigned int v3; // edi + int v4; // ecx + unsigned int v5; // esi + unsigned __int8 v7; // di + unsigned __int8 v8; // di + unsigned __int8 v10; // [esp+7h] [ebp-11h] + + v2 = *a1; + v3 = a1[1] - *a1; + if ( !v3 ) + return -2; + v4 = *v2; + if ( (v4 & 0x80u) == 0 ) + { + v5 = (unsigned __int8)v4; + *a1 = v2 + 1; + return v5; + } + v5 = -1; + if ( (unsigned __int8)v4 <= 0xC1u ) + return v5; + if ( (unsigned __int8)v4 > 0xDFu ) + { + if ( (unsigned __int8)v4 > 0xEFu ) + { + if ( (unsigned __int8)v4 <= 0xF4u ) + { + v5 = -2; + if ( v3 > 3 ) + { + v8 = v2[1]; + v5 = -1; + if ( (v8 & 0xC0) == 0x80 && ((_BYTE)v4 != 0xF0 || v8 > 0x8Fu) ) + { + if ( (_BYTE)v4 != 0xF4 || (v5 = -1, v8 <= 0x8Fu) ) + { + v5 = -1; + v10 = v2[2]; + if ( (v10 & 0xC0) == 0x80 && (v2[3] & 0xC0) == 0x80 ) + { + v5 = (v10 << 6) + (v8 << 12) + (v4 << 18) + v2[3] - 63447168; + if ( v5 <= a2 ) + *a1 = v2 + 4; + } + } + } + } + } + } + else + { + v5 = -2; + if ( v3 > 2 ) + { + v7 = v2[1]; + v5 = -1; + if ( (v7 & 0xC0) == 0x80 && ((_BYTE)v4 != 0xE0 || v7 > 0x9Fu) ) + { + v5 = -1; + if ( (v2[2] & 0xC0) == 0x80 ) + { + v5 = (v7 << 6) + (v4 << 12) + v2[2] - 925824; + if ( a2 >= v5 ) + *a1 = v2 + 3; + } + } + } + } + return v5; + } + if ( v3 != 1 ) + { + if ( (v2[1] & 0xC0) == 0x80 ) + { + v5 = (v4 << 6) + v2[1] - 12416; + if ( a2 >= v5 ) + *a1 = v2 + 2; + } + return v5; + } + return -2; +} + +//----- (004D6FF0) -------------------------------------------------------- +int __usercall std::`anonymous namespace'::read_utf8_code_point@( + unsigned __int8 **a1@, + unsigned int a2@) +{ + unsigned __int8 *v2; // edx + unsigned int v3; // edi + int v4; // ecx + unsigned int v5; // esi + unsigned __int8 v7; // di + unsigned __int8 v8; // di + unsigned __int8 v10; // [esp+7h] [ebp-11h] + + v2 = *a1; + v3 = a1[1] - *a1; + if ( !v3 ) + return -2; + v4 = *v2; + if ( (v4 & 0x80u) == 0 ) + { + v5 = (unsigned __int8)v4; + *a1 = v2 + 1; + return v5; + } + v5 = -1; + if ( (unsigned __int8)v4 <= 0xC1u ) + return v5; + if ( (unsigned __int8)v4 > 0xDFu ) + { + if ( (unsigned __int8)v4 > 0xEFu ) + { + if ( (unsigned __int8)v4 <= 0xF4u ) + { + v5 = -2; + if ( v3 > 3 ) + { + v8 = v2[1]; + v5 = -1; + if ( (v8 & 0xC0) == 0x80 && ((_BYTE)v4 != 0xF0 || v8 > 0x8Fu) ) + { + if ( (_BYTE)v4 != 0xF4 || (v5 = -1, v8 <= 0x8Fu) ) + { + v5 = -1; + v10 = v2[2]; + if ( (v10 & 0xC0) == 0x80 && (v2[3] & 0xC0) == 0x80 ) + { + v5 = (v10 << 6) + (v8 << 12) + (v4 << 18) + v2[3] - 63447168; + if ( v5 <= a2 ) + *a1 = v2 + 4; + } + } + } + } + } + } + else + { + v5 = -2; + if ( v3 > 2 ) + { + v7 = v2[1]; + v5 = -1; + if ( (v7 & 0xC0) == 0x80 && ((_BYTE)v4 != 0xE0 || v7 > 0x9Fu) ) + { + v5 = -1; + if ( (v2[2] & 0xC0) == 0x80 ) + { + v5 = (v7 << 6) + (v4 << 12) + v2[2] - 925824; + if ( a2 >= v5 ) + *a1 = v2 + 3; + } + } + } + } + return v5; + } + if ( v3 != 1 ) + { + if ( (v2[1] & 0xC0) == 0x80 ) + { + v5 = (v4 << 6) + v2[1] - 12416; + if ( a2 >= v5 ) + *a1 = v2 + 2; + } + return v5; + } + return -2; +} + +//----- (004D71B0) -------------------------------------------------------- +int __usercall std::`anonymous namespace'::write_utf8_code_point@(int a1@, unsigned int a2@) +{ + _BYTE *v3; // esi + int v4; // ecx + int result; // eax + _BYTE *v6; // ecx + int v7; // esi + _BYTE *v8; // ecx + + if ( a2 > 0x7FF ) + { + if ( a2 > 0xFFFF ) + { + result = 0; + if ( a2 <= 0x10FFFF ) + { + v8 = *(_BYTE **)a1; + if ( (unsigned int)(*(_DWORD *)(a1 + 4) - *(_DWORD *)a1) > 3 ) + { + *v8 = (a2 >> 18) - 16; + v8[1] = ((a2 >> 12) & 0x3F) + 0x80; + v8[2] = ((a2 >> 6) & 0x3F) + 0x80; + *(_DWORD *)a1 = v8 + 4; + result = 1; + v8[3] = (a2 & 0x3F) + 0x80; + } + } + } + else + { + v6 = *(_BYTE **)a1; + v7 = *(_DWORD *)(a1 + 4); + result = 0; + if ( (unsigned int)(v7 - (_DWORD)v6) > 2 ) + { + *v6 = (a2 >> 12) - 32; + v6[1] = ((a2 >> 6) & 0x3F) + 0x80; + *(_DWORD *)a1 = v6 + 3; + result = 1; + v6[2] = (a2 & 0x3F) + 0x80; + } + } + } + else + { + v3 = *(_BYTE **)a1; + v4 = *(_DWORD *)(a1 + 4); + result = 0; + if ( (unsigned int)(v4 - (_DWORD)v3) > 1 ) + { + *v3 = (a2 >> 6) - 64; + *(_DWORD *)a1 = v3 + 2; + result = 1; + v3[1] = (a2 & 0x3F) + 0x80; + } + } + return result; +} + +//----- (004D7290) -------------------------------------------------------- +int __usercall std::`anonymous namespace'::write_utf8_code_point@(_BYTE **a1@, unsigned int a2@) +{ + _BYTE *v3; // eax + int result; // eax + _BYTE *v5; // esi + _BYTE *v6; // ebx + _BYTE *v7; // eax + _BYTE *v8; // esi + _BYTE *v9; // ebx + _BYTE *v10; // ebx + _BYTE *v11; // esi + _BYTE *v12; // ebx + + if ( a2 <= 0x7F ) + { + v3 = *a1; + if ( a1[1] == v3 ) + return 0; + *a1 = v3 + 1; + *v3 = a2; + return 1; + } + if ( a2 <= 0x7FF ) + { + v5 = *a1; + v6 = a1[1]; + result = 0; + if ( (unsigned int)(v6 - v5) <= 1 ) + return result; + *a1 = v5 + 1; + *v5 = (a2 >> 6) - 64; +LABEL_8: + v7 = (*a1)++; + *v7 = (a2 & 0x3F) + 0x80; + return 1; + } + if ( a2 <= 0xFFFF ) + { + v11 = *a1; + v12 = a1[1]; + result = 0; + if ( (unsigned int)(v12 - v11) <= 2 ) + return result; + *a1 = v11 + 1; + *v11 = (a2 >> 12) - 32; + goto LABEL_13; + } + result = 0; + if ( a2 <= 0x10FFFF ) + { + v8 = *a1; + if ( (unsigned int)(a1[1] - *a1) > 3 ) + { + *a1 = v8 + 1; + *v8 = (a2 >> 18) - 16; + v9 = (*a1)++; + *v9 = ((a2 >> 12) & 0x3F) + 0x80; +LABEL_13: + v10 = (*a1)++; + *v10 = ((a2 >> 6) & 0x3F) + 0x80; + goto LABEL_8; + } + } + return result; +} + +//----- (004D7380) -------------------------------------------------------- +int __usercall std::`anonymous namespace'::ucs2_in@( + unsigned __int16 **a1@, + int *a2@, + unsigned int a3@, + char a4) +{ + int v7; // eax + unsigned __int16 *v8; // edx + int v9; // ecx + unsigned __int16 v10; // ax + unsigned __int16 v11; // di + int v13; // [esp+0h] [ebp-20h] + int v14; // [esp+4h] [ebp-1Ch] + unsigned __int16 *v15; // [esp+8h] [ebp-18h] + unsigned int v16; // [esp+Ch] [ebp-14h] + + std::`anonymous namespace'::read_utf16_bom((int)a1, (int *)&a4); + v7 = 0xFFFF; + v8 = *a1; + if ( a3 < 0xFFFF ) + v7 = a3; + v16 = v7; + v15 = a1[1]; + if ( !((unsigned int)((char *)v15 - (char *)v8) >> 1) ) + return 0; + v9 = *a2; + v13 = a2[1]; + v14 = a4 & 1; + while ( v13 != v9 ) + { + v10 = *v8; + v11 = __ROL2__(*v8, 8); + if ( !v14 ) + v10 = v11; + if ( (unsigned __int16)(v10 + 10240) <= 0x7FFu || v16 < v10 ) + return 2; + ++v8; + v9 += 2; + *a1 = v8; + *a2 = v9; + *(_WORD *)(v9 - 2) = v10; + if ( !((unsigned int)((char *)v15 - (char *)v8) >> 1) ) + return 0; + } + return 1; +} + +//----- (004D7450) -------------------------------------------------------- +int __usercall std::`anonymous namespace'::ucs2_out@( + unsigned __int16 **a1@, + _DWORD *a2@, + unsigned int a3@, + char a4) +{ + unsigned __int16 *v5; // ebp + unsigned __int16 *v6; // eax + _WORD *v8; // edx + unsigned int v9; // eax + __int16 v10; // cx + __int16 v11; // ax + unsigned __int16 *v12; // eax + + v5 = a1[1]; + v6 = *a1; + if ( v5 == v6 ) + return 0; + v8 = (_WORD *)*a2; + while ( 1 ) + { + if ( !((unsigned int)(a2[1] - (_DWORD)v8) >> 1) ) + return v6 != v5; + v9 = *v6; + v10 = v9; + if ( v9 - 55296 <= 0x3FF || v9 > a3 ) + break; + v11 = __ROL2__(v9, 8); + if ( (a4 & 1) == 0 ) + v10 = v11; + *v8 = v10; + v5 = a1[1]; + v8 = (_WORD *)(*a2 + 2); + v12 = *a1; + *a2 = v8; + v6 = v12 + 1; + *a1 = v6; + if ( v5 == v6 ) + return 0; + } + return 2; +} + +//----- (004D74F0) -------------------------------------------------------- +int __usercall std::`anonymous namespace'::utf16_in@( + unsigned __int8 **a1@, + char **a2@, + unsigned int a3@, + char a4, + int a5) +{ + unsigned __int8 *v8; // edi + char *v9; // edi + __int16 v10; // cx + unsigned int utf8_code; // eax + unsigned __int8 *v12; // ecx + char *v13; // edx + unsigned int v15; // ecx + __int16 v16; // ax + __int16 v17; // cx + unsigned __int8 *v18; // ecx + unsigned __int8 *v19; // [esp+0h] [ebp-1Ch] + unsigned __int8 *v20; // [esp+4h] [ebp-18h] + + v20 = a1[1]; + v8 = *a1; + v19 = *a1; + if ( (a4 & 4) != 0 + && (unsigned int)(v20 - v8) > 2 + && *(_WORD *)v8 == std::`anonymous namespace'::utf8_bom + && v8[2] == 0xBF ) + { + v19 += 3; + *a1 = v19; + } + if ( v19 != v20 ) + { + v9 = a2[1]; + while ( *a2 != v9 ) + { + utf8_code = std::`anonymous namespace'::read_utf8_code_point(a1, a3); + if ( utf8_code == -2 ) + return a5 + 1; + if ( a3 < utf8_code ) + return 2; + v9 = a2[1]; + v13 = *a2; + if ( utf8_code <= 0xFFFF ) + { + if ( v13 == v9 ) + goto LABEL_13; + v10 = __ROL2__(utf8_code, 8); + if ( (a4 & 1) == 0 ) + LOWORD(utf8_code) = v10; + *a2 = v13 + 2; + v12 = *a1; + *(_WORD *)v13 = utf8_code; + v19 = v12; + v20 = a1[1]; + if ( v20 == v12 ) + return 0; + } + else + { + if ( (unsigned int)(v9 - v13) <= 2 ) + { +LABEL_13: + *a1 = v19; + a1[1] = v20; + return 1; + } + v15 = utf8_code >> 10; + v16 = (utf8_code & 0x3FF) - 9216; + v17 = v15 - 10304; + if ( (a4 & 1) == 0 ) + { + v17 = __ROL2__(v17, 8); + v16 = __ROL2__(v16, 8); + } + *(_WORD *)v13 = v17; + *a2 = v13 + 4; + v18 = *a1; + *((_WORD *)v13 + 1) = v16; + v19 = v18; + v20 = a1[1]; + if ( v20 == v18 ) + return 0; + } + } + } + return 0; +} +// 55AF54: using guessed type __int16 std::`anonymous namespace'::utf8_bom; + +//----- (004D7660) -------------------------------------------------------- +int __usercall std::`anonymous namespace'::utf16_out@( + unsigned __int16 **a1@, + _BYTE **a2@, + unsigned int a3@, + int a4) +{ + unsigned __int16 *v5; // edx + unsigned __int16 *v7; // eax + unsigned int v8; // ebp + int v10; // eax + int v11; // ebp + unsigned int v12; // edx + unsigned __int16 *v13; // edx + + v5 = a1[1]; + v7 = *a1; + v8 = (char *)v5 - (char *)v7; + if ( v7 == v5 ) + return 0; + while ( 1 ) + { + v12 = *v7; + if ( v12 - 55296 <= 0x3FF ) + { + if ( a4 == 1 ) + return 2; + if ( v8 <= 2 ) + return 0; + v10 = v7[1]; + if ( (unsigned int)(v10 - 56320) > 0x3FF ) + return 2; + v11 = 2; + v12 = v10 + (v12 << 10) - 56613888; + if ( v12 > a3 ) + return 2; + } + else + { + if ( v12 - 56320 <= 0x3FF ) + return 2; + v11 = 1; + if ( v12 > a3 ) + return 2; + } + if ( !(unsigned __int8)std::`anonymous namespace'::write_utf8_code_point(a2, v12) ) + break; + v13 = a1[1]; + v7 = &(*a1)[v11]; + *a1 = v7; + v8 = (char *)v13 - (char *)v7; + if ( v13 == v7 ) + return 0; + } + return 1; +} + +//----- (004D7720) -------------------------------------------------------- +void __fastcall std::_Vector_base::~_Vector_base(void **a1) +{ + if ( *a1 ) + operator delete(*a1); +} +// 4D7720: could not find valid save-restore pair for ebp + +//----- (004D7740) -------------------------------------------------------- +int __fastcall std::__basic_file::fd(FILE **a1) +{ + return fileno(*a1); +} + +//----- (004D77D0) -------------------------------------------------------- +int __fastcall std::__basic_file::file(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (004D77E0) -------------------------------------------------------- +_BYTE *__thiscall std::__basic_file::open(_BYTE *this, char *FileName, char a3, int a4) +{ + unsigned int v4; // eax + const char *Mode; // eax + FILE *v7; // eax + + v4 = (a3 & 0x3D) - 1; + if ( v4 > 0x3B ) + return 0; + Mode = (&CSWTCH_18)[v4]; + if ( !Mode ) + return 0; + if ( *(_DWORD *)this ) + return 0; + v7 = fopen64(FileName, Mode); + *(_DWORD *)this = v7; + if ( !v7 ) + return 0; + this[4] = 1; + return this; +} + +//----- (004D7840) -------------------------------------------------------- +FILE *__thiscall std::__basic_file::open(_BYTE *this, wchar_t *FileName, char a3) +{ + FILE *v4; // ecx + unsigned int v5; // eax + char *v6; // edx + char *v7; // edx + wchar_t *v8; // esi + char v9; // al + FILE *v10; // eax + wchar_t Mode[2]; // [esp+18h] [ebp-14h] BYREF + int v13; // [esp+1Ch] [ebp-10h] + + v4 = 0; + v5 = (a3 & 0x3D) - 1; + if ( v5 > 0x3B ) + return v4; + v6 = (&CSWTCH_18)[v5]; + if ( !v6 ) + return v4; + v4 = *(FILE **)this; + if ( !*(_DWORD *)this ) + { + *(_DWORD *)Mode = 0; + v7 = v6 + 1; + v8 = Mode; + v13 = 0; + v9 = *(v7 - 1); + do + { + while ( 1 ) + { + while ( 1 ) + { + while ( v9 == 98 ) + { + ++v7; + *v8++ = 98; + v9 = *(v7 - 1); + if ( !v9 ) + goto LABEL_10; + } + if ( v9 > 98 ) + break; + if ( v9 == 43 ) + { + ++v7; + *v8++ = 43; + v9 = *(v7 - 1); + if ( !v9 ) + goto LABEL_10; + } + else + { + if ( v9 != 97 ) + return v4; + ++v7; + *v8++ = 97; + v9 = *(v7 - 1); + if ( !v9 ) + goto LABEL_10; + } + } + if ( v9 != 114 ) + break; + ++v7; + *v8++ = 114; + v9 = *(v7 - 1); + if ( !v9 ) + goto LABEL_10; + } + if ( v9 != 119 ) + return v4; + ++v7; + *v8++ = 119; + v9 = *(v7 - 1); + } + while ( v9 ); +LABEL_10: + v10 = __wfopen(FileName, Mode); + *(_DWORD *)this = v10; + v4 = v10; + if ( v10 ) + { + this[4] = 1; + return (FILE *)this; + } + return v4; + } + return 0; +} + +//----- (004D7990) -------------------------------------------------------- +int __fastcall std::__basic_file::sync(FILE **a1) +{ + return fflush(*a1); +} + +//----- (004D79B0) -------------------------------------------------------- +int __fastcall std::__basic_file::close(int a1) +{ + int v3; // eax + + if ( !*(_DWORD *)a1 ) + return 0; + if ( *(_BYTE *)(a1 + 4) ) + { + v3 = fclose(*(FILE **)a1); + *(_DWORD *)a1 = 0; + if ( v3 ) + return 0; + else + return a1; + } + else + { + *(_DWORD *)a1 = 0; + return a1; + } +} + +//----- (004D7A10) -------------------------------------------------------- +int __thiscall std::__basic_file::xsgetn(FILE **this, void *DstBuf, unsigned int MaxCharCount) +{ + int FileHandle; // eax + int v5; // ebp + + do + { + FileHandle = std::__basic_file::fd(this); + v5 = read(FileHandle, DstBuf, MaxCharCount); + } + while ( v5 == -1 && *__errno() == 4 ); + return v5; +} + +//----- (004D7A60) -------------------------------------------------------- +unsigned int __thiscall std::__basic_file::xsputn(FILE **this, char *a2, unsigned int a3) +{ + int FileHandle; // esi + unsigned int MaxCharCount; // ebp + int v6; // eax + + FileHandle = std::__basic_file::fd(this); + MaxCharCount = a3; + while ( 1 ) + { + while ( 1 ) + { + v6 = write(FileHandle, a2, MaxCharCount); + if ( v6 != -1 ) + break; + if ( *__errno() != 4 ) + return a3 - MaxCharCount; + } + MaxCharCount -= v6; + if ( !MaxCharCount ) + break; + a2 += v6; + } + return a3; +} + +//----- (004D7AD0) -------------------------------------------------------- +__int64 __thiscall std::__basic_file::seekoff(FILE **this, __int64 a2, int a3) +{ + int v3; // eax + + v3 = fileno(*this); + return lseek64(v3, a2, a3); +} + +//----- (004D7B75) -------------------------------------------------------- +#error "4D7BA1: call analysis failed (funcsize=14)" + +//----- (004D7BB0) -------------------------------------------------------- +_BYTE *__thiscall std::__basic_file::sys_open(_BYTE *this, FILE *Stream, int a3) +{ + int v4; // ebp + _BYTE *result; // eax + + if ( !*(_DWORD *)this && Stream ) + { + v4 = *__errno(); + *__errno() = 0; + do + { + if ( !fflush(Stream) ) + { + *__errno() = v4; + result = this; + *(_DWORD *)this = Stream; + this[4] = 0; + return result; + } + } + while ( *__errno() == 4 ); + *__errno() = v4; + } + return 0; +} + +//----- (004D7C20) -------------------------------------------------------- +FILE **__thiscall std::__basic_file::sys_open(FILE **this, int FileHandle, char a3) +{ + unsigned int v3; // eax + const char *Format; // eax + FILE *v6; // eax + FILE **v7; // [esp+18h] [ebp-44h] + + v7 = this; + v3 = (a3 & 0x3D) - 1; + if ( v3 > 0x3B ) + return 0; + Format = (&CSWTCH_18)[v3]; + if ( !Format ) + return 0; + if ( *this ) + return 0; + v6 = fdopen(FileHandle, Format); + *v7 = v6; + if ( !v6 ) + return 0; + *((_BYTE *)v7 + 4) = 1; + if ( !FileHandle ) + setvbuf(v6, 0, 4, 0); + return v7; +} + +//----- (004D7D10) -------------------------------------------------------- +int __thiscall std::__basic_file::xsputn_2(FILE **this, char *a2, unsigned int a3, char *a4, unsigned int a5) +{ + int FileHandle; // esi + unsigned int MaxCharCount; // ebp + int v9; // eax + unsigned int v11; // ebp + int v12; // eax + + FileHandle = std::__basic_file::fd(this); + if ( a3 ) + { + v11 = a3; + while ( 1 ) + { + while ( 1 ) + { + v12 = write(FileHandle, a2, v11); + if ( v12 != -1 ) + break; + if ( *__errno() != 4 ) + return a3 - v11; + } + v11 -= v12; + if ( !v11 ) + break; + a2 += v12; + } + FileHandle = std::__basic_file::fd(this); + } + MaxCharCount = a5; + do + { + while ( 1 ) + { + v9 = write(FileHandle, a4, MaxCharCount); + if ( v9 == -1 ) + break; + MaxCharCount -= v9; + if ( !MaxCharCount ) + return a3 + a5; + a4 += v9; + } + } + while ( *__errno() == 4 ); + a5 -= MaxCharCount; + return a3 + a5; +} + +//----- (004D7DE0) -------------------------------------------------------- +int __fastcall std::__basic_file::showmanyc(FILE **a1) +{ + int FileHandle; // eax + unsigned int st_size_high; // edi + unsigned int st_size; // esi + int v6; // eax + int v7; // esi + signed __int64 v8; // kr08_8 + struct _stat64 Stat; // [esp+18h] [ebp-54h] BYREF + + FileHandle = std::__basic_file::fd(a1); + if ( __fstat64(FileHandle, &Stat) || (Stat.st_mode & 0xF000) != 0x8000 ) + return 0; + st_size_high = HIDWORD(Stat.st_size); + st_size = Stat.st_size; + v6 = std::__basic_file::fd(a1); + v8 = __PAIR64__(st_size_high, st_size) - lseek64(v6, 0LL, 1); + v7 = v8; + if ( v8 > 0x7FFFFFFF ) + return 0x7FFFFFFF; + return v7; +} + +//----- (004D7E70) -------------------------------------------------------- +void __thiscall std::__basic_file::__basic_file(_BYTE *this, int a2) +{ + *(_DWORD *)this = 0; + this[4] = 0; +} + +//----- (004D7E80) -------------------------------------------------------- +FILE *__fastcall std::__basic_file::~__basic_file(int a1) +{ + FILE *result; // eax + + result = *(FILE **)a1; + if ( *(_DWORD *)a1 ) + { + if ( *(_BYTE *)(a1 + 4) ) + return (FILE *)fclose(*(FILE **)a1); + } + return result; +} + +//----- (004D7EA0) -------------------------------------------------------- +void __thiscall std::__cow_string::__cow_string(_DWORD *this, _DWORD *a2) +{ + *this = *a2; + *a2 = std::string::_S_construct(0, 0); +} + +//----- (004D7F10) -------------------------------------------------------- +int __userpurge std::__cow_string::__cow_string@( + _DWORD *a1@, + std::__cow_string *this, + size_t a3, + unsigned int a4) +{ + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + return std::string::string(a1, (unsigned __int8 *)this, a3, (int)v5); +} +// 4D7F10: using guessed type int var_D[3]; + +//----- (004D7F40) -------------------------------------------------------- +int __thiscall std::__cow_string::__cow_string(_DWORD *this, int a2) +{ + unsigned int v3; // [esp+8h] [ebp-14h] + + return std::__cow_string::__cow_string(this, *(std::__cow_string **)a2, *(_DWORD *)(a2 + 4), v3); +} +// 4D7F53: variable 'v3' is possibly undefined + +//----- (004D7F70) -------------------------------------------------------- +void __userpurge std::__cow_string::__cow_string( + _DWORD *a1@, + std::__cow_string *this, + const std::__cow_string *a3) +{ + const std::string *v3; // [esp+4h] [ebp-58h] + + std::string::string(a1, this, v3); +} +// 4D7FA4: variable 'v3' is possibly undefined + +//----- (004D7FD0) -------------------------------------------------------- +_DWORD *__fastcall std::__cow_string::__cow_string(_DWORD *a1) +{ + _DWORD *result; // eax + + result = std::string::_S_construct(0, 0); + *a1 = result; + return result; +} + +//----- (004D8000) -------------------------------------------------------- +void __fastcall std::__cow_string::~__cow_string(int *a1) +{ + int v1; // ecx + int v2; // eax + int v3[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v1 = *a1; + if ( !_CRT_MT ) + { + v2 = *(_DWORD *)(v1 - 4); + *(_DWORD *)(v1 - 4) = v2 - 1; + if ( v2 > 0 ) + return; +LABEL_5: + std::string::_Rep::_M_destroy((void *)(v1 - 12), (int)v3); + return; + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v1 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_5; +} +// 53E1E4: using guessed type int _CRT_MT; +// 4D8000: using guessed type int var_D[3]; + +//----- (004D8050) -------------------------------------------------------- +int *__thiscall std::__cow_string::operator=(int *this, std::string *a2) +{ + std::string *v4; // [esp+4h] [ebp-18h] + + std::string::swap(this, a2, v4); + return this; +} +// 4D805D: variable 'v4' is possibly undefined + +//----- (004D8070) -------------------------------------------------------- +int *__thiscall std::__cow_string::operator=(int *this, std::string *a2) +{ + const std::string *v4; // [esp+4h] [ebp-58h] + + std::string::assign(this, a2, v4); + return this; +} +// 4D80A4: variable 'v4' is possibly undefined + +//----- (004D80C0) -------------------------------------------------------- +void __thiscall std::__shared_ptr::__shared_ptr( + _DWORD *this, + _DWORD *a2) +{ + int v2; // eax + + v2 = a2[1]; + *this = *a2; + this[1] = v2; + if ( v2 ) + std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy(v2); +} + +//----- (004D80E4) -------------------------------------------------------- +void __thiscall std::__shared_ptr::__shared_ptr( + int *this, + int *a2) +{ + int *v2; // ecx + int v3; // eax + + v2 = this + 1; + v3 = a2[1]; + *(v2 - 1) = *a2; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count(v2, v3); +} + +//----- (004D8100) -------------------------------------------------------- +int __thiscall std::__shared_ptr::__shared_ptr( + _DWORD *this, + _DWORD *a2) +{ + int result; // eax + + result = a2[1]; + *this = *a2; + this[1] = result; + if ( result ) + { + if ( _CRT_MT ) + _InterlockedIncrement((volatile signed __int32 *)(result + 4)); + else + ++*(_DWORD *)(result + 4); + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004D8130) -------------------------------------------------------- +_DWORD *__thiscall std::__sso_string::__sso_string(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + int v3; // ebx + + result = a2; + *this = this + 2; + if ( (_DWORD *)*result == result + 2 ) + { + this[2] = a2[2]; + this[3] = a2[3]; + this[4] = a2[4]; + this[5] = a2[5]; + } + else + { + *this = *a2; + this[2] = a2[2]; + } + v3 = a2[1]; + *a2 = a2 + 2; + a2[1] = 0; + this[1] = v3; + *((_BYTE *)a2 + 8) = 0; + return result; +} + +//----- (004D8190) -------------------------------------------------------- +_BYTE *__userpurge std::__sso_string::__sso_string@( + int a1@, + std::__sso_string *this, + size_t Size, + unsigned int a4) +{ + _BYTE *result; // eax + char v6; // dl + unsigned int v7; // esi + size_t v8[4]; // [esp+1Ch] [ebp-10h] BYREF + + result = (_BYTE *)(a1 + 8); + *(_DWORD *)a1 = a1 + 8; + if ( (std::__sso_string *)((char *)this + Size) ) + { + if ( !this ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + } + v8[0] = Size; + if ( Size > 0xF ) + { + result = std::string::_M_create(v8, 0); + *(_DWORD *)a1 = result; + *(_DWORD *)(a1 + 8) = v8[0]; + } + else + { + if ( Size == 1 ) + { + v6 = *(_BYTE *)this; + *(_DWORD *)(a1 + 4) = 1; + *(_BYTE *)(a1 + 8) = v6; + *(_BYTE *)(a1 + 9) = 0; + return result; + } + if ( !Size ) + { + *(_DWORD *)(a1 + 4) = 0; + *result = 0; + return result; + } + } + memcpy(result, this, Size); + v7 = v8[0]; + result = *(_BYTE **)a1; + *(_DWORD *)(a1 + 4) = v8[0]; + result[v7] = 0; + return result; +} +// 4D8190: using guessed type size_t var_10[4]; + +//----- (004D8250) -------------------------------------------------------- +_BYTE *__thiscall std::__sso_string::__sso_string(char *this, int a2) +{ + _BYTE *result; // eax + char *Src; // edi + size_t Size; // esi + char v6; // dl + unsigned int v7; // esi + unsigned int v8[4]; // [esp+1Ch] [ebp-10h] BYREF + + result = this + 8; + *(_DWORD *)this = this + 8; + Src = *(char **)a2; + Size = *(_DWORD *)(a2 + 4); + if ( Size + *(_DWORD *)a2 ) + { + if ( !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + } + v8[0] = *(_DWORD *)(a2 + 4); + if ( Size > 0xF ) + { + result = std::string::_M_create(v8, 0); + *(_DWORD *)this = result; + *((_DWORD *)this + 2) = v8[0]; + } + else + { + if ( Size == 1 ) + { + v6 = *Src; + *((_DWORD *)this + 1) = 1; + this[8] = v6; + this[9] = 0; + return result; + } + if ( !Size ) + { + *((_DWORD *)this + 1) = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + v7 = v8[0]; + result = *(_BYTE **)this; + *((_DWORD *)this + 1) = v8[0]; + result[v7] = 0; + return result; +} +// 4D8250: using guessed type unsigned int var_10[4]; + +//----- (004D8310) -------------------------------------------------------- +void __userpurge std::__sso_string::__sso_string( + _DWORD *a1@, + std::__sso_string *this, + const std::__sso_string *a3) +{ + void *v4; // edx + _BYTE *v5; // edi + size_t v6; // esi + void *v7; // eax + size_t v8[7]; // [esp+5Ch] [ebp+40h] BYREF + + v4 = a1 + 2; + *a1 = a1 + 2; + v5 = *(_BYTE **)this; + v6 = *((_DWORD *)this + 1); + if ( v6 + *(_DWORD *)this && !v5 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v8[0] = *((_DWORD *)this + 1); + if ( v6 > 0xF ) + { + v7 = std::string::_M_create(v8, 0); + *a1 = v7; + v4 = v7; + a1[2] = v8[0]; + goto LABEL_10; + } + if ( v6 != 1 ) + { + if ( !v6 ) + goto LABEL_6; +LABEL_10: + memcpy(v4, v5, v6); + v6 = v8[0]; + v4 = (void *)*a1; + goto LABEL_6; + } + *((_BYTE *)a1 + 8) = *v5; +LABEL_6: + a1[1] = v6; + *((_BYTE *)v4 + v6) = 0; +} +// 4D8310: using guessed type size_t anonymous_0[7]; + +//----- (004D83F0) -------------------------------------------------------- +_BYTE *__userpurge std::__sso_string::__sso_string@(int a1@, std::__sso_string **this, const std::string *a3) +{ + unsigned int v4; // [esp+8h] [ebp-14h] + + return std::__sso_string::__sso_string(a1, *this, *((_DWORD *)*this - 3), v4); +} +// 4D8403: variable 'v4' is possibly undefined + +//----- (004D8420) -------------------------------------------------------- +int __fastcall std::__sso_string::__sso_string(int a1) +{ + int result; // eax + + result = a1 + 8; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)a1 = a1 + 8; + *(_BYTE *)(a1 + 8) = 0; + return result; +} + +//----- (004D8440) -------------------------------------------------------- +void __fastcall std::__sso_string::~__sso_string(void **a1) +{ + if ( *a1 != a1 + 2 ) + operator delete(*a1); +} + +//----- (004D8470) -------------------------------------------------------- +_DWORD *__thiscall std::__sso_string::operator=(_DWORD *this, int a2) +{ + _BYTE *v3; // eax + _BYTE *Src; // ecx + int v5; // edx + int v6; // ebp + + v3 = (_BYTE *)*this; + Src = *(_BYTE **)a2; + v5 = *(_DWORD *)(a2 + 4); + if ( *(_DWORD *)a2 != a2 + 8 ) + { + if ( v3 == (_BYTE *)(this + 2) ) + { + *this = Src; + this[1] = v5; + this[2] = *(_DWORD *)(a2 + 8); + } + else + { + *this = Src; + v6 = this[2]; + this[1] = v5; + this[2] = *(_DWORD *)(a2 + 8); + if ( v3 ) + { + *(_DWORD *)a2 = v3; + *(_DWORD *)(a2 + 8) = v6; + goto LABEL_5; + } + } + *(_DWORD *)a2 = a2 + 8; + v3 = (_BYTE *)(a2 + 8); + goto LABEL_5; + } + if ( v5 ) + { + if ( v5 == 1 ) + *v3 = *(_BYTE *)(a2 + 8); + else + memcpy(v3, Src, *(_DWORD *)(a2 + 4)); + v5 = *(_DWORD *)(a2 + 4); + v3 = (_BYTE *)*this; + } + this[1] = v5; + v3[v5] = 0; + v3 = *(_BYTE **)a2; +LABEL_5: + *(_DWORD *)(a2 + 4) = 0; + *v3 = 0; + return this; +} + +//----- (004D8520) -------------------------------------------------------- +void *__thiscall std::__sso_string::operator=(void *this, int a2) +{ + std::string::_M_assign((int)this, a2); + return this; +} + +//----- (004D8570) -------------------------------------------------------- +void __thiscall std::ctype_byname::ctype_byname(_DWORD *this, int **a2, int a3) +{ + std::ctype::ctype(this, 0, 0, a3); + *this = &off_55FFB8; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 55FFB8: using guessed type int (*off_55FFB8)(); + +//----- (004D8680) -------------------------------------------------------- +void __thiscall std::ctype_byname::ctype_byname(_DWORD *this, int ***a2, int a3) +{ + std::ctype_byname::ctype_byname(this, *a2, a3); +} + +//----- (004D8690) -------------------------------------------------------- +void __thiscall std::ctype_byname::ctype_byname(_DWORD *this, int ***a2, int a3) +{ + std::ctype_byname::ctype_byname(this, *a2, a3); +} + +//----- (004D86A0) -------------------------------------------------------- +void __fastcall std::ctype_byname::~ctype_byname(_DWORD *Block) +{ + *Block = &off_55FFB8; + std::ctype::~ctype((int)Block); + operator delete(Block); +} +// 55FFB8: using guessed type int (*off_55FFB8)(); + +//----- (004D86C0) -------------------------------------------------------- +void __fastcall std::ctype_byname::~ctype_byname(int a1) +{ + *(_DWORD *)a1 = &off_55FFB8; + std::ctype::~ctype(a1); +} +// 55FFB8: using guessed type int (*off_55FFB8)(); + +//----- (004D86D0) -------------------------------------------------------- +void __thiscall std::ctype_byname::ctype_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_560A98; + this[2] = std::locale::facet::_S_get_c_locale(); + *((_BYTE *)this + 12) = 0; + std::ctype::_M_initialize_ctype((int)this); + *this = &off_55FFE8; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + std::ctype::_M_initialize_ctype((int)this); + } + } +} +// 55FFE8: using guessed type int (*off_55FFE8)(); +// 560A98: using guessed type int (*off_560A98)(); + +//----- (004D8830) -------------------------------------------------------- +void __thiscall std::ctype_byname::ctype_byname(_DWORD *this, int ***a2, int a3) +{ + std::ctype_byname::ctype_byname(this, *a2, a3); +} + +//----- (004D8840) -------------------------------------------------------- +void __thiscall std::ctype_byname::ctype_byname(_DWORD *this, int ***a2, int a3) +{ + std::ctype_byname::ctype_byname(this, *a2, a3); +} + +//----- (004D8850) -------------------------------------------------------- +void __fastcall std::ctype_byname::~ctype_byname(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_560A98; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + *Block = &unk_56089C; + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 4D8894: variable 'lpfctx' is possibly undefined +// 560A98: using guessed type int (*off_560A98)(); + +//----- (004D88B0) -------------------------------------------------------- +void __fastcall std::ctype_byname::~ctype_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560A98; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + *a1 = &unk_56089C; + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4D88F4: variable 'lpfctx' is possibly undefined +// 560A98: using guessed type int (*off_560A98)(); + +//----- (004D8910) -------------------------------------------------------- +void __userpurge std::domain_error::domain_error(_DWORD *a1@, std::domain_error *this, const char *a3) +{ + int v4; // [esp+5Fh] [ebp-9h] BYREF + + *a1 = &off_55FF90; + std::string::string(a1 + 1, (char *)this, (int)&v4); + *a1 = &off_560028; +} +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 560028: using guessed type void (__cdecl *off_560028)(std::domain_error *__hidden this); + +//----- (004D89A0) -------------------------------------------------------- +void __thiscall std::domain_error::domain_error(_DWORD *this, int a2) +{ + unsigned int v2; // [esp+8h] [ebp-50h] + + *this = &off_55FF90; + std::__cow_string::__cow_string(this + 1, *(std::__cow_string **)a2, *(_DWORD *)(a2 + 4), v2); + *this = &off_560028; +} +// 4D89F4: variable 'v2' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 560028: using guessed type void (__cdecl *off_560028)(std::domain_error *__hidden this); + +//----- (004D8A40) -------------------------------------------------------- +void __userpurge std::domain_error::domain_error(_DWORD *a1@, std::domain_error *this, const std::string *a3) +{ + const std::string *v3; // [esp+4h] [ebp-54h] + + *a1 = &off_55FF90; + std::string::string(a1 + 1, this, v3); + *a1 = &off_560028; +} +// 4D8A88: variable 'v3' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 560028: using guessed type void (__cdecl *off_560028)(std::domain_error *__hidden this); + +//----- (004D8AD0) -------------------------------------------------------- +void __fastcall std::domain_error::~domain_error(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_560028; + std::logic_error::~logic_error(Block); + operator delete(a1); +} +// 4D8ADC: variable 'Block' is possibly undefined +// 560028: using guessed type void (__cdecl *off_560028)(std::domain_error *__hidden this); + +//----- (004D8AF0) -------------------------------------------------------- +void __cdecl std::domain_error::~domain_error(std::exception *a1) +{ + _DWORD *v1; // ecx + int v2; // eax + int v3; // ecx + int v4; // eax + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v2 = _CRT_MT; + *v1 = &off_55FF90; + v3 = v1[1]; + if ( v2 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v3 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v4 = *(_DWORD *)(v3 - 4); + *(_DWORD *)(v3 - 4) = v4 - 1; + if ( v4 > 0 ) + { +LABEL_3: + std::exception::~exception(a1); + return; + } + } + std::string::_Rep::_M_destroy((void *)(v3 - 12), (int)v5); + std::exception::~exception(a1); +} +// 4D8AFB: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 4D8AF0: using guessed type int var_D[3]; + +//----- (004D8B50) -------------------------------------------------------- +void __userpurge std::length_error::length_error(_DWORD *a1@, std::length_error *this, const char *a3) +{ + int v4; // [esp+5Fh] [ebp-9h] BYREF + + *a1 = &off_55FF90; + std::string::string(a1 + 1, (char *)this, (int)&v4); + *a1 = &off_56003C; +} +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 56003C: using guessed type void (__cdecl *off_56003C)(std::length_error *__hidden this); + +//----- (004D8BE0) -------------------------------------------------------- +void __thiscall std::length_error::length_error(_DWORD *this, int a2) +{ + unsigned int v2; // [esp+8h] [ebp-50h] + + *this = &off_55FF90; + std::__cow_string::__cow_string(this + 1, *(std::__cow_string **)a2, *(_DWORD *)(a2 + 4), v2); + *this = &off_56003C; +} +// 4D8C34: variable 'v2' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 56003C: using guessed type void (__cdecl *off_56003C)(std::length_error *__hidden this); + +//----- (004D8C80) -------------------------------------------------------- +void __userpurge std::length_error::length_error(_DWORD *a1@, std::length_error *this, const std::string *a3) +{ + const std::string *v3; // [esp+4h] [ebp-54h] + + *a1 = &off_55FF90; + std::string::string(a1 + 1, this, v3); + *a1 = &off_56003C; +} +// 4D8CC8: variable 'v3' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 56003C: using guessed type void (__cdecl *off_56003C)(std::length_error *__hidden this); + +//----- (004D8D10) -------------------------------------------------------- +void __fastcall std::length_error::~length_error(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_56003C; + std::logic_error::~logic_error(Block); + operator delete(a1); +} +// 4D8D1C: variable 'Block' is possibly undefined +// 56003C: using guessed type void (__cdecl *off_56003C)(std::length_error *__hidden this); + +//----- (004D8D30) -------------------------------------------------------- +void __cdecl std::length_error::~length_error(std::exception *a1) +{ + _DWORD *v1; // ecx + int v2; // eax + int v3; // ecx + int v4; // eax + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v2 = _CRT_MT; + *v1 = &off_55FF90; + v3 = v1[1]; + if ( v2 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v3 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v4 = *(_DWORD *)(v3 - 4); + *(_DWORD *)(v3 - 4) = v4 - 1; + if ( v4 > 0 ) + { +LABEL_3: + std::exception::~exception(a1); + return; + } + } + std::string::_Rep::_M_destroy((void *)(v3 - 12), (int)v5); + std::exception::~exception(a1); +} +// 4D8D3B: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 4D8D30: using guessed type int var_D[3]; + +//----- (004D8D90) -------------------------------------------------------- +void __userpurge std::out_of_range::out_of_range(_DWORD *a1@, std::out_of_range *this, const char *a3) +{ + int v4; // [esp+5Fh] [ebp-9h] BYREF + + *a1 = &off_55FF90; + std::string::string(a1 + 1, (char *)this, (int)&v4); + *a1 = &off_560050; +} +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 560050: using guessed type void (__cdecl *off_560050)(std::out_of_range *__hidden this); + +//----- (004D8E20) -------------------------------------------------------- +void __thiscall std::out_of_range::out_of_range(_DWORD *this, int a2) +{ + unsigned int v2; // [esp+8h] [ebp-50h] + + *this = &off_55FF90; + std::__cow_string::__cow_string(this + 1, *(std::__cow_string **)a2, *(_DWORD *)(a2 + 4), v2); + *this = &off_560050; +} +// 4D8E74: variable 'v2' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 560050: using guessed type void (__cdecl *off_560050)(std::out_of_range *__hidden this); + +//----- (004D8EC0) -------------------------------------------------------- +void __userpurge std::out_of_range::out_of_range(_DWORD *a1@, std::out_of_range *this, const std::string *a3) +{ + const std::string *v3; // [esp+4h] [ebp-54h] + + *a1 = &off_55FF90; + std::string::string(a1 + 1, this, v3); + *a1 = &off_560050; +} +// 4D8F08: variable 'v3' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 560050: using guessed type void (__cdecl *off_560050)(std::out_of_range *__hidden this); + +//----- (004D8F50) -------------------------------------------------------- +void __fastcall std::out_of_range::~out_of_range(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_560050; + std::logic_error::~logic_error(Block); + operator delete(a1); +} +// 4D8F5C: variable 'Block' is possibly undefined +// 560050: using guessed type void (__cdecl *off_560050)(std::out_of_range *__hidden this); + +//----- (004D8F70) -------------------------------------------------------- +void __cdecl std::out_of_range::~out_of_range(std::exception *a1) +{ + _DWORD *v1; // ecx + int v2; // eax + int v3; // ecx + int v4; // eax + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v2 = _CRT_MT; + *v1 = &off_55FF90; + v3 = v1[1]; + if ( v2 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v3 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v4 = *(_DWORD *)(v3 - 4); + *(_DWORD *)(v3 - 4) = v4 - 1; + if ( v4 > 0 ) + { +LABEL_3: + std::exception::~exception(a1); + return; + } + } + std::string::_Rep::_M_destroy((void *)(v3 - 12), (int)v5); + std::exception::~exception(a1); +} +// 4D8F7B: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 4D8F70: using guessed type int var_D[3]; + +//----- (004D8FD0) -------------------------------------------------------- +void __thiscall std::system_error::system_error(_DWORD *this, int a2, int a3, char *Str) +{ + int (__thiscall *v4)(int, int, int); // eax + unsigned int *v5; // eax + void *v6; // edx + size_t v7; // eax + unsigned int *v8; // eax + void *v9; // edx + void *Block[2]; // [esp+68h] [ebp-50h] BYREF + int v12[4]; // [esp+70h] [ebp-48h] BYREF + void *v13[2]; // [esp+80h] [ebp-38h] BYREF + int v14[4]; // [esp+88h] [ebp-30h] BYREF + void *v15[2]; // [esp+98h] [ebp-20h] BYREF + char v16[24]; // [esp+A0h] [ebp-18h] BYREF + + v4 = *(int (__thiscall **)(int, int, int))(*(_DWORD *)a3 + 16); + if ( v4 == `anonymous namespace'::io_error_category::message[abi:cxx11] ) + { + v15[1] = 0; + v15[0] = v16; + v16[0] = 0; + if ( a2 == 1 ) + std::string::_M_replace((unsigned int *)v15, 0, 0, "iostream error", 0xEu); + else + std::string::_M_replace((unsigned int *)v15, 0, 0, "Unknown error", 0xDu); + } + else + { + ((void (__cdecl *)(int, int))v4)(a3, a2); + } + v5 = std::string::_M_replace((unsigned int *)v15, 0, 0, ": ", 2u); + v13[0] = v14; + if ( (unsigned int *)*v5 == v5 + 2 ) + { + v14[0] = v5[2]; + v14[1] = v5[3]; + v14[2] = v5[4]; + v14[3] = v5[5]; + } + else + { + v13[0] = (void *)*v5; + v14[0] = v5[2]; + } + v6 = (void *)v5[1]; + *((_BYTE *)v5 + 8) = 0; + v13[1] = v6; + *v5 = (unsigned int)(v5 + 2); + v5[1] = 0; + v7 = strlen(Str); + v8 = std::string::_M_replace((unsigned int *)v13, 0, 0, Str, v7); + Block[0] = v12; + if ( (unsigned int *)*v8 == v8 + 2 ) + { + v12[0] = v8[2]; + v12[1] = v8[3]; + v12[2] = v8[4]; + v12[3] = v8[5]; + } + else + { + Block[0] = (void *)*v8; + v12[0] = v8[2]; + } + v9 = (void *)v8[1]; + *((_BYTE *)v8 + 8) = 0; + Block[1] = v9; + *v8 = (unsigned int)(v8 + 2); + v8[1] = 0; + std::runtime_error::runtime_error(this, (int)Block); + if ( Block[0] != v12 ) + operator delete(Block[0]); + if ( v13[0] != v14 ) + operator delete(v13[0]); + if ( v15[0] != v16 ) + operator delete(v15[0]); + *this = &off_560064; + this[2] = a2; + this[3] = a3; +} +// 560064: using guessed type void (__cdecl *off_560064)(std::system_error *__hidden this); + +//----- (004D9310) -------------------------------------------------------- +void __thiscall std::system_error::system_error(_DWORD *this, int a2, int a3, int a4) +{ + int (__thiscall *v4)(int, int, int); // eax + int *v5; // eax + unsigned int v6; // ebx + unsigned int v7; // eax + unsigned int v8; // edx + unsigned int *v9; // eax + _BYTE *Src; // [esp+14h] [ebp-B4h] + _BYTE *Size; // [esp+28h] [ebp-A0h] + void *Block[2]; // [esp+68h] [ebp-60h] BYREF + int v14[4]; // [esp+70h] [ebp-58h] BYREF + void *v15; // [esp+80h] [ebp-48h] BYREF + size_t v16; // [esp+84h] [ebp-44h] + int v17[4]; // [esp+88h] [ebp-40h] BYREF + void *v18; // [esp+98h] [ebp-30h] BYREF + size_t v19; // [esp+9Ch] [ebp-2Ch] + int v20[10]; // [esp+A0h] [ebp-28h] BYREF + + v4 = *(int (__thiscall **)(int, int, int))(*(_DWORD *)a3 + 16); + if ( v4 == `anonymous namespace'::io_error_category::message[abi:cxx11] ) + { + LOBYTE(v20[0]) = 0; + v18 = v20; + v19 = 0; + if ( a2 == 1 ) + std::string::_M_replace((unsigned int *)&v18, 0, 0, "iostream error", 0xEu); + else + std::string::_M_replace((unsigned int *)&v18, 0, 0, "Unknown error", 0xDu); + } + else + { + ((void (__cdecl *)(int, int))v4)(a3, a2); + } + v15 = v17; + Size = *(_BYTE **)(a4 + 4); + Src = *(_BYTE **)a4; + if ( &Size[*(_DWORD *)a4] && !*(_DWORD *)a4 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + Block[0] = *(void **)(a4 + 4); + if ( (unsigned int)Size > 0xF ) + { + v5 = (int *)std::string::_M_create((unsigned int *)Block, 0); + v15 = v5; + v17[0] = (int)Block[0]; +LABEL_29: + memcpy(v5, Src, (size_t)Size); + Size = Block[0]; + v5 = (int *)v15; + goto LABEL_9; + } + if ( Size == (_BYTE *)1 ) + { + LOBYTE(v17[0]) = *Src; + v5 = v17; + goto LABEL_9; + } + v5 = v17; + if ( Size ) + goto LABEL_29; +LABEL_9: + v16 = (size_t)Size; + Size[(_DWORD)v5] = 0; + if ( v16 == 0x3FFFFFFF || v16 == 1073741822 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(&v15, ": ", 2u); + v6 = v16 + v19; + v7 = 15; + v8 = 15; + if ( v15 != v17 ) + v8 = v17[0]; + if ( v6 <= v8 ) + goto LABEL_16; + if ( v18 != v20 ) + v7 = v20[0]; + if ( v6 <= v7 ) + v9 = std::string::_M_replace((unsigned int *)&v18, 0, 0, (char *)v15, v16); + else +LABEL_16: + v9 = std::string::_M_append(&v15, v18, v19); + Block[0] = v14; + if ( (unsigned int *)*v9 == v9 + 2 ) + { + v14[0] = v9[2]; + v14[1] = v9[3]; + v14[2] = v9[4]; + v14[3] = v9[5]; + } + else + { + Block[0] = (void *)*v9; + v14[0] = v9[2]; + } + Block[1] = (void *)v9[1]; + *v9 = (unsigned int)(v9 + 2); + *((_BYTE *)v9 + 8) = 0; + v9[1] = 0; + std::runtime_error::runtime_error(this, (int)Block); + if ( Block[0] != v14 ) + operator delete(Block[0]); + if ( v15 != v17 ) + operator delete(v15); + if ( v18 != v20 ) + operator delete(v18); + this[2] = a2; + this[3] = a3; + *this = &off_560064; +} +// 560064: using guessed type void (__cdecl *off_560064)(std::system_error *__hidden this); + +//----- (004D9780) -------------------------------------------------------- +void __fastcall std::system_error::~system_error(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_560064; + std::runtime_error::~runtime_error(Block); + operator delete(a1); +} +// 4D978C: variable 'Block' is possibly undefined +// 560064: using guessed type void (__cdecl *off_560064)(std::system_error *__hidden this); + +//----- (004D97A0) -------------------------------------------------------- +void __cdecl std::system_error::~system_error(std::exception *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560064; + std::runtime_error::~runtime_error(a1); +} +// 4D97A0: variable 'v1' is possibly undefined +// 560064: using guessed type void (__cdecl *off_560064)(std::system_error *__hidden this); + +//----- (004D97B0) -------------------------------------------------------- +int __cdecl std::__facet_shims::__time_get( + int a1, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8, + int a9, + char a10) +{ + int result; // eax + + switch ( a10 ) + { + case 'd': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 16))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 'u': + case 'v': + case 'x': + case 'y': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 28))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 'm': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 24))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 't': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 12))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 'w': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 20))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + } + return result; +} + +//----- (004D9920) -------------------------------------------------------- +int __cdecl std::__facet_shims::__time_get( + int a1, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8, + int a9, + char a10) +{ + int result; // eax + + switch ( a10 ) + { + case 'd': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 16))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 'u': + case 'v': + case 'x': + case 'y': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 28))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 'm': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 24))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 't': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 12))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 'w': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 20))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + } + return result; +} + +//----- (004D9A90) -------------------------------------------------------- +int __cdecl std::__facet_shims::__time_get( + int a1, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8, + int a9, + char a10) +{ + int result; // eax + + switch ( a10 ) + { + case 'd': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 16))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 'u': + case 'v': + case 'x': + case 'y': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 28))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 'm': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 24))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 't': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 12))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 'w': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 20))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + } + return result; +} + +//----- (004D9C00) -------------------------------------------------------- +int __cdecl std::__facet_shims::__time_get( + int a1, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8, + int a9, + char a10) +{ + int result; // eax + + switch ( a10 ) + { + case 'd': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 16))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 'u': + case 'v': + case 'x': + case 'y': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 28))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 'm': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 24))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 't': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 12))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + case 'w': + result = (*(int (__thiscall **)(int, int, int, int, int, int, int, int))(*(_DWORD *)a2 + 20))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9); + break; + } + return result; +} + +//----- (004D9D70) -------------------------------------------------------- +__int64 __cdecl std::__facet_shims::__money_get( + int a1, + int a2, + __int64 a3, + int a4, + int a5, + unsigned __int8 a6, + int a7, + _DWORD *a8, + int a9, + _DWORD *a10) +{ + int v11; // ecx + int v12; // eax + void (__cdecl *v13)(_DWORD *); // eax + int v14; // eax + const std::string *v15; // [esp+4h] [ebp-74h] + __int64 lpuexcpt; // [esp+20h] [ebp-58h] + int v17; // [esp+6Bh] [ebp-Dh] BYREF + _DWORD v18[3]; // [esp+6Ch] [ebp-Ch] BYREF + __int64 v19; // [esp+88h] [ebp+10h] + + if ( a9 ) + return ((__int64 (__thiscall *)(int, _DWORD, _DWORD, int, int, _DWORD, int, _DWORD *, int))*(_DWORD *)(*(_DWORD *)a2 + 8))( + a2, + a3, + HIDWORD(a3), + a4, + a5, + a6, + a7, + a8, + a9); + v18[0] = std::string::_S_construct(0, 0); + v19 = ((__int64 (__thiscall *)(int, _DWORD, _DWORD, int, int, _DWORD, int, _DWORD *, _DWORD *))*(_DWORD *)(*(_DWORD *)a2 + 12))( + a2, + a3, + HIDWORD(a3), + a4, + a5, + a6, + a7, + a8, + v18); + if ( *a8 ) + { + v11 = v18[0]; + } + else + { + v13 = (void (__cdecl *)(_DWORD *))a10[6]; + if ( v13 ) + v13(a10); + std::string::string(a10, (std::string *)v18, v15); + v11 = v18[0]; + v14 = *(_DWORD *)(v18[0] - 12); + a10[6] = std::__facet_shims::`anonymous namespace'::__destroy_string; + a10[1] = v14; + } + lpuexcpt = v19; + if ( _CRT_MT ) + { + v12 = _InterlockedExchangeAdd((volatile signed __int32 *)(v11 - 4), 0xFFFFFFFF); + } + else + { + v12 = *(_DWORD *)(v11 - 4); + *(_DWORD *)(v11 - 4) = v12 - 1; + } + if ( v12 <= 0 ) + std::string::_Rep::_M_destroy((void *)(v11 - 12), (int)&v17); + return lpuexcpt; +} +// 4D9F09: variable 'v15' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004D9F70) -------------------------------------------------------- +__int64 __cdecl std::__facet_shims::__money_get( + int a1, + int *a2, + __int64 a3, + int a4, + int a5, + unsigned __int8 a6, + int a7, + _DWORD *a8, + int a9, + _DWORD *a10) +{ + int v10; // edx + __int64 (__thiscall *v12)(int *, _DWORD, _DWORD, int, int, _DWORD, int, _DWORD *, void **); // eax + void (__cdecl *v13)(_DWORD *); // eax + _BYTE *v14; // ebx + unsigned int v15; // ecx + _BYTE *v16; // eax + __int64 Size; // [esp+20h] [ebp-68h] + size_t Sizea; // [esp+20h] [ebp-68h] + unsigned int v19; // [esp+64h] [ebp-24h] BYREF + void *Block; // [esp+68h] [ebp-20h] BYREF + unsigned int v21; // [esp+6Ch] [ebp-1Ch] + char v22[20]; // [esp+70h] [ebp-18h] BYREF + __int64 v23; // [esp+98h] [ebp+10h] + + v10 = *a2; + if ( a9 ) + return ((__int64 (__thiscall *)(int *, _DWORD, _DWORD, int, int, _DWORD, int, _DWORD *, int))*(_DWORD *)(v10 + 8))( + a2, + a3, + HIDWORD(a3), + a4, + a5, + a6, + a7, + a8, + a9); + Block = v22; + v12 = *(__int64 (__thiscall **)(int *, _DWORD, _DWORD, int, int, _DWORD, int, _DWORD *, void **))(v10 + 12); + v21 = 0; + v22[0] = 0; + v23 = v12(a2, a3, HIDWORD(a3), a4, a5, a6, a7, a8, &Block); + if ( !*a8 ) + { + v13 = (void (__cdecl *)(_DWORD *))a10[6]; + if ( v13 ) + v13(a10); + v14 = Block; + v15 = v21; + v16 = a10 + 2; + *a10 = a10 + 2; + Sizea = v15; + if ( &v14[v15] && !v14 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v19 = v15; + if ( v15 > 0xF ) + { + v16 = std::string::_M_create(&v19, 0); + *a10 = v16; + a10[2] = v19; + } + else + { + if ( v15 == 1 ) + { + *((_BYTE *)a10 + 8) = *v14; +LABEL_15: + a10[1] = Sizea; + v16[Sizea] = 0; + a10[6] = std::__facet_shims::`anonymous namespace'::__destroy_string; + goto LABEL_5; + } + if ( !v15 ) + goto LABEL_15; + } + memcpy(v16, v14, Sizea); + Sizea = v19; + v16 = (_BYTE *)*a10; + goto LABEL_15; + } +LABEL_5: + Size = v23; + if ( Block != v22 ) + operator delete(Block); + return Size; +} + +//----- (004DA1E0) -------------------------------------------------------- +struct _Unwind_Exception *__cdecl std::__facet_shims::__money_get( + int a1, + int a2, + int a3, + int a4, + int a5, + int a6, + unsigned __int8 a7, + int a8, + _DWORD *a9, + int a10, + _DWORD *a11) +{ + int v12; // ecx + int v13; // eax + void (__cdecl *v14)(_DWORD *); // eax + int v15; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+30h] [ebp-58h] + int v17; // [esp+7Bh] [ebp-Dh] BYREF + _DWORD v18[2]; // [esp+7Ch] [ebp-Ch] BYREF + + if ( a10 ) + return (struct _Unwind_Exception *)(*(unsigned int (__thiscall **)(int, int, int, int, int, _DWORD, int, _DWORD *, int))(*(_DWORD *)a2 + 8))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10); + v18[0] = std::wstring::_S_construct(0, 0); + lpuexcpt = (struct _Unwind_Exception *)(*(unsigned int (__thiscall **)(int, int, int, int, int, _DWORD, int, _DWORD *, _DWORD *))(*(_DWORD *)a2 + 12))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + v18); + if ( *a9 ) + { + v12 = v18[0]; + } + else + { + v14 = (void (__cdecl *)(_DWORD *))a11[6]; + if ( v14 ) + v14(a11); + std::wstring::basic_string(a11, v18); + v12 = v18[0]; + v15 = *(_DWORD *)(v18[0] - 12); + a11[6] = std::__facet_shims::`anonymous namespace'::__destroy_string; + a11[1] = v15; + } + if ( _CRT_MT ) + { + v13 = _InterlockedExchangeAdd((volatile signed __int32 *)(v12 - 4), 0xFFFFFFFF); + } + else + { + v13 = *(_DWORD *)(v12 - 4); + *(_DWORD *)(v12 - 4) = v13 - 1; + } + if ( v13 <= 0 ) + std::wstring::_Rep::_M_destroy((void *)(v12 - 12), (int)&v17); + return lpuexcpt; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DA400) -------------------------------------------------------- +struct _Unwind_Exception *__cdecl std::__facet_shims::__money_get( + int a1, + int *a2, + int a3, + int a4, + int a5, + int a6, + unsigned __int8 a7, + int a8, + _DWORD *a9, + int a10, + _DWORD *a11) +{ + int v11; // edx + __int64 (__thiscall *v13)(int *, int, int, int, int, _DWORD, int, _DWORD *, void **); // eax + void (__cdecl *v14)(_DWORD *); // eax + int v15; // edx + struct _Unwind_Exception *lpuexcpt; // [esp+30h] [ebp-68h] + void *Block; // [esp+78h] [ebp-20h] BYREF + int v18; // [esp+7Ch] [ebp-1Ch] + __int16 v19[10]; // [esp+80h] [ebp-18h] BYREF + + v11 = *a2; + if ( a10 ) + return (struct _Unwind_Exception *)(*(unsigned int (__thiscall **)(int *, int, int, int, int, _DWORD, int, _DWORD *, int))(v11 + 8))( + a2, + a3, + a4, + a5, + a6, + a7, + a8, + a9, + a10); + Block = v19; + v19[0] = 0; + v13 = *(__int64 (__thiscall **)(int *, int, int, int, int, _DWORD, int, _DWORD *, void **))(v11 + 12); + v18 = 0; + lpuexcpt = (struct _Unwind_Exception *)v13(a2, a3, a4, a5, a6, a7, a8, a9, &Block); + if ( !*a9 ) + { + v14 = (void (__cdecl *)(_DWORD *))a11[6]; + if ( v14 ) + v14(a11); + v15 = v18; + *a11 = a11 + 2; + std::wstring::_M_construct(a11, Block, (int)Block + 2 * v15); + a11[6] = std::__facet_shims::`anonymous namespace'::__destroy_string; + } + if ( Block != v19 ) + operator delete(Block); + return lpuexcpt; +} + +//----- (004DA5D0) -------------------------------------------------------- +__int64 __cdecl std::__facet_shims::__money_put( + int a1, + int a2, + int a3, + int a4, + unsigned __int8 a5, + int a6, + char a7, + long double a8, + int a9) +{ + int v9; // ecx + int v10; // eax + __int64 lpuexcpt; // [esp+20h] [ebp-58h] + char v14; // [esp+6Bh] [ebp-Dh] BYREF + _DWORD v15[2]; // [esp+6Ch] [ebp-Ch] BYREF + + if ( !a9 ) + return ((__int64 (__thiscall *)(int, int, int, _DWORD, int, _DWORD, _DWORD, _DWORD, _DWORD))*(_DWORD *)(*(_DWORD *)a2 + 8))( + a2, + a3, + a4, + a5, + a6, + a7, + LODWORD(a8), + DWORD1(a8), + HIDWORD(a8)); + if ( !*(_DWORD *)(a9 + 24) ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + std::string::string(v15, *(unsigned __int8 **)a9, *(_DWORD *)(a9 + 4), (int)&v14); + lpuexcpt = ((__int64 (__thiscall *)(int, int, int, _DWORD, int, _DWORD, _DWORD *))*(_DWORD *)(*(_DWORD *)a2 + 12))( + a2, + a3, + a4, + a5, + a6, + a7, + v15); + v9 = v15[0]; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v15[0] - 4), 0xFFFFFFFF) > 0 ) + return lpuexcpt; +LABEL_8: + std::string::_Rep::_M_destroy((void *)(v9 - 12), (int)&v14); + return lpuexcpt; + } + v10 = *(_DWORD *)(v15[0] - 4); + *(_DWORD *)(v15[0] - 4) = v10 - 1; + if ( v10 <= 0 ) + goto LABEL_8; + return lpuexcpt; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DA780) -------------------------------------------------------- +__int64 __cdecl std::__facet_shims::__money_put( + int a1, + int a2, + int a3, + int a4, + unsigned __int8 a5, + int a6, + char a7, + long double a8, + int a9) +{ + __int64 lpuexcpt; // [esp+20h] [ebp-68h] + void *Block[2]; // [esp+68h] [ebp-20h] BYREF + char v13[20]; // [esp+70h] [ebp-18h] BYREF + + if ( !a9 ) + return ((__int64 (__thiscall *)(int, int, int, _DWORD, int, _DWORD, _DWORD, _DWORD, _DWORD))*(_DWORD *)(*(_DWORD *)a2 + 8))( + a2, + a3, + a4, + a5, + a6, + a7, + LODWORD(a8), + DWORD1(a8), + HIDWORD(a8)); + if ( !*(_DWORD *)(a9 + 24) ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + Block[0] = v13; + std::string::_M_construct(Block, *(_BYTE **)a9, *(_DWORD *)a9 + *(_DWORD *)(a9 + 4)); + lpuexcpt = ((__int64 (__thiscall *)(int, int, int, _DWORD, int, _DWORD, void **))*(_DWORD *)(*(_DWORD *)a2 + 12))( + a2, + a3, + a4, + a5, + a6, + a7, + Block); + if ( Block[0] != v13 ) + operator delete(Block[0]); + return lpuexcpt; +} + +//----- (004DA900) -------------------------------------------------------- +__int64 __cdecl std::__facet_shims::__money_put( + int a1, + int a2, + int a3, + int a4, + unsigned __int8 a5, + int a6, + unsigned __int16 a7, + long double a8, + int a9) +{ + int v9; // ecx + int v10; // eax + __int64 lpuexcpt; // [esp+20h] [ebp-58h] + char v14; // [esp+6Bh] [ebp-Dh] BYREF + _DWORD v15[2]; // [esp+6Ch] [ebp-Ch] BYREF + + if ( !a9 ) + return ((__int64 (__thiscall *)(int, int, int, _DWORD, int, _DWORD, _DWORD, _DWORD, _DWORD))*(_DWORD *)(*(_DWORD *)a2 + 8))( + a2, + a3, + a4, + a5, + a6, + a7, + LODWORD(a8), + DWORD1(a8), + HIDWORD(a8)); + if ( !*(_DWORD *)(a9 + 24) ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + std::wstring::basic_string(v15, *(_WORD **)a9, *(_DWORD *)(a9 + 4), (int)&v14); + lpuexcpt = ((__int64 (__thiscall *)(int, int, int, _DWORD, int, _DWORD, _DWORD *))*(_DWORD *)(*(_DWORD *)a2 + 12))( + a2, + a3, + a4, + a5, + a6, + a7, + v15); + v9 = v15[0]; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v15[0] - 4), 0xFFFFFFFF) > 0 ) + return lpuexcpt; +LABEL_8: + std::wstring::_Rep::_M_destroy((void *)(v9 - 12), (int)&v14); + return lpuexcpt; + } + v10 = *(_DWORD *)(v15[0] - 4); + *(_DWORD *)(v15[0] - 4) = v10 - 1; + if ( v10 <= 0 ) + goto LABEL_8; + return lpuexcpt; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DAAB0) -------------------------------------------------------- +__int64 __cdecl std::__facet_shims::__money_put( + int a1, + int a2, + int a3, + int a4, + unsigned __int8 a5, + int a6, + unsigned __int16 a7, + long double a8, + int a9) +{ + __int64 lpuexcpt; // [esp+20h] [ebp-68h] + void *Block[2]; // [esp+68h] [ebp-20h] BYREF + char v13[20]; // [esp+70h] [ebp-18h] BYREF + + if ( !a9 ) + return ((__int64 (__thiscall *)(int, int, int, _DWORD, int, _DWORD, _DWORD, _DWORD, _DWORD))*(_DWORD *)(*(_DWORD *)a2 + 8))( + a2, + a3, + a4, + a5, + a6, + a7, + LODWORD(a8), + DWORD1(a8), + HIDWORD(a8)); + if ( !*(_DWORD *)(a9 + 24) ) + std::__throw_logic_error((std::logic_error *)"uninitialized __any_string"); + Block[0] = v13; + std::wstring::_M_construct(Block, *(_WORD **)a9, *(_DWORD *)a9 + 2 * *(_DWORD *)(a9 + 4)); + lpuexcpt = ((__int64 (__thiscall *)(int, int, int, _DWORD, int, _DWORD, void **))*(_DWORD *)(*(_DWORD *)a2 + 12))( + a2, + a3, + a4, + a5, + a6, + a7, + Block); + if ( Block[0] != v13 ) + operator delete(Block[0]); + return lpuexcpt; +} + +//----- (004DAC30) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v2 = _CRT_MT; + *Block = &off_55F370; + v3 = (volatile signed __int32 *)Block[3]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_560BE0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 4DAC93: variable 'lpfctx' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F370: using guessed type int (*off_55F370)(); +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (004DACC0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v2 = _CRT_MT; + *Block = &off_55F38C; + v3 = (volatile signed __int32 *)Block[3]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_55FC68; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 4DAD23: variable 'lpfctx' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F38C: using guessed type int (*off_55F38C)(); +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (004DAD50) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *a1) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v2 = _CRT_MT; + *a1 = &off_55F370; + v3 = (volatile signed __int32 *)a1[3]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *a1 = &off_560BE0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4DADB3: variable 'lpfctx' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F370: using guessed type int (*off_55F370)(); +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (004DADE0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *a1) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v2 = _CRT_MT; + *a1 = &off_55F38C; + v3 = (volatile signed __int32 *)a1[3]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *a1 = &off_55FC68; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4DAE43: variable 'lpfctx' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F38C: using guessed type int (*off_55F38C)(); +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (004DAE70) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v2 = _CRT_MT; + *Block = &off_55F3A8; + v3 = (volatile signed __int32 *)Block[3]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_560BFC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 4DAED3: variable 'lpfctx' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F3A8: using guessed type int (*off_55F3A8)(); +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (004DAF00) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v2 = _CRT_MT; + *Block = &off_55F3C4; + v3 = (volatile signed __int32 *)Block[3]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_55FC84; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 4DAF63: variable 'lpfctx' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F3C4: using guessed type int (*off_55F3C4)(); +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (004DAF90) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *a1) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v2 = _CRT_MT; + *a1 = &off_55F3A8; + v3 = (volatile signed __int32 *)a1[3]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *a1 = &off_560BFC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4DAFF3: variable 'lpfctx' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F3A8: using guessed type int (*off_55F3A8)(); +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (004DB020) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::collate_shim::~collate_shim(_DWORD *a1) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v2 = _CRT_MT; + *a1 = &off_55F3C4; + v3 = (volatile signed __int32 *)a1[3]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *a1 = &off_55FC84; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4DB083: variable 'lpfctx' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F3C4: using guessed type int (*off_55F3C4)(); +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (004DB0B0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = _CRT_MT; + *Block = &off_55F3E0; + v3 = (volatile signed __int32 *)Block[4]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::messages::~messages(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F3E0: using guessed type int (*off_55F3E0)(); + +//----- (004DB100) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = _CRT_MT; + *Block = &off_55F3FC; + v3 = (volatile signed __int32 *)Block[4]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::messages::~messages(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F3FC: using guessed type int (*off_55F3FC)(); + +//----- (004DB150) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *a1) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = _CRT_MT; + *a1 = &off_55F3E0; + v3 = (volatile signed __int32 *)a1[4]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::messages::~messages(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F3E0: using guessed type int (*off_55F3E0)(); + +//----- (004DB1A0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *a1) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = _CRT_MT; + *a1 = &off_55F3FC; + v3 = (volatile signed __int32 *)a1[4]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::messages::~messages(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F3FC: using guessed type int (*off_55F3FC)(); + +//----- (004DB1F0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = _CRT_MT; + *Block = &off_55F418; + v3 = (volatile signed __int32 *)Block[4]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::messages::~messages(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F418: using guessed type int (*off_55F418)(); + +//----- (004DB240) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = _CRT_MT; + *Block = &off_55F434; + v3 = (volatile signed __int32 *)Block[4]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::messages::~messages(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F434: using guessed type int (*off_55F434)(); + +//----- (004DB290) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *a1) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = _CRT_MT; + *a1 = &off_55F418; + v3 = (volatile signed __int32 *)a1[4]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::messages::~messages(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F418: using guessed type int (*off_55F418)(); + +//----- (004DB2E0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::messages_shim::~messages_shim(_DWORD *a1) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = _CRT_MT; + *a1 = &off_55F434; + v3 = (volatile signed __int32 *)a1[4]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::messages::~messages(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F434: using guessed type int (*off_55F434)(); + +//----- (004DB330) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = Block[4]; + *Block = &off_55F450; + v3 = (volatile signed __int32 *)Block[3]; + *(_DWORD *)(v2 + 12) = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::numpunct::~numpunct(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F450: using guessed type int (*off_55F450)(); + +//----- (004DB390) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = Block[4]; + *Block = &off_55F474; + v3 = (volatile signed __int32 *)Block[3]; + *(_DWORD *)(v2 + 12) = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::numpunct::~numpunct(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F474: using guessed type int (*off_55F474)(); + +//----- (004DB3F0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *a1) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = a1[4]; + *a1 = &off_55F450; + v3 = (volatile signed __int32 *)a1[3]; + *(_DWORD *)(v2 + 12) = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::numpunct::~numpunct(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F450: using guessed type int (*off_55F450)(); + +//----- (004DB440) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *a1) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = a1[4]; + *a1 = &off_55F474; + v3 = (volatile signed __int32 *)a1[3]; + *(_DWORD *)(v2 + 12) = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::numpunct::~numpunct(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F474: using guessed type int (*off_55F474)(); + +//----- (004DB490) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = Block[4]; + *Block = &off_55F498; + v3 = (volatile signed __int32 *)Block[3]; + *(_DWORD *)(v2 + 12) = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::numpunct::~numpunct(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F498: using guessed type int (*off_55F498)(); + +//----- (004DB4F0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = Block[4]; + *Block = &off_55F4BC; + v3 = (volatile signed __int32 *)Block[3]; + *(_DWORD *)(v2 + 12) = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::numpunct::~numpunct(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F4BC: using guessed type int (*off_55F4BC)(); + +//----- (004DB550) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *a1) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = a1[4]; + *a1 = &off_55F498; + v3 = (volatile signed __int32 *)a1[3]; + *(_DWORD *)(v2 + 12) = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::numpunct::~numpunct(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F498: using guessed type int (*off_55F498)(); + +//----- (004DB5A0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::numpunct_shim::~numpunct_shim(_DWORD *a1) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = a1[4]; + *a1 = &off_55F4BC; + v3 = (volatile signed __int32 *)a1[3]; + *(_DWORD *)(v2 + 12) = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::numpunct::~numpunct(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F4BC: using guessed type int (*off_55F4BC)(); + +//----- (004DB5F0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + v2 = _CRT_MT; + *Block = &off_55F4E0; + v3 = (volatile signed __int32 *)Block[2]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_560D94; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4DB623: variable 'Blocka' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F4E0: using guessed type int (*off_55F4E0)(); +// 560D94: using guessed type int (*off_560D94)(); + +//----- (004DB650) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + v2 = _CRT_MT; + *Block = &off_55F508; + v3 = (volatile signed __int32 *)Block[2]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_55FD20; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4DB683: variable 'Blocka' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F508: using guessed type int (*off_55F508)(); +// 55FD20: using guessed type int (*off_55FD20)(); + +//----- (004DB6B0) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + _DWORD *v2; // ebx + int v3; // eax + volatile signed __int32 *v4; // ecx + signed __int32 v5; // eax + + v2 = v1; + v3 = _CRT_MT; + *v1 = &off_55F4E0; + v4 = (volatile signed __int32 *)v1[2]; + if ( v3 ) + { + v5 = _InterlockedExchangeAdd(v4 + 1, 0xFFFFFFFF); + } + else + { + v5 = *((_DWORD *)v4 + 1); + *((_DWORD *)v4 + 1) = v5 - 1; + } + if ( v5 == 1 ) + (*(void (**)(void))(*v4 + 4))(); + *v2 = &off_560D94; + std::locale::facet::~facet(a1); +} +// 4DB6B1: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F4E0: using guessed type int (*off_55F4E0)(); +// 560D94: using guessed type int (*off_560D94)(); + +//----- (004DB700) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + _DWORD *v2; // ebx + int v3; // eax + volatile signed __int32 *v4; // ecx + signed __int32 v5; // eax + + v2 = v1; + v3 = _CRT_MT; + *v1 = &off_55F508; + v4 = (volatile signed __int32 *)v1[2]; + if ( v3 ) + { + v5 = _InterlockedExchangeAdd(v4 + 1, 0xFFFFFFFF); + } + else + { + v5 = *((_DWORD *)v4 + 1); + *((_DWORD *)v4 + 1) = v5 - 1; + } + if ( v5 == 1 ) + (*(void (**)(void))(*v4 + 4))(); + *v2 = &off_55FD20; + std::locale::facet::~facet(a1); +} +// 4DB701: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F508: using guessed type int (*off_55F508)(); +// 55FD20: using guessed type int (*off_55FD20)(); + +//----- (004DB750) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + v2 = _CRT_MT; + *Block = &off_55F534; + v3 = (volatile signed __int32 *)Block[2]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_560DBC; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4DB783: variable 'Blocka' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F534: using guessed type int (*off_55F534)(); +// 560DBC: using guessed type int (*off_560DBC)(); + +//----- (004DB7B0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + v2 = _CRT_MT; + *Block = &off_55F55C; + v3 = (volatile signed __int32 *)Block[2]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_55FD4C; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4DB7E3: variable 'Blocka' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F55C: using guessed type int (*off_55F55C)(); +// 55FD4C: using guessed type int (*off_55FD4C)(); + +//----- (004DB810) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + _DWORD *v2; // ebx + int v3; // eax + volatile signed __int32 *v4; // ecx + signed __int32 v5; // eax + + v2 = v1; + v3 = _CRT_MT; + *v1 = &off_55F534; + v4 = (volatile signed __int32 *)v1[2]; + if ( v3 ) + { + v5 = _InterlockedExchangeAdd(v4 + 1, 0xFFFFFFFF); + } + else + { + v5 = *((_DWORD *)v4 + 1); + *((_DWORD *)v4 + 1) = v5 - 1; + } + if ( v5 == 1 ) + (*(void (**)(void))(*v4 + 4))(); + *v2 = &off_560DBC; + std::locale::facet::~facet(a1); +} +// 4DB811: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F534: using guessed type int (*off_55F534)(); +// 560DBC: using guessed type int (*off_560DBC)(); + +//----- (004DB860) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::time_get_shim::~time_get_shim(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + _DWORD *v2; // ebx + int v3; // eax + volatile signed __int32 *v4; // ecx + signed __int32 v5; // eax + + v2 = v1; + v3 = _CRT_MT; + *v1 = &off_55F55C; + v4 = (volatile signed __int32 *)v1[2]; + if ( v3 ) + { + v5 = _InterlockedExchangeAdd(v4 + 1, 0xFFFFFFFF); + } + else + { + v5 = *((_DWORD *)v4 + 1); + *((_DWORD *)v4 + 1) = v5 - 1; + } + if ( v5 == 1 ) + (*(void (**)(void))(*v4 + 4))(); + *v2 = &off_55FD4C; + std::locale::facet::~facet(a1); +} +// 4DB861: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F55C: using guessed type int (*off_55F55C)(); +// 55FD4C: using guessed type int (*off_55FD4C)(); + +//----- (004DB8B0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + v2 = _CRT_MT; + *Block = &off_55F588; + v3 = (volatile signed __int32 *)Block[2]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_560E54; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4DB8E3: variable 'Blocka' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F588: using guessed type int (*off_55F588)(); +// 560E54: using guessed type int (*off_560E54)(); + +//----- (004DB910) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + v2 = _CRT_MT; + *Block = &off_55F5A0; + v3 = (volatile signed __int32 *)Block[2]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_55FD78; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4DB943: variable 'Blocka' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F5A0: using guessed type int (*off_55F5A0)(); +// 55FD78: using guessed type int (*off_55FD78)(); + +//----- (004DB970) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + _DWORD *v2; // ebx + int v3; // eax + volatile signed __int32 *v4; // ecx + signed __int32 v5; // eax + + v2 = v1; + v3 = _CRT_MT; + *v1 = &off_55F588; + v4 = (volatile signed __int32 *)v1[2]; + if ( v3 ) + { + v5 = _InterlockedExchangeAdd(v4 + 1, 0xFFFFFFFF); + } + else + { + v5 = *((_DWORD *)v4 + 1); + *((_DWORD *)v4 + 1) = v5 - 1; + } + if ( v5 == 1 ) + (*(void (**)(void))(*v4 + 4))(); + *v2 = &off_560E54; + std::locale::facet::~facet(a1); +} +// 4DB971: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F588: using guessed type int (*off_55F588)(); +// 560E54: using guessed type int (*off_560E54)(); + +//----- (004DB9C0) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + _DWORD *v2; // ebx + int v3; // eax + volatile signed __int32 *v4; // ecx + signed __int32 v5; // eax + + v2 = v1; + v3 = _CRT_MT; + *v1 = &off_55F5A0; + v4 = (volatile signed __int32 *)v1[2]; + if ( v3 ) + { + v5 = _InterlockedExchangeAdd(v4 + 1, 0xFFFFFFFF); + } + else + { + v5 = *((_DWORD *)v4 + 1); + *((_DWORD *)v4 + 1) = v5 - 1; + } + if ( v5 == 1 ) + (*(void (**)(void))(*v4 + 4))(); + *v2 = &off_55FD78; + std::locale::facet::~facet(a1); +} +// 4DB9C1: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F5A0: using guessed type int (*off_55F5A0)(); +// 55FD78: using guessed type int (*off_55FD78)(); + +//----- (004DBA10) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + v2 = _CRT_MT; + *Block = &off_55F5B8; + v3 = (volatile signed __int32 *)Block[2]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_560E6C; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4DBA43: variable 'Blocka' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F5B8: using guessed type int (*off_55F5B8)(); +// 560E6C: using guessed type int (*off_560E6C)(); + +//----- (004DBA70) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + v2 = _CRT_MT; + *Block = &off_55F5D0; + v3 = (volatile signed __int32 *)Block[2]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_55FD90; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4DBAA3: variable 'Blocka' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F5D0: using guessed type int (*off_55F5D0)(); +// 55FD90: using guessed type int (*off_55FD90)(); + +//----- (004DBAD0) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim( + std::locale::facet *a1) +{ + _DWORD *v1; // ecx + _DWORD *v2; // ebx + int v3; // eax + volatile signed __int32 *v4; // ecx + signed __int32 v5; // eax + + v2 = v1; + v3 = _CRT_MT; + *v1 = &off_55F5B8; + v4 = (volatile signed __int32 *)v1[2]; + if ( v3 ) + { + v5 = _InterlockedExchangeAdd(v4 + 1, 0xFFFFFFFF); + } + else + { + v5 = *((_DWORD *)v4 + 1); + *((_DWORD *)v4 + 1) = v5 - 1; + } + if ( v5 == 1 ) + (*(void (**)(void))(*v4 + 4))(); + *v2 = &off_560E6C; + std::locale::facet::~facet(a1); +} +// 4DBAD1: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F5B8: using guessed type int (*off_55F5B8)(); +// 560E6C: using guessed type int (*off_560E6C)(); + +//----- (004DBB20) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::money_get_shim::~money_get_shim( + std::locale::facet *a1) +{ + _DWORD *v1; // ecx + _DWORD *v2; // ebx + int v3; // eax + volatile signed __int32 *v4; // ecx + signed __int32 v5; // eax + + v2 = v1; + v3 = _CRT_MT; + *v1 = &off_55F5D0; + v4 = (volatile signed __int32 *)v1[2]; + if ( v3 ) + { + v5 = _InterlockedExchangeAdd(v4 + 1, 0xFFFFFFFF); + } + else + { + v5 = *((_DWORD *)v4 + 1); + *((_DWORD *)v4 + 1) = v5 - 1; + } + if ( v5 == 1 ) + (*(void (**)(void))(*v4 + 4))(); + *v2 = &off_55FD90; + std::locale::facet::~facet(a1); +} +// 4DBB21: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F5D0: using guessed type int (*off_55F5D0)(); +// 55FD90: using guessed type int (*off_55FD90)(); + +//----- (004DBB70) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + v2 = _CRT_MT; + *Block = &off_55F5E8; + v3 = (volatile signed __int32 *)Block[2]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_560E84; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4DBBA3: variable 'Blocka' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F5E8: using guessed type int (*off_55F5E8)(); +// 560E84: using guessed type int (*off_560E84)(); + +//----- (004DBBD0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + v2 = _CRT_MT; + *Block = &off_55F600; + v3 = (volatile signed __int32 *)Block[2]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_55FDA8; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4DBC03: variable 'Blocka' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F600: using guessed type int (*off_55F600)(); +// 55FDA8: using guessed type int (*off_55FDA8)(); + +//----- (004DBC30) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + _DWORD *v2; // ebx + int v3; // eax + volatile signed __int32 *v4; // ecx + signed __int32 v5; // eax + + v2 = v1; + v3 = _CRT_MT; + *v1 = &off_55F5E8; + v4 = (volatile signed __int32 *)v1[2]; + if ( v3 ) + { + v5 = _InterlockedExchangeAdd(v4 + 1, 0xFFFFFFFF); + } + else + { + v5 = *((_DWORD *)v4 + 1); + *((_DWORD *)v4 + 1) = v5 - 1; + } + if ( v5 == 1 ) + (*(void (**)(void))(*v4 + 4))(); + *v2 = &off_560E84; + std::locale::facet::~facet(a1); +} +// 4DBC31: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F5E8: using guessed type int (*off_55F5E8)(); +// 560E84: using guessed type int (*off_560E84)(); + +//----- (004DBC80) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + _DWORD *v2; // ebx + int v3; // eax + volatile signed __int32 *v4; // ecx + signed __int32 v5; // eax + + v2 = v1; + v3 = _CRT_MT; + *v1 = &off_55F600; + v4 = (volatile signed __int32 *)v1[2]; + if ( v3 ) + { + v5 = _InterlockedExchangeAdd(v4 + 1, 0xFFFFFFFF); + } + else + { + v5 = *((_DWORD *)v4 + 1); + *((_DWORD *)v4 + 1) = v5 - 1; + } + if ( v5 == 1 ) + (*(void (**)(void))(*v4 + 4))(); + *v2 = &off_55FDA8; + std::locale::facet::~facet(a1); +} +// 4DBC81: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F600: using guessed type int (*off_55F600)(); +// 55FDA8: using guessed type int (*off_55FDA8)(); + +//----- (004DBCD0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + v2 = _CRT_MT; + *Block = &off_55F618; + v3 = (volatile signed __int32 *)Block[2]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_560E9C; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4DBD03: variable 'Blocka' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F618: using guessed type int (*off_55F618)(); +// 560E9C: using guessed type int (*off_560E9C)(); + +//----- (004DBD30) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim(_DWORD *Block) +{ + int v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + v2 = _CRT_MT; + *Block = &off_55F630; + v3 = (volatile signed __int32 *)Block[2]; + if ( v2 ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + *Block = &off_55FDC0; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4DBD63: variable 'Blocka' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F630: using guessed type int (*off_55F630)(); +// 55FDC0: using guessed type int (*off_55FDC0)(); + +//----- (004DBD90) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim( + std::locale::facet *a1) +{ + _DWORD *v1; // ecx + _DWORD *v2; // ebx + int v3; // eax + volatile signed __int32 *v4; // ecx + signed __int32 v5; // eax + + v2 = v1; + v3 = _CRT_MT; + *v1 = &off_55F618; + v4 = (volatile signed __int32 *)v1[2]; + if ( v3 ) + { + v5 = _InterlockedExchangeAdd(v4 + 1, 0xFFFFFFFF); + } + else + { + v5 = *((_DWORD *)v4 + 1); + *((_DWORD *)v4 + 1) = v5 - 1; + } + if ( v5 == 1 ) + (*(void (**)(void))(*v4 + 4))(); + *v2 = &off_560E9C; + std::locale::facet::~facet(a1); +} +// 4DBD91: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F618: using guessed type int (*off_55F618)(); +// 560E9C: using guessed type int (*off_560E9C)(); + +//----- (004DBDE0) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::money_put_shim::~money_put_shim( + std::locale::facet *a1) +{ + _DWORD *v1; // ecx + _DWORD *v2; // ebx + int v3; // eax + volatile signed __int32 *v4; // ecx + signed __int32 v5; // eax + + v2 = v1; + v3 = _CRT_MT; + *v1 = &off_55F630; + v4 = (volatile signed __int32 *)v1[2]; + if ( v3 ) + { + v5 = _InterlockedExchangeAdd(v4 + 1, 0xFFFFFFFF); + } + else + { + v5 = *((_DWORD *)v4 + 1); + *((_DWORD *)v4 + 1) = v5 - 1; + } + if ( v5 == 1 ) + (*(void (**)(void))(*v4 + 4))(); + *v2 = &off_55FDC0; + std::locale::facet::~facet(a1); +} +// 4DBDE1: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55F630: using guessed type int (*off_55F630)(); +// 55FDC0: using guessed type int (*off_55FDC0)(); + +//----- (004DBE30) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *Block) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)Block[4]; + *Block = &off_55F648; + v3 = (volatile signed __int32 *)Block[3]; + v2[3] = 0; + v2[6] = 0; + v2[8] = 0; + v2[10] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F648: using guessed type int (*off_55F648)(); + +//----- (004DBEA0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *Block) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)Block[4]; + *Block = &off_55F67C; + v3 = (volatile signed __int32 *)Block[3]; + v2[3] = 0; + v2[6] = 0; + v2[8] = 0; + v2[10] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F67C: using guessed type int (*off_55F67C)(); + +//----- (004DBF10) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)a1[4]; + *a1 = &off_55F648; + v3 = (volatile signed __int32 *)a1[3]; + v2[3] = 0; + v2[6] = 0; + v2[8] = 0; + v2[10] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::moneypunct::~moneypunct(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F648: using guessed type int (*off_55F648)(); + +//----- (004DBF80) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)a1[4]; + *a1 = &off_55F67C; + v3 = (volatile signed __int32 *)a1[3]; + v2[3] = 0; + v2[6] = 0; + v2[8] = 0; + v2[10] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::moneypunct::~moneypunct(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F67C: using guessed type int (*off_55F67C)(); + +//----- (004DBFF0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *Block) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)Block[4]; + *Block = &off_55F6B0; + v3 = (volatile signed __int32 *)Block[3]; + v2[3] = 0; + v2[6] = 0; + v2[8] = 0; + v2[10] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F6B0: using guessed type int (*off_55F6B0)(); + +//----- (004DC060) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *Block) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)Block[4]; + *Block = &off_55F6E4; + v3 = (volatile signed __int32 *)Block[3]; + v2[3] = 0; + v2[6] = 0; + v2[8] = 0; + v2[10] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F6E4: using guessed type int (*off_55F6E4)(); + +//----- (004DC0D0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)a1[4]; + *a1 = &off_55F6B0; + v3 = (volatile signed __int32 *)a1[3]; + v2[3] = 0; + v2[6] = 0; + v2[8] = 0; + v2[10] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::moneypunct::~moneypunct(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F6B0: using guessed type int (*off_55F6B0)(); + +//----- (004DC140) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)a1[4]; + *a1 = &off_55F6E4; + v3 = (volatile signed __int32 *)a1[3]; + v2[3] = 0; + v2[6] = 0; + v2[8] = 0; + v2[10] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::moneypunct::~moneypunct(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F6E4: using guessed type int (*off_55F6E4)(); + +//----- (004DC1B0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim( + _DWORD *Block) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)Block[4]; + *Block = &off_55F718; + v3 = (volatile signed __int32 *)Block[3]; + v2[3] = 0; + v2[7] = 0; + v2[9] = 0; + v2[11] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F718: using guessed type int (*off_55F718)(); + +//----- (004DC220) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim( + _DWORD *Block) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)Block[4]; + *Block = &off_55F74C; + v3 = (volatile signed __int32 *)Block[3]; + v2[3] = 0; + v2[7] = 0; + v2[9] = 0; + v2[11] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F74C: using guessed type int (*off_55F74C)(); + +//----- (004DC290) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)a1[4]; + *a1 = &off_55F718; + v3 = (volatile signed __int32 *)a1[3]; + v2[3] = 0; + v2[7] = 0; + v2[9] = 0; + v2[11] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::moneypunct::~moneypunct(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F718: using guessed type int (*off_55F718)(); + +//----- (004DC300) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)a1[4]; + *a1 = &off_55F74C; + v3 = (volatile signed __int32 *)a1[3]; + v2[3] = 0; + v2[7] = 0; + v2[9] = 0; + v2[11] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::moneypunct::~moneypunct(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F74C: using guessed type int (*off_55F74C)(); + +//----- (004DC370) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim( + _DWORD *Block) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)Block[4]; + *Block = &off_55F780; + v3 = (volatile signed __int32 *)Block[3]; + v2[3] = 0; + v2[7] = 0; + v2[9] = 0; + v2[11] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F780: using guessed type int (*off_55F780)(); + +//----- (004DC3E0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim( + _DWORD *Block) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)Block[4]; + *Block = &off_55F7B4; + v3 = (volatile signed __int32 *)Block[3]; + v2[3] = 0; + v2[7] = 0; + v2[9] = 0; + v2[11] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (__fastcall **)(volatile signed __int32 *))(*v3 + 4))(v3); + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F7B4: using guessed type int (*off_55F7B4)(); + +//----- (004DC450) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)a1[4]; + *a1 = &off_55F780; + v3 = (volatile signed __int32 *)a1[3]; + v2[3] = 0; + v2[7] = 0; + v2[9] = 0; + v2[11] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::moneypunct::~moneypunct(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F780: using guessed type int (*off_55F780)(); + +//----- (004DC4C0) -------------------------------------------------------- +void __fastcall std::__facet_shims::`anonymous namespace'::moneypunct_shim::~moneypunct_shim(_DWORD *a1) +{ + _DWORD *v2; // eax + volatile signed __int32 *v3; // ecx + signed __int32 v4; // eax + + v2 = (_DWORD *)a1[4]; + *a1 = &off_55F7B4; + v3 = (volatile signed __int32 *)a1[3]; + v2[3] = 0; + v2[7] = 0; + v2[9] = 0; + v2[11] = 0; + if ( _CRT_MT ) + { + v4 = _InterlockedExchangeAdd(v3 + 1, 0xFFFFFFFF); + } + else + { + v4 = *((_DWORD *)v3 + 1); + *((_DWORD *)v3 + 1) = v4 - 1; + } + if ( v4 == 1 ) + (*(void (**)(void))(*v3 + 4))(); + std::moneypunct::~moneypunct(a1); +} +// 53E1E4: using guessed type int _CRT_MT; +// 55F7B4: using guessed type int (*off_55F7B4)(); + +//----- (004DC530) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::__destroy_string(int *a1) +{ + int v1; // ecx + int v2; // eax + int v3[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v1 = *a1; + if ( !_CRT_MT ) + { + v2 = *(_DWORD *)(v1 - 4); + *(_DWORD *)(v1 - 4) = v2 - 1; + if ( v2 > 0 ) + return; +LABEL_5: + std::string::_Rep::_M_destroy((void *)(v1 - 12), (int)v3); + return; + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v1 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_5; +} +// 53E1E4: using guessed type int _CRT_MT; +// 4DC530: using guessed type int var_D[3]; + +//----- (004DC580) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::__destroy_string(void **Block) +{ + if ( *Block != Block + 2 ) + operator delete(*Block); +} + +//----- (004DC5B0) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::__destroy_string(int *a1) +{ + int v1; // ecx + int v2; // eax + int v3[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v1 = *a1; + if ( !_CRT_MT ) + { + v2 = *(_DWORD *)(v1 - 4); + *(_DWORD *)(v1 - 4) = v2 - 1; + if ( v2 > 0 ) + return; +LABEL_5: + std::wstring::_Rep::_M_destroy((void *)(v1 - 12), (int)v3); + return; + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v1 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_5; +} +// 53E1E4: using guessed type int _CRT_MT; +// 4DC5B0: using guessed type int var_D[3]; + +//----- (004DC600) -------------------------------------------------------- +void __cdecl std::__facet_shims::`anonymous namespace'::__destroy_string(void **Block) +{ + if ( *Block != Block + 2 ) + operator delete(*Block); +} + +//----- (004DC630) -------------------------------------------------------- +void __cdecl std::__facet_shims::__messages_get( + int a1, + int a2, + _DWORD *a3, + std::string *a4, + int a5, + int a6, + unsigned __int8 *a7, + size_t a8) +{ + void (__cdecl *v8)(_DWORD *); // eax + int v9; // ecx + int v10; // eax + int v11; // eax + int v12; // ecx + int v13; // eax + const std::string *v14; // [esp+4h] [ebp-74h] + _WORD v15[3]; // [esp+66h] [ebp-12h] BYREF + int v16[3]; // [esp+6Ch] [ebp-Ch] BYREF + + std::string::string(&v15[1], a7, a8, (int)v15); + (*(void (__thiscall **)(int *, int, std::string *, int, int, _WORD *))(*(_DWORD *)a2 + 12))( + v16, + a2, + a4, + a5, + a6, + &v15[1]); + v8 = (void (__cdecl *)(_DWORD *))a3[6]; + if ( v8 ) + v8(a3); + std::string::string(a3, (std::string *)v16, v14); + v9 = v16[0]; + v10 = *(_DWORD *)(v16[0] - 12); + a3[6] = std::__facet_shims::`anonymous namespace'::__destroy_string; + a3[1] = v10; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v9 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_5: + v12 = *(_DWORD *)&v15[1]; + if ( !_CRT_MT ) + goto LABEL_6; + goto LABEL_10; + } + } + else + { + v11 = *(_DWORD *)(v9 - 4); + *(_DWORD *)(v9 - 4) = v11 - 1; + if ( v11 > 0 ) + goto LABEL_5; + } + std::string::_Rep::_M_destroy((void *)(v9 - 12), (int)v15 + 1); + v12 = *(_DWORD *)&v15[1]; + if ( !_CRT_MT ) + { +LABEL_6: + v13 = *(_DWORD *)(v12 - 4); + *(_DWORD *)(v12 - 4) = v13 - 1; + if ( v13 > 0 ) + return; +LABEL_11: + std::string::_Rep::_M_destroy((void *)(v12 - 12), (int)v16); + return; + } +LABEL_10: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v12 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_11; +} +// 4DC6E4: variable 'v14' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DC7F0) -------------------------------------------------------- +void __cdecl std::__facet_shims::__messages_get( + int a1, + int a2, + _DWORD *a3, + int a4, + int a5, + int a6, + _BYTE *a7, + int a8) +{ + void (__cdecl *v8)(_DWORD *); // eax + _BYTE *v9; // edx + void *v10; // eax + char *v11; // eax + void *Src; // [esp+24h] [ebp-84h] + int Size; // [esp+28h] [ebp-80h] + int v14; // [esp+6Ch] [ebp-3Ch] BYREF + void *v15[2]; // [esp+70h] [ebp-38h] BYREF + char v16[16]; // [esp+78h] [ebp-30h] BYREF + void *Block; // [esp+88h] [ebp-20h] BYREF + unsigned int v18; // [esp+8Ch] [ebp-1Ch] + char v19; // [esp+90h] [ebp-18h] BYREF + + v15[0] = v16; + std::string::_M_construct(v15, a7, (int)&a7[a8]); + (*(void (__thiscall **)(void **, int, int, int, int, void **))(*(_DWORD *)a2 + 12))(&Block, a2, a4, a5, a6, v15); + v8 = (void (__cdecl *)(_DWORD *))a3[6]; + if ( v8 ) + v8(a3); + v9 = Block; + v10 = a3 + 2; + *a3 = a3 + 2; + Src = v9; + Size = v18; + if ( &v9[v18] && !v9 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v14 = v18; + if ( v18 > 0xF ) + { + v10 = std::string::_M_create((unsigned int *)&v14, 0); + *a3 = v10; + a3[2] = v14; +LABEL_16: + memcpy(v10, Src, Size); + Size = v14; + v10 = (void *)*a3; + goto LABEL_8; + } + if ( v18 == 1 ) + { + *((_BYTE *)a3 + 8) = *v9; + goto LABEL_8; + } + if ( v18 ) + goto LABEL_16; +LABEL_8: + a3[1] = Size; + *((_BYTE *)v10 + Size) = 0; + v11 = (char *)Block; + a3[6] = std::__facet_shims::`anonymous namespace'::__destroy_string; + if ( v11 != &v19 ) + operator delete(v11); + if ( v15[0] != v16 ) + operator delete(v15[0]); +} + +//----- (004DCA00) -------------------------------------------------------- +void __cdecl std::__facet_shims::__messages_get( + int a1, + int a2, + _DWORD *a3, + int a4, + int a5, + int a6, + _WORD *a7, + int a8) +{ + void (__cdecl *v8)(_DWORD *); // eax + int v9; // ecx + int v10; // eax + int v11; // eax + int v12; // ecx + int v13; // eax + _WORD v14[3]; // [esp+66h] [ebp-12h] BYREF + int v15[3]; // [esp+6Ch] [ebp-Ch] BYREF + + std::wstring::basic_string(&v14[1], a7, a8, (int)v14); + (*(void (__thiscall **)(int *, int, int, int, int, _WORD *))(*(_DWORD *)a2 + 12))(v15, a2, a4, a5, a6, &v14[1]); + v8 = (void (__cdecl *)(_DWORD *))a3[6]; + if ( v8 ) + v8(a3); + std::wstring::basic_string(a3, v15); + v9 = v15[0]; + v10 = *(_DWORD *)(v15[0] - 12); + a3[6] = std::__facet_shims::`anonymous namespace'::__destroy_string; + a3[1] = v10; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v9 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_5: + v12 = *(_DWORD *)&v14[1]; + if ( !_CRT_MT ) + goto LABEL_6; + goto LABEL_10; + } + } + else + { + v11 = *(_DWORD *)(v9 - 4); + *(_DWORD *)(v9 - 4) = v11 - 1; + if ( v11 > 0 ) + goto LABEL_5; + } + std::wstring::_Rep::_M_destroy((void *)(v9 - 12), (int)v14 + 1); + v12 = *(_DWORD *)&v14[1]; + if ( !_CRT_MT ) + { +LABEL_6: + v13 = *(_DWORD *)(v12 - 4); + *(_DWORD *)(v12 - 4) = v13 - 1; + if ( v13 > 0 ) + return; +LABEL_11: + std::wstring::_Rep::_M_destroy((void *)(v12 - 12), (int)v15); + return; + } +LABEL_10: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v12 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_11; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DCBC0) -------------------------------------------------------- +void __cdecl std::__facet_shims::__messages_get( + int a1, + int a2, + _DWORD *a3, + int a4, + int a5, + int a6, + _WORD *a7, + int a8) +{ + void (__cdecl *v8)(_DWORD *); // eax + void *v9[2]; // [esp+60h] [ebp-38h] BYREF + char v10[16]; // [esp+68h] [ebp-30h] BYREF + void *Block[2]; // [esp+78h] [ebp-20h] BYREF + char v12; // [esp+80h] [ebp-18h] BYREF + + v9[0] = v10; + std::wstring::_M_construct(v9, a7, (int)&a7[a8]); + (*(void (__thiscall **)(void **, int, int, int, int, void **))(*(_DWORD *)a2 + 12))(Block, a2, a4, a5, a6, v9); + v8 = (void (__cdecl *)(_DWORD *))a3[6]; + if ( v8 ) + v8(a3); + *a3 = a3 + 2; + std::wstring::_M_construct(a3, (_WORD *)Block[0], (int)Block[0] + 2 * (int)Block[1]); + a3[6] = std::__facet_shims::`anonymous namespace'::__destroy_string; + if ( Block[0] != &v12 ) + operator delete(Block[0]); + if ( v9[0] != v10 ) + operator delete(v9[0]); +} + +//----- (004DCD20) -------------------------------------------------------- +struct _Unwind_Exception *__cdecl std::__facet_shims::__messages_open( + int a1, + int a2, + unsigned __int8 *a3, + size_t a4, + int a5) +{ + int v5; // eax + int v6; // ecx + int v7; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-50h] + char v10; // [esp+5Bh] [ebp-Dh] BYREF + _DWORD v11[3]; // [esp+5Ch] [ebp-Ch] BYREF + + std::string::string(v11, a3, a4, (int)&v10); + v5 = (*(int (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)a2 + 8))(a2, v11, a5); + v6 = v11[0]; + lpuexcpt = (struct _Unwind_Exception *)v5; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v11[0] - 4), 0xFFFFFFFF) > 0 ) + return lpuexcpt; + } + else + { + v7 = *(_DWORD *)(v11[0] - 4); + *(_DWORD *)(v11[0] - 4) = v7 - 1; + if ( v7 > 0 ) + return lpuexcpt; + } + std::string::_Rep::_M_destroy((void *)(v6 - 12), (int)&v10); + return lpuexcpt; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DCE30) -------------------------------------------------------- +struct _Unwind_Exception *__cdecl std::__facet_shims::__messages_open(int a1, int a2, _BYTE *a3, int a4, int a5) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + void *Block[2]; // [esp+58h] [ebp-20h] BYREF + char v8[24]; // [esp+60h] [ebp-18h] BYREF + + Block[0] = v8; + std::string::_M_construct(Block, a3, (int)&a3[a4]); + lpuexcpt = (struct _Unwind_Exception *)(*(int (__thiscall **)(int, void **, int))(*(_DWORD *)a2 + 8))(a2, Block, a5); + if ( Block[0] != v8 ) + operator delete(Block[0]); + return lpuexcpt; +} + +//----- (004DCF00) -------------------------------------------------------- +struct _Unwind_Exception *__cdecl std::__facet_shims::__messages_open( + int a1, + int a2, + unsigned __int8 *a3, + size_t a4, + int a5) +{ + int v5; // eax + int v6; // ecx + int v7; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-50h] + char v10; // [esp+5Bh] [ebp-Dh] BYREF + _DWORD v11[3]; // [esp+5Ch] [ebp-Ch] BYREF + + std::string::string(v11, a3, a4, (int)&v10); + v5 = (*(int (__thiscall **)(int, _DWORD *, int))(*(_DWORD *)a2 + 8))(a2, v11, a5); + v6 = v11[0]; + lpuexcpt = (struct _Unwind_Exception *)v5; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v11[0] - 4), 0xFFFFFFFF) > 0 ) + return lpuexcpt; + } + else + { + v7 = *(_DWORD *)(v11[0] - 4); + *(_DWORD *)(v11[0] - 4) = v7 - 1; + if ( v7 > 0 ) + return lpuexcpt; + } + std::string::_Rep::_M_destroy((void *)(v6 - 12), (int)&v10); + return lpuexcpt; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DD010) -------------------------------------------------------- +struct _Unwind_Exception *__cdecl std::__facet_shims::__messages_open( + int a1, + int a2, + _BYTE *a3, + int a4, + int a5) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + void *Block[2]; // [esp+58h] [ebp-20h] BYREF + char v8[24]; // [esp+60h] [ebp-18h] BYREF + + Block[0] = v8; + std::string::_M_construct(Block, a3, (int)&a3[a4]); + lpuexcpt = (struct _Unwind_Exception *)(*(int (__thiscall **)(int, void **, int))(*(_DWORD *)a2 + 8))(a2, Block, a5); + if ( Block[0] != v8 ) + operator delete(Block[0]); + return lpuexcpt; +} + +//----- (004DD0E0) -------------------------------------------------------- +int __cdecl std::__facet_shims::__messages_close(int a1, int a2, int a3) +{ + return (*(int (__thiscall **)(int, int))(*(_DWORD *)a2 + 16))(a2, a3); +} + +//----- (004DD100) -------------------------------------------------------- +int __cdecl std::__facet_shims::__messages_close(int a1, int a2, int a3) +{ + return (*(int (__thiscall **)(int, int))(*(_DWORD *)a2 + 16))(a2, a3); +} + +//----- (004DD120) -------------------------------------------------------- +int __cdecl std::__facet_shims::__messages_close(int a1, int a2, int a3) +{ + return (*(int (__thiscall **)(int, int))(*(_DWORD *)a2 + 16))(a2, a3); +} + +//----- (004DD140) -------------------------------------------------------- +int __cdecl std::__facet_shims::__messages_close(int a1, int a2, int a3) +{ + return (*(int (__thiscall **)(int, int))(*(_DWORD *)a2 + 16))(a2, a3); +} + +//----- (004DD160) -------------------------------------------------------- +int __cdecl std::__facet_shims::__collate_compare(int a1, int a2, int a3, int a4, int a5, int a6) +{ + return (*(int (__thiscall **)(int, int, int, int, int))(*(_DWORD *)a2 + 8))(a2, a3, a4, a5, a6); +} + +//----- (004DD1A0) -------------------------------------------------------- +int __cdecl std::__facet_shims::__collate_compare(int a1, int a2, int a3, int a4, int a5, int a6) +{ + return (*(int (__thiscall **)(int, int, int, int, int))(*(_DWORD *)a2 + 8))(a2, a3, a4, a5, a6); +} + +//----- (004DD1E0) -------------------------------------------------------- +int __cdecl std::__facet_shims::__collate_compare(int a1, int a2, int a3, int a4, int a5, int a6) +{ + return (*(int (__thiscall **)(int, int, int, int, int))(*(_DWORD *)a2 + 8))(a2, a3, a4, a5, a6); +} + +//----- (004DD220) -------------------------------------------------------- +int __cdecl std::__facet_shims::__collate_compare(int a1, int a2, int a3, int a4, int a5, int a6) +{ + return (*(int (__thiscall **)(int, int, int, int, int))(*(_DWORD *)a2 + 8))(a2, a3, a4, a5, a6); +} + +//----- (004DD260) -------------------------------------------------------- +void __cdecl std::__facet_shims::__collate_transform(int a1, int a2, _DWORD *a3, std::string *a4, int a5) +{ + void (__cdecl *v5)(_DWORD *); // eax + int v6; // ecx + int v7; // eax + int v8; // eax + const std::string *v9; // [esp+4h] [ebp-64h] + int v10; // [esp+5Bh] [ebp-Dh] BYREF + _DWORD v11[3]; // [esp+5Ch] [ebp-Ch] BYREF + + (*(void (__thiscall **)(_DWORD *, int, std::string *, int))(*(_DWORD *)a2 + 12))(v11, a2, a4, a5); + v5 = (void (__cdecl *)(_DWORD *))a3[6]; + if ( v5 ) + v5(a3); + std::string::string(a3, (std::string *)v11, v9); + v6 = v11[0]; + v7 = *(_DWORD *)(v11[0] - 12); + a3[6] = std::__facet_shims::`anonymous namespace'::__destroy_string; + a3[1] = v7; + if ( !_CRT_MT ) + { + v8 = *(_DWORD *)(v6 - 4); + *(_DWORD *)(v6 - 4) = v8 - 1; + if ( v8 > 0 ) + return; +LABEL_7: + std::string::_Rep::_M_destroy((void *)(v6 - 12), (int)&v10); + return; + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v6 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_7; +} +// 4DD2E0: variable 'v9' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DD380) -------------------------------------------------------- +void __cdecl std::__facet_shims::__collate_transform(int a1, int a2, _DWORD *a3, int a4, int a5) +{ + void (__cdecl *v5)(_DWORD *); // eax + _BYTE *v6; // edx + void *v7; // eax + char *v8; // eax + unsigned int v9; // edx + void *Src; // [esp+14h] [ebp-64h] + int Size; // [esp+18h] [ebp-60h] + unsigned int v12; // [esp+54h] [ebp-24h] BYREF + void *Block; // [esp+58h] [ebp-20h] BYREF + unsigned int v14; // [esp+5Ch] [ebp-1Ch] + char v15; // [esp+60h] [ebp-18h] BYREF + + (*(void (__thiscall **)(void **, int, int, int))(*(_DWORD *)a2 + 12))(&Block, a2, a4, a5); + v5 = (void (__cdecl *)(_DWORD *))a3[6]; + if ( v5 ) + v5(a3); + v6 = Block; + v7 = a3 + 2; + *a3 = a3 + 2; + Src = v6; + Size = v14; + if ( &v6[v14] && !v6 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v12 = v14; + if ( v14 > 0xF ) + { + v7 = std::string::_M_create(&v12, 0); + v9 = v12; + *a3 = v7; + a3[2] = v9; +LABEL_14: + memcpy(v7, Src, Size); + Size = v12; + v7 = (void *)*a3; + goto LABEL_8; + } + if ( v14 == 1 ) + { + *((_BYTE *)a3 + 8) = *v6; + goto LABEL_8; + } + if ( v14 ) + goto LABEL_14; +LABEL_8: + a3[1] = Size; + *((_BYTE *)v7 + Size) = 0; + v8 = (char *)Block; + a3[6] = std::__facet_shims::`anonymous namespace'::__destroy_string; + if ( v8 != &v15 ) + operator delete(v8); +} + +//----- (004DD510) -------------------------------------------------------- +void __cdecl std::__facet_shims::__collate_transform(int a1, int a2, _DWORD *a3, int a4, int a5) +{ + void (__cdecl *v5)(_DWORD *); // eax + int v6; // ecx + int v7; // eax + int v8; // eax + int v9; // [esp+5Bh] [ebp-Dh] BYREF + _DWORD v10[3]; // [esp+5Ch] [ebp-Ch] BYREF + + (*(void (__thiscall **)(_DWORD *, int, int, int))(*(_DWORD *)a2 + 12))(v10, a2, a4, a5); + v5 = (void (__cdecl *)(_DWORD *))a3[6]; + if ( v5 ) + v5(a3); + std::wstring::basic_string(a3, v10); + v6 = v10[0]; + v7 = *(_DWORD *)(v10[0] - 12); + a3[6] = std::__facet_shims::`anonymous namespace'::__destroy_string; + a3[1] = v7; + if ( !_CRT_MT ) + { + v8 = *(_DWORD *)(v6 - 4); + *(_DWORD *)(v6 - 4) = v8 - 1; + if ( v8 > 0 ) + return; +LABEL_7: + std::wstring::_Rep::_M_destroy((void *)(v6 - 12), (int)&v9); + return; + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v6 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_7; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DD630) -------------------------------------------------------- +void __cdecl std::__facet_shims::__collate_transform(int a1, int a2, _DWORD *a3, int a4, int a5) +{ + void (__cdecl *v5)(_DWORD *); // eax + void *v6; // edx + void *Block[2]; // [esp+58h] [ebp-20h] BYREF + char v8; // [esp+60h] [ebp-18h] BYREF + + (*(void (__thiscall **)(void **, int, int, int))(*(_DWORD *)a2 + 12))(Block, a2, a4, a5); + v5 = (void (__cdecl *)(_DWORD *))a3[6]; + if ( v5 ) + v5(a3); + v6 = Block[1]; + *a3 = a3 + 2; + std::wstring::_M_construct(a3, (_WORD *)Block[0], (int)Block[0] + 2 * (_DWORD)v6); + a3[6] = std::__facet_shims::`anonymous namespace'::__destroy_string; + if ( Block[0] != &v8 ) + operator delete(Block[0]); +} + +//----- (004DD720) -------------------------------------------------------- +int __cdecl std::__facet_shims::__time_get_dateorder(int a1, int a2) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a2 + 8))(a2); +} + +//----- (004DD730) -------------------------------------------------------- +int __cdecl std::__facet_shims::__time_get_dateorder(int a1, int a2) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a2 + 8))(a2); +} + +//----- (004DD740) -------------------------------------------------------- +int __cdecl std::__facet_shims::__time_get_dateorder(int a1, int a2) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a2 + 8))(a2); +} + +//----- (004DD750) -------------------------------------------------------- +int __cdecl std::__facet_shims::__time_get_dateorder(int a1, int a2) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a2 + 8))(a2); +} + +//----- (004DD760) -------------------------------------------------------- +void __cdecl std::__facet_shims::__numpunct_fill_cache(int a1, int *a2, int a3) +{ + int v3; // eax + int v4; // eax + int v5; // ecx + int v6; // eax + int v7; // eax + int v8; // ecx + int v9; // eax + int v10; // edx + int v11; // ecx + int v12; // eax + unsigned int v13; // [esp+Ch] [ebp-5Ch] + unsigned int v14; // [esp+Ch] [ebp-5Ch] + unsigned int v15; // [esp+Ch] [ebp-5Ch] + std::string *v16; // [esp+14h] [ebp-54h] + std::string *v17; // [esp+14h] [ebp-54h] + std::string *v18; // [esp+14h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-50h] + char v22; // [esp+5Bh] [ebp-Dh] BYREF + _DWORD v23[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_BYTE *)(a3 + 36) = (*(int (__thiscall **)(int *))(*a2 + 8))(a2); + *(_BYTE *)(a3 + 37) = (*(int (__fastcall **)(int *))(*a2 + 12))(a2); + *(_DWORD *)(a3 + 8) = 0; + *(_DWORD *)(a3 + 20) = 0; + v3 = *a2; + *(_DWORD *)(a3 + 28) = 0; + *(_BYTE *)(a3 + 100) = 1; + (*(void (__thiscall **)(_DWORD *, int *))(v3 + 16))(v23, a2); + lpuexcpt = *(struct _Unwind_Exception **)(v23[0] - 12); + v16 = (std::string *)operator new[]((unsigned int)lpuexcpt + 1); + std::string::copy(v23, v16, (size_t)lpuexcpt, 0, v13); + *((_BYTE *)lpuexcpt + (_DWORD)v16) = 0; + *(_DWORD *)(a3 + 12) = lpuexcpt; + v4 = _CRT_MT; + *(_DWORD *)(a3 + 8) = v16; + v5 = v23[0]; + if ( v4 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v23[0] - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v6 = *(_DWORD *)(v23[0] - 4); + *(_DWORD *)(v23[0] - 4) = v6 - 1; + if ( v6 > 0 ) + goto LABEL_3; + } + std::string::_Rep::_M_destroy((void *)(v5 - 12), (int)&v22); +LABEL_3: + (*(void (__thiscall **)(_DWORD *, int *))(*a2 + 20))(v23, a2); + lpuexcpta = *(struct _Unwind_Exception **)(v23[0] - 12); + v17 = (std::string *)operator new[]((unsigned int)lpuexcpta + 1); + std::string::copy(v23, v17, (size_t)lpuexcpta, 0, v14); + *((_BYTE *)lpuexcpta + (_DWORD)v17) = 0; + *(_DWORD *)(a3 + 24) = lpuexcpta; + v7 = _CRT_MT; + *(_DWORD *)(a3 + 20) = v17; + v8 = v23[0]; + if ( v7 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v23[0] - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_5; + } + else + { + v9 = *(_DWORD *)(v23[0] - 4); + *(_DWORD *)(v23[0] - 4) = v9 - 1; + if ( v9 > 0 ) + goto LABEL_5; + } + std::string::_Rep::_M_destroy((void *)(v8 - 12), (int)&v22); +LABEL_5: + (*(void (__thiscall **)(_DWORD *, int *))(*a2 + 24))(v23, a2); + lpuexcptb = *(struct _Unwind_Exception **)(v23[0] - 12); + v18 = (std::string *)operator new[]((unsigned int)lpuexcptb + 1); + std::string::copy(v23, v18, (size_t)lpuexcptb, 0, v15); + *(_DWORD *)(a3 + 28) = v18; + *(_DWORD *)(a3 + 32) = lpuexcptb; + v10 = _CRT_MT; + *((_BYTE *)lpuexcptb + (_DWORD)v18) = 0; + v11 = v23[0]; + if ( !v10 ) + { + v12 = *(_DWORD *)(v23[0] - 4); + *(_DWORD *)(v23[0] - 4) = v12 - 1; + if ( v12 > 0 ) + return; +LABEL_11: + std::string::_Rep::_M_destroy((void *)(v11 - 12), (int)&v22); + return; + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v23[0] - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_11; +} +// 4DD819: variable 'v13' is possibly undefined +// 4DD8A7: variable 'v14' is possibly undefined +// 4DD935: variable 'v15' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DDA50) -------------------------------------------------------- +void __cdecl std::__facet_shims::__numpunct_fill_cache(int a1, int *a2, int a3) +{ + int v3; // eax + char *v4; // eax + char *v5; // eax + char *v6; // eax + _BYTE *v7; // [esp+14h] [ebp-64h] + _BYTE *v8; // [esp+14h] [ebp-64h] + _BYTE *v9; // [esp+14h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-60h] + void *Block; // [esp+58h] [ebp-20h] BYREF + struct _Unwind_Exception *v14; // [esp+5Ch] [ebp-1Ch] + char v15[24]; // [esp+60h] [ebp-18h] BYREF + + *(_BYTE *)(a3 + 36) = (*(int (__thiscall **)(int *))(*a2 + 8))(a2); + *(_BYTE *)(a3 + 37) = (*(int (__fastcall **)(int *))(*a2 + 12))(a2); + *(_DWORD *)(a3 + 8) = 0; + *(_DWORD *)(a3 + 20) = 0; + v3 = *a2; + *(_DWORD *)(a3 + 28) = 0; + *(_BYTE *)(a3 + 100) = 1; + (*(void (__thiscall **)(void **, int *))(v3 + 16))(&Block, a2); + lpuexcpt = v14; + v7 = (_BYTE *)operator new[]((unsigned int)v14 + 1); + std::string::copy(&Block, v7, (size_t)lpuexcpt, 0); + *(_DWORD *)(a3 + 12) = lpuexcpt; + *((_BYTE *)lpuexcpt + (_DWORD)v7) = 0; + v4 = (char *)Block; + *(_DWORD *)(a3 + 8) = v7; + if ( v4 != v15 ) + operator delete(v4); + (*(void (__thiscall **)(void **, int *))(*a2 + 20))(&Block, a2); + lpuexcpta = v14; + v8 = (_BYTE *)operator new[]((unsigned int)v14 + 1); + std::string::copy(&Block, v8, (size_t)lpuexcpta, 0); + *(_DWORD *)(a3 + 24) = lpuexcpta; + *((_BYTE *)lpuexcpta + (_DWORD)v8) = 0; + v5 = (char *)Block; + *(_DWORD *)(a3 + 20) = v8; + if ( v5 != v15 ) + operator delete(v5); + (*(void (__thiscall **)(void **, int *))(*a2 + 24))(&Block, a2); + lpuexcptb = v14; + v9 = (_BYTE *)operator new[]((unsigned int)v14 + 1); + std::string::copy(&Block, v9, (size_t)lpuexcptb, 0); + *(_DWORD *)(a3 + 32) = lpuexcptb; + *((_BYTE *)lpuexcptb + (_DWORD)v9) = 0; + v6 = (char *)Block; + *(_DWORD *)(a3 + 28) = v9; + if ( v6 != v15 ) + operator delete(v6); +} + +//----- (004DDC80) -------------------------------------------------------- +void __cdecl std::__facet_shims::__numpunct_fill_cache(int a1, int *a2, int a3) +{ + int v3; // eax + int v4; // eax + int v5; // ecx + int v6; // eax + int v7; // eax + int v8; // ecx + int v9; // eax + int v10; // eax + int v11; // ecx + int v12; // eax + unsigned int v13; // [esp+Ch] [ebp-5Ch] + _WORD *v14; // [esp+10h] [ebp-58h] + _WORD *v15; // [esp+10h] [ebp-58h] + std::string *v16; // [esp+14h] [ebp-54h] + int v17; // [esp+14h] [ebp-54h] + int v18; // [esp+14h] [ebp-54h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-50h] + char v22; // [esp+5Bh] [ebp-Dh] BYREF + int v23[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_WORD *)(a3 + 36) = (*(int (__thiscall **)(int *))(*a2 + 8))(a2); + *(_WORD *)(a3 + 38) = (*(int (__fastcall **)(int *))(*a2 + 12))(a2); + *(_DWORD *)(a3 + 8) = 0; + *(_DWORD *)(a3 + 20) = 0; + v3 = *a2; + *(_DWORD *)(a3 + 28) = 0; + *(_BYTE *)(a3 + 164) = 1; + (*(void (__thiscall **)(int *, int *))(v3 + 16))(v23, a2); + lpuexcptb = *(struct _Unwind_Exception **)(v23[0] - 12); + v16 = (std::string *)operator new[]((unsigned int)lpuexcptb + 1); + std::string::copy(v23, v16, (size_t)lpuexcptb, 0, v13); + *((_BYTE *)lpuexcptb + (_DWORD)v16) = 0; + *(_DWORD *)(a3 + 12) = lpuexcptb; + v4 = _CRT_MT; + *(_DWORD *)(a3 + 8) = v16; + v5 = v23[0]; + if ( v4 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v23[0] - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v6 = *(_DWORD *)(v23[0] - 4); + *(_DWORD *)(v23[0] - 4) = v6 - 1; + if ( v6 > 0 ) + goto LABEL_3; + } + std::string::_Rep::_M_destroy((void *)(v5 - 12), (int)&v22); +LABEL_3: + (*(void (__thiscall **)(int *, int *))(*a2 + 20))(v23, a2); + lpuexcpt = *(struct _Unwind_Exception **)(v23[0] - 12); + v7 = (int)lpuexcpt + 1; + if ( (unsigned int)lpuexcpt + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v17 = v7; + v14 = (_WORD *)operator new[](2 * v7); + std::wstring::copy(v23, v14, (unsigned int)lpuexcpt, 0); + v14[v17 - 1] = 0; + *(_DWORD *)(a3 + 20) = v14; + v8 = v23[0]; + *(_DWORD *)(a3 + 24) = lpuexcpt; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v8 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_6; + } + else + { + v9 = *(_DWORD *)(v8 - 4); + *(_DWORD *)(v8 - 4) = v9 - 1; + if ( v9 > 0 ) + goto LABEL_6; + } + std::wstring::_Rep::_M_destroy((void *)(v8 - 12), (int)&v22); +LABEL_6: + (*(void (__thiscall **)(int *, int *))(*a2 + 24))(v23, a2); + lpuexcpta = *(struct _Unwind_Exception **)(v23[0] - 12); + v10 = (int)lpuexcpta + 1; + if ( (unsigned int)lpuexcpta + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v18 = v10; + v15 = (_WORD *)operator new[](2 * v10); + std::wstring::copy(v23, v15, (unsigned int)lpuexcpta, 0); + v15[v18 - 1] = 0; + *(_DWORD *)(a3 + 28) = v15; + v11 = v23[0]; + *(_DWORD *)(a3 + 32) = lpuexcpta; + if ( !_CRT_MT ) + { + v12 = *(_DWORD *)(v11 - 4); + *(_DWORD *)(v11 - 4) = v12 - 1; + if ( v12 > 0 ) + return; +LABEL_13: + std::wstring::_Rep::_M_destroy((void *)(v11 - 12), (int)&v22); + return; + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v11 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_13; +} +// 4DDD3E: variable 'v13' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DDFC0) -------------------------------------------------------- +void __cdecl std::__facet_shims::__numpunct_fill_cache(int a1, int *a2, int a3) +{ + int v3; // eax + char *v4; // eax + int v5; // eax + int v6; // eax + _WORD *v7; // [esp+10h] [ebp-68h] + _WORD *v8; // [esp+10h] [ebp-68h] + _BYTE *v9; // [esp+14h] [ebp-64h] + int v10; // [esp+14h] [ebp-64h] + int v11; // [esp+14h] [ebp-64h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-60h] + void *Block; // [esp+58h] [ebp-20h] BYREF + struct _Unwind_Exception *v16; // [esp+5Ch] [ebp-1Ch] + char v17[24]; // [esp+60h] [ebp-18h] BYREF + + *(_WORD *)(a3 + 36) = (*(int (__thiscall **)(int *))(*a2 + 8))(a2); + *(_WORD *)(a3 + 38) = (*(int (__fastcall **)(int *))(*a2 + 12))(a2); + *(_DWORD *)(a3 + 8) = 0; + *(_DWORD *)(a3 + 20) = 0; + v3 = *a2; + *(_DWORD *)(a3 + 28) = 0; + *(_BYTE *)(a3 + 164) = 1; + (*(void (__thiscall **)(void **, int *))(v3 + 16))(&Block, a2); + lpuexcptb = v16; + v9 = (_BYTE *)operator new[]((unsigned int)v16 + 1); + std::string::copy(&Block, v9, (size_t)lpuexcptb, 0); + *(_DWORD *)(a3 + 12) = lpuexcptb; + *((_BYTE *)lpuexcptb + (_DWORD)v9) = 0; + v4 = (char *)Block; + *(_DWORD *)(a3 + 8) = v9; + if ( v4 != v17 ) + operator delete(v4); + (*(void (__thiscall **)(void **, int *))(*a2 + 20))(&Block, a2); + lpuexcpt = v16; + v5 = (int)v16 + 1; + if ( (unsigned int)v16 + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v10 = v5; + v7 = (_WORD *)operator new[](2 * v5); + std::wstring::copy(&Block, v7, (unsigned int)lpuexcpt, 0); + v7[v10 - 1] = 0; + *(_DWORD *)(a3 + 20) = v7; + *(_DWORD *)(a3 + 24) = lpuexcpt; + if ( Block != v17 ) + operator delete(Block); + (*(void (__thiscall **)(void **, int *))(*a2 + 24))(&Block, a2); + lpuexcpta = v16; + v6 = (int)v16 + 1; + if ( (unsigned int)v16 + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v11 = v6; + v8 = (_WORD *)operator new[](2 * v6); + std::wstring::copy(&Block, v8, (unsigned int)lpuexcpta, 0); + v8[v11 - 1] = 0; + *(_DWORD *)(a3 + 28) = v8; + *(_DWORD *)(a3 + 32) = lpuexcpta; + if ( Block != v17 ) + operator delete(Block); +} + +//----- (004DE230) -------------------------------------------------------- +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3) +{ + int v3; // eax + int v4; // eax + int v5; // ecx + int v6; // eax + int v7; // eax + int v8; // ecx + int v9; // eax + int v10; // eax + int v11; // ecx + int v12; // eax + int v13; // edx + int v14; // ecx + int v15; // eax + unsigned int v16; // [esp+Ch] [ebp-5Ch] + unsigned int v17; // [esp+Ch] [ebp-5Ch] + unsigned int v18; // [esp+Ch] [ebp-5Ch] + unsigned int v19; // [esp+Ch] [ebp-5Ch] + std::string *v20; // [esp+14h] [ebp-54h] + std::string *v21; // [esp+14h] [ebp-54h] + std::string *v22; // [esp+14h] [ebp-54h] + std::string *v23; // [esp+14h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcptc; // [esp+18h] [ebp-50h] + char v28; // [esp+5Bh] [ebp-Dh] BYREF + _DWORD v29[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_BYTE *)(a3 + 17) = (*(int (__thiscall **)(int *))(*a2 + 8))(a2); + *(_BYTE *)(a3 + 18) = (*(int (__fastcall **)(int *))(*a2 + 12))(a2); + *(_DWORD *)(a3 + 44) = (*(int (__fastcall **)(int *))(*a2 + 32))(a2); + *(_DWORD *)(a3 + 8) = 0; + *(_DWORD *)(a3 + 20) = 0; + v3 = *a2; + *(_DWORD *)(a3 + 28) = 0; + *(_DWORD *)(a3 + 36) = 0; + *(_BYTE *)(a3 + 67) = 1; + (*(void (__thiscall **)(_DWORD *, int *))(v3 + 16))(v29, a2); + lpuexcpt = *(struct _Unwind_Exception **)(v29[0] - 12); + v20 = (std::string *)operator new[]((unsigned int)lpuexcpt + 1); + std::string::copy(v29, v20, (size_t)lpuexcpt, 0, v16); + *((_BYTE *)lpuexcpt + (_DWORD)v20) = 0; + *(_DWORD *)(a3 + 12) = lpuexcpt; + v4 = _CRT_MT; + *(_DWORD *)(a3 + 8) = v20; + v5 = v29[0]; + if ( v4 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v29[0] - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v6 = *(_DWORD *)(v29[0] - 4); + *(_DWORD *)(v29[0] - 4) = v6 - 1; + if ( v6 > 0 ) + goto LABEL_3; + } + std::string::_Rep::_M_destroy((void *)(v5 - 12), (int)&v28); +LABEL_3: + (*(void (__thiscall **)(_DWORD *, int *))(*a2 + 20))(v29, a2); + lpuexcpta = *(struct _Unwind_Exception **)(v29[0] - 12); + v21 = (std::string *)operator new[]((unsigned int)lpuexcpta + 1); + std::string::copy(v29, v21, (size_t)lpuexcpta, 0, v17); + *((_BYTE *)lpuexcpta + (_DWORD)v21) = 0; + *(_DWORD *)(a3 + 24) = lpuexcpta; + v7 = _CRT_MT; + *(_DWORD *)(a3 + 20) = v21; + v8 = v29[0]; + if ( v7 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v29[0] - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_5; + } + else + { + v9 = *(_DWORD *)(v29[0] - 4); + *(_DWORD *)(v29[0] - 4) = v9 - 1; + if ( v9 > 0 ) + goto LABEL_5; + } + std::string::_Rep::_M_destroy((void *)(v8 - 12), (int)&v28); +LABEL_5: + (*(void (__thiscall **)(_DWORD *, int *))(*a2 + 24))(v29, a2); + lpuexcptb = *(struct _Unwind_Exception **)(v29[0] - 12); + v22 = (std::string *)operator new[]((unsigned int)lpuexcptb + 1); + std::string::copy(v29, v22, (size_t)lpuexcptb, 0, v18); + *((_BYTE *)lpuexcptb + (_DWORD)v22) = 0; + *(_DWORD *)(a3 + 32) = lpuexcptb; + v10 = _CRT_MT; + *(_DWORD *)(a3 + 28) = v22; + v11 = v29[0]; + if ( v10 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v29[0] - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_7; + } + else + { + v12 = *(_DWORD *)(v29[0] - 4); + *(_DWORD *)(v29[0] - 4) = v12 - 1; + if ( v12 > 0 ) + goto LABEL_7; + } + std::string::_Rep::_M_destroy((void *)(v11 - 12), (int)&v28); +LABEL_7: + (*(void (__thiscall **)(_DWORD *, int *))(*a2 + 28))(v29, a2); + lpuexcptc = *(struct _Unwind_Exception **)(v29[0] - 12); + v23 = (std::string *)operator new[]((unsigned int)lpuexcptc + 1); + std::string::copy(v29, v23, (size_t)lpuexcptc, 0, v19); + *(_DWORD *)(a3 + 36) = v23; + *(_DWORD *)(a3 + 40) = lpuexcptc; + v13 = _CRT_MT; + *((_BYTE *)lpuexcptc + (_DWORD)v23) = 0; + v14 = v29[0]; + if ( v13 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v29[0] - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_9; +LABEL_13: + std::string::_Rep::_M_destroy((void *)(v14 - 12), (int)&v28); + goto LABEL_9; + } + v15 = *(_DWORD *)(v29[0] - 4); + *(_DWORD *)(v29[0] - 4) = v15 - 1; + if ( v15 <= 0 ) + goto LABEL_13; +LABEL_9: + *(_DWORD *)(a3 + 48) = (*(int (__fastcall **)(int *))(*a2 + 36))(a2); + *(_DWORD *)(a3 + 52) = (*(int (__fastcall **)(int *))(*a2 + 40))(a2); +} +// 4DE301: variable 'v16' is possibly undefined +// 4DE38F: variable 'v17' is possibly undefined +// 4DE41D: variable 'v18' is possibly undefined +// 4DE4AB: variable 'v19' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DE610) -------------------------------------------------------- +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3) +{ + int v3; // eax + char *v4; // eax + char *v5; // eax + char *v6; // eax + char *v7; // eax + _BYTE *v8; // [esp+14h] [ebp-64h] + _BYTE *v9; // [esp+14h] [ebp-64h] + _BYTE *v10; // [esp+14h] [ebp-64h] + _BYTE *v11; // [esp+14h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcptc; // [esp+18h] [ebp-60h] + void *Block; // [esp+58h] [ebp-20h] BYREF + struct _Unwind_Exception *v17; // [esp+5Ch] [ebp-1Ch] + char v18[24]; // [esp+60h] [ebp-18h] BYREF + + *(_BYTE *)(a3 + 17) = (*(int (__thiscall **)(int *))(*a2 + 8))(a2); + *(_BYTE *)(a3 + 18) = (*(int (__fastcall **)(int *))(*a2 + 12))(a2); + *(_DWORD *)(a3 + 44) = (*(int (__fastcall **)(int *))(*a2 + 32))(a2); + *(_DWORD *)(a3 + 8) = 0; + *(_DWORD *)(a3 + 20) = 0; + v3 = *a2; + *(_DWORD *)(a3 + 28) = 0; + *(_DWORD *)(a3 + 36) = 0; + *(_BYTE *)(a3 + 67) = 1; + (*(void (__thiscall **)(void **, int *))(v3 + 16))(&Block, a2); + lpuexcpt = v17; + v8 = (_BYTE *)operator new[]((unsigned int)v17 + 1); + std::string::copy(&Block, v8, (size_t)lpuexcpt, 0); + *(_DWORD *)(a3 + 12) = lpuexcpt; + *((_BYTE *)lpuexcpt + (_DWORD)v8) = 0; + v4 = (char *)Block; + *(_DWORD *)(a3 + 8) = v8; + if ( v4 != v18 ) + operator delete(v4); + (*(void (__thiscall **)(void **, int *))(*a2 + 20))(&Block, a2); + lpuexcpta = v17; + v9 = (_BYTE *)operator new[]((unsigned int)v17 + 1); + std::string::copy(&Block, v9, (size_t)lpuexcpta, 0); + *(_DWORD *)(a3 + 24) = lpuexcpta; + *((_BYTE *)lpuexcpta + (_DWORD)v9) = 0; + v5 = (char *)Block; + *(_DWORD *)(a3 + 20) = v9; + if ( v5 != v18 ) + operator delete(v5); + (*(void (__thiscall **)(void **, int *))(*a2 + 24))(&Block, a2); + lpuexcptb = v17; + v10 = (_BYTE *)operator new[]((unsigned int)v17 + 1); + std::string::copy(&Block, v10, (size_t)lpuexcptb, 0); + *(_DWORD *)(a3 + 32) = lpuexcptb; + *((_BYTE *)lpuexcptb + (_DWORD)v10) = 0; + v6 = (char *)Block; + *(_DWORD *)(a3 + 28) = v10; + if ( v6 != v18 ) + operator delete(v6); + (*(void (__thiscall **)(void **, int *))(*a2 + 28))(&Block, a2); + lpuexcptc = v17; + v11 = (_BYTE *)operator new[]((unsigned int)v17 + 1); + std::string::copy(&Block, v11, (size_t)lpuexcptc, 0); + *(_DWORD *)(a3 + 40) = lpuexcptc; + *((_BYTE *)lpuexcptc + (_DWORD)v11) = 0; + v7 = (char *)Block; + *(_DWORD *)(a3 + 36) = v11; + if ( v7 != v18 ) + operator delete(v7); + *(_DWORD *)(a3 + 48) = (*(int (__fastcall **)(int *))(*a2 + 36))(a2); + *(_DWORD *)(a3 + 52) = (*(int (__fastcall **)(int *))(*a2 + 40))(a2); +} + +//----- (004DE900) -------------------------------------------------------- +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3) +{ + int v3; // eax + int v4; // eax + int v5; // ecx + int v6; // eax + int v7; // eax + int v8; // ecx + int v9; // eax + int v10; // eax + int v11; // ecx + int v12; // eax + int v13; // edx + int v14; // ecx + int v15; // eax + unsigned int v16; // [esp+Ch] [ebp-5Ch] + unsigned int v17; // [esp+Ch] [ebp-5Ch] + unsigned int v18; // [esp+Ch] [ebp-5Ch] + unsigned int v19; // [esp+Ch] [ebp-5Ch] + std::string *v20; // [esp+14h] [ebp-54h] + std::string *v21; // [esp+14h] [ebp-54h] + std::string *v22; // [esp+14h] [ebp-54h] + std::string *v23; // [esp+14h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcptc; // [esp+18h] [ebp-50h] + char v28; // [esp+5Bh] [ebp-Dh] BYREF + _DWORD v29[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_BYTE *)(a3 + 17) = (*(int (__thiscall **)(int *))(*a2 + 8))(a2); + *(_BYTE *)(a3 + 18) = (*(int (__fastcall **)(int *))(*a2 + 12))(a2); + *(_DWORD *)(a3 + 44) = (*(int (__fastcall **)(int *))(*a2 + 32))(a2); + *(_DWORD *)(a3 + 8) = 0; + *(_DWORD *)(a3 + 20) = 0; + v3 = *a2; + *(_DWORD *)(a3 + 28) = 0; + *(_DWORD *)(a3 + 36) = 0; + *(_BYTE *)(a3 + 67) = 1; + (*(void (__thiscall **)(_DWORD *, int *))(v3 + 16))(v29, a2); + lpuexcpt = *(struct _Unwind_Exception **)(v29[0] - 12); + v20 = (std::string *)operator new[]((unsigned int)lpuexcpt + 1); + std::string::copy(v29, v20, (size_t)lpuexcpt, 0, v16); + *((_BYTE *)lpuexcpt + (_DWORD)v20) = 0; + *(_DWORD *)(a3 + 12) = lpuexcpt; + v4 = _CRT_MT; + *(_DWORD *)(a3 + 8) = v20; + v5 = v29[0]; + if ( v4 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v29[0] - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v6 = *(_DWORD *)(v29[0] - 4); + *(_DWORD *)(v29[0] - 4) = v6 - 1; + if ( v6 > 0 ) + goto LABEL_3; + } + std::string::_Rep::_M_destroy((void *)(v5 - 12), (int)&v28); +LABEL_3: + (*(void (__thiscall **)(_DWORD *, int *))(*a2 + 20))(v29, a2); + lpuexcpta = *(struct _Unwind_Exception **)(v29[0] - 12); + v21 = (std::string *)operator new[]((unsigned int)lpuexcpta + 1); + std::string::copy(v29, v21, (size_t)lpuexcpta, 0, v17); + *((_BYTE *)lpuexcpta + (_DWORD)v21) = 0; + *(_DWORD *)(a3 + 24) = lpuexcpta; + v7 = _CRT_MT; + *(_DWORD *)(a3 + 20) = v21; + v8 = v29[0]; + if ( v7 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v29[0] - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_5; + } + else + { + v9 = *(_DWORD *)(v29[0] - 4); + *(_DWORD *)(v29[0] - 4) = v9 - 1; + if ( v9 > 0 ) + goto LABEL_5; + } + std::string::_Rep::_M_destroy((void *)(v8 - 12), (int)&v28); +LABEL_5: + (*(void (__thiscall **)(_DWORD *, int *))(*a2 + 24))(v29, a2); + lpuexcptb = *(struct _Unwind_Exception **)(v29[0] - 12); + v22 = (std::string *)operator new[]((unsigned int)lpuexcptb + 1); + std::string::copy(v29, v22, (size_t)lpuexcptb, 0, v18); + *((_BYTE *)lpuexcptb + (_DWORD)v22) = 0; + *(_DWORD *)(a3 + 32) = lpuexcptb; + v10 = _CRT_MT; + *(_DWORD *)(a3 + 28) = v22; + v11 = v29[0]; + if ( v10 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v29[0] - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_7; + } + else + { + v12 = *(_DWORD *)(v29[0] - 4); + *(_DWORD *)(v29[0] - 4) = v12 - 1; + if ( v12 > 0 ) + goto LABEL_7; + } + std::string::_Rep::_M_destroy((void *)(v11 - 12), (int)&v28); +LABEL_7: + (*(void (__thiscall **)(_DWORD *, int *))(*a2 + 28))(v29, a2); + lpuexcptc = *(struct _Unwind_Exception **)(v29[0] - 12); + v23 = (std::string *)operator new[]((unsigned int)lpuexcptc + 1); + std::string::copy(v29, v23, (size_t)lpuexcptc, 0, v19); + *(_DWORD *)(a3 + 36) = v23; + *(_DWORD *)(a3 + 40) = lpuexcptc; + v13 = _CRT_MT; + *((_BYTE *)lpuexcptc + (_DWORD)v23) = 0; + v14 = v29[0]; + if ( v13 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v29[0] - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_9; +LABEL_13: + std::string::_Rep::_M_destroy((void *)(v14 - 12), (int)&v28); + goto LABEL_9; + } + v15 = *(_DWORD *)(v29[0] - 4); + *(_DWORD *)(v29[0] - 4) = v15 - 1; + if ( v15 <= 0 ) + goto LABEL_13; +LABEL_9: + *(_DWORD *)(a3 + 48) = (*(int (__fastcall **)(int *))(*a2 + 36))(a2); + *(_DWORD *)(a3 + 52) = (*(int (__fastcall **)(int *))(*a2 + 40))(a2); +} +// 4DE9D1: variable 'v16' is possibly undefined +// 4DEA5F: variable 'v17' is possibly undefined +// 4DEAED: variable 'v18' is possibly undefined +// 4DEB7B: variable 'v19' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DECE0) -------------------------------------------------------- +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3) +{ + int v3; // eax + char *v4; // eax + char *v5; // eax + char *v6; // eax + char *v7; // eax + _BYTE *v8; // [esp+14h] [ebp-64h] + _BYTE *v9; // [esp+14h] [ebp-64h] + _BYTE *v10; // [esp+14h] [ebp-64h] + _BYTE *v11; // [esp+14h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcptc; // [esp+18h] [ebp-60h] + void *Block; // [esp+58h] [ebp-20h] BYREF + struct _Unwind_Exception *v17; // [esp+5Ch] [ebp-1Ch] + char v18[24]; // [esp+60h] [ebp-18h] BYREF + + *(_BYTE *)(a3 + 17) = (*(int (__thiscall **)(int *))(*a2 + 8))(a2); + *(_BYTE *)(a3 + 18) = (*(int (__fastcall **)(int *))(*a2 + 12))(a2); + *(_DWORD *)(a3 + 44) = (*(int (__fastcall **)(int *))(*a2 + 32))(a2); + *(_DWORD *)(a3 + 8) = 0; + *(_DWORD *)(a3 + 20) = 0; + v3 = *a2; + *(_DWORD *)(a3 + 28) = 0; + *(_DWORD *)(a3 + 36) = 0; + *(_BYTE *)(a3 + 67) = 1; + (*(void (__thiscall **)(void **, int *))(v3 + 16))(&Block, a2); + lpuexcpt = v17; + v8 = (_BYTE *)operator new[]((unsigned int)v17 + 1); + std::string::copy(&Block, v8, (size_t)lpuexcpt, 0); + *(_DWORD *)(a3 + 12) = lpuexcpt; + *((_BYTE *)lpuexcpt + (_DWORD)v8) = 0; + v4 = (char *)Block; + *(_DWORD *)(a3 + 8) = v8; + if ( v4 != v18 ) + operator delete(v4); + (*(void (__thiscall **)(void **, int *))(*a2 + 20))(&Block, a2); + lpuexcpta = v17; + v9 = (_BYTE *)operator new[]((unsigned int)v17 + 1); + std::string::copy(&Block, v9, (size_t)lpuexcpta, 0); + *(_DWORD *)(a3 + 24) = lpuexcpta; + *((_BYTE *)lpuexcpta + (_DWORD)v9) = 0; + v5 = (char *)Block; + *(_DWORD *)(a3 + 20) = v9; + if ( v5 != v18 ) + operator delete(v5); + (*(void (__thiscall **)(void **, int *))(*a2 + 24))(&Block, a2); + lpuexcptb = v17; + v10 = (_BYTE *)operator new[]((unsigned int)v17 + 1); + std::string::copy(&Block, v10, (size_t)lpuexcptb, 0); + *(_DWORD *)(a3 + 32) = lpuexcptb; + *((_BYTE *)lpuexcptb + (_DWORD)v10) = 0; + v6 = (char *)Block; + *(_DWORD *)(a3 + 28) = v10; + if ( v6 != v18 ) + operator delete(v6); + (*(void (__thiscall **)(void **, int *))(*a2 + 28))(&Block, a2); + lpuexcptc = v17; + v11 = (_BYTE *)operator new[]((unsigned int)v17 + 1); + std::string::copy(&Block, v11, (size_t)lpuexcptc, 0); + *(_DWORD *)(a3 + 40) = lpuexcptc; + *((_BYTE *)lpuexcptc + (_DWORD)v11) = 0; + v7 = (char *)Block; + *(_DWORD *)(a3 + 36) = v11; + if ( v7 != v18 ) + operator delete(v7); + *(_DWORD *)(a3 + 48) = (*(int (__fastcall **)(int *))(*a2 + 36))(a2); + *(_DWORD *)(a3 + 52) = (*(int (__fastcall **)(int *))(*a2 + 40))(a2); +} + +//----- (004DEFD0) -------------------------------------------------------- +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3) +{ + int v3; // eax + int v4; // eax + int v5; // ecx + int v6; // eax + int v7; // eax + int v8; // ecx + int v9; // eax + int v10; // eax + int v11; // ecx + int v12; // eax + int v13; // eax + int v14; // ecx + int v15; // eax + unsigned int v16; // [esp+Ch] [ebp-5Ch] + _WORD *v17; // [esp+10h] [ebp-58h] + _WORD *v18; // [esp+10h] [ebp-58h] + _WORD *v19; // [esp+10h] [ebp-58h] + std::string *v20; // [esp+14h] [ebp-54h] + int v21; // [esp+14h] [ebp-54h] + int v22; // [esp+14h] [ebp-54h] + int v23; // [esp+14h] [ebp-54h] + struct _Unwind_Exception *lpuexcptc; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-50h] + char v28; // [esp+5Bh] [ebp-Dh] BYREF + int v29[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_WORD *)(a3 + 18) = (*(int (__thiscall **)(int *))(*a2 + 8))(a2); + *(_WORD *)(a3 + 20) = (*(int (__fastcall **)(int *))(*a2 + 12))(a2); + *(_DWORD *)(a3 + 48) = (*(int (__fastcall **)(int *))(*a2 + 32))(a2); + *(_DWORD *)(a3 + 8) = 0; + *(_DWORD *)(a3 + 24) = 0; + v3 = *a2; + *(_DWORD *)(a3 + 32) = 0; + *(_DWORD *)(a3 + 40) = 0; + *(_BYTE *)(a3 + 82) = 1; + (*(void (__thiscall **)(int *, int *))(v3 + 16))(v29, a2); + lpuexcptc = *(struct _Unwind_Exception **)(v29[0] - 12); + v20 = (std::string *)operator new[]((unsigned int)lpuexcptc + 1); + std::string::copy(v29, v20, (size_t)lpuexcptc, 0, v16); + *((_BYTE *)lpuexcptc + (_DWORD)v20) = 0; + *(_DWORD *)(a3 + 12) = lpuexcptc; + v4 = _CRT_MT; + *(_DWORD *)(a3 + 8) = v20; + v5 = v29[0]; + if ( v4 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v29[0] - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v6 = *(_DWORD *)(v29[0] - 4); + *(_DWORD *)(v29[0] - 4) = v6 - 1; + if ( v6 > 0 ) + goto LABEL_3; + } + std::string::_Rep::_M_destroy((void *)(v5 - 12), (int)&v28); +LABEL_3: + (*(void (__thiscall **)(int *, int *))(*a2 + 20))(v29, a2); + lpuexcpt = *(struct _Unwind_Exception **)(v29[0] - 12); + v7 = (int)lpuexcpt + 1; + if ( (unsigned int)lpuexcpt + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v21 = v7; + v17 = (_WORD *)operator new[](2 * v7); + std::wstring::copy(v29, v17, (unsigned int)lpuexcpt, 0); + v17[v21 - 1] = 0; + *(_DWORD *)(a3 + 24) = v17; + v8 = v29[0]; + *(_DWORD *)(a3 + 28) = lpuexcpt; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v8 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_6; + } + else + { + v9 = *(_DWORD *)(v8 - 4); + *(_DWORD *)(v8 - 4) = v9 - 1; + if ( v9 > 0 ) + goto LABEL_6; + } + std::wstring::_Rep::_M_destroy((void *)(v8 - 12), (int)&v28); +LABEL_6: + (*(void (__thiscall **)(int *, int *))(*a2 + 24))(v29, a2); + lpuexcpta = *(struct _Unwind_Exception **)(v29[0] - 12); + v10 = (int)lpuexcpta + 1; + if ( (unsigned int)lpuexcpta + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v22 = v10; + v18 = (_WORD *)operator new[](2 * v10); + std::wstring::copy(v29, v18, (unsigned int)lpuexcpta, 0); + v18[v22 - 1] = 0; + *(_DWORD *)(a3 + 32) = v18; + v11 = v29[0]; + *(_DWORD *)(a3 + 36) = lpuexcpta; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v11 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_9; + } + else + { + v12 = *(_DWORD *)(v11 - 4); + *(_DWORD *)(v11 - 4) = v12 - 1; + if ( v12 > 0 ) + goto LABEL_9; + } + std::wstring::_Rep::_M_destroy((void *)(v11 - 12), (int)&v28); +LABEL_9: + (*(void (__thiscall **)(int *, int *))(*a2 + 28))(v29, a2); + lpuexcptb = *(struct _Unwind_Exception **)(v29[0] - 12); + v13 = (int)lpuexcptb + 1; + if ( (unsigned int)lpuexcptb + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v23 = v13; + v19 = (_WORD *)operator new[](2 * v13); + std::wstring::copy(v29, v19, (unsigned int)lpuexcptb, 0); + v19[v23 - 1] = 0; + *(_DWORD *)(a3 + 40) = v19; + v14 = v29[0]; + *(_DWORD *)(a3 + 44) = lpuexcptb; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v14 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_12; +LABEL_16: + std::wstring::_Rep::_M_destroy((void *)(v14 - 12), (int)&v28); + goto LABEL_12; + } + v15 = *(_DWORD *)(v14 - 4); + *(_DWORD *)(v14 - 4) = v15 - 1; + if ( v15 <= 0 ) + goto LABEL_16; +LABEL_12: + *(_DWORD *)(a3 + 52) = (*(int (__fastcall **)(int *))(*a2 + 36))(a2); + *(_DWORD *)(a3 + 56) = (*(int (__fastcall **)(int *))(*a2 + 40))(a2); +} +// 4DF0A3: variable 'v16' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DF430) -------------------------------------------------------- +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3) +{ + int v3; // eax + char *v4; // eax + int v5; // eax + int v6; // eax + int v7; // eax + _WORD *v8; // [esp+10h] [ebp-68h] + _WORD *v9; // [esp+10h] [ebp-68h] + _WORD *v10; // [esp+10h] [ebp-68h] + _BYTE *v11; // [esp+14h] [ebp-64h] + int v12; // [esp+14h] [ebp-64h] + int v13; // [esp+14h] [ebp-64h] + int v14; // [esp+14h] [ebp-64h] + struct _Unwind_Exception *lpuexcptc; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-60h] + void *Block; // [esp+58h] [ebp-20h] BYREF + struct _Unwind_Exception *v20; // [esp+5Ch] [ebp-1Ch] + char v21[24]; // [esp+60h] [ebp-18h] BYREF + + *(_WORD *)(a3 + 18) = (*(int (__thiscall **)(int *))(*a2 + 8))(a2); + *(_WORD *)(a3 + 20) = (*(int (__fastcall **)(int *))(*a2 + 12))(a2); + *(_DWORD *)(a3 + 48) = (*(int (__fastcall **)(int *))(*a2 + 32))(a2); + *(_DWORD *)(a3 + 8) = 0; + *(_DWORD *)(a3 + 24) = 0; + v3 = *a2; + *(_DWORD *)(a3 + 32) = 0; + *(_DWORD *)(a3 + 40) = 0; + *(_BYTE *)(a3 + 82) = 1; + (*(void (__thiscall **)(void **, int *))(v3 + 16))(&Block, a2); + lpuexcptc = v20; + v11 = (_BYTE *)operator new[]((unsigned int)v20 + 1); + std::string::copy(&Block, v11, (size_t)lpuexcptc, 0); + *(_DWORD *)(a3 + 12) = lpuexcptc; + *((_BYTE *)lpuexcptc + (_DWORD)v11) = 0; + v4 = (char *)Block; + *(_DWORD *)(a3 + 8) = v11; + if ( v4 != v21 ) + operator delete(v4); + (*(void (__thiscall **)(void **, int *))(*a2 + 20))(&Block, a2); + lpuexcpt = v20; + v5 = (int)v20 + 1; + if ( (unsigned int)v20 + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v12 = v5; + v8 = (_WORD *)operator new[](2 * v5); + std::wstring::copy(&Block, v8, (unsigned int)lpuexcpt, 0); + v8[v12 - 1] = 0; + *(_DWORD *)(a3 + 24) = v8; + *(_DWORD *)(a3 + 28) = lpuexcpt; + if ( Block != v21 ) + operator delete(Block); + (*(void (__thiscall **)(void **, int *))(*a2 + 24))(&Block, a2); + lpuexcpta = v20; + v6 = (int)v20 + 1; + if ( (unsigned int)v20 + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v13 = v6; + v9 = (_WORD *)operator new[](2 * v6); + std::wstring::copy(&Block, v9, (unsigned int)lpuexcpta, 0); + v9[v13 - 1] = 0; + *(_DWORD *)(a3 + 32) = v9; + *(_DWORD *)(a3 + 36) = lpuexcpta; + if ( Block != v21 ) + operator delete(Block); + (*(void (__thiscall **)(void **, int *))(*a2 + 28))(&Block, a2); + lpuexcptb = v20; + v7 = (int)v20 + 1; + if ( (unsigned int)v20 + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v14 = v7; + v10 = (_WORD *)operator new[](2 * v7); + std::wstring::copy(&Block, v10, (unsigned int)lpuexcptb, 0); + v10[v14 - 1] = 0; + *(_DWORD *)(a3 + 40) = v10; + *(_DWORD *)(a3 + 44) = lpuexcptb; + if ( Block != v21 ) + operator delete(Block); + *(_DWORD *)(a3 + 52) = (*(int (__fastcall **)(int *))(*a2 + 36))(a2); + *(_DWORD *)(a3 + 56) = (*(int (__fastcall **)(int *))(*a2 + 40))(a2); +} + +//----- (004DF790) -------------------------------------------------------- +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3) +{ + int v3; // eax + int v4; // eax + int v5; // ecx + int v6; // eax + int v7; // eax + int v8; // ecx + int v9; // eax + int v10; // eax + int v11; // ecx + int v12; // eax + int v13; // eax + int v14; // ecx + int v15; // eax + unsigned int v16; // [esp+Ch] [ebp-5Ch] + _WORD *v17; // [esp+10h] [ebp-58h] + _WORD *v18; // [esp+10h] [ebp-58h] + _WORD *v19; // [esp+10h] [ebp-58h] + std::string *v20; // [esp+14h] [ebp-54h] + int v21; // [esp+14h] [ebp-54h] + int v22; // [esp+14h] [ebp-54h] + int v23; // [esp+14h] [ebp-54h] + struct _Unwind_Exception *lpuexcptc; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-50h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-50h] + char v28; // [esp+5Bh] [ebp-Dh] BYREF + int v29[3]; // [esp+5Ch] [ebp-Ch] BYREF + + *(_WORD *)(a3 + 18) = (*(int (__thiscall **)(int *))(*a2 + 8))(a2); + *(_WORD *)(a3 + 20) = (*(int (__fastcall **)(int *))(*a2 + 12))(a2); + *(_DWORD *)(a3 + 48) = (*(int (__fastcall **)(int *))(*a2 + 32))(a2); + *(_DWORD *)(a3 + 8) = 0; + *(_DWORD *)(a3 + 24) = 0; + v3 = *a2; + *(_DWORD *)(a3 + 32) = 0; + *(_DWORD *)(a3 + 40) = 0; + *(_BYTE *)(a3 + 82) = 1; + (*(void (__thiscall **)(int *, int *))(v3 + 16))(v29, a2); + lpuexcptc = *(struct _Unwind_Exception **)(v29[0] - 12); + v20 = (std::string *)operator new[]((unsigned int)lpuexcptc + 1); + std::string::copy(v29, v20, (size_t)lpuexcptc, 0, v16); + *((_BYTE *)lpuexcptc + (_DWORD)v20) = 0; + *(_DWORD *)(a3 + 12) = lpuexcptc; + v4 = _CRT_MT; + *(_DWORD *)(a3 + 8) = v20; + v5 = v29[0]; + if ( v4 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v29[0] - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v6 = *(_DWORD *)(v29[0] - 4); + *(_DWORD *)(v29[0] - 4) = v6 - 1; + if ( v6 > 0 ) + goto LABEL_3; + } + std::string::_Rep::_M_destroy((void *)(v5 - 12), (int)&v28); +LABEL_3: + (*(void (__thiscall **)(int *, int *))(*a2 + 20))(v29, a2); + lpuexcpt = *(struct _Unwind_Exception **)(v29[0] - 12); + v7 = (int)lpuexcpt + 1; + if ( (unsigned int)lpuexcpt + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v21 = v7; + v17 = (_WORD *)operator new[](2 * v7); + std::wstring::copy(v29, v17, (unsigned int)lpuexcpt, 0); + v17[v21 - 1] = 0; + *(_DWORD *)(a3 + 24) = v17; + v8 = v29[0]; + *(_DWORD *)(a3 + 28) = lpuexcpt; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v8 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_6; + } + else + { + v9 = *(_DWORD *)(v8 - 4); + *(_DWORD *)(v8 - 4) = v9 - 1; + if ( v9 > 0 ) + goto LABEL_6; + } + std::wstring::_Rep::_M_destroy((void *)(v8 - 12), (int)&v28); +LABEL_6: + (*(void (__thiscall **)(int *, int *))(*a2 + 24))(v29, a2); + lpuexcpta = *(struct _Unwind_Exception **)(v29[0] - 12); + v10 = (int)lpuexcpta + 1; + if ( (unsigned int)lpuexcpta + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v22 = v10; + v18 = (_WORD *)operator new[](2 * v10); + std::wstring::copy(v29, v18, (unsigned int)lpuexcpta, 0); + v18[v22 - 1] = 0; + *(_DWORD *)(a3 + 32) = v18; + v11 = v29[0]; + *(_DWORD *)(a3 + 36) = lpuexcpta; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v11 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_9; + } + else + { + v12 = *(_DWORD *)(v11 - 4); + *(_DWORD *)(v11 - 4) = v12 - 1; + if ( v12 > 0 ) + goto LABEL_9; + } + std::wstring::_Rep::_M_destroy((void *)(v11 - 12), (int)&v28); +LABEL_9: + (*(void (__thiscall **)(int *, int *))(*a2 + 28))(v29, a2); + lpuexcptb = *(struct _Unwind_Exception **)(v29[0] - 12); + v13 = (int)lpuexcptb + 1; + if ( (unsigned int)lpuexcptb + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v23 = v13; + v19 = (_WORD *)operator new[](2 * v13); + std::wstring::copy(v29, v19, (unsigned int)lpuexcptb, 0); + v19[v23 - 1] = 0; + *(_DWORD *)(a3 + 40) = v19; + v14 = v29[0]; + *(_DWORD *)(a3 + 44) = lpuexcptb; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v14 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_12; +LABEL_16: + std::wstring::_Rep::_M_destroy((void *)(v14 - 12), (int)&v28); + goto LABEL_12; + } + v15 = *(_DWORD *)(v14 - 4); + *(_DWORD *)(v14 - 4) = v15 - 1; + if ( v15 <= 0 ) + goto LABEL_16; +LABEL_12: + *(_DWORD *)(a3 + 52) = (*(int (__fastcall **)(int *))(*a2 + 36))(a2); + *(_DWORD *)(a3 + 56) = (*(int (__fastcall **)(int *))(*a2 + 40))(a2); +} +// 4DF863: variable 'v16' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004DFBF0) -------------------------------------------------------- +void __cdecl std::__facet_shims::__moneypunct_fill_cache(int a1, int *a2, int a3) +{ + int v3; // eax + char *v4; // eax + int v5; // eax + int v6; // eax + int v7; // eax + _WORD *v8; // [esp+10h] [ebp-68h] + _WORD *v9; // [esp+10h] [ebp-68h] + _WORD *v10; // [esp+10h] [ebp-68h] + _BYTE *v11; // [esp+14h] [ebp-64h] + int v12; // [esp+14h] [ebp-64h] + int v13; // [esp+14h] [ebp-64h] + int v14; // [esp+14h] [ebp-64h] + struct _Unwind_Exception *lpuexcptc; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-60h] + struct _Unwind_Exception *lpuexcptb; // [esp+18h] [ebp-60h] + void *Block; // [esp+58h] [ebp-20h] BYREF + struct _Unwind_Exception *v20; // [esp+5Ch] [ebp-1Ch] + char v21[24]; // [esp+60h] [ebp-18h] BYREF + + *(_WORD *)(a3 + 18) = (*(int (__thiscall **)(int *))(*a2 + 8))(a2); + *(_WORD *)(a3 + 20) = (*(int (__fastcall **)(int *))(*a2 + 12))(a2); + *(_DWORD *)(a3 + 48) = (*(int (__fastcall **)(int *))(*a2 + 32))(a2); + *(_DWORD *)(a3 + 8) = 0; + *(_DWORD *)(a3 + 24) = 0; + v3 = *a2; + *(_DWORD *)(a3 + 32) = 0; + *(_DWORD *)(a3 + 40) = 0; + *(_BYTE *)(a3 + 82) = 1; + (*(void (__thiscall **)(void **, int *))(v3 + 16))(&Block, a2); + lpuexcptc = v20; + v11 = (_BYTE *)operator new[]((unsigned int)v20 + 1); + std::string::copy(&Block, v11, (size_t)lpuexcptc, 0); + *(_DWORD *)(a3 + 12) = lpuexcptc; + *((_BYTE *)lpuexcptc + (_DWORD)v11) = 0; + v4 = (char *)Block; + *(_DWORD *)(a3 + 8) = v11; + if ( v4 != v21 ) + operator delete(v4); + (*(void (__thiscall **)(void **, int *))(*a2 + 20))(&Block, a2); + lpuexcpt = v20; + v5 = (int)v20 + 1; + if ( (unsigned int)v20 + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v12 = v5; + v8 = (_WORD *)operator new[](2 * v5); + std::wstring::copy(&Block, v8, (unsigned int)lpuexcpt, 0); + v8[v12 - 1] = 0; + *(_DWORD *)(a3 + 24) = v8; + *(_DWORD *)(a3 + 28) = lpuexcpt; + if ( Block != v21 ) + operator delete(Block); + (*(void (__thiscall **)(void **, int *))(*a2 + 24))(&Block, a2); + lpuexcpta = v20; + v6 = (int)v20 + 1; + if ( (unsigned int)v20 + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v13 = v6; + v9 = (_WORD *)operator new[](2 * v6); + std::wstring::copy(&Block, v9, (unsigned int)lpuexcpta, 0); + v9[v13 - 1] = 0; + *(_DWORD *)(a3 + 32) = v9; + *(_DWORD *)(a3 + 36) = lpuexcpta; + if ( Block != v21 ) + operator delete(Block); + (*(void (__thiscall **)(void **, int *))(*a2 + 28))(&Block, a2); + lpuexcptb = v20; + v7 = (int)v20 + 1; + if ( (unsigned int)v20 + 1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v14 = v7; + v10 = (_WORD *)operator new[](2 * v7); + std::wstring::copy(&Block, v10, (unsigned int)lpuexcptb, 0); + v10[v14 - 1] = 0; + *(_DWORD *)(a3 + 40) = v10; + *(_DWORD *)(a3 + 44) = lpuexcptb; + if ( Block != v21 ) + operator delete(Block); + *(_DWORD *)(a3 + 52) = (*(int (__fastcall **)(int *))(*a2 + 36))(a2); + *(_DWORD *)(a3 + 56) = (*(int (__fastcall **)(int *))(*a2 + 40))(a2); +} + +//----- (004DFF50) -------------------------------------------------------- +void __userpurge std::__ios_failure::__ios_failure(_DWORD *a1@, std::__ios_failure *this, int a3, int a4) +{ + void (__cdecl ***v4)(_anonymous_namespace_::system_error_category *__hidden); // eax + char *v5; // eax + + if ( a3 ) + { + v4 = std::_V2::system_category(); + } + else + { + if ( !(_BYTE)`guard variable for'`anonymous namespace'::__io_category_instance(void)::__ec + && __cxa_guard_acquire(&`guard variable for'`anonymous namespace'::__io_category_instance(void)::__ec) ) + { + __cxa_guard_release(&`guard variable for'`anonymous namespace'::__io_category_instance(void)::__ec); + atexit((_PVFV)__tcf_0_7); + } + a3 = 1; + v4 = &`anonymous namespace'::__io_category_instance(void)::__ec; + } + std::system_error::system_error(a1, a3, (int)v4, (char *)this); + *a1 = &off_560078; + v5 = (char *)std::runtime_error::what((int)a1); + std::__construct_ios_failure(a1 + 4, v5); +} +// 53FCD0: using guessed type void (__cdecl **`anonymous namespace'::__io_category_instance(void)::__ec)(_anonymous_namespace_::io_error_category *__hidden this); +// 560078: using guessed type void (__cdecl *off_560078)(std::__ios_failure *__hidden this); + +//----- (004E0080) -------------------------------------------------------- +void __fastcall std::__ios_failure::~__ios_failure(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560078; + std::__destroy_ios_failure((std::exception *)(a1 + 4)); + *a1 = &off_55FDD8; + std::system_error::~system_error((std::exception *)lpfctx); + operator delete(a1); +} +// 4E00C4: variable 'lpfctx' is possibly undefined +// 55FDD8: using guessed type int (*off_55FDD8)(); +// 560078: using guessed type void (__cdecl *off_560078)(std::__ios_failure *__hidden this); + +//----- (004E00E0) -------------------------------------------------------- +void __fastcall std::__ios_failure::~__ios_failure(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560078; + std::__destroy_ios_failure((std::exception *)(a1 + 4)); + *a1 = &off_55FDD8; + std::system_error::~system_error((std::exception *)lpfctx); +} +// 4E0124: variable 'lpfctx' is possibly undefined +// 55FDD8: using guessed type int (*off_55FDD8)(); +// 560078: using guessed type void (__cdecl *off_560078)(std::__ios_failure *__hidden this); + +//----- (004E0140) -------------------------------------------------------- +void __fastcall std::bad_exception::~bad_exception(void *Block) +{ + operator delete(Block); +} + +//----- (004E0170) -------------------------------------------------------- +unsigned int __thiscall std::filebuf::_M_set_buffer(_DWORD *this, int a2) +{ + unsigned int v2; // eax + int v3; // ebx + int v4; // edx + unsigned int result; // eax + + v2 = this[12]; + v3 = (v2 >> 3) & 1; + if ( (v2 & 0x10) != 0 ) + LOBYTE(v2) = 1; + v4 = this[16]; + result = v2 & 1; + this[1] = v4; + this[2] = v4; + if ( a2 > 0 && (_BYTE)v3 ) + { + this[3] = a2 + v4; +LABEL_6: + this[5] = 0; + this[4] = 0; + this[6] = 0; + return result; + } + this[3] = v4; + if ( a2 ) + goto LABEL_6; + if ( !(_BYTE)result ) + goto LABEL_6; + result = this[17]; + if ( result <= 1 ) + goto LABEL_6; + result = v4 + result - 1; + this[5] = v4; + this[4] = v4; + this[6] = result; + return result; +} + +//----- (004E01F0) -------------------------------------------------------- +int __thiscall std::filebuf::_M_get_ext_pos(int this, int a2) +{ + if ( (*(unsigned __int8 (__fastcall **)(_DWORD))(**(_DWORD **)(this + 88) + 24))(*(_DWORD *)(this + 88)) ) + return *(_DWORD *)(this + 8) - *(_DWORD *)(this + 12); + else + return *(_DWORD *)(this + 92) + + (*(int (__thiscall **)(_DWORD, int, _DWORD, _DWORD, int))(**(_DWORD **)(this + 88) + 28))( + *(_DWORD *)(this + 88), + a2, + *(_DWORD *)(this + 92), + *(_DWORD *)(this + 100), + *(_DWORD *)(this + 8) - *(_DWORD *)(this + 4)) + - *(_DWORD *)(this + 104); +} + +//----- (004E0250) -------------------------------------------------------- +int __fastcall std::filebuf::_M_create_pback(int a1) +{ + int v1; // eax + int result; // eax + + if ( !*(_BYTE *)(a1 + 84) ) + { + v1 = *(_DWORD *)(a1 + 8); + *(_BYTE *)(a1 + 84) = 1; + *(_DWORD *)(a1 + 76) = v1; + *(_DWORD *)(a1 + 80) = *(_DWORD *)(a1 + 12); + *(_DWORD *)(a1 + 4) = a1 + 75; + *(_DWORD *)(a1 + 8) = a1 + 75; + result = a1 + 76; + *(_DWORD *)(a1 + 12) = a1 + 76; + } + return result; +} + +//----- (004E0280) -------------------------------------------------------- +int __fastcall std::filebuf::_M_destroy_pback(int a1) +{ + bool v1; // zf + int v2; // ebx + int v3; // edx + int result; // eax + + if ( *(_BYTE *)(a1 + 84) ) + { + v1 = *(_DWORD *)(a1 + 8) == *(_DWORD *)(a1 + 4); + v2 = *(_DWORD *)(a1 + 64); + v3 = *(_DWORD *)(a1 + 80); + *(_BYTE *)(a1 + 84) = 0; + result = *(_DWORD *)(a1 + 76) + !v1; + *(_DWORD *)(a1 + 4) = v2; + *(_DWORD *)(a1 + 76) = result; + *(_DWORD *)(a1 + 8) = result; + *(_DWORD *)(a1 + 12) = v3; + } + return result; +} + +//----- (004E02C0) -------------------------------------------------------- +int __fastcall std::filebuf::_M_terminate_output(int a1) +{ + int v1; // esi + int v3; // eax + int v4; // ecx + _DWORD **v5; // eax + int v6; // ebx + _DWORD **v7; // ebp + unsigned int v8; // eax + unsigned int v9; // esi + unsigned __int8 v11; // [esp+2Bh] [ebp-B5h] + FILE **v12; // [esp+2Ch] [ebp-B4h] + int v13; // [esp+30h] [ebp-B0h] + int v14; // [esp+40h] [ebp-A0h] BYREF + char v15[128]; // [esp+44h] [ebp-9Ch] BYREF + char v16[28]; // [esp+C4h] [ebp-1Ch] BYREF + + v1 = 1; + if ( *(_DWORD *)(a1 + 16) < *(_DWORD *)(a1 + 20) ) + { + v3 = (*(int (__thiscall **)(int, int))(*(_DWORD *)a1 + 52))(a1, -1); + LOBYTE(v3) = v3 != -1; + v1 = v3; + } + if ( *(_BYTE *)(a1 + 74) ) + { + v4 = *(_DWORD *)(a1 + 88); + if ( !v4 ) + std::__throw_bad_cast(); + v11 = (*(int (__fastcall **)(int))(*(_DWORD *)v4 + 24))(v4); + if ( !v11 ) + { + if ( (_BYTE)v1 ) + { + v12 = (FILE **)(a1 + 40); + v5 = (_DWORD **)a1; + v6 = a1 + 56; + v7 = v5; + while ( 1 ) + { + v8 = (*(int (__thiscall **)(_DWORD *, int, char *, char *, int *))(*v7[22] + 12))(v7[22], v6, v15, v16, &v14); + v9 = v8; + if ( v8 == 2 ) + break; + if ( v8 <= 1 && v14 - (int)v15 > 0 ) + { + v13 = v14 - (_DWORD)v15; + if ( v13 != std::__basic_file::xsputn(v12, v15, v14 - (_DWORD)v15) ) + return v11; + if ( v9 == 1 ) + continue; + } + return ((int (__thiscall *)(_DWORD **, int))(*v7)[13])(v7, -1) != -1; + } + return v11; + } + } + } + return v1; +} +// 4E02C0: using guessed type char var_1C[28]; + +//----- (004E03D0) -------------------------------------------------------- +bool __thiscall std::filebuf::_M_convert_to_external(int this, char *a2, unsigned int a3) +{ + int v4; // ecx + unsigned int v5; // esi + int v6; // eax + void *v7; // esp + void *v8; // esp + unsigned int v9; // eax + unsigned int v10; // eax + int v12; // esi + char v13; // [esp+20h] [ebp-38h] + int v14; // [esp+38h] [ebp-20h] BYREF + int v15; // [esp+3Ch] [ebp-1Ch] BYREF + char v16[24]; // [esp+40h] [ebp-18h] BYREF + + v4 = *(_DWORD *)(this + 88); + v5 = a3; + if ( !v4 ) + std::__throw_bad_cast(); + if ( (*(unsigned __int8 (__fastcall **)(int))(*(_DWORD *)v4 + 24))(v4) ) + goto LABEL_5; + v6 = 16 * ((a3 * (*(int (__thiscall **)(_DWORD))(**(_DWORD **)(this + 88) + 32))(*(_DWORD *)(this + 88)) + 27) >> 4); + v7 = alloca(v6); + v8 = alloca(v6); + v9 = (*(int (__thiscall **)(_DWORD, int, char *, char *))(**(_DWORD **)(this + 88) + 8))( + *(_DWORD *)(this + 88), + this + 56, + a2, + &a2[a3]); + if ( v9 > 1 ) + { + if ( v9 == 3 ) + { +LABEL_5: + v10 = std::__basic_file::xsputn((FILE **)(this + 40), a2, a3); + return v10 == v5; + } +LABEL_11: + std::__throw_ios_failure("basic_filebuf::_M_convert_to_external conversion error"); + } + v13 = v9; + v5 = v14 - (_DWORD)v16; + v10 = std::__basic_file::xsputn((FILE **)(this + 40), v16, v14 - (_DWORD)v16); + if ( v14 - (_DWORD)v16 != v10 || (v13 & 1) == 0 ) + return v10 == v5; + if ( (*(int (__thiscall **)(_DWORD, int *, int, _DWORD, int *, char *, int, int *))(**(_DWORD **)(this + 88) + 8))( + *(_DWORD *)(this + 88), + &v15, + v15, + *(_DWORD *)(this + 20), + &v15, + v16, + v14, + &v14) == 2 ) + goto LABEL_11; + v12 = v14 - (_DWORD)v16; + return std::__basic_file::xsputn((FILE **)(this + 40), v16, v14 - (_DWORD)v16) == v12; +} + +//----- (004E0540) -------------------------------------------------------- +void __fastcall std::filebuf::_M_destroy_internal_buffer(int a1) +{ + if ( *(_BYTE *)(a1 + 72) ) + { + if ( *(_DWORD *)(a1 + 64) ) + operator delete[](*(void **)(a1 + 64)); + *(_DWORD *)(a1 + 64) = 0; + *(_BYTE *)(a1 + 72) = 0; + } + if ( *(_DWORD *)(a1 + 92) ) + operator delete[](*(void **)(a1 + 92)); + *(_DWORD *)(a1 + 92) = 0; + *(_DWORD *)(a1 + 96) = 0; + *(_DWORD *)(a1 + 100) = 0; + *(_DWORD *)(a1 + 104) = 0; +} + +//----- (004E05A0) -------------------------------------------------------- +void __fastcall std::filebuf::_M_allocate_internal_buffer(int a1) +{ + if ( !*(_BYTE *)(a1 + 72) && !*(_DWORD *)(a1 + 64) ) + { + *(_DWORD *)(a1 + 64) = operator new[](*(_DWORD *)(a1 + 68)); + *(_BYTE *)(a1 + 72) = 1; + } +} + +//----- (004E05E0) -------------------------------------------------------- +_DWORD *__thiscall std::filebuf::open(_DWORD *this, char *a2, int a3) +{ + _BYTE *v3; // esi + int v5; // eax + int v6; // eax + _DWORD v8[7]; // [esp+20h] [ebp-1Ch] BYREF + + v3 = this + 10; + if ( !std::__basic_file::is_open(this + 10) ) + { + std::__basic_file::open(v3, a2, a3, 436); + if ( std::__basic_file::is_open(v3) ) + { + v5 = this[16]; + if ( !*((_BYTE *)this + 72) && !v5 ) + { + v5 = operator new[](this[17]); + *((_BYTE *)this + 72) = 1; + this[16] = v5; + } + this[1] = v5; + this[2] = v5; + this[3] = v5; + v6 = this[13]; + this[12] = a3; + *(_WORD *)((char *)this + 73) = 0; + this[5] = 0; + this[4] = 0; + this[6] = 0; + this[14] = v6; + this[15] = v6; + if ( (a3 & 2) == 0 ) + return this; + (*(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD, _DWORD, int, int))(*this + 16))(v8, this, 0, 0, 2, a3); + if ( (v8[0] & v8[1]) != -1 ) + return this; + std::filebuf::close((struct _Unwind_Exception *)this); + } + } + return 0; +} + +//----- (004E06F0) -------------------------------------------------------- +_DWORD *__thiscall std::filebuf::open(_DWORD *this, wchar_t *a2, int a3) +{ + _BYTE *v3; // esi + int v5; // eax + int v6; // eax + _DWORD v8[7]; // [esp+20h] [ebp-1Ch] BYREF + + v3 = this + 10; + if ( !std::__basic_file::is_open(this + 10) ) + { + std::__basic_file::open(v3, a2, a3); + if ( std::__basic_file::is_open(v3) ) + { + v5 = this[16]; + if ( !*((_BYTE *)this + 72) && !v5 ) + { + v5 = operator new[](this[17]); + *((_BYTE *)this + 72) = 1; + this[16] = v5; + } + this[1] = v5; + this[2] = v5; + this[3] = v5; + v6 = this[13]; + this[12] = a3; + *(_WORD *)((char *)this + 73) = 0; + this[5] = 0; + this[4] = 0; + this[6] = 0; + this[14] = v6; + this[15] = v6; + if ( (a3 & 2) == 0 ) + return this; + (*(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD, _DWORD, int, int))(*this + 16))(v8, this, 0, 0, 2, a3); + if ( (v8[0] & v8[1]) != -1 ) + return this; + std::filebuf::close((struct _Unwind_Exception *)this); + } + } + return 0; +} + +//----- (004E07F0) -------------------------------------------------------- +_DWORD *__thiscall std::filebuf::open(_DWORD *this, char *a2, int a3) +{ + return std::filebuf::open(this, *(char **)a2, a3); +} + +//----- (004E0800) -------------------------------------------------------- +int __thiscall std::filebuf::swap(int this, int a2) +{ + int v3; // eax + int v4; // edx + int v5; // eax + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + int v10; // edx + int v11; // eax + int v12; // edx + int v13; // eax + int v14; // eax + char v15; // dl + int v16; // edx + int v17; // eax + int v18; // edx + int v19; // eax + int v20; // edx + int v21; // eax + int v22; // edx + int v23; // eax + int v24; // edx + int v25; // eax + int v26; // edx + int v27; // eax + int v28; // edx + int v29; // eax + int v30; // edx + int v31; // eax + int v32; // edx + int v33; // eax + int v34; // edx + int v35; // eax + int v36; // edx + int v37; // eax + int v38; // eax + int result; // eax + const std::locale *v40; // [esp+4h] [ebp-48h] + volatile signed __int32 **v41; // [esp+1Ch] [ebp-30h] + _DWORD *v42[8]; // [esp+2Ch] [ebp-20h] BYREF + + v3 = *(_DWORD *)(this + 4); + *(_DWORD *)(this + 4) = *(_DWORD *)(a2 + 4); + v4 = *(_DWORD *)(a2 + 8); + *(_DWORD *)(a2 + 4) = v3; + v5 = *(_DWORD *)(this + 8); + *(_DWORD *)(this + 8) = v4; + v6 = *(_DWORD *)(a2 + 12); + *(_DWORD *)(a2 + 8) = v5; + v7 = *(_DWORD *)(this + 12); + *(_DWORD *)(this + 12) = v6; + v8 = *(_DWORD *)(a2 + 16); + *(_DWORD *)(a2 + 12) = v7; + v9 = *(_DWORD *)(this + 16); + *(_DWORD *)(this + 16) = v8; + v10 = *(_DWORD *)(a2 + 20); + *(_DWORD *)(a2 + 16) = v9; + v11 = *(_DWORD *)(this + 20); + *(_DWORD *)(this + 20) = v10; + v12 = *(_DWORD *)(a2 + 24); + *(_DWORD *)(a2 + 20) = v11; + v13 = *(_DWORD *)(this + 24); + *(_DWORD *)(this + 24) = v12; + *(_DWORD *)(a2 + 24) = v13; + v41 = (volatile signed __int32 **)(this + 28); + std::locale::locale((volatile signed __int32 **)v42, (volatile signed __int32 **)(this + 28), v40); + std::locale::operator=(v41, (volatile signed __int32 **)(a2 + 28)); + std::locale::operator=((volatile signed __int32 **)(a2 + 28), (volatile signed __int32 **)v42); + std::locale::~locale(v42); + v14 = *(_DWORD *)(this + 40); + *(_DWORD *)(this + 40) = *(_DWORD *)(a2 + 40); + v15 = *(_BYTE *)(a2 + 44); + *(_DWORD *)(a2 + 40) = v14; + LOBYTE(v14) = *(_BYTE *)(this + 44); + *(_BYTE *)(this + 44) = v15; + v16 = *(_DWORD *)(a2 + 48); + *(_BYTE *)(a2 + 44) = v14; + v17 = *(_DWORD *)(this + 48); + *(_DWORD *)(this + 48) = v16; + v18 = *(_DWORD *)(a2 + 52); + *(_DWORD *)(a2 + 48) = v17; + v19 = *(_DWORD *)(this + 52); + *(_DWORD *)(this + 52) = v18; + v20 = *(_DWORD *)(a2 + 56); + *(_DWORD *)(a2 + 52) = v19; + v21 = *(_DWORD *)(this + 56); + *(_DWORD *)(this + 56) = v20; + v22 = *(_DWORD *)(a2 + 60); + *(_DWORD *)(a2 + 56) = v21; + v23 = *(_DWORD *)(this + 60); + *(_DWORD *)(this + 60) = v22; + v24 = *(_DWORD *)(a2 + 64); + *(_DWORD *)(a2 + 60) = v23; + v25 = *(_DWORD *)(this + 64); + *(_DWORD *)(this + 64) = v24; + v26 = *(_DWORD *)(a2 + 68); + *(_DWORD *)(a2 + 64) = v25; + v27 = *(_DWORD *)(this + 68); + *(_DWORD *)(this + 68) = v26; + *(_DWORD *)(a2 + 68) = v27; + LOBYTE(v27) = *(_BYTE *)(this + 72); + *(_BYTE *)(this + 72) = *(_BYTE *)(a2 + 72); + v28 = *(_DWORD *)(a2 + 92); + *(_BYTE *)(a2 + 72) = v27; + v29 = *(_DWORD *)(this + 92); + *(_DWORD *)(this + 92) = v28; + v30 = *(_DWORD *)(a2 + 96); + *(_DWORD *)(a2 + 92) = v29; + v31 = *(_DWORD *)(this + 96); + *(_DWORD *)(this + 96) = v30; + v32 = *(_DWORD *)(a2 + 100); + *(_DWORD *)(a2 + 96) = v31; + v33 = *(_DWORD *)(this + 100); + *(_DWORD *)(this + 100) = v32; + v34 = *(_DWORD *)(a2 + 104); + *(_DWORD *)(a2 + 100) = v33; + v35 = *(_DWORD *)(this + 104); + *(_DWORD *)(this + 104) = v34; + LOBYTE(v34) = *(_BYTE *)(a2 + 73); + *(_DWORD *)(a2 + 104) = v35; + LOBYTE(v35) = *(_BYTE *)(this + 73); + *(_BYTE *)(this + 73) = v34; + LOBYTE(v34) = *(_BYTE *)(a2 + 74); + *(_BYTE *)(a2 + 73) = v35; + LOBYTE(v35) = *(_BYTE *)(this + 74); + *(_BYTE *)(this + 74) = v34; + v36 = *(_DWORD *)(a2 + 76); + *(_BYTE *)(a2 + 74) = v35; + v37 = *(_DWORD *)(this + 76); + *(_DWORD *)(this + 76) = v36; + *(_DWORD *)(a2 + 76) = v37; + v38 = *(_DWORD *)(this + 80); + *(_DWORD *)(this + 80) = *(_DWORD *)(a2 + 80); + LOBYTE(v36) = *(_BYTE *)(a2 + 84); + *(_DWORD *)(a2 + 80) = v38; + result = *(unsigned __int8 *)(this + 84); + *(_BYTE *)(this + 84) = v36; + *(_BYTE *)(a2 + 84) = result; + return result; +} +// 4E0868: variable 'v40' is possibly undefined + +//----- (004E0990) -------------------------------------------------------- +int __fastcall std::filebuf::sync(_DWORD *a1) +{ + if ( a1[4] >= a1[5] ) + return 0; + else + return -((*(int (__thiscall **)(_DWORD *, int))(*a1 + 52))(a1, -1) == -1); +} + +//----- (004E09D0) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall std::filebuf::close(struct _Unwind_Exception *a1) +{ + bool v1; // zf + void *v2; // eax + int v3; // edx + int v4; // edx + struct _Unwind_Exception *lpuexcpt; // [esp+1Ch] [ebp-60h] + int v7; // [esp+24h] [ebp-58h] + char v8; // [esp+2Bh] [ebp-51h] + + lpuexcpt = a1; + v7 = (int)a1 + 40; + if ( !std::__basic_file::is_open((_DWORD *)a1 + 10) ) + return 0; + v8 = std::filebuf::_M_terminate_output((int)lpuexcpt) ^ 1; + v1 = *((_BYTE *)lpuexcpt + 72) == 0; + *((_DWORD *)lpuexcpt + 12) = 0; + *((_BYTE *)lpuexcpt + 84) = 0; + if ( !v1 ) + { + v2 = (void *)*((_DWORD *)lpuexcpt + 16); + if ( v2 ) + operator delete[](v2); + *((_DWORD *)lpuexcpt + 16) = 0; + *((_BYTE *)lpuexcpt + 72) = 0; + } + if ( *((_DWORD *)lpuexcpt + 23) ) + operator delete[](*((void **)lpuexcpt + 23)); + *((_DWORD *)lpuexcpt + 23) = 0; + *((_DWORD *)lpuexcpt + 24) = 0; + *((_DWORD *)lpuexcpt + 25) = 0; + *((_DWORD *)lpuexcpt + 26) = 0; + *(_WORD *)((char *)lpuexcpt + 73) = 0; + v3 = *((_DWORD *)lpuexcpt + 16); + *((_DWORD *)lpuexcpt + 5) = 0; + *((_DWORD *)lpuexcpt + 1) = v3; + *((_DWORD *)lpuexcpt + 2) = v3; + *((_DWORD *)lpuexcpt + 3) = v3; + v4 = *((_DWORD *)lpuexcpt + 13); + *((_DWORD *)lpuexcpt + 4) = 0; + *((_DWORD *)lpuexcpt + 6) = 0; + *((_DWORD *)lpuexcpt + 14) = v4; + *((_DWORD *)lpuexcpt + 15) = v4; + if ( !std::__basic_file::close(v7) || v8 ) + return 0; + return lpuexcpt; +} + +//----- (004E0B80) -------------------------------------------------------- +char __thiscall std::filebuf::imbue(void *this, int a2) +{ + void *v3; // esi + int v4; // eax + int v5; // ecx + int v6; // ecx + int v7; // edi + const void *Src; // eax + int v9; // edi + size_t Size; // edi + int v11; // eax + int v12; // eax + int v14; // [esp+30h] [ebp-1Ch] BYREF + int v15; // [esp+34h] [ebp-18h] + + if ( (unsigned __int8)std::has_facet>(a2) ) + v3 = std::use_facet>(a2); + else + v3 = 0; + LOBYTE(v4) = std::__basic_file::is_open((_DWORD *)this + 10); + if ( !(_BYTE)v4 ) + goto LABEL_13; + if ( !*((_BYTE *)this + 73) && !*((_BYTE *)this + 74) ) + { + *((_DWORD *)this + 22) = v3; + return v4; + } + v5 = *((_DWORD *)this + 22); + if ( !v5 ) + goto LABEL_24; + v4 = (*(int (__fastcall **)(int))(*(_DWORD *)v5 + 20))(v5); + if ( v4 == -1 ) + goto LABEL_18; + if ( !*((_BYTE *)this + 73) ) + { + if ( !*((_BYTE *)this + 74) ) + goto LABEL_13; + LOBYTE(v4) = std::filebuf::_M_terminate_output((int)this); + if ( (_BYTE)v4 ) + { + v4 = *((_DWORD *)this + 16); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 4) = 0; + *((_DWORD *)this + 1) = v4; + *((_DWORD *)this + 2) = v4; + *((_DWORD *)this + 3) = v4; + *((_DWORD *)this + 6) = 0; + goto LABEL_13; + } +LABEL_18: + *((_DWORD *)this + 22) = 0; + return v4; + } + v6 = *((_DWORD *)this + 22); + if ( !v6 ) +LABEL_24: + std::__throw_bad_cast(); + LOBYTE(v4) = (*(int (__fastcall **)(int))(*(_DWORD *)v6 + 24))(v6); + if ( !(_BYTE)v4 ) + { + v7 = *((_DWORD *)this + 23); + Src = (const void *)(v7 + + (*(int (__thiscall **)(_DWORD, int, int, _DWORD, int))(**((_DWORD **)this + 22) + 28))( + *((_DWORD *)this + 22), + (int)this + 60, + v7, + *((_DWORD *)this + 25), + *((_DWORD *)this + 2) - *((_DWORD *)this + 1))); + v9 = *((_DWORD *)this + 26); + *((_DWORD *)this + 25) = Src; + Size = v9 - (_DWORD)Src; + if ( Size ) + memmove(*((void **)this + 23), Src, Size); + v11 = *((_DWORD *)this + 23); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 4) = 0; + *((_DWORD *)this + 25) = v11; + *((_DWORD *)this + 26) = Size + v11; + v12 = *((_DWORD *)this + 16); + *((_DWORD *)this + 6) = 0; + *((_DWORD *)this + 1) = v12; + *((_DWORD *)this + 2) = v12; + *((_DWORD *)this + 3) = v12; + v4 = *((_DWORD *)this + 13); + *((_DWORD *)this + 14) = v4; + *((_DWORD *)this + 15) = v4; + goto LABEL_13; + } + if ( !v3 ) + goto LABEL_18; + LOBYTE(v4) = (*(int (__fastcall **)(void *))(*(_DWORD *)v3 + 24))(v3); + if ( !(_BYTE)v4 ) + { + (*(void (__thiscall **)(int *, void *, _DWORD, _DWORD, int, _DWORD))(*(_DWORD *)this + 16))( + &v14, + this, + 0, + 0, + 1, + *((_DWORD *)this + 12)); + LOBYTE(v4) = v14 & v15; + if ( (v14 & v15) == -1 ) + goto LABEL_18; + } +LABEL_13: + *((_DWORD *)this + 22) = v3; + return v4; +} + +//----- (004E0D60) -------------------------------------------------------- +int __thiscall std::filebuf::setbuf(int this, __int64 a2) +{ + if ( std::__basic_file::is_open((_DWORD *)(this + 40)) ) + return this; + if ( !a2 ) + { + *(_DWORD *)(this + 68) = 1; + return this; + } + if ( !(_DWORD)a2 || SHIDWORD(a2) <= 0 ) + return this; + *(_QWORD *)(this + 64) = a2; + return this; +} + +//----- (004E0DC0) -------------------------------------------------------- +int __thiscall std::filebuf::xsgetn(_DWORD *this, char *a2, signed int a3) +{ + char *v4; // edi + signed int v5; // esi + int v6; // eax + int v7; // ebp + char *v8; // ecx + bool v9; // zf + int v10; // edx + int v11; // ecx + int v12; // eax + int v13; // eax + int v14; // ecx + char v15; // al + int v17; // eax + const void *Src; // eax + size_t Size; // edx + int i; // eax + int v21; // eax + int *v22; // eax + int v23; // [esp+1Ch] [ebp-20h] + int v24; // [esp+1Ch] [ebp-20h] + + v4 = a2; + v5 = a3; + if ( *((_BYTE *)this + 84) ) + { + v6 = this[2]; + v7 = 0; + v8 = (char *)this[1]; + if ( a3 <= 0 || v8 != (char *)v6 ) + goto LABEL_4; + v5 = a3 - 1; + *a2 = *v8; + v6 = this[2] + 1; + v9 = *((_BYTE *)this + 84) == 0; + this[2] = v6; + if ( !v9 ) + { + v8 = (char *)this[1]; + v4 = a2 + 1; + v7 = 1; +LABEL_4: + v9 = v8 == (char *)v6; + v10 = this[16]; + v11 = this[20]; + *((_BYTE *)this + 84) = 0; + v12 = this[19] + !v9; + this[1] = v10; + this[19] = v12; + this[2] = v12; + this[3] = v11; + goto LABEL_5; + } + v4 = a2 + 1; + v7 = 1; + } + else if ( *((_BYTE *)this + 74) ) + { + if ( (*(int (__thiscall **)(_DWORD *, int))(*this + 52))(this, -1) == -1 ) + return 0; + v17 = this[16]; + this[5] = 0; + v7 = 0; + this[4] = 0; + this[1] = v17; + this[2] = v17; + this[3] = v17; + this[6] = 0; + *((_BYTE *)this + 74) = 0; + } + else + { + v7 = 0; + } +LABEL_5: + v13 = 2; + if ( this[17] >= 2u ) + v13 = this[17]; + if ( v5 <= v13 - 1 ) + goto LABEL_11; + v14 = this[22]; + if ( !v14 ) + std::__throw_bad_cast(); + v23 = this[12]; + v15 = (*(int (__fastcall **)(int))(*(_DWORD *)v14 + 24))(v14); + if ( (v23 & 8) != 0 && v15 ) + { + Src = (const void *)this[2]; + Size = this[3] - (_DWORD)Src; + if ( Size ) + { + v24 = this[3] - (_DWORD)Src; + memcpy(v4, Src, Size); + this[2] += v24; + v4 += v24; + v7 += v24; + v5 -= v24; + } + for ( i = std::__basic_file::xsgetn((FILE **)this + 10, v4, v5); + ; + i = std::__basic_file::xsgetn((FILE **)this + 10, v4, v5) ) + { + if ( i == -1 ) + { + v22 = __errno(); + std::__throw_ios_failure( + (std::__ios_failure *)"basic_filebuf::xsgetn error reading the file", + (std::runtime_error *)*v22); + } + if ( !i ) + break; + v7 += i; + v5 -= i; + if ( !v5 ) + goto LABEL_28; + v4 += i; + } + if ( !v5 ) + { +LABEL_28: + *((_BYTE *)this + 73) = 1; + return v7; + } + v21 = this[16]; + this[5] = 0; + this[4] = 0; + this[1] = v21; + this[2] = v21; + this[3] = v21; + this[6] = 0; + *((_BYTE *)this + 73) = 0; + } + else + { +LABEL_11: + v7 += std::streambuf::xsgetn(this, v4, v5); + } + return v7; +} + +//----- (004E0FE0) -------------------------------------------------------- +int __thiscall std::filebuf::xsputn(int this, unsigned __int8 *a2, signed int a3) +{ + int v4; // eax + int v5; // ecx + char v6; // si + int v7; // edx + int v8; // eax + unsigned int v9; // ecx + signed int v10; // esi + int v11; // eax + int v12; // edx + bool v13; // cc + int result; // eax + int v15; // edx + int v16; // ecx + unsigned int v17; // ecx + + v4 = *(_DWORD *)(this + 48); + v5 = *(_DWORD *)(this + 88); + if ( (v4 & 0x10) != 0 ) + LOBYTE(v4) = 1; + v6 = v4 & 1; + if ( !v5 ) + std::__throw_bad_cast(); + if ( !(*(unsigned __int8 (__fastcall **)(int))(*(_DWORD *)v5 + 24))(v5) || !v6 || *(_BYTE *)(this + 73) ) + return std::streambuf::xsputn((_DWORD *)this, a2, a3); + v7 = *(_DWORD *)(this + 20); + v8 = *(_DWORD *)(this + 24) - v7; + if ( !*(_BYTE *)(this + 74) ) + { + v9 = *(_DWORD *)(this + 68); + if ( v9 > 1 ) + v8 = v9 - 1; + } + if ( v8 >= 1024 ) + v8 = 1024; + if ( a3 < v8 ) + return std::streambuf::xsputn((_DWORD *)this, a2, a3); + v10 = v7 - *(_DWORD *)(this + 16); + v11 = std::__basic_file::xsputn_2((FILE **)(this + 40), *(char **)(this + 16), v10, (char *)a2, a3); + if ( v10 + a3 == v11 ) + { + v15 = *(_DWORD *)(this + 64); + v16 = *(_DWORD *)(this + 48); + *(_DWORD *)(this + 4) = v15; + *(_DWORD *)(this + 8) = v15; + *(_DWORD *)(this + 12) = v15; + if ( ((v16 & 0x10) != 0 || (v16 & 1) != 0) && (v17 = *(_DWORD *)(this + 68), v17 > 1) ) + { + *(_DWORD *)(this + 20) = v15; + *(_DWORD *)(this + 16) = v15; + *(_DWORD *)(this + 24) = v15 + v17 - 1; + } + else + { + *(_DWORD *)(this + 20) = 0; + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 24) = 0; + } + *(_BYTE *)(this + 74) = 1; + } + v12 = v11 - v10; + v13 = v10 < v11; + result = 0; + if ( v13 ) + return v12; + return result; +} + +//----- (004E1110) -------------------------------------------------------- +_DWORD *__thiscall std::filebuf::_M_seek(_DWORD *this, int a2, __int64 a3, int a4, int a5) +{ + _DWORD *result; // eax + __int64 v7; // rax + int v8; // ecx + int v9; // ecx + + *this = -1; + this[1] = -1; + this[2] = 0; + if ( !(unsigned __int8)std::filebuf::_M_terminate_output(a2) ) + return this; + v7 = std::__basic_file::seekoff((FILE **)(a2 + 40), a3, a4); + if ( ((unsigned int)v7 & HIDWORD(v7)) == -1 ) + return this; + *this = v7; + result = this; + *(_WORD *)(a2 + 73) = 0; + v8 = *(_DWORD *)(a2 + 92); + *(_DWORD *)(a2 + 20) = 0; + *(_DWORD *)(a2 + 104) = v8; + *(_DWORD *)(a2 + 100) = v8; + v9 = *(_DWORD *)(a2 + 64); + *(_DWORD *)(a2 + 16) = 0; + *(_DWORD *)(a2 + 4) = v9; + *(_DWORD *)(a2 + 8) = v9; + *(_DWORD *)(a2 + 12) = v9; + *(_DWORD *)(a2 + 24) = 0; + *(_DWORD *)(a2 + 56) = a5; + this[2] = a5; + this[1] = HIDWORD(v7); + return result; +} + +//----- (004E11C0) -------------------------------------------------------- +_DWORD *__thiscall std::filebuf::seekoff(_DWORD *this, int a2, __int64 a3, int a4, int a5) +{ + int v6; // ecx + int v7; // eax + int v8; // edx + bool v9; // al + bool v11; // zf + __int64 v12; // rax + __int64 v13; // rax + int v14; // edx + int v15; // ecx + int v16; // eax + unsigned int v17; // esi + unsigned int v18; // edi + __int64 v19; // kr00_8 + __int64 ext_pos; // [esp+28h] [ebp-54h] + bool v21; // [esp+34h] [ebp-48h] + int v22; // [esp+34h] [ebp-48h] + int v23; // [esp+3Ch] [ebp-40h] + int v24; // [esp+4Ch] [ebp-30h] BYREF + int v25[11]; // [esp+50h] [ebp-2Ch] BYREF + + v6 = *(_DWORD *)(a2 + 88); + if ( v6 ) + { + v7 = (*(int (__fastcall **)(int))(*(_DWORD *)v6 + 20))(v6); + v8 = 0; + if ( v7 >= 0 ) + v8 = v7; + v9 = v7 <= 0; + v23 = v8; + } + else + { + v23 = 0; + v9 = 1; + } + *this = -1; + this[1] = -1; + this[2] = 0; + v21 = v9 && a3 != 0; + if ( !std::__basic_file::is_open((_DWORD *)(a2 + 40)) || v21 ) + return this; + if ( a4 != 1 + || a3 + || *(_BYTE *)(a2 + 74) + && !(*(unsigned __int8 (__fastcall **)(_DWORD))(**(_DWORD **)(a2 + 88) + 24))(*(_DWORD *)(a2 + 88)) ) + { + if ( *(_BYTE *)(a2 + 84) ) + { + v11 = *(_DWORD *)(a2 + 8) == *(_DWORD *)(a2 + 4); + *(_BYTE *)(a2 + 84) = 0; + v14 = *(_DWORD *)(a2 + 80); + v15 = *(_DWORD *)(a2 + 64); + v16 = *(_DWORD *)(a2 + 76) + !v11; + *(_DWORD *)(a2 + 76) = v16; + *(_DWORD *)(a2 + 4) = v15; + *(_DWORD *)(a2 + 8) = v16; + *(_DWORD *)(a2 + 12) = v14; + } + v22 = *(_DWORD *)(a2 + 52); + v24 = v22; + v17 = a3 * v23; + v18 = (unsigned __int64)(a3 * v23) >> 32; + if ( *(_BYTE *)(a2 + 73) && a4 == 1 ) + { + v24 = *(_DWORD *)(a2 + 60); + v19 = std::filebuf::_M_get_ext_pos(a2, (int)&v24) + __PAIR64__(v18, v17); + std::filebuf::_M_seek(v25, a2, v19, 1, v24); + } + else + { + std::filebuf::_M_seek(v25, a2, __SPAIR64__(v18, v17), a4, v22); + } + *this = v25[0]; + this[1] = v25[1]; + this[2] = v25[2]; + return this; + } + v11 = *(_BYTE *)(a2 + 73) == 0; + ext_pos = 0LL; + v24 = *(_DWORD *)(a2 + 52); + if ( !v11 ) + { + v24 = *(_DWORD *)(a2 + 60); + ext_pos = std::filebuf::_M_get_ext_pos(a2, (int)&v24); + } + if ( *(_BYTE *)(a2 + 74) ) + ext_pos = *(_DWORD *)(a2 + 20) - *(_DWORD *)(a2 + 16); + v12 = std::__basic_file::seekoff((FILE **)(a2 + 40), 0LL, 1); + if ( ((unsigned int)v12 & HIDWORD(v12)) == -1 ) + return this; + v13 = ext_pos + v12; + *this = v13; + LODWORD(v13) = v24; + this[1] = HIDWORD(v13); + this[2] = v13; + return this; +} + +//----- (004E1420) -------------------------------------------------------- +_DWORD *__thiscall std::filebuf::seekpos(_DWORD *this, int a2, __int64 a3, int a4, int a5, int a6) +{ + bool v7; // zf + int v8; // edx + int v9; // ecx + int v10; // eax + int v11; // ebp + __int64 v12; // rax + int v14; // ecx + int v15; // ecx + + *this = -1; + this[1] = -1; + this[2] = 0; + if ( std::__basic_file::is_open((_DWORD *)(a2 + 40)) ) + { + if ( *(_BYTE *)(a2 + 84) ) + { + v7 = *(_DWORD *)(a2 + 8) == *(_DWORD *)(a2 + 4); + *(_BYTE *)(a2 + 84) = 0; + v8 = *(_DWORD *)(a2 + 80); + v9 = *(_DWORD *)(a2 + 64); + v10 = *(_DWORD *)(a2 + 76) + !v7; + *(_DWORD *)(a2 + 76) = v10; + *(_DWORD *)(a2 + 4) = v9; + *(_DWORD *)(a2 + 8) = v10; + *(_DWORD *)(a2 + 12) = v8; + } + v11 = a4; + if ( (unsigned __int8)std::filebuf::_M_terminate_output(a2) ) + { + v12 = std::__basic_file::seekoff((FILE **)(a2 + 40), a3, 0); + if ( ((unsigned int)v12 & HIDWORD(v12)) == -1 ) + { + v11 = 0; + } + else + { + *(_DWORD *)(a2 + 20) = 0; + *(_WORD *)(a2 + 73) = 0; + v14 = *(_DWORD *)(a2 + 92); + *(_DWORD *)(a2 + 16) = 0; + *(_DWORD *)(a2 + 104) = v14; + *(_DWORD *)(a2 + 100) = v14; + v15 = *(_DWORD *)(a2 + 64); + *(_DWORD *)(a2 + 24) = 0; + *(_DWORD *)(a2 + 4) = v15; + *(_DWORD *)(a2 + 8) = v15; + *(_DWORD *)(a2 + 12) = v15; + *(_DWORD *)(a2 + 56) = a4; + } + } + else + { + v11 = 0; + v12 = -1LL; + } + *(_QWORD *)this = v12; + this[2] = v11; + } + return this; +} + +//----- (004E1550) -------------------------------------------------------- +int __thiscall std::filebuf::overflow(int this, int a2) +{ + int v3; // edx + int v4; // eax + int v5; // ecx + int ext_pos; // eax + int v7; // ebp + int v8; // edi + int result; // eax + char *v10; // edx + char *v11; // eax + int v12; // eax + int v13; // edx + __int64 v14; // rax + int v15; // eax + int v16; // eax + unsigned int v17; // eax + unsigned int v18; // edx + int v19; // edx + int v20; // ecx + char v21[29]; // [esp+1Fh] [ebp-1Dh] BYREF + + if ( (*(_BYTE *)(this + 48) & 0x11) == 0 ) + return -1; + if ( *(_BYTE *)(this + 73) ) + { + if ( *(_BYTE *)(this + 84) ) + { + v3 = *(_DWORD *)(this + 80); + v4 = *(_DWORD *)(this + 76) + (*(_DWORD *)(this + 8) != *(_DWORD *)(this + 4)); + *(_DWORD *)(this + 76) = v4; + v5 = *(_DWORD *)(this + 64); + *(_DWORD *)(this + 8) = v4; + *(_DWORD *)(this + 4) = v5; + *(_DWORD *)(this + 12) = v3; + *(_BYTE *)(this + 84) = 0; + } + ext_pos = std::filebuf::_M_get_ext_pos(this, this + 60); + v7 = *(_DWORD *)(this + 60); + v8 = ext_pos; + if ( (unsigned __int8)std::filebuf::_M_terminate_output(this) ) + { + v14 = std::__basic_file::seekoff((FILE **)(this + 40), v8, 1); + if ( ((unsigned int)v14 & HIDWORD(v14)) != -1 ) + { + *(_DWORD *)(this + 20) = 0; + *(_WORD *)(this + 73) = 0; + v15 = *(_DWORD *)(this + 92); + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 104) = v15; + *(_DWORD *)(this + 100) = v15; + v16 = *(_DWORD *)(this + 64); + *(_DWORD *)(this + 24) = 0; + *(_DWORD *)(this + 4) = v16; + *(_DWORD *)(this + 8) = v16; + *(_DWORD *)(this + 12) = v16; + *(_DWORD *)(this + 56) = v7; + goto LABEL_19; + } + } + return -1; + } + v10 = *(char **)(this + 16); + v11 = *(char **)(this + 20); + if ( v10 >= v11 ) + { +LABEL_19: + v17 = *(_DWORD *)(this + 68); + if ( v17 <= 1 ) + { + v21[0] = a2; + if ( a2 == -1 ) + { + *(_BYTE *)(this + 74) = 1; + return 0; + } + if ( std::filebuf::_M_convert_to_external(this, v21, 1u) ) + { + *(_BYTE *)(this + 74) = 1; + return a2; + } + return -1; + } + v19 = *(_DWORD *)(this + 64); + v20 = *(_DWORD *)(this + 48); + *(_DWORD *)(this + 4) = v19; + *(_DWORD *)(this + 8) = v19; + *(_DWORD *)(this + 12) = v19; + if ( (v20 & 0x10) != 0 || (v20 & 1) != 0 ) + { + *(_DWORD *)(this + 20) = v19; + *(_DWORD *)(this + 16) = v19; + *(_DWORD *)(this + 24) = v19 + v17 - 1; + } + else + { + *(_DWORD *)(this + 20) = 0; + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 24) = 0; + } + *(_BYTE *)(this + 74) = 1; + if ( a2 != -1 ) + { + **(_BYTE **)(this + 20) = a2; + result = a2; + ++*(_DWORD *)(this + 20); + return result; + } + return 0; + } + if ( a2 != -1 ) + { + *v11 = a2; + v10 = *(char **)(this + 16); + v11 = (char *)(*(_DWORD *)(this + 20) + 1); + *(_DWORD *)(this + 20) = v11; + } + if ( !std::filebuf::_M_convert_to_external(this, v10, v11 - v10) ) + return -1; + v12 = *(_DWORD *)(this + 64); + v13 = *(_DWORD *)(this + 48); + *(_DWORD *)(this + 4) = v12; + *(_DWORD *)(this + 8) = v12; + *(_DWORD *)(this + 12) = v12; + if ( ((v13 & 0x10) != 0 || (v13 & 1) != 0) && (v18 = *(_DWORD *)(this + 68), v18 > 1) ) + { + *(_DWORD *)(this + 20) = v12; + *(_DWORD *)(this + 16) = v12; + *(_DWORD *)(this + 24) = v12 + v18 - 1; + } + else + { + *(_DWORD *)(this + 20) = 0; + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 24) = 0; + } + result = a2; + if ( a2 == -1 ) + return 0; + return result; +} +// 4E1550: using guessed type char var_1D[29]; + +//----- (004E17B0) -------------------------------------------------------- +int __thiscall std::filebuf::pbackfail(char *this, int a2) +{ + char v3; // di + unsigned int v4; // eax + int v5; // edx + int result; // eax + _BYTE *v7; // eax + int v8; // eax + int v9; // eax + int v10[7]; // [esp+24h] [ebp-1Ch] BYREF + + if ( (this[48] & 8) == 0 ) + return -1; + if ( this[74] ) + { + if ( (*(int (__thiscall **)(char *, int))(*(_DWORD *)this + 52))(this, -1) == -1 ) + return -1; + v9 = *((_DWORD *)this + 16); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 4) = 0; + v3 = this[84]; + *((_DWORD *)this + 1) = v9; + *((_DWORD *)this + 2) = v9; + *((_DWORD *)this + 3) = v9; + *((_DWORD *)this + 6) = 0; + this[74] = 0; + } + else + { + v3 = this[84]; + v4 = *((_DWORD *)this + 2); + if ( v4 > *((_DWORD *)this + 1) ) + { + *((_DWORD *)this + 2) = v4 - 1; + v5 = *(unsigned __int8 *)(v4 - 1); + goto LABEL_5; + } + } + (*(void (__thiscall **)(int *, char *, int, int, int, int))(*(_DWORD *)this + 16))(v10, this, -1, -1, 1, 24); + if ( (v10[0] & v10[1]) == -1 ) + return -1; + v5 = (*(int (__fastcall **)(char *))(*(_DWORD *)this + 36))(this); + if ( v5 == -1 ) + return -1; +LABEL_5: + result = 0; + if ( a2 == -1 ) + return result; + result = v5; + if ( v5 == a2 ) + return result; + if ( v3 ) + return -1; + v7 = (_BYTE *)*((_DWORD *)this + 2); + if ( !this[84] ) + { + *((_DWORD *)this + 19) = v7; + v8 = *((_DWORD *)this + 3); + *((_DWORD *)this + 3) = this + 76; + *((_DWORD *)this + 20) = v8; + v7 = this + 75; + *((_DWORD *)this + 1) = this + 75; + *((_DWORD *)this + 2) = this + 75; + this[84] = 1; + } + this[73] = 1; + *v7 = a2; + return a2; +} + +//----- (004E18E0) -------------------------------------------------------- +int __fastcall std::filebuf::showmanyc(_DWORD *a1) +{ + int v1; // esi + FILE **v2; // ebp + int v4; // ecx + int v5; // esi + int v6; // edi + int v8; // esi + + v1 = a1[12]; + if ( (v1 & 8) == 0 ) + return -1; + v2 = (FILE **)(a1 + 10); + if ( !std::__basic_file::is_open(a1 + 10) ) + return -1; + v4 = a1[22]; + v5 = v1 & 4; + v6 = a1[3] - a1[2]; + if ( !v4 ) + std::__throw_bad_cast(); + if ( (*(int (__fastcall **)(int))(*(_DWORD *)v4 + 20))(v4) < 0 || !v5 ) + return v6; + v8 = std::__basic_file::showmanyc(v2); + return v8 / (*(int (**)(void))(*(_DWORD *)a1[22] + 32))() + v6; +} + +//----- (004E1970) -------------------------------------------------------- +int __fastcall std::filebuf::underflow(int a1) +{ + unsigned __int8 *v2; // eax + int result; // eax + bool v4; // zf + unsigned int v5; // edx + int v6; // ecx + int v7; // edi + int v8; // ecx + int v9; // eax + signed int v10; // esi + int v11; // ecx + const void *v12; // eax + signed int v13; // edi + unsigned int v14; // edx + signed int v15; // ecx + char *v16; // ebp + int v17; // ecx + char *v18; // eax + void *v19; // edx + int v20; // esi + char v21; // di + int v22; // ebp + char v23; // al + int v24; // eax + int v25; // eax + int v26; // eax + _BYTE *Src; // ecx + unsigned int v28; // eax + size_t Size; // esi + int v30; // eax + int *v31; // eax + unsigned __int8 *v32; // edx + int v33; // eax + char *v34; // eax + char *v35; // eax + char *v36; // eax + unsigned int v37; // [esp+48h] [ebp-34h] + unsigned int v38; // [esp+4Ch] [ebp-30h] + unsigned int v39; // [esp+4Ch] [ebp-30h] + unsigned int v40; // [esp+4Ch] [ebp-30h] + unsigned int v41; // [esp+4Ch] [ebp-30h] + unsigned int v42; // [esp+4Ch] [ebp-30h] + void *v43; // [esp+5Ch] [ebp-20h] BYREF + + if ( (*(_BYTE *)(a1 + 48) & 8) == 0 ) + return -1; + if ( *(_BYTE *)(a1 + 74) ) + { + result = (*(int (__thiscall **)(int, int))(*(_DWORD *)a1 + 52))(a1, -1); + if ( result == -1 ) + return result; + v2 = *(unsigned __int8 **)(a1 + 64); + v4 = *(_BYTE *)(a1 + 84) == 0; + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 4) = v2; + *(_DWORD *)(a1 + 8) = v2; + *(_DWORD *)(a1 + 12) = v2; + *(_DWORD *)(a1 + 24) = 0; + *(_BYTE *)(a1 + 74) = 0; + if ( v4 ) + goto LABEL_4; +LABEL_9: + v4 = *(_DWORD *)(a1 + 4) == (_DWORD)v2; + v5 = *(_DWORD *)(a1 + 80); + *(_BYTE *)(a1 + 84) = 0; + v6 = *(_DWORD *)(a1 + 64); + v2 = (unsigned __int8 *)(*(_DWORD *)(a1 + 76) + !v4); + *(_DWORD *)(a1 + 12) = v5; + *(_DWORD *)(a1 + 76) = v2; + *(_DWORD *)(a1 + 4) = v6; + *(_DWORD *)(a1 + 8) = v2; + if ( (unsigned int)v2 < v5 ) + return *v2; + goto LABEL_10; + } + v2 = *(unsigned __int8 **)(a1 + 8); + if ( *(_BYTE *)(a1 + 84) ) + goto LABEL_9; +LABEL_4: + if ( (unsigned int)v2 < *(_DWORD *)(a1 + 12) ) + return *v2; +LABEL_10: + v7 = 2; + if ( *(_DWORD *)(a1 + 68) >= 2u ) + v7 = *(_DWORD *)(a1 + 68); + v8 = *(_DWORD *)(a1 + 88); + v37 = v7 - 1; + if ( !v8 ) + std::__throw_bad_cast(); + if ( !(*(unsigned __int8 (__fastcall **)(int))(*(_DWORD *)v8 + 24))(v8) ) + { + v9 = (*(int (__fastcall **)(_DWORD))(**(_DWORD **)(a1 + 88) + 20))(*(_DWORD *)(a1 + 88)); + if ( v9 <= 0 ) + { + v26 = (*(int (__fastcall **)(_DWORD))(**(_DWORD **)(a1 + 88) + 32))(*(_DWORD *)(a1 + 88)); + v11 = v7 - 1; + v10 = v7 + v26 - 2; + } + else + { + v10 = v37 * v9; + v11 = v37 * v9; + } + v12 = *(const void **)(a1 + 100); + v13 = *(_DWORD *)(a1 + 104) - (_DWORD)v12; + v14 = v11 - v13; + if ( v11 <= v13 ) + v14 = 0; + v15 = *(_DWORD *)(a1 + 96); + if ( *(_BYTE *)(a1 + 73) && *(_DWORD *)(a1 + 4) == *(_DWORD *)(a1 + 12) ) + { + if ( !v13 ) + { + if ( v10 <= v15 ) + { + v16 = *(char **)(a1 + 92); + goto LABEL_22; + } + v42 = v14; + v36 = (char *)operator new[](v10); + v14 = v42; + v16 = v36; +LABEL_61: + if ( *(_DWORD *)(a1 + 92) ) + { + v39 = v14; + operator delete[](*(void **)(a1 + 92)); + v14 = v39; + } + *(_DWORD *)(a1 + 92) = v16; + *(_DWORD *)(a1 + 96) = v10; +LABEL_22: + v17 = *(_DWORD *)(a1 + 56); + v18 = &v16[v13]; + *(_DWORD *)(a1 + 100) = v16; + *(_DWORD *)(a1 + 104) = &v16[v13]; + *(_DWORD *)(a1 + 60) = v17; + if ( v14 ) + { + v20 = 0; + goto LABEL_30; + } + v19 = *(void **)(a1 + 4); + v20 = 0; + v43 = v19; + if ( v18 <= v16 ) + { + while ( 1 ) + { +LABEL_29: + v18 = *(char **)(a1 + 104); + v14 = 1; + v13 = (signed int)&v18[-*(_DWORD *)(a1 + 92)]; +LABEL_30: + if ( (signed int)(v14 + v13) > *(_DWORD *)(a1 + 96) ) + std::__throw_ios_failure("basic_filebuf::underflow codecvt::max_length() is not valid"); + v24 = std::__basic_file::xsgetn((FILE **)(a1 + 40), v18, v14); + if ( v24 ) + { + if ( v24 == -1 ) + goto LABEL_49; + v21 = 0; + } + else + { + v21 = 1; + } + v19 = *(void **)(a1 + 4); + v16 = *(char **)(a1 + 100); + v18 = (char *)(*(_DWORD *)(a1 + 104) + v24); + *(_DWORD *)(a1 + 104) = v18; + v43 = v19; + if ( v18 > v16 ) + break; + if ( v20 == 3 ) + goto LABEL_41; + if ( v21 ) + goto LABEL_37; + } + } + else + { + v21 = 0; + } + v20 = (*(int (__thiscall **)(_DWORD, int, char *, char *, int, void *, unsigned int, void **))(**(_DWORD **)(a1 + 88) + 16))( + *(_DWORD *)(a1 + 88), + a1 + 56, + v16, + v18, + a1 + 100, + v19, + (unsigned int)v19 + v37, + &v43); + if ( v20 != 3 ) + { + v22 = (int)v43 - *(_DWORD *)(a1 + 4); + if ( v20 != 2 ) + { + v23 = v21 | (v43 != *(void **)(a1 + 4)); + goto LABEL_28; + } + if ( (int)v43 - *(_DWORD *)(a1 + 4) <= 0 ) + { + if ( !v21 ) + std::__throw_ios_failure("basic_filebuf::underflow invalid byte sequence in file"); + goto LABEL_57; + } + goto LABEL_51; + } + v18 = *(char **)(a1 + 104); + v19 = *(void **)(a1 + 4); +LABEL_41: + Src = *(_BYTE **)(a1 + 92); + v28 = v18 - Src; + v22 = v28; + Size = v28; + if ( v37 < v28 ) + { + Size = v37; + v22 = v37; + } + else if ( !v28 ) + { +LABEL_43: + *(_DWORD *)(a1 + 100) = Src; + v20 = 3; + v23 = v21 | (v22 != 0); +LABEL_28: + if ( !v23 ) + goto LABEL_29; + if ( v22 > 0 ) + goto LABEL_51; + if ( v21 ) + { +LABEL_37: + v25 = *(_DWORD *)(a1 + 64); + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 4) = v25; + *(_DWORD *)(a1 + 8) = v25; + *(_DWORD *)(a1 + 12) = v25; + *(_DWORD *)(a1 + 24) = 0; + *(_BYTE *)(a1 + 73) = 0; + if ( v20 == 1 ) + std::__throw_ios_failure("basic_filebuf::underflow incomplete character in file"); + return -1; + } +LABEL_49: + v31 = __errno(); + std::__throw_ios_failure( + (std::__ios_failure *)"basic_filebuf::underflow error reading the file", + (std::runtime_error *)*v31); + } + memcpy(v19, Src, Size); + Src = (_BYTE *)(*(_DWORD *)(a1 + 92) + Size); + goto LABEL_43; + } + if ( v10 <= v15 ) + { + v16 = *(char **)(a1 + 92); + v14 = 0; +LABEL_68: + v40 = v14; + memmove(v16, v12, v13); + v16 = *(char **)(a1 + 92); + v14 = v40; + goto LABEL_22; + } + v35 = (char *)operator new[](v10); + v14 = 0; + v16 = v35; + } + else + { + if ( v10 <= v15 ) + { + v16 = *(char **)(a1 + 92); + if ( !v13 ) + goto LABEL_22; + goto LABEL_68; + } + v38 = v14; + v34 = (char *)operator new[](v10); + v14 = v38; + v16 = v34; + if ( !v13 ) + goto LABEL_61; + } + v41 = v14; + memcpy(v16, *(const void **)(a1 + 100), v13); + v14 = v41; + goto LABEL_61; + } + v30 = std::__basic_file::xsgetn((FILE **)(a1 + 40), *(void **)(a1 + 4), v37); + v22 = v30; + if ( !v30 ) + { +LABEL_57: + v33 = *(_DWORD *)(a1 + 64); + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 4) = v33; + *(_DWORD *)(a1 + 8) = v33; + *(_DWORD *)(a1 + 12) = v33; + *(_DWORD *)(a1 + 24) = 0; + *(_BYTE *)(a1 + 73) = 0; + return -1; + } + if ( v30 <= 0 ) + goto LABEL_49; +LABEL_51: + v32 = *(unsigned __int8 **)(a1 + 64); + v4 = (*(_BYTE *)(a1 + 48) & 8) == 0; + *(_DWORD *)(a1 + 4) = v32; + *(_DWORD *)(a1 + 8) = v32; + if ( v4 ) + *(_DWORD *)(a1 + 12) = v32; + else + *(_DWORD *)(a1 + 12) = &v32[v22]; + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 24) = 0; + *(_BYTE *)(a1 + 73) = 1; + return *v32; +} + +//----- (004E1E10) -------------------------------------------------------- +int __thiscall std::filebuf::basic_filebuf(int this, std::locale *a2) +{ + int v3; // eax + int v4; // edx + int v5; // edi + int v6; // ecx + int v7; // eax + int result; // eax + int v9; // edi + int v10; // edx + int v11; // edx + int v12; // edx + int v13; // edx + int v14; // edx + int v15; // edx + int v16; // edx + const std::locale *v17; // [esp+4h] [ebp-18h] + + std::streambuf::basic_streambuf((_DWORD *)this, a2, v17); + v3 = *((_DWORD *)a2 + 10); + v4 = *((_DWORD *)a2 + 17); + *(_DWORD *)this = off_5600A0; + v5 = *((_DWORD *)a2 + 14); + v6 = *((_DWORD *)a2 + 16); + *(_DWORD *)(this + 32) = 0; + *(_DWORD *)(this + 40) = v3; + LOBYTE(v3) = *((_BYTE *)a2 + 44); + *(_DWORD *)(this + 36) = 0; + *(_BYTE *)(this + 44) = v3; + v7 = *((_DWORD *)a2 + 12); + *((_DWORD *)a2 + 10) = 0; + *((_BYTE *)a2 + 44) = 0; + *(_DWORD *)(this + 68) = v4; + LOWORD(v4) = *((_WORD *)a2 + 36); + *(_DWORD *)(this + 48) = v7; + result = *((_DWORD *)a2 + 13); + *(_WORD *)(this + 72) = v4; + LOBYTE(v4) = *((_BYTE *)a2 + 74); + *(_DWORD *)(this + 56) = v5; + v9 = *((_DWORD *)a2 + 15); + *(_BYTE *)(this + 74) = v4; + LOBYTE(v4) = *((_BYTE *)a2 + 75); + *(_DWORD *)(this + 64) = v6; + *(_DWORD *)(this + 60) = v9; + *((_DWORD *)a2 + 12) = 0; + *(_DWORD *)(this + 52) = result; + *((_DWORD *)a2 + 16) = 0; + *((_DWORD *)a2 + 17) = 1; + *((_WORD *)a2 + 36) = 0; + *((_BYTE *)a2 + 74) = 0; + *(_BYTE *)(this + 75) = v4; + v10 = *((_DWORD *)a2 + 19); + *((_DWORD *)a2 + 19) = 0; + *(_DWORD *)(this + 76) = v10; + v11 = *((_DWORD *)a2 + 20); + *((_DWORD *)a2 + 1) = 0; + *(_DWORD *)(this + 80) = v11; + LOBYTE(v11) = *((_BYTE *)a2 + 84); + *((_DWORD *)a2 + 20) = 0; + *(_BYTE *)(this + 84) = v11; + v12 = *((_DWORD *)a2 + 22); + *((_BYTE *)a2 + 84) = 0; + *(_DWORD *)(this + 88) = v12; + v13 = *((_DWORD *)a2 + 23); + *((_DWORD *)a2 + 2) = 0; + *(_DWORD *)(this + 92) = v13; + v14 = *((_DWORD *)a2 + 24); + *((_DWORD *)a2 + 23) = 0; + *(_DWORD *)(this + 96) = v14; + v15 = *((_DWORD *)a2 + 25); + *((_DWORD *)a2 + 24) = 0; + *(_DWORD *)(this + 100) = v15; + v16 = *((_DWORD *)a2 + 26); + *((_DWORD *)a2 + 25) = 0; + *(_DWORD *)(this + 104) = v16; + *((_DWORD *)a2 + 26) = 0; + *((_DWORD *)a2 + 3) = 0; + *((_DWORD *)a2 + 5) = 0; + *((_DWORD *)a2 + 4) = 0; + *((_DWORD *)a2 + 6) = 0; + *((_DWORD *)a2 + 14) = result; + *((_DWORD *)a2 + 15) = result; + return result; +} +// 4E1E1F: variable 'v17' is possibly undefined +// 5600A0: using guessed type int (*off_5600A0[2])(); + +//----- (004E1F50) -------------------------------------------------------- +void __fastcall std::filebuf::basic_filebuf(int a1) +{ + int v2; // [esp+20h] [ebp-4Ch] + + *(_DWORD *)a1 = &off_560424; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 8) = 0; + *(_DWORD *)(a1 + 12) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 24) = 0; + v2 = a1 + 28; + std::locale::locale((_DWORD *)(a1 + 28)); + *(_DWORD *)a1 = off_5600A0; + *(_DWORD *)(a1 + 32) = 0; + *(_DWORD *)(a1 + 36) = 0; + std::__basic_file::__basic_file((_BYTE *)(a1 + 40), a1 + 32); + *(_DWORD *)(a1 + 48) = 0; + *(_DWORD *)(a1 + 52) = 0; + *(_DWORD *)(a1 + 56) = 0; + *(_DWORD *)(a1 + 60) = 0; + *(_DWORD *)(a1 + 64) = 0; + *(_DWORD *)(a1 + 68) = 512; + *(_DWORD *)(a1 + 72) = 0; + *(_DWORD *)(a1 + 76) = 0; + *(_DWORD *)(a1 + 80) = 0; + *(_BYTE *)(a1 + 84) = 0; + *(_DWORD *)(a1 + 88) = 0; + *(_DWORD *)(a1 + 92) = 0; + *(_DWORD *)(a1 + 96) = 0; + *(_DWORD *)(a1 + 100) = 0; + *(_DWORD *)(a1 + 104) = 0; + if ( (unsigned __int8)std::has_facet>(v2) ) + *(_DWORD *)(a1 + 88) = std::use_facet>(v2); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (004E20E0) -------------------------------------------------------- +int __thiscall std::filebuf::basic_filebuf(int this, std::locale *a2) +{ + int v3; // eax + int v4; // edx + int v5; // edi + int v6; // ecx + int v7; // eax + int result; // eax + int v9; // edi + int v10; // edx + int v11; // edx + int v12; // edx + int v13; // edx + int v14; // edx + int v15; // edx + int v16; // edx + const std::locale *v17; // [esp+4h] [ebp-18h] + + std::streambuf::basic_streambuf((_DWORD *)this, a2, v17); + v3 = *((_DWORD *)a2 + 10); + v4 = *((_DWORD *)a2 + 17); + *(_DWORD *)this = off_5600A0; + v5 = *((_DWORD *)a2 + 14); + v6 = *((_DWORD *)a2 + 16); + *(_DWORD *)(this + 32) = 0; + *(_DWORD *)(this + 40) = v3; + LOBYTE(v3) = *((_BYTE *)a2 + 44); + *(_DWORD *)(this + 36) = 0; + *(_BYTE *)(this + 44) = v3; + v7 = *((_DWORD *)a2 + 12); + *((_DWORD *)a2 + 10) = 0; + *((_BYTE *)a2 + 44) = 0; + *(_DWORD *)(this + 68) = v4; + LOWORD(v4) = *((_WORD *)a2 + 36); + *(_DWORD *)(this + 48) = v7; + result = *((_DWORD *)a2 + 13); + *(_WORD *)(this + 72) = v4; + LOBYTE(v4) = *((_BYTE *)a2 + 74); + *(_DWORD *)(this + 56) = v5; + v9 = *((_DWORD *)a2 + 15); + *(_BYTE *)(this + 74) = v4; + LOBYTE(v4) = *((_BYTE *)a2 + 75); + *(_DWORD *)(this + 64) = v6; + *(_DWORD *)(this + 60) = v9; + *((_DWORD *)a2 + 12) = 0; + *(_DWORD *)(this + 52) = result; + *((_DWORD *)a2 + 16) = 0; + *((_DWORD *)a2 + 17) = 1; + *((_WORD *)a2 + 36) = 0; + *((_BYTE *)a2 + 74) = 0; + *(_BYTE *)(this + 75) = v4; + v10 = *((_DWORD *)a2 + 19); + *((_DWORD *)a2 + 19) = 0; + *(_DWORD *)(this + 76) = v10; + v11 = *((_DWORD *)a2 + 20); + *((_DWORD *)a2 + 1) = 0; + *(_DWORD *)(this + 80) = v11; + LOBYTE(v11) = *((_BYTE *)a2 + 84); + *((_DWORD *)a2 + 20) = 0; + *(_BYTE *)(this + 84) = v11; + v12 = *((_DWORD *)a2 + 22); + *((_BYTE *)a2 + 84) = 0; + *(_DWORD *)(this + 88) = v12; + v13 = *((_DWORD *)a2 + 23); + *((_DWORD *)a2 + 2) = 0; + *(_DWORD *)(this + 92) = v13; + v14 = *((_DWORD *)a2 + 24); + *((_DWORD *)a2 + 23) = 0; + *(_DWORD *)(this + 96) = v14; + v15 = *((_DWORD *)a2 + 25); + *((_DWORD *)a2 + 24) = 0; + *(_DWORD *)(this + 100) = v15; + v16 = *((_DWORD *)a2 + 26); + *((_DWORD *)a2 + 25) = 0; + *(_DWORD *)(this + 104) = v16; + *((_DWORD *)a2 + 26) = 0; + *((_DWORD *)a2 + 3) = 0; + *((_DWORD *)a2 + 5) = 0; + *((_DWORD *)a2 + 4) = 0; + *((_DWORD *)a2 + 6) = 0; + *((_DWORD *)a2 + 14) = result; + *((_DWORD *)a2 + 15) = result; + return result; +} +// 4E20EF: variable 'v17' is possibly undefined +// 5600A0: using guessed type int (*off_5600A0[2])(); + +//----- (004E2220) -------------------------------------------------------- +void __fastcall std::filebuf::basic_filebuf(int a1) +{ + int v2; // [esp+20h] [ebp-4Ch] + + *(_DWORD *)a1 = &off_560424; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 8) = 0; + *(_DWORD *)(a1 + 12) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 24) = 0; + v2 = a1 + 28; + std::locale::locale((_DWORD *)(a1 + 28)); + *(_DWORD *)a1 = off_5600A0; + *(_DWORD *)(a1 + 32) = 0; + *(_DWORD *)(a1 + 36) = 0; + std::__basic_file::__basic_file((_BYTE *)(a1 + 40), a1 + 32); + *(_DWORD *)(a1 + 48) = 0; + *(_DWORD *)(a1 + 52) = 0; + *(_DWORD *)(a1 + 56) = 0; + *(_DWORD *)(a1 + 60) = 0; + *(_DWORD *)(a1 + 64) = 0; + *(_DWORD *)(a1 + 68) = 512; + *(_DWORD *)(a1 + 72) = 0; + *(_DWORD *)(a1 + 76) = 0; + *(_DWORD *)(a1 + 80) = 0; + *(_BYTE *)(a1 + 84) = 0; + *(_DWORD *)(a1 + 88) = 0; + *(_DWORD *)(a1 + 92) = 0; + *(_DWORD *)(a1 + 96) = 0; + *(_DWORD *)(a1 + 100) = 0; + *(_DWORD *)(a1 + 104) = 0; + if ( (unsigned __int8)std::has_facet>(v2) ) + *(_DWORD *)(a1 + 88) = std::use_facet>(v2); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (004E23B0) -------------------------------------------------------- +void __fastcall std::filebuf::~filebuf(struct _Unwind_Exception *a1) +{ + *(_DWORD *)a1 = off_5600A0; + std::filebuf::close(a1); + std::__basic_file::~__basic_file((int)a1 + 40); + *(_DWORD *)a1 = &off_560424; + std::locale::~locale((_DWORD **)a1 + 7); + operator delete(a1); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (004E2460) -------------------------------------------------------- +void __fastcall std::filebuf::~filebuf(struct _Unwind_Exception *a1) +{ + *(_DWORD *)a1 = off_5600A0; + std::filebuf::close(a1); + std::__basic_file::~__basic_file((int)a1 + 40); + *(_DWORD *)a1 = &off_560424; + std::locale::~locale((_DWORD **)a1 + 7); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (004E2500) -------------------------------------------------------- +void __fastcall std::filebuf::~filebuf(struct _Unwind_Exception *a1) +{ + *(_DWORD *)a1 = off_5600A0; + std::filebuf::close(a1); + std::__basic_file::~__basic_file((int)a1 + 40); + *(_DWORD *)a1 = &off_560424; + std::locale::~locale((_DWORD **)a1 + 7); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (004E25A0) -------------------------------------------------------- +int __thiscall std::filebuf::operator=(int this, int a2) +{ + int v3; // eax + char v4; // dl + int v5; // eax + int v6; // eax + int v7; // eax + int v8; // eax + int v9; // eax + int v10; // eax + int v11; // eax + int v12; // eax + int v13; // eax + int v14; // eax + int v15; // eax + int result; // eax + + std::filebuf::close((struct _Unwind_Exception *)this); + std::streambuf::operator=((volatile signed __int32 **)this, a2); + v3 = *(_DWORD *)(this + 40); + *(_DWORD *)(this + 40) = *(_DWORD *)(a2 + 40); + v4 = *(_BYTE *)(a2 + 44); + *(_DWORD *)(a2 + 40) = v3; + LOBYTE(v3) = *(_BYTE *)(this + 44); + *(_BYTE *)(this + 44) = v4; + *(_BYTE *)(a2 + 44) = v3; + v5 = *(_DWORD *)(a2 + 48); + *(_DWORD *)(a2 + 48) = 0; + *(_DWORD *)(this + 48) = v5; + *(_DWORD *)(this + 52) = *(_DWORD *)(a2 + 52); + *(_DWORD *)(this + 56) = *(_DWORD *)(a2 + 56); + *(_DWORD *)(this + 60) = *(_DWORD *)(a2 + 60); + v6 = *(_DWORD *)(a2 + 64); + *(_DWORD *)(a2 + 64) = 0; + *(_DWORD *)(this + 64) = v6; + v7 = *(_DWORD *)(a2 + 68); + *(_DWORD *)(a2 + 68) = 1; + *(_DWORD *)(this + 68) = v7; + LOBYTE(v7) = *(_BYTE *)(a2 + 72); + *(_BYTE *)(a2 + 72) = 0; + *(_BYTE *)(this + 72) = v7; + v8 = *(_DWORD *)(a2 + 92); + *(_DWORD *)(a2 + 92) = 0; + *(_DWORD *)(this + 92) = v8; + v9 = *(_DWORD *)(a2 + 96); + *(_DWORD *)(a2 + 96) = 0; + *(_DWORD *)(this + 96) = v9; + v10 = *(_DWORD *)(a2 + 100); + *(_DWORD *)(a2 + 100) = 0; + *(_DWORD *)(this + 100) = v10; + v11 = *(_DWORD *)(a2 + 104); + *(_DWORD *)(a2 + 104) = 0; + *(_DWORD *)(this + 104) = v11; + LOBYTE(v11) = *(_BYTE *)(a2 + 73); + *(_BYTE *)(a2 + 73) = 0; + *(_BYTE *)(this + 73) = v11; + LOBYTE(v11) = *(_BYTE *)(a2 + 74); + *(_BYTE *)(a2 + 74) = 0; + *(_BYTE *)(this + 74) = v11; + v12 = *(_DWORD *)(a2 + 76); + *(_DWORD *)(a2 + 76) = 0; + *(_DWORD *)(this + 76) = v12; + v13 = *(_DWORD *)(a2 + 80); + *(_DWORD *)(a2 + 80) = 0; + *(_DWORD *)(this + 80) = v13; + LOBYTE(v13) = *(_BYTE *)(a2 + 84); + *(_BYTE *)(a2 + 84) = 0; + *(_BYTE *)(this + 84) = v13; + v14 = *(_DWORD *)(a2 + 64); + *(_DWORD *)(a2 + 20) = 0; + *(_DWORD *)(a2 + 4) = v14; + *(_DWORD *)(a2 + 8) = v14; + *(_DWORD *)(a2 + 12) = v14; + v15 = *(_DWORD *)(a2 + 52); + *(_DWORD *)(a2 + 16) = 0; + *(_DWORD *)(a2 + 56) = v15; + *(_DWORD *)(a2 + 60) = v15; + result = this; + *(_DWORD *)(a2 + 24) = 0; + return result; +} + +//----- (004E26C0) -------------------------------------------------------- +unsigned int __thiscall std::wfilebuf::_M_set_buffer(_DWORD *this, int a2) +{ + int v2; // eax + bool v3; // bl + int v4; // edx + unsigned int result; // eax + + v2 = this[12]; + v3 = (v2 & 8) != 0; + if ( (v2 & 0x10) != 0 ) + LOBYTE(v2) = 1; + v4 = this[16]; + result = v2 & 1; + this[1] = v4; + this[2] = v4; + if ( a2 > 0 && v3 ) + { + result = v4 + 2 * a2; + this[3] = result; +LABEL_6: + this[5] = 0; + this[4] = 0; + this[6] = 0; + return result; + } + this[3] = v4; + if ( a2 ) + goto LABEL_6; + if ( !(_BYTE)result ) + goto LABEL_6; + result = this[17]; + if ( result <= 1 ) + goto LABEL_6; + result = v4 + 2 * result - 2; + this[5] = v4; + this[4] = v4; + this[6] = result; + return result; +} + +//----- (004E2740) -------------------------------------------------------- +int __thiscall std::wfilebuf::_M_get_ext_pos(int this, int a2) +{ + if ( (*(unsigned __int8 (__fastcall **)(_DWORD))(**(_DWORD **)(this + 92) + 24))(*(_DWORD *)(this + 92)) ) + return (*(_DWORD *)(this + 8) - *(_DWORD *)(this + 12)) >> 1; + else + return *(_DWORD *)(this + 96) + + (*(int (__thiscall **)(_DWORD, int, _DWORD, _DWORD, int))(**(_DWORD **)(this + 92) + 28))( + *(_DWORD *)(this + 92), + a2, + *(_DWORD *)(this + 96), + *(_DWORD *)(this + 104), + (*(_DWORD *)(this + 8) - *(_DWORD *)(this + 4)) >> 1) + - *(_DWORD *)(this + 108); +} + +//----- (004E27B0) -------------------------------------------------------- +int __fastcall std::wfilebuf::_M_create_pback(int a1) +{ + int v1; // eax + int result; // eax + + if ( !*(_BYTE *)(a1 + 88) ) + { + v1 = *(_DWORD *)(a1 + 8); + *(_BYTE *)(a1 + 88) = 1; + *(_DWORD *)(a1 + 80) = v1; + *(_DWORD *)(a1 + 84) = *(_DWORD *)(a1 + 12); + *(_DWORD *)(a1 + 4) = a1 + 76; + *(_DWORD *)(a1 + 8) = a1 + 76; + result = a1 + 78; + *(_DWORD *)(a1 + 12) = a1 + 78; + } + return result; +} + +//----- (004E27E0) -------------------------------------------------------- +int __fastcall std::wfilebuf::_M_destroy_pback(int a1) +{ + bool v1; // zf + int v2; // eax + int v3; // ebx + int result; // eax + int v5; // edx + + if ( *(_BYTE *)(a1 + 88) ) + { + v1 = *(_DWORD *)(a1 + 8) == *(_DWORD *)(a1 + 4); + v2 = *(_DWORD *)(a1 + 80); + v3 = *(_DWORD *)(a1 + 64); + *(_BYTE *)(a1 + 88) = 0; + result = v2 + 2 * !v1; + v5 = *(_DWORD *)(a1 + 84); + *(_DWORD *)(a1 + 4) = v3; + *(_DWORD *)(a1 + 80) = result; + *(_DWORD *)(a1 + 8) = result; + *(_DWORD *)(a1 + 12) = v5; + } + return result; +} + +//----- (004E2820) -------------------------------------------------------- +int __fastcall std::wfilebuf::_M_terminate_output(int a1) +{ + int v1; // esi + int v3; // eax + int v4; // ecx + _DWORD **v5; // eax + int v6; // ebx + _DWORD **v7; // ebp + unsigned int v8; // eax + unsigned int v9; // esi + unsigned __int8 v11; // [esp+2Bh] [ebp-B5h] + FILE **v12; // [esp+2Ch] [ebp-B4h] + int v13; // [esp+30h] [ebp-B0h] + int v14; // [esp+40h] [ebp-A0h] BYREF + char v15[128]; // [esp+44h] [ebp-9Ch] BYREF + char v16[28]; // [esp+C4h] [ebp-1Ch] BYREF + + v1 = 1; + if ( *(_DWORD *)(a1 + 16) < *(_DWORD *)(a1 + 20) ) + { + v3 = (*(int (__thiscall **)(int, int))(*(_DWORD *)a1 + 52))(a1, 0xFFFF); + LOBYTE(v3) = (_WORD)v3 != 0xFFFF; + v1 = v3; + } + if ( *(_BYTE *)(a1 + 74) ) + { + v4 = *(_DWORD *)(a1 + 92); + if ( !v4 ) + std::__throw_bad_cast(); + v11 = (*(int (__fastcall **)(int))(*(_DWORD *)v4 + 24))(v4); + if ( !v11 ) + { + if ( (_BYTE)v1 ) + { + v12 = (FILE **)(a1 + 40); + v5 = (_DWORD **)a1; + v6 = a1 + 56; + v7 = v5; + while ( 1 ) + { + v8 = (*(int (__thiscall **)(_DWORD *, int, char *, char *, int *))(*v7[23] + 12))(v7[23], v6, v15, v16, &v14); + v9 = v8; + if ( v8 == 2 ) + break; + if ( v8 <= 1 && v14 - (int)v15 > 0 ) + { + v13 = v14 - (_DWORD)v15; + if ( v13 != std::__basic_file::xsputn(v12, v15, v14 - (_DWORD)v15) ) + return v11; + if ( v9 == 1 ) + continue; + } + return ((unsigned __int16 (__thiscall *)(_DWORD **, int))(*v7)[13])(v7, 0xFFFF) != 0xFFFF; + } + return v11; + } + } + } + return v1; +} +// 4E2820: using guessed type char var_1C[28]; + +//----- (004E2930) -------------------------------------------------------- +bool __thiscall std::wfilebuf::_M_convert_to_external(int this, char *a2, unsigned int a3) +{ + int v4; // ecx + unsigned int v5; // esi + int v6; // eax + void *v7; // esp + void *v8; // esp + unsigned int v9; // eax + unsigned int v10; // eax + int v12; // esi + char v13; // [esp+20h] [ebp-38h] + int v14; // [esp+38h] [ebp-20h] BYREF + int v15; // [esp+3Ch] [ebp-1Ch] BYREF + char v16[24]; // [esp+40h] [ebp-18h] BYREF + + v4 = *(_DWORD *)(this + 92); + v5 = a3; + if ( !v4 ) + std::__throw_bad_cast(); + if ( (*(unsigned __int8 (__fastcall **)(int))(*(_DWORD *)v4 + 24))(v4) ) + goto LABEL_5; + v6 = 16 * ((a3 * (*(int (__thiscall **)(_DWORD))(**(_DWORD **)(this + 92) + 32))(*(_DWORD *)(this + 92)) + 27) >> 4); + v7 = alloca(v6); + v8 = alloca(v6); + v9 = (*(int (__thiscall **)(_DWORD, int, char *, char *))(**(_DWORD **)(this + 92) + 8))( + *(_DWORD *)(this + 92), + this + 56, + a2, + &a2[2 * a3]); + if ( v9 > 1 ) + { + if ( v9 == 3 ) + { +LABEL_5: + v10 = std::__basic_file::xsputn((FILE **)(this + 40), a2, a3); + return v10 == v5; + } +LABEL_11: + std::__throw_ios_failure("basic_filebuf::_M_convert_to_external conversion error"); + } + v13 = v9; + v5 = v14 - (_DWORD)v16; + v10 = std::__basic_file::xsputn((FILE **)(this + 40), v16, v14 - (_DWORD)v16); + if ( v14 - (_DWORD)v16 != v10 || (v13 & 1) == 0 ) + return v10 == v5; + if ( (*(int (__thiscall **)(_DWORD, int *, int, _DWORD, int *, char *, int, int *))(**(_DWORD **)(this + 92) + 8))( + *(_DWORD *)(this + 92), + &v15, + v15, + *(_DWORD *)(this + 20), + &v15, + v16, + v14, + &v14) == 2 ) + goto LABEL_11; + v12 = v14 - (_DWORD)v16; + return std::__basic_file::xsputn((FILE **)(this + 40), v16, v14 - (_DWORD)v16) == v12; +} + +//----- (004E2AA0) -------------------------------------------------------- +void __fastcall std::wfilebuf::_M_destroy_internal_buffer(int a1) +{ + if ( *(_BYTE *)(a1 + 72) ) + { + if ( *(_DWORD *)(a1 + 64) ) + operator delete[](*(void **)(a1 + 64)); + *(_DWORD *)(a1 + 64) = 0; + *(_BYTE *)(a1 + 72) = 0; + } + if ( *(_DWORD *)(a1 + 96) ) + operator delete[](*(void **)(a1 + 96)); + *(_DWORD *)(a1 + 96) = 0; + *(_DWORD *)(a1 + 100) = 0; + *(_DWORD *)(a1 + 104) = 0; + *(_DWORD *)(a1 + 108) = 0; +} + +//----- (004E2B00) -------------------------------------------------------- +void __fastcall std::wfilebuf::_M_allocate_internal_buffer(int a1) +{ + unsigned int v1; // eax + + if ( !*(_BYTE *)(a1 + 72) && !*(_DWORD *)(a1 + 64) ) + { + v1 = *(_DWORD *)(a1 + 68); + if ( v1 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + *(_DWORD *)(a1 + 64) = operator new[](2 * v1); + *(_BYTE *)(a1 + 72) = 1; + } +} + +//----- (004E2B40) -------------------------------------------------------- +_DWORD *__thiscall std::wfilebuf::open(_DWORD *this, char *a2, int a3) +{ + _BYTE *v3; // esi + int v5; // eax + int v6; // eax + unsigned int v8; // eax + _DWORD v9[7]; // [esp+20h] [ebp-1Ch] BYREF + + v3 = this + 10; + if ( !std::__basic_file::is_open(this + 10) ) + { + std::__basic_file::open(v3, a2, a3, 436); + if ( std::__basic_file::is_open(v3) ) + { + v5 = this[16]; + if ( !*((_BYTE *)this + 72) && !v5 ) + { + v8 = this[17]; + if ( v8 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v5 = operator new[](2 * v8); + *((_BYTE *)this + 72) = 1; + this[16] = v5; + } + this[1] = v5; + this[2] = v5; + this[3] = v5; + v6 = this[13]; + this[12] = a3; + *(_WORD *)((char *)this + 73) = 0; + this[5] = 0; + this[4] = 0; + this[6] = 0; + this[14] = v6; + this[15] = v6; + if ( (a3 & 2) == 0 ) + return this; + (*(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD, _DWORD, int, int))(*this + 16))(v9, this, 0, 0, 2, a3); + if ( (v9[0] & v9[1]) != -1 ) + return this; + std::wfilebuf::close((struct _Unwind_Exception *)this); + } + } + return 0; +} + +//----- (004E2C60) -------------------------------------------------------- +_DWORD *__thiscall std::wfilebuf::open(_DWORD *this, wchar_t *a2, int a3) +{ + _BYTE *v3; // esi + int v5; // eax + int v6; // eax + unsigned int v8; // eax + _DWORD v9[7]; // [esp+20h] [ebp-1Ch] BYREF + + v3 = this + 10; + if ( !std::__basic_file::is_open(this + 10) ) + { + std::__basic_file::open(v3, a2, a3); + if ( std::__basic_file::is_open(v3) ) + { + v5 = this[16]; + if ( !*((_BYTE *)this + 72) && !v5 ) + { + v8 = this[17]; + if ( v8 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v5 = operator new[](2 * v8); + *((_BYTE *)this + 72) = 1; + this[16] = v5; + } + this[1] = v5; + this[2] = v5; + this[3] = v5; + v6 = this[13]; + this[12] = a3; + *(_WORD *)((char *)this + 73) = 0; + this[5] = 0; + this[4] = 0; + this[6] = 0; + this[14] = v6; + this[15] = v6; + if ( (a3 & 2) == 0 ) + return this; + (*(void (__thiscall **)(_DWORD *, _DWORD *, _DWORD, _DWORD, int, int))(*this + 16))(v9, this, 0, 0, 2, a3); + if ( (v9[0] & v9[1]) != -1 ) + return this; + std::wfilebuf::close((struct _Unwind_Exception *)this); + } + } + return 0; +} + +//----- (004E2D70) -------------------------------------------------------- +_DWORD *__thiscall std::wfilebuf::open(_DWORD *this, char *a2, int a3) +{ + return std::wfilebuf::open(this, *(char **)a2, a3); +} + +//----- (004E2D80) -------------------------------------------------------- +int __thiscall std::wfilebuf::swap(int this, int a2) +{ + int v3; // eax + int v4; // edx + int v5; // eax + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + int v10; // edx + int v11; // eax + int v12; // edx + int v13; // eax + int v14; // eax + char v15; // dl + int v16; // edx + int v17; // eax + int v18; // edx + int v19; // eax + int v20; // edx + int v21; // eax + int v22; // edx + int v23; // eax + int v24; // edx + int v25; // eax + int v26; // edx + int v27; // eax + int v28; // edx + int v29; // eax + int v30; // edx + int v31; // eax + int v32; // edx + int v33; // eax + int v34; // edx + int v35; // eax + int v36; // edx + int v37; // eax + int v38; // eax + int result; // eax + const std::locale *v40; // [esp+4h] [ebp-48h] + volatile signed __int32 **v41; // [esp+1Ch] [ebp-30h] + _DWORD *v42[8]; // [esp+2Ch] [ebp-20h] BYREF + + v3 = *(_DWORD *)(this + 4); + *(_DWORD *)(this + 4) = *(_DWORD *)(a2 + 4); + v4 = *(_DWORD *)(a2 + 8); + *(_DWORD *)(a2 + 4) = v3; + v5 = *(_DWORD *)(this + 8); + *(_DWORD *)(this + 8) = v4; + v6 = *(_DWORD *)(a2 + 12); + *(_DWORD *)(a2 + 8) = v5; + v7 = *(_DWORD *)(this + 12); + *(_DWORD *)(this + 12) = v6; + v8 = *(_DWORD *)(a2 + 16); + *(_DWORD *)(a2 + 12) = v7; + v9 = *(_DWORD *)(this + 16); + *(_DWORD *)(this + 16) = v8; + v10 = *(_DWORD *)(a2 + 20); + *(_DWORD *)(a2 + 16) = v9; + v11 = *(_DWORD *)(this + 20); + *(_DWORD *)(this + 20) = v10; + v12 = *(_DWORD *)(a2 + 24); + *(_DWORD *)(a2 + 20) = v11; + v13 = *(_DWORD *)(this + 24); + *(_DWORD *)(this + 24) = v12; + *(_DWORD *)(a2 + 24) = v13; + v41 = (volatile signed __int32 **)(this + 28); + std::locale::locale((volatile signed __int32 **)v42, (volatile signed __int32 **)(this + 28), v40); + std::locale::operator=(v41, (volatile signed __int32 **)(a2 + 28)); + std::locale::operator=((volatile signed __int32 **)(a2 + 28), (volatile signed __int32 **)v42); + std::locale::~locale(v42); + v14 = *(_DWORD *)(this + 40); + *(_DWORD *)(this + 40) = *(_DWORD *)(a2 + 40); + v15 = *(_BYTE *)(a2 + 44); + *(_DWORD *)(a2 + 40) = v14; + LOBYTE(v14) = *(_BYTE *)(this + 44); + *(_BYTE *)(this + 44) = v15; + v16 = *(_DWORD *)(a2 + 48); + *(_BYTE *)(a2 + 44) = v14; + v17 = *(_DWORD *)(this + 48); + *(_DWORD *)(this + 48) = v16; + v18 = *(_DWORD *)(a2 + 52); + *(_DWORD *)(a2 + 48) = v17; + v19 = *(_DWORD *)(this + 52); + *(_DWORD *)(this + 52) = v18; + v20 = *(_DWORD *)(a2 + 56); + *(_DWORD *)(a2 + 52) = v19; + v21 = *(_DWORD *)(this + 56); + *(_DWORD *)(this + 56) = v20; + v22 = *(_DWORD *)(a2 + 60); + *(_DWORD *)(a2 + 56) = v21; + v23 = *(_DWORD *)(this + 60); + *(_DWORD *)(this + 60) = v22; + v24 = *(_DWORD *)(a2 + 64); + *(_DWORD *)(a2 + 60) = v23; + v25 = *(_DWORD *)(this + 64); + *(_DWORD *)(this + 64) = v24; + v26 = *(_DWORD *)(a2 + 68); + *(_DWORD *)(a2 + 64) = v25; + v27 = *(_DWORD *)(this + 68); + *(_DWORD *)(this + 68) = v26; + *(_DWORD *)(a2 + 68) = v27; + LOBYTE(v27) = *(_BYTE *)(this + 72); + *(_BYTE *)(this + 72) = *(_BYTE *)(a2 + 72); + v28 = *(_DWORD *)(a2 + 96); + *(_BYTE *)(a2 + 72) = v27; + v29 = *(_DWORD *)(this + 96); + *(_DWORD *)(this + 96) = v28; + v30 = *(_DWORD *)(a2 + 100); + *(_DWORD *)(a2 + 96) = v29; + v31 = *(_DWORD *)(this + 100); + *(_DWORD *)(this + 100) = v30; + v32 = *(_DWORD *)(a2 + 104); + *(_DWORD *)(a2 + 100) = v31; + v33 = *(_DWORD *)(this + 104); + *(_DWORD *)(this + 104) = v32; + v34 = *(_DWORD *)(a2 + 108); + *(_DWORD *)(a2 + 104) = v33; + v35 = *(_DWORD *)(this + 108); + *(_DWORD *)(this + 108) = v34; + LOBYTE(v34) = *(_BYTE *)(a2 + 73); + *(_DWORD *)(a2 + 108) = v35; + LOBYTE(v35) = *(_BYTE *)(this + 73); + *(_BYTE *)(this + 73) = v34; + LOBYTE(v34) = *(_BYTE *)(a2 + 74); + *(_BYTE *)(a2 + 73) = v35; + LOBYTE(v35) = *(_BYTE *)(this + 74); + *(_BYTE *)(this + 74) = v34; + v36 = *(_DWORD *)(a2 + 80); + *(_BYTE *)(a2 + 74) = v35; + v37 = *(_DWORD *)(this + 80); + *(_DWORD *)(this + 80) = v36; + *(_DWORD *)(a2 + 80) = v37; + v38 = *(_DWORD *)(this + 84); + *(_DWORD *)(this + 84) = *(_DWORD *)(a2 + 84); + LOBYTE(v36) = *(_BYTE *)(a2 + 88); + *(_DWORD *)(a2 + 84) = v38; + result = *(unsigned __int8 *)(this + 88); + *(_BYTE *)(this + 88) = v36; + *(_BYTE *)(a2 + 88) = result; + return result; +} +// 4E2DE8: variable 'v40' is possibly undefined + +//----- (004E2F10) -------------------------------------------------------- +int __fastcall std::wfilebuf::sync(_DWORD *a1) +{ + if ( a1[4] >= a1[5] ) + return 0; + else + return -((*(unsigned __int16 (__thiscall **)(_DWORD *, int))(*a1 + 52))(a1, 0xFFFF) == 0xFFFF); +} + +//----- (004E2F50) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall std::wfilebuf::close(struct _Unwind_Exception *a1) +{ + bool v1; // zf + void *v2; // eax + int v3; // edx + int v4; // edx + struct _Unwind_Exception *lpuexcpt; // [esp+1Ch] [ebp-60h] + int v7; // [esp+24h] [ebp-58h] + char v8; // [esp+2Bh] [ebp-51h] + + lpuexcpt = a1; + v7 = (int)a1 + 40; + if ( !std::__basic_file::is_open((_DWORD *)a1 + 10) ) + return 0; + v8 = std::wfilebuf::_M_terminate_output((int)lpuexcpt) ^ 1; + v1 = *((_BYTE *)lpuexcpt + 72) == 0; + *((_DWORD *)lpuexcpt + 12) = 0; + *((_BYTE *)lpuexcpt + 88) = 0; + if ( !v1 ) + { + v2 = (void *)*((_DWORD *)lpuexcpt + 16); + if ( v2 ) + operator delete[](v2); + *((_DWORD *)lpuexcpt + 16) = 0; + *((_BYTE *)lpuexcpt + 72) = 0; + } + if ( *((_DWORD *)lpuexcpt + 24) ) + operator delete[](*((void **)lpuexcpt + 24)); + *((_DWORD *)lpuexcpt + 24) = 0; + *((_DWORD *)lpuexcpt + 25) = 0; + *((_DWORD *)lpuexcpt + 26) = 0; + *((_DWORD *)lpuexcpt + 27) = 0; + *(_WORD *)((char *)lpuexcpt + 73) = 0; + v3 = *((_DWORD *)lpuexcpt + 16); + *((_DWORD *)lpuexcpt + 5) = 0; + *((_DWORD *)lpuexcpt + 1) = v3; + *((_DWORD *)lpuexcpt + 2) = v3; + *((_DWORD *)lpuexcpt + 3) = v3; + v4 = *((_DWORD *)lpuexcpt + 13); + *((_DWORD *)lpuexcpt + 4) = 0; + *((_DWORD *)lpuexcpt + 6) = 0; + *((_DWORD *)lpuexcpt + 14) = v4; + *((_DWORD *)lpuexcpt + 15) = v4; + if ( !std::__basic_file::close(v7) || v8 ) + return 0; + return lpuexcpt; +} + +//----- (004E3100) -------------------------------------------------------- +char __thiscall std::wfilebuf::imbue(void *this, int a2) +{ + void *v3; // esi + int v4; // eax + int v5; // ecx + int v6; // ecx + int v7; // edi + const void *Src; // eax + int v9; // edi + size_t Size; // edi + int v11; // eax + int v12; // eax + int v14; // [esp+30h] [ebp-1Ch] BYREF + int v15; // [esp+34h] [ebp-18h] + + if ( (unsigned __int8)std::has_facet>(a2) ) + v3 = std::use_facet>(a2); + else + v3 = 0; + LOBYTE(v4) = std::__basic_file::is_open((_DWORD *)this + 10); + if ( !(_BYTE)v4 ) + goto LABEL_13; + if ( !*((_BYTE *)this + 73) && !*((_BYTE *)this + 74) ) + { + *((_DWORD *)this + 23) = v3; + return v4; + } + v5 = *((_DWORD *)this + 23); + if ( !v5 ) + goto LABEL_24; + v4 = (*(int (__fastcall **)(int))(*(_DWORD *)v5 + 20))(v5); + if ( v4 == -1 ) + goto LABEL_18; + if ( !*((_BYTE *)this + 73) ) + { + if ( !*((_BYTE *)this + 74) ) + goto LABEL_13; + LOBYTE(v4) = std::wfilebuf::_M_terminate_output((int)this); + if ( (_BYTE)v4 ) + { + v4 = *((_DWORD *)this + 16); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 4) = 0; + *((_DWORD *)this + 1) = v4; + *((_DWORD *)this + 2) = v4; + *((_DWORD *)this + 3) = v4; + *((_DWORD *)this + 6) = 0; + goto LABEL_13; + } +LABEL_18: + *((_DWORD *)this + 23) = 0; + return v4; + } + v6 = *((_DWORD *)this + 23); + if ( !v6 ) +LABEL_24: + std::__throw_bad_cast(); + LOBYTE(v4) = (*(int (__fastcall **)(int))(*(_DWORD *)v6 + 24))(v6); + if ( !(_BYTE)v4 ) + { + v7 = *((_DWORD *)this + 24); + Src = (const void *)(v7 + + (*(int (__thiscall **)(_DWORD, int, int, _DWORD, int))(**((_DWORD **)this + 23) + 28))( + *((_DWORD *)this + 23), + (int)this + 60, + v7, + *((_DWORD *)this + 26), + (*((_DWORD *)this + 2) - *((_DWORD *)this + 1)) >> 1)); + v9 = *((_DWORD *)this + 27); + *((_DWORD *)this + 26) = Src; + Size = v9 - (_DWORD)Src; + if ( Size ) + memmove(*((void **)this + 24), Src, Size); + v11 = *((_DWORD *)this + 24); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 4) = 0; + *((_DWORD *)this + 26) = v11; + *((_DWORD *)this + 27) = Size + v11; + v12 = *((_DWORD *)this + 16); + *((_DWORD *)this + 6) = 0; + *((_DWORD *)this + 1) = v12; + *((_DWORD *)this + 2) = v12; + *((_DWORD *)this + 3) = v12; + v4 = *((_DWORD *)this + 13); + *((_DWORD *)this + 14) = v4; + *((_DWORD *)this + 15) = v4; + goto LABEL_13; + } + if ( !v3 ) + goto LABEL_18; + LOBYTE(v4) = (*(int (__fastcall **)(void *))(*(_DWORD *)v3 + 24))(v3); + if ( !(_BYTE)v4 ) + { + (*(void (__thiscall **)(int *, void *, _DWORD, _DWORD, int, _DWORD))(*(_DWORD *)this + 16))( + &v14, + this, + 0, + 0, + 1, + *((_DWORD *)this + 12)); + LOBYTE(v4) = v14 & v15; + if ( (v14 & v15) == -1 ) + goto LABEL_18; + } +LABEL_13: + *((_DWORD *)this + 23) = v3; + return v4; +} + +//----- (004E32E0) -------------------------------------------------------- +int __thiscall std::wfilebuf::setbuf(int this, __int64 a2) +{ + if ( std::__basic_file::is_open((_DWORD *)(this + 40)) ) + return this; + if ( !a2 ) + { + *(_DWORD *)(this + 68) = 1; + return this; + } + if ( !(_DWORD)a2 || SHIDWORD(a2) <= 0 ) + return this; + *(_QWORD *)(this + 64) = a2; + return this; +} + +//----- (004E3340) -------------------------------------------------------- +int __thiscall std::wfilebuf::xsgetn(_DWORD *this, char *a2, signed int a3) +{ + char *v4; // edi + signed int v5; // esi + _WORD *v6; // ecx + _WORD *v7; // eax + int v8; // ebp + bool v9; // zf + int v10; // eax + int v11; // edx + int v12; // eax + int v13; // ecx + int v14; // eax + int v15; // ecx + char v16; // al + int v18; // eax + _BYTE *v19; // edx + _BYTE *Src; // eax + int i; // eax + int v22; // eax + int *v23; // eax + int v24; // [esp+1Ch] [ebp-20h] + int v25; // [esp+1Ch] [ebp-20h] + + v4 = a2; + v5 = a3; + if ( *((_BYTE *)this + 88) ) + { + v6 = (_WORD *)this[2]; + v7 = (_WORD *)this[1]; + v8 = 0; + if ( a3 > 0 && v7 == v6 ) + { + v6 = v7 + 1; + v5 = a3 - 1; + v4 = a2 + 2; + v8 = 1; + *(_WORD *)a2 = *v7; + } + v9 = v6 == v7; + v10 = this[20]; + v11 = this[16]; + *((_BYTE *)this + 88) = 0; + this[1] = v11; + v12 = v10 + 2 * !v9; + v13 = this[21]; + this[20] = v12; + this[2] = v12; + this[3] = v13; + } + else if ( *((_BYTE *)this + 74) ) + { + if ( (*(unsigned __int16 (__thiscall **)(_DWORD *, int))(*this + 52))(this, 0xFFFF) == 0xFFFF ) + return 0; + v18 = this[16]; + this[5] = 0; + v8 = 0; + this[4] = 0; + this[1] = v18; + this[2] = v18; + this[3] = v18; + this[6] = 0; + *((_BYTE *)this + 74) = 0; + } + else + { + v8 = 0; + } + v14 = 2; + if ( this[17] >= 2u ) + v14 = this[17]; + if ( v5 <= v14 - 1 ) + goto LABEL_12; + v15 = this[23]; + if ( !v15 ) + std::__throw_bad_cast(); + v24 = this[12]; + v16 = (*(int (__fastcall **)(int))(*(_DWORD *)v15 + 24))(v15); + if ( (v24 & 8) != 0 && v16 ) + { + v19 = (_BYTE *)this[3]; + Src = (_BYTE *)this[2]; + if ( Src != v19 ) + { + v25 = v19 - Src; + memcpy(v4, Src, v19 - Src); + this[2] += v25; + v4 += v25; + v8 += v25 >> 1; + v5 -= v25 >> 1; + } + for ( i = std::__basic_file::xsgetn((FILE **)this + 10, v4, v5); + ; + i = std::__basic_file::xsgetn((FILE **)this + 10, v4, v5) ) + { + if ( i == -1 ) + { + v23 = __errno(); + std::__throw_ios_failure( + (std::__ios_failure *)"basic_filebuf::xsgetn error reading the file", + (std::runtime_error *)*v23); + } + if ( !i ) + break; + v8 += i; + v5 -= i; + if ( !v5 ) + goto LABEL_26; + v4 += 2 * i; + } + if ( !v5 ) + { +LABEL_26: + *((_BYTE *)this + 73) = 1; + return v8; + } + v22 = this[16]; + this[5] = 0; + this[4] = 0; + this[1] = v22; + this[2] = v22; + this[3] = v22; + this[6] = 0; + *((_BYTE *)this + 73) = 0; + } + else + { +LABEL_12: + v8 += std::wstreambuf::xsgetn(this, v4, v5); + } + return v8; +} + +//----- (004E3540) -------------------------------------------------------- +int __thiscall std::wfilebuf::xsputn(int this, char *a2, signed int a3) +{ + int v4; // eax + int v5; // ecx + char v6; // si + int v7; // edx + int v8; // eax + unsigned int v9; // ecx + int v10; // esi + int v11; // eax + int v12; // edx + bool v13; // cc + int result; // eax + int v15; // edx + int v16; // ecx + unsigned int v17; // ecx + char *v18; // [esp+0h] [ebp-2Ch] + + v4 = *(_DWORD *)(this + 48); + v5 = *(_DWORD *)(this + 92); + if ( (v4 & 0x10) != 0 ) + LOBYTE(v4) = 1; + v6 = v4 & 1; + if ( !v5 ) + std::__throw_bad_cast(); + if ( !(*(unsigned __int8 (__fastcall **)(int))(*(_DWORD *)v5 + 24))(v5) || !v6 || *(_BYTE *)(this + 73) ) + return std::wstreambuf::xsputn((_DWORD *)this, a2, a3); + v7 = *(_DWORD *)(this + 20); + v8 = (*(_DWORD *)(this + 24) - v7) >> 1; + if ( !*(_BYTE *)(this + 74) ) + { + v9 = *(_DWORD *)(this + 68); + if ( v9 > 1 ) + v8 = v9 - 1; + } + if ( v8 >= 1024 ) + v8 = 1024; + if ( a3 < v8 ) + return std::wstreambuf::xsputn((_DWORD *)this, a2, a3); + v18 = *(char **)(this + 16); + v10 = (v7 - (int)v18) >> 1; + v11 = std::__basic_file::xsputn_2((FILE **)(this + 40), v18, v10, a2, a3); + if ( v10 + a3 == v11 ) + { + v15 = *(_DWORD *)(this + 64); + v16 = *(_DWORD *)(this + 48); + *(_DWORD *)(this + 4) = v15; + *(_DWORD *)(this + 8) = v15; + *(_DWORD *)(this + 12) = v15; + if ( ((v16 & 0x10) != 0 || (v16 & 1) != 0) && (v17 = *(_DWORD *)(this + 68), v17 > 1) ) + { + *(_DWORD *)(this + 20) = v15; + *(_DWORD *)(this + 16) = v15; + *(_DWORD *)(this + 24) = v15 + 2 * v17 - 2; + } + else + { + *(_DWORD *)(this + 20) = 0; + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 24) = 0; + } + *(_BYTE *)(this + 74) = 1; + } + v12 = v11 - v10; + v13 = v10 < v11; + result = 0; + if ( v13 ) + return v12; + return result; +} + +//----- (004E3670) -------------------------------------------------------- +_DWORD *__thiscall std::wfilebuf::_M_seek(_DWORD *this, int a2, __int64 a3, int a4, int a5) +{ + _DWORD *result; // eax + __int64 v7; // rax + int v8; // ecx + int v9; // ecx + + *this = -1; + this[1] = -1; + this[2] = 0; + if ( !(unsigned __int8)std::wfilebuf::_M_terminate_output(a2) ) + return this; + v7 = std::__basic_file::seekoff((FILE **)(a2 + 40), a3, a4); + if ( ((unsigned int)v7 & HIDWORD(v7)) == -1 ) + return this; + *this = v7; + result = this; + *(_WORD *)(a2 + 73) = 0; + v8 = *(_DWORD *)(a2 + 96); + *(_DWORD *)(a2 + 20) = 0; + *(_DWORD *)(a2 + 108) = v8; + *(_DWORD *)(a2 + 104) = v8; + v9 = *(_DWORD *)(a2 + 64); + *(_DWORD *)(a2 + 16) = 0; + *(_DWORD *)(a2 + 4) = v9; + *(_DWORD *)(a2 + 8) = v9; + *(_DWORD *)(a2 + 12) = v9; + *(_DWORD *)(a2 + 24) = 0; + *(_DWORD *)(a2 + 56) = a5; + this[2] = a5; + this[1] = HIDWORD(v7); + return result; +} + +//----- (004E3720) -------------------------------------------------------- +_DWORD *__thiscall std::wfilebuf::seekoff(_DWORD *this, int a2, __int64 a3, int a4, int a5) +{ + int v6; // ecx + int v7; // eax + int v8; // edx + bool v9; // al + bool v11; // zf + __int64 v12; // rax + __int64 v13; // rax + int v14; // eax + int v15; // edx + unsigned int v16; // esi + unsigned int v17; // edi + __int64 v18; // kr00_8 + __int64 ext_pos; // [esp+28h] [ebp-54h] + bool v20; // [esp+34h] [ebp-48h] + int v21; // [esp+34h] [ebp-48h] + int v22; // [esp+3Ch] [ebp-40h] + int v23; // [esp+4Ch] [ebp-30h] BYREF + int v24[11]; // [esp+50h] [ebp-2Ch] BYREF + + v6 = *(_DWORD *)(a2 + 92); + if ( v6 ) + { + v7 = (*(int (__fastcall **)(int))(*(_DWORD *)v6 + 20))(v6); + v8 = 0; + if ( v7 >= 0 ) + v8 = v7; + v9 = v7 <= 0; + v22 = v8; + } + else + { + v22 = 0; + v9 = 1; + } + *this = -1; + this[1] = -1; + this[2] = 0; + v20 = v9 && a3 != 0; + if ( !std::__basic_file::is_open((_DWORD *)(a2 + 40)) || v20 ) + return this; + if ( a4 != 1 + || a3 + || *(_BYTE *)(a2 + 74) + && !(*(unsigned __int8 (__fastcall **)(_DWORD))(**(_DWORD **)(a2 + 92) + 24))(*(_DWORD *)(a2 + 92)) ) + { + if ( *(_BYTE *)(a2 + 88) ) + { + v11 = *(_DWORD *)(a2 + 8) == *(_DWORD *)(a2 + 4); + *(_BYTE *)(a2 + 88) = 0; + v14 = *(_DWORD *)(a2 + 80) + 2 * !v11; + v15 = *(_DWORD *)(a2 + 84); + *(_DWORD *)(a2 + 4) = *(_DWORD *)(a2 + 64); + *(_DWORD *)(a2 + 80) = v14; + *(_DWORD *)(a2 + 8) = v14; + *(_DWORD *)(a2 + 12) = v15; + } + v21 = *(_DWORD *)(a2 + 52); + v23 = v21; + v16 = a3 * v22; + v17 = (unsigned __int64)(a3 * v22) >> 32; + if ( *(_BYTE *)(a2 + 73) && a4 == 1 ) + { + v23 = *(_DWORD *)(a2 + 60); + v18 = std::wfilebuf::_M_get_ext_pos(a2, (int)&v23) + __PAIR64__(v17, v16); + std::wfilebuf::_M_seek(v24, a2, v18, 1, v23); + } + else + { + std::wfilebuf::_M_seek(v24, a2, __SPAIR64__(v17, v16), a4, v21); + } + *this = v24[0]; + this[1] = v24[1]; + this[2] = v24[2]; + return this; + } + v11 = *(_BYTE *)(a2 + 73) == 0; + ext_pos = 0LL; + v23 = *(_DWORD *)(a2 + 52); + if ( !v11 ) + { + v23 = *(_DWORD *)(a2 + 60); + ext_pos = std::wfilebuf::_M_get_ext_pos(a2, (int)&v23); + } + if ( *(_BYTE *)(a2 + 74) ) + ext_pos = (*(_DWORD *)(a2 + 20) - *(_DWORD *)(a2 + 16)) >> 1; + v12 = std::__basic_file::seekoff((FILE **)(a2 + 40), 0LL, 1); + if ( ((unsigned int)v12 & HIDWORD(v12)) == -1 ) + return this; + v13 = ext_pos + v12; + *this = v13; + LODWORD(v13) = v23; + this[1] = HIDWORD(v13); + this[2] = v13; + return this; +} + +//----- (004E3990) -------------------------------------------------------- +_DWORD *__thiscall std::wfilebuf::seekpos(_DWORD *this, int a2, __int64 a3, int a4, int a5, int a6) +{ + bool v7; // zf + int v8; // eax + int v9; // edx + int v10; // ebp + __int64 v11; // rax + int v13; // ecx + int v14; // ecx + + *this = -1; + this[1] = -1; + this[2] = 0; + if ( std::__basic_file::is_open((_DWORD *)(a2 + 40)) ) + { + if ( *(_BYTE *)(a2 + 88) ) + { + v7 = *(_DWORD *)(a2 + 8) == *(_DWORD *)(a2 + 4); + *(_BYTE *)(a2 + 88) = 0; + v8 = *(_DWORD *)(a2 + 80) + 2 * !v7; + v9 = *(_DWORD *)(a2 + 84); + *(_DWORD *)(a2 + 4) = *(_DWORD *)(a2 + 64); + *(_DWORD *)(a2 + 80) = v8; + *(_DWORD *)(a2 + 8) = v8; + *(_DWORD *)(a2 + 12) = v9; + } + v10 = a4; + if ( (unsigned __int8)std::wfilebuf::_M_terminate_output(a2) ) + { + v11 = std::__basic_file::seekoff((FILE **)(a2 + 40), a3, 0); + if ( ((unsigned int)v11 & HIDWORD(v11)) == -1 ) + { + v10 = 0; + } + else + { + *(_DWORD *)(a2 + 20) = 0; + *(_WORD *)(a2 + 73) = 0; + v13 = *(_DWORD *)(a2 + 96); + *(_DWORD *)(a2 + 16) = 0; + *(_DWORD *)(a2 + 108) = v13; + *(_DWORD *)(a2 + 104) = v13; + v14 = *(_DWORD *)(a2 + 64); + *(_DWORD *)(a2 + 24) = 0; + *(_DWORD *)(a2 + 4) = v14; + *(_DWORD *)(a2 + 8) = v14; + *(_DWORD *)(a2 + 12) = v14; + *(_DWORD *)(a2 + 56) = a4; + } + } + else + { + v10 = 0; + v11 = -1LL; + } + *(_QWORD *)this = v11; + this[2] = v10; + } + return this; +} + +//----- (004E3AC0) -------------------------------------------------------- +int __thiscall std::wfilebuf::overflow(int this, int a2) +{ + int v3; // eax + int v4; // edx + int v5; // ecx + int ext_pos; // eax + int v7; // ebp + int v8; // edi + int result; // eax + char *v10; // edx + char *v11; // eax + int v12; // eax + int v13; // edx + __int64 v14; // rax + int v15; // eax + int v16; // eax + unsigned int v17; // eax + int v18; // edx + int v19; // ecx + _WORD *v20; // eax + unsigned int v21; // edx + __int16 v22[15]; // [esp+1Eh] [ebp-1Eh] BYREF + + if ( (*(_BYTE *)(this + 48) & 0x11) == 0 ) + return -1; + if ( *(_BYTE *)(this + 73) ) + { + if ( *(_BYTE *)(this + 88) ) + { + v3 = *(_DWORD *)(this + 80) + 2 * (*(_DWORD *)(this + 8) != *(_DWORD *)(this + 4)); + v4 = *(_DWORD *)(this + 84); + *(_DWORD *)(this + 80) = v3; + v5 = *(_DWORD *)(this + 64); + *(_DWORD *)(this + 8) = v3; + *(_DWORD *)(this + 4) = v5; + *(_DWORD *)(this + 12) = v4; + *(_BYTE *)(this + 88) = 0; + } + ext_pos = std::wfilebuf::_M_get_ext_pos(this, this + 60); + v7 = *(_DWORD *)(this + 60); + v8 = ext_pos; + if ( (unsigned __int8)std::wfilebuf::_M_terminate_output(this) ) + { + v14 = std::__basic_file::seekoff((FILE **)(this + 40), v8, 1); + if ( ((unsigned int)v14 & HIDWORD(v14)) != -1 ) + { + *(_DWORD *)(this + 20) = 0; + *(_WORD *)(this + 73) = 0; + v15 = *(_DWORD *)(this + 96); + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 108) = v15; + *(_DWORD *)(this + 104) = v15; + v16 = *(_DWORD *)(this + 64); + *(_DWORD *)(this + 24) = 0; + *(_DWORD *)(this + 4) = v16; + *(_DWORD *)(this + 8) = v16; + *(_DWORD *)(this + 12) = v16; + *(_DWORD *)(this + 56) = v7; + goto LABEL_19; + } + } + return -1; + } + v10 = *(char **)(this + 16); + v11 = *(char **)(this + 20); + if ( v11 <= v10 ) + { +LABEL_19: + v17 = *(_DWORD *)(this + 68); + if ( v17 <= 1 ) + { + v22[0] = a2; + if ( (_WORD)a2 == 0xFFFF ) + { + *(_BYTE *)(this + 74) = 1; + return 0; + } + if ( std::wfilebuf::_M_convert_to_external(this, (char *)v22, 1u) ) + { + *(_BYTE *)(this + 74) = 1; + return a2; + } + return -1; + } + v18 = *(_DWORD *)(this + 64); + v19 = *(_DWORD *)(this + 48); + *(_DWORD *)(this + 4) = v18; + *(_DWORD *)(this + 8) = v18; + *(_DWORD *)(this + 12) = v18; + if ( (v19 & 0x10) != 0 || (v19 & 1) != 0 ) + { + *(_DWORD *)(this + 20) = v18; + *(_DWORD *)(this + 16) = v18; + *(_DWORD *)(this + 24) = v18 + 2 * v17 - 2; + } + else + { + *(_DWORD *)(this + 20) = 0; + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 24) = 0; + } + *(_BYTE *)(this + 74) = 1; + if ( (_WORD)a2 != 0xFFFF ) + { + v20 = *(_WORD **)(this + 20); + *v20 = a2; + *(_DWORD *)(this + 20) = v20 + 1; + return a2; + } + return 0; + } + if ( (_WORD)a2 != 0xFFFF ) + { + *(_WORD *)v11 = a2; + v11 += 2; + *(_DWORD *)(this + 20) = v11; + } + if ( !std::wfilebuf::_M_convert_to_external(this, v10, (v11 - v10) >> 1) ) + return -1; + v12 = *(_DWORD *)(this + 64); + v13 = *(_DWORD *)(this + 48); + *(_DWORD *)(this + 4) = v12; + *(_DWORD *)(this + 8) = v12; + *(_DWORD *)(this + 12) = v12; + if ( ((v13 & 0x10) != 0 || (v13 & 1) != 0) && (v21 = *(_DWORD *)(this + 68), v21 > 1) ) + { + *(_DWORD *)(this + 20) = v12; + *(_DWORD *)(this + 16) = v12; + *(_DWORD *)(this + 24) = v12 + 2 * v21 - 2; + } + else + { + *(_DWORD *)(this + 20) = 0; + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 24) = 0; + } + result = a2; + if ( (_WORD)a2 == 0xFFFF ) + return 0; + return result; +} +// 4E3AC0: using guessed type __int16 var_1E[15]; + +//----- (004E3D10) -------------------------------------------------------- +int __thiscall std::wfilebuf::pbackfail(char *this, int a2) +{ + char v3; // di + unsigned int v4; // eax + int v5; // edx + int result; // eax + _WORD *v7; // eax + int v8; // eax + int v9; // eax + int v10[7]; // [esp+24h] [ebp-1Ch] BYREF + + if ( (this[48] & 8) == 0 ) + return -1; + if ( this[74] ) + { + if ( (*(unsigned __int16 (__thiscall **)(char *, int))(*(_DWORD *)this + 52))(this, 0xFFFF) == 0xFFFF ) + return -1; + v9 = *((_DWORD *)this + 16); + *((_DWORD *)this + 5) = 0; + *((_DWORD *)this + 4) = 0; + v3 = this[88]; + *((_DWORD *)this + 1) = v9; + *((_DWORD *)this + 2) = v9; + *((_DWORD *)this + 3) = v9; + *((_DWORD *)this + 6) = 0; + this[74] = 0; + } + else + { + v3 = this[88]; + v4 = *((_DWORD *)this + 2); + if ( v4 > *((_DWORD *)this + 1) ) + { + *((_DWORD *)this + 2) = v4 - 2; + v5 = *(unsigned __int16 *)(v4 - 2); + goto LABEL_5; + } + } + (*(void (__thiscall **)(int *, char *, int, int, int, int))(*(_DWORD *)this + 16))(v10, this, -1, -1, 1, 24); + if ( (v10[0] & v10[1]) == -1 ) + return -1; + v5 = (*(int (__fastcall **)(char *))(*(_DWORD *)this + 36))(this); + if ( (_WORD)v5 == 0xFFFF ) + return -1; +LABEL_5: + result = 0; + if ( (_WORD)a2 == 0xFFFF ) + return result; + result = v5; + if ( (_WORD)v5 == (_WORD)a2 ) + return result; + if ( v3 ) + return -1; + v7 = (_WORD *)*((_DWORD *)this + 2); + if ( !this[88] ) + { + *((_DWORD *)this + 20) = v7; + v8 = *((_DWORD *)this + 3); + *((_DWORD *)this + 3) = this + 78; + *((_DWORD *)this + 21) = v8; + v7 = this + 76; + *((_DWORD *)this + 1) = this + 76; + *((_DWORD *)this + 2) = this + 76; + this[88] = 1; + } + this[73] = 1; + *v7 = a2; + return a2; +} + +//----- (004E3E40) -------------------------------------------------------- +int __fastcall std::wfilebuf::showmanyc(_DWORD *a1) +{ + int v1; // edi + FILE **v2; // ebp + int v4; // ecx + int v5; // edi + int v6; // esi + int v8; // edi + + v1 = a1[12]; + if ( (v1 & 8) == 0 ) + return -1; + v2 = (FILE **)(a1 + 10); + if ( !std::__basic_file::is_open(a1 + 10) ) + return -1; + v4 = a1[23]; + v5 = v1 & 4; + v6 = (a1[3] - a1[2]) >> 1; + if ( !v4 ) + std::__throw_bad_cast(); + if ( (*(int (__fastcall **)(int))(*(_DWORD *)v4 + 20))(v4) < 0 || !v5 ) + return v6; + v8 = std::__basic_file::showmanyc(v2); + return v8 / (*(int (**)(void))(*(_DWORD *)a1[23] + 32))() + v6; +} + +//----- (004E3ED0) -------------------------------------------------------- +int __fastcall std::wfilebuf::underflow(int a1) +{ + unsigned __int16 *v2; // eax + int v3; // edi + int v4; // ecx + int v5; // eax + signed int v6; // esi + int v7; // ecx + const void *Src; // eax + signed int Size; // edi + unsigned int v10; // edx + signed int v11; // ecx + char *v12; // ebp + int v13; // ecx + char *v14; // eax + void *v15; // edx + int v16; // esi + char v17; // di + int v18; // ebp + char v19; // al + int v20; // eax + int v21; // eax + int result; // eax + bool v23; // zf + int v24; // eax + int v25; // ecx + unsigned int v26; // edx + int v27; // eax + int v28; // eax + unsigned int v29; // ecx + char *v30; // eax + unsigned int v31; // esi + unsigned __int16 *v32; // eax + int v33; // eax + int *v34; // eax + char *v35; // eax + char *v36; // eax + char *v37; // eax + unsigned int v38; // [esp+44h] [ebp-34h] + unsigned int v39; // [esp+48h] [ebp-30h] + unsigned int v40; // [esp+48h] [ebp-30h] + unsigned int v41; // [esp+48h] [ebp-30h] + unsigned int v42; // [esp+48h] [ebp-30h] + unsigned int v43; // [esp+48h] [ebp-30h] + void *v44; // [esp+58h] [ebp-20h] BYREF + + if ( (*(_BYTE *)(a1 + 48) & 8) == 0 ) + return -1; + if ( *(_BYTE *)(a1 + 74) ) + { + result = (*(int (__thiscall **)(int, int))(*(_DWORD *)a1 + 52))(a1, 0xFFFF); + if ( (_WORD)result == 0xFFFF ) + return result; + v2 = *(unsigned __int16 **)(a1 + 64); + v23 = *(_BYTE *)(a1 + 88) == 0; + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 4) = v2; + *(_DWORD *)(a1 + 8) = v2; + *(_DWORD *)(a1 + 12) = v2; + *(_DWORD *)(a1 + 24) = 0; + *(_BYTE *)(a1 + 74) = 0; + if ( v23 ) + { +LABEL_4: + if ( *(_DWORD *)(a1 + 12) <= (unsigned int)v2 ) + goto LABEL_5; + return *v2; + } + } + else + { + v2 = *(unsigned __int16 **)(a1 + 8); + if ( !*(_BYTE *)(a1 + 88) ) + goto LABEL_4; + } + v23 = *(_DWORD *)(a1 + 4) == (_DWORD)v2; + v24 = *(_DWORD *)(a1 + 80); + *(_BYTE *)(a1 + 88) = 0; + v25 = *(_DWORD *)(a1 + 64); + v2 = (unsigned __int16 *)(v24 + 2 * !v23); + v26 = *(_DWORD *)(a1 + 84); + *(_DWORD *)(a1 + 80) = v2; + *(_DWORD *)(a1 + 4) = v25; + *(_DWORD *)(a1 + 8) = v2; + *(_DWORD *)(a1 + 12) = v26; + if ( v26 > (unsigned int)v2 ) + return *v2; +LABEL_5: + v3 = 2; + if ( *(_DWORD *)(a1 + 68) >= 2u ) + v3 = *(_DWORD *)(a1 + 68); + v4 = *(_DWORD *)(a1 + 92); + v38 = v3 - 1; + if ( !v4 ) + std::__throw_bad_cast(); + if ( !(*(unsigned __int8 (__fastcall **)(int))(*(_DWORD *)v4 + 24))(v4) ) + { + v5 = (*(int (__fastcall **)(_DWORD))(**(_DWORD **)(a1 + 92) + 20))(*(_DWORD *)(a1 + 92)); + if ( v5 <= 0 ) + { + v33 = (*(int (__fastcall **)(_DWORD))(**(_DWORD **)(a1 + 92) + 32))(*(_DWORD *)(a1 + 92)); + v7 = v3 - 1; + v6 = v3 + v33 - 2; + } + else + { + v6 = v38 * v5; + v7 = v38 * v5; + } + Src = *(const void **)(a1 + 104); + Size = *(_DWORD *)(a1 + 108) - (_DWORD)Src; + v10 = v7 - Size; + if ( v7 <= Size ) + v10 = 0; + v11 = *(_DWORD *)(a1 + 100); + if ( *(_BYTE *)(a1 + 73) && *(_DWORD *)(a1 + 4) == *(_DWORD *)(a1 + 12) ) + { + if ( !Size ) + { + if ( v6 <= v11 ) + { + v12 = *(char **)(a1 + 96); + goto LABEL_17; + } + v43 = v10; + v37 = (char *)operator new[](v6); + v10 = v43; + v12 = v37; +LABEL_62: + if ( *(_DWORD *)(a1 + 96) ) + { + v40 = v10; + operator delete[](*(void **)(a1 + 96)); + v10 = v40; + } + *(_DWORD *)(a1 + 96) = v12; + *(_DWORD *)(a1 + 100) = v6; +LABEL_17: + v13 = *(_DWORD *)(a1 + 56); + v14 = &v12[Size]; + *(_DWORD *)(a1 + 104) = v12; + *(_DWORD *)(a1 + 108) = &v12[Size]; + *(_DWORD *)(a1 + 60) = v13; + if ( v10 ) + { + v16 = 0; + goto LABEL_25; + } + v15 = *(void **)(a1 + 4); + v16 = 0; + v44 = v15; + if ( v14 <= v12 ) + { + while ( 1 ) + { +LABEL_24: + v14 = *(char **)(a1 + 108); + v10 = 1; + Size = (signed int)&v14[-*(_DWORD *)(a1 + 96)]; +LABEL_25: + if ( (signed int)(v10 + Size) > *(_DWORD *)(a1 + 100) ) + std::__throw_ios_failure("basic_filebuf::underflow codecvt::max_length() is not valid"); + v20 = std::__basic_file::xsgetn((FILE **)(a1 + 40), v14, v10); + if ( v20 ) + { + if ( v20 == -1 ) + goto LABEL_59; + v17 = 0; + } + else + { + v17 = 1; + } + v15 = *(void **)(a1 + 4); + v12 = *(char **)(a1 + 104); + v14 = (char *)(*(_DWORD *)(a1 + 108) + v20); + *(_DWORD *)(a1 + 108) = v14; + v44 = v15; + if ( v14 > v12 ) + break; + if ( v16 == 3 ) + goto LABEL_44; + if ( v17 ) + goto LABEL_32; + } + } + else + { + v17 = 0; + } + v16 = (*(int (__thiscall **)(_DWORD, int, char *, char *, int, void *, unsigned int, void **))(**(_DWORD **)(a1 + 92) + 16))( + *(_DWORD *)(a1 + 92), + a1 + 56, + v12, + v14, + a1 + 104, + v15, + (unsigned int)v15 + 2 * v38, + &v44); + if ( v16 != 3 ) + { + v18 = ((int)v44 - *(_DWORD *)(a1 + 4)) >> 1; + if ( v16 != 2 ) + { + v19 = v17 | (v44 != *(void **)(a1 + 4)); + goto LABEL_23; + } + if ( (int)v44 - *(_DWORD *)(a1 + 4) <= 0 ) + { + if ( !v17 ) + std::__throw_ios_failure("basic_filebuf::underflow invalid byte sequence in file"); + goto LABEL_41; + } + goto LABEL_54; + } + v14 = *(char **)(a1 + 108); + v15 = *(void **)(a1 + 4); +LABEL_44: + v29 = *(_DWORD *)(a1 + 96); + v30 = &v14[-v29]; + v18 = (int)v30; + v31 = (unsigned int)v30; + if ( v38 < (unsigned int)v30 ) + { + v31 = v38; + v18 = v38; + } + else if ( !v30 ) + { +LABEL_46: + *(_DWORD *)(a1 + 104) = v29; + v16 = 3; + v19 = v17 | (v18 != 0); +LABEL_23: + if ( !v19 ) + goto LABEL_24; + if ( v18 > 0 ) + goto LABEL_54; + if ( v17 ) + { +LABEL_32: + v21 = *(_DWORD *)(a1 + 64); + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 4) = v21; + *(_DWORD *)(a1 + 8) = v21; + *(_DWORD *)(a1 + 12) = v21; + *(_DWORD *)(a1 + 24) = 0; + *(_BYTE *)(a1 + 73) = 0; + if ( v16 == 1 ) + std::__throw_ios_failure("basic_filebuf::underflow incomplete character in file"); + return -1; + } +LABEL_59: + v34 = __errno(); + std::__throw_ios_failure( + (std::__ios_failure *)"basic_filebuf::underflow error reading the file", + (std::runtime_error *)*v34); + } + memcpy(v15, *(const void **)(a1 + 96), 2 * v31); + v29 = v31 + *(_DWORD *)(a1 + 96); + goto LABEL_46; + } + if ( v6 <= v11 ) + { + v12 = *(char **)(a1 + 96); + v10 = 0; +LABEL_73: + v42 = v10; + memmove(v12, Src, Size); + v12 = *(char **)(a1 + 96); + v10 = v42; + goto LABEL_17; + } + v36 = (char *)operator new[](v6); + v10 = 0; + v12 = v36; + } + else + { + if ( v6 <= v11 ) + { + v12 = *(char **)(a1 + 96); + if ( !Size ) + goto LABEL_17; + goto LABEL_73; + } + v39 = v10; + v35 = (char *)operator new[](v6); + v10 = v39; + v12 = v35; + if ( !Size ) + goto LABEL_62; + } + v41 = v10; + memcpy(v12, *(const void **)(a1 + 104), Size); + v10 = v41; + goto LABEL_62; + } + v27 = std::__basic_file::xsgetn((FILE **)(a1 + 40), *(void **)(a1 + 4), v38); + v18 = v27; + if ( !v27 ) + { +LABEL_41: + v28 = *(_DWORD *)(a1 + 64); + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 4) = v28; + *(_DWORD *)(a1 + 8) = v28; + *(_DWORD *)(a1 + 12) = v28; + *(_DWORD *)(a1 + 24) = 0; + *(_BYTE *)(a1 + 73) = 0; + return -1; + } + if ( v27 <= 0 ) + goto LABEL_59; +LABEL_54: + v32 = *(unsigned __int16 **)(a1 + 64); + v23 = (*(_BYTE *)(a1 + 48) & 8) == 0; + *(_DWORD *)(a1 + 4) = v32; + *(_DWORD *)(a1 + 8) = v32; + if ( v23 ) + *(_DWORD *)(a1 + 12) = v32; + else + *(_DWORD *)(a1 + 12) = &v32[v18]; + *(_DWORD *)(a1 + 20) = 0; + result = *v32; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 24) = 0; + *(_BYTE *)(a1 + 73) = 1; + return result; +} + +//----- (004E4380) -------------------------------------------------------- +int __thiscall std::wfilebuf::basic_filebuf(int this, std::locale *a2) +{ + int v3; // eax + int v4; // edx + int v5; // edi + int v6; // ecx + int v7; // eax + int result; // eax + int v9; // edi + int v10; // edx + int v11; // edx + int v12; // edx + int v13; // edx + int v14; // edx + int v15; // edx + int v16; // edx + const std::locale *v17; // [esp+4h] [ebp-18h] + + std::wstreambuf::basic_streambuf((_DWORD *)this, a2, v17); + v3 = *((_DWORD *)a2 + 10); + v4 = *((_DWORD *)a2 + 17); + *(_DWORD *)this = off_5600E0; + v5 = *((_DWORD *)a2 + 14); + v6 = *((_DWORD *)a2 + 16); + *(_DWORD *)(this + 32) = 0; + *(_DWORD *)(this + 40) = v3; + LOBYTE(v3) = *((_BYTE *)a2 + 44); + *(_DWORD *)(this + 36) = 0; + *(_BYTE *)(this + 44) = v3; + v7 = *((_DWORD *)a2 + 12); + *((_DWORD *)a2 + 10) = 0; + *((_BYTE *)a2 + 44) = 0; + *(_DWORD *)(this + 68) = v4; + LOWORD(v4) = *((_WORD *)a2 + 36); + *(_DWORD *)(this + 48) = v7; + result = *((_DWORD *)a2 + 13); + *(_WORD *)(this + 72) = v4; + LOBYTE(v4) = *((_BYTE *)a2 + 74); + *(_DWORD *)(this + 56) = v5; + v9 = *((_DWORD *)a2 + 15); + *(_BYTE *)(this + 74) = v4; + LOWORD(v4) = *((_WORD *)a2 + 38); + *(_DWORD *)(this + 64) = v6; + *(_DWORD *)(this + 60) = v9; + *((_DWORD *)a2 + 12) = 0; + *(_DWORD *)(this + 52) = result; + *((_DWORD *)a2 + 16) = 0; + *((_DWORD *)a2 + 17) = 1; + *((_WORD *)a2 + 36) = 0; + *((_BYTE *)a2 + 74) = 0; + *(_WORD *)(this + 76) = v4; + v10 = *((_DWORD *)a2 + 20); + *((_DWORD *)a2 + 20) = 0; + *(_DWORD *)(this + 80) = v10; + v11 = *((_DWORD *)a2 + 21); + *((_DWORD *)a2 + 1) = 0; + *(_DWORD *)(this + 84) = v11; + LOBYTE(v11) = *((_BYTE *)a2 + 88); + *((_DWORD *)a2 + 21) = 0; + *(_BYTE *)(this + 88) = v11; + v12 = *((_DWORD *)a2 + 23); + *((_BYTE *)a2 + 88) = 0; + *(_DWORD *)(this + 92) = v12; + v13 = *((_DWORD *)a2 + 24); + *((_DWORD *)a2 + 2) = 0; + *(_DWORD *)(this + 96) = v13; + v14 = *((_DWORD *)a2 + 25); + *((_DWORD *)a2 + 24) = 0; + *(_DWORD *)(this + 100) = v14; + v15 = *((_DWORD *)a2 + 26); + *((_DWORD *)a2 + 25) = 0; + *(_DWORD *)(this + 104) = v15; + v16 = *((_DWORD *)a2 + 27); + *((_DWORD *)a2 + 26) = 0; + *(_DWORD *)(this + 108) = v16; + *((_DWORD *)a2 + 27) = 0; + *((_DWORD *)a2 + 3) = 0; + *((_DWORD *)a2 + 5) = 0; + *((_DWORD *)a2 + 4) = 0; + *((_DWORD *)a2 + 6) = 0; + *((_DWORD *)a2 + 14) = result; + *((_DWORD *)a2 + 15) = result; + return result; +} +// 4E438F: variable 'v17' is possibly undefined +// 5600E0: using guessed type int (*off_5600E0[2])(); + +//----- (004E44C0) -------------------------------------------------------- +void __fastcall std::wfilebuf::basic_filebuf(int a1) +{ + int v2; // [esp+20h] [ebp-4Ch] + + *(_DWORD *)a1 = &off_560464; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 8) = 0; + *(_DWORD *)(a1 + 12) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 24) = 0; + v2 = a1 + 28; + std::locale::locale((_DWORD *)(a1 + 28)); + *(_DWORD *)a1 = off_5600E0; + *(_DWORD *)(a1 + 32) = 0; + *(_DWORD *)(a1 + 36) = 0; + std::__basic_file::__basic_file((_BYTE *)(a1 + 40), a1 + 32); + *(_WORD *)(a1 + 72) = 0; + *(_DWORD *)(a1 + 48) = 0; + *(_DWORD *)(a1 + 52) = 0; + *(_DWORD *)(a1 + 56) = 0; + *(_DWORD *)(a1 + 60) = 0; + *(_DWORD *)(a1 + 64) = 0; + *(_DWORD *)(a1 + 68) = 512; + *(_BYTE *)(a1 + 74) = 0; + *(_WORD *)(a1 + 76) = 0; + *(_DWORD *)(a1 + 80) = 0; + *(_DWORD *)(a1 + 84) = 0; + *(_BYTE *)(a1 + 88) = 0; + *(_DWORD *)(a1 + 92) = 0; + *(_DWORD *)(a1 + 96) = 0; + *(_DWORD *)(a1 + 100) = 0; + *(_DWORD *)(a1 + 104) = 0; + *(_DWORD *)(a1 + 108) = 0; + if ( (unsigned __int8)std::has_facet>(v2) ) + *(_DWORD *)(a1 + 92) = std::use_facet>(v2); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (004E4660) -------------------------------------------------------- +int __thiscall std::wfilebuf::basic_filebuf(int this, std::locale *a2) +{ + int v3; // eax + int v4; // edx + int v5; // edi + int v6; // ecx + int v7; // eax + int result; // eax + int v9; // edi + int v10; // edx + int v11; // edx + int v12; // edx + int v13; // edx + int v14; // edx + int v15; // edx + int v16; // edx + const std::locale *v17; // [esp+4h] [ebp-18h] + + std::wstreambuf::basic_streambuf((_DWORD *)this, a2, v17); + v3 = *((_DWORD *)a2 + 10); + v4 = *((_DWORD *)a2 + 17); + *(_DWORD *)this = off_5600E0; + v5 = *((_DWORD *)a2 + 14); + v6 = *((_DWORD *)a2 + 16); + *(_DWORD *)(this + 32) = 0; + *(_DWORD *)(this + 40) = v3; + LOBYTE(v3) = *((_BYTE *)a2 + 44); + *(_DWORD *)(this + 36) = 0; + *(_BYTE *)(this + 44) = v3; + v7 = *((_DWORD *)a2 + 12); + *((_DWORD *)a2 + 10) = 0; + *((_BYTE *)a2 + 44) = 0; + *(_DWORD *)(this + 68) = v4; + LOWORD(v4) = *((_WORD *)a2 + 36); + *(_DWORD *)(this + 48) = v7; + result = *((_DWORD *)a2 + 13); + *(_WORD *)(this + 72) = v4; + LOBYTE(v4) = *((_BYTE *)a2 + 74); + *(_DWORD *)(this + 56) = v5; + v9 = *((_DWORD *)a2 + 15); + *(_BYTE *)(this + 74) = v4; + LOWORD(v4) = *((_WORD *)a2 + 38); + *(_DWORD *)(this + 64) = v6; + *(_DWORD *)(this + 60) = v9; + *((_DWORD *)a2 + 12) = 0; + *(_DWORD *)(this + 52) = result; + *((_DWORD *)a2 + 16) = 0; + *((_DWORD *)a2 + 17) = 1; + *((_WORD *)a2 + 36) = 0; + *((_BYTE *)a2 + 74) = 0; + *(_WORD *)(this + 76) = v4; + v10 = *((_DWORD *)a2 + 20); + *((_DWORD *)a2 + 20) = 0; + *(_DWORD *)(this + 80) = v10; + v11 = *((_DWORD *)a2 + 21); + *((_DWORD *)a2 + 1) = 0; + *(_DWORD *)(this + 84) = v11; + LOBYTE(v11) = *((_BYTE *)a2 + 88); + *((_DWORD *)a2 + 21) = 0; + *(_BYTE *)(this + 88) = v11; + v12 = *((_DWORD *)a2 + 23); + *((_BYTE *)a2 + 88) = 0; + *(_DWORD *)(this + 92) = v12; + v13 = *((_DWORD *)a2 + 24); + *((_DWORD *)a2 + 2) = 0; + *(_DWORD *)(this + 96) = v13; + v14 = *((_DWORD *)a2 + 25); + *((_DWORD *)a2 + 24) = 0; + *(_DWORD *)(this + 100) = v14; + v15 = *((_DWORD *)a2 + 26); + *((_DWORD *)a2 + 25) = 0; + *(_DWORD *)(this + 104) = v15; + v16 = *((_DWORD *)a2 + 27); + *((_DWORD *)a2 + 26) = 0; + *(_DWORD *)(this + 108) = v16; + *((_DWORD *)a2 + 27) = 0; + *((_DWORD *)a2 + 3) = 0; + *((_DWORD *)a2 + 5) = 0; + *((_DWORD *)a2 + 4) = 0; + *((_DWORD *)a2 + 6) = 0; + *((_DWORD *)a2 + 14) = result; + *((_DWORD *)a2 + 15) = result; + return result; +} +// 4E466F: variable 'v17' is possibly undefined +// 5600E0: using guessed type int (*off_5600E0[2])(); + +//----- (004E47A0) -------------------------------------------------------- +void __fastcall std::wfilebuf::basic_filebuf(int a1) +{ + int v2; // [esp+20h] [ebp-4Ch] + + *(_DWORD *)a1 = &off_560464; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 8) = 0; + *(_DWORD *)(a1 + 12) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 24) = 0; + v2 = a1 + 28; + std::locale::locale((_DWORD *)(a1 + 28)); + *(_DWORD *)a1 = off_5600E0; + *(_DWORD *)(a1 + 32) = 0; + *(_DWORD *)(a1 + 36) = 0; + std::__basic_file::__basic_file((_BYTE *)(a1 + 40), a1 + 32); + *(_WORD *)(a1 + 72) = 0; + *(_DWORD *)(a1 + 48) = 0; + *(_DWORD *)(a1 + 52) = 0; + *(_DWORD *)(a1 + 56) = 0; + *(_DWORD *)(a1 + 60) = 0; + *(_DWORD *)(a1 + 64) = 0; + *(_DWORD *)(a1 + 68) = 512; + *(_BYTE *)(a1 + 74) = 0; + *(_WORD *)(a1 + 76) = 0; + *(_DWORD *)(a1 + 80) = 0; + *(_DWORD *)(a1 + 84) = 0; + *(_BYTE *)(a1 + 88) = 0; + *(_DWORD *)(a1 + 92) = 0; + *(_DWORD *)(a1 + 96) = 0; + *(_DWORD *)(a1 + 100) = 0; + *(_DWORD *)(a1 + 104) = 0; + *(_DWORD *)(a1 + 108) = 0; + if ( (unsigned __int8)std::has_facet>(v2) ) + *(_DWORD *)(a1 + 92) = std::use_facet>(v2); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (004E4940) -------------------------------------------------------- +void __fastcall std::wfilebuf::~wfilebuf(struct _Unwind_Exception *a1) +{ + *(_DWORD *)a1 = off_5600E0; + std::wfilebuf::close(a1); + std::__basic_file::~__basic_file((int)a1 + 40); + *(_DWORD *)a1 = &off_560464; + std::locale::~locale((_DWORD **)a1 + 7); + operator delete(a1); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (004E49F0) -------------------------------------------------------- +void __fastcall std::wfilebuf::~wfilebuf(struct _Unwind_Exception *a1) +{ + *(_DWORD *)a1 = off_5600E0; + std::wfilebuf::close(a1); + std::__basic_file::~__basic_file((int)a1 + 40); + *(_DWORD *)a1 = &off_560464; + std::locale::~locale((_DWORD **)a1 + 7); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (004E4A90) -------------------------------------------------------- +void __fastcall std::wfilebuf::~wfilebuf(struct _Unwind_Exception *a1) +{ + *(_DWORD *)a1 = off_5600E0; + std::wfilebuf::close(a1); + std::__basic_file::~__basic_file((int)a1 + 40); + *(_DWORD *)a1 = &off_560464; + std::locale::~locale((_DWORD **)a1 + 7); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (004E4B30) -------------------------------------------------------- +int __thiscall std::wfilebuf::operator=(int this, int a2) +{ + int v3; // eax + char v4; // dl + int v5; // eax + int v6; // eax + int v7; // eax + int v8; // eax + int v9; // eax + int v10; // eax + int v11; // eax + int v12; // eax + int v13; // eax + int v14; // eax + int v15; // eax + int result; // eax + + std::wfilebuf::close((struct _Unwind_Exception *)this); + std::wstreambuf::operator=((volatile signed __int32 **)this, a2); + v3 = *(_DWORD *)(this + 40); + *(_DWORD *)(this + 40) = *(_DWORD *)(a2 + 40); + v4 = *(_BYTE *)(a2 + 44); + *(_DWORD *)(a2 + 40) = v3; + LOBYTE(v3) = *(_BYTE *)(this + 44); + *(_BYTE *)(this + 44) = v4; + *(_BYTE *)(a2 + 44) = v3; + v5 = *(_DWORD *)(a2 + 48); + *(_DWORD *)(a2 + 48) = 0; + *(_DWORD *)(this + 48) = v5; + *(_DWORD *)(this + 52) = *(_DWORD *)(a2 + 52); + *(_DWORD *)(this + 56) = *(_DWORD *)(a2 + 56); + *(_DWORD *)(this + 60) = *(_DWORD *)(a2 + 60); + v6 = *(_DWORD *)(a2 + 64); + *(_DWORD *)(a2 + 64) = 0; + *(_DWORD *)(this + 64) = v6; + v7 = *(_DWORD *)(a2 + 68); + *(_DWORD *)(a2 + 68) = 1; + *(_DWORD *)(this + 68) = v7; + LOBYTE(v7) = *(_BYTE *)(a2 + 72); + *(_BYTE *)(a2 + 72) = 0; + *(_BYTE *)(this + 72) = v7; + v8 = *(_DWORD *)(a2 + 96); + *(_DWORD *)(a2 + 96) = 0; + *(_DWORD *)(this + 96) = v8; + v9 = *(_DWORD *)(a2 + 100); + *(_DWORD *)(a2 + 100) = 0; + *(_DWORD *)(this + 100) = v9; + v10 = *(_DWORD *)(a2 + 104); + *(_DWORD *)(a2 + 104) = 0; + *(_DWORD *)(this + 104) = v10; + v11 = *(_DWORD *)(a2 + 108); + *(_DWORD *)(a2 + 108) = 0; + *(_DWORD *)(this + 108) = v11; + LOBYTE(v11) = *(_BYTE *)(a2 + 73); + *(_BYTE *)(a2 + 73) = 0; + *(_BYTE *)(this + 73) = v11; + LOBYTE(v11) = *(_BYTE *)(a2 + 74); + *(_BYTE *)(a2 + 74) = 0; + *(_BYTE *)(this + 74) = v11; + v12 = *(_DWORD *)(a2 + 80); + *(_DWORD *)(a2 + 80) = 0; + *(_DWORD *)(this + 80) = v12; + v13 = *(_DWORD *)(a2 + 84); + *(_DWORD *)(a2 + 84) = 0; + *(_DWORD *)(this + 84) = v13; + LOBYTE(v13) = *(_BYTE *)(a2 + 88); + *(_BYTE *)(a2 + 88) = 0; + *(_BYTE *)(this + 88) = v13; + v14 = *(_DWORD *)(a2 + 64); + *(_DWORD *)(a2 + 20) = 0; + *(_DWORD *)(a2 + 4) = v14; + *(_DWORD *)(a2 + 8) = v14; + *(_DWORD *)(a2 + 12) = v14; + v15 = *(_DWORD *)(a2 + 52); + *(_DWORD *)(a2 + 16) = 0; + *(_DWORD *)(a2 + 56) = v15; + *(_DWORD *)(a2 + 60) = v15; + result = this; + *(_DWORD *)(a2 + 24) = 0; + return result; +} + +//----- (004E4C50) -------------------------------------------------------- +int __thiscall std::fstream::open(int *this, char *a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::filebuf::open(this + 3, a2, a3) == 0; + v5 = *this; + if ( v4 ) + return std::ios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::ios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004E4CC0) -------------------------------------------------------- +int __thiscall std::fstream::open(int *this, wchar_t *a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::filebuf::open(this + 3, a2, a3) == 0; + v5 = *this; + if ( v4 ) + return std::ios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::ios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004E4D30) -------------------------------------------------------- +int __thiscall std::fstream::open(int *this, char **a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::filebuf::open(this + 3, *a2, a3) == 0; + v5 = *this; + if ( v4 ) + return std::ios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::ios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004E4DA0) -------------------------------------------------------- +void __thiscall std::fstream::swap(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // edi + std::ios_base *v4; // esi + int v5; // edx + char v6; // cl + char v7; // cl + int v8; // edx + std::ios_base *v9; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v9); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + v8 = this[1]; + *((_BYTE *)v4 + 117) = v7; + this[1] = a2[1]; + a2[1] = v8; + std::filebuf::swap((int)(this + 3), (int)(a2 + 3)); +} +// 4E4DE0: variable 'v9' is possibly undefined + +//----- (004E4E70) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall std::fstream::close(_DWORD *a1) +{ + struct _Unwind_Exception *result; // eax + + result = std::filebuf::close((struct _Unwind_Exception *)(a1 + 3)); + if ( !result ) + return (struct _Unwind_Exception *)std::ios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 4); + return result; +} + +//----- (004E4EB0) -------------------------------------------------------- +bool __fastcall std::fstream::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 52)); +} + +//----- (004E4EC0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::fstream::basic_fstream(_DWORD *this, int *a2) +{ + int v2; // eax + int v3; // eax + std::ios_base *v4; // ecx + int v5; // eax + std::ios_base *v6; // [esp+0h] [ebp-58h] + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-48h] + _DWORD *v8; // [esp+14h] [ebp-44h] + + v8 = this + 30; + std::ios_base::ios_base(this + 30); + *((_WORD *)this + 118) = 0; + v2 = a2[1]; + *this = &unk_55B44C; + this[1] = v2; + this[58] = 0; + v3 = *a2; + this[60] = 0; + this[61] = 0; + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(v3 - 12)); + this[30] = &unk_55B460; + this[62] = 0; + this[63] = 0; + lpuexcpt = v4; + std::ios_base::_M_move((int)v8, v4, v6); + std::ios::_M_cache_locale(v8, (int)(this + 57)); + this[60] = 0; + v5 = *((_DWORD *)lpuexcpt + 28); + *((_DWORD *)lpuexcpt + 28) = 0; + this[58] = v5; + *((_WORD *)this + 118) = *((_WORD *)lpuexcpt + 58); + a2[1] = 0; + *this = off_560124; + this[30] = off_56014C; + this[2] = off_560138; + std::filebuf::basic_filebuf((int)(this + 3), (std::locale *)(a2 + 3)); + this[60] = this + 3; +} +// 4E5052: positive sp value 4 has been found +// 4E4F65: variable 'v6' is possibly undefined +// 560124: using guessed type int (*off_560124[2])(); +// 560138: using guessed type int (*off_560138[2])(); +// 56014C: using guessed type int (*off_56014C[2])(); + +//----- (004E5060) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::fstream::basic_fstream(_DWORD *this, char *a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+24h] [ebp-44h] + + v5 = (int)(this + 30); + std::ios_base::ios_base(this + 30); + this[58] = 0; + *((_WORD *)this + 118) = 0; + this[60] = 0; + this[61] = 0; + this[62] = 0; + this[63] = 0; + *this = &unk_55B44C; + this[30] = &unk_55B460; + this[1] = 0; + std::ios::init(v5, 0); + this[2] = &unk_55B474; + this[30] = &unk_55B488; + std::ios::init(v5, 0); + *this = off_560124; + this[30] = off_56014C; + this[2] = off_560138; + std::filebuf::basic_filebuf((int)(this + 3)); + std::ios::init(v5, (int)(this + 3)); + v3 = std::filebuf::open(this + 3, a2, a3); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::ios::clear(v4, 0); + else + std::ios::clear(v4, v4[5] | 4); +} +// 4E5215: positive sp value 4 has been found +// 560124: using guessed type int (*off_560124[2])(); +// 560138: using guessed type int (*off_560138[2])(); +// 56014C: using guessed type int (*off_56014C[2])(); + +//----- (004E5240) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::fstream::basic_fstream(_DWORD *this, wchar_t *a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+24h] [ebp-44h] + + v5 = (int)(this + 30); + std::ios_base::ios_base(this + 30); + this[58] = 0; + *((_WORD *)this + 118) = 0; + this[60] = 0; + this[61] = 0; + this[62] = 0; + this[63] = 0; + *this = &unk_55B44C; + this[30] = &unk_55B460; + this[1] = 0; + std::ios::init(v5, 0); + this[2] = &unk_55B474; + this[30] = &unk_55B488; + std::ios::init(v5, 0); + *this = off_560124; + this[30] = off_56014C; + this[2] = off_560138; + std::filebuf::basic_filebuf((int)(this + 3)); + std::ios::init(v5, (int)(this + 3)); + v3 = std::filebuf::open(this + 3, a2, a3); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::ios::clear(v4, 0); + else + std::ios::clear(v4, v4[5] | 4); +} +// 4E53F5: positive sp value 4 has been found +// 560124: using guessed type int (*off_560124[2])(); +// 560138: using guessed type int (*off_560138[2])(); +// 56014C: using guessed type int (*off_56014C[2])(); + +//----- (004E5420) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::fstream::basic_fstream(_DWORD *this, char **a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+24h] [ebp-44h] + + v5 = (int)(this + 30); + std::ios_base::ios_base(this + 30); + this[58] = 0; + *((_WORD *)this + 118) = 0; + this[60] = 0; + this[61] = 0; + this[62] = 0; + this[63] = 0; + *this = &unk_55B44C; + this[30] = &unk_55B460; + this[1] = 0; + std::ios::init(v5, 0); + this[2] = &unk_55B474; + this[30] = &unk_55B488; + std::ios::init(v5, 0); + *this = off_560124; + this[30] = off_56014C; + this[2] = off_560138; + std::filebuf::basic_filebuf((int)(this + 3)); + std::ios::init(v5, (int)(this + 3)); + v3 = std::filebuf::open(this + 3, *a2, a3); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::ios::clear(v4, 0); + else + std::ios::clear(v4, v4[5] | 4); +} +// 4E55DD: positive sp value 4 has been found +// 560124: using guessed type int (*off_560124[2])(); +// 560138: using guessed type int (*off_560138[2])(); +// 56014C: using guessed type int (*off_56014C[2])(); + +//----- (004E5610) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __fastcall std::fstream::basic_fstream(int a1) +{ + int v1; // [esp+24h] [ebp-44h] + + v1 = a1 + 120; + std::ios_base::ios_base((_DWORD *)(a1 + 120)); + *(_DWORD *)(a1 + 232) = 0; + *(_WORD *)(a1 + 236) = 0; + *(_DWORD *)(a1 + 240) = 0; + *(_DWORD *)(a1 + 244) = 0; + *(_DWORD *)(a1 + 248) = 0; + *(_DWORD *)(a1 + 252) = 0; + *(_DWORD *)a1 = &unk_55B44C; + *(_DWORD *)(a1 + 120) = &unk_55B460; + *(_DWORD *)(a1 + 4) = 0; + std::ios::init(v1, 0); + *(_DWORD *)(a1 + 8) = &unk_55B474; + *(_DWORD *)(a1 + 120) = &unk_55B488; + std::ios::init(v1, 0); + *(_DWORD *)a1 = off_560124; + *(_DWORD *)(a1 + 120) = off_56014C; + *(_DWORD *)(a1 + 8) = off_560138; + std::filebuf::basic_filebuf(a1 + 12); + std::ios::init(v1, a1 + 12); +} +// 4E5779: positive sp value 4 has been found +// 560124: using guessed type int (*off_560124[2])(); +// 560138: using guessed type int (*off_560138[2])(); +// 56014C: using guessed type int (*off_56014C[2])(); + +//----- (004E57B0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::fstream::basic_fstream(int *this, int *a2, _DWORD *a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + int v10; // eax + int v11; // edx + int v12; // eax + int v13; // edx + std::ios_base *v14; // [esp+0h] [ebp-58h] + std::ios_base *v15; // [esp+10h] [ebp-48h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-44h] + + v4 = a2[2]; + v5 = a2[3]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = a3[1]; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v4 - 12)); + v15 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move((int)lpuexcpt, v15, v14); + std::ios::_M_cache_locale(lpuexcpt, (int)lpuexcpt + 108); + v7 = *((_DWORD *)v15 + 28); + *((_DWORD *)lpuexcpt + 30) = 0; + *((_DWORD *)v15 + 28) = 0; + *((_DWORD *)lpuexcpt + 28) = v7; + *((_WORD *)lpuexcpt + 58) = *((_WORD *)v15 + 58); + v8 = a2[5]; + a3[1] = 0; + v9 = a2[4]; + this[2] = v9; + *(int *)((char *)this + *(_DWORD *)(v9 - 12) + 8) = v8; + v10 = a2[1]; + v11 = a2[6]; + *this = v10; + *(int *)((char *)this + *(_DWORD *)(v10 - 12)) = v11; + this[2] = a2[7]; + v12 = *a2; + v13 = a2[8]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v12 - 12)) = v13; + this[2] = a2[9]; + std::filebuf::basic_filebuf((int)(this + 3), (std::locale *)(a3 + 3)); + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 120) = (int)(this + 3); +} +// 4E58FE: positive sp value 4 has been found +// 4E5816: variable 'v14' is possibly undefined + +//----- (004E5920) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::fstream::basic_fstream(int *this, int *a2, char *a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + _DWORD *v9; // ecx + int v10; // eax + int v11; // edx + int v12; // edx + int v13; // eax + _DWORD *v14; // eax + char *v15; // ebx + _DWORD *v16; // ecx + + v5 = a2[2]; + v6 = a2[3]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = a2[4]; + this[2] = v8; + v9 = (int *)((char *)this + *(_DWORD *)(v8 - 12) + 8); + *v9 = a2[5]; + std::ios::init((int)v9, 0); + v10 = a2[1]; + v11 = a2[6]; + *this = v10; + *(int *)((char *)this + *(_DWORD *)(v10 - 12)) = v11; + this[2] = a2[7]; + v12 = a2[8]; + v13 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v13 - 12)) = v12; + this[2] = a2[9]; + std::filebuf::basic_filebuf((int)(this + 3)); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 3)); + v14 = std::filebuf::open(this + 3, a3, a4); + v15 = (char *)this + *(_DWORD *)(*this - 12); + v16 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v14 ) + std::ios::clear(v16, 0); + else + std::ios::clear(v16, *((_DWORD *)v15 + 5) | 4); +} +// 4E5AAE: positive sp value 4 has been found + +//----- (004E5B10) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::fstream::basic_fstream(int *this, int *a2, wchar_t *a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + _DWORD *v9; // ecx + int v10; // eax + int v11; // edx + int v12; // edx + int v13; // eax + _DWORD *v14; // eax + char *v15; // ebx + _DWORD *v16; // ecx + + v5 = a2[2]; + v6 = a2[3]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = a2[4]; + this[2] = v8; + v9 = (int *)((char *)this + *(_DWORD *)(v8 - 12) + 8); + *v9 = a2[5]; + std::ios::init((int)v9, 0); + v10 = a2[1]; + v11 = a2[6]; + *this = v10; + *(int *)((char *)this + *(_DWORD *)(v10 - 12)) = v11; + this[2] = a2[7]; + v12 = a2[8]; + v13 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v13 - 12)) = v12; + this[2] = a2[9]; + std::filebuf::basic_filebuf((int)(this + 3)); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 3)); + v14 = std::filebuf::open(this + 3, a3, a4); + v15 = (char *)this + *(_DWORD *)(*this - 12); + v16 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v14 ) + std::ios::clear(v16, 0); + else + std::ios::clear(v16, *((_DWORD *)v15 + 5) | 4); +} +// 4E5C9E: positive sp value 4 has been found + +//----- (004E5D00) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::fstream::basic_fstream(int *this, int *a2, char **a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + _DWORD *v9; // ecx + int v10; // eax + int v11; // edx + int v12; // edx + int v13; // eax + _DWORD *v14; // eax + char *v15; // ebx + _DWORD *v16; // ecx + + v5 = a2[2]; + v6 = a2[3]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = a2[4]; + this[2] = v8; + v9 = (int *)((char *)this + *(_DWORD *)(v8 - 12) + 8); + *v9 = a2[5]; + std::ios::init((int)v9, 0); + v10 = a2[1]; + v11 = a2[6]; + *this = v10; + *(int *)((char *)this + *(_DWORD *)(v10 - 12)) = v11; + this[2] = a2[7]; + v12 = a2[8]; + v13 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v13 - 12)) = v12; + this[2] = a2[9]; + std::filebuf::basic_filebuf((int)(this + 3)); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 3)); + v14 = std::filebuf::open(this + 3, *a3, a4); + v15 = (char *)this + *(_DWORD *)(*this - 12); + v16 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v14 ) + std::ios::clear(v16, 0); + else + std::ios::clear(v16, *((_DWORD *)v15 + 5) | 4); +} +// 4E5E8E: positive sp value 4 has been found + +//----- (004E5EF0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::fstream::basic_fstream(int *this, int *a2) +{ + int v3; // eax + int v4; // ecx + int v5; // edx + int v6; // eax + _DWORD *v7; // ecx + int v8; // eax + int v9; // edx + int v10; // edx + int v11; // eax + + v3 = a2[2]; + v4 = a2[3]; + v5 = *(_DWORD *)(v3 - 12); + *this = v3; + *(int *)((char *)this + v5) = v4; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v3 - 12), 0); + v6 = a2[4]; + this[2] = v6; + v7 = (int *)((char *)this + *(_DWORD *)(v6 - 12) + 8); + *v7 = a2[5]; + std::ios::init((int)v7, 0); + v8 = a2[1]; + v9 = a2[6]; + *this = v8; + *(int *)((char *)this + *(_DWORD *)(v8 - 12)) = v9; + this[2] = a2[7]; + v10 = a2[8]; + v11 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v11 - 12)) = v10; + this[2] = a2[9]; + std::filebuf::basic_filebuf((int)(this + 3)); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 3)); +} +// 4E6026: positive sp value 4 has been found + +//----- (004E6080) -------------------------------------------------------- +void __fastcall std::fstream::~fstream(_DWORD *a1) +{ + *a1 = off_560124; + a1[30] = off_56014C; + a1[2] = off_560138; + a1[3] = off_5600A0; + std::filebuf::close((struct _Unwind_Exception *)(a1 + 3)); + std::__basic_file::~__basic_file((int)(a1 + 13)); + a1[3] = &off_560424; + std::locale::~locale((_DWORD **)a1 + 10); + a1[2] = &unk_55B474; + *a1 = &unk_55B44C; + a1[1] = 0; + a1[30] = &off_560E20; + std::ios_base::~ios_base((int)(a1 + 30)); + operator delete(a1); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560124: using guessed type int (*off_560124[2])(); +// 560138: using guessed type int (*off_560138[2])(); +// 56014C: using guessed type int (*off_56014C[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (004E6170) -------------------------------------------------------- +void __fastcall std::fstream::~fstream(int a1) +{ + *(_DWORD *)a1 = off_560124; + *(_DWORD *)(a1 + 120) = off_56014C; + *(_DWORD *)(a1 + 8) = off_560138; + *(_DWORD *)(a1 + 12) = off_5600A0; + std::filebuf::close((struct _Unwind_Exception *)(a1 + 12)); + std::__basic_file::~__basic_file(a1 + 52); + *(_DWORD *)(a1 + 12) = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 40)); + *(_DWORD *)(a1 + 8) = &unk_55B474; + *(_DWORD *)a1 = &unk_55B44C; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 120) = &off_560E20; + std::ios_base::~ios_base(a1 + 120); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560124: using guessed type int (*off_560124[2])(); +// 560138: using guessed type int (*off_560138[2])(); +// 56014C: using guessed type int (*off_56014C[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (004E6250) -------------------------------------------------------- +void __thiscall std::fstream::~fstream(int *this, int *a2) +{ + int v3; // eax + int v4; // eax + int v5; // eax + int v6; // eax + int v7; // eax + + v3 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v3 - 12)) = a2[8]; + v4 = a2[9]; + this[3] = (int)off_5600A0; + this[2] = v4; + std::filebuf::close((struct _Unwind_Exception *)(this + 3)); + std::__basic_file::~__basic_file((int)(this + 13)); + this[3] = (int)&off_560424; + std::locale::~locale((_DWORD **)this + 10); + v5 = a2[1]; + *this = v5; + *(int *)((char *)this + *(_DWORD *)(v5 - 12)) = a2[6]; + this[2] = a2[7]; + v6 = a2[4]; + this[2] = v6; + *(int *)((char *)this + *(_DWORD *)(v6 - 12) + 8) = a2[5]; + v7 = a2[2]; + *this = v7; + *(int *)((char *)this + *(_DWORD *)(v7 - 12)) = a2[3]; + this[1] = 0; +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (004E6360) -------------------------------------------------------- +_DWORD *__thiscall std::fstream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // eax + char v6; // cl + char v7; // cl + int v8; // eax + std::ios_base *v10; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v10); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + v8 = this[1]; + *((_BYTE *)v4 + 117) = v7; + this[1] = a2[1]; + a2[1] = v8; + std::filebuf::operator=((int)(this + 3), (int)(a2 + 3)); + return this; +} +// 4E63A0: variable 'v10' is possibly undefined + +//----- (004E6440) -------------------------------------------------------- +int __thiscall std::wfstream::open(int *this, char *a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::wfilebuf::open(this + 3, a2, a3) == 0; + v5 = *this; + if ( v4 ) + return std::wios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::wios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004E64B0) -------------------------------------------------------- +int __thiscall std::wfstream::open(int *this, wchar_t *a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::wfilebuf::open(this + 3, a2, a3) == 0; + v5 = *this; + if ( v4 ) + return std::wios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::wios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004E6520) -------------------------------------------------------- +int __thiscall std::wfstream::open(int *this, char **a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::wfilebuf::open(this + 3, *a2, a3) == 0; + v5 = *this; + if ( v4 ) + return std::wios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::wios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004E6590) -------------------------------------------------------- +void __thiscall std::wfstream::swap(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // edi + std::ios_base *v4; // esi + int v5; // edx + __int16 v6; // cx + int v7; // edx + std::ios_base *v8; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v8); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + v7 = this[1]; + *((_BYTE *)v4 + 118) = v6; + this[1] = a2[1]; + a2[1] = v7; + std::wfilebuf::swap((int)(this + 3), (int)(a2 + 3)); +} +// 4E65D0: variable 'v8' is possibly undefined + +//----- (004E6660) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall std::wfstream::close(_DWORD *a1) +{ + struct _Unwind_Exception *result; // eax + + result = std::wfilebuf::close((struct _Unwind_Exception *)(a1 + 3)); + if ( !result ) + return (struct _Unwind_Exception *)std::wios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 4); + return result; +} + +//----- (004E66A0) -------------------------------------------------------- +bool __fastcall std::wfstream::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 52)); +} + +//----- (004E66B0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::wfstream::basic_fstream(_DWORD *this, int *a2) +{ + int v2; // eax + int v3; // eax + std::ios_base *v4; // ecx + int v5; // eax + std::ios_base *v6; // [esp+0h] [ebp-58h] + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-48h] + _DWORD *v8; // [esp+14h] [ebp-44h] + + v8 = this + 31; + std::ios_base::ios_base(this + 31); + v2 = a2[1]; + *((_WORD *)this + 120) = 0; + *this = &unk_55B49C; + this[1] = v2; + this[59] = 0; + v3 = *a2; + *((_BYTE *)this + 242) = 0; + this[61] = 0; + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(v3 - 12)); + this[62] = 0; + this[63] = 0; + this[64] = 0; + this[31] = &unk_55B4B0; + lpuexcpt = v4; + std::ios_base::_M_move((int)v8, v4, v6); + std::wios::_M_cache_locale(v8, (int)(this + 58)); + this[61] = 0; + v5 = *((_DWORD *)lpuexcpt + 28); + *((_DWORD *)lpuexcpt + 28) = 0; + this[59] = v5; + *((_WORD *)this + 120) = *((_WORD *)lpuexcpt + 58); + *((_BYTE *)this + 242) = *((_BYTE *)lpuexcpt + 118); + a2[1] = 0; + *this = off_560160; + this[31] = off_560188; + this[2] = off_560174; + std::wfilebuf::basic_filebuf((int)(this + 3), (std::locale *)(a2 + 3)); + this[61] = this + 3; +} +// 4E6853: positive sp value 4 has been found +// 4E675C: variable 'v6' is possibly undefined +// 560160: using guessed type int (*off_560160[2])(); +// 560174: using guessed type int (*off_560174[2])(); +// 560188: using guessed type int (*off_560188[2])(); + +//----- (004E6860) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::wfstream::basic_fstream(_DWORD *this, char *a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+24h] [ebp-44h] + + v5 = (int)(this + 31); + std::ios_base::ios_base(this + 31); + this[59] = 0; + *((_WORD *)this + 120) = 0; + *((_BYTE *)this + 242) = 0; + this[61] = 0; + this[62] = 0; + this[63] = 0; + this[64] = 0; + *this = &unk_55B49C; + this[31] = &unk_55B4B0; + this[1] = 0; + std::wios::init(v5, 0); + this[2] = &unk_55B500; + this[31] = &unk_55B514; + std::wios::init(v5, 0); + *this = off_560160; + this[31] = off_560188; + this[2] = off_560174; + std::wfilebuf::basic_filebuf((int)(this + 3)); + std::wios::init(v5, (int)(this + 3)); + v3 = std::wfilebuf::open(this + 3, a2, a3); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::wios::clear(v4, 0); + else + std::wios::clear(v4, v4[5] | 4); +} +// 4E6A25: positive sp value 4 has been found +// 560160: using guessed type int (*off_560160[2])(); +// 560174: using guessed type int (*off_560174[2])(); +// 560188: using guessed type int (*off_560188[2])(); + +//----- (004E6A50) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::wfstream::basic_fstream(_DWORD *this, wchar_t *a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+24h] [ebp-44h] + + v5 = (int)(this + 31); + std::ios_base::ios_base(this + 31); + this[59] = 0; + *((_WORD *)this + 120) = 0; + *((_BYTE *)this + 242) = 0; + this[61] = 0; + this[62] = 0; + this[63] = 0; + this[64] = 0; + *this = &unk_55B49C; + this[31] = &unk_55B4B0; + this[1] = 0; + std::wios::init(v5, 0); + this[2] = &unk_55B500; + this[31] = &unk_55B514; + std::wios::init(v5, 0); + *this = off_560160; + this[31] = off_560188; + this[2] = off_560174; + std::wfilebuf::basic_filebuf((int)(this + 3)); + std::wios::init(v5, (int)(this + 3)); + v3 = std::wfilebuf::open(this + 3, a2, a3); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::wios::clear(v4, 0); + else + std::wios::clear(v4, v4[5] | 4); +} +// 4E6C15: positive sp value 4 has been found +// 560160: using guessed type int (*off_560160[2])(); +// 560174: using guessed type int (*off_560174[2])(); +// 560188: using guessed type int (*off_560188[2])(); + +//----- (004E6C40) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::wfstream::basic_fstream(_DWORD *this, char **a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+24h] [ebp-44h] + + v5 = (int)(this + 31); + std::ios_base::ios_base(this + 31); + this[59] = 0; + *((_WORD *)this + 120) = 0; + *((_BYTE *)this + 242) = 0; + this[61] = 0; + this[62] = 0; + this[63] = 0; + this[64] = 0; + *this = &unk_55B49C; + this[31] = &unk_55B4B0; + this[1] = 0; + std::wios::init(v5, 0); + this[2] = &unk_55B500; + this[31] = &unk_55B514; + std::wios::init(v5, 0); + *this = off_560160; + this[31] = off_560188; + this[2] = off_560174; + std::wfilebuf::basic_filebuf((int)(this + 3)); + std::wios::init(v5, (int)(this + 3)); + v3 = std::wfilebuf::open(this + 3, *a2, a3); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::wios::clear(v4, 0); + else + std::wios::clear(v4, v4[5] | 4); +} +// 4E6E05: positive sp value 4 has been found +// 560160: using guessed type int (*off_560160[2])(); +// 560174: using guessed type int (*off_560174[2])(); +// 560188: using guessed type int (*off_560188[2])(); + +//----- (004E6E30) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __fastcall std::wfstream::basic_fstream(int a1) +{ + int v1; // [esp+24h] [ebp-44h] + + v1 = a1 + 124; + std::ios_base::ios_base((_DWORD *)(a1 + 124)); + *(_DWORD *)(a1 + 236) = 0; + *(_WORD *)(a1 + 240) = 0; + *(_BYTE *)(a1 + 242) = 0; + *(_DWORD *)(a1 + 244) = 0; + *(_DWORD *)(a1 + 248) = 0; + *(_DWORD *)(a1 + 252) = 0; + *(_DWORD *)(a1 + 256) = 0; + *(_DWORD *)a1 = &unk_55B49C; + *(_DWORD *)(a1 + 124) = &unk_55B4B0; + *(_DWORD *)(a1 + 4) = 0; + std::wios::init(v1, 0); + *(_DWORD *)(a1 + 8) = &unk_55B500; + *(_DWORD *)(a1 + 124) = &unk_55B514; + std::wios::init(v1, 0); + *(_DWORD *)a1 = off_560160; + *(_DWORD *)(a1 + 124) = off_560188; + *(_DWORD *)(a1 + 8) = off_560174; + std::wfilebuf::basic_filebuf(a1 + 12); + std::wios::init(v1, a1 + 12); +} +// 4E6FA0: positive sp value 4 has been found +// 560160: using guessed type int (*off_560160[2])(); +// 560174: using guessed type int (*off_560174[2])(); +// 560188: using guessed type int (*off_560188[2])(); + +//----- (004E6FD0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::wfstream::basic_fstream(int *this, int *a2, _DWORD *a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + int v10; // eax + int v11; // edx + int v12; // eax + int v13; // edx + std::ios_base *v14; // [esp+0h] [ebp-58h] + std::ios_base *v15; // [esp+10h] [ebp-48h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-44h] + + v4 = a2[2]; + v5 = a2[3]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = a3[1]; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v4 - 12)); + v15 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move((int)lpuexcpt, v15, v14); + std::wios::_M_cache_locale(lpuexcpt, (int)lpuexcpt + 108); + v7 = *((_DWORD *)v15 + 28); + *((_DWORD *)lpuexcpt + 30) = 0; + *((_DWORD *)v15 + 28) = 0; + *((_DWORD *)lpuexcpt + 28) = v7; + *((_WORD *)lpuexcpt + 58) = *((_WORD *)v15 + 58); + *((_BYTE *)lpuexcpt + 118) = *((_BYTE *)v15 + 118); + a3[1] = 0; + v8 = a2[5]; + v9 = a2[4]; + this[2] = v9; + *(int *)((char *)this + *(_DWORD *)(v9 - 12) + 8) = v8; + v10 = a2[1]; + v11 = a2[6]; + *this = v10; + *(int *)((char *)this + *(_DWORD *)(v10 - 12)) = v11; + this[2] = a2[7]; + v12 = *a2; + v13 = a2[8]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v12 - 12)) = v13; + this[2] = a2[9]; + std::wfilebuf::basic_filebuf((int)(this + 3), (std::locale *)(a3 + 3)); + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 120) = (int)(this + 3); +} +// 4E7125: positive sp value 4 has been found +// 4E7036: variable 'v14' is possibly undefined + +//----- (004E7140) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::wfstream::basic_fstream(int *this, int *a2, char *a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + _DWORD *v9; // ecx + int v10; // eax + int v11; // edx + int v12; // edx + int v13; // eax + _DWORD *v14; // eax + char *v15; // ebx + _DWORD *v16; // ecx + + v5 = a2[2]; + v6 = a2[3]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = a2[4]; + this[2] = v8; + v9 = (int *)((char *)this + *(_DWORD *)(v8 - 12) + 8); + *v9 = a2[5]; + std::wios::init((int)v9, 0); + v10 = a2[1]; + v11 = a2[6]; + *this = v10; + *(int *)((char *)this + *(_DWORD *)(v10 - 12)) = v11; + this[2] = a2[7]; + v12 = a2[8]; + v13 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v13 - 12)) = v12; + this[2] = a2[9]; + std::wfilebuf::basic_filebuf((int)(this + 3)); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 3)); + v14 = std::wfilebuf::open(this + 3, a3, a4); + v15 = (char *)this + *(_DWORD *)(*this - 12); + v16 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v14 ) + std::wios::clear(v16, 0); + else + std::wios::clear(v16, *((_DWORD *)v15 + 5) | 4); +} +// 4E72CE: positive sp value 4 has been found + +//----- (004E7330) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::wfstream::basic_fstream(int *this, int *a2, wchar_t *a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + _DWORD *v9; // ecx + int v10; // eax + int v11; // edx + int v12; // edx + int v13; // eax + _DWORD *v14; // eax + char *v15; // ebx + _DWORD *v16; // ecx + + v5 = a2[2]; + v6 = a2[3]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = a2[4]; + this[2] = v8; + v9 = (int *)((char *)this + *(_DWORD *)(v8 - 12) + 8); + *v9 = a2[5]; + std::wios::init((int)v9, 0); + v10 = a2[1]; + v11 = a2[6]; + *this = v10; + *(int *)((char *)this + *(_DWORD *)(v10 - 12)) = v11; + this[2] = a2[7]; + v12 = a2[8]; + v13 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v13 - 12)) = v12; + this[2] = a2[9]; + std::wfilebuf::basic_filebuf((int)(this + 3)); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 3)); + v14 = std::wfilebuf::open(this + 3, a3, a4); + v15 = (char *)this + *(_DWORD *)(*this - 12); + v16 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v14 ) + std::wios::clear(v16, 0); + else + std::wios::clear(v16, *((_DWORD *)v15 + 5) | 4); +} +// 4E74BE: positive sp value 4 has been found + +//----- (004E7520) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::wfstream::basic_fstream(int *this, int *a2, char **a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + _DWORD *v9; // ecx + int v10; // eax + int v11; // edx + int v12; // edx + int v13; // eax + _DWORD *v14; // eax + char *v15; // ebx + _DWORD *v16; // ecx + + v5 = a2[2]; + v6 = a2[3]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = a2[4]; + this[2] = v8; + v9 = (int *)((char *)this + *(_DWORD *)(v8 - 12) + 8); + *v9 = a2[5]; + std::wios::init((int)v9, 0); + v10 = a2[1]; + v11 = a2[6]; + *this = v10; + *(int *)((char *)this + *(_DWORD *)(v10 - 12)) = v11; + this[2] = a2[7]; + v12 = a2[8]; + v13 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v13 - 12)) = v12; + this[2] = a2[9]; + std::wfilebuf::basic_filebuf((int)(this + 3)); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 3)); + v14 = std::wfilebuf::open(this + 3, *a3, a4); + v15 = (char *)this + *(_DWORD *)(*this - 12); + v16 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v14 ) + std::wios::clear(v16, 0); + else + std::wios::clear(v16, *((_DWORD *)v15 + 5) | 4); +} +// 4E76AE: positive sp value 4 has been found + +//----- (004E7710) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::wfstream::basic_fstream(int *this, int *a2) +{ + int v3; // eax + int v4; // ecx + int v5; // edx + int v6; // eax + _DWORD *v7; // ecx + int v8; // eax + int v9; // edx + int v10; // edx + int v11; // eax + + v3 = a2[2]; + v4 = a2[3]; + v5 = *(_DWORD *)(v3 - 12); + *this = v3; + *(int *)((char *)this + v5) = v4; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v3 - 12), 0); + v6 = a2[4]; + this[2] = v6; + v7 = (int *)((char *)this + *(_DWORD *)(v6 - 12) + 8); + *v7 = a2[5]; + std::wios::init((int)v7, 0); + v8 = a2[1]; + v9 = a2[6]; + *this = v8; + *(int *)((char *)this + *(_DWORD *)(v8 - 12)) = v9; + this[2] = a2[7]; + v10 = a2[8]; + v11 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v11 - 12)) = v10; + this[2] = a2[9]; + std::wfilebuf::basic_filebuf((int)(this + 3)); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 3)); +} +// 4E7846: positive sp value 4 has been found + +//----- (004E78A0) -------------------------------------------------------- +void __fastcall std::wfstream::~wfstream(_DWORD *a1) +{ + *a1 = off_560160; + a1[31] = off_560188; + a1[2] = off_560174; + a1[3] = off_5600E0; + std::wfilebuf::close((struct _Unwind_Exception *)(a1 + 3)); + std::__basic_file::~__basic_file((int)(a1 + 13)); + a1[3] = &off_560464; + std::locale::~locale((_DWORD **)a1 + 10); + a1[2] = &unk_55B500; + *a1 = &unk_55B49C; + a1[1] = 0; + a1[31] = &off_560E30; + std::ios_base::~ios_base((int)(a1 + 31)); + operator delete(a1); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560160: using guessed type int (*off_560160[2])(); +// 560174: using guessed type int (*off_560174[2])(); +// 560188: using guessed type int (*off_560188[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (004E7990) -------------------------------------------------------- +void __fastcall std::wfstream::~wfstream(int a1) +{ + *(_DWORD *)a1 = off_560160; + *(_DWORD *)(a1 + 124) = off_560188; + *(_DWORD *)(a1 + 8) = off_560174; + *(_DWORD *)(a1 + 12) = off_5600E0; + std::wfilebuf::close((struct _Unwind_Exception *)(a1 + 12)); + std::__basic_file::~__basic_file(a1 + 52); + *(_DWORD *)(a1 + 12) = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 40)); + *(_DWORD *)(a1 + 8) = &unk_55B500; + *(_DWORD *)a1 = &unk_55B49C; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 124) = &off_560E30; + std::ios_base::~ios_base(a1 + 124); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560160: using guessed type int (*off_560160[2])(); +// 560174: using guessed type int (*off_560174[2])(); +// 560188: using guessed type int (*off_560188[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (004E7A70) -------------------------------------------------------- +void __thiscall std::wfstream::~wfstream(int *this, int *a2) +{ + int v3; // eax + int v4; // eax + int v5; // eax + int v6; // eax + int v7; // eax + + v3 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v3 - 12)) = a2[8]; + v4 = a2[9]; + this[3] = (int)off_5600E0; + this[2] = v4; + std::wfilebuf::close((struct _Unwind_Exception *)(this + 3)); + std::__basic_file::~__basic_file((int)(this + 13)); + this[3] = (int)&off_560464; + std::locale::~locale((_DWORD **)this + 10); + v5 = a2[1]; + *this = v5; + *(int *)((char *)this + *(_DWORD *)(v5 - 12)) = a2[6]; + this[2] = a2[7]; + v6 = a2[4]; + this[2] = v6; + *(int *)((char *)this + *(_DWORD *)(v6 - 12) + 8) = a2[5]; + v7 = a2[2]; + *this = v7; + *(int *)((char *)this + *(_DWORD *)(v7 - 12)) = a2[3]; + this[1] = 0; +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (004E7B80) -------------------------------------------------------- +_DWORD *__thiscall std::wfstream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // eax + __int16 v6; // cx + int v7; // eax + std::ios_base *v9; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v9); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + v7 = this[1]; + *((_BYTE *)v4 + 118) = v6; + this[1] = a2[1]; + a2[1] = v7; + std::wfilebuf::operator=((int)(this + 3), (int)(a2 + 3)); + return this; +} +// 4E7BC0: variable 'v9' is possibly undefined + +//----- (004E7C60) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2) +{ + char *v2; // edi + int v3; // ecx + char v6; // [esp+6Bh] [ebp-1Dh] BYREF + int v7[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v6, this, 0); + if ( v6 ) + { + v7[0] = 0; + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 48))( + v3, + *((_DWORD *)v2 + 30), + 0xFFFF, + 0, + 0xFFFF, + (int)this + *(_DWORD *)(*this - 12), + v7, + a2); + if ( v7[0] ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v7[0]); + } + return this; +} +// 4E7C60: using guessed type int var_1C[7]; + +//----- (004E7E20) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2) +{ + char *v2; // edi + int v3; // ecx + char v6; // [esp+6Bh] [ebp-1Dh] BYREF + int v7[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v6, this, 0); + if ( v6 ) + { + v7[0] = 0; + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 8))( + v3, + *((_DWORD *)v2 + 30), + 0xFFFF, + 0, + 0xFFFF, + (int)this + *(_DWORD *)(*this - 12), + v7, + a2); + if ( v7[0] ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v7[0]); + } + return this; +} +// 4E7E20: using guessed type int var_1C[7]; + +//----- (004E7FE0) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2) +{ + char *v2; // edi + int v3; // ecx + char v6; // [esp+6Bh] [ebp-1Dh] BYREF + int v7[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v6, this, 0); + if ( v6 ) + { + v7[0] = 0; + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 40))( + v3, + *((_DWORD *)v2 + 30), + 0xFFFF, + 0, + 0xFFFF, + (int)this + *(_DWORD *)(*this - 12), + v7, + a2); + if ( v7[0] ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v7[0]); + } + return this; +} +// 4E7FE0: using guessed type int var_1C[7]; + +//----- (004E81A0) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2) +{ + char *v2; // edi + int v3; // ecx + char v6; // [esp+6Bh] [ebp-1Dh] BYREF + int v7[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v6, this, 0); + if ( v6 ) + { + v7[0] = 0; + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 44))( + v3, + *((_DWORD *)v2 + 30), + 0xFFFF, + 0, + 0xFFFF, + (int)this + *(_DWORD *)(*this - 12), + v7, + a2); + if ( v7[0] ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v7[0]); + } + return this; +} +// 4E81A0: using guessed type int var_1C[7]; + +//----- (004E8360) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2) +{ + char *v2; // edi + int v3; // ecx + char v6; // [esp+6Bh] [ebp-1Dh] BYREF + int v7[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v6, this, 0); + if ( v6 ) + { + v7[0] = 0; + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 36))( + v3, + *((_DWORD *)v2 + 30), + 0xFFFF, + 0, + 0xFFFF, + (int)this + *(_DWORD *)(*this - 12), + v7, + a2); + if ( v7[0] ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v7[0]); + } + return this; +} +// 4E8360: using guessed type int var_1C[7]; + +//----- (004E8520) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2) +{ + char *v2; // edi + int v3; // ecx + char v6; // [esp+6Bh] [ebp-1Dh] BYREF + int v7[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v6, this, 0); + if ( v6 ) + { + v7[0] = 0; + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 20))( + v3, + *((_DWORD *)v2 + 30), + 0xFFFF, + 0, + 0xFFFF, + (int)this + *(_DWORD *)(*this - 12), + v7, + a2); + if ( v7[0] ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v7[0]); + } + return this; +} +// 4E8520: using guessed type int var_1C[7]; + +//----- (004E86E0) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2) +{ + char *v2; // edi + int v3; // ecx + char v6; // [esp+6Bh] [ebp-1Dh] BYREF + int v7[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v6, this, 0); + if ( v6 ) + { + v7[0] = 0; + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 12))( + v3, + *((_DWORD *)v2 + 30), + 0xFFFF, + 0, + 0xFFFF, + (int)this + *(_DWORD *)(*this - 12), + v7, + a2); + if ( v7[0] ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v7[0]); + } + return this; +} +// 4E86E0: using guessed type int var_1C[7]; + +//----- (004E88A0) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2) +{ + char *v2; // edi + int v3; // ecx + char v6; // [esp+6Bh] [ebp-1Dh] BYREF + int v7[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v6, this, 0); + if ( v6 ) + { + v7[0] = 0; + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 24))( + v3, + *((_DWORD *)v2 + 30), + 0xFFFF, + 0, + 0xFFFF, + (int)this + *(_DWORD *)(*this - 12), + v7, + a2); + if ( v7[0] ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v7[0]); + } + return this; +} +// 4E88A0: using guessed type int var_1C[7]; + +//----- (004E8A60) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2) +{ + char *v2; // edi + int v3; // ecx + char v6; // [esp+6Bh] [ebp-1Dh] BYREF + int v7[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v6, this, 0); + if ( v6 ) + { + v7[0] = 0; + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 16))( + v3, + *((_DWORD *)v2 + 30), + 0xFFFF, + 0, + 0xFFFF, + (int)this + *(_DWORD *)(*this - 12), + v7, + a2); + if ( v7[0] ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v7[0]); + } + return this; +} +// 4E8A60: using guessed type int var_1C[7]; + +//----- (004E8C20) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2) +{ + char *v2; // edi + int v3; // ecx + char v6; // [esp+6Bh] [ebp-1Dh] BYREF + int v7[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v6, this, 0); + if ( v6 ) + { + v7[0] = 0; + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 28))( + v3, + *((_DWORD *)v2 + 30), + 0xFFFF, + 0, + 0xFFFF, + (int)this + *(_DWORD *)(*this - 12), + v7, + a2); + if ( v7[0] ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v7[0]); + } + return this; +} +// 4E8C20: using guessed type int var_1C[7]; + +//----- (004E8DE0) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::_M_extract(_DWORD *this, int a2) +{ + char *v2; // edi + int v3; // ecx + char v6; // [esp+6Bh] [ebp-1Dh] BYREF + int v7[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v6, this, 0); + if ( v6 ) + { + v7[0] = 0; + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int))(*(_DWORD *)v3 + 32))( + v3, + *((_DWORD *)v2 + 30), + 0xFFFF, + 0, + 0xFFFF, + (int)this + *(_DWORD *)(*this - 12), + v7, + a2); + if ( v7[0] ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v7[0]); + } + return this; +} +// 4E8DE0: using guessed type int var_1C[7]; + +//----- (004E8FA0) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::get(_DWORD *this, _WORD *a2, int a3) +{ + int v4; // ecx + __int16 v5; // ax + + v4 = *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 124); + if ( !v4 ) + std::__throw_bad_cast(); + v5 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 40))(v4, 10); + return std::wistream::get(this, a2, a3, v5); +} + +//----- (004E8FF0) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::get(_DWORD *this, _WORD *a2, int a3, __int16 a4) +{ + int v4; // ecx + int v6; // eax + __int16 *v7; // eax + __int16 v8; // ax + int v9; // edx + __int16 v10; // dx + __int16 *v11; // eax + __int16 *v12; // eax + int v13; // edx + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-64h] + char v16[25]; // [esp+6Fh] [ebp-19h] BYREF + + this[1] = 0; + std::wistream::sentry::sentry(v16, this, 1); + if ( !v16[0] ) + { + v4 = this[1]; + goto LABEL_3; + } + lpuexcpt = *(struct _Unwind_Exception **)((char *)this + *(_DWORD *)(*this - 12) + 120); + v7 = (__int16 *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v7 >= *((_DWORD *)lpuexcpt + 3) ) + v8 = (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + else + v8 = *v7; + v4 = this[1]; + v9 = v4 + 1; + if ( a3 <= v4 + 1 ) + { +LABEL_29: + if ( v8 != -1 ) + goto LABEL_3; + goto LABEL_30; + } + if ( v8 == -1 ) + { +LABEL_30: + if ( a3 > 0 ) + *a2 = 0; + v6 = 6; + if ( !v4 ) + { +LABEL_8: + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v6); + return this; + } + goto LABEL_33; + } + if ( a4 == v8 ) + { +LABEL_3: + if ( a3 > 0 ) + *a2 = 0; + if ( !v4 ) + { + v6 = 4; + goto LABEL_8; + } + return this; + } + while ( 1 ) + { + *a2++ = v8; + this[1] = v9; + v12 = (__int16 *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v12 < *((_DWORD *)lpuexcpt + 3) ) + { + v10 = *v12; + *((_DWORD *)lpuexcpt + 2) = v12 + 1; + if ( v10 == -1 ) + goto LABEL_23; + } + else if ( (*(unsigned __int16 (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 40))(lpuexcpt) == 0xFFFF ) + { +LABEL_23: + v13 = this[1]; + if ( a3 > 0 ) + { + *a2 = 0; + v6 = 2; + if ( v13 ) + goto LABEL_8; + goto LABEL_25; + } + if ( !v13 ) + { + v6 = 2; + goto LABEL_25; + } +LABEL_33: + v6 = 2; + goto LABEL_8; + } + v11 = (__int16 *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v11 >= *((_DWORD *)lpuexcpt + 3) ) + v8 = (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + else + v8 = *v11; + v4 = this[1]; + v9 = v4 + 1; + if ( v4 + 1 >= a3 ) + goto LABEL_29; + if ( v8 == -1 ) + break; + if ( a4 == v8 ) + { + v6 = 0; + goto LABEL_35; + } + } + v6 = 2; +LABEL_35: + if ( a3 > 0 ) + *a2 = 0; + if ( !v4 ) + { +LABEL_25: + v6 |= 4u; + goto LABEL_8; + } + if ( v6 ) + goto LABEL_8; + return this; +} +// 4E8FF0: using guessed type char var_19[25]; + +//----- (004E9350) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::get(_DWORD *this, _DWORD *a2) +{ + int v3; // ecx + __int16 v4; // ax + + v3 = *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 124); + if ( !v3 ) + std::__throw_bad_cast(); + v4 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v3 + 40))(v3, 10); + return std::wistream::get(this, a2, v4); +} + +//----- (004E93A0) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::get(_DWORD *this, _DWORD *a2, __int16 a3) +{ + int v3; // eax + unsigned __int16 *v5; // eax + int v6; // edx + __int16 *v7; // eax + __int16 v8; // dx + _WORD *v9; // eax + _WORD *v10; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-64h] + char v13[25]; // [esp+6Fh] [ebp-19h] BYREF + + this[1] = 0; + std::wistream::sentry::sentry(v13, this, 1); + if ( v13[0] ) + { + lpuexcpt = *(struct _Unwind_Exception **)((char *)this + *(_DWORD *)(*this - 12) + 120); + v5 = (unsigned __int16 *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v5 >= *((_DWORD *)lpuexcpt + 3) ) + v6 = (*(unsigned __int16 (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + else + v6 = *v5; + if ( (_WORD)v6 != 0xFFFF ) + { + if ( a3 == (_WORD)v6 ) + goto LABEL_2; + while ( 1 ) + { + v10 = (_WORD *)a2[5]; + if ( (unsigned int)v10 < a2[6] ) + { + *v10 = v6; + a2[5] = v10 + 1; + } + else if ( (*(unsigned __int16 (__thiscall **)(_DWORD *, int))(*a2 + 52))(a2, v6) == 0xFFFF ) + { + goto LABEL_2; + } + ++this[1]; + v7 = (__int16 *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v7 >= *((_DWORD *)lpuexcpt + 3) ) + { + v8 = (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 40))(lpuexcpt); + } + else + { + v8 = *v7; + *((_DWORD *)lpuexcpt + 2) = v7 + 1; + } + if ( v8 == -1 ) + break; + v9 = (_WORD *)*((_DWORD *)lpuexcpt + 2); + v6 = (unsigned int)v9 >= *((_DWORD *)lpuexcpt + 3) + ? (*(unsigned __int16 (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt) + : (unsigned __int16)*v9; + if ( (_WORD)v6 == 0xFFFF ) + break; + if ( a3 == (_WORD)v6 ) + goto LABEL_2; + } + } + v3 = this[1] == 0 ? 6 : 2; + goto LABEL_4; + } +LABEL_2: + if ( !this[1] ) + { + v3 = 4; +LABEL_4: + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v3); + } + return this; +} +// 4E93A0: using guessed type char var_19[25]; + +//----- (004E9630) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::get(_DWORD *this, _WORD *a2) +{ + int v2; // eax + _DWORD *v4; // ecx + __int16 *v5; // eax + __int16 v6; // dx + char v8[25]; // [esp+5Fh] [ebp-19h] BYREF + + this[1] = 0; + std::wistream::sentry::sentry(v8, this, 1); + if ( v8[0] ) + { + v4 = *(_DWORD **)((char *)this + *(_DWORD *)(*this - 12) + 120); + v5 = (__int16 *)v4[2]; + if ( (unsigned int)v5 >= v4[3] ) + { + v6 = (*(int (__fastcall **)(_DWORD *))(*v4 + 40))(v4); + } + else + { + v6 = *v5; + v4[2] = v5 + 1; + } + if ( v6 != -1 ) + { + this[1] = 1; + *a2 = v6; + return this; + } + v2 = this[1] == 0 ? 6 : 2; + goto LABEL_4; + } + if ( !this[1] ) + { + v2 = 4; +LABEL_4: + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v2); + } + return this; +} +// 4E9630: using guessed type char var_19[25]; + +//----- (004E97F0) -------------------------------------------------------- +int __fastcall std::wistream::get(_DWORD *a1) +{ + int v1; // eax + _DWORD *v3; // ecx + unsigned __int16 *v4; // eax + unsigned __int16 v5; // dx + unsigned __int16 lpuexcpt; // [esp+14h] [ebp-64h] + char v8[25]; // [esp+5Fh] [ebp-19h] BYREF + + a1[1] = 0; + std::wistream::sentry::sentry(v8, a1, 1); + if ( v8[0] ) + { + v3 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*a1 - 12) + 120); + v4 = (unsigned __int16 *)v3[2]; + if ( (unsigned int)v4 >= v3[3] ) + { + lpuexcpt = (*(int (__fastcall **)(_DWORD *))(*v3 + 40))(v3); + } + else + { + v5 = *v4; + v3[2] = v4 + 1; + lpuexcpt = v5; + } + if ( lpuexcpt != 0xFFFF ) + { + a1[1] = 1; + return lpuexcpt; + } + v1 = a1[1] == 0 ? 6 : 2; + goto LABEL_4; + } + if ( !a1[1] ) + { + v1 = 4; +LABEL_4: + std::wios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | v1); + } + return (unsigned __int16)-1; +} +// 4E97F0: using guessed type char var_19[25]; + +//----- (004E99C0) -------------------------------------------------------- +int __fastcall std::wistream::peek(_DWORD *a1) +{ + _DWORD *v2; // ecx + unsigned __int16 *v3; // eax + unsigned __int16 lpuexcpt; // [esp+14h] [ebp-64h] + char v6[25]; // [esp+5Fh] [ebp-19h] BYREF + + a1[1] = 0; + std::wistream::sentry::sentry(v6, a1, 1); + lpuexcpt = -1; + if ( v6[0] ) + { + v2 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*a1 - 12) + 120); + v3 = (unsigned __int16 *)v2[2]; + if ( (unsigned int)v3 >= v2[3] ) + lpuexcpt = (*(int (__fastcall **)(_DWORD *))(*v2 + 36))(v2); + else + lpuexcpt = *v3; + if ( lpuexcpt == 0xFFFF ) + std::wios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 2); + } + return lpuexcpt; +} +// 4E99C0: using guessed type char var_19[25]; + +//----- (004E9B70) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::read(_DWORD *this, int a2, int a3) +{ + int v3; // ecx + int v4; // eax + char v7[25]; // [esp+5Fh] [ebp-19h] BYREF + + this[1] = 0; + std::wistream::sentry::sentry(v7, this, 1); + if ( v7[0] ) + { + v3 = *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 120); + v4 = (*(int (__thiscall **)(int, int, int))(*(_DWORD *)v3 + 32))(v3, a2, a3); + this[1] = v4; + if ( a3 != v4 ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 6); + } + return this; +} +// 4E9B70: using guessed type char var_19[25]; + +//----- (004E9D00) -------------------------------------------------------- +void __thiscall std::wistream::swap(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // edx + __int16 v6; // cx + int v7; // edx + std::ios_base *v8; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v8); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + v7 = this[1]; + *((_BYTE *)v4 + 118) = v6; + this[1] = a2[1]; + a2[1] = v7; +} +// 4E9D3D: variable 'v8' is possibly undefined + +//----- (004E9DC0) -------------------------------------------------------- +int __fastcall std::wistream::sync(_DWORD *a1) +{ + int v1; // ecx + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-64h] + char v5[25]; // [esp+5Fh] [ebp-19h] BYREF + + std::wistream::sentry::sentry(v5, a1, 1); + if ( !v5[0] ) + return -1; + v1 = *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 120); + if ( !v1 ) + return -1; + lpuexcpt = (struct _Unwind_Exception *)(*(int (__fastcall **)(int))(*(_DWORD *)v1 + 24))(v1); + if ( lpuexcpt != (struct _Unwind_Exception *)-1 ) + return 0; + std::wios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 1); + return (int)lpuexcpt; +} +// 4E9DC0: using guessed type char var_19[25]; + +//----- (004E9F50) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::seekg(_DWORD *this, int a2, int a3, int a4, int a5) +{ + char *v5; // edi + _DWORD *v6; // eax + int v7; // edi + void (__thiscall *v8)(int *, _DWORD *, int, int, int, int, int); // eax + _DWORD *v10; // [esp+0h] [ebp-B8h] + char v12; // [esp+7Fh] [ebp-39h] BYREF + int v13[14]; // [esp+80h] [ebp-38h] BYREF + + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) & 0xFFFFFFFD); + std::wistream::sentry::sentry(&v12, this, 1); + if ( v12 ) + { + v5 = (char *)this + *(_DWORD *)(*this - 12); + if ( (v5[20] & 5) == 0 ) + { + v6 = (_DWORD *)*((_DWORD *)v5 + 30); + v7 = *v6; + v13[6] = a4; + v10 = v6; + v8 = *(void (__thiscall **)(int *, _DWORD *, int, int, int, int, int))(v7 + 20); + v13[4] = a2; + v13[5] = a3; + v13[7] = a5; + v8(v13, v10, a2, a3, a4, a5, 8); + if ( (v13[0] & v13[1]) == -1 ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 4); + } + } + return this; +} + +//----- (004EA190) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::seekg(_DWORD *this, int a2, int a3, int a4) +{ + char *v4; // edi + char v7; // [esp+6Fh] [ebp-29h] BYREF + int v8[10]; // [esp+70h] [ebp-28h] BYREF + + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) & 0xFFFFFFFD); + std::wistream::sentry::sentry(&v7, this, 1); + if ( v7 ) + { + v4 = (char *)this + *(_DWORD *)(*this - 12); + if ( (v4[20] & 5) == 0 ) + { + (*(void (__thiscall **)(int *, _DWORD, int, int, int, int))(**((_DWORD **)v4 + 30) + 16))( + v8, + *((_DWORD *)v4 + 30), + a2, + a3, + a4, + 8); + if ( (v8[0] & v8[1]) == -1 ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 4); + } + } + return this; +} + +//----- (004EA360) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::tellg(_DWORD *this, _DWORD *a2) +{ + char *v2; // esi + char v5; // [esp+6Fh] [ebp-29h] BYREF + int v6[10]; // [esp+70h] [ebp-28h] BYREF + + *this = -1; + this[1] = -1; + this[2] = 0; + std::wistream::sentry::sentry(&v5, a2, 1); + if ( v5 ) + { + v2 = (char *)a2 + *(_DWORD *)(*a2 - 12); + if ( (v2[20] & 5) == 0 ) + { + (*(void (__thiscall **)(int *, _DWORD, _DWORD, _DWORD, int, int))(**((_DWORD **)v2 + 30) + 16))( + v6, + *((_DWORD *)v2 + 30), + 0, + 0, + 1, + 8); + *this = v6[0]; + this[1] = v6[1]; + this[2] = v6[2]; + } + } + return this; +} + +//----- (004EA510) -------------------------------------------------------- +int *__fastcall std::wistream::unget(int *a1) +{ + int v2; // eax + _DWORD *v3; // ecx + _DWORD *v4; // eax + unsigned int v5; // eax + unsigned int v6; // edx + __int16 v7; // ax + char v10[25]; // [esp+5Fh] [ebp-19h] BYREF + + v2 = *a1; + a1[1] = 0; + std::wios::clear( + (int *)((char *)a1 + *(_DWORD *)(v2 - 12)), + *(int *)((char *)a1 + *(_DWORD *)(v2 - 12) + 20) & 0xFFFFFFFD); + std::wistream::sentry::sentry(v10, a1, 1); + if ( !v10[0] ) + return a1; + v3 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*a1 - 12) + 120); + v4 = (int *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + if ( !v3 ) + { +LABEL_8: + std::wios::clear(v4, v4[5] | 1); + return a1; + } + v5 = v3[2]; + if ( v3[1] >= v5 ) + { + v7 = (*(int (__thiscall **)(_DWORD *, int))(*v3 + 44))(v3, 0xFFFF); + } + else + { + v6 = v5 - 2; + v7 = *(_WORD *)(v5 - 2); + v3[2] = v6; + } + if ( v7 == -1 ) + { + v4 = (int *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + goto LABEL_8; + } + return a1; +} +// 4EA510: using guessed type char var_19[25]; + +//----- (004EA6E0) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::ignore(_DWORD *this, int a2) +{ + __int16 *v3; // eax + __int16 v4; // dx + signed int i; // eax + unsigned int v6; // esi + __int16 *v7; // ecx + int v8; // edx + __int16 *v9; // ecx + __int16 v10; // ax + __int16 *v11; // eax + _DWORD *v12; // [esp+1Ch] [ebp-6Ch] + char v13; // [esp+23h] [ebp-65h] + char lpuexcpt; // [esp+24h] [ebp-64h] + _DWORD *v15; // [esp+28h] [ebp-60h] + char v16[25]; // [esp+6Fh] [ebp-19h] BYREF + + v15 = this; + if ( a2 == 1 ) + return std::wistream::ignore(this); + this[1] = 0; + std::wistream::sentry::sentry(v16, this, 1); + if ( a2 > 0 ) + { + lpuexcpt = v16[0]; + if ( v16[0] ) + { + v12 = *(_DWORD **)((char *)v15 + *(_DWORD *)(*v15 - 12) + 120); + v3 = (__int16 *)v12[2]; + if ( (unsigned int)v3 >= v12[3] ) + v4 = (*(int (__fastcall **)(_DWORD *))(*v12 + 36))(v12); + else + v4 = *v3; + v13 = 0; + for ( i = v15[1]; ; i = 0x80000000 ) + { +LABEL_9: + if ( a2 > i ) + { + while ( v4 != -1 ) + { + v6 = v12[3]; + v7 = (__int16 *)v12[2]; + v8 = (int)(v6 - (_DWORD)v7) >> 1; + if ( v8 > a2 - i ) + v8 = a2 - i; + if ( v8 <= 1 ) + { + v15[1] = i + 1; + if ( (unsigned int)v7 >= v6 ) + { + v10 = (*(int (__fastcall **)(_DWORD *))(*v12 + 40))(v12); + } + else + { + v10 = *v7; + v12[2] = v7 + 1; + } + if ( v10 != -1 ) + { + v11 = (__int16 *)v12[2]; + if ( (unsigned int)v11 < v12[3] ) + { + v4 = *v11; + i = v15[1]; + goto LABEL_9; + } +LABEL_27: + v4 = (*(int (__fastcall **)(_DWORD *))(*v12 + 36))(v12); + i = v15[1]; + goto LABEL_9; + } + break; + } + v9 = &v7[v8]; + i += v8; + v12[2] = v9; + v15[1] = i; + if ( v6 <= (unsigned int)v9 ) + goto LABEL_27; + v4 = *v9; + if ( a2 <= i ) + goto LABEL_16; + } +LABEL_24: + if ( v13 ) + v15[1] = 0x7FFFFFFF; +LABEL_26: + std::wios::clear( + (_DWORD *)((char *)v15 + *(_DWORD *)(*v15 - 12)), + *(_DWORD *)((char *)v15 + *(_DWORD *)(*v15 - 12) + 20) | 2); + return v15; + } +LABEL_16: + if ( a2 != 0x7FFFFFFF ) + break; + if ( v4 == -1 ) + goto LABEL_24; + v15[1] = 0x80000000; + v13 = lpuexcpt; + } + if ( v13 ) + v15[1] = 0x7FFFFFFF; + if ( v4 == -1 ) + goto LABEL_26; + } + } + return v15; +} +// 4EA6E0: using guessed type char var_19[25]; + +//----- (004EA9E0) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::ignore(_DWORD *this, int a2, __int16 a3) +{ + __int16 *v4; // eax + __int16 v5; // ax + signed int i; // ecx + unsigned int v7; // edi + __int16 *v8; // esi + int v9; // ebx + int v10; // edx + int v11; // eax + _WORD *v12; // eax + __int16 *v13; // eax + unsigned int v14; // eax + __int16 v15; // ax + __int16 *v16; // eax + _DWORD *v17; // [esp+28h] [ebp-70h] + char v18; // [esp+2Eh] [ebp-6Ah] + char v19; // [esp+2Fh] [ebp-69h] + _DWORD *v20; // [esp+38h] [ebp-60h] + char v21[25]; // [esp+7Fh] [ebp-19h] BYREF + + v20 = this; + if ( a3 == -1 ) + return std::wistream::ignore(this, a2); + this[1] = 0; + std::wistream::sentry::sentry(v21, this, 1); + if ( a2 > 0 ) + { + v19 = v21[0]; + if ( v21[0] ) + { + v17 = *(_DWORD **)((char *)v20 + *(_DWORD *)(*v20 - 12) + 120); + v4 = (__int16 *)v17[2]; + if ( (unsigned int)v4 >= v17[3] ) + v5 = (*(int (__fastcall **)(_DWORD *))(*v17 + 36))(v17); + else + v5 = *v4; + v18 = 0; +LABEL_9: + for ( i = v20[1]; a2 <= i; i = 0x80000000 ) + { +LABEL_22: + if ( a2 != 0x7FFFFFFF ) + { + if ( v18 ) + goto LABEL_29; + goto LABEL_30; + } + if ( v5 == -1 ) + goto LABEL_37; + if ( v5 == a3 ) + { + if ( !v18 ) + goto LABEL_33; +LABEL_29: + v20[1] = 0x7FFFFFFF; +LABEL_30: + if ( v5 != -1 ) + { + if ( v5 != a3 ) + return v20; +LABEL_32: + i = v20[1]; +LABEL_33: + if ( i != 0x7FFFFFFF ) +LABEL_34: + v20[1] = i + 1; + v14 = v17[2]; + if ( v14 >= v17[3] ) + (*(void (__fastcall **)(_DWORD *))(*v17 + 40))(v17); + else + v17[2] = v14 + 2; + return v20; + } +LABEL_39: + std::wios::clear( + (_DWORD *)((char *)v20 + *(_DWORD *)(*v20 - 12)), + *(_DWORD *)((char *)v20 + *(_DWORD *)(*v20 - 12) + 20) | 2); + return v20; + } + v20[1] = 0x80000000; + v18 = v19; + } + while ( v5 != -1 ) + { + if ( v5 == a3 ) + { + if ( a2 == 0x7FFFFFFF ) + { + if ( !v18 ) + goto LABEL_34; + } + else if ( !v18 ) + { + goto LABEL_32; + } + goto LABEL_29; + } + v7 = v17[3]; + v8 = (__int16 *)v17[2]; + v9 = a2 - i; + if ( (int)(v7 - (_DWORD)v8) >> 1 <= a2 - i ) + v9 = (v17[3] - (int)v8) >> 1; + if ( v9 <= 1 ) + { + v20[1] = i + 1; + if ( v7 <= (unsigned int)v8 ) + { + v15 = (*(int (__fastcall **)(_DWORD *))(*v17 + 40))(v17); + } + else + { + v15 = *v8; + v17[2] = v8 + 1; + } + if ( v15 != -1 ) + { + v16 = (__int16 *)v17[2]; + if ( (unsigned int)v16 < v17[3] ) + { + v5 = *v16; + i = v20[1]; + goto LABEL_9; + } +LABEL_45: + v5 = (*(int (__fastcall **)(_DWORD *))(*v17 + 36))(v17); + i = v20[1]; + goto LABEL_9; + } + break; + } + v10 = v9; + v11 = v9; + if ( v8 ) + { + v12 = (_WORD *)v17[2]; + while ( a3 != *v12 ) + { + ++v12; + if ( !--v10 ) + { + v11 = v9; + goto LABEL_20; + } + } + v11 = v12 - v8; + v9 = v11; + } +LABEL_20: + v13 = &v8[v11]; + i += v9; + v17[2] = v13; + v20[1] = i; + if ( v7 <= (unsigned int)v13 ) + goto LABEL_45; + v5 = *v13; + if ( a2 <= i ) + goto LABEL_22; + } +LABEL_37: + if ( v18 ) + v20[1] = 0x7FFFFFFF; + goto LABEL_39; + } + } + return v20; +} +// 4EA9E0: using guessed type char var_19[25]; + +//----- (004EADE0) -------------------------------------------------------- +_DWORD *__fastcall std::wistream::ignore(_DWORD *a1) +{ + _DWORD *v2; // ecx + __int16 *v3; // eax + __int16 v4; // dx + char v6[25]; // [esp+5Fh] [ebp-19h] BYREF + + a1[1] = 0; + std::wistream::sentry::sentry(v6, a1, 1); + if ( v6[0] ) + { + v2 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*a1 - 12) + 120); + v3 = (__int16 *)v2[2]; + if ( (unsigned int)v3 >= v2[3] ) + { + v4 = (*(int (__fastcall **)(_DWORD *))(*v2 + 40))(v2); + } + else + { + v4 = *v3; + v2[2] = v3 + 1; + } + if ( v4 == -1 ) + std::wios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 2); + else + a1[1] = 1; + } + return a1; +} +// 4EADE0: using guessed type char var_19[25]; + +//----- (004EAF90) -------------------------------------------------------- +void __thiscall std::wistream::sentry::sentry(_BYTE *this, _DWORD *a2, char a3) +{ + char *v3; // ecx + int v4; // eax + unsigned __int16 *v5; // eax + unsigned __int16 v6; // ax + __int16 v7; // dx + _WORD *v8; // eax + __int16 *v9; // eax + int v10; // [esp+10h] [ebp-58h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + + *this = 0; + v3 = (char *)a2 + *(_DWORD *)(*a2 - 12); + v4 = *((_DWORD *)v3 + 5); + if ( v4 ) + goto LABEL_6; + if ( !*((_DWORD *)v3 + 28) ) + { + if ( a3 || (v3[13] & 0x10) == 0 ) + goto LABEL_9; + goto LABEL_10; + } + std::wostream::flush(*((_DWORD **)v3 + 28)); + v3 = (char *)a2 + *(_DWORD *)(*a2 - 12); + if ( !a3 && (v3[13] & 0x10) != 0 ) + { +LABEL_10: + lpuexcpt = (struct _Unwind_Exception *)*((_DWORD *)v3 + 30); + v5 = (unsigned __int16 *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v5 >= *((_DWORD *)lpuexcpt + 3) ) + { + v6 = (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + v3 = (char *)a2 + *(_DWORD *)(*a2 - 12); + } + else + { + v6 = *v5; + } + v10 = *((_DWORD *)v3 + 31); + if ( !v10 ) + std::__throw_bad_cast(); + if ( v6 == 0xFFFF ) + { +LABEL_24: + v4 = *((_DWORD *)v3 + 5) | 2; + goto LABEL_6; + } + while ( (*(unsigned __int8 (__thiscall **)(int, int, _DWORD))(*(_DWORD *)v10 + 8))(v10, 32, v6) ) + { + v9 = (__int16 *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v9 < *((_DWORD *)lpuexcpt + 3) ) + { + v7 = *v9; + *((_DWORD *)lpuexcpt + 2) = v9 + 1; + } + else + { + v7 = (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 40))(lpuexcpt); + } + if ( v7 != -1 ) + { + v8 = (_WORD *)*((_DWORD *)lpuexcpt + 2); + v6 = (unsigned int)v8 >= *((_DWORD *)lpuexcpt + 3) + ? (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt) + : *v8; + if ( v6 != 0xFFFF ) + continue; + } + v3 = (char *)a2 + *(_DWORD *)(*a2 - 12); + goto LABEL_24; + } + v3 = (char *)a2 + *(_DWORD *)(*a2 - 12); + } + v4 = *((_DWORD *)v3 + 5); + if ( v4 ) + { +LABEL_6: + std::wios::clear(v3, v4 | 4); + return; + } +LABEL_9: + *this = 1; +} + +//----- (004EB230) -------------------------------------------------------- +void __thiscall std::wistream::sentry::sentry(_BYTE *this, _DWORD *a2, char a3) +{ + char *v3; // ecx + int v4; // eax + unsigned __int16 *v5; // eax + unsigned __int16 v6; // ax + __int16 v7; // dx + _WORD *v8; // eax + __int16 *v9; // eax + int v10; // [esp+10h] [ebp-58h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + + *this = 0; + v3 = (char *)a2 + *(_DWORD *)(*a2 - 12); + v4 = *((_DWORD *)v3 + 5); + if ( v4 ) + goto LABEL_6; + if ( !*((_DWORD *)v3 + 28) ) + { + if ( a3 || (v3[13] & 0x10) == 0 ) + goto LABEL_9; + goto LABEL_10; + } + std::wostream::flush(*((_DWORD **)v3 + 28)); + v3 = (char *)a2 + *(_DWORD *)(*a2 - 12); + if ( !a3 && (v3[13] & 0x10) != 0 ) + { +LABEL_10: + lpuexcpt = (struct _Unwind_Exception *)*((_DWORD *)v3 + 30); + v5 = (unsigned __int16 *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v5 >= *((_DWORD *)lpuexcpt + 3) ) + { + v6 = (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + v3 = (char *)a2 + *(_DWORD *)(*a2 - 12); + } + else + { + v6 = *v5; + } + v10 = *((_DWORD *)v3 + 31); + if ( !v10 ) + std::__throw_bad_cast(); + if ( v6 == 0xFFFF ) + { +LABEL_24: + v4 = *((_DWORD *)v3 + 5) | 2; + goto LABEL_6; + } + while ( (*(unsigned __int8 (__thiscall **)(int, int, _DWORD))(*(_DWORD *)v10 + 8))(v10, 32, v6) ) + { + v9 = (__int16 *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v9 < *((_DWORD *)lpuexcpt + 3) ) + { + v7 = *v9; + *((_DWORD *)lpuexcpt + 2) = v9 + 1; + } + else + { + v7 = (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 40))(lpuexcpt); + } + if ( v7 != -1 ) + { + v8 = (_WORD *)*((_DWORD *)lpuexcpt + 2); + v6 = (unsigned int)v8 >= *((_DWORD *)lpuexcpt + 3) + ? (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt) + : *v8; + if ( v6 != 0xFFFF ) + continue; + } + v3 = (char *)a2 + *(_DWORD *)(*a2 - 12); + goto LABEL_24; + } + v3 = (char *)a2 + *(_DWORD *)(*a2 - 12); + } + v4 = *((_DWORD *)v3 + 5); + if ( v4 ) + { +LABEL_6: + std::wios::clear(v3, v4 | 4); + return; + } +LABEL_9: + *this = 1; +} + +//----- (004EB4D0) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::getline(_DWORD *this, char *a2, int a3) +{ + int v4; // ecx + __int16 v5; // ax + + v4 = *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 124); + if ( !v4 ) + std::__throw_bad_cast(); + v5 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 40))(v4, 10); + return std::wistream::getline(this, a2, a3, v5); +} + +//----- (004EB520) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::getline(_DWORD *this, char *a2, int a3, __int16 a4) +{ + int v4; // esi + int v5; // edx + __int16 *v7; // eax + __int16 v8; // dx + int v9; // eax + unsigned int v10; // ebx + char *v11; // ecx + int v12; // edi + int v13; // eax + int v14; // edx + int v15; // esi + char *v16; // eax + char *v17; // ecx + unsigned int v18; // eax + __int16 v19; // ax + __int16 *v20; // eax + int v21; // [esp+18h] [ebp-70h] + _DWORD *v22; // [esp+20h] [ebp-68h] + int lpuexcpt; // [esp+24h] [ebp-64h] + char v25[25]; // [esp+6Fh] [ebp-19h] BYREF + + this[1] = 0; + std::wistream::sentry::sentry(v25, this, 1); + if ( !v25[0] ) + { +LABEL_2: + v4 = this[1]; + if ( a3 > 0 ) + goto LABEL_3; +LABEL_27: + if ( !v4 ) + goto LABEL_4; + return this; + } + v22 = *(_DWORD **)((char *)this + *(_DWORD *)(*this - 12) + 120); + v7 = (__int16 *)v22[2]; + if ( (unsigned int)v7 >= v22[3] ) + v8 = (*(int (__fastcall **)(_DWORD *))(*v22 + 36))(v22); + else + v8 = *v7; + v9 = this[1]; + v4 = v9 + 1; + if ( a3 > v9 + 1 ) + { + if ( v8 != -1 ) + { + if ( v8 != a4 ) + { + while ( 1 ) + { + v10 = v22[3]; + v11 = (char *)v22[2]; + v12 = a3 - v9 - 1; + v13 = (int)(v10 - (_DWORD)v11) >> 1; + if ( v12 <= v13 ) + v13 = v12; + lpuexcpt = v13; + if ( v13 <= 1 ) + { + *(_WORD *)a2 = v8; + this[1] = v4; + if ( v10 <= (unsigned int)v11 ) + { + v19 = (*(int (__fastcall **)(_DWORD *))(*v22 + 40))(v22); + } + else + { + v19 = *(_WORD *)v11; + v22[2] = v11 + 2; + } + if ( v19 == -1 ) + { + a2 += 2; + v9 = this[1]; +LABEL_43: + v5 = 2; + if ( a3 > 0 ) + *(_WORD *)a2 = 0; +LABEL_45: + if ( !v9 ) + v5 |= 4u; + goto LABEL_5; + } + v20 = (__int16 *)v22[2]; + if ( (unsigned int)v20 >= v22[3] ) + v8 = (*(int (__fastcall **)(_DWORD *))(*v22 + 36))(v22); + else + v8 = *v20; + a2 += 2; + v9 = this[1]; + } + else + { + v14 = v13; + v15 = v13; + if ( !v11 ) + goto LABEL_19; + v16 = (char *)v22[2]; + while ( *(_WORD *)v16 != a4 ) + { + v16 += 2; + if ( !--v14 ) + goto LABEL_19; + } + v21 = v16 - v11; + lpuexcpt = (v16 - v11) >> 1; + v15 = lpuexcpt; + if ( lpuexcpt ) + { +LABEL_19: + v21 = 2 * v15; + memcpy(a2, v11, 2 * v15); + v11 = (char *)v22[2]; + v10 = v22[3]; + } + a2 += v21; + v17 = &v11[v21]; + v22[2] = v17; + v9 = this[1] + lpuexcpt; + this[1] = v9; + if ( (unsigned int)v17 >= v10 ) + { + v8 = (*(int (__fastcall **)(_DWORD *))(*v22 + 36))(v22); + v9 = this[1]; + } + else + { + v8 = *(_WORD *)v17; + } + } + v4 = v9 + 1; + if ( v9 + 1 >= a3 ) + goto LABEL_38; + if ( v8 == -1 ) + goto LABEL_43; + if ( a4 == v8 ) + goto LABEL_25; + } + } + goto LABEL_25; + } + if ( a3 > 0 ) + { +LABEL_52: + v5 = 2; + *(_WORD *)a2 = 0; + if ( !v9 ) + v5 = 6; + goto LABEL_5; + } +LABEL_56: + v5 = 2; + goto LABEL_45; + } +LABEL_38: + if ( v8 == -1 ) + { + v9 = this[1]; + if ( a3 > 0 ) + goto LABEL_52; + goto LABEL_56; + } + if ( v8 != a4 ) + { + v9 = this[1]; + if ( a3 <= 0 ) + { + v5 = 4; + goto LABEL_45; + } + *(_WORD *)a2 = 0; + v5 = 4; +LABEL_5: + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v5); + return this; + } +LABEL_25: + this[1] = v4; + v18 = v22[2]; + if ( v18 >= v22[3] ) + { + (*(void (__fastcall **)(_DWORD *))(*v22 + 40))(v22); + goto LABEL_2; + } + v22[2] = v18 + 2; + if ( a3 <= 0 ) + goto LABEL_27; +LABEL_3: + *(_WORD *)a2 = 0; + if ( !v4 ) + { +LABEL_4: + v5 = 4; + goto LABEL_5; + } + return this; +} +// 4EB520: using guessed type char var_19[25]; + +//----- (004EB9B0) -------------------------------------------------------- +int *__thiscall std::wistream::putback(int *this, unsigned __int16 a2) +{ + int v3; // eax + _DWORD *v4; // ecx + _DWORD *v5; // eax + unsigned int v6; // eax + __int16 v7; // dx + char v10[25]; // [esp+5Fh] [ebp-19h] BYREF + + v3 = *this; + this[1] = 0; + std::wios::clear( + (int *)((char *)this + *(_DWORD *)(v3 - 12)), + *(int *)((char *)this + *(_DWORD *)(v3 - 12) + 20) & 0xFFFFFFFD); + std::wistream::sentry::sentry(v10, this, 1); + if ( !v10[0] ) + return this; + v4 = *(_DWORD **)((char *)this + *(_DWORD *)(*this - 12) + 120); + v5 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( !v4 ) + { +LABEL_9: + std::wios::clear(v5, v5[5] | 1); + return this; + } + v6 = v4[2]; + if ( v4[1] < v6 && (v7 = *(_WORD *)(v6 - 2), a2 == v7) ) + v4[2] = v6 - 2; + else + v7 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v4 + 44))(v4, a2); + if ( v7 == -1 ) + { + v5 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + goto LABEL_9; + } + return this; +} +// 4EB9B0: using guessed type char var_19[25]; + +//----- (004EBB90) -------------------------------------------------------- +struct _Unwind_Exception *__thiscall std::wistream::readsome(_DWORD *this, int a2, int a3) +{ + _DWORD *v4; // ecx + int v5; // eax + int v6; // edx + int v7; // eax + int v8; // ecx + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-64h] + char v11[25]; // [esp+5Fh] [ebp-19h] BYREF + + this[1] = 0; + std::wistream::sentry::sentry(v11, this, 1); + if ( !v11[0] ) + return (struct _Unwind_Exception *)this[1]; + v4 = *(_DWORD **)((char *)this + *(_DWORD *)(*this - 12) + 120); + v5 = v4[3]; + v6 = v4[2]; + if ( v5 == v6 ) + v7 = (*(int (__fastcall **)(_DWORD *))(*v4 + 28))(v4); + else + v7 = (v5 - v6) >> 1; + if ( v7 <= 0 ) + { + if ( v7 == -1 ) + { + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 2); + return (struct _Unwind_Exception *)this[1]; + } + return (struct _Unwind_Exception *)this[1]; + } + if ( v7 > a3 ) + v7 = a3; + v8 = *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 120); + lpuexcpt = (struct _Unwind_Exception *)(*(int (__thiscall **)(int, int, int))(*(_DWORD *)v8 + 32))(v8, a2, v7); + this[1] = lpuexcpt; + return lpuexcpt; +} +// 4EBB90: using guessed type char var_19[25]; + +//----- (004EBD80) -------------------------------------------------------- +void __thiscall std::wistream::basic_istream(_DWORD *this, int *a2) +{ + int v2; // eax + int v3; // eax + std::ios_base *v4; // ecx + int v5; // eax + std::ios_base *v6; // [esp+4h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-48h] + _DWORD *v8; // [esp+14h] [ebp-44h] + + v8 = this + 2; + std::ios_base::ios_base(this + 2); + v2 = a2[1]; + *((_WORD *)this + 62) = 0; + *((_BYTE *)this + 126) = 0; + this[1] = v2; + this[30] = 0; + v3 = *a2; + *this = &off_56019C; + this[32] = 0; + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(v3 - 12)); + this[33] = 0; + this[34] = 0; + this[35] = 0; + this[2] = off_5601B0; + lpuexcpt = v4; + std::ios_base::_M_move((int)v8, v4, v6); + std::wios::_M_cache_locale(v8, (int)(this + 29)); + this[32] = 0; + v5 = *((_DWORD *)lpuexcpt + 28); + *((_DWORD *)lpuexcpt + 28) = 0; + this[30] = v5; + *((_WORD *)this + 62) = *((_WORD *)lpuexcpt + 58); + *((_BYTE *)this + 126) = *((_BYTE *)lpuexcpt + 118); + a2[1] = 0; +} +// 4EBE23: variable 'v6' is possibly undefined +// 56019C: using guessed type int (*off_56019C)(); +// 5601B0: using guessed type int (*off_5601B0[2])(); + +//----- (004EBEC0) -------------------------------------------------------- +void __thiscall std::wistream::basic_istream(_DWORD *this, int a2) +{ + int v2; // [esp+14h] [ebp-44h] + + v2 = (int)(this + 2); + std::ios_base::ios_base(this + 2); + this[30] = 0; + *((_WORD *)this + 62) = 0; + *((_BYTE *)this + 126) = 0; + this[32] = 0; + this[33] = 0; + this[34] = 0; + this[35] = 0; + *this = &off_56019C; + this[2] = off_5601B0; + this[1] = 0; + std::wios::init(v2, a2); +} +// 56019C: using guessed type int (*off_56019C)(); +// 5601B0: using guessed type int (*off_5601B0[2])(); + +//----- (004EBFA0) -------------------------------------------------------- +void __fastcall std::wistream::basic_istream(int a1) +{ + int v1; // [esp+14h] [ebp-44h] + + v1 = a1 + 8; + std::ios_base::ios_base((_DWORD *)(a1 + 8)); + *(_DWORD *)(a1 + 120) = 0; + *(_WORD *)(a1 + 124) = 0; + *(_BYTE *)(a1 + 126) = 0; + *(_DWORD *)(a1 + 128) = 0; + *(_DWORD *)(a1 + 132) = 0; + *(_DWORD *)(a1 + 136) = 0; + *(_DWORD *)(a1 + 140) = 0; + *(_DWORD *)a1 = &off_56019C; + *(_DWORD *)(a1 + 8) = off_5601B0; + *(_DWORD *)(a1 + 4) = 0; + std::wios::init(v1, 0); +} +// 56019C: using guessed type int (*off_56019C)(); +// 5601B0: using guessed type int (*off_5601B0[2])(); + +//----- (004EC080) -------------------------------------------------------- +int __thiscall std::wistream::basic_istream(int *this, int *a2, _DWORD *a3) +{ + int v3; // eax + int v4; // edx + int v5; // ebx + std::ios_base *v6; // esi + int v7; // eax + int result; // eax + std::ios_base *v9; // [esp+4h] [ebp-18h] + + v3 = *a2; + v4 = a2[1]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v3 - 12)) = v4; + this[1] = a3[1]; + v5 = (int)this + *(_DWORD *)(v3 - 12); + v6 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move(v5, v6, v9); + std::wios::_M_cache_locale((_DWORD *)v5, v5 + 108); + v7 = *((_DWORD *)v6 + 28); + *(_DWORD *)(v5 + 120) = 0; + *((_DWORD *)v6 + 28) = 0; + *(_DWORD *)(v5 + 112) = v7; + *(_WORD *)(v5 + 116) = *((_WORD *)v6 + 58); + result = *((unsigned __int8 *)v6 + 118); + a3[1] = 0; + *(_BYTE *)(v5 + 118) = result; + return result; +} +// 4EC0B2: variable 'v9' is possibly undefined + +//----- (004EC100) -------------------------------------------------------- +BOOL __thiscall std::wistream::basic_istream(int *this, int *a2, int a3) +{ + int v3; // eax + int v4; // edx + int v5; // ebx + + v3 = *a2; + v4 = a2[1]; + v5 = *(_DWORD *)(*a2 - 12); + *this = *a2; + *(int *)((char *)this + v5) = v4; + this[1] = 0; + return std::wios::init((int)this + *(_DWORD *)(v3 - 12), a3); +} + +//----- (004EC140) -------------------------------------------------------- +BOOL __thiscall std::wistream::basic_istream(int *this, int *a2) +{ + int v2; // eax + int v3; // edx + int v4; // ebx + + v2 = *a2; + v3 = a2[1]; + v4 = *(_DWORD *)(*a2 - 12); + *this = *a2; + *(int *)((char *)this + v4) = v3; + this[1] = 0; + return std::wios::init((int)this + *(_DWORD *)(v2 - 12), 0); +} + +//----- (004EC170) -------------------------------------------------------- +void __fastcall std::wistream::~wistream(char *Block) +{ + _DWORD *v2; // ecx + + v2 = Block + 8; + *(v2 - 2) = &off_56019C; + *(v2 - 1) = 0; + *v2 = &off_560E30; + std::ios_base::~ios_base((int)v2); + operator delete(Block); +} +// 56019C: using guessed type int (*off_56019C)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (004EC1A0) -------------------------------------------------------- +void __fastcall std::wistream::~wistream(_DWORD *a1) +{ + _DWORD *v1; // ecx + + *a1 = &off_56019C; + v1 = a1 + 2; + *(v1 - 1) = 0; + *v1 = &off_560E30; + std::ios_base::~ios_base((int)v1); +} +// 56019C: using guessed type int (*off_56019C)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (004EC1C0) -------------------------------------------------------- +int __thiscall std::wistream::~wistream(int *this, int *a2) +{ + int v2; // eax + int result; // eax + + v2 = *a2; + *this = *a2; + result = *(_DWORD *)(v2 - 12); + *(int *)((char *)this + result) = a2[1]; + this[1] = 0; + return result; +} + +//----- (004EC1E0) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // edx + __int16 v6; // cx + int v7; // edx + std::ios_base *v9; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v9); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + v7 = this[1]; + *((_BYTE *)v4 + 118) = v6; + this[1] = a2[1]; + a2[1] = v7; + return this; +} +// 4EC21D: variable 'v9' is possibly undefined + +//----- (004EC2A0) -------------------------------------------------------- +int __thiscall std::wistream::operator>>(void *this, int (__cdecl *a2)(void *)) +{ + return a2(this); +} + +//----- (004EC2B0) -------------------------------------------------------- +char *__thiscall std::wistream::operator>>(char *this, void (__cdecl *a2)(char *)) +{ + a2(&this[*(_DWORD *)(*(_DWORD *)this - 12)]); + return this; +} + +//----- (004EC2D0) -------------------------------------------------------- +char *__thiscall std::wistream::operator>>(char *this, void (__cdecl *a2)(char *)) +{ + a2(&this[*(_DWORD *)(*(_DWORD *)this - 12)]); + return this; +} + +//----- (004EC2F0) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::operator>>(_DWORD *this, _DWORD *a2) +{ + char *v2; // ecx + int v3; // eax + char v6; // [esp+5Eh] [ebp-1Ah] BYREF + char v7[25]; // [esp+5Fh] [ebp-19h] BYREF + + std::wistream::sentry::sentry(&v6, this, 0); + if ( v6 ) + { + v2 = (char *)this + *(_DWORD *)(*this - 12); + if ( !a2 ) + { + v3 = 4; + goto LABEL_9; + } + if ( !std::__copy_streambufs_eof>(*((_DWORD **)v2 + 30), a2, v7) ) + { + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = v7[0] == 0 ? 4 : 6; + goto LABEL_9; + } + if ( v7[0] ) + { + v3 = 2; + v2 = (char *)this + *(_DWORD *)(*this - 12); +LABEL_9: + std::wios::clear(v2, *((_DWORD *)v2 + 5) | v3); + } + } + else if ( !a2 ) + { + v3 = 4; + v2 = (char *)this + *(_DWORD *)(*this - 12); + goto LABEL_9; + } + return this; +} +// 4EC2F0: using guessed type char var_19[25]; + +//----- (004EC510) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::operator>>(_DWORD *this, _DWORD *a2) +{ + char *v2; // edi + int v3; // ecx + char v6; // [esp+67h] [ebp-21h] BYREF + int v7; // [esp+68h] [ebp-20h] BYREF + int v8[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v6, this, 0); + if ( v6 ) + { + v7 = 0; + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int *))(*(_DWORD *)v3 + 12))( + v3, + *((_DWORD *)v2 + 30), + 0xFFFF, + 0, + 0xFFFF, + (int)this + *(_DWORD *)(*this - 12), + &v7, + v8); + *a2 = v8[0]; + if ( v7 ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v7); + } + return this; +} +// 4EC510: using guessed type int var_1C[7]; + +//----- (004EC710) -------------------------------------------------------- +_DWORD *__thiscall std::wistream::operator>>(_DWORD *this, _WORD *a2) +{ + char *v2; // edi + int v3; // ecx + int v4; // eax + char v7; // [esp+67h] [ebp-21h] BYREF + int v8; // [esp+68h] [ebp-20h] BYREF + int v9[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v7, this, 0); + if ( v7 ) + { + v8 = 0; + v2 = (char *)this + *(_DWORD *)(*this - 12); + v3 = *((_DWORD *)v2 + 33); + if ( !v3 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, _DWORD, int, _DWORD, int, int, int *, int *))(*(_DWORD *)v3 + 12))( + v3, + *((_DWORD *)v2 + 30), + 0xFFFF, + 0, + 0xFFFF, + (int)this + *(_DWORD *)(*this - 12), + &v8, + v9); + v4 = v8; + if ( v9[0] >= -32768 ) + { + if ( v9[0] > 0x7FFF ) + { + v8 |= 4u; + v4 = v8; + *a2 = 0x7FFF; + goto LABEL_9; + } + *a2 = v9[0]; + } + else + { + v4 = v8 | 4; + v8 |= 4u; + *a2 = 0x8000; + } + if ( !v4 ) + return this; +LABEL_9: + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | v4); + } + return this; +} +// 4EC823: conditional instruction was optimized away because eax.4>=4u +// 4EC710: using guessed type int var_1C[7]; + +//----- (004EC950) -------------------------------------------------------- +int *__thiscall std::wostream::put(int *this, unsigned __int16 a2) +{ + _DWORD *v2; // ecx + unsigned int v3; // eax + unsigned int v4; // eax + int v5; // ecx + int v7; // [esp+0h] [ebp-78h] + unsigned __int16 lpuexcpt; // [esp+14h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+14h] [ebp-64h] + int v11; // [esp+58h] [ebp-20h] BYREF + _DWORD *v12; // [esp+5Ch] [ebp-1Ch] + + lpuexcpt = a2; + std::wostream::sentry::sentry(&v11, this); + if ( (_BYTE)v11 ) + { + v2 = *(_DWORD **)((char *)this + *(_DWORD *)(*this - 12) + 120); + v3 = v2[5]; + if ( v3 >= v2[6] ) + { + lpuexcpt = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v2 + 52))(v2, a2); + } + else + { + v4 = v3 + 2; + *(_WORD *)(v4 - 2) = a2; + v2[5] = v4; + } + if ( lpuexcpt == 0xFFFF ) + std::wios::clear( + (int *)((char *)this + *(_DWORD *)(*this - 12)), + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v12 + *(_DWORD *)(*v12 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v5 = *((_DWORD *)lpuexcpta + 30); + if ( v5 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v5 + 24))(v5, v7) == -1 ) + std::wios::clear( + (_DWORD *)((char *)v12 + *(_DWORD *)(*v12 - 12)), + *(_DWORD *)((char *)v12 + *(_DWORD *)(*v12 - 12) + 20) | 1); + } + } + return this; +} +// 4ECA07: variable 'v7' is possibly undefined + +//----- (004ECB60) -------------------------------------------------------- +void __thiscall std::wostream::swap(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v2; // ebx + std::ios_base *v3; // esi + int v4; // eax + __int16 v5; // dx + std::ios_base *v6; // [esp+4h] [ebp-58h] + + v2 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v3 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v2, v3, v6); + std::wios::_M_cache_locale(v2, (int)v2 + 108); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + v4 = *((_DWORD *)v2 + 28); + *((_DWORD *)v2 + 28) = *((_DWORD *)v3 + 28); + v5 = *((_WORD *)v3 + 58); + *((_DWORD *)v3 + 28) = v4; + LOWORD(v4) = *((_WORD *)v2 + 58); + *((_WORD *)v2 + 58) = v5; + LOBYTE(v5) = *((_BYTE *)v2 + 118); + *((_WORD *)v3 + 58) = v4; + *((_BYTE *)v2 + 118) = *((_BYTE *)v3 + 118); + *((_BYTE *)v3 + 118) = v5; +} +// 4ECB97: variable 'v6' is possibly undefined + +//----- (004ECC10) -------------------------------------------------------- +_DWORD *__fastcall std::wostream::flush(_DWORD *a1) +{ + int v1; // ecx + + v1 = *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 120); + if ( v1 && (*(int (__fastcall **)(int))(*(_DWORD *)v1 + 24))(v1) == -1 ) + std::wios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 1); + return a1; +} + +//----- (004ECD60) -------------------------------------------------------- +_DWORD *__thiscall std::wostream::seekp(_DWORD *this, int a2, int a3, int a4, int a5) +{ + char *v5; // edi + _DWORD *v6; // eax + int v7; // edi + void (__thiscall *v8)(int *, _DWORD *, int, int, int, int, int); // eax + _DWORD *v10; // [esp+0h] [ebp-A8h] + int v12[14]; // [esp+70h] [ebp-38h] BYREF + + v5 = (char *)this + *(_DWORD *)(*this - 12); + if ( (v5[20] & 5) == 0 ) + { + v6 = (_DWORD *)*((_DWORD *)v5 + 30); + v7 = *v6; + v12[6] = a4; + v10 = v6; + v8 = *(void (__thiscall **)(int *, _DWORD *, int, int, int, int, int))(v7 + 20); + v12[4] = a2; + v12[5] = a3; + v12[7] = a5; + v8(v12, v10, a2, a3, a4, a5, 16); + if ( (v12[0] & v12[1]) == -1 ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 4); + } + return this; +} + +//----- (004ECF20) -------------------------------------------------------- +_DWORD *__thiscall std::wostream::seekp(_DWORD *this, int a2, int a3, int a4) +{ + char *v4; // edi + int v7[10]; // [esp+60h] [ebp-28h] BYREF + + v4 = (char *)this + *(_DWORD *)(*this - 12); + if ( (v4[20] & 5) == 0 ) + { + (*(void (__thiscall **)(int *, _DWORD, int, int, int, int))(**((_DWORD **)v4 + 30) + 16))( + v7, + *((_DWORD *)v4 + 30), + a2, + a3, + a4, + 16); + if ( (v7[0] & v7[1]) == -1 ) + std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 4); + } + return this; +} + +//----- (004ED0B0) -------------------------------------------------------- +_DWORD *__thiscall std::wostream::tellp(_DWORD *this, int *a2) +{ + int v2; // eax + char *v3; // esi + int v6[10]; // [esp+60h] [ebp-28h] BYREF + + v2 = *a2; + *this = -1; + this[1] = -1; + v3 = (char *)a2 + *(_DWORD *)(v2 - 12); + this[2] = 0; + if ( (v3[20] & 5) == 0 ) + { + (*(void (__thiscall **)(int *, _DWORD, _DWORD, _DWORD, int, int))(**((_DWORD **)v3 + 30) + 16))( + v6, + *((_DWORD *)v3 + 30), + 0, + 0, + 1, + 16); + *this = v6[0]; + this[1] = v6[1]; + this[2] = v6[2]; + } + return this; +} + +//----- (004ED230) -------------------------------------------------------- +int *__thiscall std::wostream::write(int *this, int a2, int a3) +{ + int v3; // ecx + int v4; // ecx + int v6; // [esp+0h] [ebp-78h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-64h] + int v9; // [esp+58h] [ebp-20h] BYREF + _DWORD *v10; // [esp+5Ch] [ebp-1Ch] + + std::wostream::sentry::sentry(&v9, this); + if ( (_BYTE)v9 ) + { + v3 = *(int *)((char *)this + *(_DWORD *)(*this - 12) + 120); + if ( a3 != (*(int (__thiscall **)(int, int, int))(*(_DWORD *)v3 + 48))(v3, a2, a3) ) + std::wios::clear( + (int *)((char *)this + *(_DWORD *)(*this - 12)), + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 1); + } + lpuexcpt = (struct _Unwind_Exception *)((char *)v10 + *(_DWORD *)(*v10 - 12)); + if ( (*((_BYTE *)lpuexcpt + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpt + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v6) == -1 ) + std::wios::clear( + (_DWORD *)((char *)v10 + *(_DWORD *)(*v10 - 12)), + *(_DWORD *)((char *)v10 + *(_DWORD *)(*v10 - 12) + 20) | 1); + } + } + return this; +} +// 4ED2DF: variable 'v6' is possibly undefined + +//----- (004ED400) -------------------------------------------------------- +int __thiscall std::wostream::sentry::sentry(_DWORD *this, int *a2) +{ + int v3; // eax + char *v4; // ecx + int result; // eax + + *(_BYTE *)this = 0; + v3 = *a2; + this[1] = a2; + v4 = (char *)a2 + *(_DWORD *)(v3 - 12); + result = *((_DWORD *)v4 + 5); + if ( *((_DWORD *)v4 + 28) ) + { + if ( result ) + return std::wios::clear(v4, result | 4); + std::wostream::flush(*((_DWORD **)v4 + 28)); + result = *(int *)((char *)a2 + *(_DWORD *)(*a2 - 12) + 20); + v4 = (char *)a2 + *(_DWORD *)(*a2 - 12); + } + if ( result ) + return std::wios::clear(v4, result | 4); + *(_BYTE *)this = 1; + return result; +} + +//----- (004ED460) -------------------------------------------------------- +int __thiscall std::wostream::sentry::sentry(_DWORD *this, int *a2) +{ + int v3; // eax + char *v4; // ecx + int result; // eax + + *(_BYTE *)this = 0; + v3 = *a2; + this[1] = a2; + v4 = (char *)a2 + *(_DWORD *)(v3 - 12); + result = *((_DWORD *)v4 + 5); + if ( *((_DWORD *)v4 + 28) ) + { + if ( result ) + return std::wios::clear(v4, result | 4); + std::wostream::flush(*((_DWORD **)v4 + 28)); + result = *(int *)((char *)a2 + *(_DWORD *)(*a2 - 12) + 20); + v4 = (char *)a2 + *(_DWORD *)(*a2 - 12); + } + if ( result ) + return std::wios::clear(v4, result | 4); + *(_BYTE *)this = 1; + return result; +} + +//----- (004ED4C0) -------------------------------------------------------- +void __fastcall std::wostream::sentry::~sentry(int a1) +{ + int v2; // ebx + int v3; // ecx + _DWORD *v4; // ecx + + if ( (*(_BYTE *)(*(_DWORD *)(**(_DWORD **)(a1 + 4) - 12) + *(_DWORD *)(a1 + 4) + 13) & 0x20) != 0 ) + { + v2 = *(_DWORD *)(**(_DWORD **)(a1 + 4) - 12) + *(_DWORD *)(a1 + 4); + if ( !std::uncaught_exception() ) + { + v3 = *(_DWORD *)(v2 + 120); + if ( v3 ) + { + if ( (*(int (__fastcall **)(int))(*(_DWORD *)v3 + 24))(v3) == -1 ) + { + v4 = (_DWORD *)(*(_DWORD *)(**(_DWORD **)(a1 + 4) - 12) + *(_DWORD *)(a1 + 4)); + std::wios::clear(v4, v4[5] | 1); + } + } + } + } +} + +//----- (004ED550) -------------------------------------------------------- +void __fastcall std::wostream::sentry::~sentry(int a1) +{ + int v2; // ebx + int v3; // ecx + _DWORD *v4; // ecx + + if ( (*(_BYTE *)(*(_DWORD *)(**(_DWORD **)(a1 + 4) - 12) + *(_DWORD *)(a1 + 4) + 13) & 0x20) != 0 ) + { + v2 = *(_DWORD *)(**(_DWORD **)(a1 + 4) - 12) + *(_DWORD *)(a1 + 4); + if ( !std::uncaught_exception() ) + { + v3 = *(_DWORD *)(v2 + 120); + if ( v3 ) + { + if ( (*(int (__fastcall **)(int))(*(_DWORD *)v3 + 24))(v3) == -1 ) + { + v4 = (_DWORD *)(*(_DWORD *)(**(_DWORD **)(a1 + 4) - 12) + *(_DWORD *)(a1 + 4)); + std::wios::clear(v4, v4[5] | 1); + } + } + } + } +} + +//----- (004ED5E0) -------------------------------------------------------- +int __thiscall std::wostream::_M_write(_DWORD *this, int a2, int a3) +{ + int v4; // ecx + int result; // eax + + v4 = *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 120); + result = (*(int (__thiscall **)(int, int, int))(*(_DWORD *)v4 + 48))(v4, a2, a3); + if ( a3 != result ) + return std::wios::clear( + (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)), + *(_DWORD *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 1); + return result; +} + +//----- (004ED630) -------------------------------------------------------- +int *__thiscall std::wostream::_M_insert(int *this, int a2) +{ + unsigned __int16 v2; // ax + char v3; // dl + int v4; // ecx + int v6; // ecx + int v7; // edx + int v8; // [esp+0h] [ebp-88h] + int v9; // [esp+20h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+24h] [ebp-64h] + int v13; // [esp+68h] [ebp-20h] BYREF + _DWORD *v14; // [esp+6Ch] [ebp-1Ch] + + std::wostream::sentry::sentry(&v13, this); + if ( (_BYTE)v13 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(*this - 12)); + v9 = *((_DWORD *)lpuexcpt + 32); + if ( !v9 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 118) ) + { + v2 = *((_WORD *)lpuexcpt + 58); + } + else + { + v6 = *((_DWORD *)lpuexcpt + 31); + if ( !v6 ) + std::__throw_bad_cast(); + v2 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v6 + 40))(v6, 32); + v7 = *this; + *((_WORD *)lpuexcpt + 58) = v2; + *((_BYTE *)lpuexcpt + 118) = 1; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v7 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, _DWORD, int))(*(_DWORD *)v9 + 36))( + v9, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v2, + a2); + if ( v3 ) + std::wios::clear( + (int *)((char *)this + *(_DWORD *)(*this - 12)), + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v14 + *(_DWORD *)(*v14 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpta + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v8) == -1 ) + std::wios::clear( + (_DWORD *)((char *)v14 + *(_DWORD *)(*v14 - 12)), + *(_DWORD *)((char *)v14 + *(_DWORD *)(*v14 - 12) + 20) | 1); + } + } + return this; +} +// 4ED6F8: variable 'v3' is possibly undefined +// 4ED74C: variable 'v8' is possibly undefined + +//----- (004ED8A0) -------------------------------------------------------- +int *__thiscall std::wostream::_M_insert(int *this, unsigned __int8 a2) +{ + unsigned __int16 v2; // ax + char v3; // dl + int v4; // ecx + int v6; // ecx + int v7; // edx + int v8; // [esp+0h] [ebp-98h] + int v9; // [esp+2Ch] [ebp-6Ch] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+34h] [ebp-64h] + int v13; // [esp+78h] [ebp-20h] BYREF + _DWORD *v14; // [esp+7Ch] [ebp-1Ch] + + std::wostream::sentry::sentry(&v13, this); + if ( (_BYTE)v13 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(*this - 12)); + v9 = *((_DWORD *)lpuexcpt + 32); + if ( !v9 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 118) ) + { + v2 = *((_WORD *)lpuexcpt + 58); + } + else + { + v6 = *((_DWORD *)lpuexcpt + 31); + if ( !v6 ) + std::__throw_bad_cast(); + v2 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v6 + 40))(v6, 32); + v7 = *this; + *((_WORD *)lpuexcpt + 58) = v2; + *((_BYTE *)lpuexcpt + 118) = 1; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v7 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, _DWORD, _DWORD))(*(_DWORD *)v9 + 8))( + v9, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v2, + a2); + if ( v3 ) + std::wios::clear( + (int *)((char *)this + *(_DWORD *)(*this - 12)), + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v14 + *(_DWORD *)(*v14 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpta + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v8) == -1 ) + std::wios::clear( + (_DWORD *)((char *)v14 + *(_DWORD *)(*v14 - 12)), + *(_DWORD *)((char *)v14 + *(_DWORD *)(*v14 - 12) + 20) | 1); + } + } + return this; +} +// 4ED978: variable 'v3' is possibly undefined +// 4ED9CC: variable 'v8' is possibly undefined + +//----- (004EDB20) -------------------------------------------------------- +int *__thiscall std::wostream::_M_insert(int *this, double a2) +{ + unsigned __int16 v2; // ax + char v3; // dl + int v4; // ecx + int v6; // ecx + int v7; // edx + int v8; // [esp+0h] [ebp-98h] + int v9; // [esp+30h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+34h] [ebp-64h] + int v13; // [esp+78h] [ebp-20h] BYREF + _DWORD *v14; // [esp+7Ch] [ebp-1Ch] + + std::wostream::sentry::sentry(&v13, this); + if ( (_BYTE)v13 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(*this - 12)); + v9 = *((_DWORD *)lpuexcpt + 32); + if ( !v9 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 118) ) + { + v2 = *((_WORD *)lpuexcpt + 58); + } + else + { + v6 = *((_DWORD *)lpuexcpt + 31); + if ( !v6 ) + std::__throw_bad_cast(); + v2 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v6 + 40))(v6, 32); + v7 = *this; + *((_WORD *)lpuexcpt + 58) = v2; + *((_BYTE *)lpuexcpt + 118) = 1; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v7 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v9 + 28))( + v9, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v2, + LODWORD(a2), + HIDWORD(a2)); + if ( v3 ) + std::wios::clear( + (int *)((char *)this + *(_DWORD *)(*this - 12)), + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v14 + *(_DWORD *)(*v14 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpta + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v8) == -1 ) + std::wios::clear( + (_DWORD *)((char *)v14 + *(_DWORD *)(*v14 - 12)), + *(_DWORD *)((char *)v14 + *(_DWORD *)(*v14 - 12) + 20) | 1); + } + } + return this; +} +// 4EDBEB: variable 'v3' is possibly undefined +// 4EDC3F: variable 'v8' is possibly undefined + +//----- (004EDD90) -------------------------------------------------------- +int *__thiscall std::wostream::_M_insert(int *this, long double a2) +{ + unsigned __int16 v2; // ax + char v3; // dl + int v4; // ecx + int v6; // ecx + int v7; // edx + int v8; // [esp+0h] [ebp-88h] + int v10; // [esp+20h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+24h] [ebp-64h] + int v14; // [esp+68h] [ebp-20h] BYREF + _DWORD *v15; // [esp+6Ch] [ebp-1Ch] + + std::wostream::sentry::sentry(&v14, this); + if ( (_BYTE)v14 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(*this - 12)); + v10 = *((_DWORD *)lpuexcpt + 32); + if ( !v10 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 118) ) + { + v2 = *((_WORD *)lpuexcpt + 58); + } + else + { + v6 = *((_DWORD *)lpuexcpt + 31); + if ( !v6 ) + std::__throw_bad_cast(); + v2 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v6 + 40))(v6, 32); + v7 = *this; + *((_WORD *)lpuexcpt + 58) = v2; + *((_BYTE *)lpuexcpt + 118) = 1; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v7 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v10 + 32))( + v10, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v2, + LODWORD(a2), + DWORD1(a2), + HIDWORD(a2)); + if ( v3 ) + std::wios::clear( + (int *)((char *)this + *(_DWORD *)(*this - 12)), + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v15 + *(_DWORD *)(*v15 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpta + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v8) == -1 ) + std::wios::clear( + (_DWORD *)((char *)v15 + *(_DWORD *)(*v15 - 12)), + *(_DWORD *)((char *)v15 + *(_DWORD *)(*v15 - 12) + 20) | 1); + } + } + return this; +} +// 4EDE52: variable 'v3' is possibly undefined +// 4EDEA6: variable 'v8' is possibly undefined + +//----- (004EE000) -------------------------------------------------------- +int *__thiscall std::wostream::_M_insert(int *this, int a2) +{ + unsigned __int16 v2; // ax + char v3; // dl + int v4; // ecx + int v6; // ecx + int v7; // edx + int v8; // [esp+0h] [ebp-88h] + int v9; // [esp+20h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+24h] [ebp-64h] + int v13; // [esp+68h] [ebp-20h] BYREF + _DWORD *v14; // [esp+6Ch] [ebp-1Ch] + + std::wostream::sentry::sentry(&v13, this); + if ( (_BYTE)v13 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(*this - 12)); + v9 = *((_DWORD *)lpuexcpt + 32); + if ( !v9 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 118) ) + { + v2 = *((_WORD *)lpuexcpt + 58); + } + else + { + v6 = *((_DWORD *)lpuexcpt + 31); + if ( !v6 ) + std::__throw_bad_cast(); + v2 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v6 + 40))(v6, 32); + v7 = *this; + *((_WORD *)lpuexcpt + 58) = v2; + *((_BYTE *)lpuexcpt + 118) = 1; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v7 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, _DWORD, int))(*(_DWORD *)v9 + 12))( + v9, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v2, + a2); + if ( v3 ) + std::wios::clear( + (int *)((char *)this + *(_DWORD *)(*this - 12)), + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v14 + *(_DWORD *)(*v14 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpta + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v8) == -1 ) + std::wios::clear( + (_DWORD *)((char *)v14 + *(_DWORD *)(*v14 - 12)), + *(_DWORD *)((char *)v14 + *(_DWORD *)(*v14 - 12) + 20) | 1); + } + } + return this; +} +// 4EE0C8: variable 'v3' is possibly undefined +// 4EE11C: variable 'v8' is possibly undefined + +//----- (004EE270) -------------------------------------------------------- +int *__thiscall std::wostream::_M_insert(int *this, int a2) +{ + unsigned __int16 v2; // ax + char v3; // dl + int v4; // ecx + int v6; // ecx + int v7; // edx + int v8; // [esp+0h] [ebp-88h] + int v9; // [esp+20h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+24h] [ebp-64h] + int v13; // [esp+68h] [ebp-20h] BYREF + _DWORD *v14; // [esp+6Ch] [ebp-1Ch] + + std::wostream::sentry::sentry(&v13, this); + if ( (_BYTE)v13 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(*this - 12)); + v9 = *((_DWORD *)lpuexcpt + 32); + if ( !v9 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 118) ) + { + v2 = *((_WORD *)lpuexcpt + 58); + } + else + { + v6 = *((_DWORD *)lpuexcpt + 31); + if ( !v6 ) + std::__throw_bad_cast(); + v2 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v6 + 40))(v6, 32); + v7 = *this; + *((_WORD *)lpuexcpt + 58) = v2; + *((_BYTE *)lpuexcpt + 118) = 1; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v7 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, _DWORD, int))(*(_DWORD *)v9 + 16))( + v9, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v2, + a2); + if ( v3 ) + std::wios::clear( + (int *)((char *)this + *(_DWORD *)(*this - 12)), + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v14 + *(_DWORD *)(*v14 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpta + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v8) == -1 ) + std::wios::clear( + (_DWORD *)((char *)v14 + *(_DWORD *)(*v14 - 12)), + *(_DWORD *)((char *)v14 + *(_DWORD *)(*v14 - 12) + 20) | 1); + } + } + return this; +} +// 4EE338: variable 'v3' is possibly undefined +// 4EE38C: variable 'v8' is possibly undefined + +//----- (004EE4E0) -------------------------------------------------------- +int *__thiscall std::wostream::_M_insert(int *this, int a2, int a3) +{ + unsigned __int16 v3; // ax + char v4; // dl + int v5; // ecx + int v7; // ecx + int v8; // edx + int v9; // [esp+0h] [ebp-98h] + int v10; // [esp+30h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+34h] [ebp-64h] + int v14; // [esp+78h] [ebp-20h] BYREF + _DWORD *v15; // [esp+7Ch] [ebp-1Ch] + + std::wostream::sentry::sentry(&v14, this); + if ( (_BYTE)v14 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(*this - 12)); + v10 = *((_DWORD *)lpuexcpt + 32); + if ( !v10 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 118) ) + { + v3 = *((_WORD *)lpuexcpt + 58); + } + else + { + v7 = *((_DWORD *)lpuexcpt + 31); + if ( !v7 ) + std::__throw_bad_cast(); + v3 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v7 + 40))(v7, 32); + v8 = *this; + *((_WORD *)lpuexcpt + 58) = v3; + *((_BYTE *)lpuexcpt + 118) = 1; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v8 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, _DWORD, int, int))(*(_DWORD *)v10 + 20))( + v10, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v3, + a2, + a3); + if ( v4 ) + std::wios::clear( + (int *)((char *)this + *(_DWORD *)(*this - 12)), + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v15 + *(_DWORD *)(*v15 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v5 = *((_DWORD *)lpuexcpta + 30); + if ( v5 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v5 + 24))(v5, v9) == -1 ) + std::wios::clear( + (_DWORD *)((char *)v15 + *(_DWORD *)(*v15 - 12)), + *(_DWORD *)((char *)v15 + *(_DWORD *)(*v15 - 12) + 20) | 1); + } + } + return this; +} +// 4EE5BC: variable 'v4' is possibly undefined +// 4EE610: variable 'v9' is possibly undefined + +//----- (004EE760) -------------------------------------------------------- +int *__thiscall std::wostream::_M_insert(int *this, int a2, int a3) +{ + unsigned __int16 v3; // ax + char v4; // dl + int v5; // ecx + int v7; // ecx + int v8; // edx + int v9; // [esp+0h] [ebp-98h] + int v10; // [esp+30h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + struct _Unwind_Exception *lpuexcpta; // [esp+34h] [ebp-64h] + int v14; // [esp+78h] [ebp-20h] BYREF + _DWORD *v15; // [esp+7Ch] [ebp-1Ch] + + std::wostream::sentry::sentry(&v14, this); + if ( (_BYTE)v14 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(*this - 12)); + v10 = *((_DWORD *)lpuexcpt + 32); + if ( !v10 ) + std::__throw_bad_cast(); + if ( *((_BYTE *)lpuexcpt + 118) ) + { + v3 = *((_WORD *)lpuexcpt + 58); + } + else + { + v7 = *((_DWORD *)lpuexcpt + 31); + if ( !v7 ) + std::__throw_bad_cast(); + v3 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v7 + 40))(v7, 32); + v8 = *this; + *((_WORD *)lpuexcpt + 58) = v3; + *((_BYTE *)lpuexcpt + 118) = 1; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v8 - 12)); + } + (*(void (__thiscall **)(int, _DWORD, bool, struct _Unwind_Exception *, _DWORD, int, int))(*(_DWORD *)v10 + 24))( + v10, + *((_DWORD *)lpuexcpt + 30), + *((_DWORD *)lpuexcpt + 30) == 0, + lpuexcpt, + v3, + a2, + a3); + if ( v4 ) + std::wios::clear( + (int *)((char *)this + *(_DWORD *)(*this - 12)), + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 20) | 1); + } + lpuexcpta = (struct _Unwind_Exception *)((char *)v15 + *(_DWORD *)(*v15 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v5 = *((_DWORD *)lpuexcpta + 30); + if ( v5 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v5 + 24))(v5, v9) == -1 ) + std::wios::clear( + (_DWORD *)((char *)v15 + *(_DWORD *)(*v15 - 12)), + *(_DWORD *)((char *)v15 + *(_DWORD *)(*v15 - 12) + 20) | 1); + } + } + return this; +} +// 4EE83C: variable 'v4' is possibly undefined +// 4EE890: variable 'v9' is possibly undefined + +//----- (004EE9E0) -------------------------------------------------------- +void __thiscall std::wostream::basic_ostream(_DWORD *this, _DWORD *a2) +{ + int v2; // eax + std::ios_base *v3; // [esp+4h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-48h] + _DWORD *v5; // [esp+14h] [ebp-44h] + + v5 = this + 1; + std::ios_base::ios_base(this + 1); + *((_WORD *)this + 60) = 0; + this[29] = 0; + *((_BYTE *)this + 122) = 0; + this[31] = 0; + this[32] = 0; + this[33] = 0; + this[34] = 0; + *this = &off_5601C4; + this[1] = off_5601D8; + lpuexcpt = (struct _Unwind_Exception *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_move((int)v5, lpuexcpt, v3); + std::wios::_M_cache_locale(v5, (int)(this + 28)); + v2 = *((_DWORD *)lpuexcpt + 28); + this[31] = 0; + *((_DWORD *)lpuexcpt + 28) = 0; + this[29] = v2; + *((_WORD *)this + 60) = *((_WORD *)lpuexcpt + 58); + *((_BYTE *)this + 122) = *((_BYTE *)lpuexcpt + 118); +} +// 4EEA76: variable 'v3' is possibly undefined +// 5601C4: using guessed type int (*off_5601C4)(); +// 5601D8: using guessed type int (*off_5601D8[2])(); + +//----- (004EEB00) -------------------------------------------------------- +void __thiscall std::wostream::basic_ostream(_DWORD *this, int a2) +{ + int v2; // [esp+14h] [ebp-44h] + + v2 = (int)(this + 1); + std::ios_base::ios_base(this + 1); + this[29] = 0; + *((_WORD *)this + 60) = 0; + *((_BYTE *)this + 122) = 0; + this[31] = 0; + this[32] = 0; + this[33] = 0; + this[34] = 0; + *this = &off_5601C4; + this[1] = off_5601D8; + std::wios::init(v2, a2); +} +// 5601C4: using guessed type int (*off_5601C4)(); +// 5601D8: using guessed type int (*off_5601D8[2])(); + +//----- (004EEBE0) -------------------------------------------------------- +int __thiscall std::wostream::basic_ostream(_DWORD *this, int a2) +{ + int result; // eax + + std::ios_base::ios_base(this + 1); + result = 0; + *((_BYTE *)this + 122) = 0; + this[29] = 0; + *((_WORD *)this + 60) = 0; + this[31] = 0; + this[32] = 0; + this[33] = 0; + this[34] = 0; + *this = &off_5601C4; + this[1] = off_5601D8; + return result; +} +// 5601C4: using guessed type int (*off_5601C4)(); +// 5601D8: using guessed type int (*off_5601D8[2])(); + +//----- (004EEC40) -------------------------------------------------------- +void __fastcall std::wostream::basic_ostream(int a1) +{ + int v1; // [esp+14h] [ebp-44h] + + v1 = a1 + 4; + std::ios_base::ios_base((_DWORD *)(a1 + 4)); + *(_DWORD *)(a1 + 116) = 0; + *(_WORD *)(a1 + 120) = 0; + *(_BYTE *)(a1 + 122) = 0; + *(_DWORD *)(a1 + 124) = 0; + *(_DWORD *)(a1 + 128) = 0; + *(_DWORD *)(a1 + 132) = 0; + *(_DWORD *)(a1 + 136) = 0; + *(_DWORD *)a1 = &off_5601C4; + *(_DWORD *)(a1 + 4) = off_5601D8; + std::wios::init(v1, 0); +} +// 5601C4: using guessed type int (*off_5601C4)(); +// 5601D8: using guessed type int (*off_5601D8[2])(); + +//----- (004EED20) -------------------------------------------------------- +int __thiscall std::wostream::basic_ostream(_DWORD *this, _DWORD *a2, _DWORD *a3) +{ + int v3; // eax + int v4; // ebx + std::ios_base *v5; // esi + int v6; // eax + int result; // eax + std::ios_base *v8; // [esp+4h] [ebp-18h] + + v3 = a2[1]; + v4 = (int)this + *(_DWORD *)(*a2 - 12); + *this = *a2; + *(_DWORD *)v4 = v3; + v5 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move(v4, v5, v8); + std::wios::_M_cache_locale((_DWORD *)v4, v4 + 108); + v6 = *((_DWORD *)v5 + 28); + *(_DWORD *)(v4 + 120) = 0; + *((_DWORD *)v5 + 28) = 0; + *(_DWORD *)(v4 + 112) = v6; + *(_WORD *)(v4 + 116) = *((_WORD *)v5 + 58); + result = *((unsigned __int8 *)v5 + 118); + *(_BYTE *)(v4 + 118) = result; + return result; +} +// 4EED45: variable 'v8' is possibly undefined + +//----- (004EED90) -------------------------------------------------------- +BOOL __thiscall std::wostream::basic_ostream(int *this, int *a2, int a3) +{ + int v3; // edx + int v4; // eax + _DWORD *v5; // ecx + + v3 = *a2; + v4 = a2[1]; + *this = *a2; + v5 = (int *)((char *)this + *(_DWORD *)(v3 - 12)); + *v5 = v4; + return std::wios::init((int)v5, a3); +} + +//----- (004EEDC0) -------------------------------------------------------- +int __thiscall std::wostream::basic_ostream(int *this, int *a2, int a3) +{ + int v3; // edx + int result; // eax + + v3 = *a2; + result = a2[1]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v3 - 12)) = result; + return result; +} + +//----- (004EEDE0) -------------------------------------------------------- +BOOL __thiscall std::wostream::basic_ostream(int *this, int *a2) +{ + int v2; // edx + int v3; // eax + _DWORD *v4; // ecx + + v2 = *a2; + v3 = a2[1]; + *this = *a2; + v4 = (int *)((char *)this + *(_DWORD *)(v2 - 12)); + *v4 = v3; + return std::wios::init((int)v4, 0); +} + +//----- (004EEE00) -------------------------------------------------------- +void __fastcall std::wostream::~wostream(char *Block) +{ + _DWORD *v2; // ecx + + v2 = Block + 4; + *(v2 - 1) = &off_5601C4; + *v2 = &off_560E30; + std::ios_base::~ios_base((int)v2); + operator delete(Block); +} +// 5601C4: using guessed type int (*off_5601C4)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (004EEE30) -------------------------------------------------------- +void __fastcall std::wostream::~wostream(_DWORD *a1) +{ + _DWORD *v1; // ecx + + *a1 = &off_5601C4; + v1 = a1 + 1; + *v1 = &off_560E30; + std::ios_base::~ios_base((int)v1); +} +// 5601C4: using guessed type int (*off_5601C4)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (004EEE50) -------------------------------------------------------- +int __thiscall std::wostream::~wostream(int *this, int *a2) +{ + int v2; // eax + int result; // eax + + v2 = *a2; + *this = *a2; + result = *(_DWORD *)(v2 - 12); + *(int *)((char *)this + result) = a2[1]; + return result; +} + +//----- (004EEE70) -------------------------------------------------------- +_DWORD *__thiscall std::wostream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // ebx + std::ios_base *v4; // esi + int v5; // eax + __int16 v6; // dx + std::ios_base *v8; // [esp+4h] [ebp-18h] + + v3 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + v4 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + std::ios_base::_M_swap(v4, v3, v8); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + v5 = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = *((_DWORD *)v3 + 28); + v6 = *((_WORD *)v3 + 58); + *((_DWORD *)v3 + 28) = v5; + LOWORD(v5) = *((_WORD *)v4 + 58); + *((_WORD *)v4 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v4 + 118); + *((_WORD *)v3 + 58) = v5; + *((_BYTE *)v4 + 118) = *((_BYTE *)v3 + 118); + *((_BYTE *)v3 + 118) = v6; + return this; +} +// 4EEEAA: variable 'v8' is possibly undefined + +//----- (004EEF20) -------------------------------------------------------- +int __thiscall std::wostream::operator<<(void *this, int (__cdecl *a2)(void *)) +{ + return a2(this); +} + +//----- (004EEF30) -------------------------------------------------------- +char *__thiscall std::wostream::operator<<(char *this, void (__cdecl *a2)(char *)) +{ + a2(&this[*(_DWORD *)(*(_DWORD *)this - 12)]); + return this; +} + +//----- (004EEF50) -------------------------------------------------------- +char *__thiscall std::wostream::operator<<(char *this, void (__cdecl *a2)(char *)) +{ + a2(&this[*(_DWORD *)(*(_DWORD *)this - 12)]); + return this; +} + +//----- (004EEF80) -------------------------------------------------------- +int *__thiscall std::wostream::operator<<(int *this, _DWORD *a2) +{ + char *v2; // ecx + int v3; // eax + int v4; // ecx + int v6; // [esp+0h] [ebp-78h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-64h] + char v9; // [esp+57h] [ebp-21h] BYREF + int v10; // [esp+58h] [ebp-20h] BYREF + _DWORD *v11; // [esp+5Ch] [ebp-1Ch] + + std::wostream::sentry::sentry(&v10, this); + if ( (_BYTE)v10 ) + { + v2 = (char *)this + *(_DWORD *)(*this - 12); + if ( !a2 ) + { + v3 = 1; + goto LABEL_13; + } + if ( !std::__copy_streambufs_eof>(a2, *((_DWORD **)v2 + 30), &v9) ) + { + v3 = 4; + v2 = (char *)this + *(_DWORD *)(*this - 12); +LABEL_13: + std::wios::clear(v2, *((_DWORD *)v2 + 5) | v3); + } + } + else if ( !a2 ) + { + v3 = 1; + v2 = (char *)this + *(_DWORD *)(*this - 12); + goto LABEL_13; + } + lpuexcpt = (struct _Unwind_Exception *)((char *)v11 + *(_DWORD *)(*v11 - 12)); + if ( (*((_BYTE *)lpuexcpt + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v4 = *((_DWORD *)lpuexcpt + 30); + if ( v4 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 24))(v4, v6) == -1 ) + std::wios::clear( + (_DWORD *)((char *)v11 + *(_DWORD *)(*v11 - 12)), + *(_DWORD *)((char *)v11 + *(_DWORD *)(*v11 - 12) + 20) | 1); + } + } + return this; +} +// 4EF05B: variable 'v6' is possibly undefined + +//----- (004EF190) -------------------------------------------------------- +int *__thiscall std::wostream::operator<<(int *this, unsigned __int8 a2) +{ + return std::wostream::_M_insert(this, a2); +} + +//----- (004EF1C0) -------------------------------------------------------- +int *__thiscall std::wostream::operator<<(int *this, float a2) +{ + return std::wostream::_M_insert(this, a2); +} + +//----- (004EF220) -------------------------------------------------------- +int *__thiscall std::wostream::operator<<(int *this, unsigned __int16 a2) +{ + int v2; // eax + + v2 = *(int *)((char *)this + *(_DWORD *)(*this - 12) + 12) & 0x4A; + if ( v2 == 64 || v2 == 8 ) + return std::wostream::_M_insert(this, a2); + else + return std::wostream::_M_insert(this, (__int16)a2); +} + +//----- (004EF260) -------------------------------------------------------- +int *__thiscall std::wostream::operator<<(int *this, unsigned __int16 a2) +{ + return std::wostream::_M_insert(this, a2); +} + +//----- (004EF290) -------------------------------------------------------- +void __thiscall std::random_device::_M_init_pretr1(_DWORD *this, unsigned __int8 **a2) +{ + void *Block[2]; // [esp+58h] [ebp-20h] BYREF + char v4[24]; // [esp+60h] [ebp-18h] BYREF + + if ( !std::string::compare((int)a2, "mt19937") || (unsigned int)**a2 - 48 <= 9 ) + { + Block[0] = v4; + std::string::_M_construct(Block, "default", (int)""); + std::random_device::_M_init(this, (int)Block); + if ( Block[0] != v4 ) + operator delete(Block[0]); + } + else + { + std::random_device::_M_init(this, (int)a2); + } +} + +//----- (004EF3A0) -------------------------------------------------------- +void __userpurge std::random_device::_M_init_pretr1(_DWORD *a1@, std::random_device **this, const std::string *a3) +{ + unsigned int v3; // [esp+8h] [ebp-14h] + + std::random_device::_M_init(a1, *this, *((const char **)*this - 3), v3); +} +// 4EF3B3: variable 'v3' is possibly undefined + +//----- (004EF3E0) -------------------------------------------------------- +int __fastcall std::random_device::_M_fini(int *a1) +{ + int result; // eax + + result = *a1; + if ( *a1 ) + { + result = close(a1[2]); + a1[2] = -1; + *a1 = 0; + } + return result; +} + +//----- (004EF420) -------------------------------------------------------- +void __userpurge std::random_device::_M_init( + _DWORD *a1@, + std::random_device *this, + const char *a3, + unsigned int a4) +{ + void *Block[2]; // [esp+58h] [ebp-20h] BYREF + char v6[24]; // [esp+60h] [ebp-18h] BYREF + + Block[0] = v6; + std::string::_M_construct(Block, this, (int)this + (_DWORD)a3); + std::random_device::_M_init(a1, (int)Block); + if ( Block[0] != v6 ) + operator delete(Block[0]); +} + +//----- (004EF4E0) -------------------------------------------------------- +void *__thiscall std::random_device::_M_init(_DWORD *this, int a2) +{ + void *result; // eax + unsigned int v5; // kr00_4 + unsigned int v6; // kr04_4 + unsigned int v7; // kr08_4 + unsigned int v17; // kr0C_4 + unsigned int v18; // kr10_4 + unsigned int v19; // kr14_4 + unsigned int v34; // [esp-4h] [ebp-20h] + unsigned int v35; // [esp-4h] [ebp-20h] + + *this = 0; + this[1] = 0; + this[2] = -1; + result = (void *)std::string::compare(a2, "default"); + if ( !result ) + { +LABEL_2: + this[1] = std::`anonymous namespace'::__winxp_rand_s; + return result; + } + if ( std::string::compare(a2, "rdseed") ) + { + if ( std::string::compare(a2, "rdrand") && std::string::compare(a2, "rdrnd") ) + { + result = (void *)std::string::compare(a2, "rand_s"); + if ( result ) + std::__throw_runtime_error((std::runtime_error *)"random_device::random_device(const std::string&): unsupported token"); + goto LABEL_2; + } + v5 = __readeflags(); + v34 = v5; + v6 = __readeflags(); + __writeeflags(v6 ^ 0x200000); + v7 = __readeflags(); + __writeeflags(v34); + if ( ((v6 ^ v7) & 0x200000) != 0 ) + { + _EAX = 0; + __asm { cpuid } + if ( _EAX ) + { + if ( _EBX == 1970169159 || _EBX == 1752462657 ) + { + _EAX = 1; + __asm { cpuid } + if ( (_ECX & 0x40000000) != 0 ) + { + this[1] = std::`anonymous namespace'::__x86_rdrand; + return result; + } + } + } + } +LABEL_20: + std::__throw_runtime_error((std::runtime_error *)"random_device::random_device(const std::string&): device not available"); + } + v17 = __readeflags(); + v35 = v17; + v18 = __readeflags(); + __writeeflags(v18 ^ 0x200000); + v19 = __readeflags(); + __writeeflags(v35); + if ( ((v18 ^ v19) & 0x200000) == 0 ) + goto LABEL_20; + __asm { cpuid } + if ( !_EAX || _EBX != 1970169159 && _EBX != 1752462657 ) + goto LABEL_20; + _EAX = 7; + __asm { cpuid } + if ( (_EBX & 0x40000) == 0 ) + goto LABEL_20; + _EAX = 1; + __asm { cpuid } + result = std::`anonymous namespace'::__x86_rdseed; + if ( (_ECX & 0x40000000) != 0 ) + result = std::`anonymous namespace'::__x86_rdseed_rdrand; + this[1] = result; + return result; +} + +//----- (004EF680) -------------------------------------------------------- +void __userpurge std::random_device::_M_init(_DWORD *a1@, std::random_device **this, const std::string *a3) +{ + unsigned int v3; // [esp+8h] [ebp-14h] + + std::random_device::_M_init(a1, *this, *((const char **)*this - 3), v3); +} +// 4EF693: variable 'v3' is possibly undefined + +//----- (004EF6B0) -------------------------------------------------------- +int __fastcall std::random_device::_M_getval(int a1) +{ + int (__cdecl *v1)(_DWORD); // eax + unsigned int MaxCharCount; // ebx + int *DstBuf; // esi + int v6; // eax + int v7; // [esp+1Ch] [ebp-20h] BYREF + + v1 = *(int (__cdecl **)(_DWORD))(a1 + 4); + if ( v1 ) + return v1(0); + MaxCharCount = 4; + DstBuf = &v7; + do + { + while ( 1 ) + { + v6 = read(*(_DWORD *)(a1 + 8), DstBuf, MaxCharCount); + if ( v6 > 0 ) + break; + if ( v6 != -1 || *__errno() != 4 ) + std::__throw_runtime_error((std::runtime_error *)"random_device could not be read"); + } + DstBuf = (int *)((char *)DstBuf + v6); + MaxCharCount -= v6; + } + while ( MaxCharCount ); + return v7; +} + +//----- (004EF730) -------------------------------------------------------- +void __userpurge std::runtime_error::runtime_error(_DWORD *a1@, std::runtime_error *this, const char *a3) +{ + int v3; // [esp+5Fh] [ebp-9h] BYREF + + *a1 = &off_5601E8; + std::string::string(a1 + 1, (char *)this, (int)&v3); +} +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); + +//----- (004EF7C0) -------------------------------------------------------- +void __thiscall std::runtime_error::runtime_error(_DWORD *this, int a2) +{ + unsigned int v2; // [esp+8h] [ebp-50h] + + *this = &off_5601E8; + std::__cow_string::__cow_string(this + 1, *(std::__cow_string **)a2, *(_DWORD *)(a2 + 4), v2); +} +// 4EF814: variable 'v2' is possibly undefined +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); + +//----- (004EF850) -------------------------------------------------------- +void __userpurge std::runtime_error::runtime_error( + _DWORD *a1@, + std::runtime_error *this, + const std::runtime_error *a3) +{ + const std::string *v3; // [esp+4h] [ebp-58h] + + *a1 = &off_5601E8; + std::string::string(a1 + 1, (std::runtime_error *)((char *)this + 4), v3); +} +// 4EF88E: variable 'v3' is possibly undefined +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); + +//----- (004EF8B0) -------------------------------------------------------- +void __userpurge std::runtime_error::runtime_error(_DWORD *a1@, std::runtime_error *this, const std::string *a3) +{ + const std::string *v3; // [esp+4h] [ebp-54h] + + *a1 = &off_5601E8; + std::string::string(a1 + 1, this, v3); +} +// 4EF8F8: variable 'v3' is possibly undefined +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); + +//----- (004EF930) -------------------------------------------------------- +void __fastcall std::runtime_error::~runtime_error(void *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + std::runtime_error::~runtime_error(Block); + operator delete(a1); +} +// 4EF936: variable 'Block' is possibly undefined + +//----- (004EF950) -------------------------------------------------------- +void __cdecl std::runtime_error::~runtime_error(std::exception *a1) +{ + _DWORD *v1; // ecx + int v2; // eax + int v3; // ecx + int v4; // eax + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v2 = _CRT_MT; + *v1 = &off_5601E8; + v3 = v1[1]; + if ( v2 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v3 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v4 = *(_DWORD *)(v3 - 4); + *(_DWORD *)(v3 - 4) = v4 - 1; + if ( v4 > 0 ) + { +LABEL_3: + std::exception::~exception(a1); + return; + } + } + std::string::_Rep::_M_destroy((void *)(v3 - 12), (int)v5); + std::exception::~exception(a1); +} +// 4EF95B: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 4EF950: using guessed type int var_D[3]; + +//----- (004EF9B0) -------------------------------------------------------- +int *__thiscall std::runtime_error::operator=(int *this, int a2) +{ + const std::string *v4; // [esp+4h] [ebp-58h] + + std::string::assign(this + 1, (std::string *)(a2 + 4), v4); + return this; +} +// 4EF9E8: variable 'v4' is possibly undefined + +//----- (004EFA10) -------------------------------------------------------- +int *__thiscall std::runtime_error::operator=(int *this, int a2) +{ + const std::string *v4; // [esp+4h] [ebp-58h] + + std::string::assign(this + 1, (std::string *)(a2 + 4), v4); + return this; +} +// 4EFA48: variable 'v4' is possibly undefined + +//----- (004EFA70) -------------------------------------------------------- +int __fastcall std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(volatile signed __int32 **a1) +{ + volatile signed __int32 *v1; // ecx + int result; // eax + + v1 = *a1; + if ( v1 ) + return std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release(v1); + return result; +} + +//----- (004EFA80) -------------------------------------------------------- +int __thiscall std::ifstream::open(int *this, char *a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::filebuf::open(this + 2, a2, a3 | 8) == 0; + v5 = *this; + if ( v4 ) + return std::ios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::ios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004EFAF0) -------------------------------------------------------- +int __thiscall std::ifstream::open(int *this, wchar_t *a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::filebuf::open(this + 2, a2, a3 | 8) == 0; + v5 = *this; + if ( v4 ) + return std::ios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::ios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004EFB60) -------------------------------------------------------- +int __thiscall std::ifstream::open(int *this, char **a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::filebuf::open(this + 2, *a2, a3 | 8) == 0; + v5 = *this; + if ( v4 ) + return std::ios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::ios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004EFBD0) -------------------------------------------------------- +void __thiscall std::ifstream::swap(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // edi + std::ios_base *v4; // esi + int v5; // edx + char v6; // cl + char v7; // cl + int v8; // edx + std::ios_base *v9; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v9); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + v8 = this[1]; + *((_BYTE *)v4 + 117) = v7; + this[1] = a2[1]; + a2[1] = v8; + std::filebuf::swap((int)(this + 2), (int)(a2 + 2)); +} +// 4EFC10: variable 'v9' is possibly undefined + +//----- (004EFCA0) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall std::ifstream::close(_DWORD *a1) +{ + struct _Unwind_Exception *result; // eax + + result = std::filebuf::close((struct _Unwind_Exception *)(a1 + 2)); + if ( !result ) + return (struct _Unwind_Exception *)std::ios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 4); + return result; +} + +//----- (004EFCE0) -------------------------------------------------------- +bool __fastcall std::ifstream::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 48)); +} + +//----- (004EFCF0) -------------------------------------------------------- +void __thiscall std::ifstream::basic_ifstream(_DWORD *this, int *a2) +{ + int v2; // eax + int v3; // eax + std::ios_base *v4; // ecx + int v5; // eax + std::ios_base *v6; // [esp+4h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-48h] + _DWORD *v8; // [esp+14h] [ebp-44h] + + v8 = this + 29; + std::ios_base::ios_base(this + 29); + *((_WORD *)this + 116) = 0; + v2 = a2[1]; + *this = &unk_55B528; + this[1] = v2; + this[57] = 0; + v3 = *a2; + this[59] = 0; + this[60] = 0; + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(v3 - 12)); + this[29] = &unk_55B53C; + this[61] = 0; + this[62] = 0; + lpuexcpt = v4; + std::ios_base::_M_move((int)v8, v4, v6); + std::ios::_M_cache_locale(v8, (int)(this + 56)); + this[59] = 0; + v5 = *((_DWORD *)lpuexcpt + 28); + *((_DWORD *)lpuexcpt + 28) = 0; + this[57] = v5; + *((_WORD *)this + 116) = *((_WORD *)lpuexcpt + 58); + a2[1] = 0; + *this = off_560200; + this[29] = off_560214; + std::filebuf::basic_filebuf((int)(this + 2), (std::locale *)(a2 + 2)); + this[59] = this + 2; +} +// 4EFD95: variable 'v6' is possibly undefined +// 560200: using guessed type int (*off_560200[2])(); +// 560214: using guessed type int (*off_560214[2])(); + +//----- (004EFE80) -------------------------------------------------------- +void __thiscall std::ifstream::basic_ifstream(_DWORD *this, char *a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+20h] [ebp-48h] + + v5 = (int)(this + 29); + std::ios_base::ios_base(this + 29); + this[57] = 0; + *((_WORD *)this + 116) = 0; + this[59] = 0; + this[60] = 0; + this[61] = 0; + this[62] = 0; + *this = &unk_55B528; + this[29] = &unk_55B53C; + this[1] = 0; + std::ios::init(v5, 0); + *this = off_560200; + this[29] = off_560214; + std::filebuf::basic_filebuf((int)(this + 2)); + std::ios::init(v5, (int)(this + 2)); + v3 = std::filebuf::open(this + 2, a2, a3 | 8); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::ios::clear(v4, 0); + else + std::ios::clear(v4, v4[5] | 4); +} +// 560200: using guessed type int (*off_560200[2])(); +// 560214: using guessed type int (*off_560214[2])(); + +//----- (004F0030) -------------------------------------------------------- +void __thiscall std::ifstream::basic_ifstream(_DWORD *this, wchar_t *a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+20h] [ebp-48h] + + v5 = (int)(this + 29); + std::ios_base::ios_base(this + 29); + this[57] = 0; + *((_WORD *)this + 116) = 0; + this[59] = 0; + this[60] = 0; + this[61] = 0; + this[62] = 0; + *this = &unk_55B528; + this[29] = &unk_55B53C; + this[1] = 0; + std::ios::init(v5, 0); + *this = off_560200; + this[29] = off_560214; + std::filebuf::basic_filebuf((int)(this + 2)); + std::ios::init(v5, (int)(this + 2)); + v3 = std::filebuf::open(this + 2, a2, a3 | 8); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::ios::clear(v4, 0); + else + std::ios::clear(v4, v4[5] | 4); +} +// 560200: using guessed type int (*off_560200[2])(); +// 560214: using guessed type int (*off_560214[2])(); + +//----- (004F01E0) -------------------------------------------------------- +void __thiscall std::ifstream::basic_ifstream(_DWORD *this, char **a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+20h] [ebp-48h] + + v5 = (int)(this + 29); + std::ios_base::ios_base(this + 29); + this[57] = 0; + *((_WORD *)this + 116) = 0; + this[59] = 0; + this[60] = 0; + this[61] = 0; + this[62] = 0; + *this = &unk_55B528; + this[29] = &unk_55B53C; + this[1] = 0; + std::ios::init(v5, 0); + *this = off_560200; + this[29] = off_560214; + std::filebuf::basic_filebuf((int)(this + 2)); + std::ios::init(v5, (int)(this + 2)); + v3 = std::filebuf::open(this + 2, *a2, a3 | 8); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::ios::clear(v4, 0); + else + std::ios::clear(v4, v4[5] | 4); +} +// 560200: using guessed type int (*off_560200[2])(); +// 560214: using guessed type int (*off_560214[2])(); + +//----- (004F0390) -------------------------------------------------------- +void __fastcall std::ifstream::basic_ifstream(int a1) +{ + int v1; // [esp+24h] [ebp-44h] + + v1 = a1 + 116; + std::ios_base::ios_base((_DWORD *)(a1 + 116)); + *(_DWORD *)(a1 + 228) = 0; + *(_WORD *)(a1 + 232) = 0; + *(_DWORD *)(a1 + 236) = 0; + *(_DWORD *)(a1 + 240) = 0; + *(_DWORD *)(a1 + 244) = 0; + *(_DWORD *)(a1 + 248) = 0; + *(_DWORD *)a1 = &unk_55B528; + *(_DWORD *)(a1 + 116) = &unk_55B53C; + *(_DWORD *)(a1 + 4) = 0; + std::ios::init(v1, 0); + *(_DWORD *)a1 = off_560200; + *(_DWORD *)(a1 + 116) = off_560214; + std::filebuf::basic_filebuf(a1 + 8); + std::ios::init(v1, a1 + 8); +} +// 560200: using guessed type int (*off_560200[2])(); +// 560214: using guessed type int (*off_560214[2])(); + +//----- (004F04E0) -------------------------------------------------------- +void __thiscall std::ifstream::basic_ifstream(int *this, int *a2, _DWORD *a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + std::ios_base *v10; // [esp+4h] [ebp-54h] + std::ios_base *v11; // [esp+10h] [ebp-48h] + int v12; // [esp+14h] [ebp-44h] + + v4 = a2[1]; + v5 = a2[2]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = a3[1]; + v12 = (int)this + *(_DWORD *)(v4 - 12); + v11 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move(v12, v11, v10); + std::ios::_M_cache_locale((_DWORD *)v12, v12 + 108); + v7 = *((_DWORD *)v11 + 28); + *(_DWORD *)(v12 + 120) = 0; + *((_DWORD *)v11 + 28) = 0; + v8 = a2[3]; + *(_DWORD *)(v12 + 112) = v7; + *(_WORD *)(v12 + 116) = *((_WORD *)v11 + 58); + a3[1] = 0; + v9 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v9 - 12)) = v8; + std::filebuf::basic_filebuf((int)(this + 2), (std::locale *)(a3 + 2)); + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 120) = (int)(this + 2); +} +// 4F0547: variable 'v10' is possibly undefined + +//----- (004F0620) -------------------------------------------------------- +void __thiscall std::ifstream::basic_ifstream(int *this, int *a2, char *a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + int v9; // edx + _DWORD *v10; // eax + _DWORD *v11; // ecx + + v5 = a2[1]; + v6 = a2[2]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = *a2; + v9 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v8 - 12)) = v9; + std::filebuf::basic_filebuf((int)(this + 2)); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 2)); + v10 = std::filebuf::open(this + 2, a3, a4 | 8); + v11 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v10 ) + std::ios::clear(v11, 0); + else + std::ios::clear(v11, v11[5] | 4); +} + +//----- (004F0790) -------------------------------------------------------- +void __thiscall std::ifstream::basic_ifstream(int *this, int *a2, wchar_t *a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + int v9; // edx + _DWORD *v10; // eax + _DWORD *v11; // ecx + + v5 = a2[1]; + v6 = a2[2]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = *a2; + v9 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v8 - 12)) = v9; + std::filebuf::basic_filebuf((int)(this + 2)); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 2)); + v10 = std::filebuf::open(this + 2, a3, a4 | 8); + v11 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v10 ) + std::ios::clear(v11, 0); + else + std::ios::clear(v11, v11[5] | 4); +} + +//----- (004F0900) -------------------------------------------------------- +void __thiscall std::ifstream::basic_ifstream(int *this, int *a2, char **a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + int v9; // edx + _DWORD *v10; // eax + _DWORD *v11; // ecx + + v5 = a2[1]; + v6 = a2[2]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = *a2; + v9 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v8 - 12)) = v9; + std::filebuf::basic_filebuf((int)(this + 2)); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 2)); + v10 = std::filebuf::open(this + 2, *a3, a4 | 8); + v11 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v10 ) + std::ios::clear(v11, 0); + else + std::ios::clear(v11, v11[5] | 4); +} + +//----- (004F0A70) -------------------------------------------------------- +void __thiscall std::ifstream::basic_ifstream(int *this, int *a2) +{ + int v3; // eax + int v4; // ecx + int v5; // edx + int v6; // eax + int v7; // edx + + v3 = a2[1]; + v4 = a2[2]; + v5 = *(_DWORD *)(v3 - 12); + *this = v3; + *(int *)((char *)this + v5) = v4; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v3 - 12), 0); + v6 = *a2; + v7 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v7; + std::filebuf::basic_filebuf((int)(this + 2)); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 2)); +} + +//----- (004F0B90) -------------------------------------------------------- +void __fastcall std::ifstream::~ifstream(_DWORD *a1) +{ + *a1 = off_560200; + a1[29] = off_560214; + a1[2] = off_5600A0; + std::filebuf::close((struct _Unwind_Exception *)(a1 + 2)); + std::__basic_file::~__basic_file((int)(a1 + 12)); + a1[2] = &off_560424; + std::locale::~locale((_DWORD **)a1 + 9); + *a1 = &unk_55B528; + a1[1] = 0; + a1[29] = &off_560E20; + std::ios_base::~ios_base((int)(a1 + 29)); + operator delete(a1); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560200: using guessed type int (*off_560200[2])(); +// 560214: using guessed type int (*off_560214[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (004F0C70) -------------------------------------------------------- +void __fastcall std::ifstream::~ifstream(int a1) +{ + *(_DWORD *)a1 = off_560200; + *(_DWORD *)(a1 + 116) = off_560214; + *(_DWORD *)(a1 + 8) = off_5600A0; + std::filebuf::close((struct _Unwind_Exception *)(a1 + 8)); + std::__basic_file::~__basic_file(a1 + 48); + *(_DWORD *)(a1 + 8) = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 36)); + *(_DWORD *)a1 = &unk_55B528; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 116) = &off_560E20; + std::ios_base::~ios_base(a1 + 116); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560200: using guessed type int (*off_560200[2])(); +// 560214: using guessed type int (*off_560214[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (004F0D40) -------------------------------------------------------- +void __thiscall std::ifstream::~ifstream(int *this, int *a2) +{ + int v3; // eax + int v4; // eax + + v3 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v3 - 12)) = a2[3]; + this[2] = (int)off_5600A0; + std::filebuf::close((struct _Unwind_Exception *)(this + 2)); + std::__basic_file::~__basic_file((int)(this + 12)); + this[2] = (int)&off_560424; + std::locale::~locale((_DWORD **)this + 9); + v4 = a2[1]; + *this = v4; + *(int *)((char *)this + *(_DWORD *)(v4 - 12)) = a2[2]; + this[1] = 0; +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (004F0E20) -------------------------------------------------------- +_DWORD *__thiscall std::ifstream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // eax + char v6; // cl + char v7; // cl + int v8; // eax + std::ios_base *v10; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v10); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + v8 = this[1]; + *((_BYTE *)v4 + 117) = v7; + this[1] = a2[1]; + a2[1] = v8; + std::filebuf::operator=((int)(this + 2), (int)(a2 + 2)); + return this; +} +// 4F0E60: variable 'v10' is possibly undefined + +//----- (004F0F00) -------------------------------------------------------- +int __thiscall std::wifstream::open(int *this, char *a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::wfilebuf::open(this + 2, a2, a3 | 8) == 0; + v5 = *this; + if ( v4 ) + return std::wios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::wios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004F0F70) -------------------------------------------------------- +int __thiscall std::wifstream::open(int *this, wchar_t *a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::wfilebuf::open(this + 2, a2, a3 | 8) == 0; + v5 = *this; + if ( v4 ) + return std::wios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::wios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004F0FE0) -------------------------------------------------------- +int __thiscall std::wifstream::open(int *this, char **a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::wfilebuf::open(this + 2, *a2, a3 | 8) == 0; + v5 = *this; + if ( v4 ) + return std::wios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::wios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004F1050) -------------------------------------------------------- +void __thiscall std::wifstream::swap(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // edi + std::ios_base *v4; // esi + int v5; // edx + __int16 v6; // cx + int v7; // edx + std::ios_base *v8; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v8); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + v7 = this[1]; + *((_BYTE *)v4 + 118) = v6; + this[1] = a2[1]; + a2[1] = v7; + std::wfilebuf::swap((int)(this + 2), (int)(a2 + 2)); +} +// 4F1090: variable 'v8' is possibly undefined + +//----- (004F1120) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall std::wifstream::close(_DWORD *a1) +{ + struct _Unwind_Exception *result; // eax + + result = std::wfilebuf::close((struct _Unwind_Exception *)(a1 + 2)); + if ( !result ) + return (struct _Unwind_Exception *)std::wios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 4); + return result; +} + +//----- (004F1160) -------------------------------------------------------- +bool __fastcall std::wifstream::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 48)); +} + +//----- (004F1170) -------------------------------------------------------- +void __thiscall std::wifstream::basic_ifstream(_DWORD *this, int *a2) +{ + int v2; // eax + int v3; // eax + std::ios_base *v4; // ecx + int v5; // eax + std::ios_base *v6; // [esp+4h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-48h] + _DWORD *v8; // [esp+14h] [ebp-44h] + + v8 = this + 30; + std::ios_base::ios_base(this + 30); + v2 = a2[1]; + *((_WORD *)this + 118) = 0; + *this = &unk_55B550; + this[1] = v2; + this[58] = 0; + v3 = *a2; + *((_BYTE *)this + 238) = 0; + this[60] = 0; + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(v3 - 12)); + this[61] = 0; + this[62] = 0; + this[63] = 0; + this[30] = &unk_55B564; + lpuexcpt = v4; + std::ios_base::_M_move((int)v8, v4, v6); + std::wios::_M_cache_locale(v8, (int)(this + 57)); + this[60] = 0; + v5 = *((_DWORD *)lpuexcpt + 28); + *((_DWORD *)lpuexcpt + 28) = 0; + this[58] = v5; + *((_WORD *)this + 118) = *((_WORD *)lpuexcpt + 58); + *((_BYTE *)this + 238) = *((_BYTE *)lpuexcpt + 118); + a2[1] = 0; + *this = off_560228; + this[30] = off_56023C; + std::wfilebuf::basic_filebuf((int)(this + 2), (std::locale *)(a2 + 2)); + this[60] = this + 2; +} +// 4F121C: variable 'v6' is possibly undefined +// 560228: using guessed type int (*off_560228[2])(); +// 56023C: using guessed type int (*off_56023C[2])(); + +//----- (004F1310) -------------------------------------------------------- +void __thiscall std::wifstream::basic_ifstream(_DWORD *this, char *a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+20h] [ebp-48h] + + v5 = (int)(this + 30); + std::ios_base::ios_base(this + 30); + this[58] = 0; + *((_WORD *)this + 118) = 0; + *((_BYTE *)this + 238) = 0; + this[60] = 0; + this[61] = 0; + this[62] = 0; + this[63] = 0; + *this = &unk_55B550; + this[30] = &unk_55B564; + this[1] = 0; + std::wios::init(v5, 0); + *this = off_560228; + this[30] = off_56023C; + std::wfilebuf::basic_filebuf((int)(this + 2)); + std::wios::init(v5, (int)(this + 2)); + v3 = std::wfilebuf::open(this + 2, a2, a3 | 8); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::wios::clear(v4, 0); + else + std::wios::clear(v4, v4[5] | 4); +} +// 560228: using guessed type int (*off_560228[2])(); +// 56023C: using guessed type int (*off_56023C[2])(); + +//----- (004F14C0) -------------------------------------------------------- +void __thiscall std::wifstream::basic_ifstream(_DWORD *this, wchar_t *a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+20h] [ebp-48h] + + v5 = (int)(this + 30); + std::ios_base::ios_base(this + 30); + this[58] = 0; + *((_WORD *)this + 118) = 0; + *((_BYTE *)this + 238) = 0; + this[60] = 0; + this[61] = 0; + this[62] = 0; + this[63] = 0; + *this = &unk_55B550; + this[30] = &unk_55B564; + this[1] = 0; + std::wios::init(v5, 0); + *this = off_560228; + this[30] = off_56023C; + std::wfilebuf::basic_filebuf((int)(this + 2)); + std::wios::init(v5, (int)(this + 2)); + v3 = std::wfilebuf::open(this + 2, a2, a3 | 8); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::wios::clear(v4, 0); + else + std::wios::clear(v4, v4[5] | 4); +} +// 560228: using guessed type int (*off_560228[2])(); +// 56023C: using guessed type int (*off_56023C[2])(); + +//----- (004F1670) -------------------------------------------------------- +void __thiscall std::wifstream::basic_ifstream(_DWORD *this, char **a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+20h] [ebp-48h] + + v5 = (int)(this + 30); + std::ios_base::ios_base(this + 30); + this[58] = 0; + *((_WORD *)this + 118) = 0; + *((_BYTE *)this + 238) = 0; + this[60] = 0; + this[61] = 0; + this[62] = 0; + this[63] = 0; + *this = &unk_55B550; + this[30] = &unk_55B564; + this[1] = 0; + std::wios::init(v5, 0); + *this = off_560228; + this[30] = off_56023C; + std::wfilebuf::basic_filebuf((int)(this + 2)); + std::wios::init(v5, (int)(this + 2)); + v3 = std::wfilebuf::open(this + 2, *a2, a3 | 8); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::wios::clear(v4, 0); + else + std::wios::clear(v4, v4[5] | 4); +} +// 560228: using guessed type int (*off_560228[2])(); +// 56023C: using guessed type int (*off_56023C[2])(); + +//----- (004F1820) -------------------------------------------------------- +void __fastcall std::wifstream::basic_ifstream(int a1) +{ + int v1; // [esp+24h] [ebp-44h] + + v1 = a1 + 120; + std::ios_base::ios_base((_DWORD *)(a1 + 120)); + *(_DWORD *)(a1 + 232) = 0; + *(_WORD *)(a1 + 236) = 0; + *(_BYTE *)(a1 + 238) = 0; + *(_DWORD *)(a1 + 240) = 0; + *(_DWORD *)(a1 + 244) = 0; + *(_DWORD *)(a1 + 248) = 0; + *(_DWORD *)(a1 + 252) = 0; + *(_DWORD *)a1 = &unk_55B550; + *(_DWORD *)(a1 + 120) = &unk_55B564; + *(_DWORD *)(a1 + 4) = 0; + std::wios::init(v1, 0); + *(_DWORD *)a1 = off_560228; + *(_DWORD *)(a1 + 120) = off_56023C; + std::wfilebuf::basic_filebuf(a1 + 8); + std::wios::init(v1, a1 + 8); +} +// 560228: using guessed type int (*off_560228[2])(); +// 56023C: using guessed type int (*off_56023C[2])(); + +//----- (004F1980) -------------------------------------------------------- +void __thiscall std::wifstream::basic_ifstream(int *this, int *a2, _DWORD *a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + std::ios_base *v10; // [esp+4h] [ebp-54h] + std::ios_base *v11; // [esp+10h] [ebp-48h] + int v12; // [esp+14h] [ebp-44h] + + v4 = a2[1]; + v5 = a2[2]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = a3[1]; + v12 = (int)this + *(_DWORD *)(v4 - 12); + v11 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move(v12, v11, v10); + std::wios::_M_cache_locale((_DWORD *)v12, v12 + 108); + v7 = *((_DWORD *)v11 + 28); + *(_DWORD *)(v12 + 120) = 0; + *((_DWORD *)v11 + 28) = 0; + v8 = a2[3]; + *(_DWORD *)(v12 + 112) = v7; + *(_WORD *)(v12 + 116) = *((_WORD *)v11 + 58); + *(_BYTE *)(v12 + 118) = *((_BYTE *)v11 + 118); + a3[1] = 0; + v9 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v9 - 12)) = v8; + std::wfilebuf::basic_filebuf((int)(this + 2), (std::locale *)(a3 + 2)); + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 120) = (int)(this + 2); +} +// 4F19E7: variable 'v10' is possibly undefined + +//----- (004F1AD0) -------------------------------------------------------- +void __thiscall std::wifstream::basic_ifstream(int *this, int *a2, char *a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + int v9; // edx + _DWORD *v10; // eax + _DWORD *v11; // ecx + + v5 = a2[1]; + v6 = a2[2]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = *a2; + v9 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v8 - 12)) = v9; + std::wfilebuf::basic_filebuf((int)(this + 2)); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 2)); + v10 = std::wfilebuf::open(this + 2, a3, a4 | 8); + v11 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v10 ) + std::wios::clear(v11, 0); + else + std::wios::clear(v11, v11[5] | 4); +} + +//----- (004F1C40) -------------------------------------------------------- +void __thiscall std::wifstream::basic_ifstream(int *this, int *a2, wchar_t *a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + int v9; // edx + _DWORD *v10; // eax + _DWORD *v11; // ecx + + v5 = a2[1]; + v6 = a2[2]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = *a2; + v9 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v8 - 12)) = v9; + std::wfilebuf::basic_filebuf((int)(this + 2)); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 2)); + v10 = std::wfilebuf::open(this + 2, a3, a4 | 8); + v11 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v10 ) + std::wios::clear(v11, 0); + else + std::wios::clear(v11, v11[5] | 4); +} + +//----- (004F1DB0) -------------------------------------------------------- +void __thiscall std::wifstream::basic_ifstream(int *this, int *a2, char **a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + int v9; // edx + _DWORD *v10; // eax + _DWORD *v11; // ecx + + v5 = a2[1]; + v6 = a2[2]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = *a2; + v9 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v8 - 12)) = v9; + std::wfilebuf::basic_filebuf((int)(this + 2)); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 2)); + v10 = std::wfilebuf::open(this + 2, *a3, a4 | 8); + v11 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v10 ) + std::wios::clear(v11, 0); + else + std::wios::clear(v11, v11[5] | 4); +} + +//----- (004F1F20) -------------------------------------------------------- +void __thiscall std::wifstream::basic_ifstream(int *this, int *a2) +{ + int v3; // eax + int v4; // ecx + int v5; // edx + int v6; // eax + int v7; // edx + + v3 = a2[1]; + v4 = a2[2]; + v5 = *(_DWORD *)(v3 - 12); + *this = v3; + *(int *)((char *)this + v5) = v4; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v3 - 12), 0); + v6 = *a2; + v7 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v7; + std::wfilebuf::basic_filebuf((int)(this + 2)); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 2)); +} + +//----- (004F2040) -------------------------------------------------------- +void __fastcall std::wifstream::~wifstream(_DWORD *a1) +{ + *a1 = off_560228; + a1[30] = off_56023C; + a1[2] = off_5600E0; + std::wfilebuf::close((struct _Unwind_Exception *)(a1 + 2)); + std::__basic_file::~__basic_file((int)(a1 + 12)); + a1[2] = &off_560464; + std::locale::~locale((_DWORD **)a1 + 9); + *a1 = &unk_55B550; + a1[1] = 0; + a1[30] = &off_560E30; + std::ios_base::~ios_base((int)(a1 + 30)); + operator delete(a1); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560228: using guessed type int (*off_560228[2])(); +// 56023C: using guessed type int (*off_56023C[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (004F2120) -------------------------------------------------------- +void __fastcall std::wifstream::~wifstream(int a1) +{ + *(_DWORD *)a1 = off_560228; + *(_DWORD *)(a1 + 120) = off_56023C; + *(_DWORD *)(a1 + 8) = off_5600E0; + std::wfilebuf::close((struct _Unwind_Exception *)(a1 + 8)); + std::__basic_file::~__basic_file(a1 + 48); + *(_DWORD *)(a1 + 8) = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 36)); + *(_DWORD *)a1 = &unk_55B550; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 120) = &off_560E30; + std::ios_base::~ios_base(a1 + 120); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560228: using guessed type int (*off_560228[2])(); +// 56023C: using guessed type int (*off_56023C[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (004F21F0) -------------------------------------------------------- +void __thiscall std::wifstream::~wifstream(int *this, int *a2) +{ + int v3; // eax + int v4; // eax + + v3 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v3 - 12)) = a2[3]; + this[2] = (int)off_5600E0; + std::wfilebuf::close((struct _Unwind_Exception *)(this + 2)); + std::__basic_file::~__basic_file((int)(this + 12)); + this[2] = (int)&off_560464; + std::locale::~locale((_DWORD **)this + 9); + v4 = a2[1]; + *this = v4; + *(int *)((char *)this + *(_DWORD *)(v4 - 12)) = a2[2]; + this[1] = 0; +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (004F22D0) -------------------------------------------------------- +_DWORD *__thiscall std::wifstream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // eax + __int16 v6; // cx + int v7; // eax + std::ios_base *v9; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v9); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + v7 = this[1]; + *((_BYTE *)v4 + 118) = v6; + this[1] = a2[1]; + a2[1] = v7; + std::wfilebuf::operator=((int)(this + 2), (int)(a2 + 2)); + return this; +} +// 4F2310: variable 'v9' is possibly undefined + +//----- (004F23B0) -------------------------------------------------------- +void __thiscall std::wiostream::swap(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // edx + __int16 v6; // cx + int v7; // edx + std::ios_base *v8; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v8); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + v7 = this[1]; + *((_BYTE *)v4 + 118) = v6; + this[1] = a2[1]; + a2[1] = v7; +} +// 4F23ED: variable 'v8' is possibly undefined + +//----- (004F2470) -------------------------------------------------------- +void __thiscall std::wiostream::basic_iostream(_DWORD *this, int *a2) +{ + int v2; // eax + int v3; // eax + std::ios_base *v4; // ecx + int v5; // eax + std::ios_base *v6; // [esp+4h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-48h] + _DWORD *v8; // [esp+14h] [ebp-44h] + + v8 = this + 3; + std::ios_base::ios_base(this + 3); + v2 = a2[1]; + *((_WORD *)this + 64) = 0; + *this = &unk_55B578; + this[1] = v2; + this[31] = 0; + v3 = *a2; + *((_BYTE *)this + 130) = 0; + this[33] = 0; + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(v3 - 12)); + this[34] = 0; + this[35] = 0; + this[36] = 0; + this[3] = &unk_55B58C; + lpuexcpt = v4; + std::ios_base::_M_move((int)v8, v4, v6); + std::wios::_M_cache_locale(v8, (int)(this + 30)); + this[33] = 0; + v5 = *((_DWORD *)lpuexcpt + 28); + *((_DWORD *)lpuexcpt + 28) = 0; + this[31] = v5; + *((_WORD *)this + 64) = *((_WORD *)lpuexcpt + 58); + *((_BYTE *)this + 130) = *((_BYTE *)lpuexcpt + 118); + a2[1] = 0; + *this = &off_560250; + this[3] = off_560278; + this[2] = off_560264; +} +// 4F2519: variable 'v6' is possibly undefined +// 560250: using guessed type int (*off_560250)(); +// 560264: using guessed type int (*off_560264[2])(); +// 560278: using guessed type int (*off_560278[2])(); + +//----- (004F25D0) -------------------------------------------------------- +void __thiscall std::wiostream::basic_iostream(_DWORD *this, int a2) +{ + int v2; // [esp+14h] [ebp-44h] + + v2 = (int)(this + 3); + std::ios_base::ios_base(this + 3); + this[31] = 0; + *((_WORD *)this + 64) = 0; + *((_BYTE *)this + 130) = 0; + this[33] = 0; + this[34] = 0; + this[35] = 0; + this[36] = 0; + *this = &unk_55B578; + this[3] = &unk_55B58C; + this[1] = 0; + std::wios::init(v2, a2); + this[2] = &unk_55B5A0; + this[3] = &unk_55B5B4; + std::wios::init(v2, a2); + *this = &off_560250; + this[3] = off_560278; + this[2] = off_560264; +} +// 560250: using guessed type int (*off_560250)(); +// 560264: using guessed type int (*off_560264[2])(); +// 560278: using guessed type int (*off_560278[2])(); + +//----- (004F2720) -------------------------------------------------------- +void __fastcall std::wiostream::basic_iostream(int a1) +{ + int v1; // [esp+14h] [ebp-44h] + + v1 = a1 + 12; + std::ios_base::ios_base((_DWORD *)(a1 + 12)); + *(_DWORD *)(a1 + 124) = 0; + *(_WORD *)(a1 + 128) = 0; + *(_BYTE *)(a1 + 130) = 0; + *(_DWORD *)(a1 + 132) = 0; + *(_DWORD *)(a1 + 136) = 0; + *(_DWORD *)(a1 + 140) = 0; + *(_DWORD *)(a1 + 144) = 0; + *(_DWORD *)a1 = &unk_55B578; + *(_DWORD *)(a1 + 12) = &unk_55B58C; + *(_DWORD *)(a1 + 4) = 0; + std::wios::init(v1, 0); + *(_DWORD *)(a1 + 8) = &unk_55B5A0; + *(_DWORD *)(a1 + 12) = &unk_55B5B4; + std::wios::init(v1, 0); + *(_DWORD *)a1 = &off_560250; + *(_DWORD *)(a1 + 12) = off_560278; + *(_DWORD *)(a1 + 8) = off_560264; +} +// 560250: using guessed type int (*off_560250)(); +// 560264: using guessed type int (*off_560264[2])(); +// 560278: using guessed type int (*off_560278[2])(); + +//----- (004F2870) -------------------------------------------------------- +int __thiscall std::wiostream::basic_iostream(int *this, int *a2, _DWORD *a3) +{ + int v4; // eax + int v5; // edi + int v6; // edi + std::ios_base *v7; // ebp + int v8; // eax + int v9; // eax + int v10; // edx + int v11; // eax + int v12; // edx + int result; // eax + std::ios_base *v14; // [esp+4h] [ebp-28h] + + v4 = a2[1]; + v5 = a2[2]; + *this = v4; + *(int *)((char *)this + *(_DWORD *)(v4 - 12)) = v5; + this[1] = a3[1]; + v6 = (int)this + *(_DWORD *)(v4 - 12); + v7 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move(v6, v7, v14); + std::wios::_M_cache_locale((_DWORD *)v6, v6 + 108); + v8 = *((_DWORD *)v7 + 28); + *(_DWORD *)(v6 + 120) = 0; + *((_DWORD *)v7 + 28) = 0; + *(_DWORD *)(v6 + 112) = v8; + *(_WORD *)(v6 + 116) = *((_WORD *)v7 + 58); + *(_BYTE *)(v6 + 118) = *((_BYTE *)v7 + 118); + v9 = a2[3]; + a3[1] = 0; + v10 = a2[4]; + this[2] = v9; + *(int *)((char *)this + *(_DWORD *)(v9 - 12) + 8) = v10; + v11 = *a2; + v12 = a2[5]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v11 - 12)) = v12; + result = a2[6]; + this[2] = result; + return result; +} +// 4F28A6: variable 'v14' is possibly undefined + +//----- (004F2920) -------------------------------------------------------- +void __thiscall std::wiostream::basic_iostream(int *this, int *a2, int a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + _DWORD *v8; // ecx + int v9; // eax + int v10; // edx + + v4 = a2[1]; + v5 = a2[2]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v4 - 12), a3); + v7 = a2[3]; + this[2] = v7; + v8 = (int *)((char *)this + *(_DWORD *)(v7 - 12) + 8); + *v8 = a2[4]; + std::wios::init((int)v8, a3); + v9 = *a2; + v10 = a2[5]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v9 - 12)) = v10; + this[2] = a2[6]; +} + +//----- (004F2A20) -------------------------------------------------------- +void __thiscall std::wiostream::basic_iostream(int *this, int *a2) +{ + int v3; // eax + int v4; // ecx + int v5; // edx + int v6; // eax + _DWORD *v7; // ecx + int v8; // eax + int v9; // edx + + v3 = a2[1]; + v4 = a2[2]; + v5 = *(_DWORD *)(v3 - 12); + *this = v3; + *(int *)((char *)this + v5) = v4; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v3 - 12), 0); + v6 = a2[3]; + this[2] = v6; + v7 = (int *)((char *)this + *(_DWORD *)(v6 - 12) + 8); + *v7 = a2[4]; + std::wios::init((int)v7, 0); + v8 = *a2; + v9 = a2[5]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v8 - 12)) = v9; + this[2] = a2[6]; +} + +//----- (004F2B20) -------------------------------------------------------- +void __fastcall std::wiostream::~basic_iostream(char *Block) +{ + _DWORD *v2; // ecx + + v2 = Block + 12; + *(v2 - 1) = &unk_55B5A0; + *(v2 - 3) = &unk_55B578; + *(v2 - 2) = 0; + *v2 = &off_560E30; + std::ios_base::~ios_base((int)v2); + operator delete(Block); +} +// 560E30: using guessed type int (*off_560E30)(); + +//----- (004F2B60) -------------------------------------------------------- +void __fastcall std::wiostream::~basic_iostream(int a1) +{ + _DWORD *v1; // ecx + + *(_DWORD *)(a1 + 8) = &unk_55B5A0; + v1 = (_DWORD *)(a1 + 12); + *(v1 - 3) = &unk_55B578; + *(v1 - 2) = 0; + *v1 = &off_560E30; + std::ios_base::~ios_base((int)v1); +} +// 560E30: using guessed type int (*off_560E30)(); + +//----- (004F2B90) -------------------------------------------------------- +int __thiscall std::wiostream::~basic_iostream(int *this, int *a2) +{ + int v2; // edx + int v3; // edx + int v4; // edx + int result; // eax + + v2 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v2 - 12)) = a2[5]; + this[2] = a2[6]; + v3 = a2[3]; + this[2] = v3; + *(int *)((char *)this + *(_DWORD *)(v3 - 12) + 8) = a2[4]; + v4 = a2[1]; + *this = v4; + result = *(_DWORD *)(v4 - 12); + *(int *)((char *)this + result) = a2[2]; + this[1] = 0; + return result; +} + +//----- (004F2BE0) -------------------------------------------------------- +_DWORD *__thiscall std::wiostream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // edx + __int16 v6; // cx + int v7; // edx + std::ios_base *v9; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v9); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + v7 = this[1]; + *((_BYTE *)v4 + 118) = v6; + this[1] = a2[1]; + a2[1] = v7; + return this; +} +// 4F2C1D: variable 'v9' is possibly undefined + +//----- (004F2CA0) -------------------------------------------------------- +int __thiscall std::ofstream::open(int *this, char *a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::filebuf::open(this + 1, a2, a3 | 0x10) == 0; + v5 = *this; + if ( v4 ) + return std::ios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::ios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004F2D10) -------------------------------------------------------- +int __thiscall std::ofstream::open(int *this, wchar_t *a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::filebuf::open(this + 1, a2, a3 | 0x10) == 0; + v5 = *this; + if ( v4 ) + return std::ios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::ios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004F2D80) -------------------------------------------------------- +int __thiscall std::ofstream::open(int *this, char **a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::filebuf::open(this + 1, *a2, a3 | 0x10) == 0; + v5 = *this; + if ( v4 ) + return std::ios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::ios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004F2DF0) -------------------------------------------------------- +void __thiscall std::ofstream::swap(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // edx + char v6; // cl + char v7; // cl + std::ios_base *v8; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v8); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + *((_BYTE *)v4 + 117) = v7; + std::filebuf::swap((int)(this + 1), (int)(a2 + 1)); +} +// 4F2E30: variable 'v8' is possibly undefined + +//----- (004F2EB0) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall std::ofstream::close(_DWORD *a1) +{ + struct _Unwind_Exception *result; // eax + + result = std::filebuf::close((struct _Unwind_Exception *)(a1 + 1)); + if ( !result ) + return (struct _Unwind_Exception *)std::ios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 4); + return result; +} + +//----- (004F2EF0) -------------------------------------------------------- +bool __fastcall std::ofstream::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 44)); +} + +//----- (004F2F00) -------------------------------------------------------- +void __thiscall std::ofstream::basic_ofstream(_DWORD *this, _DWORD *a2) +{ + int v2; // eax + std::ios_base *v3; // [esp+4h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-48h] + _DWORD *v5; // [esp+14h] [ebp-44h] + + v5 = this + 28; + std::ios_base::ios_base(this + 28); + *((_WORD *)this + 114) = 0; + this[56] = 0; + this[58] = 0; + this[59] = 0; + this[60] = 0; + this[61] = 0; + *this = &unk_55B5C8; + this[28] = &unk_55B5DC; + lpuexcpt = (struct _Unwind_Exception *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_move((int)v5, lpuexcpt, v3); + std::ios::_M_cache_locale(v5, (int)(this + 55)); + v2 = *((_DWORD *)lpuexcpt + 28); + *this = off_56028C; + *((_DWORD *)lpuexcpt + 28) = 0; + this[56] = v2; + LOWORD(v2) = *((_WORD *)lpuexcpt + 58); + this[58] = 0; + *((_WORD *)this + 114) = v2; + this[28] = off_5602A0; + std::filebuf::basic_filebuf((int)(this + 1), (std::locale *)(a2 + 1)); + this[58] = this + 1; +} +// 4F2F9B: variable 'v3' is possibly undefined +// 56028C: using guessed type int (*off_56028C[2])(); +// 5602A0: using guessed type int (*off_5602A0[2])(); + +//----- (004F3080) -------------------------------------------------------- +void __thiscall std::ofstream::basic_ofstream(_DWORD *this, char *a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+20h] [ebp-48h] + + v5 = (int)(this + 28); + std::ios_base::ios_base(this + 28); + this[56] = 0; + *((_WORD *)this + 114) = 0; + this[58] = 0; + this[59] = 0; + this[60] = 0; + this[61] = 0; + *this = &unk_55B5C8; + this[28] = &unk_55B5DC; + std::ios::init(v5, 0); + *this = off_56028C; + this[28] = off_5602A0; + std::filebuf::basic_filebuf((int)(this + 1)); + std::ios::init(v5, (int)(this + 1)); + v3 = std::filebuf::open(this + 1, a2, a3 | 0x10); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::ios::clear(v4, 0); + else + std::ios::clear(v4, v4[5] | 4); +} +// 56028C: using guessed type int (*off_56028C[2])(); +// 5602A0: using guessed type int (*off_5602A0[2])(); + +//----- (004F3220) -------------------------------------------------------- +void __thiscall std::ofstream::basic_ofstream(_DWORD *this, wchar_t *a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+20h] [ebp-48h] + + v5 = (int)(this + 28); + std::ios_base::ios_base(this + 28); + this[56] = 0; + *((_WORD *)this + 114) = 0; + this[58] = 0; + this[59] = 0; + this[60] = 0; + this[61] = 0; + *this = &unk_55B5C8; + this[28] = &unk_55B5DC; + std::ios::init(v5, 0); + *this = off_56028C; + this[28] = off_5602A0; + std::filebuf::basic_filebuf((int)(this + 1)); + std::ios::init(v5, (int)(this + 1)); + v3 = std::filebuf::open(this + 1, a2, a3 | 0x10); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::ios::clear(v4, 0); + else + std::ios::clear(v4, v4[5] | 4); +} +// 56028C: using guessed type int (*off_56028C[2])(); +// 5602A0: using guessed type int (*off_5602A0[2])(); + +//----- (004F33C0) -------------------------------------------------------- +void __thiscall std::ofstream::basic_ofstream(_DWORD *this, char **a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+20h] [ebp-48h] + + v5 = (int)(this + 28); + std::ios_base::ios_base(this + 28); + this[56] = 0; + *((_WORD *)this + 114) = 0; + this[58] = 0; + this[59] = 0; + this[60] = 0; + this[61] = 0; + *this = &unk_55B5C8; + this[28] = &unk_55B5DC; + std::ios::init(v5, 0); + *this = off_56028C; + this[28] = off_5602A0; + std::filebuf::basic_filebuf((int)(this + 1)); + std::ios::init(v5, (int)(this + 1)); + v3 = std::filebuf::open(this + 1, *a2, a3 | 0x10); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::ios::clear(v4, 0); + else + std::ios::clear(v4, v4[5] | 4); +} +// 56028C: using guessed type int (*off_56028C[2])(); +// 5602A0: using guessed type int (*off_5602A0[2])(); + +//----- (004F3560) -------------------------------------------------------- +void __fastcall std::ofstream::basic_ofstream(int a1) +{ + int v1; // [esp+24h] [ebp-44h] + + v1 = a1 + 112; + std::ios_base::ios_base((_DWORD *)(a1 + 112)); + *(_DWORD *)(a1 + 224) = 0; + *(_WORD *)(a1 + 228) = 0; + *(_DWORD *)(a1 + 232) = 0; + *(_DWORD *)(a1 + 236) = 0; + *(_DWORD *)(a1 + 240) = 0; + *(_DWORD *)(a1 + 244) = 0; + *(_DWORD *)a1 = &unk_55B5C8; + *(_DWORD *)(a1 + 112) = &unk_55B5DC; + std::ios::init(v1, 0); + *(_DWORD *)a1 = off_56028C; + *(_DWORD *)(a1 + 112) = off_5602A0; + std::filebuf::basic_filebuf(a1 + 4); + std::ios::init(v1, a1 + 4); +} +// 56028C: using guessed type int (*off_56028C[2])(); +// 5602A0: using guessed type int (*off_5602A0[2])(); + +//----- (004F36A0) -------------------------------------------------------- +void __thiscall std::ofstream::basic_ofstream(int *this, int *a2, _DWORD *a3) +{ + int v3; // eax + int v4; // eax + int v5; // edx + int v6; // eax + std::ios_base *v7; // [esp+4h] [ebp-54h] + std::ios_base *v8; // [esp+10h] [ebp-48h] + int v9; // [esp+14h] [ebp-44h] + + v3 = a2[1]; + *this = v3; + v9 = (int)this + *(_DWORD *)(v3 - 12); + *(_DWORD *)v9 = a2[2]; + v8 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move(v9, v8, v7); + std::ios::_M_cache_locale((_DWORD *)v9, v9 + 108); + v4 = *((_DWORD *)v8 + 28); + *((_DWORD *)v8 + 28) = 0; + *(_DWORD *)(v9 + 120) = 0; + *(_DWORD *)(v9 + 112) = v4; + *(_WORD *)(v9 + 116) = *((_WORD *)v8 + 58); + v5 = a2[3]; + v6 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v5; + std::filebuf::basic_filebuf((int)(this + 1), (std::locale *)(a3 + 1)); + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 120) = (int)(this + 1); +} +// 4F36FE: variable 'v7' is possibly undefined + +//----- (004F37D0) -------------------------------------------------------- +void __thiscall std::ofstream::basic_ofstream(int *this, int *a2, char *a3, int a4) +{ + int v4; // eax + _DWORD *v5; // ecx + int v6; // eax + int v7; // edx + _DWORD *v8; // eax + _DWORD *v9; // ecx + + v4 = a2[1]; + *this = v4; + v5 = (int *)((char *)this + *(_DWORD *)(v4 - 12)); + *v5 = a2[2]; + std::ios::init((int)v5, 0); + v6 = *a2; + v7 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v7; + std::filebuf::basic_filebuf((int)(this + 1)); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 1)); + v8 = std::filebuf::open(this + 1, a3, a4 | 0x10); + v9 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v8 ) + std::ios::clear(v9, 0); + else + std::ios::clear(v9, v9[5] | 4); +} + +//----- (004F3920) -------------------------------------------------------- +void __thiscall std::ofstream::basic_ofstream(int *this, int *a2, wchar_t *a3, int a4) +{ + int v4; // eax + _DWORD *v5; // ecx + int v6; // eax + int v7; // edx + _DWORD *v8; // eax + _DWORD *v9; // ecx + + v4 = a2[1]; + *this = v4; + v5 = (int *)((char *)this + *(_DWORD *)(v4 - 12)); + *v5 = a2[2]; + std::ios::init((int)v5, 0); + v6 = *a2; + v7 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v7; + std::filebuf::basic_filebuf((int)(this + 1)); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 1)); + v8 = std::filebuf::open(this + 1, a3, a4 | 0x10); + v9 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v8 ) + std::ios::clear(v9, 0); + else + std::ios::clear(v9, v9[5] | 4); +} + +//----- (004F3A70) -------------------------------------------------------- +void __thiscall std::ofstream::basic_ofstream(int *this, int *a2, char **a3, int a4) +{ + int v4; // eax + _DWORD *v5; // ecx + int v6; // eax + int v7; // edx + _DWORD *v8; // eax + _DWORD *v9; // ecx + + v4 = a2[1]; + *this = v4; + v5 = (int *)((char *)this + *(_DWORD *)(v4 - 12)); + *v5 = a2[2]; + std::ios::init((int)v5, 0); + v6 = *a2; + v7 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v7; + std::filebuf::basic_filebuf((int)(this + 1)); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 1)); + v8 = std::filebuf::open(this + 1, *a3, a4 | 0x10); + v9 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v8 ) + std::ios::clear(v9, 0); + else + std::ios::clear(v9, v9[5] | 4); +} + +//----- (004F3BC0) -------------------------------------------------------- +void __thiscall std::ofstream::basic_ofstream(int *this, int *a2) +{ + int v2; // eax + _DWORD *v3; // ecx + int v4; // eax + int v5; // edx + + v2 = a2[1]; + *this = v2; + v3 = (int *)((char *)this + *(_DWORD *)(v2 - 12)); + *v3 = a2[2]; + std::ios::init((int)v3, 0); + v4 = *a2; + v5 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v4 - 12)) = v5; + std::filebuf::basic_filebuf((int)(this + 1)); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 1)); +} + +//----- (004F3CC0) -------------------------------------------------------- +void __fastcall std::ofstream::~ofstream(_DWORD *a1) +{ + *a1 = off_56028C; + a1[28] = off_5602A0; + a1[1] = off_5600A0; + std::filebuf::close((struct _Unwind_Exception *)(a1 + 1)); + std::__basic_file::~__basic_file((int)(a1 + 11)); + a1[1] = &off_560424; + std::locale::~locale((_DWORD **)a1 + 8); + *a1 = &unk_55B5C8; + a1[28] = &off_560E20; + std::ios_base::~ios_base((int)(a1 + 28)); + operator delete(a1); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 56028C: using guessed type int (*off_56028C[2])(); +// 5602A0: using guessed type int (*off_5602A0[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (004F3DA0) -------------------------------------------------------- +void __fastcall std::ofstream::~ofstream(int a1) +{ + *(_DWORD *)a1 = off_56028C; + *(_DWORD *)(a1 + 112) = off_5602A0; + *(_DWORD *)(a1 + 4) = off_5600A0; + std::filebuf::close((struct _Unwind_Exception *)(a1 + 4)); + std::__basic_file::~__basic_file(a1 + 44); + *(_DWORD *)(a1 + 4) = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 32)); + *(_DWORD *)a1 = &unk_55B5C8; + *(_DWORD *)(a1 + 112) = &off_560E20; + std::ios_base::~ios_base(a1 + 112); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 56028C: using guessed type int (*off_56028C[2])(); +// 5602A0: using guessed type int (*off_5602A0[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (004F3E70) -------------------------------------------------------- +void __thiscall std::ofstream::~ofstream(int *this, int *a2) +{ + int v3; // eax + int v4; // eax + + v3 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v3 - 12)) = a2[3]; + this[1] = (int)off_5600A0; + std::filebuf::close((struct _Unwind_Exception *)(this + 1)); + std::__basic_file::~__basic_file((int)(this + 11)); + this[1] = (int)&off_560424; + std::locale::~locale((_DWORD **)this + 8); + v4 = a2[1]; + *this = v4; + *(int *)((char *)this + *(_DWORD *)(v4 - 12)) = a2[2]; +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (004F3F50) -------------------------------------------------------- +_DWORD *__thiscall std::ofstream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // eax + char v6; // cl + char v7; // cl + std::ios_base *v9; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v9); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + *((_BYTE *)v4 + 117) = v7; + std::filebuf::operator=((int)(this + 1), (int)(a2 + 1)); + return this; +} +// 4F3F90: variable 'v9' is possibly undefined + +//----- (004F4020) -------------------------------------------------------- +int __thiscall std::wofstream::open(int *this, char *a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::wfilebuf::open(this + 1, a2, a3 | 0x10) == 0; + v5 = *this; + if ( v4 ) + return std::wios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::wios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004F4090) -------------------------------------------------------- +int __thiscall std::wofstream::open(int *this, wchar_t *a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::wfilebuf::open(this + 1, a2, a3 | 0x10) == 0; + v5 = *this; + if ( v4 ) + return std::wios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::wios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004F4100) -------------------------------------------------------- +int __thiscall std::wofstream::open(int *this, char **a2, int a3) +{ + bool v4; // zf + int v5; // eax + + v4 = std::wfilebuf::open(this + 1, *a2, a3 | 0x10) == 0; + v5 = *this; + if ( v4 ) + return std::wios::clear( + (int *)((char *)this + *(_DWORD *)(v5 - 12)), + *(int *)((char *)this + *(_DWORD *)(v5 - 12) + 20) | 4); + else + return std::wios::clear((int *)((char *)this + *(_DWORD *)(v5 - 12)), 0); +} + +//----- (004F4170) -------------------------------------------------------- +void __thiscall std::wofstream::swap(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // edx + __int16 v6; // cx + std::ios_base *v7; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v7); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + *((_BYTE *)v4 + 118) = v6; + std::wfilebuf::swap((int)(this + 1), (int)(a2 + 1)); +} +// 4F41B0: variable 'v7' is possibly undefined + +//----- (004F4230) -------------------------------------------------------- +struct _Unwind_Exception *__fastcall std::wofstream::close(_DWORD *a1) +{ + struct _Unwind_Exception *result; // eax + + result = std::wfilebuf::close((struct _Unwind_Exception *)(a1 + 1)); + if ( !result ) + return (struct _Unwind_Exception *)std::wios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 4); + return result; +} + +//----- (004F4270) -------------------------------------------------------- +bool __fastcall std::wofstream::is_open(int a1) +{ + return std::__basic_file::is_open((_DWORD *)(a1 + 44)); +} + +//----- (004F4280) -------------------------------------------------------- +void __thiscall std::wofstream::basic_ofstream(_DWORD *this, _DWORD *a2) +{ + int v2; // eax + std::ios_base *v3; // [esp+4h] [ebp-54h] + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-48h] + _DWORD *v5; // [esp+14h] [ebp-44h] + + v5 = this + 29; + std::ios_base::ios_base(this + 29); + *((_WORD *)this + 116) = 0; + this[57] = 0; + *((_BYTE *)this + 234) = 0; + this[59] = 0; + this[60] = 0; + this[61] = 0; + this[62] = 0; + *this = &unk_55B5F0; + this[29] = &unk_55B604; + lpuexcpt = (struct _Unwind_Exception *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_move((int)v5, lpuexcpt, v3); + std::wios::_M_cache_locale(v5, (int)(this + 56)); + v2 = *((_DWORD *)lpuexcpt + 28); + *this = off_5602B4; + *((_DWORD *)lpuexcpt + 28) = 0; + this[57] = v2; + LOWORD(v2) = *((_WORD *)lpuexcpt + 58); + this[59] = 0; + *((_WORD *)this + 116) = v2; + LOBYTE(v2) = *((_BYTE *)lpuexcpt + 118); + this[29] = off_5602C8; + *((_BYTE *)this + 234) = v2; + std::wfilebuf::basic_filebuf((int)(this + 1), (std::locale *)(a2 + 1)); + this[59] = this + 1; +} +// 4F4322: variable 'v3' is possibly undefined +// 5602B4: using guessed type int (*off_5602B4[2])(); +// 5602C8: using guessed type int (*off_5602C8[2])(); + +//----- (004F4410) -------------------------------------------------------- +void __thiscall std::wofstream::basic_ofstream(_DWORD *this, char *a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+20h] [ebp-48h] + + v5 = (int)(this + 29); + std::ios_base::ios_base(this + 29); + this[57] = 0; + *((_WORD *)this + 116) = 0; + *((_BYTE *)this + 234) = 0; + this[59] = 0; + this[60] = 0; + this[61] = 0; + this[62] = 0; + *this = &unk_55B5F0; + this[29] = &unk_55B604; + std::wios::init(v5, 0); + *this = off_5602B4; + this[29] = off_5602C8; + std::wfilebuf::basic_filebuf((int)(this + 1)); + std::wios::init(v5, (int)(this + 1)); + v3 = std::wfilebuf::open(this + 1, a2, a3 | 0x10); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::wios::clear(v4, 0); + else + std::wios::clear(v4, v4[5] | 4); +} +// 5602B4: using guessed type int (*off_5602B4[2])(); +// 5602C8: using guessed type int (*off_5602C8[2])(); + +//----- (004F45B0) -------------------------------------------------------- +void __thiscall std::wofstream::basic_ofstream(_DWORD *this, wchar_t *a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+20h] [ebp-48h] + + v5 = (int)(this + 29); + std::ios_base::ios_base(this + 29); + this[57] = 0; + *((_WORD *)this + 116) = 0; + *((_BYTE *)this + 234) = 0; + this[59] = 0; + this[60] = 0; + this[61] = 0; + this[62] = 0; + *this = &unk_55B5F0; + this[29] = &unk_55B604; + std::wios::init(v5, 0); + *this = off_5602B4; + this[29] = off_5602C8; + std::wfilebuf::basic_filebuf((int)(this + 1)); + std::wios::init(v5, (int)(this + 1)); + v3 = std::wfilebuf::open(this + 1, a2, a3 | 0x10); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::wios::clear(v4, 0); + else + std::wios::clear(v4, v4[5] | 4); +} +// 5602B4: using guessed type int (*off_5602B4[2])(); +// 5602C8: using guessed type int (*off_5602C8[2])(); + +//----- (004F4750) -------------------------------------------------------- +void __thiscall std::wofstream::basic_ofstream(_DWORD *this, char **a2, int a3) +{ + _DWORD *v3; // eax + _DWORD *v4; // ecx + int v5; // [esp+20h] [ebp-48h] + + v5 = (int)(this + 29); + std::ios_base::ios_base(this + 29); + this[57] = 0; + *((_WORD *)this + 116) = 0; + *((_BYTE *)this + 234) = 0; + this[59] = 0; + this[60] = 0; + this[61] = 0; + this[62] = 0; + *this = &unk_55B5F0; + this[29] = &unk_55B604; + std::wios::init(v5, 0); + *this = off_5602B4; + this[29] = off_5602C8; + std::wfilebuf::basic_filebuf((int)(this + 1)); + std::wios::init(v5, (int)(this + 1)); + v3 = std::wfilebuf::open(this + 1, *a2, a3 | 0x10); + v4 = (_DWORD *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v3 ) + std::wios::clear(v4, 0); + else + std::wios::clear(v4, v4[5] | 4); +} +// 5602B4: using guessed type int (*off_5602B4[2])(); +// 5602C8: using guessed type int (*off_5602C8[2])(); + +//----- (004F48F0) -------------------------------------------------------- +void __fastcall std::wofstream::basic_ofstream(int a1) +{ + int v1; // [esp+24h] [ebp-44h] + + v1 = a1 + 116; + std::ios_base::ios_base((_DWORD *)(a1 + 116)); + *(_DWORD *)(a1 + 228) = 0; + *(_WORD *)(a1 + 232) = 0; + *(_BYTE *)(a1 + 234) = 0; + *(_DWORD *)(a1 + 236) = 0; + *(_DWORD *)(a1 + 240) = 0; + *(_DWORD *)(a1 + 244) = 0; + *(_DWORD *)(a1 + 248) = 0; + *(_DWORD *)a1 = &unk_55B5F0; + *(_DWORD *)(a1 + 116) = &unk_55B604; + std::wios::init(v1, 0); + *(_DWORD *)a1 = off_5602B4; + *(_DWORD *)(a1 + 116) = off_5602C8; + std::wfilebuf::basic_filebuf(a1 + 4); + std::wios::init(v1, a1 + 4); +} +// 5602B4: using guessed type int (*off_5602B4[2])(); +// 5602C8: using guessed type int (*off_5602C8[2])(); + +//----- (004F4A40) -------------------------------------------------------- +void __thiscall std::wofstream::basic_ofstream(int *this, int *a2, _DWORD *a3) +{ + int v3; // eax + int v4; // eax + int v5; // edx + int v6; // eax + std::ios_base *v7; // [esp+4h] [ebp-54h] + std::ios_base *v8; // [esp+10h] [ebp-48h] + int v9; // [esp+14h] [ebp-44h] + + v3 = a2[1]; + *this = v3; + v9 = (int)this + *(_DWORD *)(v3 - 12); + *(_DWORD *)v9 = a2[2]; + v8 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move(v9, v8, v7); + std::wios::_M_cache_locale((_DWORD *)v9, v9 + 108); + v4 = *((_DWORD *)v8 + 28); + *((_DWORD *)v8 + 28) = 0; + *(_DWORD *)(v9 + 120) = 0; + *(_DWORD *)(v9 + 112) = v4; + *(_WORD *)(v9 + 116) = *((_WORD *)v8 + 58); + *(_BYTE *)(v9 + 118) = *((_BYTE *)v8 + 118); + v5 = a2[3]; + v6 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v5; + std::wfilebuf::basic_filebuf((int)(this + 1), (std::locale *)(a3 + 1)); + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 120) = (int)(this + 1); +} +// 4F4A9E: variable 'v7' is possibly undefined + +//----- (004F4B70) -------------------------------------------------------- +void __thiscall std::wofstream::basic_ofstream(int *this, int *a2, char *a3, int a4) +{ + int v4; // eax + _DWORD *v5; // ecx + int v6; // eax + int v7; // edx + _DWORD *v8; // eax + _DWORD *v9; // ecx + + v4 = a2[1]; + *this = v4; + v5 = (int *)((char *)this + *(_DWORD *)(v4 - 12)); + *v5 = a2[2]; + std::wios::init((int)v5, 0); + v6 = *a2; + v7 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v7; + std::wfilebuf::basic_filebuf((int)(this + 1)); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 1)); + v8 = std::wfilebuf::open(this + 1, a3, a4 | 0x10); + v9 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v8 ) + std::wios::clear(v9, 0); + else + std::wios::clear(v9, v9[5] | 4); +} + +//----- (004F4CC0) -------------------------------------------------------- +void __thiscall std::wofstream::basic_ofstream(int *this, int *a2, wchar_t *a3, int a4) +{ + int v4; // eax + _DWORD *v5; // ecx + int v6; // eax + int v7; // edx + _DWORD *v8; // eax + _DWORD *v9; // ecx + + v4 = a2[1]; + *this = v4; + v5 = (int *)((char *)this + *(_DWORD *)(v4 - 12)); + *v5 = a2[2]; + std::wios::init((int)v5, 0); + v6 = *a2; + v7 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v7; + std::wfilebuf::basic_filebuf((int)(this + 1)); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 1)); + v8 = std::wfilebuf::open(this + 1, a3, a4 | 0x10); + v9 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v8 ) + std::wios::clear(v9, 0); + else + std::wios::clear(v9, v9[5] | 4); +} + +//----- (004F4E10) -------------------------------------------------------- +void __thiscall std::wofstream::basic_ofstream(int *this, int *a2, char **a3, int a4) +{ + int v4; // eax + _DWORD *v5; // ecx + int v6; // eax + int v7; // edx + _DWORD *v8; // eax + _DWORD *v9; // ecx + + v4 = a2[1]; + *this = v4; + v5 = (int *)((char *)this + *(_DWORD *)(v4 - 12)); + *v5 = a2[2]; + std::wios::init((int)v5, 0); + v6 = *a2; + v7 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v7; + std::wfilebuf::basic_filebuf((int)(this + 1)); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 1)); + v8 = std::wfilebuf::open(this + 1, *a3, a4 | 0x10); + v9 = (int *)((char *)this + *(_DWORD *)(*this - 12)); + if ( v8 ) + std::wios::clear(v9, 0); + else + std::wios::clear(v9, v9[5] | 4); +} + +//----- (004F4F60) -------------------------------------------------------- +void __thiscall std::wofstream::basic_ofstream(int *this, int *a2) +{ + int v2; // eax + _DWORD *v3; // ecx + int v4; // eax + int v5; // edx + + v2 = a2[1]; + *this = v2; + v3 = (int *)((char *)this + *(_DWORD *)(v2 - 12)); + *v3 = a2[2]; + std::wios::init((int)v3, 0); + v4 = *a2; + v5 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v4 - 12)) = v5; + std::wfilebuf::basic_filebuf((int)(this + 1)); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)(this + 1)); +} + +//----- (004F5060) -------------------------------------------------------- +void __fastcall std::wofstream::~wofstream(_DWORD *a1) +{ + *a1 = off_5602B4; + a1[29] = off_5602C8; + a1[1] = off_5600E0; + std::wfilebuf::close((struct _Unwind_Exception *)(a1 + 1)); + std::__basic_file::~__basic_file((int)(a1 + 11)); + a1[1] = &off_560464; + std::locale::~locale((_DWORD **)a1 + 8); + *a1 = &unk_55B5F0; + a1[29] = &off_560E30; + std::ios_base::~ios_base((int)(a1 + 29)); + operator delete(a1); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 5602B4: using guessed type int (*off_5602B4[2])(); +// 5602C8: using guessed type int (*off_5602C8[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (004F5140) -------------------------------------------------------- +void __fastcall std::wofstream::~wofstream(int a1) +{ + *(_DWORD *)a1 = off_5602B4; + *(_DWORD *)(a1 + 116) = off_5602C8; + *(_DWORD *)(a1 + 4) = off_5600E0; + std::wfilebuf::close((struct _Unwind_Exception *)(a1 + 4)); + std::__basic_file::~__basic_file(a1 + 44); + *(_DWORD *)(a1 + 4) = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 32)); + *(_DWORD *)a1 = &unk_55B5F0; + *(_DWORD *)(a1 + 116) = &off_560E30; + std::ios_base::~ios_base(a1 + 116); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 5602B4: using guessed type int (*off_5602B4[2])(); +// 5602C8: using guessed type int (*off_5602C8[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (004F5210) -------------------------------------------------------- +void __thiscall std::wofstream::~wofstream(int *this, int *a2) +{ + int v3; // eax + int v4; // eax + + v3 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v3 - 12)) = a2[3]; + this[1] = (int)off_5600E0; + std::wfilebuf::close((struct _Unwind_Exception *)(this + 1)); + std::__basic_file::~__basic_file((int)(this + 11)); + this[1] = (int)&off_560464; + std::locale::~locale((_DWORD **)this + 8); + v4 = a2[1]; + *this = v4; + *(int *)((char *)this + *(_DWORD *)(v4 - 12)) = a2[2]; +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (004F52F0) -------------------------------------------------------- +_DWORD *__thiscall std::wofstream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // eax + __int16 v6; // cx + std::ios_base *v8; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v8); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + *((_BYTE *)v4 + 118) = v6; + std::wfilebuf::operator=((int)(this + 1), (int)(a2 + 1)); + return this; +} +// 4F5330: variable 'v8' is possibly undefined + +//----- (004F53C0) -------------------------------------------------------- +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int **a2, int a3) +{ + std::codecvt::codecvt(this, a3); + *this = &off_5602D8; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 5602D8: using guessed type int (*off_5602D8)(); + +//----- (004F54C0) -------------------------------------------------------- +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + std::codecvt::codecvt(this, a3); + *this = &off_5602D8; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 5602D8: using guessed type int (*off_5602D8)(); + +//----- (004F55D0) -------------------------------------------------------- +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + std::codecvt::codecvt(this, a3); + *this = &off_5602D8; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 5602D8: using guessed type int (*off_5602D8)(); + +//----- (004F56E0) -------------------------------------------------------- +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int **a2, int a3) +{ + std::codecvt::codecvt(this, a3); + *this = &off_5602D8; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 5602D8: using guessed type int (*off_5602D8)(); + +//----- (004F57E0) -------------------------------------------------------- +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + std::codecvt::codecvt(this, a3); + *this = &off_5602D8; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 5602D8: using guessed type int (*off_5602D8)(); + +//----- (004F58F0) -------------------------------------------------------- +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + std::codecvt::codecvt(this, a3); + *this = &off_5602D8; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 5602D8: using guessed type int (*off_5602D8)(); + +//----- (004F5A00) -------------------------------------------------------- +void __fastcall std::codecvt_byname::~codecvt_byname(_DWORD *Block) +{ + *Block = &off_5602D8; + std::codecvt::~codecvt(Block); + operator delete(Block); +} +// 5602D8: using guessed type int (*off_5602D8)(); + +//----- (004F5A20) -------------------------------------------------------- +void __fastcall std::codecvt_byname::~codecvt_byname(_DWORD *a1) +{ + *a1 = &off_5602D8; + std::codecvt::~codecvt(a1); +} +// 5602D8: using guessed type int (*off_5602D8)(); + +//----- (004F5A30) -------------------------------------------------------- +void __fastcall std::codecvt_byname::~codecvt_byname(_DWORD *a1) +{ + *a1 = &off_5602D8; + std::codecvt::~codecvt(a1); +} +// 5602D8: using guessed type int (*off_5602D8)(); + +//----- (004F5A40) -------------------------------------------------------- +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int **a2, int a3) +{ + std::codecvt::codecvt(this, a3); + *this = &off_560304; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 560304: using guessed type int (*off_560304)(); + +//----- (004F5B40) -------------------------------------------------------- +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + std::codecvt::codecvt(this, a3); + *this = &off_560304; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 560304: using guessed type int (*off_560304)(); + +//----- (004F5C50) -------------------------------------------------------- +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + std::codecvt::codecvt(this, a3); + *this = &off_560304; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 560304: using guessed type int (*off_560304)(); + +//----- (004F5D60) -------------------------------------------------------- +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int **a2, int a3) +{ + std::codecvt::codecvt(this, a3); + *this = &off_560304; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 560304: using guessed type int (*off_560304)(); + +//----- (004F5E60) -------------------------------------------------------- +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + std::codecvt::codecvt(this, a3); + *this = &off_560304; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 560304: using guessed type int (*off_560304)(); + +//----- (004F5F70) -------------------------------------------------------- +void __thiscall std::codecvt_byname::codecvt_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + std::codecvt::codecvt(this, a3); + *this = &off_560304; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 560304: using guessed type int (*off_560304)(); + +//----- (004F6080) -------------------------------------------------------- +void __fastcall std::codecvt_byname::~codecvt_byname(_DWORD *Block) +{ + *Block = &off_560304; + std::codecvt::~codecvt(Block); + operator delete(Block); +} +// 560304: using guessed type int (*off_560304)(); + +//----- (004F60A0) -------------------------------------------------------- +void __fastcall std::codecvt_byname::~codecvt_byname(_DWORD *a1) +{ + *a1 = &off_560304; + std::codecvt::~codecvt(a1); +} +// 560304: using guessed type int (*off_560304)(); + +//----- (004F60B0) -------------------------------------------------------- +void __fastcall std::codecvt_byname::~codecvt_byname(_DWORD *a1) +{ + *a1 = &off_560304; + std::codecvt::~codecvt(a1); +} +// 560304: using guessed type int (*off_560304)(); + +//----- (004F60C0) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_560BE0; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_560330; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 560330: using guessed type int (*off_560330)(); +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (004F6200) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + this[1] = a3 != 0; + *this = &off_560BE0; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_560330; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 560330: using guessed type int (*off_560330)(); +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (004F6350) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_560BE0; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_560330; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 560330: using guessed type int (*off_560330)(); +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (004F6490) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + this[1] = a3 != 0; + *this = &off_560BE0; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_560330; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 560330: using guessed type int (*off_560330)(); +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (004F65E0) -------------------------------------------------------- +void __fastcall std::collate_byname::~collate_byname(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_560BE0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 4F661E: variable 'lpfctx' is possibly undefined +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (004F6640) -------------------------------------------------------- +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560BE0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4F667E: variable 'lpfctx' is possibly undefined +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (004F66A0) -------------------------------------------------------- +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560BE0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4F66DE: variable 'lpfctx' is possibly undefined +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (004F6700) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_560BFC; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_56034C; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 56034C: using guessed type int (*off_56034C)(); +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (004F6840) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + this[1] = a3 != 0; + *this = &off_560BFC; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_56034C; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 56034C: using guessed type int (*off_56034C)(); +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (004F6990) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_560BFC; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_56034C; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 56034C: using guessed type int (*off_56034C)(); +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (004F6AD0) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + this[1] = a3 != 0; + *this = &off_560BFC; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_56034C; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 56034C: using guessed type int (*off_56034C)(); +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (004F6C20) -------------------------------------------------------- +void __fastcall std::collate_byname::~collate_byname(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_560BFC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 4F6C5E: variable 'lpfctx' is possibly undefined +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (004F6C80) -------------------------------------------------------- +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560BFC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4F6CBE: variable 'lpfctx' is possibly undefined +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (004F6CE0) -------------------------------------------------------- +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560BFC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4F6D1E: variable 'lpfctx' is possibly undefined +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (004F6D40) -------------------------------------------------------- +void __userpurge std::overflow_error::overflow_error(_DWORD *a1@, std::overflow_error *this, const char *a3) +{ + int v4; // [esp+5Fh] [ebp-9h] BYREF + + *a1 = &off_5601E8; + std::string::string(a1 + 1, (char *)this, (int)&v4); + *a1 = &off_560368; +} +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 560368: using guessed type void (__cdecl *off_560368)(std::overflow_error *__hidden this); + +//----- (004F6DD0) -------------------------------------------------------- +void __thiscall std::overflow_error::overflow_error(_DWORD *this, int a2) +{ + unsigned int v2; // [esp+8h] [ebp-50h] + + *this = &off_5601E8; + std::__cow_string::__cow_string(this + 1, *(std::__cow_string **)a2, *(_DWORD *)(a2 + 4), v2); + *this = &off_560368; +} +// 4F6E24: variable 'v2' is possibly undefined +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 560368: using guessed type void (__cdecl *off_560368)(std::overflow_error *__hidden this); + +//----- (004F6E70) -------------------------------------------------------- +void __userpurge std::overflow_error::overflow_error( + _DWORD *a1@, + std::overflow_error *this, + const std::string *a3) +{ + const std::string *v3; // [esp+4h] [ebp-54h] + + *a1 = &off_5601E8; + std::string::string(a1 + 1, this, v3); + *a1 = &off_560368; +} +// 4F6EB8: variable 'v3' is possibly undefined +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 560368: using guessed type void (__cdecl *off_560368)(std::overflow_error *__hidden this); + +//----- (004F6F00) -------------------------------------------------------- +void __fastcall std::overflow_error::~overflow_error(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_560368; + std::runtime_error::~runtime_error(Block); + operator delete(a1); +} +// 4F6F0C: variable 'Block' is possibly undefined +// 560368: using guessed type void (__cdecl *off_560368)(std::overflow_error *__hidden this); + +//----- (004F6F20) -------------------------------------------------------- +void __cdecl std::overflow_error::~overflow_error(std::exception *a1) +{ + _DWORD *v1; // ecx + int v2; // eax + int v3; // ecx + int v4; // eax + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v2 = _CRT_MT; + *v1 = &off_5601E8; + v3 = v1[1]; + if ( v2 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v3 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v4 = *(_DWORD *)(v3 - 4); + *(_DWORD *)(v3 - 4) = v4 - 1; + if ( v4 > 0 ) + { +LABEL_3: + std::exception::~exception(a1); + return; + } + } + std::string::_Rep::_M_destroy((void *)(v3 - 12), (int)v5); + std::exception::~exception(a1); +} +// 4F6F2B: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 4F6F20: using guessed type int var_D[3]; + +//----- (004F6F80) -------------------------------------------------------- +void __fastcall std::_Rb_tree_header::_Rb_tree_header(_DWORD *a1) +{ + *a1 = 0; + a1[1] = 0; + a1[2] = a1; + a1[3] = a1; + a1[4] = 0; +} + +//----- (004F6F9C) -------------------------------------------------------- +void __fastcall std::_Rb_tree_header::_Rb_tree_header(_DWORD *a1) +{ + *a1 = 0; + a1[1] = 0; + a1[2] = a1; + a1[3] = a1; + a1[4] = 0; +} + +//----- (004F6FB8) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::_M_destroy(void *Block) +{ + operator delete(Block); +} + +//----- (004F6FC8) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::_M_dispose(int a1) +{ + void *v1; // ebx + + v1 = *(void **)(a1 + 12); + if ( v1 ) + { + WXML::DOMLib::WXMLDom::~WXMLDom(*(_DWORD *)(a1 + 12)); + operator delete(v1); + } +} + +//----- (004F6FEC) -------------------------------------------------------- +int __stdcall std::_Sp_counted_ptr::_M_get_deleter(int a1) +{ + return 0; +} + +//----- (004F6FF4) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::~_Sp_counted_ptr(void *Block) +{ + operator delete(Block); +} + +//----- (004F7008) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::_M_destroy(void *Block) +{ + operator delete(Block); +} + +//----- (004F7018) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::_M_dispose(int a1, int a2) +{ + void ***v2; // ebx + + v2 = *(void ****)(a1 + 12); + if ( v2 ) + { + std::vector::~vector(v2 + 6, a2); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)v2); + operator delete(v2); + } +} + +//----- (004F7044) -------------------------------------------------------- +int __stdcall std::_Sp_counted_ptr::_M_get_deleter(int a1) +{ + return 0; +} + +//----- (004F704C) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::~_Sp_counted_ptr( + void *Block) +{ + operator delete(Block); +} + +//----- (004F7060) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::_M_destroy( + void *Block) +{ + operator delete(Block); +} + +//----- (004F7070) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::_M_dispose(int a1) +{ + void *v1; // ebx + + v1 = *(void **)(a1 + 12); + if ( v1 ) + { + WXML::EXPRLib::ExprSyntaxTree::~ExprSyntaxTree(*(_DWORD *)(a1 + 12)); + operator delete(v1); + } +} + +//----- (004F7094) -------------------------------------------------------- +int __stdcall std::_Sp_counted_ptr::_M_get_deleter(int a1) +{ + return 0; +} + +//----- (004F709C) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::~_Sp_counted_ptr( + void *Block) +{ + operator delete(Block); +} + +//----- (004F70B0) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::_M_destroy(void *Block) +{ + operator delete(Block); +} + +//----- (004F70C0) -------------------------------------------------------- +int __fastcall std::_Sp_counted_ptr::_M_dispose(int a1) +{ + int v1; // ecx + int result; // eax + + v1 = *(_DWORD *)(a1 + 12); + if ( v1 ) + return (*(int (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + return result; +} + +//----- (004F70D0) -------------------------------------------------------- +int __stdcall std::_Sp_counted_ptr::_M_get_deleter(int a1) +{ + return 0; +} + +//----- (004F70D8) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::~_Sp_counted_ptr(void *Block) +{ + operator delete(Block); +} + +//----- (004F70EC) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::_M_destroy(void *Block) +{ + operator delete(Block); +} + +//----- (004F70FC) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::_M_dispose(int a1) +{ + void *v1; // ebx + + v1 = *(void **)(a1 + 12); + if ( v1 ) + { + std::string::_M_dispose(*(void ***)(a1 + 12)); + operator delete(v1); + } +} + +//----- (004F7120) -------------------------------------------------------- +int __stdcall std::_Sp_counted_ptr::_M_get_deleter(int a1) +{ + return 0; +} + +//----- (004F7128) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr::~_Sp_counted_ptr(void *Block) +{ + operator delete(Block); +} + +//----- (004F713C) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr,std::allocator> *,(__gnu_cxx::_Lock_policy)2>::_M_destroy( + void *Block) +{ + operator delete(Block); +} + +//----- (004F714C) -------------------------------------------------------- +int __fastcall std::_Sp_counted_ptr,std::allocator> *,(__gnu_cxx::_Lock_policy)2>::_M_dispose( + int a1) +{ + int v1; // ecx + int result; // eax + + v1 = *(_DWORD *)(a1 + 12); + if ( v1 ) + return (*(int (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + return result; +} + +//----- (004F715C) -------------------------------------------------------- +int __stdcall std::_Sp_counted_ptr,std::allocator> *,(__gnu_cxx::_Lock_policy)2>::_M_get_deleter( + int a1) +{ + return 0; +} + +//----- (004F7164) -------------------------------------------------------- +void __fastcall std::_Sp_counted_ptr,std::allocator> *,(__gnu_cxx::_Lock_policy)2>::~_Sp_counted_ptr( + void *Block) +{ + operator delete(Block); +} + +//----- (004F7180) -------------------------------------------------------- +_DWORD *__thiscall std::streambuf::pubseekoff(_DWORD *this, int a2, int a3, int a4, int a5, int a6) +{ + _DWORD *result; // eax + _DWORD *(__thiscall *v7)(_DWORD *, int, int, int, int, int); // edx + + result = this; + v7 = *(_DWORD *(__thiscall **)(_DWORD *, int, int, int, int, int))(*(_DWORD *)a2 + 16); + if ( v7 == std::streambuf::seekoff ) + { + *this = -1; + this[1] = -1; + this[2] = 0; + } + else + { + v7(this, a2, a3, a4, a5, a6); + return this; + } + return result; +} + +//----- (004F7200) -------------------------------------------------------- +_DWORD *__thiscall std::streambuf::pubseekpos(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7) +{ + _DWORD *result; // eax + _DWORD *(__thiscall *v8)(_DWORD *, int, int, int, int, int, int); // edx + + result = this; + v8 = *(_DWORD *(__thiscall **)(_DWORD *, int, int, int, int, int, int))(*(_DWORD *)a2 + 20); + if ( v8 == std::streambuf::seekpos ) + { + *this = -1; + this[1] = -1; + this[2] = 0; + } + else + { + v8(this, a2, a3, a4, a5, a6, a7); + return this; + } + return result; +} + +//----- (004F72A0) -------------------------------------------------------- +int __thiscall std::streambuf::__safe_gbump(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + this[2] += a2; + return result; +} + +//----- (004F72B0) -------------------------------------------------------- +int __thiscall std::streambuf::__safe_pbump(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + this[5] += a2; + return result; +} + +//----- (004F72C0) -------------------------------------------------------- +int __thiscall std::streambuf::setg(_DWORD *this, int a2, int a3, int a4) +{ + int result; // eax + + this[1] = a2; + this[2] = a3; + result = a4; + this[3] = a4; + return result; +} + +//----- (004F72E0) -------------------------------------------------------- +int __thiscall std::streambuf::setp(_DWORD *this, int a2, int a3) +{ + int result; // eax + + this[5] = a2; + this[4] = a2; + result = a3; + this[6] = a3; + return result; +} + +//----- (004F7300) -------------------------------------------------------- +void __thiscall std::streambuf::swap(int this, int a2) +{ + volatile signed __int32 **v2; // esi + int v3; // edx + int v4; // ebx + int v5; // edx + int v6; // ebx + int v7; // edx + int v8; // ebx + int v9; // edx + int v10; // ebx + int v11; // edx + int v12; // ebx + int v13; // edx + const std::locale *v14; // [esp+4h] [ebp-28h] + _DWORD *v15[4]; // [esp+1Ch] [ebp-10h] BYREF + + v2 = (volatile signed __int32 **)(this + 28); + v3 = *(_DWORD *)(this + 4); + *(_DWORD *)(this + 4) = *(_DWORD *)(a2 + 4); + v4 = *(_DWORD *)(a2 + 8); + *(_DWORD *)(a2 + 4) = v3; + v5 = *(_DWORD *)(this + 8); + *(_DWORD *)(this + 8) = v4; + v6 = *(_DWORD *)(a2 + 12); + *(_DWORD *)(a2 + 8) = v5; + v7 = *(_DWORD *)(this + 12); + *(_DWORD *)(this + 12) = v6; + v8 = *(_DWORD *)(a2 + 16); + *(_DWORD *)(a2 + 12) = v7; + v9 = *(_DWORD *)(this + 16); + *(_DWORD *)(this + 16) = v8; + v10 = *(_DWORD *)(a2 + 20); + *(_DWORD *)(a2 + 16) = v9; + v11 = *(_DWORD *)(this + 20); + *(_DWORD *)(this + 20) = v10; + v12 = *(_DWORD *)(a2 + 24); + *(_DWORD *)(a2 + 20) = v11; + v13 = *(_DWORD *)(this + 24); + *(_DWORD *)(this + 24) = v12; + *(_DWORD *)(a2 + 24) = v13; + std::locale::locale((volatile signed __int32 **)v15, (volatile signed __int32 **)(this + 28), v14); + std::locale::operator=(v2, (volatile signed __int32 **)(a2 + 28)); + std::locale::operator=((volatile signed __int32 **)(a2 + 28), (volatile signed __int32 **)v15); + std::locale::~locale(v15); +} +// 4F7361: variable 'v14' is possibly undefined + +//----- (004F73A0) -------------------------------------------------------- +int std::streambuf::sync() +{ + return 0; +} + +//----- (004F73B0) -------------------------------------------------------- +int __thiscall std::streambuf::gbump(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + this[2] += a2; + return result; +} + +//----- (004F73D0) -------------------------------------------------------- +int __thiscall std::streambuf::pbump(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + this[5] += a2; + return result; +} + +//----- (004F73E0) -------------------------------------------------------- +int __fastcall std::streambuf::sgetc(_DWORD *a1) +{ + unsigned __int8 *v1; // eax + int result; // eax + int (*v3)(void); // edx + + v1 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v1 < a1[3] ) + return *v1; + v3 = *(int (**)(void))(*a1 + 36); + result = -1; + if ( v3 != std::streambuf::underflow ) + return v3(); + return result; +} + +//----- (004F7410) -------------------------------------------------------- +int __fastcall std::streambuf::sgetn(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 32))(a1); +} + +//----- (004F7420) -------------------------------------------------------- +int __thiscall std::streambuf::sputc(_DWORD *this, unsigned __int8 a2) +{ + unsigned __int8 *v2; // eax + int v3; // ebx + int (__stdcall *v5)(int); // eax + + v2 = (unsigned __int8 *)this[5]; + v3 = a2; + if ( this[6] > (unsigned int)v2 ) + { + *v2 = a2; + ++this[5]; + return v3; + } + v5 = *(int (__stdcall **)(int))(*this + 52); + if ( v5 == std::streambuf::overflow ) + return -1; + return v5(a2); +} + +//----- (004F7460) -------------------------------------------------------- +int __fastcall std::streambuf::sputn(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 48))(a1); +} + +//----- (004F7470) -------------------------------------------------------- +int __fastcall std::streambuf::uflow(_DWORD *a1) +{ + int (*v1)(); // eax + unsigned __int8 *v4; // eax + int v5; // edx + + v1 = *(int (**)())(*a1 + 36); + if ( v1 == std::streambuf::underflow ) + return -1; + if ( v1() == -1 ) + return -1; + v4 = (unsigned __int8 *)a1[2]; + v5 = *v4; + a1[2] = v4 + 1; + return v5; +} + +//----- (004F74C0) -------------------------------------------------------- +int __fastcall std::streambuf::sbumpc(_DWORD *a1) +{ + unsigned __int8 *v1; // eax + int v2; // edx + int (*v4)(void); // edx + int (*v5)(); // eax + unsigned __int8 *v6; // eax + int v7; // edx + + v1 = (unsigned __int8 *)a1[2]; + if ( (unsigned int)v1 < a1[3] ) + { + v2 = *v1; + a1[2] = v1 + 1; + return v2; + } + v4 = *(int (**)(void))(*a1 + 40); + if ( (char *)v4 != (char *)std::streambuf::uflow ) + return v4(); + v5 = *(int (**)())(*a1 + 36); + if ( v5 == std::streambuf::underflow ) + return -1; + if ( v5() == -1 ) + return -1; + v6 = (unsigned __int8 *)a1[2]; + v7 = *v6; + a1[2] = v6 + 1; + return v7; +} + +//----- (004F7540) -------------------------------------------------------- +void *__thiscall std::streambuf::setbuf(void *this, int a2, int a3) +{ + return this; +} + +//----- (004F7550) -------------------------------------------------------- +int __fastcall std::streambuf::snextc(_DWORD *a1) +{ + unsigned int v1; // eax + unsigned int v2; // edx + unsigned __int8 *v3; // eax + int (*v5)(void); // edx + int (*v6)(); // eax + int (*v7)(); // eax + int v8; // eax + _DWORD *v9; // ecx + unsigned __int8 *v10; // eax + unsigned int v11; // edx + + v1 = a1[2]; + v2 = a1[3]; + if ( v1 < v2 ) + { + v3 = (unsigned __int8 *)(v1 + 1); + a1[2] = v3; + if ( (unsigned int)v3 < v2 ) + return *v3; + v7 = *(int (**)())(*a1 + 36); + if ( v7 == std::streambuf::underflow ) + return -1; + return v7(); + } + v5 = *(int (**)(void))(*a1 + 40); + if ( (char *)v5 == (char *)std::streambuf::uflow ) + { + v6 = *(int (**)())(*a1 + 36); + if ( v6 == std::streambuf::underflow || v6() == -1 ) + return -1; + v9 = a1; + v11 = a1[3]; + v10 = (unsigned __int8 *)(a1[2] + 1); + a1[2] = v10; + } + else + { + v8 = v5(); + v9 = a1; + if ( v8 == -1 ) + return -1; + v10 = (unsigned __int8 *)a1[2]; + v11 = a1[3]; + } + if ( (unsigned int)v10 < v11 ) + return *v10; + v7 = *(int (**)())(*v9 + 36); + if ( v7 == std::streambuf::underflow ) + return -1; + return v7(); +} + +//----- (004F7610) -------------------------------------------------------- +int (*__fastcall std::streambuf::stossc(_DWORD *a1))(void) +{ + unsigned int v1; // eax + int (*result)(void); // eax + int (*v3)(void); // edx + + v1 = a1[2]; + if ( v1 >= a1[3] ) + { + v3 = *(int (**)(void))(*a1 + 40); + if ( (char *)v3 == (char *)std::streambuf::uflow ) + { + result = *(int (**)(void))(*a1 + 36); + if ( result != std::streambuf::underflow ) + { + result = (int (*)(void))result(); + if ( result != (int (*)(void))-1 ) + ++a1[2]; + } + } + else + { + return (int (*)(void))v3(); + } + } + else + { + result = (int (*)(void))(v1 + 1); + a1[2] = result; + } + return result; +} + +//----- (004F7670) -------------------------------------------------------- +int __thiscall std::streambuf::xsgetn(_DWORD *this, char *a2, int a3) +{ + int v5; // esi + const void *Src; // ecx + int v7; // eax + size_t Size; // ebx + char *v10; // ebx + int (__fastcall *v11)(_DWORD *); // edx + int (*v12)(); // eax + char *v13; // eax + char v14; // cl + int v15; // eax + char *v16; // [esp+30h] [ebp+4h] + + if ( a3 > 0 ) + { + v5 = 0; + while ( 1 ) + { + Src = (const void *)this[2]; + v7 = this[3] - (_DWORD)Src; + if ( v7 ) + { + Size = a3 - v5; + v16 = a2; + if ( a3 - v5 > v7 ) + Size = this[3] - (_DWORD)Src; + v5 += Size; + memcpy(a2, Src, Size); + this[2] += Size; + if ( a3 <= v5 ) + return v5; + v10 = &v16[Size]; + } + else + { + v10 = a2; + } + v11 = *(int (__fastcall **)(_DWORD *))(*this + 40); + if ( v11 == std::streambuf::uflow ) + { + v12 = *(int (**)())(*this + 36); + if ( v12 == std::streambuf::underflow || ((int (__fastcall *)(_DWORD *))v12)(this) == -1 ) + return v5; + v13 = (char *)this[2]; + v14 = *v13; + this[2] = v13 + 1; + } + else + { + v15 = v11(this); + v14 = v15; + if ( v15 == -1 ) + return v5; + } + ++v5; + *v10 = v14; + a2 = v10 + 1; + if ( a3 <= v5 ) + return v5; + } + } + return 0; +} + +//----- (004F7730) -------------------------------------------------------- +int __thiscall std::streambuf::xsputn(_DWORD *this, unsigned __int8 *a2, int a3) +{ + int v5; // ebx + void *v6; // edx + int v7; // eax + size_t Size; // ecx + int (__stdcall *v10)(int); // eax + size_t v11; // [esp+1Ch] [ebp-20h] + + if ( a3 > 0 ) + { + v5 = 0; + while ( 1 ) + { + v6 = (void *)this[5]; + v7 = this[6] - (_DWORD)v6; + if ( v7 ) + { + Size = a3 - v5; + if ( a3 - v5 > v7 ) + Size = this[6] - (_DWORD)v6; + v11 = Size; + memcpy(v6, a2, Size); + this[5] += v11; + v5 += v11; + if ( a3 <= v5 ) + return v5; + a2 += v11; + } + v10 = *(int (__stdcall **)(int))(*this + 52); + if ( v10 != std::streambuf::overflow && ((int (__thiscall *)(_DWORD *, _DWORD))v10)(this, *a2) != -1 ) + { + ++v5; + ++a2; + if ( a3 > v5 ) + continue; + } + return v5; + } + } + return 0; +} + +//----- (004F77D0) -------------------------------------------------------- +int __fastcall std::streambuf::pubsync(int a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*(_DWORD *)a1 + 24); + if ( v1 == std::streambuf::sync ) + return 0; + else + return v1(); +} + +//----- (004F77F0) -------------------------------------------------------- +_DWORD *__thiscall std::streambuf::seekoff(_DWORD *this, int a2, int a3, int a4, int a5, int a6) +{ + _DWORD *result; // eax + + *this = -1; + result = this; + this[1] = -1; + this[2] = 0; + return result; +} + +//----- (004F7810) -------------------------------------------------------- +_DWORD *__thiscall std::streambuf::seekpos(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7) +{ + _DWORD *result; // eax + + result = this; + *this = -1; + this[1] = -1; + this[2] = 0; + return result; +} + +//----- (004F7830) -------------------------------------------------------- +int __fastcall std::streambuf::sungetc(_DWORD *a1) +{ + unsigned int v1; // eax + int result; // eax + int (__stdcall *v3)(int); // edx + + v1 = a1[2]; + if ( a1[1] >= v1 ) + { + v3 = *(int (__stdcall **)(int))(*a1 + 44); + result = -1; + if ( v3 != std::streambuf::pbackfail ) + return v3(-1); + } + else + { + a1[2] = v1 - 1; + return *(unsigned __int8 *)(v1 - 1); + } + return result; +} + +//----- (004F7880) -------------------------------------------------------- +int __fastcall std::streambuf::in_avail(_DWORD *a1) +{ + int result; // eax + int (*v2)(void); // edx + + result = a1[3] - a1[2]; + if ( !result ) + { + v2 = *(int (**)(void))(*a1 + 28); + if ( v2 != std::streambuf::showmanyc ) + return v2(); + } + return result; +} + +//----- (004F78B0) -------------------------------------------------------- +int __stdcall std::streambuf::overflow(int a1) +{ + return -1; +} + +//----- (004F78C0) -------------------------------------------------------- +volatile signed __int32 **__thiscall std::streambuf::pubimbue( + volatile signed __int32 **this, + volatile signed __int32 **a2, + volatile signed __int32 **a3) +{ + int (__stdcall *v3)(int); // eax + const std::locale *v5; // [esp+4h] [ebp-54h] + + std::locale::locale(this, a2 + 7, v5); + v3 = (int (__stdcall *)(int))*((_DWORD *)*a2 + 2); + if ( v3 != std::streambuf::imbue ) + ((void (__thiscall *)(volatile signed __int32 **, volatile signed __int32 **))v3)(a2, a3); + std::locale::operator=(a2 + 7, a3); + return this; +} +// 4F78FE: variable 'v5' is possibly undefined +// 4F73C0: using guessed type int __stdcall std::streambuf::imbue(int); + +//----- (004F7980) -------------------------------------------------------- +int __stdcall std::streambuf::pbackfail(int a1) +{ + return -1; +} + +//----- (004F7990) -------------------------------------------------------- +int __thiscall std::streambuf::pubsetbuf(void *this, int a2, int a3) +{ + int result; // eax + void *(__thiscall *v4)(void *, int, int); // edx + + result = (int)this; + v4 = *(void *(__thiscall **)(void *, int, int))(*(_DWORD *)this + 12); + if ( v4 != std::streambuf::setbuf ) + return ((int (__stdcall *)(int, int))v4)(a2, a3); + return result; +} + +//----- (004F79B0) -------------------------------------------------------- +int std::streambuf::showmanyc() +{ + return 0; +} + +//----- (004F79C0) -------------------------------------------------------- +int __thiscall std::streambuf::sputbackc(_DWORD *this, unsigned __int8 a2) +{ + unsigned int v2; // eax + int result; // eax + + v2 = this[2]; + if ( this[1] < v2 && *(_BYTE *)(v2 - 1) == a2 ) + { + this[2] = v2 - 1; + return *(unsigned __int8 *)(v2 - 1); + } + else + { + result = -1; + if ( *(int (__stdcall **)(int))(*this + 44) != std::streambuf::pbackfail ) + return (*(int (__thiscall **)(_DWORD *, _DWORD))(*this + 44))(this, a2); + } + return result; +} + +//----- (004F7A00) -------------------------------------------------------- +int std::streambuf::underflow() +{ + return -1; +} + +//----- (004F7A10) -------------------------------------------------------- +volatile signed __int32 *__userpurge std::streambuf::basic_streambuf@( + _DWORD *a1@, + std::locale *a2, + const std::locale *a3) +{ + volatile signed __int32 **v3; // ecx + + *a1 = &off_560424; + v3 = (volatile signed __int32 **)(a1 + 7); + *(v3 - 6) = (volatile signed __int32 *)*((_DWORD *)a2 + 1); + *(v3 - 5) = (volatile signed __int32 *)*((_DWORD *)a2 + 2); + *(v3 - 4) = (volatile signed __int32 *)*((_DWORD *)a2 + 3); + *(v3 - 3) = (volatile signed __int32 *)*((_DWORD *)a2 + 4); + *(v3 - 2) = (volatile signed __int32 *)*((_DWORD *)a2 + 5); + *(v3 - 1) = (volatile signed __int32 *)*((_DWORD *)a2 + 6); + return std::locale::locale(v3, (volatile signed __int32 **)a2 + 7, a3); +} +// 560424: using guessed type int (*off_560424)(); + +//----- (004F7A50) -------------------------------------------------------- +void __fastcall std::streambuf::basic_streambuf(_DWORD *a1) +{ + _DWORD *v1; // ecx + + *a1 = &off_560424; + v1 = a1 + 7; + *(v1 - 6) = 0; + *(v1 - 5) = 0; + *(v1 - 4) = 0; + *(v1 - 3) = 0; + *(v1 - 2) = 0; + *(v1 - 1) = 0; + std::locale::locale(v1); +} +// 560424: using guessed type int (*off_560424)(); + +//----- (004F7A90) -------------------------------------------------------- +volatile signed __int32 *__userpurge std::streambuf::basic_streambuf@( + _DWORD *a1@, + std::locale *a2, + const std::locale *a3) +{ + volatile signed __int32 **v3; // ecx + + *a1 = &off_560424; + v3 = (volatile signed __int32 **)(a1 + 7); + *(v3 - 6) = (volatile signed __int32 *)*((_DWORD *)a2 + 1); + *(v3 - 5) = (volatile signed __int32 *)*((_DWORD *)a2 + 2); + *(v3 - 4) = (volatile signed __int32 *)*((_DWORD *)a2 + 3); + *(v3 - 3) = (volatile signed __int32 *)*((_DWORD *)a2 + 4); + *(v3 - 2) = (volatile signed __int32 *)*((_DWORD *)a2 + 5); + *(v3 - 1) = (volatile signed __int32 *)*((_DWORD *)a2 + 6); + return std::locale::locale(v3, (volatile signed __int32 **)a2 + 7, a3); +} +// 560424: using guessed type int (*off_560424)(); + +//----- (004F7AD0) -------------------------------------------------------- +void __fastcall std::streambuf::basic_streambuf(_DWORD *a1) +{ + _DWORD *v1; // ecx + + *a1 = &off_560424; + v1 = a1 + 7; + *(v1 - 6) = 0; + *(v1 - 5) = 0; + *(v1 - 4) = 0; + *(v1 - 3) = 0; + *(v1 - 2) = 0; + *(v1 - 1) = 0; + std::locale::locale(v1); +} +// 560424: using guessed type int (*off_560424)(); + +//----- (004F7B10) -------------------------------------------------------- +void __fastcall std::streambuf::~streambuf(char *Block) +{ + _DWORD **v2; // ecx + + v2 = (_DWORD **)(Block + 28); + *(v2 - 7) = &off_560424; + std::locale::~locale(v2); + operator delete(Block); +} +// 560424: using guessed type int (*off_560424)(); + +//----- (004F7B40) -------------------------------------------------------- +void __fastcall std::streambuf::~streambuf(int a1) +{ + *(_DWORD *)a1 = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 28)); +} +// 560424: using guessed type int (*off_560424)(); + +//----- (004F7B50) -------------------------------------------------------- +void __fastcall std::streambuf::~streambuf(int a1) +{ + *(_DWORD *)a1 = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 28)); +} +// 560424: using guessed type int (*off_560424)(); + +//----- (004F7B60) -------------------------------------------------------- +volatile signed __int32 **__thiscall std::streambuf::operator=(volatile signed __int32 **this, int a2) +{ + volatile signed __int32 **v3; // ecx + + v3 = this + 7; + *(v3 - 6) = *(volatile signed __int32 **)(a2 + 4); + *(v3 - 5) = *(volatile signed __int32 **)(a2 + 8); + *(v3 - 4) = *(volatile signed __int32 **)(a2 + 12); + *(v3 - 3) = *(volatile signed __int32 **)(a2 + 16); + *(v3 - 2) = *(volatile signed __int32 **)(a2 + 20); + *(v3 - 1) = *(volatile signed __int32 **)(a2 + 24); + std::locale::operator=(v3, (volatile signed __int32 **)(a2 + 28)); + return this; +} + +//----- (004F7BB0) -------------------------------------------------------- +_DWORD *__thiscall std::wstreambuf::pubseekoff(_DWORD *this, int a2, int a3, int a4, int a5, int a6) +{ + _DWORD *result; // eax + _DWORD *(__thiscall *v7)(_DWORD *, int, int, int, int, int); // edx + + result = this; + v7 = *(_DWORD *(__thiscall **)(_DWORD *, int, int, int, int, int))(*(_DWORD *)a2 + 16); + if ( v7 == std::wstreambuf::seekoff ) + { + *this = -1; + this[1] = -1; + this[2] = 0; + } + else + { + v7(this, a2, a3, a4, a5, a6); + return this; + } + return result; +} + +//----- (004F7C30) -------------------------------------------------------- +_DWORD *__thiscall std::wstreambuf::pubseekpos(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7) +{ + _DWORD *result; // eax + _DWORD *(__thiscall *v8)(_DWORD *, int, int, int, int, int, int); // edx + + result = this; + v8 = *(_DWORD *(__thiscall **)(_DWORD *, int, int, int, int, int, int))(*(_DWORD *)a2 + 20); + if ( v8 == std::wstreambuf::seekpos ) + { + *this = -1; + this[1] = -1; + this[2] = 0; + } + else + { + v8(this, a2, a3, a4, a5, a6, a7); + return this; + } + return result; +} + +//----- (004F7CD0) -------------------------------------------------------- +int __thiscall std::wstreambuf::__safe_gbump(_DWORD *this, int a2) +{ + int result; // eax + + result = 2 * a2; + this[2] += 2 * a2; + return result; +} + +//----- (004F7CE0) -------------------------------------------------------- +int __thiscall std::wstreambuf::__safe_pbump(_DWORD *this, int a2) +{ + int result; // eax + + result = 2 * a2; + this[5] += 2 * a2; + return result; +} + +//----- (004F7CF0) -------------------------------------------------------- +int __thiscall std::wstreambuf::setg(_DWORD *this, int a2, int a3, int a4) +{ + int result; // eax + + this[1] = a2; + this[2] = a3; + result = a4; + this[3] = a4; + return result; +} + +//----- (004F7D10) -------------------------------------------------------- +int __thiscall std::wstreambuf::setp(_DWORD *this, int a2, int a3) +{ + int result; // eax + + this[5] = a2; + this[4] = a2; + result = a3; + this[6] = a3; + return result; +} + +//----- (004F7D30) -------------------------------------------------------- +void __thiscall std::wstreambuf::swap(int this, int a2) +{ + volatile signed __int32 **v2; // esi + int v3; // edx + int v4; // ebx + int v5; // edx + int v6; // ebx + int v7; // edx + int v8; // ebx + int v9; // edx + int v10; // ebx + int v11; // edx + int v12; // ebx + int v13; // edx + const std::locale *v14; // [esp+4h] [ebp-28h] + _DWORD *v15[4]; // [esp+1Ch] [ebp-10h] BYREF + + v2 = (volatile signed __int32 **)(this + 28); + v3 = *(_DWORD *)(this + 4); + *(_DWORD *)(this + 4) = *(_DWORD *)(a2 + 4); + v4 = *(_DWORD *)(a2 + 8); + *(_DWORD *)(a2 + 4) = v3; + v5 = *(_DWORD *)(this + 8); + *(_DWORD *)(this + 8) = v4; + v6 = *(_DWORD *)(a2 + 12); + *(_DWORD *)(a2 + 8) = v5; + v7 = *(_DWORD *)(this + 12); + *(_DWORD *)(this + 12) = v6; + v8 = *(_DWORD *)(a2 + 16); + *(_DWORD *)(a2 + 12) = v7; + v9 = *(_DWORD *)(this + 16); + *(_DWORD *)(this + 16) = v8; + v10 = *(_DWORD *)(a2 + 20); + *(_DWORD *)(a2 + 16) = v9; + v11 = *(_DWORD *)(this + 20); + *(_DWORD *)(this + 20) = v10; + v12 = *(_DWORD *)(a2 + 24); + *(_DWORD *)(a2 + 20) = v11; + v13 = *(_DWORD *)(this + 24); + *(_DWORD *)(this + 24) = v12; + *(_DWORD *)(a2 + 24) = v13; + std::locale::locale((volatile signed __int32 **)v15, (volatile signed __int32 **)(this + 28), v14); + std::locale::operator=(v2, (volatile signed __int32 **)(a2 + 28)); + std::locale::operator=((volatile signed __int32 **)(a2 + 28), (volatile signed __int32 **)v15); + std::locale::~locale(v15); +} +// 4F7D91: variable 'v14' is possibly undefined + +//----- (004F7DD0) -------------------------------------------------------- +int std::wstreambuf::sync() +{ + return 0; +} + +//----- (004F7DE0) -------------------------------------------------------- +int __thiscall std::wstreambuf::gbump(_DWORD *this, int a2) +{ + int result; // eax + + result = 2 * a2; + this[2] += 2 * a2; + return result; +} + +//----- (004F7E00) -------------------------------------------------------- +int __thiscall std::wstreambuf::pbump(_DWORD *this, int a2) +{ + int result; // eax + + result = 2 * a2; + this[5] += 2 * a2; + return result; +} + +//----- (004F7E10) -------------------------------------------------------- +int __fastcall std::wstreambuf::sgetc(_DWORD *a1) +{ + unsigned __int16 *v1; // eax + int result; // eax + int (*v3)(void); // edx + + v1 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v1 < a1[3] ) + return *v1; + v3 = *(int (**)(void))(*a1 + 36); + result = -1; + if ( v3 != std::wstreambuf::underflow ) + return v3(); + return result; +} + +//----- (004F7E40) -------------------------------------------------------- +int __fastcall std::wstreambuf::sgetn(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 32))(a1); +} + +//----- (004F7E50) -------------------------------------------------------- +int __thiscall std::wstreambuf::sputc(_DWORD *this, int a2) +{ + _WORD *v2; // eax + int result; // eax + + v2 = (_WORD *)this[5]; + if ( this[6] <= (unsigned int)v2 ) + { + result = -1; + if ( *(int (__stdcall **)(int))(*this + 52) != std::wstreambuf::overflow ) + return (*(int (__thiscall **)(_DWORD *, _DWORD))(*this + 52))(this, (unsigned __int16)a2); + } + else + { + *v2 = a2; + this[5] = v2 + 1; + return a2; + } + return result; +} + +//----- (004F7E90) -------------------------------------------------------- +int __fastcall std::wstreambuf::sputn(int a1) +{ + return (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 48))(a1); +} + +//----- (004F7EA0) -------------------------------------------------------- +int __fastcall std::wstreambuf::uflow(_DWORD *a1) +{ + int (*v1)(); // eax + unsigned __int16 *v4; // eax + int v5; // edx + + v1 = *(int (**)())(*a1 + 36); + if ( v1 == std::wstreambuf::underflow ) + return -1; + if ( (unsigned __int16)v1() == 0xFFFF ) + return -1; + v4 = (unsigned __int16 *)a1[2]; + v5 = *v4; + a1[2] = v4 + 1; + return v5; +} + +//----- (004F7EF0) -------------------------------------------------------- +int __fastcall std::wstreambuf::sbumpc(_DWORD *a1) +{ + unsigned __int16 *v1; // eax + int v2; // edx + int (*v4)(void); // edx + int (*v5)(); // eax + unsigned __int16 *v6; // eax + int v7; // edx + + v1 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v1 < a1[3] ) + { + v2 = *v1; + a1[2] = v1 + 1; + return v2; + } + v4 = *(int (**)(void))(*a1 + 40); + if ( (char *)v4 != (char *)std::wstreambuf::uflow ) + return v4(); + v5 = *(int (**)())(*a1 + 36); + if ( v5 == std::wstreambuf::underflow ) + return -1; + if ( (unsigned __int16)v5() == 0xFFFF ) + return -1; + v6 = (unsigned __int16 *)a1[2]; + v7 = *v6; + a1[2] = v6 + 1; + return v7; +} + +//----- (004F7F70) -------------------------------------------------------- +void *__thiscall std::wstreambuf::setbuf(void *this, int a2, int a3) +{ + return this; +} + +//----- (004F7F80) -------------------------------------------------------- +int __fastcall std::wstreambuf::snextc(_DWORD *a1) +{ + __int16 *v1; // eax + __int16 v2; // dx + unsigned __int16 *v3; // eax + int (*v5)(); // eax + int (*v6)(void); // edx + int (*v7)(); // eax + __int16 v8; // ax + _DWORD *v9; // ecx + __int16 v10; // dx + unsigned __int16 *v11; // eax + __int16 *v12; // eax + + v1 = (__int16 *)a1[2]; + if ( (unsigned int)v1 < a1[3] ) + { + v2 = *v1; + a1[2] = v1 + 1; + if ( v2 == -1 ) + return -1; + v3 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v3 < a1[3] ) + return *v3; + v5 = *(int (**)())(*a1 + 36); + if ( v5 == std::wstreambuf::underflow ) + return -1; + return v5(); + } + v6 = *(int (**)(void))(*a1 + 40); + if ( (char *)v6 == (char *)std::wstreambuf::uflow ) + { + v7 = *(int (**)())(*a1 + 36); + if ( v7 == std::wstreambuf::underflow || (unsigned __int16)v7() == 0xFFFF ) + return -1; + v9 = a1; + v12 = (__int16 *)a1[2]; + v10 = *v12; + a1[2] = v12 + 1; + } + else + { + v8 = v6(); + v9 = a1; + v10 = v8; + } + if ( v10 == -1 ) + return -1; + v11 = (unsigned __int16 *)v9[2]; + if ( (unsigned int)v11 < v9[3] ) + return *v11; + v5 = *(int (**)())(*v9 + 36); + if ( v5 == std::wstreambuf::underflow ) + return -1; + return v5(); +} + +//----- (004F8040) -------------------------------------------------------- +int (*__fastcall std::wstreambuf::stossc(_DWORD *a1))(void) +{ + unsigned int v1; // eax + int (*result)(void); // eax + int (*v3)(void); // edx + + v1 = a1[2]; + if ( v1 >= a1[3] ) + { + v3 = *(int (**)(void))(*a1 + 40); + if ( (char *)v3 == (char *)std::wstreambuf::uflow ) + { + result = *(int (**)(void))(*a1 + 36); + if ( result != std::wstreambuf::underflow ) + { + result = (int (*)(void))result(); + if ( (_WORD)result != 0xFFFF ) + a1[2] += 2; + } + } + else + { + return (int (*)(void))v3(); + } + } + else + { + result = (int (*)(void))(v1 + 2); + a1[2] = result; + } + return result; +} + +//----- (004F80A0) -------------------------------------------------------- +int __thiscall std::wstreambuf::xsgetn(_DWORD *this, char *a2, int a3) +{ + int v4; // esi + int v5; // edx + _BYTE *v7; // ebx + char *Src; // eax + int v9; // ebx + int v10; // ebp + char *v12; // ebp + int (__fastcall *v13)(_DWORD *); // ebx + int (*v14)(); // eax + __int16 *v15; // ecx + __int16 v16; // ax + char *v17; // [esp+30h] [ebp+4h] + int v18; // [esp+34h] [ebp+8h] + int v19; // [esp+34h] [ebp+8h] + int v20; // [esp+34h] [ebp+8h] + + v4 = 0; + v5 = a3; + if ( a3 > 0 ) + { + while ( 1 ) + { + v7 = (_BYTE *)this[3]; + Src = (char *)this[2]; + if ( v7 == Src ) + { + v12 = a2; + } + else + { + v9 = (v7 - Src) >> 1; + if ( v9 > v5 - v4 ) + v9 = v5 - v4; + v10 = 2 * v9; + if ( v9 ) + { + v18 = v5; + v17 = a2; + memcpy(a2, Src, 2 * v9); + Src = (char *)this[2]; + v5 = v18; + a2 = v17; + } + v4 += v9; + this[2] = &Src[v10]; + if ( v5 <= v4 ) + return v4; + v12 = &a2[v10]; + } + v13 = *(int (__fastcall **)(_DWORD *))(*this + 40); + if ( v13 == std::wstreambuf::uflow ) + { + v14 = *(int (**)())(*this + 36); + if ( v14 == std::wstreambuf::underflow ) + return v4; + v19 = v5; + if ( ((unsigned __int16 (__fastcall *)(_DWORD *))v14)(this) == 0xFFFF ) + return v4; + v15 = (__int16 *)this[2]; + v5 = v19; + v16 = *v15; + this[2] = v15 + 1; + } + else + { + v20 = v5; + v16 = v13(this); + v5 = v20; + } + if ( v16 != -1 ) + { + ++v4; + *(_WORD *)v12 = v16; + a2 = v12 + 2; + if ( v5 > v4 ) + continue; + } + return v4; + } + } + return v4; +} + +//----- (004F8190) -------------------------------------------------------- +int __thiscall std::wstreambuf::xsputn(_DWORD *this, char *a2, int a3) +{ + int v3; // edx + int v6; // esi + _BYTE *v7; // ebx + char *v8; // eax + int v9; // ebx + int v10; // ecx + int (__stdcall *v12)(int); // eax + int v13; // [esp+44h] [ebp+8h] + int v14; // [esp+44h] [ebp+8h] + + v3 = a3; + if ( a3 > 0 ) + { + v6 = 0; + while ( 1 ) + { + v7 = (_BYTE *)this[6]; + v8 = (char *)this[5]; + if ( v7 != v8 ) + { + v9 = (v7 - v8) >> 1; + if ( v9 > v3 - v6 ) + v9 = v3 - v6; + v10 = 2 * v9; + if ( v9 ) + { + v13 = v3; + memcpy(v8, a2, 2 * v9); + v8 = (char *)this[5]; + v3 = v13; + v10 = 2 * v9; + } + v6 += v9; + this[5] = &v8[v10]; + if ( v3 <= v6 ) + return v6; + a2 += v10; + } + v12 = *(int (__stdcall **)(int))(*this + 52); + if ( v12 != std::wstreambuf::overflow ) + { + v14 = v3; + if ( ((unsigned __int16 (__thiscall *)(_DWORD *, _DWORD))v12)(this, *(unsigned __int16 *)a2) != 0xFFFF ) + { + v3 = v14; + ++v6; + a2 += 2; + if ( v14 > v6 ) + continue; + } + } + return v6; + } + } + return 0; +} + +//----- (004F8260) -------------------------------------------------------- +int __fastcall std::wstreambuf::pubsync(int a1) +{ + int (*v1)(void); // eax + + v1 = *(int (**)(void))(*(_DWORD *)a1 + 24); + if ( v1 == std::wstreambuf::sync ) + return 0; + else + return v1(); +} + +//----- (004F8280) -------------------------------------------------------- +_DWORD *__thiscall std::wstreambuf::seekoff(_DWORD *this, int a2, int a3, int a4, int a5, int a6) +{ + _DWORD *result; // eax + + *this = -1; + result = this; + this[1] = -1; + this[2] = 0; + return result; +} + +//----- (004F82A0) -------------------------------------------------------- +_DWORD *__thiscall std::wstreambuf::seekpos(_DWORD *this, int a2, int a3, int a4, int a5, int a6, int a7) +{ + _DWORD *result; // eax + + result = this; + *this = -1; + this[1] = -1; + this[2] = 0; + return result; +} + +//----- (004F82C0) -------------------------------------------------------- +int __fastcall std::wstreambuf::sungetc(_DWORD *a1) +{ + unsigned int v1; // eax + unsigned int v2; // edx + int result; // eax + int (__stdcall *v4)(int); // edx + + v1 = a1[2]; + if ( a1[1] >= v1 ) + { + v4 = *(int (__stdcall **)(int))(*a1 + 44); + result = -1; + if ( v4 != std::wstreambuf::pbackfail ) + return v4(0xFFFF); + } + else + { + v2 = v1 - 2; + result = *(unsigned __int16 *)(v1 - 2); + a1[2] = v2; + } + return result; +} + +//----- (004F8310) -------------------------------------------------------- +int __fastcall std::wstreambuf::in_avail(_DWORD *a1) +{ + int v1; // eax + int v2; // edx + int result; // eax + int (*v4)(void); // edx + + v1 = a1[3]; + v2 = a1[2]; + if ( v1 != v2 ) + return (v1 - v2) >> 1; + v4 = *(int (**)(void))(*a1 + 28); + result = 0; + if ( v4 != std::wstreambuf::showmanyc ) + return v4(); + return result; +} + +//----- (004F8340) -------------------------------------------------------- +int __stdcall std::wstreambuf::overflow(int a1) +{ + return -1; +} + +//----- (004F8350) -------------------------------------------------------- +volatile signed __int32 **__thiscall std::wstreambuf::pubimbue( + volatile signed __int32 **this, + volatile signed __int32 **a2, + volatile signed __int32 **a3) +{ + int (__stdcall *v3)(int); // eax + const std::locale *v5; // [esp+4h] [ebp-54h] + + std::locale::locale(this, a2 + 7, v5); + v3 = (int (__stdcall *)(int))*((_DWORD *)*a2 + 2); + if ( v3 != std::wstreambuf::imbue ) + ((void (__thiscall *)(volatile signed __int32 **, volatile signed __int32 **))v3)(a2, a3); + std::locale::operator=(a2 + 7, a3); + return this; +} +// 4F838E: variable 'v5' is possibly undefined +// 4F7DF0: using guessed type int __stdcall std::wstreambuf::imbue(int); + +//----- (004F8410) -------------------------------------------------------- +int __stdcall std::wstreambuf::pbackfail(int a1) +{ + return -1; +} + +//----- (004F8420) -------------------------------------------------------- +int __thiscall std::wstreambuf::pubsetbuf(void *this, int a2, int a3) +{ + int result; // eax + void *(__thiscall *v4)(void *, int, int); // edx + + result = (int)this; + v4 = *(void *(__thiscall **)(void *, int, int))(*(_DWORD *)this + 12); + if ( v4 != std::wstreambuf::setbuf ) + return ((int (__stdcall *)(int, int))v4)(a2, a3); + return result; +} + +//----- (004F8440) -------------------------------------------------------- +int std::wstreambuf::showmanyc() +{ + return 0; +} + +//----- (004F8450) -------------------------------------------------------- +int __thiscall std::wstreambuf::sputbackc(_DWORD *this, int a2) +{ + unsigned int v2; // eax + int result; // eax + + v2 = this[2]; + if ( this[1] < v2 && *(_WORD *)(v2 - 2) == (_WORD)a2 ) + { + this[2] = v2 - 2; + return a2; + } + else + { + result = -1; + if ( *(int (__stdcall **)(int))(*this + 44) != std::wstreambuf::pbackfail ) + return (*(int (__thiscall **)(_DWORD *, _DWORD))(*this + 44))(this, (unsigned __int16)a2); + } + return result; +} + +//----- (004F8490) -------------------------------------------------------- +int std::wstreambuf::underflow() +{ + return -1; +} + +//----- (004F84A0) -------------------------------------------------------- +volatile signed __int32 *__userpurge std::wstreambuf::basic_streambuf@( + _DWORD *a1@, + std::locale *a2, + const std::locale *a3) +{ + volatile signed __int32 **v3; // ecx + + *a1 = &off_560464; + v3 = (volatile signed __int32 **)(a1 + 7); + *(v3 - 6) = (volatile signed __int32 *)*((_DWORD *)a2 + 1); + *(v3 - 5) = (volatile signed __int32 *)*((_DWORD *)a2 + 2); + *(v3 - 4) = (volatile signed __int32 *)*((_DWORD *)a2 + 3); + *(v3 - 3) = (volatile signed __int32 *)*((_DWORD *)a2 + 4); + *(v3 - 2) = (volatile signed __int32 *)*((_DWORD *)a2 + 5); + *(v3 - 1) = (volatile signed __int32 *)*((_DWORD *)a2 + 6); + return std::locale::locale(v3, (volatile signed __int32 **)a2 + 7, a3); +} +// 560464: using guessed type int (*off_560464)(); + +//----- (004F84E0) -------------------------------------------------------- +void __fastcall std::wstreambuf::basic_streambuf(_DWORD *a1) +{ + _DWORD *v1; // ecx + + *a1 = &off_560464; + v1 = a1 + 7; + *(v1 - 6) = 0; + *(v1 - 5) = 0; + *(v1 - 4) = 0; + *(v1 - 3) = 0; + *(v1 - 2) = 0; + *(v1 - 1) = 0; + std::locale::locale(v1); +} +// 560464: using guessed type int (*off_560464)(); + +//----- (004F8520) -------------------------------------------------------- +volatile signed __int32 *__userpurge std::wstreambuf::basic_streambuf@( + _DWORD *a1@, + std::locale *a2, + const std::locale *a3) +{ + volatile signed __int32 **v3; // ecx + + *a1 = &off_560464; + v3 = (volatile signed __int32 **)(a1 + 7); + *(v3 - 6) = (volatile signed __int32 *)*((_DWORD *)a2 + 1); + *(v3 - 5) = (volatile signed __int32 *)*((_DWORD *)a2 + 2); + *(v3 - 4) = (volatile signed __int32 *)*((_DWORD *)a2 + 3); + *(v3 - 3) = (volatile signed __int32 *)*((_DWORD *)a2 + 4); + *(v3 - 2) = (volatile signed __int32 *)*((_DWORD *)a2 + 5); + *(v3 - 1) = (volatile signed __int32 *)*((_DWORD *)a2 + 6); + return std::locale::locale(v3, (volatile signed __int32 **)a2 + 7, a3); +} +// 560464: using guessed type int (*off_560464)(); + +//----- (004F8560) -------------------------------------------------------- +void __fastcall std::wstreambuf::basic_streambuf(_DWORD *a1) +{ + _DWORD *v1; // ecx + + *a1 = &off_560464; + v1 = a1 + 7; + *(v1 - 6) = 0; + *(v1 - 5) = 0; + *(v1 - 4) = 0; + *(v1 - 3) = 0; + *(v1 - 2) = 0; + *(v1 - 1) = 0; + std::locale::locale(v1); +} +// 560464: using guessed type int (*off_560464)(); + +//----- (004F85A0) -------------------------------------------------------- +void __fastcall std::wstreambuf::~wstreambuf(char *Block) +{ + _DWORD **v2; // ecx + + v2 = (_DWORD **)(Block + 28); + *(v2 - 7) = &off_560464; + std::locale::~locale(v2); + operator delete(Block); +} +// 560464: using guessed type int (*off_560464)(); + +//----- (004F85D0) -------------------------------------------------------- +void __fastcall std::wstreambuf::~wstreambuf(int a1) +{ + *(_DWORD *)a1 = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 28)); +} +// 560464: using guessed type int (*off_560464)(); + +//----- (004F85E0) -------------------------------------------------------- +void __fastcall std::wstreambuf::~wstreambuf(int a1) +{ + *(_DWORD *)a1 = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 28)); +} +// 560464: using guessed type int (*off_560464)(); + +//----- (004F85F0) -------------------------------------------------------- +volatile signed __int32 **__thiscall std::wstreambuf::operator=(volatile signed __int32 **this, int a2) +{ + volatile signed __int32 **v3; // ecx + + v3 = this + 7; + *(v3 - 6) = *(volatile signed __int32 **)(a2 + 4); + *(v3 - 5) = *(volatile signed __int32 **)(a2 + 8); + *(v3 - 4) = *(volatile signed __int32 **)(a2 + 12); + *(v3 - 3) = *(volatile signed __int32 **)(a2 + 16); + *(v3 - 2) = *(volatile signed __int32 **)(a2 + 20); + *(v3 - 1) = *(volatile signed __int32 **)(a2 + 24); + std::locale::operator=(v3, (volatile signed __int32 **)(a2 + 28)); + return this; +} + +//----- (004F8640) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_560D14; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_5604A4; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 5604A4: using guessed type int (*off_5604A4)(); +// 560D14: using guessed type int (*off_560D14)(); + +//----- (004F8780) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int ***a2, int a3) +{ + std::messages_byname::messages_byname(this, *a2, a3); +} + +//----- (004F8790) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_560D14; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_5604A4; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 5604A4: using guessed type int (*off_5604A4)(); +// 560D14: using guessed type int (*off_560D14)(); + +//----- (004F88D0) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int ***a2, int a3) +{ + std::messages_byname::messages_byname(this, *a2, a3); +} + +//----- (004F88E0) -------------------------------------------------------- +void __fastcall std::messages_byname::~messages_byname(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_560D14; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 4F891E: variable 'lpfctx' is possibly undefined +// 560D14: using guessed type int (*off_560D14)(); + +//----- (004F8940) -------------------------------------------------------- +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560D14; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4F897E: variable 'lpfctx' is possibly undefined +// 560D14: using guessed type int (*off_560D14)(); + +//----- (004F89A0) -------------------------------------------------------- +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560D14; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4F89DE: variable 'lpfctx' is possibly undefined +// 560D14: using guessed type int (*off_560D14)(); + +//----- (004F8A00) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_560D30; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_5604C0; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 5604C0: using guessed type int (*off_5604C0)(); +// 560D30: using guessed type int (*off_560D30)(); + +//----- (004F8B40) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int ***a2, int a3) +{ + std::messages_byname::messages_byname(this, *a2, a3); +} + +//----- (004F8B50) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_560D30; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_5604C0; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 5604C0: using guessed type int (*off_5604C0)(); +// 560D30: using guessed type int (*off_560D30)(); + +//----- (004F8C90) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int ***a2, int a3) +{ + std::messages_byname::messages_byname(this, *a2, a3); +} + +//----- (004F8CA0) -------------------------------------------------------- +void __fastcall std::messages_byname::~messages_byname(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_560D30; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 4F8CDE: variable 'lpfctx' is possibly undefined +// 560D30: using guessed type int (*off_560D30)(); + +//----- (004F8D00) -------------------------------------------------------- +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560D30; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4F8D3E: variable 'lpfctx' is possibly undefined +// 560D30: using guessed type int (*off_560D30)(); + +//----- (004F8D60) -------------------------------------------------------- +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560D30; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 4F8D9E: variable 'lpfctx' is possibly undefined +// 560D30: using guessed type int (*off_560D30)(); + +//----- (004F8DC0) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_560D4C; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_5604DC; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::numpunct::_M_initialize_numpunct(this, v4[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 5604DC: using guessed type int (*off_5604DC)(); +// 560D4C: using guessed type int (*off_560D4C)(); + +//----- (004F8F00) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_560D4C; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_5604DC; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::numpunct::_M_initialize_numpunct(this, v5[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 5604DC: using guessed type int (*off_5604DC)(); +// 560D4C: using guessed type int (*off_560D4C)(); + +//----- (004F9050) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_560D4C; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_5604DC; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::numpunct::_M_initialize_numpunct(this, v4[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 5604DC: using guessed type int (*off_5604DC)(); +// 560D4C: using guessed type int (*off_560D4C)(); + +//----- (004F9190) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_560D4C; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_5604DC; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::numpunct::_M_initialize_numpunct(this, v5[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 5604DC: using guessed type int (*off_5604DC)(); +// 560D4C: using guessed type int (*off_560D4C)(); + +//----- (004F92E0) -------------------------------------------------------- +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *Block) +{ + *Block = &off_5604DC; + std::numpunct::~numpunct(Block); + operator delete(Block); +} +// 5604DC: using guessed type int (*off_5604DC)(); + +//----- (004F9300) -------------------------------------------------------- +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1) +{ + *a1 = &off_5604DC; + std::numpunct::~numpunct(a1); +} +// 5604DC: using guessed type int (*off_5604DC)(); + +//----- (004F9310) -------------------------------------------------------- +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1) +{ + *a1 = &off_5604DC; + std::numpunct::~numpunct(a1); +} +// 5604DC: using guessed type int (*off_5604DC)(); + +//----- (004F9320) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_560D70; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_560500; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::numpunct::_M_initialize_numpunct(this, v4[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 560500: using guessed type int (*off_560500)(); +// 560D70: using guessed type int (*off_560D70)(); + +//----- (004F9460) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_560D70; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_560500; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::numpunct::_M_initialize_numpunct(this, v5[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 560500: using guessed type int (*off_560500)(); +// 560D70: using guessed type int (*off_560D70)(); + +//----- (004F95B0) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_560D70; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_560500; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::numpunct::_M_initialize_numpunct(this, v4[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 560500: using guessed type int (*off_560500)(); +// 560D70: using guessed type int (*off_560D70)(); + +//----- (004F96F0) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_560D70; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_560500; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::numpunct::_M_initialize_numpunct(this, v5[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 560500: using guessed type int (*off_560500)(); +// 560D70: using guessed type int (*off_560D70)(); + +//----- (004F9840) -------------------------------------------------------- +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *Block) +{ + *Block = &off_560500; + std::numpunct::~numpunct(Block); + operator delete(Block); +} +// 560500: using guessed type int (*off_560500)(); + +//----- (004F9860) -------------------------------------------------------- +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1) +{ + *a1 = &off_560500; + std::numpunct::~numpunct(a1); +} +// 560500: using guessed type int (*off_560500)(); + +//----- (004F9870) -------------------------------------------------------- +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1) +{ + *a1 = &off_560500; + std::numpunct::~numpunct(a1); +} +// 560500: using guessed type int (*off_560500)(); + +//----- (004F9880) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560524; + result = a3 != 0; + this[1] = result; + return result; +} +// 560524: using guessed type int (*off_560524)(); + +//----- (004F98A0) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560524; + result = a3 != 0; + this[1] = result; + return result; +} +// 560524: using guessed type int (*off_560524)(); + +//----- (004F98C0) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560524; + result = a3 != 0; + this[1] = result; + return result; +} +// 560524: using guessed type int (*off_560524)(); + +//----- (004F98E0) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560524; + result = a3 != 0; + this[1] = result; + return result; +} +// 560524: using guessed type int (*off_560524)(); + +//----- (004F9900) -------------------------------------------------------- +void __fastcall std::time_get_byname>::~time_get_byname(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560D94; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4F990C: variable 'Blocka' is possibly undefined +// 560D94: using guessed type int (*off_560D94)(); + +//----- (004F9920) -------------------------------------------------------- +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560D94; + std::locale::facet::~facet(a1); +} +// 4F9920: variable 'v1' is possibly undefined +// 560D94: using guessed type int (*off_560D94)(); + +//----- (004F9930) -------------------------------------------------------- +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560D94; + std::locale::facet::~facet(a1); +} +// 4F9930: variable 'v1' is possibly undefined +// 560D94: using guessed type int (*off_560D94)(); + +//----- (004F9940) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_56054C; + result = a3 != 0; + this[1] = result; + return result; +} +// 56054C: using guessed type int (*off_56054C)(); + +//----- (004F9960) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_56054C; + result = a3 != 0; + this[1] = result; + return result; +} +// 56054C: using guessed type int (*off_56054C)(); + +//----- (004F9980) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_56054C; + result = a3 != 0; + this[1] = result; + return result; +} +// 56054C: using guessed type int (*off_56054C)(); + +//----- (004F99A0) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_56054C; + result = a3 != 0; + this[1] = result; + return result; +} +// 56054C: using guessed type int (*off_56054C)(); + +//----- (004F99C0) -------------------------------------------------------- +void __fastcall std::time_get_byname>::~time_get_byname(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560DBC; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4F99CC: variable 'Blocka' is possibly undefined +// 560DBC: using guessed type int (*off_560DBC)(); + +//----- (004F99E0) -------------------------------------------------------- +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560DBC; + std::locale::facet::~facet(a1); +} +// 4F99E0: variable 'v1' is possibly undefined +// 560DBC: using guessed type int (*off_560DBC)(); + +//----- (004F99F0) -------------------------------------------------------- +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560DBC; + std::locale::facet::~facet(a1); +} +// 4F99F0: variable 'v1' is possibly undefined +// 560DBC: using guessed type int (*off_560DBC)(); + +//----- (004F9A00) -------------------------------------------------------- +BOOL __thiscall std::time_put_byname>::time_put_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560574; + result = a3 != 0; + this[1] = result; + return result; +} +// 560574: using guessed type int (*off_560574)(); + +//----- (004F9A20) -------------------------------------------------------- +BOOL __thiscall std::time_put_byname>::time_put_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560574; + result = a3 != 0; + this[1] = result; + return result; +} +// 560574: using guessed type int (*off_560574)(); + +//----- (004F9A40) -------------------------------------------------------- +BOOL __thiscall std::time_put_byname>::time_put_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560574; + result = a3 != 0; + this[1] = result; + return result; +} +// 560574: using guessed type int (*off_560574)(); + +//----- (004F9A60) -------------------------------------------------------- +BOOL __thiscall std::time_put_byname>::time_put_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560574; + result = a3 != 0; + this[1] = result; + return result; +} +// 560574: using guessed type int (*off_560574)(); + +//----- (004F9A80) -------------------------------------------------------- +BOOL __thiscall std::time_put_byname>::time_put_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560574; + result = a3 != 0; + this[1] = result; + return result; +} +// 560574: using guessed type int (*off_560574)(); + +//----- (004F9AA0) -------------------------------------------------------- +BOOL __thiscall std::time_put_byname>::time_put_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560574; + result = a3 != 0; + this[1] = result; + return result; +} +// 560574: using guessed type int (*off_560574)(); + +//----- (004F9AC0) -------------------------------------------------------- +void __fastcall std::time_put_byname>::~time_put_byname(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560DE4; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4F9ACC: variable 'Blocka' is possibly undefined +// 560DE4: using guessed type int (*off_560DE4)(); + +//----- (004F9AE0) -------------------------------------------------------- +void __cdecl std::time_put_byname>::~time_put_byname(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560DE4; + std::locale::facet::~facet(a1); +} +// 4F9AE0: variable 'v1' is possibly undefined +// 560DE4: using guessed type int (*off_560DE4)(); + +//----- (004F9AF0) -------------------------------------------------------- +void __cdecl std::time_put_byname>::~time_put_byname(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560DE4; + std::locale::facet::~facet(a1); +} +// 4F9AF0: variable 'v1' is possibly undefined +// 560DE4: using guessed type int (*off_560DE4)(); + +//----- (004F9B00) -------------------------------------------------------- +BOOL __thiscall std::time_put_byname>::time_put_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560588; + result = a3 != 0; + this[1] = result; + return result; +} +// 560588: using guessed type int (*off_560588)(); + +//----- (004F9B20) -------------------------------------------------------- +BOOL __thiscall std::time_put_byname>::time_put_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560588; + result = a3 != 0; + this[1] = result; + return result; +} +// 560588: using guessed type int (*off_560588)(); + +//----- (004F9B40) -------------------------------------------------------- +BOOL __thiscall std::time_put_byname>::time_put_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560588; + result = a3 != 0; + this[1] = result; + return result; +} +// 560588: using guessed type int (*off_560588)(); + +//----- (004F9B60) -------------------------------------------------------- +BOOL __thiscall std::time_put_byname>::time_put_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560588; + result = a3 != 0; + this[1] = result; + return result; +} +// 560588: using guessed type int (*off_560588)(); + +//----- (004F9B80) -------------------------------------------------------- +BOOL __thiscall std::time_put_byname>::time_put_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560588; + result = a3 != 0; + this[1] = result; + return result; +} +// 560588: using guessed type int (*off_560588)(); + +//----- (004F9BA0) -------------------------------------------------------- +BOOL __thiscall std::time_put_byname>::time_put_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_560588; + result = a3 != 0; + this[1] = result; + return result; +} +// 560588: using guessed type int (*off_560588)(); + +//----- (004F9BC0) -------------------------------------------------------- +void __fastcall std::time_put_byname>::~time_put_byname(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560DF8; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4F9BCC: variable 'Blocka' is possibly undefined +// 560DF8: using guessed type int (*off_560DF8)(); + +//----- (004F9BE0) -------------------------------------------------------- +void __cdecl std::time_put_byname>::~time_put_byname(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560DF8; + std::locale::facet::~facet(a1); +} +// 4F9BE0: variable 'v1' is possibly undefined +// 560DF8: using guessed type int (*off_560DF8)(); + +//----- (004F9BF0) -------------------------------------------------------- +void __cdecl std::time_put_byname>::~time_put_byname(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560DF8; + std::locale::facet::~facet(a1); +} +// 4F9BF0: variable 'v1' is possibly undefined +// 560DF8: using guessed type int (*off_560DF8)(); + +//----- (004F9C00) -------------------------------------------------------- +void __userpurge std::underflow_error::underflow_error(_DWORD *a1@, std::underflow_error *this, const char *a3) +{ + int v4; // [esp+5Fh] [ebp-9h] BYREF + + *a1 = &off_5601E8; + std::string::string(a1 + 1, (char *)this, (int)&v4); + *a1 = &off_56059C; +} +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 56059C: using guessed type void (__cdecl *off_56059C)(std::underflow_error *__hidden this); + +//----- (004F9C90) -------------------------------------------------------- +void __thiscall std::underflow_error::underflow_error(_DWORD *this, int a2) +{ + unsigned int v2; // [esp+8h] [ebp-50h] + + *this = &off_5601E8; + std::__cow_string::__cow_string(this + 1, *(std::__cow_string **)a2, *(_DWORD *)(a2 + 4), v2); + *this = &off_56059C; +} +// 4F9CE4: variable 'v2' is possibly undefined +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 56059C: using guessed type void (__cdecl *off_56059C)(std::underflow_error *__hidden this); + +//----- (004F9D30) -------------------------------------------------------- +void __userpurge std::underflow_error::underflow_error( + _DWORD *a1@, + std::underflow_error *this, + const std::string *a3) +{ + const std::string *v3; // [esp+4h] [ebp-54h] + + *a1 = &off_5601E8; + std::string::string(a1 + 1, this, v3); + *a1 = &off_56059C; +} +// 4F9D78: variable 'v3' is possibly undefined +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 56059C: using guessed type void (__cdecl *off_56059C)(std::underflow_error *__hidden this); + +//----- (004F9DC0) -------------------------------------------------------- +void __fastcall std::underflow_error::~underflow_error(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_56059C; + std::runtime_error::~runtime_error(Block); + operator delete(a1); +} +// 4F9DCC: variable 'Block' is possibly undefined +// 56059C: using guessed type void (__cdecl *off_56059C)(std::underflow_error *__hidden this); + +//----- (004F9DE0) -------------------------------------------------------- +void __cdecl std::underflow_error::~underflow_error(std::exception *a1) +{ + _DWORD *v1; // ecx + int v2; // eax + int v3; // ecx + int v4; // eax + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v2 = _CRT_MT; + *v1 = &off_5601E8; + v3 = v1[1]; + if ( v2 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v3 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v4 = *(_DWORD *)(v3 - 4); + *(_DWORD *)(v3 - 4) = v4 - 1; + if ( v4 > 0 ) + { +LABEL_3: + std::exception::~exception(a1); + return; + } + } + std::string::_Rep::_M_destroy((void *)(v3 - 12), (int)v5); + std::exception::~exception(a1); +} +// 4F9DEB: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 5601E8: using guessed type void (__cdecl *off_5601E8)(std::runtime_error *__hidden this); +// 4F9DE0: using guessed type int var_D[3]; + +//----- (004F9E40) -------------------------------------------------------- +int __fastcall std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release(volatile signed __int32 *a1) +{ + signed __int32 v1; // eax + int result; // eax + signed __int32 v3; // eax + int v4; // [esp-1Ch] [ebp-1Ch] + int v5; // [esp-18h] [ebp-18h] + int v6; // [esp-14h] [ebp-14h] + volatile signed __int32 *v7; // [esp-10h] [ebp-10h] + int v8; // [esp-Ch] [ebp-Ch] + int v9; // [esp-8h] [ebp-8h] + + if ( _CRT_MT ) + { + v1 = _InterlockedExchangeAdd(a1 + 1, 0xFFFFFFFF); + } + else + { + v1 = *((_DWORD *)a1 + 1); + *((_DWORD *)a1 + 1) = v1 - 1; + } + result = v1 - 1; + if ( !result ) + { + (*(void (__stdcall **)(int, int, int, volatile signed __int32 *, int, int))(*a1 + 8))(v4, v5, v6, a1, v8, v9); + if ( _CRT_MT ) + { + v3 = _InterlockedExchangeAdd(v7 + 2, 0xFFFFFFFF); + } + else + { + v3 = *((_DWORD *)v7 + 2); + *((_DWORD *)v7 + 2) = v3 - 1; + } + result = v3 - 1; + if ( !result ) + return (*(int (__fastcall **)(volatile signed __int32 *))(*v7 + 12))(v7); + } + return result; +} +// 4F9E6A: variable 'v4' is possibly undefined +// 4F9E6A: variable 'v5' is possibly undefined +// 4F9E6A: variable 'v6' is possibly undefined +// 4F9E6A: variable 'v8' is possibly undefined +// 4F9E6A: variable 'v9' is possibly undefined +// 4F9E7C: variable 'v7' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004F9E9C) -------------------------------------------------------- +void __fastcall std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy(int a1) +{ + if ( _CRT_MT ) + _InterlockedIncrement((volatile signed __int32 *)(a1 + 4)); + else + ++*(_DWORD *)(a1 + 4); +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (004F9EB0) -------------------------------------------------------- +void __thiscall std::__numpunct_cache::_M_cache(int this, int a2) +{ + _DWORD *(__thiscall *v2)(char *, int); // eax + unsigned int v3; // eax + bool v4; // al + _DWORD *(__thiscall *v5)(int *, int); // eax + unsigned int v6; // eax + _DWORD *(__thiscall *v7)(int *, int); // eax + unsigned int v8; // eax + int (__fastcall *v9)(int); // eax + char v10; // al + int (__fastcall *v11)(int); // eax + char v12; // al + char v13; // al + char *v14; // edx + void (__thiscall *v15)(_BYTE *, char *, char *, int); // eax + char v16; // al + void (__thiscall *v17)(_BYTE *, char *, char *, int); // eax + int v18; // ecx + int v19; // eax + int v20; // ecx + int v21; // eax + int v22; // ecx + int v23; // eax + unsigned int v24; // [esp+Ch] [ebp-7Ch] + unsigned int v25; // [esp+Ch] [ebp-7Ch] + unsigned int v26; // [esp+Ch] [ebp-7Ch] + char *v27; // [esp+1Ch] [ebp-6Ch] + char *v28; // [esp+1Ch] [ebp-6Ch] + std::string *v29; // [esp+24h] [ebp-64h] + std::string *v30; // [esp+28h] [ebp-60h] + std::string *Block; // [esp+2Ch] [ebp-5Ch] + _DWORD *v32; // [esp+34h] [ebp-54h] + _BYTE *v33; // [esp+34h] [ebp-54h] + char v35[7]; // [esp+71h] [ebp-17h] BYREF + int v36; // [esp+78h] [ebp-10h] BYREF + int v37[3]; // [esp+7Ch] [ebp-Ch] BYREF + + v32 = std::use_facet>(a2); + v2 = *(_DWORD *(__thiscall **)(char *, int))(*v32 + 16); + if ( (char *)v2 == (char *)std::numpunct::do_grouping ) + std::string::string(&v35[3], *(char **)(v32[2] + 8), (int)v37); + else + v2(&v35[3], (int)v32); + v3 = *(_DWORD *)(*(_DWORD *)&v35[3] - 12); + *(_DWORD *)(this + 12) = v3; + Block = (std::string *)operator new[](v3); + std::string::copy(&v35[3], Block, *(_DWORD *)(this + 12), 0, v24); + v4 = 0; + if ( *(_DWORD *)(this + 12) ) + v4 = (unsigned __int8)(*(_BYTE *)Block - 1) <= 0x7Du; + *(_BYTE *)(this + 16) = v4; + v5 = *(_DWORD *(__thiscall **)(int *, int))(*v32 + 20); + if ( v5 == std::numpunct::do_truename ) + std::string::string(&v36, *(char **)(v32[2] + 20), (int)&v35[1]); + else + v5(&v36, (int)v32); + v6 = *(_DWORD *)(v36 - 12); + *(_DWORD *)(this + 24) = v6; + v29 = (std::string *)operator new[](v6); + std::string::copy(&v36, v29, *(_DWORD *)(this + 24), 0, v25); + v7 = *(_DWORD *(__thiscall **)(int *, int))(*v32 + 24); + if ( v7 == std::numpunct::do_falsename ) + std::string::string(v37, *(char **)(v32[2] + 28), (int)&v35[2]); + else + v7(v37, (int)v32); + v8 = *(_DWORD *)(v37[0] - 12); + *(_DWORD *)(this + 32) = v8; + v30 = (std::string *)operator new[](v8); + std::string::copy(v37, v30, *(_DWORD *)(this + 32), 0, v26); + v9 = *(int (__fastcall **)(int))(*v32 + 8); + if ( v9 == std::numpunct::do_decimal_point ) + v10 = *(_BYTE *)(v32[2] + 36); + else + v10 = v9((int)v32); + *(_BYTE *)(this + 36) = v10; + v11 = *(int (__fastcall **)(int))(*v32 + 12); + if ( v11 == std::numpunct::do_thousands_sep ) + v12 = *(_BYTE *)(v32[2] + 37); + else + v12 = v11((int)v32); + *(_BYTE *)(this + 37) = v12; + v33 = std::use_facet>(a2); + v13 = v33[28]; + v27 = std::__num_base::_S_atoms_out[0]; + v14 = std::__num_base::_S_atoms_out[0]; + if ( v13 == 1 ) + goto LABEL_17; + if ( !v13 ) + std::ctype::_M_widen_init((int)v33); + v14 = v27; + v15 = *(void (__thiscall **)(_BYTE *, char *, char *, int))(*(_DWORD *)v33 + 28); + if ( (char *)v15 == (char *)std::ctype::do_widen ) + { +LABEL_17: + *(_DWORD *)(this + 38) = *(_DWORD *)v14; + *(_DWORD *)(this + 42) = *((_DWORD *)v14 + 1); + *(_DWORD *)(this + 46) = *((_DWORD *)v14 + 2); + *(_DWORD *)(this + 50) = *((_DWORD *)v14 + 3); + *(_DWORD *)(this + 54) = *((_DWORD *)v14 + 4); + *(_DWORD *)(this + 58) = *((_DWORD *)v14 + 5); + *(_DWORD *)(this + 62) = *((_DWORD *)v14 + 6); + *(_DWORD *)(this + 66) = *((_DWORD *)v14 + 7); + *(_DWORD *)(this + 70) = *((_DWORD *)v14 + 8); + } + else + { + v15(v33, v27, v27 + 36, this + 38); + } + v28 = std::__num_base::_S_atoms_in[0]; + v16 = v33[28]; + if ( v16 == 1 ) + goto LABEL_21; + if ( v16 ) + { + v17 = *(void (__thiscall **)(_BYTE *, char *, char *, int))(*(_DWORD *)v33 + 28); + if ( (char *)v17 == (char *)std::ctype::do_widen ) + { +LABEL_21: + *(_DWORD *)(this + 74) = *(_DWORD *)v28; + *(_DWORD *)(this + 78) = *((_DWORD *)v28 + 1); + *(_DWORD *)(this + 82) = *((_DWORD *)v28 + 2); + *(_DWORD *)(this + 86) = *((_DWORD *)v28 + 3); + *(_DWORD *)(this + 90) = *((_DWORD *)v28 + 4); + *(_DWORD *)(this + 94) = *((_DWORD *)v28 + 5); + *(_WORD *)(this + 98) = *((_WORD *)v28 + 12); + goto LABEL_22; + } + } + else + { + std::ctype::_M_widen_init((int)v33); + v17 = *(void (__thiscall **)(_BYTE *, char *, char *, int))(*(_DWORD *)v33 + 28); + if ( (char *)v17 == (char *)std::ctype::do_widen ) + goto LABEL_21; + } + v17(v33, v28, v28 + 26, this + 74); +LABEL_22: + *(_DWORD *)(this + 8) = Block; + *(_DWORD *)(this + 20) = v29; + v18 = v37[0]; + *(_DWORD *)(this + 28) = v30; + *(_BYTE *)(this + 100) = 1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v18 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_24: + v20 = v36; + if ( !_CRT_MT ) + goto LABEL_25; + goto LABEL_31; + } + } + else + { + v19 = *(_DWORD *)(v18 - 4); + *(_DWORD *)(v18 - 4) = v19 - 1; + if ( v19 > 0 ) + goto LABEL_24; + } + std::string::_Rep::_M_destroy((void *)(v18 - 12), (int)&v35[2]); + v20 = v36; + if ( !_CRT_MT ) + { +LABEL_25: + v21 = *(_DWORD *)(v20 - 4); + *(_DWORD *)(v20 - 4) = v21 - 1; + if ( v21 > 0 ) + goto LABEL_26; + goto LABEL_32; + } +LABEL_31: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v20 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_26: + v22 = *(_DWORD *)&v35[3]; + if ( !_CRT_MT ) + goto LABEL_27; + goto LABEL_33; + } +LABEL_32: + std::string::_Rep::_M_destroy((void *)(v20 - 12), (int)v37); + v22 = *(_DWORD *)&v35[3]; + if ( !_CRT_MT ) + { +LABEL_27: + v23 = *(_DWORD *)(v22 - 4); + *(_DWORD *)(v22 - 4) = v23 - 1; + if ( v23 > 0 ) + return; +LABEL_34: + std::string::_Rep::_M_destroy((void *)(v22 - 12), (int)v37); + return; + } +LABEL_33: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v22 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_34; +} +// 4F9F6D: variable 'v24' is possibly undefined +// 4FA00F: variable 'v25' is possibly undefined +// 4FA091: variable 'v26' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53F580: using guessed type char *std::__num_base::_S_atoms_in[3]; +// 53F584: using guessed type char *std::__num_base::_S_atoms_out[2]; + +//----- (004FA510) -------------------------------------------------------- +int __thiscall std::__numpunct_cache::__numpunct_cache(_DWORD *this, int a2) +{ + int result; // eax + + *this = &off_5605B0; + this[2] = 0; + this[3] = 0; + *((_BYTE *)this + 16) = 0; + this[1] = a2 != 0; + result = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + *((_WORD *)this + 18) = 0; + *((_BYTE *)this + 100) = 0; + return result; +} +// 5605B0: using guessed type int (*off_5605B0)(); + +//----- (004FA560) -------------------------------------------------------- +int __thiscall std::__numpunct_cache::__numpunct_cache(_DWORD *this, int a2) +{ + int result; // eax + + *this = &off_5605B0; + this[2] = 0; + this[3] = 0; + *((_BYTE *)this + 16) = 0; + this[1] = a2 != 0; + result = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + *((_WORD *)this + 18) = 0; + *((_BYTE *)this + 100) = 0; + return result; +} +// 5605B0: using guessed type int (*off_5605B0)(); + +//----- (004FA5B0) -------------------------------------------------------- +void __fastcall std::__numpunct_cache::~__numpunct_cache(void *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + std::__numpunct_cache::~__numpunct_cache((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 4FA5F0: variable 'lpfctx' is possibly undefined + +//----- (004FA640) -------------------------------------------------------- +void __cdecl std::__numpunct_cache::~__numpunct_cache(std::locale::facet *a1) +{ + int v1; // ecx + int v2; // ebx + bool v3; // zf + + v2 = v1; + v3 = *(_BYTE *)(v1 + 100) == 0; + *(_DWORD *)v1 = &off_5605B0; + if ( !v3 ) + { + if ( *(_DWORD *)(v1 + 8) ) + operator delete[](*(void **)(v1 + 8)); + if ( *(_DWORD *)(v2 + 20) ) + operator delete[](*(void **)(v2 + 20)); + if ( *(_DWORD *)(v2 + 28) ) + operator delete[](*(void **)(v2 + 28)); + } + std::locale::facet::~facet(a1); +} +// 4FA641: variable 'v1' is possibly undefined +// 5605B0: using guessed type int (*off_5605B0)(); + +//----- (004FA690) -------------------------------------------------------- +void __cdecl std::__numpunct_cache::~__numpunct_cache(std::locale::facet *a1) +{ + int v1; // ecx + int v2; // ebx + bool v3; // zf + + v2 = v1; + v3 = *(_BYTE *)(v1 + 100) == 0; + *(_DWORD *)v1 = &off_5605B0; + if ( !v3 ) + { + if ( *(_DWORD *)(v1 + 8) ) + operator delete[](*(void **)(v1 + 8)); + if ( *(_DWORD *)(v2 + 20) ) + operator delete[](*(void **)(v2 + 20)); + if ( *(_DWORD *)(v2 + 28) ) + operator delete[](*(void **)(v2 + 28)); + } + std::locale::facet::~facet(a1); +} +// 4FA691: variable 'v1' is possibly undefined +// 5605B0: using guessed type int (*off_5605B0)(); + +//----- (004FA6E0) -------------------------------------------------------- +void __thiscall std::__numpunct_cache::_M_cache(int this, int a2) +{ + _DWORD *(__thiscall *v2)(char *, int); // eax + unsigned int v3; // eax + bool v4; // al + _DWORD *(__thiscall *v5)(int *, int); // eax + unsigned int v6; // eax + _DWORD *(__thiscall *v7)(int *, int); // eax + unsigned int v8; // eax + int v9; // eax + int (__fastcall *v10)(int); // edx + __int16 v11; // dx + int (__fastcall *v12)(int); // eax + __int16 v13; // ax + int v14; // ecx + int v15; // eax + int v16; // ecx + int v17; // eax + int v18; // ecx + int v19; // eax + unsigned int v20; // [esp+Ch] [ebp-6Ch] + _WORD *v21; // [esp+14h] [ebp-64h] + _WORD *v22; // [esp+18h] [ebp-60h] + std::string *Block; // [esp+1Ch] [ebp-5Ch] + _DWORD *v24; // [esp+24h] [ebp-54h] + void *v25; // [esp+24h] [ebp-54h] + char v27[7]; // [esp+61h] [ebp-17h] BYREF + int v28; // [esp+68h] [ebp-10h] BYREF + int v29[2]; // [esp+6Ch] [ebp-Ch] BYREF + + v24 = std::use_facet>(a2); + v2 = *(_DWORD *(__thiscall **)(char *, int))(*v24 + 16); + if ( (char *)v2 == (char *)std::numpunct::do_grouping ) + std::string::string(&v27[3], *(char **)(v24[2] + 8), (int)v29); + else + v2(&v27[3], (int)v24); + v3 = *(_DWORD *)(*(_DWORD *)&v27[3] - 12); + *(_DWORD *)(this + 12) = v3; + Block = (std::string *)operator new[](v3); + std::string::copy(&v27[3], Block, *(_DWORD *)(this + 12), 0, v20); + v4 = 0; + if ( *(_DWORD *)(this + 12) ) + v4 = (unsigned __int8)(*(_BYTE *)Block - 1) <= 0x7Du; + *(_BYTE *)(this + 16) = v4; + v5 = *(_DWORD *(__thiscall **)(int *, int))(*v24 + 20); + if ( v5 == std::numpunct::do_truename ) + std::wstring::basic_string(&v28, *(wchar_t **)(v24[2] + 20), (int)&v27[1]); + else + v5(&v28, (int)v24); + v6 = *(_DWORD *)(v28 - 12); + *(_DWORD *)(this + 24) = v6; + if ( v6 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v21 = (_WORD *)operator new[](2 * v6); + std::wstring::copy(&v28, v21, *(_DWORD *)(this + 24), 0); + v7 = *(_DWORD *(__thiscall **)(int *, int))(*v24 + 24); + if ( v7 == std::numpunct::do_falsename ) + std::wstring::basic_string(v29, *(wchar_t **)(v24[2] + 28), (int)&v27[2]); + else + v7(v29, (int)v24); + v8 = *(_DWORD *)(v29[0] - 12); + *(_DWORD *)(this + 32) = v8; + if ( v8 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v22 = (_WORD *)operator new[](2 * v8); + std::wstring::copy(v29, v22, *(_DWORD *)(this + 32), 0); + v9 = *v24; + v10 = *(int (__fastcall **)(int))(*v24 + 8); + if ( v10 == std::numpunct::do_decimal_point ) + { + v11 = *(_WORD *)(v24[2] + 36); + } + else + { + v11 = v10((int)v24); + v9 = *v24; + } + v12 = *(int (__fastcall **)(int))(v9 + 12); + *(_WORD *)(this + 36) = v11; + if ( v12 == std::numpunct::do_thousands_sep ) + v13 = *(_WORD *)(v24[2] + 38); + else + v13 = v12((int)v24); + *(_WORD *)(this + 38) = v13; + v25 = std::use_facet>(a2); + (*(void (__thiscall **)(void *, char *, char *, int))(*(_DWORD *)v25 + 44))( + v25, + std::__num_base::_S_atoms_out[0], + std::__num_base::_S_atoms_out[0] + 36, + this + 40); + (*(void (__thiscall **)(void *, char *, char *, int))(*(_DWORD *)v25 + 44))( + v25, + std::__num_base::_S_atoms_in[0], + std::__num_base::_S_atoms_in[0] + 26, + this + 112); + v14 = v29[0]; + *(_DWORD *)(this + 8) = Block; + *(_BYTE *)(this + 164) = 1; + *(_DWORD *)(this + 20) = v21; + *(_DWORD *)(this + 28) = v22; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v14 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_17: + v16 = v28; + if ( !_CRT_MT ) + goto LABEL_18; + goto LABEL_24; + } + } + else + { + v15 = *(_DWORD *)(v14 - 4); + *(_DWORD *)(v14 - 4) = v15 - 1; + if ( v15 > 0 ) + goto LABEL_17; + } + std::wstring::_Rep::_M_destroy((void *)(v14 - 12), (int)&v27[2]); + v16 = v28; + if ( !_CRT_MT ) + { +LABEL_18: + v17 = *(_DWORD *)(v16 - 4); + *(_DWORD *)(v16 - 4) = v17 - 1; + if ( v17 > 0 ) + goto LABEL_19; + goto LABEL_25; + } +LABEL_24: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v16 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_19: + v18 = *(_DWORD *)&v27[3]; + if ( !_CRT_MT ) + goto LABEL_20; + goto LABEL_26; + } +LABEL_25: + std::wstring::_Rep::_M_destroy((void *)(v16 - 12), (int)v29); + v18 = *(_DWORD *)&v27[3]; + if ( !_CRT_MT ) + { +LABEL_20: + v19 = *(_DWORD *)(v18 - 4); + *(_DWORD *)(v18 - 4) = v19 - 1; + if ( v19 > 0 ) + return; +LABEL_27: + std::string::_Rep::_M_destroy((void *)(v18 - 12), (int)v29); + return; + } +LABEL_26: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v18 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_27; +} +// 4FA79B: variable 'v20' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53F580: using guessed type char *std::__num_base::_S_atoms_in[3]; +// 53F584: using guessed type char *std::__num_base::_S_atoms_out[2]; + +//----- (004FAC60) -------------------------------------------------------- +BOOL __thiscall std::__numpunct_cache::__numpunct_cache(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_5605C0; + this[2] = 0; + this[3] = 0; + result = a2 != 0; + *((_BYTE *)this + 16) = 0; + this[1] = result; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + *((_BYTE *)this + 164) = 0; + return result; +} +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (004FACC0) -------------------------------------------------------- +BOOL __thiscall std::__numpunct_cache::__numpunct_cache(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_5605C0; + this[2] = 0; + this[3] = 0; + result = a2 != 0; + *((_BYTE *)this + 16) = 0; + this[1] = result; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + *((_BYTE *)this + 164) = 0; + return result; +} +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (004FAD20) -------------------------------------------------------- +void __fastcall std::__numpunct_cache::~__numpunct_cache(void *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + std::__numpunct_cache::~__numpunct_cache((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 4FAD60: variable 'lpfctx' is possibly undefined + +//----- (004FADB0) -------------------------------------------------------- +void __cdecl std::__numpunct_cache::~__numpunct_cache(std::locale::facet *a1) +{ + int v1; // ecx + int v2; // ebx + bool v3; // zf + + v2 = v1; + v3 = *(_BYTE *)(v1 + 164) == 0; + *(_DWORD *)v1 = &off_5605C0; + if ( !v3 ) + { + if ( *(_DWORD *)(v1 + 8) ) + operator delete[](*(void **)(v1 + 8)); + if ( *(_DWORD *)(v2 + 20) ) + operator delete[](*(void **)(v2 + 20)); + if ( *(_DWORD *)(v2 + 28) ) + operator delete[](*(void **)(v2 + 28)); + } + std::locale::facet::~facet(a1); +} +// 4FADB1: variable 'v1' is possibly undefined +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (004FAE00) -------------------------------------------------------- +void __cdecl std::__numpunct_cache::~__numpunct_cache(std::locale::facet *a1) +{ + int v1; // ecx + int v2; // ebx + bool v3; // zf + + v2 = v1; + v3 = *(_BYTE *)(v1 + 164) == 0; + *(_DWORD *)v1 = &off_5605C0; + if ( !v3 ) + { + if ( *(_DWORD *)(v1 + 8) ) + operator delete[](*(void **)(v1 + 8)); + if ( *(_DWORD *)(v2 + 20) ) + operator delete[](*(void **)(v2 + 20)); + if ( *(_DWORD *)(v2 + 28) ) + operator delete[](*(void **)(v2 + 28)); + } + std::locale::facet::~facet(a1); +} +// 4FAE01: variable 'v1' is possibly undefined +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (004FAE50) -------------------------------------------------------- +void __userpurge std::invalid_argument::invalid_argument(_DWORD *a1@, std::invalid_argument *this, const char *a3) +{ + int v4; // [esp+5Fh] [ebp-9h] BYREF + + *a1 = &off_55FF90; + std::string::string(a1 + 1, (char *)this, (int)&v4); + *a1 = &off_5605D0; +} +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 5605D0: using guessed type void (__cdecl *off_5605D0)(std::invalid_argument *__hidden this); + +//----- (004FAEE0) -------------------------------------------------------- +void __thiscall std::invalid_argument::invalid_argument(_DWORD *this, int a2) +{ + unsigned int v2; // [esp+8h] [ebp-50h] + + *this = &off_55FF90; + std::__cow_string::__cow_string(this + 1, *(std::__cow_string **)a2, *(_DWORD *)(a2 + 4), v2); + *this = &off_5605D0; +} +// 4FAF34: variable 'v2' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 5605D0: using guessed type void (__cdecl *off_5605D0)(std::invalid_argument *__hidden this); + +//----- (004FAF80) -------------------------------------------------------- +void __userpurge std::invalid_argument::invalid_argument( + _DWORD *a1@, + std::invalid_argument *this, + const std::string *a3) +{ + const std::string *v3; // [esp+4h] [ebp-54h] + + *a1 = &off_55FF90; + std::string::string(a1 + 1, this, v3); + *a1 = &off_5605D0; +} +// 4FAFC8: variable 'v3' is possibly undefined +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 5605D0: using guessed type void (__cdecl *off_5605D0)(std::invalid_argument *__hidden this); + +//----- (004FB010) -------------------------------------------------------- +void __fastcall std::invalid_argument::~invalid_argument(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_5605D0; + std::logic_error::~logic_error(Block); + operator delete(a1); +} +// 4FB01C: variable 'Block' is possibly undefined +// 5605D0: using guessed type void (__cdecl *off_5605D0)(std::invalid_argument *__hidden this); + +//----- (004FB030) -------------------------------------------------------- +void __cdecl std::invalid_argument::~invalid_argument(std::exception *a1) +{ + _DWORD *v1; // ecx + int v2; // eax + int v3; // ecx + int v4; // eax + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v2 = _CRT_MT; + *v1 = &off_55FF90; + v3 = v1[1]; + if ( v2 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v3 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v4 = *(_DWORD *)(v3 - 4); + *(_DWORD *)(v3 - 4) = v4 - 1; + if ( v4 > 0 ) + { +LABEL_3: + std::exception::~exception(a1); + return; + } + } + std::string::_Rep::_M_destroy((void *)(v3 - 12), (int)v5); + std::exception::~exception(a1); +} +// 4FB03B: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55FF90: using guessed type void (__cdecl *off_55FF90)(std::logic_error *__hidden this); +// 4FB030: using guessed type int var_D[3]; + +//----- (004FB090) -------------------------------------------------------- +int *__fastcall std::_Rb_tree_iterator>>::operator++( + int *a1) +{ + *a1 = std::_Rb_tree_increment(*a1); + return a1; +} + +//----- (004FB0B0) -------------------------------------------------------- +BOOL __thiscall std::__timepunct_cache::__timepunct_cache(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_5605E4; + this[2] = 0; + this[3] = 0; + result = a2 != 0; + this[4] = 0; + this[1] = result; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + this[10] = 0; + this[11] = 0; + this[12] = 0; + this[13] = 0; + this[14] = 0; + this[15] = 0; + this[16] = 0; + this[17] = 0; + this[18] = 0; + this[19] = 0; + this[20] = 0; + this[21] = 0; + this[22] = 0; + this[23] = 0; + this[24] = 0; + this[25] = 0; + this[26] = 0; + this[27] = 0; + this[28] = 0; + this[29] = 0; + this[30] = 0; + this[31] = 0; + this[32] = 0; + this[33] = 0; + this[34] = 0; + this[35] = 0; + this[36] = 0; + this[37] = 0; + this[38] = 0; + this[39] = 0; + this[40] = 0; + this[41] = 0; + this[42] = 0; + this[43] = 0; + this[44] = 0; + this[45] = 0; + this[46] = 0; + this[47] = 0; + this[48] = 0; + *((_BYTE *)this + 196) = 0; + return result; +} +// 5605E4: using guessed type int (*off_5605E4)(); + +//----- (004FB250) -------------------------------------------------------- +BOOL __thiscall std::__timepunct_cache::__timepunct_cache(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_5605E4; + this[2] = 0; + this[3] = 0; + result = a2 != 0; + this[4] = 0; + this[1] = result; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + this[10] = 0; + this[11] = 0; + this[12] = 0; + this[13] = 0; + this[14] = 0; + this[15] = 0; + this[16] = 0; + this[17] = 0; + this[18] = 0; + this[19] = 0; + this[20] = 0; + this[21] = 0; + this[22] = 0; + this[23] = 0; + this[24] = 0; + this[25] = 0; + this[26] = 0; + this[27] = 0; + this[28] = 0; + this[29] = 0; + this[30] = 0; + this[31] = 0; + this[32] = 0; + this[33] = 0; + this[34] = 0; + this[35] = 0; + this[36] = 0; + this[37] = 0; + this[38] = 0; + this[39] = 0; + this[40] = 0; + this[41] = 0; + this[42] = 0; + this[43] = 0; + this[44] = 0; + this[45] = 0; + this[46] = 0; + this[47] = 0; + this[48] = 0; + *((_BYTE *)this + 196) = 0; + return result; +} +// 5605E4: using guessed type int (*off_5605E4)(); + +//----- (004FB3F0) -------------------------------------------------------- +void __fastcall std::__timepunct_cache::~__timepunct_cache(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_5605E4; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4FB3FC: variable 'Blocka' is possibly undefined +// 5605E4: using guessed type int (*off_5605E4)(); + +//----- (004FB410) -------------------------------------------------------- +void __cdecl std::__timepunct_cache::~__timepunct_cache(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_5605E4; + std::locale::facet::~facet(a1); +} +// 4FB410: variable 'v1' is possibly undefined +// 5605E4: using guessed type int (*off_5605E4)(); + +//----- (004FB420) -------------------------------------------------------- +void __cdecl std::__timepunct_cache::~__timepunct_cache(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_5605E4; + std::locale::facet::~facet(a1); +} +// 4FB420: variable 'v1' is possibly undefined +// 5605E4: using guessed type int (*off_5605E4)(); + +//----- (004FB430) -------------------------------------------------------- +BOOL __thiscall std::__timepunct_cache::__timepunct_cache(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_5605F4; + this[2] = 0; + this[3] = 0; + result = a2 != 0; + this[4] = 0; + this[1] = result; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + this[10] = 0; + this[11] = 0; + this[12] = 0; + this[13] = 0; + this[14] = 0; + this[15] = 0; + this[16] = 0; + this[17] = 0; + this[18] = 0; + this[19] = 0; + this[20] = 0; + this[21] = 0; + this[22] = 0; + this[23] = 0; + this[24] = 0; + this[25] = 0; + this[26] = 0; + this[27] = 0; + this[28] = 0; + this[29] = 0; + this[30] = 0; + this[31] = 0; + this[32] = 0; + this[33] = 0; + this[34] = 0; + this[35] = 0; + this[36] = 0; + this[37] = 0; + this[38] = 0; + this[39] = 0; + this[40] = 0; + this[41] = 0; + this[42] = 0; + this[43] = 0; + this[44] = 0; + this[45] = 0; + this[46] = 0; + this[47] = 0; + this[48] = 0; + *((_BYTE *)this + 196) = 0; + return result; +} +// 5605F4: using guessed type int (*off_5605F4)(); + +//----- (004FB5D0) -------------------------------------------------------- +BOOL __thiscall std::__timepunct_cache::__timepunct_cache(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_5605F4; + this[2] = 0; + this[3] = 0; + result = a2 != 0; + this[4] = 0; + this[1] = result; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + this[10] = 0; + this[11] = 0; + this[12] = 0; + this[13] = 0; + this[14] = 0; + this[15] = 0; + this[16] = 0; + this[17] = 0; + this[18] = 0; + this[19] = 0; + this[20] = 0; + this[21] = 0; + this[22] = 0; + this[23] = 0; + this[24] = 0; + this[25] = 0; + this[26] = 0; + this[27] = 0; + this[28] = 0; + this[29] = 0; + this[30] = 0; + this[31] = 0; + this[32] = 0; + this[33] = 0; + this[34] = 0; + this[35] = 0; + this[36] = 0; + this[37] = 0; + this[38] = 0; + this[39] = 0; + this[40] = 0; + this[41] = 0; + this[42] = 0; + this[43] = 0; + this[44] = 0; + this[45] = 0; + this[46] = 0; + this[47] = 0; + this[48] = 0; + *((_BYTE *)this + 196) = 0; + return result; +} +// 5605F4: using guessed type int (*off_5605F4)(); + +//----- (004FB770) -------------------------------------------------------- +void __fastcall std::__timepunct_cache::~__timepunct_cache(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_5605F4; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4FB77C: variable 'Blocka' is possibly undefined +// 5605F4: using guessed type int (*off_5605F4)(); + +//----- (004FB790) -------------------------------------------------------- +void __cdecl std::__timepunct_cache::~__timepunct_cache(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_5605F4; + std::locale::facet::~facet(a1); +} +// 4FB790: variable 'v1' is possibly undefined +// 5605F4: using guessed type int (*off_5605F4)(); + +//----- (004FB7A0) -------------------------------------------------------- +void __cdecl std::__timepunct_cache::~__timepunct_cache(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_5605F4; + std::locale::facet::~facet(a1); +} +// 4FB7A0: variable 'v1' is possibly undefined +// 5605F4: using guessed type int (*off_5605F4)(); + +//----- (004FB7B0) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55FEA0; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_560604; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55FEA0: using guessed type int (*off_55FEA0)(); +// 560604: using guessed type int (*off_560604)(); + +//----- (004FB900) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55FEA0; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_560604; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55FEA0: using guessed type int (*off_55FEA0)(); +// 560604: using guessed type int (*off_560604)(); + +//----- (004FBA60) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55FEA0; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_560604; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55FEA0: using guessed type int (*off_55FEA0)(); +// 560604: using guessed type int (*off_560604)(); + +//----- (004FBBB0) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55FEA0; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_560604; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55FEA0: using guessed type int (*off_55FEA0)(); +// 560604: using guessed type int (*off_560604)(); + +//----- (004FBD10) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block) +{ + *Block = &off_560604; + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 560604: using guessed type int (*off_560604)(); + +//----- (004FBD30) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_560604; + std::moneypunct::~moneypunct(a1); +} +// 560604: using guessed type int (*off_560604)(); + +//----- (004FBD40) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_560604; + std::moneypunct::~moneypunct(a1); +} +// 560604: using guessed type int (*off_560604)(); + +//----- (004FBD50) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55FED4; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_560638; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55FED4: using guessed type int (*off_55FED4)(); +// 560638: using guessed type int (*off_560638)(); + +//----- (004FBEA0) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55FED4; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_560638; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55FED4: using guessed type int (*off_55FED4)(); +// 560638: using guessed type int (*off_560638)(); + +//----- (004FC000) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55FED4; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_560638; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55FED4: using guessed type int (*off_55FED4)(); +// 560638: using guessed type int (*off_560638)(); + +//----- (004FC150) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55FED4; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_560638; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55FED4: using guessed type int (*off_55FED4)(); +// 560638: using guessed type int (*off_560638)(); + +//----- (004FC2B0) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block) +{ + *Block = &off_560638; + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 560638: using guessed type int (*off_560638)(); + +//----- (004FC2D0) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_560638; + std::moneypunct::~moneypunct(a1); +} +// 560638: using guessed type int (*off_560638)(); + +//----- (004FC2E0) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_560638; + std::moneypunct::~moneypunct(a1); +} +// 560638: using guessed type int (*off_560638)(); + +//----- (004FC2F0) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55FF08; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_56066C; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55FF08: using guessed type int (*off_55FF08)(); +// 56066C: using guessed type int (*off_56066C)(); + +//----- (004FC440) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55FF08; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_56066C; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55FF08: using guessed type int (*off_55FF08)(); +// 56066C: using guessed type int (*off_56066C)(); + +//----- (004FC5A0) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55FF08; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_56066C; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55FF08: using guessed type int (*off_55FF08)(); +// 56066C: using guessed type int (*off_56066C)(); + +//----- (004FC6F0) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55FF08; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_56066C; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55FF08: using guessed type int (*off_55FF08)(); +// 56066C: using guessed type int (*off_56066C)(); + +//----- (004FC850) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block) +{ + *Block = &off_56066C; + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 56066C: using guessed type int (*off_56066C)(); + +//----- (004FC870) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_56066C; + std::moneypunct::~moneypunct(a1); +} +// 56066C: using guessed type int (*off_56066C)(); + +//----- (004FC880) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_56066C; + std::moneypunct::~moneypunct(a1); +} +// 56066C: using guessed type int (*off_56066C)(); + +//----- (004FC890) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55FF3C; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_5606A0; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55FF3C: using guessed type int (*off_55FF3C)(); +// 5606A0: using guessed type int (*off_5606A0)(); + +//----- (004FC9E0) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55FF3C; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_5606A0; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55FF3C: using guessed type int (*off_55FF3C)(); +// 5606A0: using guessed type int (*off_5606A0)(); + +//----- (004FCB40) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55FF3C; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_5606A0; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55FF3C: using guessed type int (*off_55FF3C)(); +// 5606A0: using guessed type int (*off_5606A0)(); + +//----- (004FCC90) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55FF3C; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_5606A0; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55FF3C: using guessed type int (*off_55FF3C)(); +// 5606A0: using guessed type int (*off_5606A0)(); + +//----- (004FCDF0) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block) +{ + *Block = &off_5606A0; + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 5606A0: using guessed type int (*off_5606A0)(); + +//----- (004FCE10) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_5606A0; + std::moneypunct::~moneypunct(a1); +} +// 5606A0: using guessed type int (*off_5606A0)(); + +//----- (004FCE20) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_5606A0; + std::moneypunct::~moneypunct(a1); +} +// 5606A0: using guessed type int (*off_5606A0)(); + +//----- (004FCE30) -------------------------------------------------------- +void __thiscall std::__moneypunct_cache::_M_cache(int this, int a2) +{ + int (__fastcall *v2)(int); // eax + char v3; // al + int (__fastcall *v4)(int); // eax + char v5; // al + int v6; // eax + int (__fastcall *v7)(int); // edx + int v8; // edx + _DWORD *(__thiscall *v9)(int *, int); // eax + unsigned int v10; // eax + bool v11; // al + _DWORD *(__thiscall *v12)(int *, int); // eax + unsigned int v13; // eax + _DWORD *(__thiscall *v14)(int *, int); // eax + unsigned int v15; // eax + _DWORD *(__thiscall *v16)(int *, int); // eax + unsigned int v17; // eax + int (__fastcall *v18)(int); // eax + int v19; // eax + int (__fastcall *v20)(int); // eax + int v21; // eax + _BYTE *v22; // eax + int v23; // ecx + char v24; // al + char *v25; // edx + void (__thiscall *v26)(int, char *, char *, int); // eax + int v27; // eax + int v28; // ecx + int v29; // eax + int v30; // ecx + int v31; // eax + int v32; // ecx + int v33; // eax + int v34; // ecx + int v35; // eax + unsigned int v36; // [esp+Ch] [ebp-8Ch] + unsigned int v37; // [esp+Ch] [ebp-8Ch] + unsigned int v38; // [esp+Ch] [ebp-8Ch] + unsigned int v39; // [esp+Ch] [ebp-8Ch] + char *v40; // [esp+18h] [ebp-80h] + std::string *v41; // [esp+20h] [ebp-78h] + std::string *v42; // [esp+24h] [ebp-74h] + std::string *v43; // [esp+28h] [ebp-70h] + std::string *Block; // [esp+2Ch] [ebp-6Ch] + _DWORD *v45; // [esp+34h] [ebp-64h] + int v46; // [esp+34h] [ebp-64h] + int v48; // [esp+7Dh] [ebp-1Bh] BYREF + int v49; // [esp+80h] [ebp-18h] BYREF + int v50; // [esp+84h] [ebp-14h] BYREF + int v51; // [esp+88h] [ebp-10h] BYREF + int v52[3]; // [esp+8Ch] [ebp-Ch] BYREF + + v45 = std::use_facet>(a2); + v2 = *(int (__fastcall **)(int))(*v45 + 8); + if ( v2 == std::moneypunct::do_decimal_point ) + v3 = *(_BYTE *)(v45[2] + 17); + else + v3 = ((int (__fastcall *)(_DWORD *, _DWORD *))v2)(v45, v45); + *(_BYTE *)(this + 17) = v3; + v4 = *(int (__fastcall **)(int))(*v45 + 12); + if ( v4 == std::moneypunct::do_thousands_sep ) + v5 = *(_BYTE *)(v45[2] + 18); + else + v5 = v4((int)v45); + *(_BYTE *)(this + 18) = v5; + v6 = *v45; + v7 = *(int (__fastcall **)(int))(*v45 + 32); + if ( v7 == std::moneypunct::do_frac_digits ) + { + v8 = *(_DWORD *)(v45[2] + 44); + } + else + { + v8 = v7((int)v45); + v6 = *v45; + } + v9 = *(_DWORD *(__thiscall **)(int *, int))(v6 + 16); + *(_DWORD *)(this + 44) = v8; + if ( v9 == std::moneypunct::do_grouping ) + std::string::string(&v49, *(char **)(v45[2] + 8), (int)v52); + else + v9(&v49, (int)v45); + v10 = *(_DWORD *)(v49 - 12); + *(_DWORD *)(this + 12) = v10; + Block = (std::string *)operator new[](v10); + std::string::copy(&v49, Block, *(_DWORD *)(this + 12), 0, v36); + v11 = 0; + if ( *(_DWORD *)(this + 12) ) + v11 = (unsigned __int8)(*(_BYTE *)Block - 1) <= 0x7Du; + *(_BYTE *)(this + 16) = v11; + v12 = *(_DWORD *(__thiscall **)(int *, int))(*v45 + 20); + if ( v12 == std::moneypunct::do_curr_symbol ) + std::string::string(&v50, *(char **)(v45[2] + 20), (int)&v48); + else + v12(&v50, (int)v45); + v13 = *(_DWORD *)(v50 - 12); + *(_DWORD *)(this + 24) = v13; + v41 = (std::string *)operator new[](v13); + std::string::copy(&v50, v41, *(_DWORD *)(this + 24), 0, v37); + v14 = *(_DWORD *(__thiscall **)(int *, int))(*v45 + 24); + if ( v14 == std::moneypunct::do_positive_sign ) + std::string::string(&v51, *(char **)(v45[2] + 28), (int)&v48 + 1); + else + v14(&v51, (int)v45); + v15 = *(_DWORD *)(v51 - 12); + *(_DWORD *)(this + 32) = v15; + v42 = (std::string *)operator new[](v15); + std::string::copy(&v51, v42, *(_DWORD *)(this + 32), 0, v38); + v16 = *(_DWORD *(__thiscall **)(int *, int))(*v45 + 28); + if ( v16 == std::moneypunct::do_negative_sign ) + std::string::string(v52, *(char **)(v45[2] + 36), (int)&v48 + 2); + else + v16(v52, (int)v45); + v17 = *(_DWORD *)(v52[0] - 12); + *(_DWORD *)(this + 40) = v17; + v43 = (std::string *)operator new[](v17); + std::string::copy(v52, v43, *(_DWORD *)(this + 40), 0, v39); + v18 = *(int (__fastcall **)(int))(*v45 + 36); + if ( v18 == std::moneypunct::do_pos_format ) + v19 = *(_DWORD *)(v45[2] + 48); + else + v19 = v18((int)v45); + *(_DWORD *)(this + 48) = v19; + v20 = *(int (__fastcall **)(int))(*v45 + 40); + if ( v20 == std::moneypunct::do_neg_format ) + v21 = *(_DWORD *)(v45[2] + 52); + else + v21 = v20((int)v45); + *(_DWORD *)(this + 52) = v21; + v22 = std::use_facet>(a2); + v23 = this; + v46 = (int)v22; + v24 = v22[28]; + v25 = std::money_base::_S_atoms; + v40 = std::money_base::_S_atoms; + if ( v24 == 1 ) + { + v27 = *(_DWORD *)std::money_base::_S_atoms; + goto LABEL_25; + } + if ( v24 ) + { + v26 = *(void (__thiscall **)(int, char *, char *, int))(*(_DWORD *)v46 + 28); + if ( (char *)v26 == (char *)std::ctype::do_widen ) + { +LABEL_24: + v25 = v40; + v23 = this; + v27 = *(_DWORD *)v40; +LABEL_25: + *(_DWORD *)(v23 + 56) = v27; + *(_DWORD *)(this + 60) = *((_DWORD *)v25 + 1); + *(_WORD *)(this + 64) = *((_WORD *)v25 + 4); + *(_BYTE *)(this + 66) = v25[10]; + goto LABEL_26; + } + } + else + { + std::ctype::_M_widen_init(v46); + v26 = *(void (__thiscall **)(int, char *, char *, int))(*(_DWORD *)v46 + 28); + if ( (char *)v26 == (char *)std::ctype::do_widen ) + goto LABEL_24; + } + v26(v46, v40, v40 + 11, this + 56); +LABEL_26: + v28 = v52[0]; + *(_DWORD *)(this + 8) = Block; + *(_BYTE *)(this + 67) = 1; + *(_DWORD *)(this + 20) = v41; + *(_DWORD *)(this + 28) = v42; + *(_DWORD *)(this + 36) = v43; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v28 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_28: + v30 = v51; + if ( !_CRT_MT ) + goto LABEL_29; + goto LABEL_37; + } + } + else + { + v29 = *(_DWORD *)(v28 - 4); + *(_DWORD *)(v28 - 4) = v29 - 1; + if ( v29 > 0 ) + goto LABEL_28; + } + std::string::_Rep::_M_destroy((void *)(v28 - 12), (int)&v48 + 2); + v30 = v51; + if ( !_CRT_MT ) + { +LABEL_29: + v31 = *(_DWORD *)(v30 - 4); + *(_DWORD *)(v30 - 4) = v31 - 1; + if ( v31 > 0 ) + goto LABEL_30; + goto LABEL_38; + } +LABEL_37: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v30 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_30: + v32 = v50; + if ( !_CRT_MT ) + goto LABEL_31; + goto LABEL_39; + } +LABEL_38: + std::string::_Rep::_M_destroy((void *)(v30 - 12), (int)v52); + v32 = v50; + if ( !_CRT_MT ) + { +LABEL_31: + v33 = *(_DWORD *)(v32 - 4); + *(_DWORD *)(v32 - 4) = v33 - 1; + if ( v33 > 0 ) + goto LABEL_32; + goto LABEL_40; + } +LABEL_39: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v32 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_32: + v34 = v49; + if ( !_CRT_MT ) + goto LABEL_33; + goto LABEL_41; + } +LABEL_40: + std::string::_Rep::_M_destroy((void *)(v32 - 12), (int)v52); + v34 = v49; + if ( !_CRT_MT ) + { +LABEL_33: + v35 = *(_DWORD *)(v34 - 4); + *(_DWORD *)(v34 - 4) = v35 - 1; + if ( v35 > 0 ) + return; +LABEL_42: + std::string::_Rep::_M_destroy((void *)(v34 - 12), (int)v52); + return; + } +LABEL_41: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v34 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_42; +} +// 4FCF4B: variable 'v36' is possibly undefined +// 4FCFED: variable 'v37' is possibly undefined +// 4FD06F: variable 'v38' is possibly undefined +// 4FD0F1: variable 'v39' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53F588: using guessed type char *std::money_base::_S_atoms; + +//----- (004FD610) -------------------------------------------------------- +int __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2) +{ + int result; // eax + + *this = &off_5606D4; + this[2] = 0; + this[3] = 0; + *((_BYTE *)this + 18) = 0; + this[1] = a2 != 0; + result = 0; + *((_WORD *)this + 8) = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + this[10] = 0; + this[11] = 0; + this[12] = 0; + this[13] = 0; + *((_BYTE *)this + 67) = 0; + return result; +} +// 5606D4: using guessed type int (*off_5606D4)(); + +//----- (004FD690) -------------------------------------------------------- +int __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2) +{ + int result; // eax + + *this = &off_5606D4; + this[2] = 0; + this[3] = 0; + *((_BYTE *)this + 18) = 0; + this[1] = a2 != 0; + result = 0; + *((_WORD *)this + 8) = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + this[10] = 0; + this[11] = 0; + this[12] = 0; + this[13] = 0; + *((_BYTE *)this + 67) = 0; + return result; +} +// 5606D4: using guessed type int (*off_5606D4)(); + +//----- (004FD710) -------------------------------------------------------- +void __fastcall std::__moneypunct_cache::~__moneypunct_cache(void *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + std::__moneypunct_cache::~__moneypunct_cache((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 4FD750: variable 'lpfctx' is possibly undefined + +//----- (004FD7A0) -------------------------------------------------------- +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1) +{ + int v1; // ecx + void **v2; // ebx + bool v3; // zf + + v2 = (void **)v1; + v3 = *(_BYTE *)(v1 + 67) == 0; + *(_DWORD *)v1 = &off_5606D4; + if ( !v3 ) + { + if ( *(_DWORD *)(v1 + 8) ) + operator delete[](*(void **)(v1 + 8)); + if ( v2[5] ) + operator delete[](v2[5]); + if ( v2[7] ) + operator delete[](v2[7]); + if ( v2[9] ) + operator delete[](v2[9]); + } + std::locale::facet::~facet(a1); +} +// 4FD7A1: variable 'v1' is possibly undefined +// 5606D4: using guessed type int (*off_5606D4)(); + +//----- (004FD800) -------------------------------------------------------- +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1) +{ + int v1; // ecx + void **v2; // ebx + bool v3; // zf + + v2 = (void **)v1; + v3 = *(_BYTE *)(v1 + 67) == 0; + *(_DWORD *)v1 = &off_5606D4; + if ( !v3 ) + { + if ( *(_DWORD *)(v1 + 8) ) + operator delete[](*(void **)(v1 + 8)); + if ( v2[5] ) + operator delete[](v2[5]); + if ( v2[7] ) + operator delete[](v2[7]); + if ( v2[9] ) + operator delete[](v2[9]); + } + std::locale::facet::~facet(a1); +} +// 4FD801: variable 'v1' is possibly undefined +// 5606D4: using guessed type int (*off_5606D4)(); + +//----- (004FD860) -------------------------------------------------------- +void __thiscall std::__moneypunct_cache::_M_cache(int this, int a2) +{ + int (__fastcall *v2)(int); // eax + char v3; // al + int (__fastcall *v4)(int); // eax + char v5; // al + int v6; // eax + int (__fastcall *v7)(int); // edx + int v8; // edx + _DWORD *(__thiscall *v9)(int *, int); // eax + unsigned int v10; // eax + bool v11; // al + _DWORD *(__thiscall *v12)(int *, int); // eax + unsigned int v13; // eax + _DWORD *(__thiscall *v14)(int *, int); // eax + unsigned int v15; // eax + _DWORD *(__thiscall *v16)(int *, int); // eax + unsigned int v17; // eax + int (__fastcall *v18)(int); // eax + int v19; // eax + int (__fastcall *v20)(int); // eax + int v21; // eax + _BYTE *v22; // eax + int v23; // ecx + char v24; // al + char *v25; // edx + void (__thiscall *v26)(int, char *, char *, int); // eax + int v27; // eax + int v28; // ecx + int v29; // eax + int v30; // ecx + int v31; // eax + int v32; // ecx + int v33; // eax + int v34; // ecx + int v35; // eax + unsigned int v36; // [esp+Ch] [ebp-8Ch] + unsigned int v37; // [esp+Ch] [ebp-8Ch] + unsigned int v38; // [esp+Ch] [ebp-8Ch] + unsigned int v39; // [esp+Ch] [ebp-8Ch] + char *v40; // [esp+18h] [ebp-80h] + std::string *v41; // [esp+20h] [ebp-78h] + std::string *v42; // [esp+24h] [ebp-74h] + std::string *v43; // [esp+28h] [ebp-70h] + std::string *Block; // [esp+2Ch] [ebp-6Ch] + _DWORD *v45; // [esp+34h] [ebp-64h] + int v46; // [esp+34h] [ebp-64h] + int v48; // [esp+7Dh] [ebp-1Bh] BYREF + int v49; // [esp+80h] [ebp-18h] BYREF + int v50; // [esp+84h] [ebp-14h] BYREF + int v51; // [esp+88h] [ebp-10h] BYREF + int v52[3]; // [esp+8Ch] [ebp-Ch] BYREF + + v45 = std::use_facet>(a2); + v2 = *(int (__fastcall **)(int))(*v45 + 8); + if ( v2 == std::moneypunct::do_decimal_point ) + v3 = *(_BYTE *)(v45[2] + 17); + else + v3 = ((int (__fastcall *)(_DWORD *, _DWORD *))v2)(v45, v45); + *(_BYTE *)(this + 17) = v3; + v4 = *(int (__fastcall **)(int))(*v45 + 12); + if ( v4 == std::moneypunct::do_thousands_sep ) + v5 = *(_BYTE *)(v45[2] + 18); + else + v5 = v4((int)v45); + *(_BYTE *)(this + 18) = v5; + v6 = *v45; + v7 = *(int (__fastcall **)(int))(*v45 + 32); + if ( v7 == std::moneypunct::do_frac_digits ) + { + v8 = *(_DWORD *)(v45[2] + 44); + } + else + { + v8 = v7((int)v45); + v6 = *v45; + } + v9 = *(_DWORD *(__thiscall **)(int *, int))(v6 + 16); + *(_DWORD *)(this + 44) = v8; + if ( v9 == std::moneypunct::do_grouping ) + std::string::string(&v49, *(char **)(v45[2] + 8), (int)v52); + else + v9(&v49, (int)v45); + v10 = *(_DWORD *)(v49 - 12); + *(_DWORD *)(this + 12) = v10; + Block = (std::string *)operator new[](v10); + std::string::copy(&v49, Block, *(_DWORD *)(this + 12), 0, v36); + v11 = 0; + if ( *(_DWORD *)(this + 12) ) + v11 = (unsigned __int8)(*(_BYTE *)Block - 1) <= 0x7Du; + *(_BYTE *)(this + 16) = v11; + v12 = *(_DWORD *(__thiscall **)(int *, int))(*v45 + 20); + if ( v12 == std::moneypunct::do_curr_symbol ) + std::string::string(&v50, *(char **)(v45[2] + 20), (int)&v48); + else + v12(&v50, (int)v45); + v13 = *(_DWORD *)(v50 - 12); + *(_DWORD *)(this + 24) = v13; + v41 = (std::string *)operator new[](v13); + std::string::copy(&v50, v41, *(_DWORD *)(this + 24), 0, v37); + v14 = *(_DWORD *(__thiscall **)(int *, int))(*v45 + 24); + if ( v14 == std::moneypunct::do_positive_sign ) + std::string::string(&v51, *(char **)(v45[2] + 28), (int)&v48 + 1); + else + v14(&v51, (int)v45); + v15 = *(_DWORD *)(v51 - 12); + *(_DWORD *)(this + 32) = v15; + v42 = (std::string *)operator new[](v15); + std::string::copy(&v51, v42, *(_DWORD *)(this + 32), 0, v38); + v16 = *(_DWORD *(__thiscall **)(int *, int))(*v45 + 28); + if ( v16 == std::moneypunct::do_negative_sign ) + std::string::string(v52, *(char **)(v45[2] + 36), (int)&v48 + 2); + else + v16(v52, (int)v45); + v17 = *(_DWORD *)(v52[0] - 12); + *(_DWORD *)(this + 40) = v17; + v43 = (std::string *)operator new[](v17); + std::string::copy(v52, v43, *(_DWORD *)(this + 40), 0, v39); + v18 = *(int (__fastcall **)(int))(*v45 + 36); + if ( v18 == std::moneypunct::do_pos_format ) + v19 = *(_DWORD *)(v45[2] + 48); + else + v19 = v18((int)v45); + *(_DWORD *)(this + 48) = v19; + v20 = *(int (__fastcall **)(int))(*v45 + 40); + if ( v20 == std::moneypunct::do_neg_format ) + v21 = *(_DWORD *)(v45[2] + 52); + else + v21 = v20((int)v45); + *(_DWORD *)(this + 52) = v21; + v22 = std::use_facet>(a2); + v23 = this; + v46 = (int)v22; + v24 = v22[28]; + v25 = std::money_base::_S_atoms; + v40 = std::money_base::_S_atoms; + if ( v24 == 1 ) + { + v27 = *(_DWORD *)std::money_base::_S_atoms; + goto LABEL_25; + } + if ( v24 ) + { + v26 = *(void (__thiscall **)(int, char *, char *, int))(*(_DWORD *)v46 + 28); + if ( (char *)v26 == (char *)std::ctype::do_widen ) + { +LABEL_24: + v25 = v40; + v23 = this; + v27 = *(_DWORD *)v40; +LABEL_25: + *(_DWORD *)(v23 + 56) = v27; + *(_DWORD *)(this + 60) = *((_DWORD *)v25 + 1); + *(_WORD *)(this + 64) = *((_WORD *)v25 + 4); + *(_BYTE *)(this + 66) = v25[10]; + goto LABEL_26; + } + } + else + { + std::ctype::_M_widen_init(v46); + v26 = *(void (__thiscall **)(int, char *, char *, int))(*(_DWORD *)v46 + 28); + if ( (char *)v26 == (char *)std::ctype::do_widen ) + goto LABEL_24; + } + v26(v46, v40, v40 + 11, this + 56); +LABEL_26: + v28 = v52[0]; + *(_DWORD *)(this + 8) = Block; + *(_BYTE *)(this + 67) = 1; + *(_DWORD *)(this + 20) = v41; + *(_DWORD *)(this + 28) = v42; + *(_DWORD *)(this + 36) = v43; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v28 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_28: + v30 = v51; + if ( !_CRT_MT ) + goto LABEL_29; + goto LABEL_37; + } + } + else + { + v29 = *(_DWORD *)(v28 - 4); + *(_DWORD *)(v28 - 4) = v29 - 1; + if ( v29 > 0 ) + goto LABEL_28; + } + std::string::_Rep::_M_destroy((void *)(v28 - 12), (int)&v48 + 2); + v30 = v51; + if ( !_CRT_MT ) + { +LABEL_29: + v31 = *(_DWORD *)(v30 - 4); + *(_DWORD *)(v30 - 4) = v31 - 1; + if ( v31 > 0 ) + goto LABEL_30; + goto LABEL_38; + } +LABEL_37: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v30 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_30: + v32 = v50; + if ( !_CRT_MT ) + goto LABEL_31; + goto LABEL_39; + } +LABEL_38: + std::string::_Rep::_M_destroy((void *)(v30 - 12), (int)v52); + v32 = v50; + if ( !_CRT_MT ) + { +LABEL_31: + v33 = *(_DWORD *)(v32 - 4); + *(_DWORD *)(v32 - 4) = v33 - 1; + if ( v33 > 0 ) + goto LABEL_32; + goto LABEL_40; + } +LABEL_39: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v32 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_32: + v34 = v49; + if ( !_CRT_MT ) + goto LABEL_33; + goto LABEL_41; + } +LABEL_40: + std::string::_Rep::_M_destroy((void *)(v32 - 12), (int)v52); + v34 = v49; + if ( !_CRT_MT ) + { +LABEL_33: + v35 = *(_DWORD *)(v34 - 4); + *(_DWORD *)(v34 - 4) = v35 - 1; + if ( v35 > 0 ) + return; +LABEL_42: + std::string::_Rep::_M_destroy((void *)(v34 - 12), (int)v52); + return; + } +LABEL_41: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v34 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_42; +} +// 4FD97B: variable 'v36' is possibly undefined +// 4FDA1D: variable 'v37' is possibly undefined +// 4FDA9F: variable 'v38' is possibly undefined +// 4FDB21: variable 'v39' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53F588: using guessed type char *std::money_base::_S_atoms; + +//----- (004FE040) -------------------------------------------------------- +int __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2) +{ + int result; // eax + + *this = &off_5606E4; + this[2] = 0; + this[3] = 0; + *((_BYTE *)this + 18) = 0; + this[1] = a2 != 0; + result = 0; + *((_WORD *)this + 8) = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + this[10] = 0; + this[11] = 0; + this[12] = 0; + this[13] = 0; + *((_BYTE *)this + 67) = 0; + return result; +} +// 5606E4: using guessed type int (*off_5606E4)(); + +//----- (004FE0C0) -------------------------------------------------------- +int __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2) +{ + int result; // eax + + *this = &off_5606E4; + this[2] = 0; + this[3] = 0; + *((_BYTE *)this + 18) = 0; + this[1] = a2 != 0; + result = 0; + *((_WORD *)this + 8) = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + this[10] = 0; + this[11] = 0; + this[12] = 0; + this[13] = 0; + *((_BYTE *)this + 67) = 0; + return result; +} +// 5606E4: using guessed type int (*off_5606E4)(); + +//----- (004FE140) -------------------------------------------------------- +void __fastcall std::__moneypunct_cache::~__moneypunct_cache(void *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + std::__moneypunct_cache::~__moneypunct_cache((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 4FE180: variable 'lpfctx' is possibly undefined + +//----- (004FE1D0) -------------------------------------------------------- +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1) +{ + int v1; // ecx + void **v2; // ebx + bool v3; // zf + + v2 = (void **)v1; + v3 = *(_BYTE *)(v1 + 67) == 0; + *(_DWORD *)v1 = &off_5606E4; + if ( !v3 ) + { + if ( *(_DWORD *)(v1 + 8) ) + operator delete[](*(void **)(v1 + 8)); + if ( v2[5] ) + operator delete[](v2[5]); + if ( v2[7] ) + operator delete[](v2[7]); + if ( v2[9] ) + operator delete[](v2[9]); + } + std::locale::facet::~facet(a1); +} +// 4FE1D1: variable 'v1' is possibly undefined +// 5606E4: using guessed type int (*off_5606E4)(); + +//----- (004FE230) -------------------------------------------------------- +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1) +{ + int v1; // ecx + void **v2; // ebx + bool v3; // zf + + v2 = (void **)v1; + v3 = *(_BYTE *)(v1 + 67) == 0; + *(_DWORD *)v1 = &off_5606E4; + if ( !v3 ) + { + if ( *(_DWORD *)(v1 + 8) ) + operator delete[](*(void **)(v1 + 8)); + if ( v2[5] ) + operator delete[](v2[5]); + if ( v2[7] ) + operator delete[](v2[7]); + if ( v2[9] ) + operator delete[](v2[9]); + } + std::locale::facet::~facet(a1); +} +// 4FE231: variable 'v1' is possibly undefined +// 5606E4: using guessed type int (*off_5606E4)(); + +//----- (004FE290) -------------------------------------------------------- +void __thiscall std::__moneypunct_cache::_M_cache(int this, int a2) +{ + _DWORD *v2; // eax + int (__fastcall *v3)(int); // edx + __int16 v4; // dx + int (__fastcall *v5)(int); // edx + __int16 v6; // dx + int (__fastcall *v7)(int); // edx + int v8; // edx + _DWORD *(__thiscall *v9)(int *, int); // eax + unsigned int v10; // eax + bool v11; // al + _DWORD *(__thiscall *v12)(int *, int); // eax + unsigned int v13; // eax + _DWORD *(__thiscall *v14)(int *, int); // eax + unsigned int v15; // eax + _DWORD *(__thiscall *v16)(int *, int); // eax + unsigned int v17; // eax + int (__fastcall *v18)(int); // eax + int v19; // eax + int (__fastcall *v20)(int); // eax + int v21; // eax + void *v22; // eax + int v23; // ecx + int v24; // eax + int v25; // ecx + int v26; // eax + int v27; // ecx + int v28; // eax + int v29; // ecx + int v30; // eax + unsigned int v31; // [esp+Ch] [ebp-7Ch] + _WORD *v32; // [esp+10h] [ebp-78h] + _WORD *v33; // [esp+14h] [ebp-74h] + _WORD *v34; // [esp+18h] [ebp-70h] + std::string *Block; // [esp+1Ch] [ebp-6Ch] + _DWORD *v36; // [esp+24h] [ebp-64h] + int v38; // [esp+6Dh] [ebp-1Bh] BYREF + int v39; // [esp+70h] [ebp-18h] BYREF + int v40; // [esp+74h] [ebp-14h] BYREF + int v41; // [esp+78h] [ebp-10h] BYREF + int v42[2]; // [esp+7Ch] [ebp-Ch] BYREF + + v36 = std::use_facet>(a2); + v2 = (_DWORD *)*v36; + v3 = *(int (__fastcall **)(int))(*v36 + 8); + if ( v3 == std::moneypunct::do_decimal_point ) + { + v4 = *(_WORD *)(v36[2] + 18); + } + else + { + v4 = v3((int)v36); + v2 = (_DWORD *)*v36; + } + *(_WORD *)(this + 18) = v4; + v5 = (int (__fastcall *)(int))v2[3]; + if ( v5 == std::moneypunct::do_thousands_sep ) + { + v6 = *(_WORD *)(v36[2] + 20); + } + else + { + v6 = v5((int)v36); + v2 = (_DWORD *)*v36; + } + *(_WORD *)(this + 20) = v6; + v7 = (int (__fastcall *)(int))v2[8]; + if ( v7 == std::moneypunct::do_frac_digits ) + { + v8 = *(_DWORD *)(v36[2] + 48); + } + else + { + v8 = v7((int)v36); + v2 = (_DWORD *)*v36; + } + v9 = (_DWORD *(__thiscall *)(int *, int))v2[4]; + *(_DWORD *)(this + 48) = v8; + if ( v9 == std::moneypunct::do_grouping ) + std::string::string(&v39, *(char **)(v36[2] + 8), (int)v42); + else + v9(&v39, (int)v36); + v10 = *(_DWORD *)(v39 - 12); + *(_DWORD *)(this + 12) = v10; + Block = (std::string *)operator new[](v10); + std::string::copy(&v39, Block, *(_DWORD *)(this + 12), 0, v31); + v11 = 0; + if ( *(_DWORD *)(this + 12) ) + v11 = (unsigned __int8)(*(_BYTE *)Block - 1) <= 0x7Du; + *(_BYTE *)(this + 16) = v11; + v12 = *(_DWORD *(__thiscall **)(int *, int))(*v36 + 20); + if ( v12 == std::moneypunct::do_curr_symbol ) + std::wstring::basic_string(&v40, *(wchar_t **)(v36[2] + 24), (int)&v38); + else + v12(&v40, (int)v36); + v13 = *(_DWORD *)(v40 - 12); + *(_DWORD *)(this + 28) = v13; + if ( v13 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v32 = (_WORD *)operator new[](2 * v13); + std::wstring::copy(&v40, v32, *(_DWORD *)(this + 28), 0); + v14 = *(_DWORD *(__thiscall **)(int *, int))(*v36 + 24); + if ( v14 == std::moneypunct::do_positive_sign ) + std::wstring::basic_string(&v41, *(wchar_t **)(v36[2] + 32), (int)&v38 + 1); + else + v14(&v41, (int)v36); + v15 = *(_DWORD *)(v41 - 12); + *(_DWORD *)(this + 36) = v15; + if ( v15 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v33 = (_WORD *)operator new[](2 * v15); + std::wstring::copy(&v41, v33, *(_DWORD *)(this + 36), 0); + v16 = *(_DWORD *(__thiscall **)(int *, int))(*v36 + 28); + if ( v16 == std::moneypunct::do_negative_sign ) + std::wstring::basic_string(v42, *(wchar_t **)(v36[2] + 40), (int)&v38 + 2); + else + v16(v42, (int)v36); + v17 = *(_DWORD *)(v42[0] - 12); + *(_DWORD *)(this + 44) = v17; + if ( v17 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v34 = (_WORD *)operator new[](2 * v17); + std::wstring::copy(v42, v34, *(_DWORD *)(this + 44), 0); + v18 = *(int (__fastcall **)(int))(*v36 + 36); + if ( v18 == std::moneypunct::do_pos_format ) + v19 = *(_DWORD *)(v36[2] + 52); + else + v19 = v18((int)v36); + *(_DWORD *)(this + 52) = v19; + v20 = *(int (__fastcall **)(int))(*v36 + 40); + if ( v20 == std::moneypunct::do_neg_format ) + v21 = *(_DWORD *)(v36[2] + 56); + else + v21 = v20((int)v36); + *(_DWORD *)(this + 56) = v21; + v22 = std::use_facet>(a2); + (*(void (__thiscall **)(void *, char *, char *, int))(*(_DWORD *)v22 + 44))( + v22, + std::money_base::_S_atoms, + std::money_base::_S_atoms + 11, + this + 60); + v23 = v42[0]; + *(_DWORD *)(this + 8) = Block; + *(_DWORD *)(this + 24) = v32; + *(_DWORD *)(this + 32) = v33; + *(_DWORD *)(this + 40) = v34; + *(_BYTE *)(this + 82) = 1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v23 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_26: + v25 = v41; + if ( !_CRT_MT ) + goto LABEL_27; + goto LABEL_35; + } + } + else + { + v24 = *(_DWORD *)(v23 - 4); + *(_DWORD *)(v23 - 4) = v24 - 1; + if ( v24 > 0 ) + goto LABEL_26; + } + std::wstring::_Rep::_M_destroy((void *)(v23 - 12), (int)&v38 + 2); + v25 = v41; + if ( !_CRT_MT ) + { +LABEL_27: + v26 = *(_DWORD *)(v25 - 4); + *(_DWORD *)(v25 - 4) = v26 - 1; + if ( v26 > 0 ) + goto LABEL_28; + goto LABEL_36; + } +LABEL_35: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v25 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_28: + v27 = v40; + if ( !_CRT_MT ) + goto LABEL_29; + goto LABEL_37; + } +LABEL_36: + std::wstring::_Rep::_M_destroy((void *)(v25 - 12), (int)v42); + v27 = v40; + if ( !_CRT_MT ) + { +LABEL_29: + v28 = *(_DWORD *)(v27 - 4); + *(_DWORD *)(v27 - 4) = v28 - 1; + if ( v28 > 0 ) + goto LABEL_30; + goto LABEL_38; + } +LABEL_37: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v27 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_30: + v29 = v39; + if ( !_CRT_MT ) + goto LABEL_31; + goto LABEL_39; + } +LABEL_38: + std::wstring::_Rep::_M_destroy((void *)(v27 - 12), (int)v42); + v29 = v39; + if ( !_CRT_MT ) + { +LABEL_31: + v30 = *(_DWORD *)(v29 - 4); + *(_DWORD *)(v29 - 4) = v30 - 1; + if ( v30 > 0 ) + return; +LABEL_40: + std::string::_Rep::_M_destroy((void *)(v29 - 12), (int)v42); + return; + } +LABEL_39: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v29 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_40; +} +// 4FE3AC: variable 'v31' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53F588: using guessed type char *std::money_base::_S_atoms; + +//----- (004FEA20) -------------------------------------------------------- +BOOL __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_5606F4; + this[2] = 0; + this[3] = 0; + result = a2 != 0; + *((_BYTE *)this + 16) = 0; + this[1] = result; + *(_DWORD *)((char *)this + 18) = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + this[10] = 0; + this[11] = 0; + this[12] = 0; + this[13] = 0; + this[14] = 0; + *((_BYTE *)this + 82) = 0; + return result; +} +// 5606F4: using guessed type int (*off_5606F4)(); + +//----- (004FEAA0) -------------------------------------------------------- +BOOL __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_5606F4; + this[2] = 0; + this[3] = 0; + result = a2 != 0; + *((_BYTE *)this + 16) = 0; + this[1] = result; + *(_DWORD *)((char *)this + 18) = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + this[10] = 0; + this[11] = 0; + this[12] = 0; + this[13] = 0; + this[14] = 0; + *((_BYTE *)this + 82) = 0; + return result; +} +// 5606F4: using guessed type int (*off_5606F4)(); + +//----- (004FEB20) -------------------------------------------------------- +void __fastcall std::__moneypunct_cache::~__moneypunct_cache(void *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + std::__moneypunct_cache::~__moneypunct_cache((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 4FEB60: variable 'lpfctx' is possibly undefined + +//----- (004FEBB0) -------------------------------------------------------- +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1) +{ + int v1; // ecx + void **v2; // ebx + bool v3; // zf + + v2 = (void **)v1; + v3 = *(_BYTE *)(v1 + 82) == 0; + *(_DWORD *)v1 = &off_5606F4; + if ( !v3 ) + { + if ( *(_DWORD *)(v1 + 8) ) + operator delete[](*(void **)(v1 + 8)); + if ( v2[6] ) + operator delete[](v2[6]); + if ( v2[8] ) + operator delete[](v2[8]); + if ( v2[10] ) + operator delete[](v2[10]); + } + std::locale::facet::~facet(a1); +} +// 4FEBB1: variable 'v1' is possibly undefined +// 5606F4: using guessed type int (*off_5606F4)(); + +//----- (004FEC10) -------------------------------------------------------- +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1) +{ + int v1; // ecx + void **v2; // ebx + bool v3; // zf + + v2 = (void **)v1; + v3 = *(_BYTE *)(v1 + 82) == 0; + *(_DWORD *)v1 = &off_5606F4; + if ( !v3 ) + { + if ( *(_DWORD *)(v1 + 8) ) + operator delete[](*(void **)(v1 + 8)); + if ( v2[6] ) + operator delete[](v2[6]); + if ( v2[8] ) + operator delete[](v2[8]); + if ( v2[10] ) + operator delete[](v2[10]); + } + std::locale::facet::~facet(a1); +} +// 4FEC11: variable 'v1' is possibly undefined +// 5606F4: using guessed type int (*off_5606F4)(); + +//----- (004FEC70) -------------------------------------------------------- +void __thiscall std::__moneypunct_cache::_M_cache(int this, int a2) +{ + _DWORD *v2; // eax + int (__fastcall *v3)(int); // edx + __int16 v4; // dx + int (__fastcall *v5)(int); // edx + __int16 v6; // dx + int (__fastcall *v7)(int); // edx + int v8; // edx + _DWORD *(__thiscall *v9)(int *, int); // eax + unsigned int v10; // eax + bool v11; // al + _DWORD *(__thiscall *v12)(int *, int); // eax + unsigned int v13; // eax + _DWORD *(__thiscall *v14)(int *, int); // eax + unsigned int v15; // eax + _DWORD *(__thiscall *v16)(int *, int); // eax + unsigned int v17; // eax + int (__fastcall *v18)(int); // eax + int v19; // eax + int (__fastcall *v20)(int); // eax + int v21; // eax + void *v22; // eax + int v23; // ecx + int v24; // eax + int v25; // ecx + int v26; // eax + int v27; // ecx + int v28; // eax + int v29; // ecx + int v30; // eax + unsigned int v31; // [esp+Ch] [ebp-7Ch] + _WORD *v32; // [esp+10h] [ebp-78h] + _WORD *v33; // [esp+14h] [ebp-74h] + _WORD *v34; // [esp+18h] [ebp-70h] + std::string *Block; // [esp+1Ch] [ebp-6Ch] + _DWORD *v36; // [esp+24h] [ebp-64h] + int v38; // [esp+6Dh] [ebp-1Bh] BYREF + int v39; // [esp+70h] [ebp-18h] BYREF + int v40; // [esp+74h] [ebp-14h] BYREF + int v41; // [esp+78h] [ebp-10h] BYREF + int v42[2]; // [esp+7Ch] [ebp-Ch] BYREF + + v36 = std::use_facet>(a2); + v2 = (_DWORD *)*v36; + v3 = *(int (__fastcall **)(int))(*v36 + 8); + if ( v3 == std::moneypunct::do_decimal_point ) + { + v4 = *(_WORD *)(v36[2] + 18); + } + else + { + v4 = v3((int)v36); + v2 = (_DWORD *)*v36; + } + *(_WORD *)(this + 18) = v4; + v5 = (int (__fastcall *)(int))v2[3]; + if ( v5 == std::moneypunct::do_thousands_sep ) + { + v6 = *(_WORD *)(v36[2] + 20); + } + else + { + v6 = v5((int)v36); + v2 = (_DWORD *)*v36; + } + *(_WORD *)(this + 20) = v6; + v7 = (int (__fastcall *)(int))v2[8]; + if ( v7 == std::moneypunct::do_frac_digits ) + { + v8 = *(_DWORD *)(v36[2] + 48); + } + else + { + v8 = v7((int)v36); + v2 = (_DWORD *)*v36; + } + v9 = (_DWORD *(__thiscall *)(int *, int))v2[4]; + *(_DWORD *)(this + 48) = v8; + if ( v9 == std::moneypunct::do_grouping ) + std::string::string(&v39, *(char **)(v36[2] + 8), (int)v42); + else + v9(&v39, (int)v36); + v10 = *(_DWORD *)(v39 - 12); + *(_DWORD *)(this + 12) = v10; + Block = (std::string *)operator new[](v10); + std::string::copy(&v39, Block, *(_DWORD *)(this + 12), 0, v31); + v11 = 0; + if ( *(_DWORD *)(this + 12) ) + v11 = (unsigned __int8)(*(_BYTE *)Block - 1) <= 0x7Du; + *(_BYTE *)(this + 16) = v11; + v12 = *(_DWORD *(__thiscall **)(int *, int))(*v36 + 20); + if ( v12 == std::moneypunct::do_curr_symbol ) + std::wstring::basic_string(&v40, *(wchar_t **)(v36[2] + 24), (int)&v38); + else + v12(&v40, (int)v36); + v13 = *(_DWORD *)(v40 - 12); + *(_DWORD *)(this + 28) = v13; + if ( v13 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v32 = (_WORD *)operator new[](2 * v13); + std::wstring::copy(&v40, v32, *(_DWORD *)(this + 28), 0); + v14 = *(_DWORD *(__thiscall **)(int *, int))(*v36 + 24); + if ( v14 == std::moneypunct::do_positive_sign ) + std::wstring::basic_string(&v41, *(wchar_t **)(v36[2] + 32), (int)&v38 + 1); + else + v14(&v41, (int)v36); + v15 = *(_DWORD *)(v41 - 12); + *(_DWORD *)(this + 36) = v15; + if ( v15 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v33 = (_WORD *)operator new[](2 * v15); + std::wstring::copy(&v41, v33, *(_DWORD *)(this + 36), 0); + v16 = *(_DWORD *(__thiscall **)(int *, int))(*v36 + 28); + if ( v16 == std::moneypunct::do_negative_sign ) + std::wstring::basic_string(v42, *(wchar_t **)(v36[2] + 40), (int)&v38 + 2); + else + v16(v42, (int)v36); + v17 = *(_DWORD *)(v42[0] - 12); + *(_DWORD *)(this + 44) = v17; + if ( v17 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v34 = (_WORD *)operator new[](2 * v17); + std::wstring::copy(v42, v34, *(_DWORD *)(this + 44), 0); + v18 = *(int (__fastcall **)(int))(*v36 + 36); + if ( v18 == std::moneypunct::do_pos_format ) + v19 = *(_DWORD *)(v36[2] + 52); + else + v19 = v18((int)v36); + *(_DWORD *)(this + 52) = v19; + v20 = *(int (__fastcall **)(int))(*v36 + 40); + if ( v20 == std::moneypunct::do_neg_format ) + v21 = *(_DWORD *)(v36[2] + 56); + else + v21 = v20((int)v36); + *(_DWORD *)(this + 56) = v21; + v22 = std::use_facet>(a2); + (*(void (__thiscall **)(void *, char *, char *, int))(*(_DWORD *)v22 + 44))( + v22, + std::money_base::_S_atoms, + std::money_base::_S_atoms + 11, + this + 60); + v23 = v42[0]; + *(_DWORD *)(this + 8) = Block; + *(_DWORD *)(this + 24) = v32; + *(_DWORD *)(this + 32) = v33; + *(_DWORD *)(this + 40) = v34; + *(_BYTE *)(this + 82) = 1; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v23 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_26: + v25 = v41; + if ( !_CRT_MT ) + goto LABEL_27; + goto LABEL_35; + } + } + else + { + v24 = *(_DWORD *)(v23 - 4); + *(_DWORD *)(v23 - 4) = v24 - 1; + if ( v24 > 0 ) + goto LABEL_26; + } + std::wstring::_Rep::_M_destroy((void *)(v23 - 12), (int)&v38 + 2); + v25 = v41; + if ( !_CRT_MT ) + { +LABEL_27: + v26 = *(_DWORD *)(v25 - 4); + *(_DWORD *)(v25 - 4) = v26 - 1; + if ( v26 > 0 ) + goto LABEL_28; + goto LABEL_36; + } +LABEL_35: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v25 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_28: + v27 = v40; + if ( !_CRT_MT ) + goto LABEL_29; + goto LABEL_37; + } +LABEL_36: + std::wstring::_Rep::_M_destroy((void *)(v25 - 12), (int)v42); + v27 = v40; + if ( !_CRT_MT ) + { +LABEL_29: + v28 = *(_DWORD *)(v27 - 4); + *(_DWORD *)(v27 - 4) = v28 - 1; + if ( v28 > 0 ) + goto LABEL_30; + goto LABEL_38; + } +LABEL_37: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v27 - 4), 0xFFFFFFFF) > 0 ) + { +LABEL_30: + v29 = v39; + if ( !_CRT_MT ) + goto LABEL_31; + goto LABEL_39; + } +LABEL_38: + std::wstring::_Rep::_M_destroy((void *)(v27 - 12), (int)v42); + v29 = v39; + if ( !_CRT_MT ) + { +LABEL_31: + v30 = *(_DWORD *)(v29 - 4); + *(_DWORD *)(v29 - 4) = v30 - 1; + if ( v30 > 0 ) + return; +LABEL_40: + std::string::_Rep::_M_destroy((void *)(v29 - 12), (int)v42); + return; + } +LABEL_39: + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v29 - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_40; +} +// 4FED8C: variable 'v31' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53F588: using guessed type char *std::money_base::_S_atoms; + +//----- (004FF400) -------------------------------------------------------- +BOOL __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560704; + this[2] = 0; + this[3] = 0; + result = a2 != 0; + *((_BYTE *)this + 16) = 0; + this[1] = result; + *(_DWORD *)((char *)this + 18) = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + this[10] = 0; + this[11] = 0; + this[12] = 0; + this[13] = 0; + this[14] = 0; + *((_BYTE *)this + 82) = 0; + return result; +} +// 560704: using guessed type int (*off_560704)(); + +//----- (004FF480) -------------------------------------------------------- +BOOL __thiscall std::__moneypunct_cache::__moneypunct_cache(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560704; + this[2] = 0; + this[3] = 0; + result = a2 != 0; + *((_BYTE *)this + 16) = 0; + this[1] = result; + *(_DWORD *)((char *)this + 18) = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + this[10] = 0; + this[11] = 0; + this[12] = 0; + this[13] = 0; + this[14] = 0; + *((_BYTE *)this + 82) = 0; + return result; +} +// 560704: using guessed type int (*off_560704)(); + +//----- (004FF500) -------------------------------------------------------- +void __fastcall std::__moneypunct_cache::~__moneypunct_cache(void *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + std::__moneypunct_cache::~__moneypunct_cache((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 4FF540: variable 'lpfctx' is possibly undefined + +//----- (004FF590) -------------------------------------------------------- +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1) +{ + int v1; // ecx + void **v2; // ebx + bool v3; // zf + + v2 = (void **)v1; + v3 = *(_BYTE *)(v1 + 82) == 0; + *(_DWORD *)v1 = &off_560704; + if ( !v3 ) + { + if ( *(_DWORD *)(v1 + 8) ) + operator delete[](*(void **)(v1 + 8)); + if ( v2[6] ) + operator delete[](v2[6]); + if ( v2[8] ) + operator delete[](v2[8]); + if ( v2[10] ) + operator delete[](v2[10]); + } + std::locale::facet::~facet(a1); +} +// 4FF591: variable 'v1' is possibly undefined +// 560704: using guessed type int (*off_560704)(); + +//----- (004FF5F0) -------------------------------------------------------- +void __cdecl std::__moneypunct_cache::~__moneypunct_cache(std::locale::facet *a1) +{ + int v1; // ecx + void **v2; // ebx + bool v3; // zf + + v2 = (void **)v1; + v3 = *(_BYTE *)(v1 + 82) == 0; + *(_DWORD *)v1 = &off_560704; + if ( !v3 ) + { + if ( *(_DWORD *)(v1 + 8) ) + operator delete[](*(void **)(v1 + 8)); + if ( v2[6] ) + operator delete[](v2[6]); + if ( v2[8] ) + operator delete[](v2[8]); + if ( v2[10] ) + operator delete[](v2[10]); + } + std::locale::facet::~facet(a1); +} +// 4FF5F1: variable 'v1' is possibly undefined +// 560704: using guessed type int (*off_560704)(); + +//----- (004FF650) -------------------------------------------------------- +void __fastcall std::__codecvt_utf8_base::~__codecvt_utf8_base(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &unk_560908; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4FF65C: variable 'Blocka' is possibly undefined + +//----- (004FF670) -------------------------------------------------------- +void __cdecl std::__codecvt_utf8_base::~__codecvt_utf8_base(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &unk_560908; + std::locale::facet::~facet(a1); +} +// 4FF670: variable 'v1' is possibly undefined + +//----- (004FF680) -------------------------------------------------------- +void __fastcall std::__codecvt_utf8_base::~__codecvt_utf8_base(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &unk_560960; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4FF68C: variable 'Blocka' is possibly undefined + +//----- (004FF6A0) -------------------------------------------------------- +void __cdecl std::__codecvt_utf8_base::~__codecvt_utf8_base(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &unk_560960; + std::locale::facet::~facet(a1); +} +// 4FF6A0: variable 'v1' is possibly undefined + +//----- (004FF6B0) -------------------------------------------------------- +void __fastcall std::__codecvt_utf8_base::~__codecvt_utf8_base(_DWORD *Block) +{ + *Block = &off_56076C; + std::codecvt::~codecvt(Block); + operator delete(Block); +} +// 56076C: using guessed type int (*off_56076C)(); + +//----- (004FF6D0) -------------------------------------------------------- +void __fastcall std::__codecvt_utf8_base::~__codecvt_utf8_base(_DWORD *a1) +{ + *a1 = &off_56076C; + std::codecvt::~codecvt(a1); +} +// 56076C: using guessed type int (*off_56076C)(); + +//----- (004FF6E0) -------------------------------------------------------- +void __fastcall std::__iosfail_type_info::~__iosfail_type_info(_DWORD *a1) +{ + __cxxabiv1::__si_class_type_info *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_560798; + __cxxabiv1::__si_class_type_info::~__si_class_type_info(Block); + operator delete(a1); +} +// 4FF6EC: variable 'Block' is possibly undefined +// 560798: using guessed type void (__cdecl *off_560798)(std::__iosfail_type_info *__hidden this); + +//----- (004FF700) -------------------------------------------------------- +void __cdecl std::__iosfail_type_info::~__iosfail_type_info(std::__iosfail_type_info *this) +{ + _DWORD *v1; // ecx + + *v1 = &off_560798; + __cxxabiv1::__si_class_type_info::~__si_class_type_info(this); +} +// 4FF700: variable 'v1' is possibly undefined +// 560798: using guessed type void (__cdecl *off_560798)(std::__iosfail_type_info *__hidden this); + +//----- (004FF710) -------------------------------------------------------- +void __fastcall std::__codecvt_utf16_base::~__codecvt_utf16_base(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &unk_560908; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4FF71C: variable 'Blocka' is possibly undefined + +//----- (004FF730) -------------------------------------------------------- +void __cdecl std::__codecvt_utf16_base::~__codecvt_utf16_base(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &unk_560908; + std::locale::facet::~facet(a1); +} +// 4FF730: variable 'v1' is possibly undefined + +//----- (004FF740) -------------------------------------------------------- +void __fastcall std::__codecvt_utf16_base::~__codecvt_utf16_base(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &unk_560960; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4FF74C: variable 'Blocka' is possibly undefined + +//----- (004FF760) -------------------------------------------------------- +void __cdecl std::__codecvt_utf16_base::~__codecvt_utf16_base(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &unk_560960; + std::locale::facet::~facet(a1); +} +// 4FF760: variable 'v1' is possibly undefined + +//----- (004FF770) -------------------------------------------------------- +void __fastcall std::__codecvt_utf16_base::~__codecvt_utf16_base(_DWORD *Block) +{ + *Block = &off_56081C; + std::codecvt::~codecvt(Block); + operator delete(Block); +} +// 56081C: using guessed type int (*off_56081C)(); + +//----- (004FF790) -------------------------------------------------------- +void __fastcall std::__codecvt_utf16_base::~__codecvt_utf16_base(_DWORD *a1) +{ + *a1 = &off_56081C; + std::codecvt::~codecvt(a1); +} +// 56081C: using guessed type int (*off_56081C)(); + +//----- (004FF7A0) -------------------------------------------------------- +char *__cdecl std::__uninitialized_copy::__uninit_copy<__gnu_cxx::__normal_iterator>,std::string*>( + int a1, + int a2, + char *a3) +{ + while ( a1 != a2 ) + { + std::string::basic_string(a3, a1); + a3 += 24; + a1 += 24; + } + return a3; +} + +//----- (004FF868) -------------------------------------------------------- +int __cdecl std::__uninitialized_copy::__uninit_copy( + night::ns_sourcemap *a1, + night::ns_sourcemap *a2, + int a3) +{ + const night::ns_sourcemap *v4; // [esp+4h] [ebp-54h] + + while ( a1 != a2 ) + { + night::ns_sourcemap::ns_sourcemap(a3, a1, v4); + a1 = (night::ns_sourcemap *)((char *)a1 + 64); + a3 += 64; + } + return a3; +} +// 4FF8B2: variable 'v4' is possibly undefined + +//----- (004FF930) -------------------------------------------------------- +void __fastcall std::bad_array_new_length::~bad_array_new_length(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_560848; + std::bad_alloc::~bad_alloc(Block); + operator delete(a1); +} +// 4FF93C: variable 'Block' is possibly undefined +// 560848: using guessed type void (__cdecl *off_560848)(std::bad_array_new_length *__hidden this); + +//----- (004FF960) -------------------------------------------------------- +void __cdecl std::bad_array_new_length::~bad_array_new_length(std::exception *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560848; + std::bad_alloc::~bad_alloc(a1); +} +// 4FF960: variable 'v1' is possibly undefined +// 560848: using guessed type void (__cdecl *off_560848)(std::bad_array_new_length *__hidden this); + +//----- (004FF970) -------------------------------------------------------- +void __fastcall std::__codecvt_utf8_utf16_base::~__codecvt_utf8_utf16_base(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &unk_560908; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4FF97C: variable 'Blocka' is possibly undefined + +//----- (004FF990) -------------------------------------------------------- +void __cdecl std::__codecvt_utf8_utf16_base::~__codecvt_utf8_utf16_base(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &unk_560908; + std::locale::facet::~facet(a1); +} +// 4FF990: variable 'v1' is possibly undefined + +//----- (004FF9A0) -------------------------------------------------------- +void __fastcall std::__codecvt_utf8_utf16_base::~__codecvt_utf8_utf16_base(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &unk_560960; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 4FF9AC: variable 'Blocka' is possibly undefined + +//----- (004FF9C0) -------------------------------------------------------- +void __cdecl std::__codecvt_utf8_utf16_base::~__codecvt_utf8_utf16_base(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &unk_560960; + std::locale::facet::~facet(a1); +} +// 4FF9C0: variable 'v1' is possibly undefined + +//----- (004FF9D0) -------------------------------------------------------- +void __fastcall std::__codecvt_utf8_utf16_base::~__codecvt_utf8_utf16_base(_DWORD *Block) +{ + *Block = &off_560A3C; + std::codecvt::~codecvt(Block); + operator delete(Block); +} +// 560A3C: using guessed type int (*off_560A3C)(); + +//----- (004FF9F0) -------------------------------------------------------- +void __fastcall std::__codecvt_utf8_utf16_base::~__codecvt_utf8_utf16_base(_DWORD *a1) +{ + *a1 = &off_560A3C; + std::codecvt::~codecvt(a1); +} +// 560A3C: using guessed type int (*off_560A3C)(); + +//----- (004FFA00) -------------------------------------------------------- +void __fastcall std::_V2::error_category::~error_category(void *Block) +{ + operator delete(Block); +} + +//----- (004FFA20) -------------------------------------------------------- +void (__cdecl ***std::_V2::system_category())(_anonymous_namespace_::system_error_category *__hidden this) +{ + return `anonymous namespace'::system_category_instance; +} +// 53F0C4: using guessed type void (__cdecl **`anonymous namespace'::system_category_instance[2])(_anonymous_namespace_::system_error_category *__hidden this); + +//----- (004FFA30) -------------------------------------------------------- +void (__cdecl ***std::_V2::generic_category())(_anonymous_namespace_::generic_error_category *__hidden this) +{ + return &`anonymous namespace'::generic_category_instance; +} +// 53F0C8: using guessed type void (__cdecl **`anonymous namespace'::generic_category_instance)(_anonymous_namespace_::generic_error_category *__hidden this); + +//----- (004FFA40) -------------------------------------------------------- +char *__thiscall std::map>::operator[](_DWORD *this, int a2) +{ + bool v2; // zf + struct _Unwind_Exception *v3; // eax + struct _Unwind_Exception *v4; // edx + _DWORD *v5; // edx + char v6; // al + int insert_hint_unique_pos; // [esp+14h] [ebp-54h] + _DWORD *v9; // [esp+18h] [ebp-50h] + _DWORD *v10; // [esp+18h] [ebp-50h] + _DWORD *v12; // [esp+20h] [ebp-48h] + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-44h] + void **lpuexcpta; // [esp+24h] [ebp-44h] + _DWORD *Block; // [esp+28h] [ebp-40h] + + v12 = this + 1; + lpuexcpt = (struct _Unwind_Exception *)this[2]; + Block = this + 1; + while ( lpuexcpt ) + { + v2 = (unsigned __int8)std::operator<((int)lpuexcpt + 16, a2) == 0; + v3 = (struct _Unwind_Exception *)Block; + v4 = (struct _Unwind_Exception *)*((_DWORD *)lpuexcpt + 3); + if ( v2 ) + { + v4 = (struct _Unwind_Exception *)*((_DWORD *)lpuexcpt + 2); + if ( v2 ) + v3 = lpuexcpt; + } + lpuexcpt = v4; + Block = v3; + } + if ( v12 == Block || (unsigned __int8)std::operator<(a2, (int)(Block + 4)) ) + { + v9 = Block; + Block = operator new(0x30u); + lpuexcpta = (void **)(Block + 4); + std::string::basic_string((char *)Block + 16, a2); + Block[10] = 0; + Block[11] = 0; + insert_hint_unique_pos = std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_hint_unique_pos( + this, + v9, + (int)(Block + 4)); + v10 = v5; + if ( v5 ) + { + v6 = insert_hint_unique_pos != 0 || v12 == v5; + if ( !v6 ) + v6 = std::operator<((int)lpuexcpta, (int)(v5 + 4)); + std::_Rb_tree_insert_and_rebalance(v6, Block, v10, v12); + ++this[5]; + } + else + { + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)Block + 11); + std::string::_M_dispose(lpuexcpta); + operator delete(Block); + Block = (_DWORD *)insert_hint_unique_pos; + } + } + return (char *)(Block + 10); +} +// 4FFB42: variable 'v5' is possibly undefined + +//----- (004FFC34) -------------------------------------------------------- +_DWORD *__thiscall std::map,std::allocator>>>::operator[]( + _DWORD *this, + _DWORD *a2) +{ + _DWORD *inserted; // esi + _DWORD *v3; // ebx + int insert_hint_unique_pos; // eax + _DWORD *v5; // edx + + inserted = std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::lower_bound( + this, + (int)a2); + if ( inserted == this + 1 || (unsigned __int8)std::operator<((int)a2, (int)(inserted + 4)) ) + { + v3 = operator new(0x30u); + std::string::basic_string(v3 + 4, a2); + v3[10] = 0; + v3[11] = 0; + insert_hint_unique_pos = std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_get_insert_hint_unique_pos( + this, + inserted, + (int)(v3 + 4)); + inserted = (_DWORD *)insert_hint_unique_pos; + if ( v5 ) + { + inserted = std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_insert_node( + this, + insert_hint_unique_pos, + v5, + v3); + } + else + { + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)v3 + 11); + std::string::_M_dispose((void **)v3 + 4); + operator delete(v3); + } + } + return inserted + 10; +} +// 4FFCB0: variable 'v5' is possibly undefined + +//----- (004FFCF4) -------------------------------------------------------- +char *__thiscall std::map::operator[](_DWORD *this, _DWORD *a2) +{ + _DWORD *v3; // ebx + _DWORD *v4; // edx + char v5; // al + _DWORD *v6; // ecx + int insert_hint_unique_pos; // eax + _DWORD *v8; // edx + _DWORD *v9; // edi + char v10; // al + _DWORD *v12; // [esp+18h] [ebp-20h] + _DWORD *v13; // [esp+18h] [ebp-20h] + _DWORD *v14; // [esp+1Ch] [ebp-1Ch] + _DWORD *v15; // [esp+1Ch] [ebp-1Ch] + + v3 = this + 1; + v4 = (_DWORD *)this[2]; + v14 = this + 1; + while ( v4 ) + { + v12 = v4; + v5 = std::operator<((int)(v4 + 4), (int)a2); + v6 = (_DWORD *)v12[3]; + if ( !v5 ) + v6 = (_DWORD *)v12[2]; + if ( !v5 ) + v3 = v12; + v4 = v6; + } + if ( v14 == v3 || (unsigned __int8)std::operator<((int)a2, (int)(v3 + 4)) ) + { + v13 = v3; + v3 = operator new(0x98u); + std::string::basic_string(v3 + 4, a2); + v3[18] = v3 + 20; + v3[25] = v3 + 27; + v3[32] = v3 + 34; + v3[10] = 0; + v3[11] = 0; + v3[19] = 0; + *((_BYTE *)v3 + 80) = 0; + v3[26] = 0; + *((_BYTE *)v3 + 108) = 0; + v3[33] = 0; + *((_BYTE *)v3 + 136) = 0; + *((_BYTE *)v3 + 68) = 0; + *((_BYTE *)v3 + 124) = 0; + v3[15] = 0; + v3[12] = 0; + v3[13] = 0; + v3[14] = 0; + v3[24] = -1; + insert_hint_unique_pos = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + this, + v13, + (int)(v3 + 4)); + v9 = v8; + if ( v8 ) + { + v10 = v14 == v8 || insert_hint_unique_pos != 0; + if ( !v10 ) + v10 = std::operator<((int)(v3 + 4), (int)(v8 + 4)); + std::_Rb_tree_insert_and_rebalance(v10, v3, v9, v14); + ++this[5]; + } + else + { + v15 = (_DWORD *)insert_hint_unique_pos; + WXML::DOMLib::Token::~Token((int)(v3 + 10)); + std::string::_M_dispose((void **)v3 + 4); + operator delete(v3); + v3 = v15; + } + } + return (char *)(v3 + 10); +} +// 4FFE00: variable 'v8' is possibly undefined + +//----- (004FFE78) -------------------------------------------------------- +char *__thiscall std::map::operator[](_DWORD *this, int a2) +{ + _DWORD *v2; // edx + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-44h] + struct _Unwind_Exception *Blocka; // [esp+28h] [ebp-40h] + char *Block; // [esp+28h] [ebp-40h] + + Blocka = (struct _Unwind_Exception *)(this + 1); + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_lower_bound( + this[2], + (int)(this + 1), + a2); + if ( Blocka == lpuexcpt || (unsigned __int8)std::operator<(a2, (int)lpuexcpt + 16) ) + { + Block = (char *)operator new(0x98u); + std::string::basic_string(Block + 16, a2); + *((_DWORD *)Block + 10) = 0; + *((_DWORD *)Block + 11) = 0; + *((_DWORD *)Block + 18) = Block + 80; + *((_DWORD *)Block + 19) = 0; + *((_DWORD *)Block + 25) = Block + 108; + Block[80] = 0; + *((_DWORD *)Block + 32) = Block + 136; + *((_DWORD *)Block + 26) = 0; + Block[108] = 0; + *((_DWORD *)Block + 33) = 0; + Block[136] = 0; + Block[68] = 0; + Block[124] = 0; + *((_DWORD *)Block + 15) = 0; + *((_DWORD *)Block + 12) = 0; + *((_DWORD *)Block + 13) = 0; + *((_DWORD *)Block + 14) = 0; + *((_DWORD *)Block + 24) = -1; + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + this, + lpuexcpt, + (int)(Block + 16)); + if ( v2 ) + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_insert_node( + this, + (int)lpuexcpt, + v2, + Block); + else + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_drop_node((void **)Block); + } + return (char *)lpuexcpt + 40; +} +// 4FFFB8: variable 'v2' is possibly undefined + +//----- (00500050) -------------------------------------------------------- +_DWORD *__thiscall std::map::operator[](_DWORD *this, _DWORD *a2) +{ + _DWORD *inserted; // esi + char *v3; // ebx + int insert_hint_unique_pos; // eax + _DWORD *v5; // edx + + inserted = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::lower_bound( + this, + (int)a2); + if ( inserted == this + 1 || (unsigned __int8)std::operator<((int)a2, (int)(inserted + 4)) ) + { + v3 = (char *)operator new(0x40u); + std::string::basic_string((_DWORD *)v3 + 4, a2); + *((_DWORD *)v3 + 11) = 0; + *((_DWORD *)v3 + 10) = v3 + 48; + v3[48] = 0; + insert_hint_unique_pos = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + this, + inserted, + (int)(v3 + 16)); + inserted = (_DWORD *)insert_hint_unique_pos; + if ( v5 ) + { + inserted = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_insert_node( + this, + insert_hint_unique_pos, + v5, + v3); + } + else + { + std::string::_M_dispose((void **)v3 + 10); + std::string::_M_dispose((void **)v3 + 4); + operator delete(v3); + } + } + return inserted + 10; +} +// 5000D2: variable 'v5' is possibly undefined + +//----- (00500114) -------------------------------------------------------- +char *__thiscall std::map::operator[](_DWORD *this, int a2) +{ + _DWORD *v2; // edx + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-44h] + char *Block; // [esp+28h] [ebp-40h] + + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::lower_bound( + this, + a2); + if ( lpuexcpt == (struct _Unwind_Exception *)(this + 1) + || (unsigned __int8)std::operator<(a2, (int)lpuexcpt + 16) ) + { + Block = (char *)operator new(0x40u); + std::string::basic_string(Block + 16, a2); + *((_DWORD *)Block + 11) = 0; + Block[48] = 0; + *((_DWORD *)Block + 10) = Block + 48; + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + this, + lpuexcpt, + (int)(Block + 16)); + if ( v2 ) + { + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_insert_node( + this, + (int)lpuexcpt, + v2, + Block); + } + else + { + std::string::_M_dispose((void **)Block + 10); + std::string::_M_dispose((void **)Block + 4); + operator delete(Block); + } + } + return (char *)lpuexcpt + 40; +} +// 5001EB: variable 'v2' is possibly undefined + +//----- (00500298) -------------------------------------------------------- +char *__thiscall std::map>::operator[](_DWORD *this, _DWORD *a2) +{ + _DWORD *v3; // ebx + _DWORD *v4; // edx + char v5; // al + _DWORD *v6; // ecx + int insert_hint_unique_pos; // eax + _DWORD *v8; // edx + _DWORD *v9; // edi + char v10; // al + void *v12; // [esp+0h] [ebp-38h] + _DWORD *v13; // [esp+18h] [ebp-20h] + _DWORD *v14; // [esp+18h] [ebp-20h] + _DWORD *v15; // [esp+18h] [ebp-20h] + _DWORD *v16; // [esp+1Ch] [ebp-1Ch] + + v3 = this + 1; + v4 = (_DWORD *)this[2]; + v16 = this + 1; + while ( v4 ) + { + v13 = v4; + v5 = std::operator<((int)(v4 + 4), (int)a2); + v6 = (_DWORD *)v13[3]; + if ( !v5 ) + v6 = (_DWORD *)v13[2]; + if ( !v5 ) + v3 = v13; + v4 = v6; + } + if ( v16 == v3 || (unsigned __int8)std::operator<((int)a2, (int)(v3 + 4)) ) + { + v14 = v3; + v3 = operator new(0x34u); + std::string::basic_string(v3 + 4, a2); + v3[10] = 0; + v3[11] = 0; + v3[12] = 0; + insert_hint_unique_pos = std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_hint_unique_pos( + this, + v14, + (int)(v3 + 4)); + v9 = (_DWORD *)insert_hint_unique_pos; + if ( v8 ) + { + v10 = insert_hint_unique_pos != 0 || v16 == v8; + if ( v9 == 0 && v16 != v8 ) + { + v15 = v8; + v10 = std::operator<((int)(v3 + 4), (int)(v8 + 4)); + v8 = v15; + } + std::_Rb_tree_insert_and_rebalance(v10, v3, v8, v16); + ++this[5]; + } + else + { + std::_Destroy_aux::__destroy(0, 0); + if ( v3[10] ) + operator delete((void *)v3[10]); + std::string::_M_dispose((void **)v3 + 4); + v12 = v3; + v3 = v9; + operator delete(v12); + } + } + return (char *)(v3 + 10); +} +// 500347: variable 'v8' is possibly undefined + +//----- (005003D4) -------------------------------------------------------- +_DWORD *__thiscall std::map>::operator[](_DWORD *this, _DWORD *a2) +{ + _DWORD *inserted; // esi + _DWORD *v3; // ebx + int insert_hint_unique_pos; // eax + _DWORD *v5; // edx + + inserted = std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::lower_bound( + this, + (int)a2); + if ( inserted == this + 1 || (unsigned __int8)std::operator<((int)a2, (int)(inserted + 4)) ) + { + v3 = operator new(0x34u); + std::string::basic_string(v3 + 4, a2); + v3[10] = 0; + v3[11] = 0; + v3[12] = 0; + insert_hint_unique_pos = std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_hint_unique_pos( + this, + inserted, + (int)(v3 + 4)); + inserted = (_DWORD *)insert_hint_unique_pos; + if ( v5 ) + { + inserted = std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_insert_node( + this, + insert_hint_unique_pos, + v5, + v3); + } + else + { + std::vector::~vector((void ***)v3 + 10, 0); + std::string::_M_dispose((void **)v3 + 4); + operator delete(v3); + } + } + return inserted + 10; +} +// 50045B: variable 'v5' is possibly undefined + +//----- (0050049C) -------------------------------------------------------- +char *__thiscall std::map>::operator[](_DWORD *this, int a2) +{ + _DWORD *v2; // edx + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-44h] + _DWORD *Block; // [esp+28h] [ebp-40h] + + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::lower_bound( + this, + a2); + if ( lpuexcpt == (struct _Unwind_Exception *)(this + 1) + || (unsigned __int8)std::operator<(a2, (int)lpuexcpt + 16) ) + { + Block = operator new(0x34u); + std::string::basic_string((char *)Block + 16, a2); + Block[10] = 0; + Block[11] = 0; + Block[12] = 0; + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_hint_unique_pos( + this, + lpuexcpt, + (int)(Block + 4)); + if ( v2 ) + { + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_insert_node( + this, + (int)lpuexcpt, + v2, + Block); + } + else + { + std::vector::~vector((void ***)Block + 10, 0); + std::string::_M_dispose((void **)Block + 4); + operator delete(Block); + } + } + return (char *)lpuexcpt + 40; +} +// 50056B: variable 'v2' is possibly undefined + +//----- (0050061C) -------------------------------------------------------- +char *__thiscall std::map::operator[](_DWORD *this, int a2) +{ + bool v2; // zf + struct _Unwind_Exception *v3; // eax + struct _Unwind_Exception *v4; // edx + _DWORD *v5; // edx + struct _Unwind_Exception *v7; // [esp+1Ch] [ebp-4Ch] + struct _Unwind_Exception *Block; // [esp+24h] [ebp-44h] + char *Blocka; // [esp+24h] [ebp-44h] + struct _Unwind_Exception *lpuexcpt; // [esp+28h] [ebp-40h] + + v7 = (struct _Unwind_Exception *)(this + 1); + Block = (struct _Unwind_Exception *)this[2]; + lpuexcpt = (struct _Unwind_Exception *)(this + 1); + while ( Block ) + { + v2 = (unsigned __int8)std::operator<((int)Block + 16, a2) == 0; + v3 = lpuexcpt; + v4 = (struct _Unwind_Exception *)*((_DWORD *)Block + 3); + if ( v2 ) + { + v4 = (struct _Unwind_Exception *)*((_DWORD *)Block + 2); + if ( v2 ) + v3 = Block; + } + Block = v4; + lpuexcpt = v3; + } + if ( v7 == lpuexcpt || (unsigned __int8)std::operator<(a2, (int)lpuexcpt + 16) ) + { + Blocka = (char *)operator new(0x2Cu); + std::string::basic_string(Blocka + 16, a2); + *((_DWORD *)Blocka + 10) = 0; + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + this, + lpuexcpt, + (int)(Blocka + 16)); + if ( v5 ) + { + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_insert_node( + this, + (int)lpuexcpt, + v5, + Blocka); + } + else + { + std::string::_M_dispose((void **)Blocka + 4); + operator delete(Blocka); + } + } + return (char *)lpuexcpt + 40; +} +// 500714: variable 'v5' is possibly undefined + +//----- (005007B8) -------------------------------------------------------- +void **__thiscall std::map::operator[](void **this, int a2) +{ + bool v2; // zf + struct _Unwind_Exception *v3; // eax + struct _Unwind_Exception *v4; // edx + void **v5; // edx + char v6; // al + int insert_hint_unique_pos; // [esp+14h] [ebp-54h] + void **v9; // [esp+18h] [ebp-50h] + void **v10; // [esp+18h] [ebp-50h] + void **v12; // [esp+20h] [ebp-48h] + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-44h] + void **lpuexcpta; // [esp+24h] [ebp-44h] + void **Block; // [esp+28h] [ebp-40h] + + v12 = this + 1; + lpuexcpt = (struct _Unwind_Exception *)this[2]; + Block = this + 1; + while ( lpuexcpt ) + { + v2 = (unsigned __int8)std::operator<((int)lpuexcpt + 16, a2) == 0; + v3 = (struct _Unwind_Exception *)Block; + v4 = (struct _Unwind_Exception *)*((_DWORD *)lpuexcpt + 3); + if ( v2 ) + { + v4 = (struct _Unwind_Exception *)*((_DWORD *)lpuexcpt + 2); + if ( v2 ) + v3 = lpuexcpt; + } + lpuexcpt = v4; + Block = (void **)v3; + } + if ( v12 == Block || (unsigned __int8)std::operator<(a2, (int)(Block + 4)) ) + { + v9 = Block; + Block = (void **)operator new(0x2Cu); + lpuexcpta = Block + 4; + std::string::basic_string((char *)Block + 16, a2); + Block[10] = 0; + insert_hint_unique_pos = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + this, + v9, + (int)(Block + 4)); + v10 = v5; + if ( v5 ) + { + v6 = insert_hint_unique_pos != 0 || v12 == v5; + if ( !v6 ) + v6 = std::operator<((int)lpuexcpta, (int)(v5 + 4)); + std::_Rb_tree_insert_and_rebalance(v6, Block, v10, v12); + this[5] = (char *)this[5] + 1; + } + else + { + std::string::_M_dispose(lpuexcpta); + operator delete(Block); + Block = (void **)insert_hint_unique_pos; + } + } + return Block + 10; +} +// 5008B3: variable 'v5' is possibly undefined + +//----- (00500998) -------------------------------------------------------- +_DWORD *__thiscall std::map>>::operator[]( + _DWORD *this, + _DWORD *a2) +{ + _DWORD *v3; // edi + _DWORD *v4; // ebx + _DWORD *i; // eax + _DWORD *v6; // edx + int *v7; // eax + _DWORD *v8; // edx + bool v9; // al + _DWORD *v11; // [esp+1Ch] [ebp-1Ch] + int insert_hint_unique_pos; // [esp+1Ch] [ebp-1Ch] + + v3 = this + 1; + v4 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v6 ) + { + v6 = (_DWORD *)i[3]; + if ( i[4] >= *a2 ) + v6 = (_DWORD *)i[2]; + if ( i[4] >= *a2 ) + v4 = i; + } + if ( v3 == v4 || *a2 < v4[4] ) + { + v11 = v4; + v4 = operator new(0x2Cu); + v4[4] = *a2; + std::_Rb_tree_header::_Rb_tree_header(v4 + 6); + insert_hint_unique_pos = std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_get_insert_hint_unique_pos( + this, + v11, + v7); + if ( v8 ) + { + v9 = insert_hint_unique_pos != 0 || v3 == v8; + if ( !v9 ) + v9 = v4[4] < v8[4]; + std::_Rb_tree_insert_and_rebalance(v9, v4, v8, v3); + ++this[5]; + } + else + { + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::~_Rb_tree((int)(v4 + 5)); + operator delete(v4); + v4 = (_DWORD *)insert_hint_unique_pos; + } + } + return v4 + 5; +} +// 500A13: variable 'v7' is possibly undefined +// 500A1F: variable 'v8' is possibly undefined + +//----- (00500A78) -------------------------------------------------------- +_DWORD *__thiscall std::map>>::operator[]( + _DWORD *this, + int *a2) +{ + _DWORD *v3; // edi + _DWORD *v4; // ebx + _DWORD *i; // eax + _DWORD *v6; // edx + int v7; // eax + int insert_hint_unique_pos; // eax + _DWORD *v9; // edx + bool v10; // al + _DWORD *v12; // [esp+18h] [ebp-20h] + _DWORD *v13; // [esp+18h] [ebp-20h] + int v14; // [esp+1Ch] [ebp-1Ch] + + v3 = this + 1; + v4 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v6 ) + { + v6 = (_DWORD *)i[3]; + if ( i[4] >= *a2 ) + v6 = (_DWORD *)i[2]; + if ( i[4] >= *a2 ) + v4 = i; + } + if ( v3 == v4 || *a2 < v4[4] ) + { + v12 = v4; + v4 = operator new(0x2Cu); + v7 = *a2; + v4[6] = 0; + v4[7] = 0; + v4[4] = v7; + v14 = v7; + v4[8] = v4 + 6; + v4[9] = v4 + 6; + v4[10] = 0; + insert_hint_unique_pos = std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_get_insert_hint_unique_pos( + this, + v12, + v4 + 4); + v13 = (_DWORD *)insert_hint_unique_pos; + if ( v9 ) + { + v10 = v3 == v9 || insert_hint_unique_pos != 0; + if ( !v10 ) + v10 = v14 < v9[4]; + std::_Rb_tree_insert_and_rebalance(v10, v4, v9, v3); + ++this[5]; + } + else + { + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(0); + operator delete(v4); + v4 = v13; + } + } + return v4 + 5; +} +// 500B12: variable 'v9' is possibly undefined + +//----- (00500B68) -------------------------------------------------------- +char *__thiscall std::map::operator[](_DWORD *this, unsigned int *a2) +{ + _DWORD *v3; // ebx + _DWORD *i; // eax + _DWORD *v5; // ecx + _DWORD *v6; // edi + unsigned int v7; // eax + _DWORD *v8; // edx + int insert_hint_unique_pos; // edi + bool v10; // al + void *v12; // [esp+0h] [ebp-38h] + unsigned int v13; // [esp+18h] [ebp-20h] + _DWORD *v14; // [esp+1Ch] [ebp-1Ch] + + v3 = this + 1; + v14 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v5 = (_DWORD *)i[3]; + if ( i[4] >= *a2 ) + v5 = (_DWORD *)i[2]; + if ( i[4] >= *a2 ) + v3 = i; + } + if ( v14 == v3 || *a2 < v3[4] ) + { + v6 = v3; + v3 = operator new(0x2Cu); + v7 = *a2; + v3[6] = 0; + *((_BYTE *)v3 + 28) = 0; + v3[4] = v7; + v13 = v7; + v3[5] = v3 + 7; + insert_hint_unique_pos = std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + this, + v6, + v3 + 4); + if ( v8 ) + { + v10 = insert_hint_unique_pos != 0 || v14 == v8; + if ( !v10 ) + v10 = v13 < v8[4]; + std::_Rb_tree_insert_and_rebalance(v10, v3, v8, v14); + ++this[5]; + } + else + { + std::string::_M_dispose((void **)v3 + 5); + v12 = v3; + v3 = (_DWORD *)insert_hint_unique_pos; + operator delete(v12); + } + } + return (char *)(v3 + 5); +} +// 500BF7: variable 'v8' is possibly undefined + +//----- (00500C50) -------------------------------------------------------- +char *__thiscall std::set::insert(_DWORD *this, int a2) +{ + int insert_unique_pos; // eax + _DWORD *v3; // edx + char v5; // [esp+1Fh] [ebp-49h] + _DWORD *v6; // [esp+20h] [ebp-48h] + char *Block; // [esp+28h] [ebp-40h] + + insert_unique_pos = std::_Rb_tree,std::less,std::allocator>::_M_get_insert_unique_pos( + this, + a2); + v6 = v3; + Block = (char *)insert_unique_pos; + if ( v3 ) + { + v5 = 1; + if ( !insert_unique_pos && v3 != this + 1 ) + v5 = std::operator<(a2, (int)(v3 + 4)); + Block = (char *)operator new(0x28u); + std::string::basic_string(Block + 16, a2); + std::_Rb_tree_insert_and_rebalance(v5, Block, v6, this + 1); + ++this[5]; + } + return Block; +} +// 500C8D: variable 'v3' is possibly undefined + +//----- (00500D90) -------------------------------------------------------- +void __thiscall std::pair::swap(_DWORD *this, _DWORD *a2) +{ + int v2; // ebx + _DWORD v3[34]; // [esp+10h] [ebp-88h] BYREF + + v2 = (int)(this + 6); + std::string::swap(this, a2); + WXML::DOMLib::Token::Token(v3, v2); + WXML::DOMLib::Token::operator=(v2, (int)(a2 + 6)); + WXML::DOMLib::Token::operator=((int)(a2 + 6), (int)v3); + WXML::DOMLib::Token::~Token((int)v3); +} +// 500D90: using guessed type _DWORD var_88[34]; + +//----- (00500DE8) -------------------------------------------------------- +_DWORD *__thiscall std::pair::pair(_DWORD *this, _DWORD *a2) +{ + std::string::basic_string(this, a2); + return WXML::DOMLib::Token::Token(this + 6, (int)(a2 + 6)); +} + +//----- (00500E14) -------------------------------------------------------- +void __fastcall std::pair::~pair(void **a1) +{ + WXML::DOMLib::Token::~Token((int)(a1 + 6)); + std::string::_M_dispose(a1); +} + +//----- (00500E30) -------------------------------------------------------- +int __cdecl std::__pad>::_S_pad(_DWORD *a1, void *Src, char *a3, _BYTE *a4, int a5, int a6) +{ + char *v6; // edi + size_t Size; // ebx + int result; // eax + size_t v9; // ebp + char *v10; // esi + _BYTE *v11; // eax + _BYTE *v12; // ecx + char v13; // al + char v14; // dl + int (__stdcall *v15)(unsigned __int8); // edx + int (__stdcall *v16)(unsigned __int8); // edx + char v17; // dl + int (__stdcall *v18)(unsigned __int8); // eax + char v19; // dl + int (__stdcall *v20)(unsigned __int8); // eax + int (__stdcall *v21)(unsigned __int8); // eax + void *v22; // [esp+14h] [ebp-28h] + _BYTE *v23; // [esp+1Ch] [ebp-20h] + _BYTE *v24; // [esp+1Ch] [ebp-20h] + _BYTE *v25; // [esp+1Ch] [ebp-20h] + _BYTE *v26; // [esp+1Ch] [ebp-20h] + _BYTE *v27; // [esp+1Ch] [ebp-20h] + + v6 = a3; + v22 = a4; + Size = a5 - a6; + result = a1[3] & 0xB0; + if ( result == 32 ) + { + if ( a6 ) + { + result = (int)memcpy(a3, a4, a6); + if ( !Size ) + return result; + } + else if ( !Size ) + { + return result; + } + return (int)memset(&a3[a6], (char)Src, Size); + } + v9 = a6; + if ( result != 16 ) + goto LABEL_3; + v11 = std::use_facet>((int)(a1 + 27)); + v12 = v11; + if ( v11[28] ) + { + result = (unsigned __int8)*a4; + if ( v12[74] == (_BYTE)result ) + goto LABEL_29; + goto LABEL_8; + } + v23 = v11; + std::ctype::_M_widen_init((int)v11); + v12 = v23; + v15 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v23 + 24); + result = 45; + if ( v15 != std::ctype::do_widen ) + { + result = v15(45u); + v12 = v23; + } + if ( *a4 == (_BYTE)result ) + goto LABEL_29; + if ( v12[28] ) + { + result = (unsigned __int8)*a4; +LABEL_8: + if ( v12[72] != (_BYTE)result ) + { +LABEL_9: + if ( v12[77] == (_BYTE)result && a6 > 1 ) + { +LABEL_11: + v13 = a4[1]; + if ( v13 == v12[149] ) + { +LABEL_43: + v6 = a3 + 2; + v9 = a6 - 2; + *a3 = *a4; + result = (unsigned __int8)a4[1]; + v22 = a4 + 2; + a3[1] = result; + goto LABEL_3; + } + goto LABEL_12; + } +LABEL_3: + v10 = &v6[Size]; + if ( !Size ) + { + if ( !v9 ) + return result; + return (int)memcpy(v10, v22, v9); + } + goto LABEL_15; + } +LABEL_29: + *a3 = result; + v9 = a6 - 1; + v6 = a3 + 1; + v22 = a4 + 1; + goto LABEL_3; + } + v24 = v12; + std::ctype::_M_widen_init((int)v12); + v12 = v24; + v16 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v24 + 24); + result = 43; + if ( v16 != std::ctype::do_widen ) + { + result = v16(43u); + v12 = v24; + } + if ( *a4 == (_BYTE)result ) + goto LABEL_29; + if ( v12[28] ) + { + result = (unsigned __int8)*a4; + goto LABEL_9; + } + v25 = v12; + std::ctype::_M_widen_init((int)v12); + v12 = v25; + v17 = 48; + v18 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v25 + 24); + if ( v18 != std::ctype::do_widen ) + { + v17 = v18(48u); + v12 = v25; + } + result = (int)a4; + if ( *a4 != v17 || a6 <= 1 ) + goto LABEL_3; + if ( v12[28] ) + goto LABEL_11; + v26 = v12; + std::ctype::_M_widen_init((int)v12); + v12 = v26; + v19 = 120; + v20 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v26 + 24); + if ( v20 != std::ctype::do_widen ) + { + v19 = v20(120u); + v12 = v26; + } + v13 = a4[1]; + if ( v13 == v19 ) + goto LABEL_43; + if ( v12[28] ) + { +LABEL_12: + v14 = v12[117]; + goto LABEL_13; + } + v27 = v12; + std::ctype::_M_widen_init((int)v12); + v21 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v27 + 24); + if ( v21 == std::ctype::do_widen ) + v14 = 88; + else + v14 = v21(88u); + v13 = a4[1]; +LABEL_13: + if ( v14 == v13 ) + goto LABEL_43; + v10 = &a3[Size]; + if ( !Size ) + return (int)memcpy(v10, v22, v9); +LABEL_15: + result = (int)memset(v6, (char)Src, Size); + if ( v9 ) + return (int)memcpy(v10, v22, v9); + return result; +} + +//----- (00501170) -------------------------------------------------------- +_WORD *__cdecl std::__pad>::_S_pad( + _DWORD *a1, + void *Src, + _WORD *Size, + _WORD *a4, + int a5, + int a6) +{ + _WORD *v6; // esi + int v7; // ebx + _WORD *result; // eax + int v9; // edx + __int16 v10; // ax + __int16 v11; // ax + __int16 v12; // ax + _WORD *v13; // esi + _WORD *v14; // [esp+20h] [ebp-2Ch] + void *v15; // [esp+28h] [ebp-24h] + + v14 = a4; + v6 = Size; + v7 = a5 - a6; + result = (_WORD *)(a1[3] & 0xB0); + if ( result != (_WORD *)32 ) + { + v9 = a6; + if ( result == (_WORD *)16 ) + { + v15 = std::use_facet>((int)(a1 + 27)); + v10 = (*(int (__stdcall **)(int))(*(_DWORD *)v15 + 40))(45); + if ( *a4 == v10 || (v10 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v15 + 40))(v15, 43), *a4 == v10) ) + { + *Size = v10; + v9 = a6 - 1; + v6 = Size + 1; + v14 = a4 + 1; + } + else + { + v11 = (*(int (__stdcall **)(int))(*(_DWORD *)v15 + 40))(48); + v9 = a6; + if ( *a4 == v11 && a6 > 1 ) + { + if ( a4[1] != (*(unsigned __int16 (__stdcall **)(int))(*(_DWORD *)v15 + 40))(120) ) + { + v12 = (*(int (__thiscall **)(void *, int))(*(_DWORD *)v15 + 40))(v15, 88); + v9 = a6; + if ( a4[1] != v12 ) + { + result = &Size[v7]; + if ( !v7 ) + return memcpy(result, v14, 2 * v9); + do + { +LABEL_4: + *v6++ = (_WORD)Src; + --v7; + } + while ( v7 ); +LABEL_5: + if ( !v9 ) + return result; + return memcpy(result, v14, 2 * v9); + } + } + v6 = Size + 2; + v9 = a6 - 2; + *Size = *a4; + v14 = a4 + 2; + Size[1] = a4[1]; + } + } + } + result = &v6[v7]; + if ( !v7 ) + goto LABEL_5; + goto LABEL_4; + } + if ( a6 ) + { + result = memcpy(Size, a4, 2 * a6); + v13 = &Size[a6]; + if ( !v7 ) + return result; + } + else + { + v13 = &Size[a6]; + if ( !v7 ) + return result; + } + do + { + *v13++ = (_WORD)Src; + --v7; + } + while ( v7 ); + return result; +} + +//----- (005013A0) -------------------------------------------------------- +void *std::ctype::classic_table() +{ + return &std::ctype::classic_table(void)::_S_classic_table; +} + +//----- (005013B0) -------------------------------------------------------- +int __thiscall std::ctype::ctype(_DWORD *this, void *a2, char a3, int a4) +{ + void *v4; // eax + int result; // eax + + v4 = a2; + *this = &off_560A68; + this[4] = 0; + this[5] = 0; + this[1] = a4 != 0; + *((_BYTE *)this + 12) = a3 & (a2 != 0); + if ( !a2 ) + v4 = &std::ctype::classic_table(void)::_S_classic_table; + *(_DWORD *)((char *)this + 29) = 0; + *(_DWORD *)((char *)this + 281) = 0; + this[6] = v4; + result = 0; + memset( + (void *)(((unsigned int)this + 33) & 0xFFFFFFFC), + 0, + 4 * (((unsigned int)this - (((unsigned int)this + 33) & 0xFFFFFFFC) + 285) >> 2)); + *((_BYTE *)this + 28) = 0; + *(_DWORD *)((char *)this + 285) = 0; + *(_DWORD *)((char *)this + 537) = 0; + memset( + (void *)(((unsigned int)this + 289) & 0xFFFFFFFC), + 0, + 4 * (((unsigned int)this - (((unsigned int)this + 289) & 0xFFFFFFFC) + 541) >> 2)); + *((_BYTE *)this + 541) = 0; + return result; +} +// 560A68: using guessed type int (*off_560A68)(); + +//----- (00501460) -------------------------------------------------------- +int __thiscall std::ctype::ctype(_DWORD *this, int a2, void *a3, char a4, int a5) +{ + void *v5; // eax + int result; // eax + + v5 = a3; + *this = &off_560A68; + this[4] = 0; + this[5] = 0; + this[1] = a5 != 0; + *((_BYTE *)this + 12) = a4 & (a3 != 0); + if ( !a3 ) + v5 = &std::ctype::classic_table(void)::_S_classic_table; + *(_DWORD *)((char *)this + 29) = 0; + *(_DWORD *)((char *)this + 281) = 0; + this[6] = v5; + result = 0; + memset( + (void *)(((unsigned int)this + 33) & 0xFFFFFFFC), + 0, + 4 * (((unsigned int)this - (((unsigned int)this + 33) & 0xFFFFFFFC) + 285) >> 2)); + *((_BYTE *)this + 28) = 0; + *(_DWORD *)((char *)this + 285) = 0; + *(_DWORD *)((char *)this + 537) = 0; + memset( + (void *)(((unsigned int)this + 289) & 0xFFFFFFFC), + 0, + 4 * (((unsigned int)this - (((unsigned int)this + 289) & 0xFFFFFFFC) + 541) >> 2)); + *((_BYTE *)this + 541) = 0; + return result; +} +// 560A68: using guessed type int (*off_560A68)(); + +//----- (00501510) -------------------------------------------------------- +void __fastcall std::ctype::~ctype(void **Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_560A68; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + if ( *((_BYTE *)Block + 12) && Block[6] ) + operator delete[](Block[6]); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 501563: variable 'lpfctx' is possibly undefined +// 560A68: using guessed type int (*off_560A68)(); + +//----- (00501580) -------------------------------------------------------- +void __fastcall std::ctype::~ctype(int a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *(_DWORD *)a1 = &off_560A68; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 8)); + if ( *(_BYTE *)(a1 + 12) && *(_DWORD *)(a1 + 24) ) + operator delete[](*(void **)(a1 + 24)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 5015D3: variable 'lpfctx' is possibly undefined +// 560A68: using guessed type int (*off_560A68)(); + +//----- (005015F0) -------------------------------------------------------- +int __fastcall std::ctype::_M_initialize_ctype(int a1) +{ + int WCh; // ebx + int v3; // eax + int i; // ebx + int j; // ebx + int result; // eax + + for ( WCh = 0; WCh != 128; ++WCh ) + { + v3 = wctob(WCh); + if ( v3 == -1 ) + { + *(_BYTE *)(a1 + 12) = 0; + goto LABEL_5; + } + *(_BYTE *)(a1 + WCh + 13) = v3; + } + *(_BYTE *)(a1 + 12) = 1; +LABEL_5: + for ( i = 0; i != 256; ++i ) + *(_WORD *)(a1 + 2 * i + 142) = btowc(i); + for ( j = 0; j != 16; ++j ) + { + *(_WORD *)(a1 + 2 * j + 654) = 1 << j; + result = std::ctype::_M_convert_to_wmask(1 << j); + *(_WORD *)(a1 + 2 * j + 686) = result; + } + return result; +} + +//----- (00501690) -------------------------------------------------------- +int __thiscall std::ctype::ctype(_DWORD *this, char a2, int a3) +{ + int v4; // eax + + *this = &off_560A98; + this[1] = a3 != 0; + v4 = std::locale::facet::_S_clone_c_locale(); + *((_BYTE *)this + 12) = 0; + this[2] = v4; + return std::ctype::_M_initialize_ctype((int)this); +} +// 560A98: using guessed type int (*off_560A98)(); + +//----- (005016D0) -------------------------------------------------------- +void __thiscall std::ctype::ctype(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560A98; + this[2] = std::locale::facet::_S_get_c_locale(); + *((_BYTE *)this + 12) = 0; + std::ctype::_M_initialize_ctype((int)this); +} +// 560A98: using guessed type int (*off_560A98)(); + +//----- (00501780) -------------------------------------------------------- +void __fastcall std::ctype::~ctype(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_560A98; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + *Block = &unk_56089C; + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 5017C4: variable 'lpfctx' is possibly undefined +// 560A98: using guessed type int (*off_560A98)(); + +//----- (005017E0) -------------------------------------------------------- +void __fastcall std::ctype::~ctype(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560A98; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + *a1 = &unk_56089C; + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 501824: variable 'lpfctx' is possibly undefined +// 560A98: using guessed type int (*off_560A98)(); + +//----- (00501840) -------------------------------------------------------- +int __fastcall std::deque>::back(_DWORD *a1) +{ + int v1; // eax + + v1 = a1[6]; + if ( v1 == a1[7] ) + v1 = *(_DWORD *)(a1[9] - 4) + 512; + return v1 - 8; +} + +//----- (00501858) -------------------------------------------------------- +int __fastcall std::deque>::pop_back(_DWORD *a1) +{ + char *v2; // ecx + int v4; // eax + int v5; // ecx + + v2 = (char *)a1[6]; + if ( v2 == (char *)a1[7] ) + { + operator delete(v2); + v4 = a1[9]; + v5 = *(_DWORD *)(v4 - 4); + a1[9] = v4 - 4; + a1[7] = v5; + a1[8] = v5 + 512; + a1[6] = v5 + 504; + return std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)(v5 + 508)); + } + else + { + a1[6] = v2 - 8; + return std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)v2 - 1); + } +} + +//----- (005018B0) -------------------------------------------------------- +void __thiscall std::deque>::push_back(int this, _DWORD *a2) +{ + int v3; // eax + int v4; // edi + char *v5; // ecx + int v6; // edi + unsigned int v7; // eax + int v8; // edi + char *v9; // edi + char *v10; // eax + int v11; // ecx + unsigned int v12; // esi + int v13; // ecx + int v14; // eax + int v15; // eax + int v16; // eax + int v17; // esi + int *v18; // edx + int v19; // eax + int v20; // [esp+18h] [ebp-20h] + int v21; // [esp+1Ch] [ebp-1Ch] + char *v22; // [esp+1Ch] [ebp-1Ch] + + v3 = *(_DWORD *)(this + 24); + if ( v3 == *(_DWORD *)(this + 32) - 8 ) + { + v4 = *(_DWORD *)(this + 36); + v5 = *(char **)(this + 20); + v21 = v4; + v20 = v4 - (_DWORD)v5; + v6 = (v4 - (int)v5) >> 2; + if ( ((*(_DWORD *)(this + 16) - *(_DWORD *)(this + 8)) >> 3) + + ((v3 - *(_DWORD *)(this + 28)) >> 3) + + ((v6 - 1) << 6) == 0xFFFFFFF ) + std::__throw_length_error((std::length_error *)"cannot create std::deque larger than max_size()"); + v7 = *(_DWORD *)(this + 4); + if ( v7 - ((v21 - *(_DWORD *)this) >> 2) <= 1 ) + { + v8 = v6 + 2; + if ( v7 <= 2 * v8 ) + { + v11 = 1; + if ( v7 ) + v11 = *(_DWORD *)(this + 4); + v12 = v7 + v11 + 2; + if ( v12 > 0x1FFFFFFF ) + std::__throw_bad_alloc(); + v22 = (char *)operator new(4 * v12); + v9 = &v22[4 * ((v12 - v8) >> 1)]; + v13 = *(_DWORD *)(this + 20); + v14 = *(_DWORD *)(this + 36) + 4; + if ( v14 != v13 ) + memmove(v9, *(const void **)(this + 20), v14 - v13); + operator delete(*(void **)this); + *(_DWORD *)(this + 4) = v12; + *(_DWORD *)this = v22; + } + else + { + v9 = (char *)(*(_DWORD *)this + 4 * ((v7 - v8) >> 1)); + v10 = (char *)(v21 + 4); + if ( v5 <= v9 ) + { + if ( v5 != v10 ) + memmove(&v9[v20 - (v21 - (_DWORD)v5)], v5, v21 + 4 - (_DWORD)v5); + } + else if ( v5 != v10 ) + { + memmove(v9, v5, v21 + 4 - (_DWORD)v5); + } + } + v15 = *(_DWORD *)v9; + *(_DWORD *)(this + 20) = v9; + *(_DWORD *)(this + 12) = v15; + *(_DWORD *)(this + 16) = v15 + 512; + v16 = *(_DWORD *)&v9[v20]; + *(_DWORD *)(this + 36) = &v9[v20]; + *(_DWORD *)(this + 28) = v16; + *(_DWORD *)(this + 32) = v16 + 512; + } + v17 = *(_DWORD *)(this + 36); + *(_DWORD *)(v17 + 4) = operator new(0x200u); + std::__shared_ptr::__shared_ptr(*(_DWORD **)(this + 24), a2); + v18 = (int *)(*(_DWORD *)(this + 36) + 4); + v19 = *v18; + *(_DWORD *)(this + 36) = v18; + *(_DWORD *)(this + 28) = v19; + *(_DWORD *)(this + 32) = v19 + 512; + *(_DWORD *)(this + 24) = v19; + } + else + { + std::__shared_ptr::__shared_ptr(*(_DWORD **)(this + 24), a2); + *(_DWORD *)(this + 24) += 8; + } +} + +//----- (00501A70) -------------------------------------------------------- +int __fastcall std::deque>::back(_DWORD *a1) +{ + int v1; // eax + + v1 = a1[6]; + if ( v1 == a1[7] ) + v1 = *(_DWORD *)(a1[9] - 4) + 512; + return v1 - 8; +} + +//----- (00501A88) -------------------------------------------------------- +int __fastcall std::deque>::pop_back(_DWORD *a1) +{ + char *v2; // ecx + int v4; // eax + int v5; // ecx + + v2 = (char *)a1[6]; + if ( v2 == (char *)a1[7] ) + { + operator delete(v2); + v4 = a1[9]; + v5 = *(_DWORD *)(v4 - 4); + a1[9] = v4 - 4; + a1[7] = v5; + a1[8] = v5 + 512; + a1[6] = v5 + 504; + return std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)(v5 + 508)); + } + else + { + a1[6] = v2 - 8; + return std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)v2 - 1); + } +} + +//----- (00501AE0) -------------------------------------------------------- +void __thiscall std::deque>::push_back(int this, int *a2) +{ + int v3; // eax + int v4; // edi + char *v5; // ecx + int v6; // edi + unsigned int v7; // eax + int v8; // edi + char *v9; // edi + char *v10; // eax + int v11; // ecx + unsigned int v12; // esi + int v13; // ecx + int v14; // eax + int v15; // eax + int v16; // eax + int v17; // esi + int *v18; // edx + int v19; // eax + int v20; // [esp+18h] [ebp-20h] + int v21; // [esp+1Ch] [ebp-1Ch] + char *v22; // [esp+1Ch] [ebp-1Ch] + + v3 = *(_DWORD *)(this + 24); + if ( v3 == *(_DWORD *)(this + 32) - 8 ) + { + v4 = *(_DWORD *)(this + 36); + v5 = *(char **)(this + 20); + v21 = v4; + v20 = v4 - (_DWORD)v5; + v6 = (v4 - (int)v5) >> 2; + if ( ((*(_DWORD *)(this + 16) - *(_DWORD *)(this + 8)) >> 3) + + ((v3 - *(_DWORD *)(this + 28)) >> 3) + + ((v6 - 1) << 6) == 0xFFFFFFF ) + std::__throw_length_error((std::length_error *)"cannot create std::deque larger than max_size()"); + v7 = *(_DWORD *)(this + 4); + if ( v7 - ((v21 - *(_DWORD *)this) >> 2) <= 1 ) + { + v8 = v6 + 2; + if ( v7 <= 2 * v8 ) + { + v11 = 1; + if ( v7 ) + v11 = *(_DWORD *)(this + 4); + v12 = v7 + v11 + 2; + if ( v12 > 0x1FFFFFFF ) + std::__throw_bad_alloc(); + v22 = (char *)operator new(4 * v12); + v9 = &v22[4 * ((v12 - v8) >> 1)]; + v13 = *(_DWORD *)(this + 20); + v14 = *(_DWORD *)(this + 36) + 4; + if ( v14 != v13 ) + memmove(v9, *(const void **)(this + 20), v14 - v13); + operator delete(*(void **)this); + *(_DWORD *)(this + 4) = v12; + *(_DWORD *)this = v22; + } + else + { + v9 = (char *)(*(_DWORD *)this + 4 * ((v7 - v8) >> 1)); + v10 = (char *)(v21 + 4); + if ( v5 <= v9 ) + { + if ( v5 != v10 ) + memmove(&v9[v20 - (v21 - (_DWORD)v5)], v5, v21 + 4 - (_DWORD)v5); + } + else if ( v5 != v10 ) + { + memmove(v9, v5, v21 + 4 - (_DWORD)v5); + } + } + v15 = *(_DWORD *)v9; + *(_DWORD *)(this + 20) = v9; + *(_DWORD *)(this + 12) = v15; + *(_DWORD *)(this + 16) = v15 + 512; + v16 = *(_DWORD *)&v9[v20]; + *(_DWORD *)(this + 36) = &v9[v20]; + *(_DWORD *)(this + 28) = v16; + *(_DWORD *)(this + 32) = v16 + 512; + } + v17 = *(_DWORD *)(this + 36); + *(_DWORD *)(v17 + 4) = operator new(0x200u); + std::__shared_ptr::__shared_ptr(*(int **)(this + 24), a2); + v18 = (int *)(*(_DWORD *)(this + 36) + 4); + v19 = *v18; + *(_DWORD *)(this + 36) = v18; + *(_DWORD *)(this + 28) = v19; + *(_DWORD *)(this + 32) = v19 + 512; + *(_DWORD *)(this + 24) = v19; + } + else + { + std::__shared_ptr::__shared_ptr(*(int **)(this + 24), a2); + *(_DWORD *)(this + 24) += 8; + } +} + +//----- (00501CA0) -------------------------------------------------------- +int __fastcall std::deque>::pop_back(_DWORD *a1) +{ + char *v2; // ecx + int v4; // eax + int v5; // ecx + + v2 = (char *)a1[6]; + if ( v2 == (char *)a1[7] ) + { + operator delete(v2); + v4 = a1[9]; + v5 = *(_DWORD *)(v4 - 4); + a1[9] = v4 - 4; + a1[7] = v5; + a1[8] = v5 + 512; + a1[6] = v5 + 504; + return std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)(v5 + 508)); + } + else + { + a1[6] = v2 - 8; + return std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)v2 - 1); + } +} + +//----- (00501CF8) -------------------------------------------------------- +void __thiscall std::deque>::push_back(int this, int *a2) +{ + int *v3; // eax + char *v4; // ecx + int v5; // esi + unsigned int v6; // eax + int v7; // ebx + char *v8; // ebx + char *v9; // eax + int v10; // ecx + unsigned int v11; // esi + char *v12; // eax + const void *v13; // ecx + int v14; // eax + int v15; // eax + char *v16; // ebx + int v17; // eax + int v18; // ebx + int *v19; // ecx + int *v20; // ecx + int v21; // eax + int v22; // [esp+18h] [ebp-20h] + int v23; // [esp+1Ch] [ebp-1Ch] + char *v24; // [esp+1Ch] [ebp-1Ch] + + v3 = *(int **)(this + 24); + if ( v3 == (int *)(*(_DWORD *)(this + 32) - 8) ) + { + v4 = *(char **)(this + 20); + v23 = *(_DWORD *)(this + 36); + v22 = v23 - (_DWORD)v4; + v5 = (v23 - (int)v4) >> 2; + if ( ((*(_DWORD *)(this + 16) - *(_DWORD *)(this + 8)) >> 3) + + (((int)v3 - *(_DWORD *)(this + 28)) >> 3) + + ((v5 - 1) << 6) == 0xFFFFFFF ) + std::__throw_length_error((std::length_error *)"cannot create std::deque larger than max_size()"); + v6 = *(_DWORD *)(this + 4); + if ( v6 - ((v23 - *(_DWORD *)this) >> 2) <= 1 ) + { + v7 = v5 + 2; + if ( v6 <= 2 * (v5 + 2) ) + { + v10 = 1; + if ( v6 ) + v10 = *(_DWORD *)(this + 4); + v11 = v6 + v10 + 2; + if ( v11 > 0x1FFFFFFF ) + std::__throw_bad_alloc(); + v12 = (char *)operator new(4 * v11); + v13 = *(const void **)(this + 20); + v24 = v12; + v8 = &v12[4 * ((v11 - v7) >> 1)]; + v14 = *(_DWORD *)(this + 36) + 4; + if ( (const void *)v14 != v13 ) + memmove(v8, v13, v14 - (_DWORD)v13); + operator delete(*(void **)this); + *(_DWORD *)(this + 4) = v11; + *(_DWORD *)this = v24; + } + else + { + v8 = (char *)(*(_DWORD *)this + 4 * ((v6 - v7) >> 1)); + v9 = (char *)(v23 + 4); + if ( v4 <= v8 ) + { + if ( v9 != v4 ) + memmove(v8, v4, v23 + 4 - (_DWORD)v4); + } + else if ( v9 != v4 ) + { + memmove(v8, v4, v23 + 4 - (_DWORD)v4); + } + } + v15 = *(_DWORD *)v8; + *(_DWORD *)(this + 20) = v8; + v16 = &v8[v22]; + *(_DWORD *)(this + 12) = v15; + *(_DWORD *)(this + 16) = v15 + 512; + v17 = *(_DWORD *)v16; + *(_DWORD *)(this + 36) = v16; + *(_DWORD *)(this + 28) = v17; + *(_DWORD *)(this + 32) = v17 + 512; + } + v18 = *(_DWORD *)(this + 36); + *(_DWORD *)(v18 + 4) = operator new(0x200u); + v19 = (int *)(*(_DWORD *)(this + 24) + 4); + *(v19 - 1) = *a2; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count(v19, a2[1]); + v20 = (int *)(*(_DWORD *)(this + 36) + 4); + v21 = *v20; + *(_DWORD *)(this + 36) = v20; + *(_DWORD *)(this + 28) = v21; + *(_DWORD *)(this + 32) = v21 + 512; + *(_DWORD *)(this + 24) = v21; + } + else + { + *v3 = *a2; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count(v3 + 1, a2[1]); + *(_DWORD *)(this + 24) += 8; + } +} + +//----- (00501ECC) -------------------------------------------------------- +void __thiscall std::deque::_M_push_back_aux(int this, int a2) +{ + int v2; // edi + struct _Unwind_Exception *v3; // ecx + unsigned int v4; // eax + struct _Unwind_Exception *v5; // eax + int v6; // edx + const void *v7; // edx + int v8; // eax + int v9; // eax + int v10; // eax + int *v11; // edx + int v12; // eax + char *v13; // [esp+18h] [ebp-60h] + int v14; // [esp+1Ch] [ebp-5Ch] + unsigned int v15; // [esp+20h] [ebp-58h] + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-54h] + struct _Unwind_Exception *lpuexcpta; // [esp+24h] [ebp-54h] + struct _Unwind_Exception *lpuexcptb; // [esp+24h] [ebp-54h] + + v2 = *(_DWORD *)(this + 36); + v3 = *(struct _Unwind_Exception **)(this + 20); + v14 = *(_DWORD *)(this + 36) - (_DWORD)v3; + if ( -1431655765 * ((*(_DWORD *)(this + 16) - *(_DWORD *)(this + 8)) >> 3) + + 21 * ((v14 >> 2) - 1) + - 1431655765 * ((*(_DWORD *)(this + 24) - *(_DWORD *)(this + 28)) >> 3) == 89478485 ) + std::__throw_length_error((std::length_error *)"cannot create std::deque larger than max_size()"); + v4 = *(_DWORD *)(this + 4); + if ( v4 - ((v2 - *(_DWORD *)this) >> 2) <= 1 ) + { + lpuexcpt = (struct _Unwind_Exception *)((v14 >> 2) + 2); + if ( v4 <= 2 * (int)lpuexcpt ) + { + v6 = 1; + if ( v4 ) + v6 = *(_DWORD *)(this + 4); + v15 = v4 + v6 + 2; + if ( v15 > 0x1FFFFFFF ) + std::__throw_bad_alloc(); + v13 = (char *)operator new(4 * v15); + lpuexcpta = (struct _Unwind_Exception *)&v13[4 * ((v15 - (unsigned int)lpuexcpt) >> 1)]; + v7 = *(const void **)(this + 20); + v8 = *(_DWORD *)(this + 36) + 4; + if ( (const void *)v8 != v7 ) + memmove(lpuexcpta, v7, v8 - (_DWORD)v7); + operator delete(*(void **)this); + *(_DWORD *)this = v13; + *(_DWORD *)(this + 4) = v15; + } + else + { + lpuexcpta = (struct _Unwind_Exception *)(*(_DWORD *)this + 4 * ((v4 - (unsigned int)lpuexcpt) >> 1)); + v5 = (struct _Unwind_Exception *)(v2 + 4); + if ( v3 <= lpuexcpta ) + { + if ( v3 != v5 ) + memmove((char *)lpuexcpta + *(_DWORD *)(this + 36) - v2, v3, v2 + 4 - (_DWORD)v3); + } + else if ( v3 != v5 ) + { + memmove(lpuexcpta, v3, v2 + 4 - (_DWORD)v3); + } + } + *(_DWORD *)(this + 20) = lpuexcpta; + v9 = *(_DWORD *)lpuexcpta; + *(_DWORD *)(this + 12) = *(_DWORD *)lpuexcpta; + *(_DWORD *)(this + 16) = v9 + 504; + *(_DWORD *)(this + 36) = (char *)lpuexcpta + v14; + v10 = *(_DWORD *)((char *)lpuexcpta + v14); + *(_DWORD *)(this + 28) = v10; + *(_DWORD *)(this + 32) = v10 + 504; + } + lpuexcptb = *(struct _Unwind_Exception **)(this + 36); + *((_DWORD *)lpuexcptb + 1) = operator new(0x1F8u); + std::string::basic_string(*(char **)(this + 24), a2); + v11 = (int *)(*(_DWORD *)(this + 36) + 4); + v12 = *v11; + *(_DWORD *)(this + 36) = v11; + *(_DWORD *)(this + 28) = v12; + *(_DWORD *)(this + 24) = v12; + *(_DWORD *)(this + 32) = v12 + 504; +} + +//----- (00502170) -------------------------------------------------------- +void __fastcall std::deque::pop_back(_DWORD *a1) +{ + char *v2; // ecx + void **v3; // ecx + int v4; // eax + int v5; // ecx + int v6; // eax + + v2 = (char *)a1[6]; + if ( v2 == (char *)a1[7] ) + { + operator delete(v2); + v4 = a1[9]; + v5 = *(_DWORD *)(v4 - 4); + a1[9] = v4 - 4; + v6 = v5 + 504; + a1[7] = v5; + v3 = (void **)(v5 + 480); + a1[8] = v6; + } + else + { + v3 = (void **)(v2 - 24); + } + a1[6] = v3; + std::string::_M_dispose(v3); +} + +//----- (005021C0) -------------------------------------------------------- +std::locale *std::locale::_S_initialize() +{ + std::locale *result; // eax + std::locale::_Impl *v1; // [esp+4h] [ebp-18h] + std::locale::_Impl *v2; // [esp+4h] [ebp-18h] + + if ( !_CRT_MT ) + { + result = (std::locale *)std::locale::_S_classic; + if ( std::locale::_S_classic ) + return result; +LABEL_5: + std::locale::_Impl::_Impl(`anonymous namespace'::c_locale_impl, (std::locale::_Impl *)2, (unsigned int)v1); + std::locale::_S_classic = (int)`anonymous namespace'::c_locale_impl; + std::locale::_S_global = (int)`anonymous namespace'::c_locale_impl; + return std::locale::locale( + &`anonymous namespace'::c_locale, + (std::locale *)`anonymous namespace'::c_locale_impl, + v2); + } + __gthr_win32_once((int)&std::locale::_S_once, (void (*)(void))std::locale::_S_initialize_once); + result = (std::locale *)std::locale::_S_classic; + if ( !std::locale::_S_classic ) + goto LABEL_5; + return result; +} +// 502209: variable 'v1' is possibly undefined +// 502231: variable 'v2' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53E49C: using guessed type _DWORD `anonymous namespace'::c_locale_impl[5]; +// 53EEC0: using guessed type _DWORD `anonymous namespace'::c_locale; +// 53F6E8: using guessed type int std::locale::_S_classic; +// 53F704: using guessed type int std::locale::_S_global; + +//----- (00502240) -------------------------------------------------------- +std::locale *std::locale::_S_initialize_once() +{ + unsigned int v1; // [esp+4h] [ebp-18h] + std::locale::_Impl *v2; // [esp+4h] [ebp-18h] + + std::locale::_Impl::_Impl(`anonymous namespace'::c_locale_impl, (std::locale::_Impl *)2, v1); + std::locale::_S_classic = (int)`anonymous namespace'::c_locale_impl; + std::locale::_S_global = (int)`anonymous namespace'::c_locale_impl; + return std::locale::locale(&`anonymous namespace'::c_locale, (std::locale *)`anonymous namespace'::c_locale_impl, v2); +} +// 50224F: variable 'v1' is possibly undefined +// 502277: variable 'v2' is possibly undefined +// 53E49C: using guessed type _DWORD `anonymous namespace'::c_locale_impl[5]; +// 53EEC0: using guessed type _DWORD `anonymous namespace'::c_locale; +// 53F6E8: using guessed type int std::locale::_S_classic; +// 53F704: using guessed type int std::locale::_S_global; + +//----- (00502290) -------------------------------------------------------- +std::locale *__cdecl std::locale::_S_normalize_category(std::locale *this) +{ + std::locale *result; // eax + + result = this; + if ( this && (((unsigned __int8)this & 0x3F) == 0 || ((unsigned int)this & 0xFFFFFFC0) != 0) ) + { + if ( (unsigned int)this - 1 > 4 ) + std::__throw_runtime_error((std::runtime_error *)"locale::_S_normalize_category category not found"); + return (std::locale *)CSWTCH_112[(_DWORD)this - 1]; + } + return result; +} +// 55ADC4: using guessed type int CSWTCH_112[7]; + +//----- (005022D0) -------------------------------------------------------- +void __userpurge std::locale::_Impl::_M_init_extra(int a1@, std::locale::_Impl *this, std::locale::facet **a3) +{ + int v3; // edx + int v4; // eax + int v5; // edx + int v6; // eax + int v7; // ecx + int v8; // edx + int v9; // eax + int v10; // ecx + int v11; // eax + int v12; // edx + int v13; // [esp+1Ch] [ebp-5Ch] + int v14; // [esp+20h] [ebp-58h] + int v15; // [esp+24h] [ebp-54h] + int v16; // [esp+24h] [ebp-54h] + int v17; // [esp+24h] [ebp-54h] + int v18; // [esp+24h] [ebp-54h] + int v19; // [esp+24h] [ebp-54h] + int v20; // [esp+24h] [ebp-54h] + int v21; // [esp+24h] [ebp-54h] + int v22; // [esp+24h] [ebp-54h] + int v23; // [esp+24h] [ebp-54h] + int v24; // [esp+24h] [ebp-54h] + int v25; // [esp+28h] [ebp-50h] + int v26; // [esp+2Ch] [ebp-4Ch] + int v27; // [esp+2Ch] [ebp-4Ch] + int v28; // [esp+2Ch] [ebp-4Ch] + int v29; // [esp+2Ch] [ebp-4Ch] + int v30; // [esp+2Ch] [ebp-4Ch] + int v31; // [esp+2Ch] [ebp-4Ch] + int v32; // [esp+2Ch] [ebp-4Ch] + int v33; // [esp+2Ch] [ebp-4Ch] + int v34; // [esp+2Ch] [ebp-4Ch] + int v35; // [esp+30h] [ebp-48h] + int v36; // [esp+34h] [ebp-44h] + int v37; // [esp+34h] [ebp-44h] + int v38; // [esp+34h] [ebp-44h] + int v39; // [esp+34h] [ebp-44h] + struct _Unwind_Exception *lpuexcpta; // [esp+38h] [ebp-40h] + + v3 = *((_DWORD *)this + 1); + v4 = *(_DWORD *)this; + dword_53F5C8 = 1; + std::`anonymous namespace'::numpunct_c = (int)&off_560D4C; + v36 = v3; + v14 = v4; + v5 = *((_DWORD *)this + 2); + dword_53F5CC = v4; + v35 = v5; + std::numpunct::_M_initialize_numpunct(&std::`anonymous namespace'::numpunct_c, 0); + if ( _CRT_MT ) + _InterlockedAdd(&dword_53F5C8, 1u); + else + ++dword_53F5C8; + v26 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v26 + 4 * std::locale::id::_M_id(&std::numpunct::id)) = &std::`anonymous namespace'::numpunct_c; + dword_53F640 = 1; + std::`anonymous namespace'::collate_c = (int)&off_560BE0; + dword_53F644 = std::locale::facet::_S_get_c_locale(); + if ( _CRT_MT ) + _InterlockedAdd(&dword_53F640, 1u); + else + ++dword_53F640; + v27 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v27 + 4 * std::locale::id::_M_id(&std::collate::id)) = &std::`anonymous namespace'::collate_c; + dword_53F610 = 1; + std::`anonymous namespace'::moneypunct_cf = (int)&off_55FEA0; + dword_53F614 = v36; + std::moneypunct::_M_initialize_moneypunct(&std::`anonymous namespace'::moneypunct_cf, 0, 0); + if ( _CRT_MT ) + _InterlockedAdd(&dword_53F610, 1u); + else + ++dword_53F610; + v28 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v28 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = &std::`anonymous namespace'::moneypunct_cf; + dword_53F61C = 1; + std::`anonymous namespace'::moneypunct_ct = (int)&off_55FED4; + dword_53F620 = v35; + std::moneypunct::_M_initialize_moneypunct(&std::`anonymous namespace'::moneypunct_ct, 0, 0); + if ( _CRT_MT ) + _InterlockedAdd(&dword_53F61C, 1u); + else + ++dword_53F61C; + v29 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v29 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = &std::`anonymous namespace'::moneypunct_ct; + dword_53F5F0 = 1; + std::`anonymous namespace'::money_get_c = (int)&off_560E54; + if ( _CRT_MT ) + _InterlockedAdd(&dword_53F5F0, 1u); + else + dword_53F5F0 = 2; + v30 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v30 + 4 * std::locale::id::_M_id(&std::money_get>::id)) = &std::`anonymous namespace'::money_get_c; + dword_53F600 = 1; + std::`anonymous namespace'::money_put_c = (int)&off_560E84; + if ( _CRT_MT ) + _InterlockedAdd(&dword_53F600, 1u); + else + dword_53F600 = 2; + v31 = *(_DWORD *)(a1 + 4); + v6 = std::locale::id::_M_id(&std::money_put>::id); + v7 = _CRT_MT; + *(_DWORD *)(v31 + 4 * v6) = &std::`anonymous namespace'::money_put_c; + dword_53F5E0 = 1; + std::`anonymous namespace'::time_get_c = (int)&off_560D94; + if ( v7 ) + _InterlockedAdd(&dword_53F5E0, 1u); + else + dword_53F5E0 = 2; + v32 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v32 + 4 * std::locale::id::_M_id(&std::time_get>::id)) = &std::`anonymous namespace'::time_get_c; + std::messages::messages(&std::`anonymous namespace'::messages_c, 1); + if ( _CRT_MT ) + _InterlockedAdd(dword_53F5A8, 1u); + else + ++dword_53F5A8[0]; + v33 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v33 + 4 * std::locale::id::_M_id(&std::messages::id)) = &std::`anonymous namespace'::messages_c; + dword_53F5D4 = 1; + std::`anonymous namespace'::numpunct_w = (int)&off_560D70; + v34 = *((_DWORD *)this + 4); + v13 = *((_DWORD *)this + 3); + v8 = *((_DWORD *)this + 5); + dword_53F5D8 = v13; + v25 = v8; + std::numpunct::_M_initialize_numpunct(&std::`anonymous namespace'::numpunct_w, 0); + if ( _CRT_MT ) + _InterlockedAdd(&dword_53F5D4, 1u); + else + ++dword_53F5D4; + v15 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v15 + 4 * std::locale::id::_M_id(&std::numpunct::id)) = &std::`anonymous namespace'::numpunct_w; + dword_53F64C = 1; + std::`anonymous namespace'::collate_w = (int)&off_560BFC; + dword_53F650 = std::locale::facet::_S_get_c_locale(); + if ( _CRT_MT ) + _InterlockedAdd(&dword_53F64C, 1u); + else + ++dword_53F64C; + v16 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v16 + 4 * std::locale::id::_M_id(&std::collate::id)) = &std::`anonymous namespace'::collate_w; + dword_53F628 = 1; + std::`anonymous namespace'::moneypunct_wf = (int)&off_55FF08; + dword_53F62C = v34; + std::moneypunct::_M_initialize_moneypunct(&std::`anonymous namespace'::moneypunct_wf, 0, 0); + if ( _CRT_MT ) + _InterlockedAdd(&dword_53F628, 1u); + else + ++dword_53F628; + v17 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v17 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = &std::`anonymous namespace'::moneypunct_wf; + dword_53F634 = 1; + std::`anonymous namespace'::moneypunct_wt = (int)&off_55FF3C; + dword_53F638 = v25; + std::moneypunct::_M_initialize_moneypunct(&std::`anonymous namespace'::moneypunct_wt, 0, 0); + if ( _CRT_MT ) + _InterlockedAdd(&dword_53F634, 1u); + else + ++dword_53F634; + v18 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v18 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = &std::`anonymous namespace'::moneypunct_wt; + dword_53F5F8 = 1; + std::`anonymous namespace'::money_get_w = (int)&off_560E6C; + if ( _CRT_MT ) + _InterlockedAdd(&dword_53F5F8, 1u); + else + dword_53F5F8 = 2; + v19 = *(_DWORD *)(a1 + 4); + v9 = std::locale::id::_M_id(&std::money_get>::id); + v10 = _CRT_MT; + *(_DWORD *)(v19 + 4 * v9) = &std::`anonymous namespace'::money_get_w; + dword_53F608 = 1; + std::`anonymous namespace'::money_put_w = (int)&off_560E9C; + if ( v10 ) + _InterlockedAdd(&dword_53F608, 1u); + else + dword_53F608 = 2; + v20 = *(_DWORD *)(a1 + 4); + v11 = std::locale::id::_M_id(std::money_put>::id); + v12 = _CRT_MT; + *(_DWORD *)(v20 + 4 * v11) = &std::`anonymous namespace'::money_put_w; + dword_53F5E8 = 1; + std::`anonymous namespace'::time_get_w = (int)&off_560DBC; + if ( v12 ) + _InterlockedAdd(&dword_53F5E8, 1u); + else + dword_53F5E8 = 2; + v21 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v21 + 4 * std::locale::id::_M_id(&std::time_get>::id)) = &std::`anonymous namespace'::time_get_w; + std::messages::messages(&std::`anonymous namespace'::messages_w, 1); + if ( _CRT_MT ) + _InterlockedAdd(dword_53F5B8, 1u); + else + ++dword_53F5B8[0]; + v22 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v22 + 4 * std::locale::id::_M_id(&std::messages::id)) = &std::`anonymous namespace'::messages_w; + v23 = *(_DWORD *)(a1 + 12); + *(_DWORD *)(v23 + 4 * std::locale::id::_M_id(&std::numpunct::id)) = v14; + v24 = *(_DWORD *)(a1 + 12); + *(_DWORD *)(v24 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = v36; + v37 = *(_DWORD *)(a1 + 12); + *(_DWORD *)(v37 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = v35; + v38 = *(_DWORD *)(a1 + 12); + *(_DWORD *)(v38 + 4 * std::locale::id::_M_id(&std::numpunct::id)) = v13; + v39 = *(_DWORD *)(a1 + 12); + *(_DWORD *)(v39 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = v34; + lpuexcpta = *(struct _Unwind_Exception **)(a1 + 12); + *((_DWORD *)lpuexcpta + std::locale::id::_M_id(&std::moneypunct::id)) = v25; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F58C: using guessed type signed __int32 std::moneypunct::id; +// 53F590: using guessed type signed __int32 std::moneypunct::id; +// 53F594: using guessed type signed __int32 std::moneypunct::id; +// 53F598: using guessed type signed __int32 std::moneypunct::id; +// 53F5A4: using guessed type _DWORD std::`anonymous namespace'::messages_c; +// 53F5A8: using guessed type signed __int32 dword_53F5A8[3]; +// 53F5B4: using guessed type _DWORD std::`anonymous namespace'::messages_w; +// 53F5B8: using guessed type signed __int32 dword_53F5B8[3]; +// 53F5C4: using guessed type int std::`anonymous namespace'::numpunct_c; +// 53F5C8: using guessed type int dword_53F5C8; +// 53F5CC: using guessed type int dword_53F5CC; +// 53F5D0: using guessed type int std::`anonymous namespace'::numpunct_w; +// 53F5D4: using guessed type int dword_53F5D4; +// 53F5D8: using guessed type int dword_53F5D8; +// 53F5DC: using guessed type int std::`anonymous namespace'::time_get_c; +// 53F5E0: using guessed type int dword_53F5E0; +// 53F5E4: using guessed type int std::`anonymous namespace'::time_get_w; +// 53F5E8: using guessed type int dword_53F5E8; +// 53F5EC: using guessed type int std::`anonymous namespace'::money_get_c; +// 53F5F0: using guessed type int dword_53F5F0; +// 53F5F4: using guessed type int std::`anonymous namespace'::money_get_w; +// 53F5F8: using guessed type int dword_53F5F8; +// 53F5FC: using guessed type int std::`anonymous namespace'::money_put_c; +// 53F600: using guessed type int dword_53F600; +// 53F604: using guessed type int std::`anonymous namespace'::money_put_w; +// 53F608: using guessed type int dword_53F608; +// 53F60C: using guessed type int std::`anonymous namespace'::moneypunct_cf; +// 53F610: using guessed type int dword_53F610; +// 53F614: using guessed type int dword_53F614; +// 53F618: using guessed type int std::`anonymous namespace'::moneypunct_ct; +// 53F61C: using guessed type int dword_53F61C; +// 53F620: using guessed type int dword_53F620; +// 53F624: using guessed type int std::`anonymous namespace'::moneypunct_wf; +// 53F628: using guessed type int dword_53F628; +// 53F62C: using guessed type int dword_53F62C; +// 53F630: using guessed type int std::`anonymous namespace'::moneypunct_wt; +// 53F634: using guessed type int dword_53F634; +// 53F638: using guessed type int dword_53F638; +// 53F63C: using guessed type int std::`anonymous namespace'::collate_c; +// 53F640: using guessed type int dword_53F640; +// 53F644: using guessed type int dword_53F644; +// 53F648: using guessed type int std::`anonymous namespace'::collate_w; +// 53F64C: using guessed type int dword_53F64C; +// 53F650: using guessed type int dword_53F650; +// 53F760: using guessed type signed __int32 std::collate::id; +// 53F764: using guessed type signed __int32 std::collate::id; +// 53F780: using guessed type signed __int32 std::messages::id; +// 53F784: using guessed type signed __int32 std::messages::id; +// 53F788: using guessed type signed __int32 std::numpunct::id; +// 53F78C: using guessed type signed __int32 std::numpunct::id; +// 53F790: using guessed type signed __int32 std::time_get>::id; +// 53F794: using guessed type signed __int32 std::time_get>::id; +// 53F7A0: using guessed type signed __int32 std::money_get>::id; +// 53F7A4: using guessed type signed __int32 std::money_get>::id; +// 53F7A8: using guessed type signed __int32 std::money_put>::id; +// 53F7AC: using guessed type signed __int32 std::money_put>::id[5]; +// 55FEA0: using guessed type int (*off_55FEA0)(); +// 55FED4: using guessed type int (*off_55FED4)(); +// 55FF08: using guessed type int (*off_55FF08)(); +// 55FF3C: using guessed type int (*off_55FF3C)(); +// 560BE0: using guessed type int (*off_560BE0)(); +// 560BFC: using guessed type int (*off_560BFC)(); +// 560D4C: using guessed type int (*off_560D4C)(); +// 560D70: using guessed type int (*off_560D70)(); +// 560D94: using guessed type int (*off_560D94)(); +// 560DBC: using guessed type int (*off_560DBC)(); +// 560E54: using guessed type int (*off_560E54)(); +// 560E6C: using guessed type int (*off_560E6C)(); +// 560E84: using guessed type int (*off_560E84)(); +// 560E9C: using guessed type int (*off_560E9C)(); + +//----- (00502AE0) -------------------------------------------------------- +void __userpurge std::locale::_Impl::_M_init_extra( + int a1@, + std::locale::_Impl *this, + int *a3, + int **a4, + const char *a5, + const char *a6) +{ + int v6; // eax + _DWORD *v7; // edx + int v8; // eax + int v9; // eax + void *v10; // eax + int v11; // ecx + void *v12; // eax + int v13; // edx + void *v14; // eax + int v15; // ecx + int v16; // eax + _DWORD *v17; // edx + int v18; // eax + int v19; // eax + void *v20; // eax + int v21; // ecx + void *v22; // eax + int v23; // edx + void *v24; // eax + int v25; // ecx + int v26; // [esp+14h] [ebp-74h] + int v27; // [esp+14h] [ebp-74h] + int v28; // [esp+14h] [ebp-74h] + volatile signed __int32 *v29; // [esp+14h] [ebp-74h] + int v30; // [esp+18h] [ebp-70h] + int v31; // [esp+18h] [ebp-70h] + int v32; // [esp+18h] [ebp-70h] + volatile signed __int32 *v33; // [esp+18h] [ebp-70h] + _DWORD *Block; // [esp+1Ch] [ebp-6Ch] + int v35; // [esp+20h] [ebp-68h] + _DWORD *v36; // [esp+20h] [ebp-68h] + _DWORD *v37; // [esp+24h] [ebp-64h] + _DWORD *v38; // [esp+28h] [ebp-60h] + int v39; // [esp+2Ch] [ebp-5Ch] + _DWORD *v40; // [esp+2Ch] [ebp-5Ch] + _DWORD *v41; // [esp+30h] [ebp-58h] + int v42; // [esp+34h] [ebp-54h] + _DWORD *v43; // [esp+34h] [ebp-54h] + int v44; // [esp+34h] [ebp-54h] + int v45; // [esp+34h] [ebp-54h] + int v46; // [esp+34h] [ebp-54h] + int v47; // [esp+34h] [ebp-54h] + _DWORD *v48; // [esp+34h] [ebp-54h] + int v49; // [esp+34h] [ebp-54h] + int v50; // [esp+34h] [ebp-54h] + struct _Unwind_Exception *lpuexcpta; // [esp+38h] [ebp-50h] + + v41 = operator new(0xCu); + v41[1] = 0; + v6 = *(_DWORD *)this; + *v41 = &off_560D4C; + v41[2] = 0; + std::numpunct::_M_initialize_numpunct(v41, v6); + if ( _CRT_MT ) + _InterlockedAdd(v41 + 1, 1u); + else + ++v41[1]; + v42 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v42 + 4 * std::locale::id::_M_id(&std::numpunct::id)) = v41; + v7 = operator new(0xCu); + v7[1] = 0; + *v7 = &off_560BE0; + v43 = v7; + v7[2] = std::locale::facet::_S_clone_c_locale(); + if ( _CRT_MT ) + _InterlockedAdd(v43 + 1, 1u); + else + ++v43[1]; + v39 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v39 + 4 * std::locale::id::_M_id(&std::collate::id)) = v43; + v40 = operator new(0xCu); + v40[1] = 0; + v8 = *(_DWORD *)this; + *v40 = &off_55FEA0; + v40[2] = 0; + std::moneypunct::_M_initialize_moneypunct(v40, v8, 0); + if ( _CRT_MT ) + _InterlockedAdd(v40 + 1, 1u); + else + ++v40[1]; + v44 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v44 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = v40; + v38 = operator new(0xCu); + v38[1] = 0; + v9 = *(_DWORD *)this; + *v38 = &off_55FED4; + v38[2] = 0; + std::moneypunct::_M_initialize_moneypunct(v38, v9, 0); + if ( _CRT_MT ) + _InterlockedAdd(v38 + 1, 1u); + else + ++v38[1]; + v45 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v45 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = v38; + v10 = operator new(8u); + v11 = _CRT_MT; + *((_DWORD *)v10 + 1) = 0; + *(_DWORD *)v10 = &off_560E54; + if ( v11 ) + _InterlockedAdd((volatile signed __int32 *)v10 + 1, 1u); + else + *((_DWORD *)v10 + 1) = 1; + v30 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v30 + 4 * std::locale::id::_M_id(&std::money_get>::id)) = v10; + v12 = operator new(8u); + v13 = _CRT_MT; + *((_DWORD *)v12 + 1) = 0; + *(_DWORD *)v12 = &off_560E84; + if ( v13 ) + _InterlockedAdd((volatile signed __int32 *)v12 + 1, 1u); + else + *((_DWORD *)v12 + 1) = 1; + v31 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v31 + 4 * std::locale::id::_M_id(&std::money_put>::id)) = v12; + v14 = operator new(8u); + v15 = _CRT_MT; + *((_DWORD *)v14 + 1) = 0; + *(_DWORD *)v14 = &off_560D94; + if ( v15 ) + _InterlockedAdd((volatile signed __int32 *)v14 + 1, 1u); + else + *((_DWORD *)v14 + 1) = 1; + v32 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v32 + 4 * std::locale::id::_M_id(&std::time_get>::id)) = v14; + v33 = (volatile signed __int32 *)operator new(0x10u); + std::messages::messages(v33, *(_DWORD *)this, (int)a4, 0); + if ( _CRT_MT ) + _InterlockedAdd(v33 + 1, 1u); + else + ++*((_DWORD *)v33 + 1); + v46 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v46 + 4 * std::locale::id::_M_id(&std::messages::id)) = v33; + v37 = operator new(0xCu); + v37[1] = 0; + v16 = *(_DWORD *)this; + *v37 = &off_560D70; + v37[2] = 0; + std::numpunct::_M_initialize_numpunct(v37, v16); + if ( _CRT_MT ) + _InterlockedAdd(v37 + 1, 1u); + else + ++v37[1]; + v47 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v47 + 4 * std::locale::id::_M_id(&std::numpunct::id)) = v37; + v17 = operator new(0xCu); + v17[1] = 0; + *v17 = &off_560BFC; + v48 = v17; + v17[2] = std::locale::facet::_S_clone_c_locale(); + if ( _CRT_MT ) + _InterlockedAdd(v48 + 1, 1u); + else + ++v48[1]; + v35 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v35 + 4 * std::locale::id::_M_id(&std::collate::id)) = v48; + v36 = operator new(0xCu); + v36[1] = 0; + v18 = *a3; + *v36 = &off_55FF08; + v36[2] = 0; + std::moneypunct::_M_initialize_moneypunct(v36, v18, (int)a5); + if ( _CRT_MT ) + _InterlockedAdd(v36 + 1, 1u); + else + ++v36[1]; + v49 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v49 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = v36; + Block = operator new(0xCu); + Block[1] = 0; + v19 = *a3; + *Block = &off_55FF3C; + Block[2] = 0; + std::moneypunct::_M_initialize_moneypunct(Block, v19, (int)a5); + if ( _CRT_MT ) + _InterlockedAdd(Block + 1, 1u); + else + ++Block[1]; + v50 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v50 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = Block; + v20 = operator new(8u); + v21 = _CRT_MT; + *((_DWORD *)v20 + 1) = 0; + *(_DWORD *)v20 = &off_560E6C; + if ( v21 ) + _InterlockedAdd((volatile signed __int32 *)v20 + 1, 1u); + else + *((_DWORD *)v20 + 1) = 1; + v26 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v26 + 4 * std::locale::id::_M_id(&std::money_get>::id)) = v20; + v22 = operator new(8u); + v23 = _CRT_MT; + *((_DWORD *)v22 + 1) = 0; + *(_DWORD *)v22 = &off_560E9C; + if ( v23 ) + _InterlockedAdd((volatile signed __int32 *)v22 + 1, 1u); + else + *((_DWORD *)v22 + 1) = 1; + v27 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v27 + 4 * std::locale::id::_M_id(std::money_put>::id)) = v22; + v24 = operator new(8u); + v25 = _CRT_MT; + *((_DWORD *)v24 + 1) = 0; + *(_DWORD *)v24 = &off_560DBC; + if ( v25 ) + _InterlockedAdd((volatile signed __int32 *)v24 + 1, 1u); + else + *((_DWORD *)v24 + 1) = 1; + v28 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v28 + 4 * std::locale::id::_M_id(&std::time_get>::id)) = v24; + v29 = (volatile signed __int32 *)operator new(0x10u); + std::messages::messages(v29, *(_DWORD *)this, (int)a4, 0); + if ( _CRT_MT ) + _InterlockedAdd(v29 + 1, 1u); + else + ++*((_DWORD *)v29 + 1); + lpuexcpta = *(struct _Unwind_Exception **)(a1 + 4); + *((_DWORD *)lpuexcpta + std::locale::id::_M_id(&std::messages::id)) = v29; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F58C: using guessed type signed __int32 std::moneypunct::id; +// 53F590: using guessed type signed __int32 std::moneypunct::id; +// 53F594: using guessed type signed __int32 std::moneypunct::id; +// 53F598: using guessed type signed __int32 std::moneypunct::id; +// 53F760: using guessed type signed __int32 std::collate::id; +// 53F764: using guessed type signed __int32 std::collate::id; +// 53F780: using guessed type signed __int32 std::messages::id; +// 53F784: using guessed type signed __int32 std::messages::id; +// 53F788: using guessed type signed __int32 std::numpunct::id; +// 53F78C: using guessed type signed __int32 std::numpunct::id; +// 53F790: using guessed type signed __int32 std::time_get>::id; +// 53F794: using guessed type signed __int32 std::time_get>::id; +// 53F7A0: using guessed type signed __int32 std::money_get>::id; +// 53F7A4: using guessed type signed __int32 std::money_get>::id; +// 53F7A8: using guessed type signed __int32 std::money_put>::id; +// 53F7AC: using guessed type signed __int32 std::money_put>::id[5]; +// 55FEA0: using guessed type int (*off_55FEA0)(); +// 55FED4: using guessed type int (*off_55FED4)(); +// 55FF08: using guessed type int (*off_55FF08)(); +// 55FF3C: using guessed type int (*off_55FF3C)(); +// 560BE0: using guessed type int (*off_560BE0)(); +// 560BFC: using guessed type int (*off_560BFC)(); +// 560D4C: using guessed type int (*off_560D4C)(); +// 560D70: using guessed type int (*off_560D70)(); +// 560D94: using guessed type int (*off_560D94)(); +// 560DBC: using guessed type int (*off_560DBC)(); +// 560E54: using guessed type int (*off_560E54)(); +// 560E6C: using guessed type int (*off_560E6C)(); +// 560E84: using guessed type int (*off_560E84)(); +// 560E9C: using guessed type int (*off_560E9C)(); + +//----- (00503350) -------------------------------------------------------- +void __userpurge std::locale::_Impl::_M_install_cache( + int a1@, + std::locale::_Impl *this, + const std::locale::facet *a3, + unsigned int a4) +{ + int *v4; // edx + int **v5; // ecx + int v6; // esi + volatile signed __int32 *v7; // ebx + int v8; // eax + int v9; // edx + int v10; // edx + volatile signed __int32 *v11; // edx + int v12; // eax + int v13; // esi + _DWORD *v14; // ebx + void (__fastcall *v15)(void *); // eax + int v16; // ebx + _DWORD *exception; // eax + _DWORD *v18; // eax + volatile signed __int32 *v19; // eax + + if ( !(_BYTE)`guard variable for'`anonymous namespace'::get_locale_cache_mutex(void)::locale_cache_mutex + && __cxa_guard_acquire(&`guard variable for'`anonymous namespace'::get_locale_cache_mutex(void)::locale_cache_mutex) ) + { + if ( _CRT_MT ) + __gthr_win32_mutex_init_function(`anonymous namespace'::get_locale_cache_mutex(void)::locale_cache_mutex); + __cxa_guard_release(&`guard variable for'`anonymous namespace'::get_locale_cache_mutex(void)::locale_cache_mutex); + atexit(__tcf_0_5); + } + if ( _CRT_MT && __gthr_win32_mutex_lock((int)`anonymous namespace'::get_locale_cache_mutex(void)::locale_cache_mutex) ) + { + exception = __cxa_allocate_exception(4u); + *exception = &off_55F348; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'__gnu_cxx::__concurrence_lock_error, + (void (__cdecl *)(void *))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error); + } + v4 = std::locale::_S_twinned_facets; + if ( !std::locale::_S_twinned_facets ) + { +LABEL_24: + v10 = -1; + goto LABEL_25; + } + v5 = &std::locale::_S_twinned_facets; + while ( 1 ) + { + v6 = *v4; + if ( *v4 ) + goto LABEL_6; + if ( !_CRT_MT ) + { + v6 = std::locale::id::_S_refcount + 1; + std::locale::id::_S_refcount = v6; + *v4 = v6; +LABEL_6: + v7 = v5[1]; + v8 = *v7; + if ( a3 == (const std::locale::facet *)(v6 - 1) ) + goto LABEL_15; + goto LABEL_7; + } + _InterlockedCompareExchange(v4, _InterlockedIncrement(&std::locale::id::_S_refcount), 0); + v7 = v5[1]; + v8 = *v7; + if ( a3 == (const std::locale::facet *)(*v4 - 1) ) + { +LABEL_15: + v9 = v8; + if ( !v8 ) + { + if ( _CRT_MT ) + { + _InterlockedCompareExchange(v7, _InterlockedIncrement(&std::locale::id::_S_refcount), 0); + v9 = *v7; + } + else + { + v9 = std::locale::id::_S_refcount + 1; + std::locale::id::_S_refcount = v9; + *v7 = v9; + } + } + v10 = v9 - 1; + goto LABEL_25; + } +LABEL_7: + if ( v8 ) + goto LABEL_10; + if ( _CRT_MT ) + break; + v8 = std::locale::id::_S_refcount + 1; + std::locale::id::_S_refcount = v8; + *v7 = v8; +LABEL_10: + if ( a3 == (const std::locale::facet *)(v8 - 1) ) + goto LABEL_20; +LABEL_11: + v4 = v5[2]; + v5 += 2; + if ( !v4 ) + goto LABEL_24; + } + _InterlockedCompareExchange(v7, _InterlockedIncrement(&std::locale::id::_S_refcount), 0); + if ( a3 != (const std::locale::facet *)(*v7 - 1) ) + goto LABEL_11; +LABEL_20: + v11 = *v5; + v12 = **v5; + if ( !v12 ) + { + if ( _CRT_MT ) + { + _InterlockedCompareExchange(v11, _InterlockedIncrement(&std::locale::id::_S_refcount), 0); + v12 = *v11; + } + else + { + v12 = std::locale::id::_S_refcount + 1; + std::locale::id::_S_refcount = v12; + *v11 = v12; + } + } + v10 = (int)a3; + a3 = (const std::locale::facet *)(v12 - 1); +LABEL_25: + v13 = *(_DWORD *)(a1 + 12); + v14 = (_DWORD *)(v13 + 4 * (_DWORD)a3); + if ( !*v14 ) + { + v19 = (volatile signed __int32 *)((char *)this + 4); + if ( _CRT_MT ) + { + _InterlockedAdd(v19, 1u); + v16 = _CRT_MT; + v13 = *(_DWORD *)(a1 + 12); + *(_DWORD *)(v13 + 4 * (_DWORD)a3) = this; + if ( v10 == -1 ) + goto LABEL_30; + if ( v16 ) + { + _InterlockedAdd(v19, 1u); + v16 = _CRT_MT; + *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * v10) = this; + goto LABEL_30; + } + } + else + { + ++*((_DWORD *)this + 1); + *v14 = this; + if ( v10 == -1 ) + return; + } + ++*((_DWORD *)this + 1); + *(_DWORD *)(v13 + 4 * v10) = this; + return; + } + if ( this ) + { + v15 = *(void (__fastcall **)(void *))(*(_DWORD *)this + 4); + if ( v15 == std::locale::facet::~facet ) + operator delete(this); + else + ((void (__fastcall *)(std::locale::_Impl *, int))v15)(this, v10); + } + v16 = _CRT_MT; +LABEL_30: + if ( v16 ) + { + if ( __gthr_win32_mutex_unlock((int)`anonymous namespace'::get_locale_cache_mutex(void)::locale_cache_mutex) ) + { + v18 = __cxa_allocate_exception(4u); + *v18 = &off_55F35C; + __cxa_throw( + v18, + (struct type_info *)&`typeinfo for'__gnu_cxx::__concurrence_unlock_error, + (void (__cdecl *)(void *))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error); + } + } +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F6EC: using guessed type int std::locale::id::_S_refcount; +// 53FCD4: using guessed type _DWORD `anonymous namespace'::get_locale_cache_mutex(void)::locale_cache_mutex[2]; +// 55AF80: using guessed type int *std::locale::_S_twinned_facets; +// 55B6E8: using guessed type int *`typeinfo for'__gnu_cxx::__concurrence_lock_error; +// 55B6F4: using guessed type int *`typeinfo for'__gnu_cxx::__concurrence_unlock_error; +// 55F348: using guessed type void (__cdecl *off_55F348)(__gnu_cxx::__concurrence_lock_error *__hidden this); +// 55F35C: using guessed type void (__cdecl *off_55F35C)(__gnu_cxx::__concurrence_unlock_error *__hidden this); + +//----- (005037C0) -------------------------------------------------------- +void __userpurge std::locale::_Impl::_M_install_facet( + _DWORD *a1@, + std::locale::_Impl *this, + const std::locale::id *a3, + const std::locale::facet *a4) +{ + void *v4; // esi + unsigned int v5; // eax + unsigned int v6; // ecx + int v7; // ebx + int i; // eax + unsigned int v9; // ecx + int v10; // ebx + int j; // eax + volatile signed __int32 *v12; // ecx + int *v13; // ebx + std::locale::facet **v14; // ecx + int v15; // edx + volatile signed __int32 *v16; // ebx + int v17; // eax + volatile signed __int32 v18; // edx + int v19; // edx + _DWORD *v20; // eax + _DWORD *v21; // ecx + signed __int32 v22; // eax + int v23; // eax + int v24; // eax + volatile signed __int32 *v25; // ecx + signed __int32 v26; // eax + void (*v27)(void); // eax + volatile signed __int32 *v28; // edx + int v29; // ebx + int v30; // eax + _DWORD *v31; // eax + _DWORD *v32; // ecx + signed __int32 v33; // eax + void (*v34)(void); // eax + void (*v35)(void); // eax + void (*v36)(void); // eax + const std::locale::id *Val; // [esp+4h] [ebp-98h] + unsigned int v38; // [esp+10h] [ebp-8Ch] + struct _Unwind_Exception *lpuexcpt; // [esp+1Ch] [ebp-80h] + int v41; // [esp+20h] [ebp-7Ch] + int v42; // [esp+24h] [ebp-78h] + volatile signed __int32 **v43; // [esp+24h] [ebp-78h] + _DWORD *v44; // [esp+28h] [ebp-74h] + int v45; // [esp+2Ch] [ebp-70h] + unsigned int v46; // [esp+34h] [ebp-68h] + void *v47; // [esp+38h] [ebp-64h] + int v48; // [esp+3Ch] [ebp-60h] + int v49; // [esp+40h] [ebp-5Ch] + _DWORD *v50; // [esp+44h] [ebp-58h] + _DWORD *v51; // [esp+48h] [ebp-54h] + + if ( !a3 ) + return; + v41 = *(_DWORD *)this; + if ( !*(_DWORD *)this ) + { + if ( _CRT_MT ) + { + _InterlockedCompareExchange( + (volatile signed __int32 *)this, + _InterlockedIncrement(&std::locale::id::_S_refcount), + 0); + v41 = *(_DWORD *)this; + } + else + { + v41 = ++std::locale::id::_S_refcount; + *(_DWORD *)this = std::locale::id::_S_refcount; + } + } + v45 = v41 - 1; + if ( a1[2] - 1 < (unsigned int)(v41 - 1) ) + { + lpuexcpt = (struct _Unwind_Exception *)(v41 + 3); + v5 = -1; + if ( (unsigned int)(v41 + 3) < 0x20000000 ) + v5 = 4 * (v41 + 3); + v4 = (void *)a1[1]; + v46 = v5; + v44 = (_DWORD *)operator new[](v5); + v6 = a1[2]; + if ( v6 ) + { + v7 = a1[1]; + for ( i = 0; i != v6; ++i ) + v44[i] = *(_DWORD *)(v7 + 4 * i); + } + if ( (unsigned int)lpuexcpt > v6 ) + memset(&v44[v6], 0, 4 * ((_DWORD)lpuexcpt - v6)); + v47 = (void *)a1[3]; + v42 = operator new[](v46); + v9 = a1[2]; + if ( v9 ) + { + v10 = a1[3]; + for ( j = 0; j != v9; ++j ) + *(_DWORD *)(v42 + 4 * j) = *(_DWORD *)(v10 + 4 * j); + } + if ( (unsigned int)lpuexcpt > v9 ) + memset((void *)(v42 + 4 * v9), 0, 4 * ((_DWORD)lpuexcpt - v9)); + a1[2] = lpuexcpt; + a1[1] = v44; + a1[3] = v42; + if ( v4 ) + operator delete[](v4); + if ( v47 ) + operator delete[](v47); + } + if ( _CRT_MT ) + _InterlockedAdd((volatile signed __int32 *)a3 + 1, 1u); + else + ++*((_DWORD *)a3 + 1); + v12 = *(volatile signed __int32 **)(a1[1] + 4 * v45); + v43 = (volatile signed __int32 **)(a1[1] + 4 * v45); + if ( !v12 ) + { + *v43 = (volatile signed __int32 *)a3; + goto LABEL_49; + } + v13 = std::locale::_S_twinned_facets; + if ( !std::locale::_S_twinned_facets ) + goto LABEL_46; + v14 = (std::locale::facet **)&std::locale::_S_twinned_facets; + while ( 1 ) + { + v15 = *v13; + if ( *v13 ) + goto LABEL_28; + if ( !_CRT_MT ) + { + v15 = std::locale::id::_S_refcount + 1; + std::locale::id::_S_refcount = v15; + *v13 = v15; +LABEL_28: + v16 = (volatile signed __int32 *)v14[1]; + v17 = *v16; + if ( v41 == v15 ) + goto LABEL_37; + goto LABEL_29; + } + _InterlockedCompareExchange(v13, _InterlockedIncrement(&std::locale::id::_S_refcount), 0); + v18 = *v13; + v16 = (volatile signed __int32 *)v14[1]; + v17 = *v16; + if ( v41 == v18 ) + { +LABEL_37: + v19 = a1[1]; + if ( !v17 ) + { + if ( _CRT_MT ) + { + _InterlockedCompareExchange(v16, _InterlockedIncrement(&std::locale::id::_S_refcount), 0); + v17 = *v16; + } + else + { + v17 = std::locale::id::_S_refcount + 1; + std::locale::id::_S_refcount = v17; + *v16 = v17; + } + } + v48 = v19 + 4 * v17 - 4; + if ( *(_DWORD *)v48 ) + { + v20 = std::locale::facet::_M_sso_shim((volatile signed __int32 *)a3, v14[1], Val); + v51 = v20; + if ( _CRT_MT ) + { + _InterlockedAdd(v20 + 1, 1u); + v21 = *(_DWORD **)v48; + if ( _CRT_MT ) + { + v22 = _InterlockedExchangeAdd((volatile signed __int32 *)(*(_DWORD *)v48 + 4), 0xFFFFFFFF); + goto LABEL_44; + } + } + else + { + ++v20[1]; + v21 = *(_DWORD **)v48; + } + v22 = v21[1]; + v21[1] = v22 - 1; +LABEL_44: + if ( v22 == 1 ) + { + v35 = *(void (**)(void))(*v21 + 4); + if ( (char *)v35 == (char *)std::locale::facet::~facet ) + operator delete(v21); + else + v35(); + } + *(_DWORD *)v48 = v51; + v12 = *v43; + goto LABEL_46; + } + goto LABEL_71; + } +LABEL_29: + if ( v17 ) + goto LABEL_32; + if ( !_CRT_MT ) + { + v17 = std::locale::id::_S_refcount + 1; + std::locale::id::_S_refcount = v17; + *v16 = v17; +LABEL_32: + if ( v41 == v17 ) + break; + goto LABEL_33; + } + _InterlockedCompareExchange(v16, _InterlockedIncrement(&std::locale::id::_S_refcount), 0); + if ( v41 == *v16 ) + break; +LABEL_33: + v13 = (int *)v14[2]; + v14 += 2; + if ( !v13 ) + goto LABEL_71; + } + v28 = (volatile signed __int32 *)*v14; + v29 = a1[1]; + v30 = *(_DWORD *)*v14; + if ( !v30 ) + { + if ( _CRT_MT ) + { + _InterlockedCompareExchange(v28, _InterlockedIncrement(&std::locale::id::_S_refcount), 0); + v30 = *v28; + } + else + { + v30 = std::locale::id::_S_refcount + 1; + std::locale::id::_S_refcount = v30; + *v28 = v30; + } + } + v49 = v29 + 4 * v30 - 4; + if ( !*(_DWORD *)v49 ) + { +LABEL_71: + v12 = *v43; + if ( !_CRT_MT ) + goto LABEL_47; + goto LABEL_72; + } + v31 = std::locale::facet::_M_cow_shim((volatile signed __int32 *)a3, *v14, Val); + v50 = v31; + if ( !_CRT_MT ) + { + ++v31[1]; + v32 = *(_DWORD **)v49; + goto LABEL_67; + } + _InterlockedAdd(v31 + 1, 1u); + v32 = *(_DWORD **)v49; + if ( _CRT_MT ) + { + v33 = _InterlockedExchangeAdd((volatile signed __int32 *)(*(_DWORD *)v49 + 4), 0xFFFFFFFF); + } + else + { +LABEL_67: + v33 = v32[1]; + v32[1] = v33 - 1; + } + if ( v33 == 1 ) + { + v36 = *(void (**)(void))(*v32 + 4); + if ( (char *)v36 == (char *)std::locale::facet::~facet ) + operator delete(v32); + else + v36(); + } + *(_DWORD *)v49 = v50; + v12 = *v43; +LABEL_46: + if ( _CRT_MT ) + { +LABEL_72: + if ( _InterlockedExchangeAdd(v12 + 1, 0xFFFFFFFF) == 1 ) + goto LABEL_73; + goto LABEL_48; + } +LABEL_47: + v23 = *((_DWORD *)v12 + 1); + *((_DWORD *)v12 + 1) = v23 - 1; + if ( v23 != 1 ) + goto LABEL_48; +LABEL_73: + v34 = *(void (**)(void))(*v12 + 4); + if ( (char *)v34 == (char *)std::locale::facet::~facet ) + operator delete((void *)v12); + else + v34(); +LABEL_48: + *v43 = (volatile signed __int32 *)a3; +LABEL_49: + if ( a1[2] ) + { + v38 = 0; + v24 = a1[3]; + do + { + v25 = *(volatile signed __int32 **)(v24 + 4 * v38); + if ( v25 ) + { + if ( _CRT_MT ) + { + v26 = _InterlockedExchangeAdd(v25 + 1, 0xFFFFFFFF); + } + else + { + v26 = *((_DWORD *)v25 + 1); + *((_DWORD *)v25 + 1) = v26 - 1; + } + if ( v26 == 1 ) + { + v27 = *(void (**)(void))(*v25 + 4); + if ( (char *)v27 == (char *)std::locale::facet::~facet ) + operator delete((void *)v25); + else + v27(); + } + v24 = a1[3]; + *(_DWORD *)(v24 + 4 * v38) = 0; + } + ++v38; + } + while ( a1[2] > v38 ); + } +} +// 503ACF: variable 'Val' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53F6EC: using guessed type int std::locale::id::_S_refcount; +// 55AF80: using guessed type int *std::locale::_S_twinned_facets; + +//----- (00503F60) -------------------------------------------------------- +void __userpurge std::locale::_Impl::_M_replace_facet( + _DWORD *a1@, + std::locale::_Impl *this, + const std::locale::_Impl *a3, + const std::locale::id *a4) +{ + int v4; // eax + unsigned int v5; // eax + const std::locale::id *v6; // eax + + v4 = *(_DWORD *)a3; + if ( !*(_DWORD *)a3 ) + { + if ( _CRT_MT ) + { + _InterlockedCompareExchange( + (volatile signed __int32 *)a3, + _InterlockedIncrement(&std::locale::id::_S_refcount), + 0); + v4 = *(_DWORD *)a3; + } + else + { + v4 = std::locale::id::_S_refcount + 1; + std::locale::id::_S_refcount = v4; + *(_DWORD *)a3 = v4; + } + } + v5 = v4 - 1; + if ( *((_DWORD *)this + 2) - 1 < v5 || (v6 = *(const std::locale::id **)(*((_DWORD *)this + 1) + 4 * v5)) == 0 ) + std::__throw_runtime_error((std::runtime_error *)"locale::_Impl::_M_replace_facet"); + std::locale::_Impl::_M_install_facet(a1, a3, v6, a4); +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F6EC: using guessed type int std::locale::id::_S_refcount; + +//----- (00503FE0) -------------------------------------------------------- +int __userpurge std::locale::_Impl::_M_replace_category@( + int result@, + _DWORD *a2@, + std::locale::_Impl *this, + volatile signed __int32 **a4, + const std::locale::id *const *a5) +{ + volatile signed __int32 **v5; // ebx + volatile signed __int32 *i; // edx + int v8; // eax + unsigned int v9; // eax + const std::locale::id *v10; // eax + const std::locale::facet *v11; // [esp+8h] [ebp-14h] + + v5 = a4; + for ( i = *a4; *v5; i = *v5 ) + { + v8 = *i; + if ( !*i ) + { + if ( _CRT_MT ) + { + _InterlockedCompareExchange(i, _InterlockedIncrement(&std::locale::id::_S_refcount), 0); + v8 = *i; + } + else + { + v8 = std::locale::id::_S_refcount + 1; + std::locale::id::_S_refcount = v8; + *i = v8; + } + } + v9 = v8 - 1; + if ( *((_DWORD *)this + 2) - 1 < v9 || (v10 = *(const std::locale::id **)(*((_DWORD *)this + 1) + 4 * v9)) == 0 ) + std::__throw_runtime_error((std::runtime_error *)"locale::_Impl::_M_replace_facet"); + ++v5; + std::locale::_Impl::_M_install_facet(a2, (std::locale::_Impl *)i, v10, v11); + } + return result; +} +// 504032: variable 'v11' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53F6EC: using guessed type int std::locale::id::_S_refcount; + +//----- (00504090) -------------------------------------------------------- +void __userpurge std::locale::_Impl::_Impl( + _DWORD *a1@, + std::locale::_Impl *this, + const std::locale::_Impl *a3, + unsigned int a4) +{ + unsigned int v4; // edx + unsigned int v5; // eax + int v6; // ecx + unsigned int v7; // ebx + unsigned int v8; // eax + int v9; // eax + int v10; // edx + int v11; // ecx + int v12; // ebx + int v13; // eax + int v14; // edx + _DWORD *v15; // eax + unsigned int v16; // edx + unsigned int v17; // ecx + unsigned int v18; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+20h] [ebp-4Ch] + _DWORD *v21; // [esp+24h] [ebp-48h] + unsigned int Size; // [esp+28h] [ebp-44h] + + a1[1] = 0; + *a1 = a3; + a1[3] = 0; + v4 = *((_DWORD *)this + 2); + a1[4] = 0; + a1[2] = v4; + v5 = 4 * v4; + if ( v4 >= 0x20000000 ) + v5 = -1; + v6 = operator new[](v5); + v7 = a1[2]; + a1[1] = v6; + v8 = v7; + if ( v7 ) + { + v9 = 0; + while ( 1 ) + { + v10 = *(_DWORD *)(*((_DWORD *)this + 1) + 4 * v9); + *(_DWORD *)(v6 + 4 * v9) = v10; + if ( v10 ) + { + if ( _CRT_MT ) + _InterlockedAdd((volatile signed __int32 *)(v10 + 4), 1u); + else + ++*(_DWORD *)(v10 + 4); + v7 = a1[2]; + } + if ( v7 <= ++v9 ) + break; + v6 = a1[1]; + } + v8 = 4 * v7; + if ( v7 >= 0x20000000 ) + v8 = -1; + } + v11 = operator new[](v8); + v12 = a1[2]; + a1[3] = v11; + if ( v12 ) + { + v13 = 0; + while ( 1 ) + { + v14 = *(_DWORD *)(*((_DWORD *)this + 3) + 4 * v13); + *(_DWORD *)(v11 + 4 * v13) = v14; + if ( v14 ) + { + if ( _CRT_MT ) + _InterlockedAdd((volatile signed __int32 *)(v14 + 4), 1u); + else + ++*(_DWORD *)(v14 + 4); + } + if ( a1[2] <= (unsigned int)++v13 ) + break; + v11 = a1[3]; + } + } + v15 = (_DWORD *)operator new[](0x18u); + v16 = 0; + v17 = (unsigned int)(v15 + 1) & 0xFFFFFFFC; + a1[4] = v15; + *v15 = 0; + v15[5] = 0; + v18 = ((unsigned int)v15 - v17 + 24) & 0xFFFFFFFC; + do + { + *(_DWORD *)(v17 + v16) = 0; + v16 += 4; + } + while ( v16 < v18 ); + for ( lpuexcpt = 0; + lpuexcpt != (struct _Unwind_Exception *)24; + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 4) ) + { + if ( !*(_DWORD *)((char *)lpuexcpt + *((_DWORD *)this + 4)) ) + break; + Size = strlen(*(const char **)((char *)lpuexcpt + *((_DWORD *)this + 4))) + 1; + v21 = (_DWORD *)((char *)lpuexcpt + a1[4]); + *v21 = operator new[](Size); + memcpy(*(void **)((char *)lpuexcpt + a1[4]), *(const void **)((char *)lpuexcpt + *((_DWORD *)this + 4)), Size); + } +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (00504350) -------------------------------------------------------- +void __userpurge std::locale::_Impl::_Impl(_DWORD *a1@, std::locale::_Impl *this, unsigned int a3) +{ + std::locale::facet **v4; // [esp+4h] [ebp-74h] + const std::locale::facet *v5; // [esp+8h] [ebp-70h] + const std::locale::facet *v6; // [esp+8h] [ebp-70h] + const std::locale::facet *v7; // [esp+8h] [ebp-70h] + const std::locale::facet *v8; // [esp+8h] [ebp-70h] + const std::locale::facet *v9; // [esp+8h] [ebp-70h] + const std::locale::facet *v10; // [esp+8h] [ebp-70h] + const std::locale::facet *v11; // [esp+8h] [ebp-70h] + const std::locale::facet *v12; // [esp+8h] [ebp-70h] + const std::locale::facet *v13; // [esp+8h] [ebp-70h] + const std::locale::facet *v14; // [esp+8h] [ebp-70h] + const std::locale::facet *v15; // [esp+8h] [ebp-70h] + const std::locale::facet *v16; // [esp+8h] [ebp-70h] + const std::locale::facet *v17; // [esp+8h] [ebp-70h] + const std::locale::facet *v18; // [esp+8h] [ebp-70h] + const std::locale::facet *v19; // [esp+8h] [ebp-70h] + const std::locale::facet *v20; // [esp+8h] [ebp-70h] + const std::locale::facet *v21; // [esp+8h] [ebp-70h] + const std::locale::facet *v22; // [esp+8h] [ebp-70h] + const std::locale::facet *v23; // [esp+8h] [ebp-70h] + const std::locale::facet *v24; // [esp+8h] [ebp-70h] + const std::locale::facet *v25; // [esp+8h] [ebp-70h] + const std::locale::facet *v26; // [esp+8h] [ebp-70h] + const std::locale::facet *v27; // [esp+8h] [ebp-70h] + const std::locale::facet *v28; // [esp+8h] [ebp-70h] + const std::locale::facet *v29; // [esp+8h] [ebp-70h] + const std::locale::facet *v30; // [esp+8h] [ebp-70h] + const std::locale::facet *v31; // [esp+8h] [ebp-70h] + const std::locale::facet *v32; // [esp+8h] [ebp-70h] + const std::locale::facet *v33; // [esp+8h] [ebp-70h] + const std::locale::facet *v34; // [esp+8h] [ebp-70h] + const std::locale::facet *v35; // [esp+8h] [ebp-70h] + const std::locale::facet *v36; // [esp+8h] [ebp-70h] + int v37; // [esp+14h] [ebp-64h] + int v38; // [esp+14h] [ebp-64h] + int v39; // [esp+14h] [ebp-64h] + int v40; // [esp+14h] [ebp-64h] + int v41; // [esp+14h] [ebp-64h] + int v42; // [esp+14h] [ebp-64h] + int v43; // [esp+14h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + int v45[8]; // [esp+58h] [ebp-20h] BYREF + + dword_53EEC8 = 0; + *a1 = this; + memset(&`anonymous namespace'::facet_vec, 0, 0xC0u); + a1[1] = &`anonymous namespace'::facet_vec; + a1[2] = 48; + memset(&`anonymous namespace'::cache_vec, 0, 0xC0u); + a1[3] = &`anonymous namespace'::cache_vec; + a1[4] = &`anonymous namespace'::name_vec; + dword_53EECC = 0; + dword_53EED0 = 0; + dword_53EED4 = 0; + dword_53EED8 = 0; + `anonymous namespace'::name_vec = (int)&`anonymous namespace'::name_c; + `anonymous namespace'::name_c = *(_WORD *)std::locale::facet::_S_get_c_name(); + std::ctype::ctype(`anonymous namespace'::ctype_c, 0, 0, 1); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::ctype::id, + (const std::locale::id *)`anonymous namespace'::ctype_c, + v5); + std::codecvt::codecvt(`anonymous namespace'::codecvt_c, 1); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::codecvt::id, + (const std::locale::id *)`anonymous namespace'::codecvt_c, + v6); + dword_53E524 = 1; + word_53E544 = 0; + `anonymous namespace'::numpunct_cache_c = (int)&off_5605B0; + dword_53E528 = 0; + dword_53E52C = 0; + byte_53E530 = 0; + dword_53E534 = 0; + dword_53E538 = 0; + dword_53E53C = 0; + dword_53E540 = 0; + byte_53E584 = 0; + dword_53E40C = 1; + `anonymous namespace'::numpunct_c = &off_55FCD8; + dword_53E410 = (int)&`anonymous namespace'::numpunct_cache_c; + std::numpunct::_M_initialize_numpunct(&`anonymous namespace'::numpunct_c, 0); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::numpunct::id, + (const std::locale::id *)&`anonymous namespace'::numpunct_c, + v7); + dword_53F0A4 = 1; + `anonymous namespace'::num_get_c = &off_560C18; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::num_get>::id, + (const std::locale::id *)&`anonymous namespace'::num_get_c, + v8); + dword_53F0B4 = 1; + `anonymous namespace'::num_put_c = &off_560C90; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::num_put>::id, + (const std::locale::id *)&`anonymous namespace'::num_put_c, + v9); + dword_53EFBC = 1; + `anonymous namespace'::collate_c = &off_55FC68; + dword_53EFC0 = std::locale::facet::_S_get_c_locale(); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::collate::id, + (const std::locale::id *)&`anonymous namespace'::collate_c, + v10); + dword_53E824 = 1; + `anonymous namespace'::moneypunct_cache_cf = (int)&off_5606D4; + dword_53E828 = 0; + dword_53E82C = 0; + word_53E830 = 0; + byte_53E832 = 0; + dword_53E834 = 0; + dword_53E838 = 0; + dword_53E83C = 0; + dword_53E840 = 0; + dword_53E844 = 0; + dword_53E848 = 0; + dword_53E84C = 0; + dword_53E850 = 0; + dword_53E854 = 0; + byte_53E863 = 0; + dword_53E4B4 = 1; + `anonymous namespace'::moneypunct_cf = &off_55F820; + dword_53E4B8 = (int)&`anonymous namespace'::moneypunct_cache_cf; + std::moneypunct::_M_initialize_moneypunct(&`anonymous namespace'::moneypunct_cf, 0, 0); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::moneypunct::id, + (const std::locale::id *)&`anonymous namespace'::moneypunct_cf, + v11); + dword_53E884 = 1; + `anonymous namespace'::moneypunct_cache_ct = (int)&off_5606E4; + dword_53E888 = 0; + dword_53E88C = 0; + word_53E890 = 0; + byte_53E892 = 0; + dword_53E894 = 0; + dword_53E898 = 0; + dword_53E89C = 0; + dword_53E8A0 = 0; + dword_53E8A4 = 0; + dword_53E8A8 = 0; + dword_53E8AC = 0; + dword_53E8B0 = 0; + dword_53E8B4 = 0; + byte_53E8C3 = 0; + dword_53E4C0 = 1; + `anonymous namespace'::moneypunct_ct = &off_55F854; + dword_53E4C4 = (int)&`anonymous namespace'::moneypunct_cache_ct; + std::moneypunct::_M_initialize_moneypunct(&`anonymous namespace'::moneypunct_ct, 0, 0); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::moneypunct::id, + (const std::locale::id *)&`anonymous namespace'::moneypunct_ct, + v12); + dword_53E454 = 1; + `anonymous namespace'::money_get_c = &off_55FD78; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::money_get>::id, + (const std::locale::id *)&`anonymous namespace'::money_get_c, + v13); + dword_53E464 = 1; + `anonymous namespace'::money_put_c = &off_55FDA8; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::money_put>::id, + (const std::locale::id *)&`anonymous namespace'::money_put_c, + v14); + dword_53E664 = 1; + `anonymous namespace'::timepunct_cache_c = (int)&off_5605E4; + dword_53E668 = 0; + dword_53E66C = 0; + dword_53E670 = 0; + dword_53E674 = 0; + dword_53E678 = 0; + dword_53E67C = 0; + dword_53E680 = 0; + dword_53E684 = 0; + dword_53E688 = 0; + dword_53E68C = 0; + dword_53E690 = 0; + dword_53E694 = 0; + dword_53E698 = 0; + dword_53E69C = 0; + dword_53E6A0 = 0; + dword_53E6A4 = 0; + dword_53E6A8 = 0; + dword_53E6AC = 0; + dword_53E6B0 = 0; + dword_53E6B4 = 0; + dword_53E6B8 = 0; + dword_53E6BC = 0; + dword_53E6C0 = 0; + dword_53E6C4 = 0; + dword_53E6C8 = 0; + dword_53E6CC = 0; + dword_53E6D0 = 0; + dword_53E6D4 = 0; + dword_53E6D8 = 0; + dword_53E6DC = 0; + dword_53E6E0 = 0; + dword_53E6E4 = 0; + dword_53E6E8 = 0; + dword_53E6EC = 0; + dword_53E6F0 = 0; + dword_53E6F4 = 0; + dword_53E6F8 = 0; + dword_53E6FC = 0; + dword_53E700 = 0; + dword_53E704 = 0; + dword_53E708 = 0; + dword_53E70C = 0; + dword_53E710 = 0; + dword_53E714 = 0; + dword_53E718 = 0; + dword_53E71C = 0; + dword_53E720 = 0; + byte_53E724 = 0; + std::__timepunct::__timepunct( + `anonymous namespace'::timepunct_c, + (int)&`anonymous namespace'::timepunct_cache_c, + 1); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::__timepunct::id, + (const std::locale::id *)`anonymous namespace'::timepunct_c, + v15); + dword_53E424 = 1; + `anonymous namespace'::time_get_c = &off_55FD20; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::time_get>::id, + (const std::locale::id *)&`anonymous namespace'::time_get_c, + v16); + dword_53E434 = 1; + `anonymous namespace'::time_put_c = &off_560DE4; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::time_put>::id, + (const std::locale::id *)&`anonymous namespace'::time_put_c, + v17); + std::messages::messages(`anonymous namespace'::messages_c, 1); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::messages::id, + (const std::locale::id *)`anonymous namespace'::messages_c, + v18); + std::ctype::ctype(`anonymous namespace'::ctype_w, 1); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::ctype::id, + (const std::locale::id *)`anonymous namespace'::ctype_w, + v19); + std::codecvt::codecvt(`anonymous namespace'::codecvt_w, 1); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::codecvt::id, + (const std::locale::id *)`anonymous namespace'::codecvt_w, + v20); + dword_53E5A4 = 1; + `anonymous namespace'::numpunct_cache_w = (int)&off_5605C0; + dword_53E5A8 = 0; + dword_53E5AC = 0; + byte_53E5B0 = 0; + dword_53E5B4 = 0; + dword_53E5B8 = 0; + dword_53E5BC = 0; + dword_53E5C0 = 0; + dword_53E5C4 = 0; + byte_53E644 = 0; + dword_53E418 = 1; + `anonymous namespace'::numpunct_w = &off_55FCFC; + dword_53E41C = (int)&`anonymous namespace'::numpunct_cache_w; + std::numpunct::_M_initialize_numpunct(&`anonymous namespace'::numpunct_w, 0); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::numpunct::id, + (const std::locale::id *)&`anonymous namespace'::numpunct_w, + v21); + dword_53F0AC = 1; + `anonymous namespace'::num_get_w = &off_560C54; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::num_get>::id, + (const std::locale::id *)&`anonymous namespace'::num_get_w, + v22); + dword_53F0BC = 1; + `anonymous namespace'::num_put_w = &off_560CC0; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::num_put>::id, + (const std::locale::id *)&`anonymous namespace'::num_put_w, + v23); + dword_53EFC8 = 1; + `anonymous namespace'::collate_w = &off_55FC84; + dword_53EFCC = std::locale::facet::_S_get_c_locale(); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::collate::id, + (const std::locale::id *)&`anonymous namespace'::collate_w, + v24); + dword_53E8E4 = 1; + `anonymous namespace'::moneypunct_cache_wf = (int)&off_5606F4; + dword_53E8E8 = 0; + dword_53E8EC = 0; + byte_53E8F0 = 0; + dword_53E8F2 = 0; + dword_53E8F8 = 0; + dword_53E8FC = 0; + dword_53E900 = 0; + dword_53E904 = 0; + dword_53E908 = 0; + dword_53E90C = 0; + dword_53E910 = 0; + dword_53E914 = 0; + dword_53E918 = 0; + byte_53E932 = 0; + dword_53E4CC = 1; + `anonymous namespace'::moneypunct_wf = &off_55F888; + dword_53E4D0 = (int)&`anonymous namespace'::moneypunct_cache_wf; + std::moneypunct::_M_initialize_moneypunct(&`anonymous namespace'::moneypunct_wf, 0, 0); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::moneypunct::id, + (const std::locale::id *)&`anonymous namespace'::moneypunct_wf, + v25); + dword_53E944 = 1; + `anonymous namespace'::moneypunct_cache_wt = (int)&off_560704; + dword_53E948 = 0; + dword_53E94C = 0; + byte_53E950 = 0; + dword_53E952 = 0; + dword_53E958 = 0; + dword_53E95C = 0; + dword_53E960 = 0; + dword_53E964 = 0; + dword_53E968 = 0; + dword_53E96C = 0; + dword_53E970 = 0; + dword_53E974 = 0; + dword_53E978 = 0; + byte_53E992 = 0; + dword_53E4D8 = 1; + `anonymous namespace'::moneypunct_wt = &off_55F8BC; + dword_53E4DC = (int)&`anonymous namespace'::moneypunct_cache_wt; + std::moneypunct::_M_initialize_moneypunct(&`anonymous namespace'::moneypunct_wt, 0, 0); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::moneypunct::id, + (const std::locale::id *)&`anonymous namespace'::moneypunct_wt, + v26); + dword_53E45C = 1; + `anonymous namespace'::money_get_w = &off_55FD90; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::money_get>::id, + (const std::locale::id *)&`anonymous namespace'::money_get_w, + v27); + dword_53E46C = 1; + `anonymous namespace'::money_put_w = &off_55FDC0; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::money_put>::id, + (const std::locale::id *)&`anonymous namespace'::money_put_w, + v28); + dword_53E744 = 1; + `anonymous namespace'::timepunct_cache_w = (int)&off_5605F4; + dword_53E748 = 0; + dword_53E74C = 0; + dword_53E750 = 0; + dword_53E754 = 0; + dword_53E758 = 0; + dword_53E75C = 0; + dword_53E760 = 0; + dword_53E764 = 0; + dword_53E768 = 0; + dword_53E76C = 0; + dword_53E770 = 0; + dword_53E774 = 0; + dword_53E778 = 0; + dword_53E77C = 0; + dword_53E780 = 0; + dword_53E784 = 0; + dword_53E788 = 0; + dword_53E78C = 0; + dword_53E790 = 0; + dword_53E794 = 0; + dword_53E798 = 0; + dword_53E79C = 0; + dword_53E7A0 = 0; + dword_53E7A4 = 0; + dword_53E7A8 = 0; + dword_53E7AC = 0; + dword_53E7B0 = 0; + dword_53E7B4 = 0; + dword_53E7B8 = 0; + dword_53E7BC = 0; + dword_53E7C0 = 0; + dword_53E7C4 = 0; + dword_53E7C8 = 0; + dword_53E7CC = 0; + dword_53E7D0 = 0; + dword_53E7D4 = 0; + dword_53E7D8 = 0; + dword_53E7DC = 0; + dword_53E7E0 = 0; + dword_53E7E4 = 0; + dword_53E7E8 = 0; + dword_53E7EC = 0; + dword_53E7F0 = 0; + dword_53E7F4 = 0; + dword_53E7F8 = 0; + dword_53E7FC = 0; + dword_53E800 = 0; + byte_53E804 = 0; + std::__timepunct::__timepunct( + `anonymous namespace'::timepunct_w, + (int)&`anonymous namespace'::timepunct_cache_w, + 1); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::__timepunct::id, + (const std::locale::id *)`anonymous namespace'::timepunct_w, + v29); + dword_53E42C = 1; + `anonymous namespace'::time_get_w = &off_55FD4C; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::time_get>::id, + (const std::locale::id *)&`anonymous namespace'::time_get_w, + v30); + dword_53E43C = 1; + `anonymous namespace'::time_put_w = &off_560DF8; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::time_put>::id, + (const std::locale::id *)&`anonymous namespace'::time_put_w, + v31); + std::messages::messages(`anonymous namespace'::messages_w, 1); + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::messages::id, + (const std::locale::id *)`anonymous namespace'::messages_w, + v32); + dword_53E444 = 1; + `anonymous namespace'::codecvt_c16 = &off_560B5C; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::codecvt::id, + (const std::locale::id *)&`anonymous namespace'::codecvt_c16, + v33); + dword_53E44C = 1; + `anonymous namespace'::codecvt_c32 = &off_560B04; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::codecvt::id, + (const std::locale::id *)&`anonymous namespace'::codecvt_c32, + v34); + dword_53E4E4 = 1; + `anonymous namespace'::codecvt_c16_c8 = &off_560B30; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::codecvt::id, + (const std::locale::id *)&`anonymous namespace'::codecvt_c16_c8, + v35); + dword_53E4EC = 1; + `anonymous namespace'::codecvt_c32_c8 = &off_560AD8; + std::locale::_Impl::_M_install_facet( + a1, + (std::locale::_Impl *)&std::codecvt::id, + (const std::locale::id *)&`anonymous namespace'::codecvt_c32_c8, + v36); + v45[0] = (int)&`anonymous namespace'::numpunct_cache_c; + v45[1] = (int)&`anonymous namespace'::moneypunct_cache_cf; + v45[2] = (int)&`anonymous namespace'::moneypunct_cache_ct; + v45[3] = (int)&`anonymous namespace'::numpunct_cache_w; + v45[4] = (int)&`anonymous namespace'::moneypunct_cache_wf; + v45[5] = (int)&`anonymous namespace'::moneypunct_cache_wt; + std::locale::_Impl::_M_init_extra((int)a1, (std::locale::_Impl *)v45, v4); + v37 = a1[3]; + *(_DWORD *)(v37 + 4 * std::locale::id::_M_id(&std::numpunct::id)) = &`anonymous namespace'::numpunct_cache_c; + v38 = a1[3]; + *(_DWORD *)(v38 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = &`anonymous namespace'::moneypunct_cache_cf; + v39 = a1[3]; + *(_DWORD *)(v39 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = &`anonymous namespace'::moneypunct_cache_ct; + v40 = a1[3]; + *(_DWORD *)(v40 + 4 * std::locale::id::_M_id(&std::__timepunct::id)) = &`anonymous namespace'::timepunct_cache_c; + v41 = a1[3]; + *(_DWORD *)(v41 + 4 * std::locale::id::_M_id(&std::numpunct::id)) = &`anonymous namespace'::numpunct_cache_w; + v42 = a1[3]; + *(_DWORD *)(v42 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = &`anonymous namespace'::moneypunct_cache_wf; + v43 = a1[3]; + *(_DWORD *)(v43 + 4 * std::locale::id::_M_id(&std::moneypunct::id)) = &`anonymous namespace'::moneypunct_cache_wt; + lpuexcpt = (struct _Unwind_Exception *)a1[3]; + *((_DWORD *)lpuexcpt + std::locale::id::_M_id(&std::__timepunct::id)) = &`anonymous namespace'::timepunct_cache_w; +} +// 504442: variable 'v5' is possibly undefined +// 504470: variable 'v6' is possibly undefined +// 504531: variable 'v7' is possibly undefined +// 50455F: variable 'v8' is possibly undefined +// 50458D: variable 'v9' is possibly undefined +// 5045D3: variable 'v10' is possibly undefined +// 5046CE: variable 'v11' is possibly undefined +// 5047C8: variable 'v12' is possibly undefined +// 5047F6: variable 'v13' is possibly undefined +// 504824: variable 'v14' is possibly undefined +// 504A4B: variable 'v15' is possibly undefined +// 504A79: variable 'v16' is possibly undefined +// 504AA7: variable 'v17' is possibly undefined +// 504AD5: variable 'v18' is possibly undefined +// 504B03: variable 'v19' is possibly undefined +// 504B31: variable 'v20' is possibly undefined +// 504BF3: variable 'v21' is possibly undefined +// 504C21: variable 'v22' is possibly undefined +// 504C4F: variable 'v23' is possibly undefined +// 504C95: variable 'v24' is possibly undefined +// 504D91: variable 'v25' is possibly undefined +// 504E8D: variable 'v26' is possibly undefined +// 504EBB: variable 'v27' is possibly undefined +// 504EE9: variable 'v28' is possibly undefined +// 505110: variable 'v29' is possibly undefined +// 50513E: variable 'v30' is possibly undefined +// 50516C: variable 'v31' is possibly undefined +// 50519A: variable 'v32' is possibly undefined +// 5051C8: variable 'v33' is possibly undefined +// 5051F6: variable 'v34' is possibly undefined +// 505224: variable 'v35' is possibly undefined +// 505252: variable 'v36' is possibly undefined +// 50528D: variable 'v4' is possibly undefined +// 53E3E8: using guessed type _DWORD `anonymous namespace'::messages_c[4]; +// 53E3F8: using guessed type _DWORD `anonymous namespace'::messages_w[4]; +// 53E40C: using guessed type int dword_53E40C; +// 53E410: using guessed type int dword_53E410; +// 53E418: using guessed type int dword_53E418; +// 53E41C: using guessed type int dword_53E41C; +// 53E424: using guessed type int dword_53E424; +// 53E42C: using guessed type int dword_53E42C; +// 53E434: using guessed type int dword_53E434; +// 53E43C: using guessed type int dword_53E43C; +// 53E444: using guessed type int dword_53E444; +// 53E44C: using guessed type int dword_53E44C; +// 53E454: using guessed type int dword_53E454; +// 53E45C: using guessed type int dword_53E45C; +// 53E464: using guessed type int dword_53E464; +// 53E46C: using guessed type int dword_53E46C; +// 53E470: using guessed type _DWORD `anonymous namespace'::timepunct_c[5]; +// 53E484: using guessed type _DWORD `anonymous namespace'::timepunct_w[5]; +// 53E4B4: using guessed type int dword_53E4B4; +// 53E4B8: using guessed type int dword_53E4B8; +// 53E4C0: using guessed type int dword_53E4C0; +// 53E4C4: using guessed type int dword_53E4C4; +// 53E4CC: using guessed type int dword_53E4CC; +// 53E4D0: using guessed type int dword_53E4D0; +// 53E4D8: using guessed type int dword_53E4D8; +// 53E4DC: using guessed type int dword_53E4DC; +// 53E4E4: using guessed type int dword_53E4E4; +// 53E4EC: using guessed type int dword_53E4EC; +// 53E520: using guessed type int `anonymous namespace'::numpunct_cache_c; +// 53E524: using guessed type int dword_53E524; +// 53E528: using guessed type int dword_53E528; +// 53E52C: using guessed type int dword_53E52C; +// 53E530: using guessed type char byte_53E530; +// 53E534: using guessed type int dword_53E534; +// 53E538: using guessed type int dword_53E538; +// 53E53C: using guessed type int dword_53E53C; +// 53E540: using guessed type int dword_53E540; +// 53E544: using guessed type __int16 word_53E544; +// 53E584: using guessed type char byte_53E584; +// 53E5A0: using guessed type int `anonymous namespace'::numpunct_cache_w; +// 53E5A4: using guessed type int dword_53E5A4; +// 53E5A8: using guessed type int dword_53E5A8; +// 53E5AC: using guessed type int dword_53E5AC; +// 53E5B0: using guessed type char byte_53E5B0; +// 53E5B4: using guessed type int dword_53E5B4; +// 53E5B8: using guessed type int dword_53E5B8; +// 53E5BC: using guessed type int dword_53E5BC; +// 53E5C0: using guessed type int dword_53E5C0; +// 53E5C4: using guessed type int dword_53E5C4; +// 53E644: using guessed type char byte_53E644; +// 53E660: using guessed type int `anonymous namespace'::timepunct_cache_c; +// 53E664: using guessed type int dword_53E664; +// 53E668: using guessed type int dword_53E668; +// 53E66C: using guessed type int dword_53E66C; +// 53E670: using guessed type int dword_53E670; +// 53E674: using guessed type int dword_53E674; +// 53E678: using guessed type int dword_53E678; +// 53E67C: using guessed type int dword_53E67C; +// 53E680: using guessed type int dword_53E680; +// 53E684: using guessed type int dword_53E684; +// 53E688: using guessed type int dword_53E688; +// 53E68C: using guessed type int dword_53E68C; +// 53E690: using guessed type int dword_53E690; +// 53E694: using guessed type int dword_53E694; +// 53E698: using guessed type int dword_53E698; +// 53E69C: using guessed type int dword_53E69C; +// 53E6A0: using guessed type int dword_53E6A0; +// 53E6A4: using guessed type int dword_53E6A4; +// 53E6A8: using guessed type int dword_53E6A8; +// 53E6AC: using guessed type int dword_53E6AC; +// 53E6B0: using guessed type int dword_53E6B0; +// 53E6B4: using guessed type int dword_53E6B4; +// 53E6B8: using guessed type int dword_53E6B8; +// 53E6BC: using guessed type int dword_53E6BC; +// 53E6C0: using guessed type int dword_53E6C0; +// 53E6C4: using guessed type int dword_53E6C4; +// 53E6C8: using guessed type int dword_53E6C8; +// 53E6CC: using guessed type int dword_53E6CC; +// 53E6D0: using guessed type int dword_53E6D0; +// 53E6D4: using guessed type int dword_53E6D4; +// 53E6D8: using guessed type int dword_53E6D8; +// 53E6DC: using guessed type int dword_53E6DC; +// 53E6E0: using guessed type int dword_53E6E0; +// 53E6E4: using guessed type int dword_53E6E4; +// 53E6E8: using guessed type int dword_53E6E8; +// 53E6EC: using guessed type int dword_53E6EC; +// 53E6F0: using guessed type int dword_53E6F0; +// 53E6F4: using guessed type int dword_53E6F4; +// 53E6F8: using guessed type int dword_53E6F8; +// 53E6FC: using guessed type int dword_53E6FC; +// 53E700: using guessed type int dword_53E700; +// 53E704: using guessed type int dword_53E704; +// 53E708: using guessed type int dword_53E708; +// 53E70C: using guessed type int dword_53E70C; +// 53E710: using guessed type int dword_53E710; +// 53E714: using guessed type int dword_53E714; +// 53E718: using guessed type int dword_53E718; +// 53E71C: using guessed type int dword_53E71C; +// 53E720: using guessed type int dword_53E720; +// 53E724: using guessed type char byte_53E724; +// 53E740: using guessed type int `anonymous namespace'::timepunct_cache_w; +// 53E744: using guessed type int dword_53E744; +// 53E748: using guessed type int dword_53E748; +// 53E74C: using guessed type int dword_53E74C; +// 53E750: using guessed type int dword_53E750; +// 53E754: using guessed type int dword_53E754; +// 53E758: using guessed type int dword_53E758; +// 53E75C: using guessed type int dword_53E75C; +// 53E760: using guessed type int dword_53E760; +// 53E764: using guessed type int dword_53E764; +// 53E768: using guessed type int dword_53E768; +// 53E76C: using guessed type int dword_53E76C; +// 53E770: using guessed type int dword_53E770; +// 53E774: using guessed type int dword_53E774; +// 53E778: using guessed type int dword_53E778; +// 53E77C: using guessed type int dword_53E77C; +// 53E780: using guessed type int dword_53E780; +// 53E784: using guessed type int dword_53E784; +// 53E788: using guessed type int dword_53E788; +// 53E78C: using guessed type int dword_53E78C; +// 53E790: using guessed type int dword_53E790; +// 53E794: using guessed type int dword_53E794; +// 53E798: using guessed type int dword_53E798; +// 53E79C: using guessed type int dword_53E79C; +// 53E7A0: using guessed type int dword_53E7A0; +// 53E7A4: using guessed type int dword_53E7A4; +// 53E7A8: using guessed type int dword_53E7A8; +// 53E7AC: using guessed type int dword_53E7AC; +// 53E7B0: using guessed type int dword_53E7B0; +// 53E7B4: using guessed type int dword_53E7B4; +// 53E7B8: using guessed type int dword_53E7B8; +// 53E7BC: using guessed type int dword_53E7BC; +// 53E7C0: using guessed type int dword_53E7C0; +// 53E7C4: using guessed type int dword_53E7C4; +// 53E7C8: using guessed type int dword_53E7C8; +// 53E7CC: using guessed type int dword_53E7CC; +// 53E7D0: using guessed type int dword_53E7D0; +// 53E7D4: using guessed type int dword_53E7D4; +// 53E7D8: using guessed type int dword_53E7D8; +// 53E7DC: using guessed type int dword_53E7DC; +// 53E7E0: using guessed type int dword_53E7E0; +// 53E7E4: using guessed type int dword_53E7E4; +// 53E7E8: using guessed type int dword_53E7E8; +// 53E7EC: using guessed type int dword_53E7EC; +// 53E7F0: using guessed type int dword_53E7F0; +// 53E7F4: using guessed type int dword_53E7F4; +// 53E7F8: using guessed type int dword_53E7F8; +// 53E7FC: using guessed type int dword_53E7FC; +// 53E800: using guessed type int dword_53E800; +// 53E804: using guessed type char byte_53E804; +// 53E820: using guessed type int `anonymous namespace'::moneypunct_cache_cf; +// 53E824: using guessed type int dword_53E824; +// 53E828: using guessed type int dword_53E828; +// 53E82C: using guessed type int dword_53E82C; +// 53E830: using guessed type __int16 word_53E830; +// 53E832: using guessed type char byte_53E832; +// 53E834: using guessed type int dword_53E834; +// 53E838: using guessed type int dword_53E838; +// 53E83C: using guessed type int dword_53E83C; +// 53E840: using guessed type int dword_53E840; +// 53E844: using guessed type int dword_53E844; +// 53E848: using guessed type int dword_53E848; +// 53E84C: using guessed type int dword_53E84C; +// 53E850: using guessed type int dword_53E850; +// 53E854: using guessed type int dword_53E854; +// 53E863: using guessed type char byte_53E863; +// 53E880: using guessed type int `anonymous namespace'::moneypunct_cache_ct; +// 53E884: using guessed type int dword_53E884; +// 53E888: using guessed type int dword_53E888; +// 53E88C: using guessed type int dword_53E88C; +// 53E890: using guessed type __int16 word_53E890; +// 53E892: using guessed type char byte_53E892; +// 53E894: using guessed type int dword_53E894; +// 53E898: using guessed type int dword_53E898; +// 53E89C: using guessed type int dword_53E89C; +// 53E8A0: using guessed type int dword_53E8A0; +// 53E8A4: using guessed type int dword_53E8A4; +// 53E8A8: using guessed type int dword_53E8A8; +// 53E8AC: using guessed type int dword_53E8AC; +// 53E8B0: using guessed type int dword_53E8B0; +// 53E8B4: using guessed type int dword_53E8B4; +// 53E8C3: using guessed type char byte_53E8C3; +// 53E8E0: using guessed type int `anonymous namespace'::moneypunct_cache_wf; +// 53E8E4: using guessed type int dword_53E8E4; +// 53E8E8: using guessed type int dword_53E8E8; +// 53E8EC: using guessed type int dword_53E8EC; +// 53E8F0: using guessed type char byte_53E8F0; +// 53E8F2: using guessed type int dword_53E8F2; +// 53E8F8: using guessed type int dword_53E8F8; +// 53E8FC: using guessed type int dword_53E8FC; +// 53E900: using guessed type int dword_53E900; +// 53E904: using guessed type int dword_53E904; +// 53E908: using guessed type int dword_53E908; +// 53E90C: using guessed type int dword_53E90C; +// 53E910: using guessed type int dword_53E910; +// 53E914: using guessed type int dword_53E914; +// 53E918: using guessed type int dword_53E918; +// 53E932: using guessed type char byte_53E932; +// 53E940: using guessed type int `anonymous namespace'::moneypunct_cache_wt; +// 53E944: using guessed type int dword_53E944; +// 53E948: using guessed type int dword_53E948; +// 53E94C: using guessed type int dword_53E94C; +// 53E950: using guessed type char byte_53E950; +// 53E952: using guessed type int dword_53E952; +// 53E958: using guessed type int dword_53E958; +// 53E95C: using guessed type int dword_53E95C; +// 53E960: using guessed type int dword_53E960; +// 53E964: using guessed type int dword_53E964; +// 53E968: using guessed type int dword_53E968; +// 53E96C: using guessed type int dword_53E96C; +// 53E970: using guessed type int dword_53E970; +// 53E974: using guessed type int dword_53E974; +// 53E978: using guessed type int dword_53E978; +// 53E992: using guessed type char byte_53E992; +// 53E9A0: using guessed type __int16 `anonymous namespace'::name_c; +// 53E9C0: using guessed type _DWORD `anonymous namespace'::ctype_c[136]; +// 53EBE0: using guessed type _DWORD `anonymous namespace'::ctype_w[184]; +// 53EEC4: using guessed type int `anonymous namespace'::name_vec; +// 53EEC8: using guessed type int dword_53EEC8; +// 53EECC: using guessed type int dword_53EECC; +// 53EED0: using guessed type int dword_53EED0; +// 53EED4: using guessed type int dword_53EED4; +// 53EED8: using guessed type int dword_53EED8; +// 53EFA0: using guessed type _DWORD `anonymous namespace'::codecvt_c[3]; +// 53EFAC: using guessed type _DWORD `anonymous namespace'::codecvt_w[3]; +// 53EFBC: using guessed type int dword_53EFBC; +// 53EFC0: using guessed type int dword_53EFC0; +// 53EFC8: using guessed type int dword_53EFC8; +// 53EFCC: using guessed type int dword_53EFCC; +// 53F0A4: using guessed type int dword_53F0A4; +// 53F0AC: using guessed type int dword_53F0AC; +// 53F0B4: using guessed type int dword_53F0B4; +// 53F0BC: using guessed type int dword_53F0BC; +// 53F59C: using guessed type signed __int32 std::__timepunct::id; +// 53F5A0: using guessed type signed __int32 std::__timepunct::id; +// 53F708: using guessed type signed __int32 std::moneypunct::id; +// 53F70C: using guessed type signed __int32 std::moneypunct::id; +// 53F710: using guessed type signed __int32 std::moneypunct::id; +// 53F714: using guessed type signed __int32 std::moneypunct::id; +// 53F728: using guessed type signed __int32 std::numpunct::id; +// 53F72C: using guessed type signed __int32 std::numpunct::id; +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FC68: using guessed type int (*off_55FC68)(); +// 55FC84: using guessed type int (*off_55FC84)(); +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FD20: using guessed type int (*off_55FD20)(); +// 55FD4C: using guessed type int (*off_55FD4C)(); +// 55FD78: using guessed type int (*off_55FD78)(); +// 55FD90: using guessed type int (*off_55FD90)(); +// 55FDA8: using guessed type int (*off_55FDA8)(); +// 55FDC0: using guessed type int (*off_55FDC0)(); +// 5605B0: using guessed type int (*off_5605B0)(); +// 5605C0: using guessed type int (*off_5605C0)(); +// 5605E4: using guessed type int (*off_5605E4)(); +// 5605F4: using guessed type int (*off_5605F4)(); +// 5606D4: using guessed type int (*off_5606D4)(); +// 5606E4: using guessed type int (*off_5606E4)(); +// 5606F4: using guessed type int (*off_5606F4)(); +// 560704: using guessed type int (*off_560704)(); +// 560AD8: using guessed type int (*off_560AD8)(); +// 560B04: using guessed type int (*off_560B04)(); +// 560B30: using guessed type int (*off_560B30)(); +// 560B5C: using guessed type int (*off_560B5C)(); +// 560C18: using guessed type int (*off_560C18)(); +// 560C54: using guessed type int (*off_560C54)(); +// 560C90: using guessed type int (*off_560C90)(); +// 560CC0: using guessed type int (*off_560CC0)(); +// 560DE4: using guessed type int (*off_560DE4)(); +// 560DF8: using guessed type int (*off_560DF8)(); + +//----- (00505430) -------------------------------------------------------- +void __fastcall std::locale::_Impl::~_Impl(_DWORD *a1) +{ + _DWORD *v1; // eax + volatile signed __int32 *v2; // ecx + signed __int32 v3; // eax + void (*v4)(void); // eax + _DWORD *v5; // eax + volatile signed __int32 *v6; // ecx + signed __int32 v7; // eax + void (*v8)(void); // eax + char *v9; // edx + unsigned int v11; // [esp+14h] [ebp-58h] + int v12; // [esp+14h] [ebp-58h] + unsigned int v13; // [esp+18h] [ebp-54h] + + v1 = (_DWORD *)a1[1]; + if ( v1 ) + { + if ( !a1[2] ) + goto LABEL_13; + v11 = 0; + do + { + v2 = (volatile signed __int32 *)v1[v11]; + if ( v2 ) + { + if ( _CRT_MT ) + { + v3 = _InterlockedExchangeAdd(v2 + 1, 0xFFFFFFFF); + } + else + { + v3 = *((_DWORD *)v2 + 1); + *((_DWORD *)v2 + 1) = v3 - 1; + } + if ( v3 == 1 ) + { + v4 = *(void (**)(void))(*v2 + 4); + if ( (char *)v4 == (char *)std::locale::facet::~facet ) + operator delete((void *)v2); + else + v4(); + } + v1 = (_DWORD *)a1[1]; + } + ++v11; + } + while ( a1[2] > v11 ); + if ( v1 ) +LABEL_13: + operator delete[](v1); + } + v5 = (_DWORD *)a1[3]; + if ( v5 ) + { + if ( !a1[2] ) + goto LABEL_26; + v13 = 0; + do + { + v6 = (volatile signed __int32 *)v5[v13]; + if ( v6 ) + { + if ( _CRT_MT ) + { + v7 = _InterlockedExchangeAdd(v6 + 1, 0xFFFFFFFF); + } + else + { + v7 = *((_DWORD *)v6 + 1); + *((_DWORD *)v6 + 1) = v7 - 1; + } + if ( v7 == 1 ) + { + v8 = *(void (**)(void))(*v6 + 4); + if ( (char *)v8 == (char *)std::locale::facet::~facet ) + operator delete((void *)v6); + else + v8(); + } + v5 = (_DWORD *)a1[3]; + } + ++v13; + } + while ( a1[2] > v13 ); + if ( v5 ) +LABEL_26: + operator delete[](v5); + } + v12 = 0; + v9 = (char *)a1[4]; + if ( v9 ) + { + do + { + if ( *(_DWORD *)&v9[v12] ) + { + operator delete[](*(void **)&v9[v12]); + v9 = (char *)a1[4]; + } + v12 += 4; + } + while ( v12 != 24 ); + if ( v9 ) + operator delete[](v9); + } +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (005056A0) -------------------------------------------------------- +int *const *std::locale::facet::_S_get_c_name() +{ + return &std::locale::facet::_S_c_name; +} + +//----- (005056B0) -------------------------------------------------------- +int std::locale::facet::_S_get_c_locale() +{ + int result; // eax + + if ( _CRT_MT ) + { + __gthr_win32_once((int)&std::locale::facet::_S_once, (void (*)(void))std::locale::facet::_S_initialize_once); + return std::locale::facet::_S_c_locale; + } + else + { + result = std::locale::facet::_S_c_locale; + if ( !std::locale::facet::_S_c_locale ) + { + std::locale::facet::_S_create_c_locale( + (std::locale::facet *)&std::locale::facet::_S_c_locale, + (int **)&std::locale::facet::_S_c_name); + return std::locale::facet::_S_c_locale; + } + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F6F0: using guessed type int std::locale::facet::_S_c_locale; + +//----- (00505720) -------------------------------------------------------- +int __cdecl std::locale::facet::_S_clone_c_locale() +{ + return 0; +} + +//----- (00505730) -------------------------------------------------------- +int **__cdecl std::locale::facet::_S_create_c_locale(std::locale::facet *this, int **a2) +{ + int **result; // eax + + result = a2; + *(_DWORD *)this = 0; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + std::__throw_runtime_error((std::runtime_error *)"locale::facet::_S_create_c_locale name not valid"); + return result; +} + +//----- (00505770) -------------------------------------------------------- +int **std::locale::facet::_S_initialize_once() +{ + return std::locale::facet::_S_create_c_locale( + (std::locale::facet *)&std::locale::facet::_S_c_locale, + (int **)&std::locale::facet::_S_c_name); +} +// 53F6F0: using guessed type int std::locale::facet::_S_c_locale; + +//----- (005057A0) -------------------------------------------------------- +std::locale::facet *__cdecl std::locale::facet::_S_destroy_c_locale(std::locale::facet *this) +{ + std::locale::facet *result; // eax + + result = this; + *(_DWORD *)this = 0; + return result; +} + +//----- (005057B0) -------------------------------------------------------- +int __cdecl std::locale::facet::_S_lc_ctype_c_locale() +{ + return 0; +} + +//----- (005057C0) -------------------------------------------------------- +void __fastcall std::locale::facet::~facet(void *Block) +{ + operator delete(Block); +} + +//----- (005057E0) -------------------------------------------------------- +std::locale *__cdecl std::locale::global(std::locale *this, volatile signed __int32 **a2) +{ + _DWORD *locale_mutex; // eax + volatile signed __int32 *v3; // edx + int v4; // eax + _DWORD *exception; // eax + std::locale::_Impl *v7; // [esp+4h] [ebp-74h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-60h] + int v9; // [esp+54h] [ebp-24h] + void *Block[2]; // [esp+58h] [ebp-20h] BYREF + char v11; // [esp+60h] [ebp-18h] BYREF + + std::locale::_S_initialize(); + locale_mutex = `anonymous namespace'::get_locale_mutex(); + v9 = (int)locale_mutex; + if ( !_CRT_MT ) + { + lpuexcpt = (struct _Unwind_Exception *)std::locale::_S_global; + v3 = *a2; + v4 = std::locale::_S_classic; + if ( *a2 == (volatile signed __int32 *)std::locale::_S_classic ) + goto LABEL_4; + goto LABEL_3; + } + if ( __gthr_win32_mutex_lock((int)locale_mutex) ) + __gnu_cxx::__throw_concurrence_lock_error(); + lpuexcpt = (struct _Unwind_Exception *)std::locale::_S_global; + v3 = *a2; + v4 = std::locale::_S_classic; + if ( *a2 != (volatile signed __int32 *)std::locale::_S_classic ) + { + if ( !_CRT_MT ) + { +LABEL_3: + ++*v3; + v4 = (int)v3; + goto LABEL_4; + } + _InterlockedAdd(v3, 1u); + v4 = (int)*a2; + } +LABEL_4: + std::locale::_S_global = v4; + std::locale::name[abi:cxx11]((int)Block, (int)a2); + if ( std::string::compare((int)Block, "*") ) + setlocale(0, (const char *)Block[0]); + if ( Block[0] != &v11 ) + operator delete(Block[0]); + if ( _CRT_MT && __gthr_win32_mutex_unlock(v9) ) + { + exception = __cxa_allocate_exception(4u); + *exception = &off_55F35C; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'__gnu_cxx::__concurrence_unlock_error, + (void (__cdecl *)(void *))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error); + } + std::locale::locale(this, lpuexcpt, v7); + return this; +} +// 5058A4: variable 'v7' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53F6E8: using guessed type int std::locale::_S_classic; +// 53F704: using guessed type int std::locale::_S_global; +// 55B6F4: using guessed type int *`typeinfo for'__gnu_cxx::__concurrence_unlock_error; +// 55F35C: using guessed type void (__cdecl *off_55F35C)(__gnu_cxx::__concurrence_unlock_error *__hidden this); + +//----- (005059C0) -------------------------------------------------------- +_DWORD *std::locale::classic() +{ + std::locale::_Impl *v1; // [esp+4h] [ebp-18h] + std::locale::_Impl *v2; // [esp+4h] [ebp-18h] + + if ( _CRT_MT ) + { + __gthr_win32_once((int)&std::locale::_S_once, (void (*)(void))std::locale::_S_initialize_once); + if ( std::locale::_S_classic ) + return &`anonymous namespace'::c_locale; + } + else if ( std::locale::_S_classic ) + { + return &`anonymous namespace'::c_locale; + } + std::locale::_Impl::_Impl(`anonymous namespace'::c_locale_impl, (std::locale::_Impl *)2, (unsigned int)v1); + std::locale::_S_classic = (int)`anonymous namespace'::c_locale_impl; + std::locale::_S_global = (int)`anonymous namespace'::c_locale_impl; + std::locale::locale(&`anonymous namespace'::c_locale, (std::locale *)`anonymous namespace'::c_locale_impl, v2); + return &`anonymous namespace'::c_locale; +} +// 505A09: variable 'v1' is possibly undefined +// 505A31: variable 'v2' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 53E49C: using guessed type _DWORD `anonymous namespace'::c_locale_impl[5]; +// 53EEC0: using guessed type _DWORD `anonymous namespace'::c_locale; +// 53F6E8: using guessed type int std::locale::_S_classic; +// 53F704: using guessed type int std::locale::_S_global; + +//----- (00505A50) -------------------------------------------------------- +std::locale *__userpurge std::locale::locale@(_DWORD *a1@, std::locale *this, std::locale::_Impl *a3) +{ + std::locale *result; // eax + + result = this; + *a1 = this; + return result; +} + +//----- (00505A60) -------------------------------------------------------- +volatile signed __int32 *__userpurge std::locale::locale@( + volatile signed __int32 **a1@, + volatile signed __int32 **this, + const std::locale *a3) +{ + volatile signed __int32 *result; // eax + + result = *this; + *a1 = *this; + if ( result != (volatile signed __int32 *)std::locale::_S_classic ) + { + if ( _CRT_MT ) + _InterlockedAdd(result, 1u); + else + ++*result; + } + return result; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F6E8: using guessed type int std::locale::_S_classic; + +//----- (00505A90) -------------------------------------------------------- +void __fastcall std::locale::locale(_DWORD *a1) +{ + int v1; // eax + _DWORD *v2; // eax + _DWORD *exception; // eax + _DWORD *locale_mutex; // [esp+18h] [ebp-44h] + + *a1 = 0; + std::locale::_S_initialize(); + v1 = std::locale::_S_global; + *a1 = std::locale::_S_global; + if ( v1 != std::locale::_S_classic ) + { + locale_mutex = `anonymous namespace'::get_locale_mutex(); + v2 = (_DWORD *)std::locale::_S_global; + if ( !_CRT_MT ) + goto LABEL_3; + if ( __gthr_win32_mutex_lock((int)locale_mutex) ) + __gnu_cxx::__throw_concurrence_lock_error(); + v2 = (_DWORD *)std::locale::_S_global; + if ( _CRT_MT ) + { + _InterlockedAdd((volatile signed __int32 *)std::locale::_S_global, 1u); + v2 = (_DWORD *)std::locale::_S_global; + } + else + { +LABEL_3: + ++*v2; + } + *a1 = v2; + if ( _CRT_MT ) + { + if ( __gthr_win32_mutex_unlock((int)locale_mutex) ) + { + exception = __cxa_allocate_exception(4u); + *exception = &off_55F35C; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'__gnu_cxx::__concurrence_unlock_error, + (void (__cdecl *)(void *))__gnu_cxx::__concurrence_unlock_error::~__concurrence_unlock_error); + } + } + } +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F6E8: using guessed type int std::locale::_S_classic; +// 53F704: using guessed type int std::locale::_S_global; +// 55B6F4: using guessed type int *`typeinfo for'__gnu_cxx::__concurrence_unlock_error; +// 55F35C: using guessed type void (__cdecl *off_55F35C)(__gnu_cxx::__concurrence_unlock_error *__hidden this); + +//----- (00505BE0) -------------------------------------------------------- +void __fastcall std::locale::~locale(_DWORD **a1) +{ + _DWORD *Block; // ebx + int v2; // eax + + Block = *a1; + if ( *a1 != (_DWORD *)std::locale::_S_classic ) + { + if ( !_CRT_MT ) + { + v2 = (*Block)--; + if ( v2 != 1 ) + return; +LABEL_6: + std::locale::_Impl::~_Impl(Block); + operator delete(Block); + return; + } + if ( _InterlockedExchangeAdd(Block, 0xFFFFFFFF) == 1 ) + goto LABEL_6; + } +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F6E8: using guessed type int std::locale::_S_classic; + +//----- (00505C40) -------------------------------------------------------- +volatile signed __int32 **__thiscall std::locale::operator=( + volatile signed __int32 **this, + volatile signed __int32 **a2) +{ + volatile signed __int32 **result; // eax + int v3; // edx + volatile signed __int32 *v4; // ecx + volatile signed __int32 *Block; // ebx + volatile signed __int32 v6; // edx + volatile signed __int32 **v7; // [esp+1Ch] [ebp-10h] + + result = this; + v3 = std::locale::_S_classic; + v4 = *a2; + if ( *a2 != (volatile signed __int32 *)std::locale::_S_classic ) + { + if ( _CRT_MT ) + { + _InterlockedAdd(v4, 1u); + v3 = std::locale::_S_classic; + } + else + { + ++*v4; + } + } + Block = *result; + if ( *result == (volatile signed __int32 *)v3 ) + goto LABEL_7; + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd(Block, 0xFFFFFFFF) != 1 ) + goto LABEL_7; + } + else + { + v6 = (*Block)--; + if ( v6 != 1 ) + { +LABEL_7: + *result = *a2; + return result; + } + } + v7 = result; + std::locale::_Impl::~_Impl(Block); + operator delete((void *)Block); + result = v7; + *v7 = *a2; + return result; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F6E8: using guessed type int std::locale::_S_classic; + +//----- (00505CE0) -------------------------------------------------------- +char *__thiscall std::vector>::_M_realloc_insert const&>( + _DWORD *this, + char *a2, + _DWORD *a3) +{ + int v3; // edx + int v4; // eax + unsigned int v5; // ebx + _DWORD *v6; // edi + char *i; // esi + volatile signed __int32 **v8; // ecx + _DWORD *v9; // ecx + volatile signed __int32 **v10; // ecx + char *result; // eax + char *v12; // [esp+10h] [ebp-28h] + char *Block; // [esp+18h] [ebp-20h] + char *v15; // [esp+1Ch] [ebp-1Ch] + + v12 = (char *)this[1]; + Block = (char *)*this; + v3 = (int)&v12[-*this] >> 3; + if ( v3 == 0xFFFFFFF ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = (int)&v12[-*this] >> 3; + v5 = v3 + v4; + if ( __CFADD__(v3, v4) ) + { + v5 = 0xFFFFFFF; +LABEL_11: + v15 = (char *)operator new(8 * v5); + goto LABEL_12; + } + v15 = 0; + if ( v5 ) + { + if ( v5 > 0xFFFFFFF ) + v5 = 0xFFFFFFF; + goto LABEL_11; + } +LABEL_12: + std::__shared_ptr::__shared_ptr(&v15[a2 - Block], a3); + v6 = v15; + for ( i = Block; ; i += 8 ) + { + v6 += 2; + if ( a2 == i ) + break; + std::__shared_ptr::__shared_ptr(v6 - 2, i); + v8 = (volatile signed __int32 **)(i + 4); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v8); + } + while ( i != v12 ) + { + v9 = v6; + v6 += 2; + std::__shared_ptr::__shared_ptr(v9, i); + v10 = (volatile signed __int32 **)(i + 4); + i += 8; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v10); + } + if ( Block ) + operator delete(Block); + this[1] = v6; + *this = v15; + result = &v15[8 * v5]; + this[2] = result; + return result; +} + +//----- (00505DEC) -------------------------------------------------------- +int __thiscall std::vector>::_M_erase(_DWORD *this, int a2) +{ + int v3; // ebx + int v4; // esi + int v5; // ebx + int v6; // edx + volatile signed __int32 **v7; // ecx + int v8; // ecx + + v3 = this[1]; + if ( a2 + 8 != v3 ) + { + v4 = a2 + 4; + v5 = (v3 - (a2 + 8)) >> 3; + while ( v5 > 0 ) + { + v6 = *(_DWORD *)(v4 + 4); + v7 = (volatile signed __int32 **)v4; + --v5; + v4 += 8; + *(_DWORD *)(v4 - 12) = v6; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(v7, *(volatile signed __int32 **)v4); + } + } + v8 = this[1]; + this[1] = v8 - 8; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)(v8 - 4)); + return a2; +} + +//----- (00505E48) -------------------------------------------------------- +void __thiscall std::vector>::push_back(_DWORD *this, _DWORD *a2) +{ + char *v3; // ecx + + v3 = (char *)this[1]; + if ( v3 == (char *)this[2] ) + { + std::vector>::_M_realloc_insert const&>( + this, + v3, + a2); + } + else + { + std::__shared_ptr::__shared_ptr(v3, a2); + this[1] += 8; + } +} + +//----- (00505E84) -------------------------------------------------------- +char *__thiscall std::vector>::_M_realloc_insert const&>( + int **this, + int *a2, + int *a3) +{ + int v3; // edx + int v4; // eax + unsigned int v5; // ebx + int *v6; // edi + int *i; // esi + volatile signed __int32 **v8; // ecx + int *v9; // ecx + volatile signed __int32 **v10; // ecx + char *result; // eax + int *v12; // [esp+10h] [ebp-28h] + int *Block; // [esp+18h] [ebp-20h] + int *v15; // [esp+1Ch] [ebp-1Ch] + + v12 = this[1]; + Block = *this; + v3 = ((char *)v12 - (char *)*this) >> 3; + if ( v3 == 0xFFFFFFF ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = ((char *)v12 - (char *)*this) >> 3; + v5 = v3 + v4; + if ( __CFADD__(v3, v4) ) + { + v5 = 0xFFFFFFF; +LABEL_11: + v15 = (int *)operator new(8 * v5); + goto LABEL_12; + } + v15 = 0; + if ( v5 ) + { + if ( v5 > 0xFFFFFFF ) + v5 = 0xFFFFFFF; + goto LABEL_11; + } +LABEL_12: + std::__shared_ptr::__shared_ptr( + (int *)((char *)v15 + (char *)a2 - (char *)Block), + a3); + v6 = v15; + for ( i = Block; ; i += 2 ) + { + v6 += 2; + if ( a2 == i ) + break; + std::__shared_ptr::__shared_ptr(v6 - 2, i); + v8 = (volatile signed __int32 **)(i + 1); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v8); + } + while ( i != v12 ) + { + v9 = v6; + v6 += 2; + std::__shared_ptr::__shared_ptr(v9, i); + v10 = (volatile signed __int32 **)(i + 1); + i += 2; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v10); + } + if ( Block ) + operator delete(Block); + this[1] = v6; + *this = v15; + result = (char *)&v15[2 * v5]; + this[2] = (int *)result; + return result; +} + +//----- (00505F90) -------------------------------------------------------- +void __thiscall std::vector>::push_back(int **this, int *a2) +{ + int *v3; // ecx + + v3 = this[1]; + if ( v3 == this[2] ) + { + std::vector>::_M_realloc_insert const&>( + this, + v3, + a2); + } + else + { + std::__shared_ptr::__shared_ptr(v3, a2); + this[1] += 2; + } +} + +//----- (00505FCC) -------------------------------------------------------- +char *__thiscall std::vector>::_M_realloc_insert const&>( + _DWORD *this, + char *a2, + _DWORD *a3) +{ + int v3; // edx + int v4; // eax + unsigned int v5; // ebx + _DWORD *v6; // edi + char *i; // esi + volatile signed __int32 **v8; // ecx + _DWORD *v9; // ecx + volatile signed __int32 **v10; // ecx + char *result; // eax + char *v12; // [esp+10h] [ebp-28h] + char *Block; // [esp+18h] [ebp-20h] + char *v15; // [esp+1Ch] [ebp-1Ch] + + v12 = (char *)this[1]; + Block = (char *)*this; + v3 = (int)&v12[-*this] >> 3; + if ( v3 == 0xFFFFFFF ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = (int)&v12[-*this] >> 3; + v5 = v3 + v4; + if ( __CFADD__(v3, v4) ) + { + v5 = 0xFFFFFFF; +LABEL_11: + v15 = (char *)operator new(8 * v5); + goto LABEL_12; + } + v15 = 0; + if ( v5 ) + { + if ( v5 > 0xFFFFFFF ) + v5 = 0xFFFFFFF; + goto LABEL_11; + } +LABEL_12: + std::__shared_ptr::__shared_ptr(&v15[a2 - Block], a3); + v6 = v15; + for ( i = Block; ; i += 8 ) + { + v6 += 2; + if ( a2 == i ) + break; + std::__shared_ptr::__shared_ptr(v6 - 2, i); + v8 = (volatile signed __int32 **)(i + 4); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v8); + } + while ( i != v12 ) + { + v9 = v6; + v6 += 2; + std::__shared_ptr::__shared_ptr(v9, i); + v10 = (volatile signed __int32 **)(i + 4); + i += 8; + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v10); + } + if ( Block ) + operator delete(Block); + this[1] = v6; + *this = v15; + result = &v15[8 * v5]; + this[2] = result; + return result; +} + +//----- (005060D8) -------------------------------------------------------- +char *__thiscall std::vector>::push_back(_DWORD *this, _DWORD *a2) +{ + char *v3; // ecx + char *result; // eax + + v3 = (char *)this[1]; + if ( v3 == (char *)this[2] ) + return std::vector>::_M_realloc_insert const&>( + this, + v3, + a2); + result = (char *)std::__shared_ptr::__shared_ptr(v3, a2); + this[1] += 8; + return result; +} + +//----- (00506114) -------------------------------------------------------- +void __thiscall std::vector>::vector(_DWORD *this, _DWORD *a2) +{ + size_t v3; // esi + _DWORD *v4; // ecx + _DWORD *v5; // esi + _DWORD *i; // edi + int v7; // ecx + _DWORD *v8; // [esp+0h] [ebp-28h] + + v3 = a2[1] - *a2; + *this = 0; + this[1] = 0; + this[2] = 0; + if ( v3 ) + { + if ( v3 > 0x7FFFFFF8 ) + std::__throw_bad_alloc(); + v4 = operator new(v3); + } + else + { + v4 = 0; + } + *this = v4; + this[1] = v4; + this[2] = (char *)v4 + v3; + v5 = (_DWORD *)a2[1]; + for ( i = (_DWORD *)*a2; i != v5; i += 2 ) + { + v8 = i; + std::__shared_ptr::__shared_ptr(v4, v8); + v4 = (_DWORD *)(v7 + 8); + } + this[1] = v4; +} +// 506176: variable 'v7' is possibly undefined + +//----- (0050618C) -------------------------------------------------------- +void __fastcall std::vector>::~vector(void **a1) +{ + char *v2; // edi + char *i; // esi + volatile signed __int32 **v4; // ecx + + v2 = (char *)a1[1]; + for ( i = (char *)*a1; v2 != i; i += 8 ) + { + v4 = (volatile signed __int32 **)(i + 4); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v4); + } + if ( *a1 ) + operator delete(*a1); +} + +//----- (005061C4) -------------------------------------------------------- +void __thiscall std::vector::_M_realloc_insert( + char **this, + char *a2, + _DWORD *a3) +{ + int v3; // eax + int v4; // edx + int v5; // eax + char *v6; // eax + void **v7; // [esp+1Ch] [ebp-5Ch] + char *Block; // [esp+28h] [ebp-50h] + void **v10; // [esp+2Ch] [ebp-4Ch] + void **v11; // [esp+30h] [ebp-48h] + unsigned int lpuexcpt; // [esp+34h] [ebp-44h] + void **i; // [esp+38h] [ebp-40h] + + v7 = (void **)this[1]; + Block = *this; + v3 = -1227133513 * (((char *)v7 - *this) >> 2); + if ( v3 == 76695844 ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = -1227133513 * (((char *)v7 - Block) >> 2); + lpuexcpt = v4 - 1227133513 * (((char *)v7 - Block) >> 2); + if ( __CFADD__(v4, v3) ) + { + lpuexcpt = 76695844; +LABEL_11: + v11 = (void **)operator new(28 * lpuexcpt); + goto LABEL_12; + } + v11 = 0; + if ( lpuexcpt ) + { + v5 = 76695844; + if ( lpuexcpt <= 0x4924924 ) + v5 = v4 - 1227133513 * (((char *)v7 - Block) >> 2); + lpuexcpt = v5; + goto LABEL_11; + } +LABEL_12: + v6 = (char *)v11 + a2 - Block + 4; + *((_DWORD *)v6 - 1) = *a3; + std::string::basic_string(v6, (int)(a3 + 1)); + v10 = v11; + for ( i = (void **)Block; ; i += 7 ) + { + v10 += 7; + if ( a2 == (char *)i ) + break; + *(v10 - 7) = *i; + std::string::basic_string(v10 - 6, i + 1); + std::string::_M_dispose(i + 1); + } + while ( v7 != i ) + { + *v10 = *i; + std::string::basic_string(v10 + 1, i + 1); + std::string::_M_dispose(i + 1); + i += 7; + v10 += 7; + } + if ( Block ) + operator delete(Block); + *this = (char *)v11; + this[1] = (char *)v10; + this[2] = (char *)&v11[7 * lpuexcpt]; +} + +//----- (005063D8) -------------------------------------------------------- +void __thiscall std::vector::push_back(char **this, _DWORD *a2) +{ + char *v3; // ecx + char *v4; // ecx + + v3 = this[1]; + if ( v3 == this[2] ) + { + std::vector::_M_realloc_insert(this, v3, a2); + } + else + { + v4 = v3 + 4; + *((_DWORD *)v4 - 1) = *a2; + std::string::basic_string(v4, (int)(a2 + 1)); + this[1] += 28; + } +} + +//----- (00506420) -------------------------------------------------------- +void __fastcall std::vector::~vector(void **a1) +{ + char *v2; // edi + char *i; // esi + void **v4; // ecx + + v2 = (char *)a1[1]; + for ( i = (char *)*a1; v2 != i; i += 28 ) + { + v4 = (void **)(i + 4); + std::string::_M_dispose(v4); + } + if ( *a1 ) + operator delete(*a1); +} + +//----- (00506458) -------------------------------------------------------- +void __thiscall std::vector::_M_realloc_insert( + void **this, + int a2, + WXML::DOMLib::Token *a3) +{ + int v3; // eax + int v4; // edx + int v5; // eax + int v6; // eax + const WXML::DOMLib::Token *v7; // [esp+4h] [ebp-64h] + int v8; // [esp+14h] [ebp-54h] + int v9; // [esp+18h] [ebp-50h] + void *Block; // [esp+20h] [ebp-48h] + unsigned int lpuexcpt; // [esp+24h] [ebp-44h] + char *v13; // [esp+28h] [ebp-40h] + + v8 = (int)this[1]; + Block = *this; + v3 = -1227133513 * ((v8 - (int)*this) >> 4); + if ( v3 == 19173961 ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = -1227133513 * ((v8 - (int)Block) >> 4); + lpuexcpt = v4 - 1227133513 * ((v8 - (int)Block) >> 4); + if ( __CFADD__(v4, v3) ) + { + lpuexcpt = 19173961; + } + else + { + v13 = 0; + if ( !lpuexcpt ) + goto LABEL_12; + v5 = 19173961; + if ( lpuexcpt <= 0x1249249 ) + v5 = v4 - 1227133513 * ((v8 - (int)Block) >> 4); + lpuexcpt = v5; + } + v13 = (char *)operator new(112 * lpuexcpt); +LABEL_12: + WXML::DOMLib::Token::Token((int)&v13[a2 - (_DWORD)Block], a3, v7); + v6 = std::__relocate_a_1>( + (int)Block, + a2, + (int)v13); + v9 = std::__relocate_a_1>( + a2, + v8, + v6 + 112); + if ( Block ) + operator delete(Block); + *this = v13; + this[1] = (void *)v9; + this[2] = &v13[112 * lpuexcpt]; +} +// 50653B: variable 'v7' is possibly undefined + +//----- (00506600) -------------------------------------------------------- +void __thiscall std::vector::push_back(int this, WXML::DOMLib::Token *a2) +{ + int v3; // ecx + const WXML::DOMLib::Token *v4; // [esp+4h] [ebp-14h] + + v3 = *(_DWORD *)(this + 4); + if ( v3 == *(_DWORD *)(this + 8) ) + { + std::vector::_M_realloc_insert((void **)this, v3, a2); + } + else + { + WXML::DOMLib::Token::Token(v3, a2, v4); + *(_DWORD *)(this + 4) += 112; + } +} +// 506617: variable 'v4' is possibly undefined + +//----- (0050663C) -------------------------------------------------------- +void __fastcall std::vector::~vector(void **a1) +{ + char *v2; // edi + char *i; // esi + int v4; // ecx + + v2 = (char *)a1[1]; + for ( i = (char *)*a1; v2 != i; i += 112 ) + { + v4 = (int)i; + WXML::DOMLib::Token::~Token(v4); + } + if ( *a1 ) + operator delete(*a1); +} + +//----- (00506674) -------------------------------------------------------- +void __thiscall std::vector::_M_realloc_insert( + struct _Unwind_Exception **this, + void **a2, + _DWORD *a3) +{ + int v3; // eax + int v4; // edx + int v5; // eax + struct _Unwind_Exception *v6; // [esp+10h] [ebp-58h] + struct _Unwind_Exception *Block; // [esp+18h] [ebp-50h] + unsigned int v9; // [esp+1Ch] [ebp-4Ch] + struct _Unwind_Exception *v10; // [esp+20h] [ebp-48h] + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-44h] + void **i; // [esp+28h] [ebp-40h] + + v6 = this[1]; + Block = *this; + v3 = -1431655765 * ((v6 - *this) >> 2); + if ( v3 == 178956970 ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = -1431655765 * ((v6 - Block) >> 2); + v9 = v4 - 1431655765 * ((v6 - Block) >> 2); + if ( __CFADD__(v4, v3) ) + { + v9 = 178956970; +LABEL_11: + v10 = (struct _Unwind_Exception *)operator new(12 * v9); + goto LABEL_12; + } + v10 = 0; + if ( v9 ) + { + v5 = 178956970; + if ( v9 <= 0xAAAAAAA ) + v5 = v4 - 1431655765 * ((v6 - Block) >> 2); + v9 = v5; + goto LABEL_11; + } +LABEL_12: + std::vector>::vector( + (struct _Unwind_Exception *)((char *)v10 + (char *)a2 - (char *)Block), + a3); + lpuexcpt = v10; + for ( i = (void **)Block; ; i += 3 ) + { + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 12); + if ( a2 == i ) + break; + *((_DWORD *)lpuexcpt - 3) = *i; + *((_DWORD *)lpuexcpt - 2) = i[1]; + *((_DWORD *)lpuexcpt - 1) = i[2]; + i[2] = 0; + i[1] = 0; + *i = 0; + std::vector>::~vector(i); + } + while ( v6 != (struct _Unwind_Exception *)i ) + { + *(_DWORD *)lpuexcpt = *i; + *((_DWORD *)lpuexcpt + 1) = i[1]; + *((_DWORD *)lpuexcpt + 2) = i[2]; + i[2] = 0; + i[1] = 0; + *i = 0; + std::vector>::~vector(i); + i += 3; + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt + 12); + } + if ( Block ) + operator delete(Block); + *this = v10; + this[1] = lpuexcpt; + this[2] = (struct _Unwind_Exception *)((char *)v10 + 12 * v9); +} + +//----- (00506898) -------------------------------------------------------- +void __thiscall std::vector::push_back(int this, _DWORD *a2) +{ + void **v3; // ecx + + v3 = *(void ***)(this + 4); + if ( v3 == *(void ***)(this + 8) ) + { + std::vector::_M_realloc_insert( + (struct _Unwind_Exception **)this, + v3, + a2); + } + else + { + std::vector>::vector(v3, a2); + *(_DWORD *)(this + 4) += 12; + } +} + +//----- (005068D4) -------------------------------------------------------- +void __fastcall std::vector::~vector(void ***a1) +{ + void **v2; // edi + void **i; // esi + void **v4; // ecx + + v2 = a1[1]; + for ( i = *a1; v2 != i; i += 3 ) + { + v4 = i; + std::vector>::~vector(v4); + } + if ( *a1 ) + operator delete(*a1); +} + +//----- (0050690C) -------------------------------------------------------- +_DWORD *__thiscall std::vector::_M_realloc_insert( + _DWORD *this, + char *a2, + WXML::EXPRLib::Token *a3) +{ + int v3; // eax + int v4; // ebx + bool v5; // cf + unsigned int v6; // ebx + char *v7; // esi + char *v8; // edi + int v9; // edx + volatile signed __int32 **v10; // ecx + int *v11; // ecx + int v12; // edx + volatile signed __int32 **v13; // ecx + _DWORD *result; // eax + const WXML::EXPRLib::Token *v15; // [esp+4h] [ebp-34h] + char *v16; // [esp+10h] [ebp-28h] + char *Block; // [esp+18h] [ebp-20h] + char *v19; // [esp+1Ch] [ebp-1Ch] + + v16 = (char *)this[1]; + Block = (char *)*this; + v3 = -1227133513 * ((int)&v16[-*this] >> 2); + if ( v3 == 76695844 ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = -1227133513 * ((int)&v16[-*this] >> 2); + v5 = __CFADD__(v3, v4); + v6 = v3 + v4; + if ( v5 ) + { + v6 = 76695844; +LABEL_11: + v19 = (char *)operator new(28 * v6); + goto LABEL_12; + } + v19 = 0; + if ( v6 ) + { + if ( v6 > 0x4924924 ) + v6 = 76695844; + goto LABEL_11; + } +LABEL_12: + WXML::EXPRLib::Token::Token((int *)&v19[a2 - Block], a3, v15); + v7 = v19; + v8 = Block; + while ( 1 ) + { + v7 += 28; + if ( a2 == v8 ) + break; + *((_DWORD *)v7 - 7) = *(_DWORD *)v8; + v9 = *((_DWORD *)v8 + 2); + *((_DWORD *)v7 - 6) = *((_DWORD *)v8 + 1); + *((_DWORD *)v7 - 5) = v9; + *((_DWORD *)v7 - 4) = *((_DWORD *)v8 + 3); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count((int *)v7 - 3, *((_DWORD *)v8 + 4)); + v10 = (volatile signed __int32 **)(v8 + 16); + v8 += 28; + *((_DWORD *)v7 - 2) = *((_DWORD *)v8 - 2); + *((_DWORD *)v7 - 1) = *((_DWORD *)v8 - 1); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v10); + } + while ( v8 != v16 ) + { + v11 = (int *)(v7 + 16); + v7 += 28; + *((_DWORD *)v7 - 7) = *(_DWORD *)v8; + v12 = *((_DWORD *)v8 + 2); + *((_DWORD *)v7 - 6) = *((_DWORD *)v8 + 1); + *((_DWORD *)v7 - 5) = v12; + *((_DWORD *)v7 - 4) = *((_DWORD *)v8 + 3); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count(v11, *((_DWORD *)v8 + 4)); + v13 = (volatile signed __int32 **)(v8 + 16); + v8 += 28; + *((_DWORD *)v7 - 2) = *((_DWORD *)v8 - 2); + *((_DWORD *)v7 - 1) = *((_DWORD *)v8 - 1); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v13); + } + if ( Block ) + operator delete(Block); + result = this; + *this = v19; + this[1] = v7; + this[2] = &v19[28 * v6]; + return result; +} +// 50699B: variable 'v15' is possibly undefined + +//----- (00506A64) -------------------------------------------------------- +void __fastcall std::vector::~vector(void **a1) +{ + char *v2; // edi + char *i; // esi + volatile signed __int32 **v4; // ecx + + v2 = (char *)a1[1]; + for ( i = (char *)*a1; v2 != i; i += 28 ) + { + v4 = (volatile signed __int32 **)(i + 16); + std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v4); + } + if ( *a1 ) + operator delete(*a1); +} + +//----- (00506A9C) -------------------------------------------------------- +void __thiscall std::vector::_M_realloc_insert( + night::ns_sourcemap **this, + night::ns_sourcemap *a2, + night::ns_sourcemap *a3) +{ + int v3; // eax + int v4; // edx + int v5; // eax + int v6; // eax + int v7; // edx + const night::ns_sourcemap *v8; // [esp+4h] [ebp-64h] + night::ns_sourcemap *v9; // [esp+14h] [ebp-54h] + int v11; // [esp+1Ch] [ebp-4Ch] + night::ns_sourcemap *Block; // [esp+20h] [ebp-48h] + unsigned int lpuexcpt; // [esp+24h] [ebp-44h] + night::ns_sourcemap *v14; // [esp+28h] [ebp-40h] + + v9 = this[1]; + Block = *this; + v3 = (v9 - *this) >> 6; + if ( v3 == 0x1FFFFFF ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = (v9 - Block) >> 6; + lpuexcpt = v4 + v3; + if ( __CFADD__(v4, v3) ) + { + lpuexcpt = 0x1FFFFFF; + } + else + { + v14 = 0; + if ( !lpuexcpt ) + goto LABEL_12; + v5 = 0x1FFFFFF; + if ( lpuexcpt <= 0x1FFFFFF ) + v5 = lpuexcpt; + lpuexcpt = v5; + } + v14 = (night::ns_sourcemap *)operator new(lpuexcpt << 6); +LABEL_12: + night::ns_sourcemap::ns_sourcemap((int)v14 + a2 - Block, a3, v8); + v6 = std::__uninitialized_copy::__uninit_copy( + Block, + a2, + (int)v14); + v11 = std::__uninitialized_copy::__uninit_copy( + a2, + v9, + v6 + 64); + std::_Destroy_aux::__destroy(v7, (void **)Block, (void **)v9); + if ( Block ) + operator delete(Block); + *this = v14; + this[1] = (night::ns_sourcemap *)v11; + this[2] = (night::ns_sourcemap *)((char *)v14 + 64 * lpuexcpt); +} +// 506B7B: variable 'v8' is possibly undefined +// 506BD4: variable 'v7' is possibly undefined + +//----- (00506CB0) -------------------------------------------------------- +int __thiscall std::vector::at(int *this, unsigned int a2) +{ + int v3; // ecx + unsigned int v4; // eax + + v3 = *this; + v4 = (this[1] - v3) >> 6; + if ( a2 >= v4 ) + std::__throw_out_of_range_fmt("vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", a2, v4); + return v3 + (a2 << 6); +} + +//----- (00506CE8) -------------------------------------------------------- +void __thiscall std::vector::push_back(night::ns_sourcemap **this, night::ns_sourcemap *a2) +{ + night::ns_sourcemap *v3; // ecx + const night::ns_sourcemap *v4; // [esp+4h] [ebp-14h] + + v3 = this[1]; + if ( v3 == this[2] ) + { + std::vector::_M_realloc_insert(this, v3, a2); + } + else + { + night::ns_sourcemap::ns_sourcemap((int)v3, a2, v4); + this[1] = (night::ns_sourcemap *)((char *)this[1] + 64); + } +} +// 506CFF: variable 'v4' is possibly undefined + +//----- (00506D24) -------------------------------------------------------- +void __fastcall std::vector::~vector(void ***a1, int a2) +{ + std::_Destroy_aux::__destroy(a2, *a1, a1[1]); + if ( *a1 ) + operator delete(*a1); +} + +//----- (00506D54) -------------------------------------------------------- +_DWORD *__thiscall std::vector::emplace_back(void **this, _DWORD *a2) +{ + char *v3; // eax + _DWORD *result; // eax + int v5; // esi + _DWORD *v6; // ecx + void **i; // edi + _DWORD *v8; // esi + void **v9; // ecx + _DWORD *v10; // ecx + void **v11; // ecx + void **v12; // [esp+1Ch] [ebp-2Ch] + unsigned int v13; // [esp+20h] [ebp-28h] + _DWORD *v14; // [esp+24h] [ebp-24h] + void **Block; // [esp+28h] [ebp-20h] + char *v16; // [esp+2Ch] [ebp-1Ch] + + v3 = (char *)this[1]; + v16 = v3; + if ( v3 == this[2] ) + { + v13 = std::vector::_M_check_len(this, 1u, (std::length_error *)"vector::_M_realloc_insert"); + Block = (void **)*this; + v5 = v16 - (_BYTE *)*this; + v12 = (void **)this[1]; + v14 = std::_Vector_base::_M_allocate(v13); + std::string::basic_string((_DWORD *)((char *)v14 + v5), a2); + v6 = v14; + for ( i = Block; ; i += 6 ) + { + v8 = v6 + 6; + if ( v16 == (char *)i ) + break; + std::string::basic_string(v6, i); + v9 = i; + std::string::_M_dispose(v9); + v6 = v8; + } + while ( v12 != i ) + { + v10 = v8; + v8 += 6; + std::string::basic_string(v10, i); + v11 = i; + i += 6; + std::string::_M_dispose(v11); + } + if ( Block ) + operator delete(Block); + this[1] = v8; + *this = v14; + result = &v14[6 * v13]; + this[2] = result; + } + else + { + result = std::string::basic_string(v3, a2); + this[1] = (char *)this[1] + 24; + } + return result; +} + +//----- (00506E34) -------------------------------------------------------- +void __thiscall std::vector::_M_realloc_insert(void **this, char *a2, int a3) +{ + char *v3; // ecx + void **v4; // [esp+10h] [ebp-58h] + unsigned int v5; // [esp+14h] [ebp-54h] + char *v6; // [esp+18h] [ebp-50h] + void **Block; // [esp+1Ch] [ebp-4Ch] + int v9; // [esp+24h] [ebp-44h] + void **i; // [esp+24h] [ebp-44h] + char *v11; // [esp+28h] [ebp-40h] + + v5 = std::vector::_M_check_len(this, 1u, (std::length_error *)"vector::_M_realloc_insert"); + Block = (void **)*this; + v4 = (void **)this[1]; + v9 = a2 - (_BYTE *)*this; + v11 = (char *)std::_Vector_base::_M_allocate(v5); + std::string::basic_string(&v11[v9], a3); + v3 = v11; + for ( i = Block; ; i += 6 ) + { + v6 = v3 + 24; + if ( a2 == (char *)i ) + break; + std::string::basic_string(v3, i); + std::string::_M_dispose(i); + v3 = v6; + } + while ( v4 != i ) + { + std::string::basic_string(v6, i); + std::string::_M_dispose(i); + i += 6; + v6 += 24; + } + if ( Block ) + operator delete(Block); + *this = v11; + this[1] = v6; + this[2] = &v11[24 * v5]; +} + +//----- (00506FD0) -------------------------------------------------------- +int __thiscall std::vector::_M_realloc_insert(void **this, char *a2, _DWORD *a3) +{ + int v4; // edi + _DWORD *v5; // ebx + void **v6; // edi + _DWORD *i; // ecx + void **v8; // ecx + void **v9; // ecx + int result; // eax + void **v11; // [esp+10h] [ebp-28h] + _DWORD *v12; // [esp+14h] [ebp-24h] + void **Block; // [esp+18h] [ebp-20h] + unsigned int v14; // [esp+1Ch] [ebp-1Ch] + + v14 = std::vector::_M_check_len(this, 1u, (std::length_error *)"vector::_M_realloc_insert"); + Block = (void **)*this; + v4 = a2 - (_BYTE *)*this; + v11 = (void **)this[1]; + if ( v14 ) + { + if ( v14 > 0x5555555 ) + std::__throw_bad_alloc(); + v5 = operator new(24 * v14); + } + else + { + v5 = 0; + } + std::string::basic_string((_DWORD *)((char *)v5 + v4), a3); + v6 = Block; + for ( i = v5; ; i = v12 ) + { + v12 = i + 6; + if ( a2 == (char *)v6 ) + break; + std::string::basic_string(i, v6); + v8 = v6; + v6 += 6; + std::string::_M_dispose(v8); + } + while ( v11 != v6 ) + { + std::string::basic_string(v12, v6); + v9 = v6; + v6 += 6; + std::string::_M_dispose(v9); + v12 += 6; + } + if ( Block ) + operator delete(Block); + *this = v5; + this[1] = v12; + result = 24 * v14; + this[2] = &v5[6 * v14]; + return result; +} + +//----- (005070B0) -------------------------------------------------------- +void __thiscall std::vector::push_back(int this, int a2) +{ + char *v3; // ecx + + v3 = *(char **)(this + 4); + if ( v3 == *(char **)(this + 8) ) + { + std::vector::_M_realloc_insert((void **)this, v3, a2); + } + else + { + std::string::basic_string(v3, a2); + *(_DWORD *)(this + 4) += 24; + } +} + +//----- (005070EC) -------------------------------------------------------- +void __fastcall std::vector::~vector(void ***a1, int a2) +{ + std::_Destroy_aux::__destroy(a2, *a1, a1[1]); + if ( *a1 ) + operator delete(*a1); +} + +//----- (0050711C) -------------------------------------------------------- +char *__thiscall std::vector::_M_realloc_insert( + void **this, + _BYTE *a2, + _DWORD *a3) +{ + int v3; // eax + int v4; // edx + bool v5; // cf + unsigned int v6; // eax + signed int v7; // edi + char *v8; // ebx + bool v9; // cc + int v10; // eax + char *v11; // edx + unsigned int v12; // eax + char *v13; // esi + char *result; // eax + _BYTE *v15; // [esp+10h] [ebp-28h] + _BYTE *Src; // [esp+18h] [ebp-20h] + int v18; // [esp+1Ch] [ebp-1Ch] + + v15 = this[1]; + Src = *this; + v3 = (v15 - (_BYTE *)*this) >> 2; + if ( v3 == 0x1FFFFFFF ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = (v15 - (_BYTE *)*this) >> 2; + v5 = __CFADD__(v4, v3); + v6 = v4 + v3; + v18 = v6; + v7 = a2 - Src; + if ( v5 ) + { + v18 = 0x1FFFFFFF; + } + else + { + v8 = 0; + if ( !v6 ) + goto LABEL_12; + v9 = v6 <= 0x1FFFFFFF; + v10 = 0x1FFFFFFF; + if ( v9 ) + v10 = v18; + v18 = v10; + } + v8 = (char *)operator new(4 * v18); +LABEL_12: + *(_DWORD *)&v8[v7] = *a3; + if ( v7 > 0 ) + memmove(v8, Src, v7); + v11 = &v8[v7 + 4]; + v12 = v15 - a2; + if ( v15 - a2 > 0 ) + qmemcpy(v11, a2, v12); + v13 = &v11[v12]; + if ( Src ) + operator delete(Src); + *this = v8; + this[1] = v13; + result = &v8[4 * v18]; + this[2] = result; + return result; +} + +//----- (00507204) -------------------------------------------------------- +char *__thiscall std::vector::push_back(int this, _DWORD *a2) +{ + int v2; // eax + char *result; // eax + + v2 = *(_DWORD *)(this + 4); + if ( v2 == *(_DWORD *)(this + 8) ) + return std::vector::_M_realloc_insert( + (void **)this, + *(_BYTE **)(this + 4), + a2); + result = (char *)(v2 + 4); + *((_DWORD *)result - 1) = *a2; + *(_DWORD *)(this + 4) = result; + return result; +} + +//----- (00507234) -------------------------------------------------------- +char *__thiscall std::vector::emplace_back(void **this, char **a2) +{ + char *v3; // edx + _DWORD *v4; // edx + char *result; // eax + void *v6; // edx + signed int v7; // edi + char *v8; // eax + char *v9; // esi + char *v10; // ecx + int v11; // edi + char *v12; // edi + size_t v13; // [esp+8h] [ebp-30h] + void *v14; // [esp+10h] [ebp-28h] + void *v15; // [esp+10h] [ebp-28h] + _BYTE *v16; // [esp+14h] [ebp-24h] + char *v17; // [esp+14h] [ebp-24h] + void *Src; // [esp+18h] [ebp-20h] + unsigned int v19; // [esp+1Ch] [ebp-1Ch] + + v3 = (char *)this[1]; + if ( v3 == this[2] ) + { + v14 = this[1]; + v19 = std::vector::_M_check_len(this, 1u, (std::length_error *)"vector::_M_realloc_insert"); + v6 = v14; + Src = *this; + v7 = (_BYTE *)v14 - (_BYTE *)*this; + v16 = this[1]; + if ( v19 ) + { + if ( v19 > 0x1FFFFFFF ) + std::__throw_bad_alloc(); + v8 = (char *)operator new(4 * v19); + v6 = v14; + v9 = v8; + } + else + { + v9 = 0; + } + *(_DWORD *)&v9[v7] = *a2; + if ( v7 > 0 ) + { + v15 = v6; + memmove(v9, Src, v7); + v6 = v15; + } + v10 = &v9[v7 + 4]; + v11 = v16 - (_BYTE *)v6; + if ( v16 - (_BYTE *)v6 > 0 ) + { + v13 = v16 - (_BYTE *)v6; + v17 = v10; + memmove(v10, v6, v13); + v10 = v17; + } + v12 = &v10[v11]; + if ( Src ) + operator delete(Src); + *this = v9; + this[1] = v12; + result = &v9[4 * v19]; + this[2] = result; + } + else + { + v4 = v3 + 4; + result = *a2; + *(v4 - 1) = *a2; + this[1] = v4; + } + return result; +} + +//----- (0050732C) -------------------------------------------------------- +int __thiscall std::vector::at(_DWORD *this, unsigned int a2) +{ + if ( a2 >= (this[1] - *this) >> 2 ) + std::__throw_out_of_range_fmt( + "vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", + a2, + (this[1] - *this) >> 2); + return *this + 4 * a2; +} + +//----- (00507364) -------------------------------------------------------- +char *__thiscall std::vector::push_back(void **this, char **a2) +{ + char *v3; // edx + _DWORD *v4; // edx + char *result; // eax + void *v6; // edx + signed int v7; // edi + char *v8; // eax + char *v9; // esi + char *v10; // ecx + int v11; // edi + char *v12; // edi + size_t v13; // [esp+8h] [ebp-30h] + void *v14; // [esp+10h] [ebp-28h] + void *v15; // [esp+10h] [ebp-28h] + _BYTE *v16; // [esp+14h] [ebp-24h] + char *v17; // [esp+14h] [ebp-24h] + void *Src; // [esp+18h] [ebp-20h] + unsigned int v19; // [esp+1Ch] [ebp-1Ch] + + v3 = (char *)this[1]; + if ( v3 == this[2] ) + { + v14 = this[1]; + v19 = std::vector::_M_check_len(this, 1u, (std::length_error *)"vector::_M_realloc_insert"); + v6 = v14; + Src = *this; + v7 = (_BYTE *)v14 - (_BYTE *)*this; + v16 = this[1]; + if ( v19 ) + { + if ( v19 > 0x1FFFFFFF ) + std::__throw_bad_alloc(); + v8 = (char *)operator new(4 * v19); + v6 = v14; + v9 = v8; + } + else + { + v9 = 0; + } + *(_DWORD *)&v9[v7] = *a2; + if ( v7 > 0 ) + { + v15 = v6; + memmove(v9, Src, v7); + v6 = v15; + } + v10 = &v9[v7 + 4]; + v11 = v16 - (_BYTE *)v6; + if ( v16 - (_BYTE *)v6 > 0 ) + { + v13 = v16 - (_BYTE *)v6; + v17 = v10; + memmove(v10, v6, v13); + v10 = v17; + } + v12 = &v10[v11]; + if ( Src ) + operator delete(Src); + *this = v9; + this[1] = v12; + result = &v9[4 * v19]; + this[2] = result; + } + else + { + v4 = v3 + 4; + result = *a2; + *(v4 - 1) = *a2; + this[1] = v4; + } + return result; +} + +//----- (0050745C) -------------------------------------------------------- +char *__thiscall std::vector>>::_M_realloc_insert> const&>( + void **this, + _BYTE *a2, + _DWORD *a3) +{ + int v3; // eax + int v4; // edx + bool v5; // cf + unsigned int v6; // eax + signed int v7; // edi + char *v8; // ebx + bool v9; // cc + int v10; // eax + char *v11; // edx + unsigned int v12; // eax + char *v13; // esi + char *result; // eax + _BYTE *v15; // [esp+10h] [ebp-28h] + _BYTE *Src; // [esp+18h] [ebp-20h] + int v18; // [esp+1Ch] [ebp-1Ch] + + v15 = this[1]; + Src = *this; + v3 = (v15 - (_BYTE *)*this) >> 2; + if ( v3 == 0x1FFFFFFF ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = (v15 - (_BYTE *)*this) >> 2; + v5 = __CFADD__(v4, v3); + v6 = v4 + v3; + v18 = v6; + v7 = a2 - Src; + if ( v5 ) + { + v18 = 0x1FFFFFFF; + } + else + { + v8 = 0; + if ( !v6 ) + goto LABEL_12; + v9 = v6 <= 0x1FFFFFFF; + v10 = 0x1FFFFFFF; + if ( v9 ) + v10 = v18; + v18 = v10; + } + v8 = (char *)operator new(4 * v18); +LABEL_12: + *(_DWORD *)&v8[v7] = *a3; + if ( v7 > 0 ) + memmove(v8, Src, v7); + v11 = &v8[v7 + 4]; + v12 = v15 - a2; + if ( v15 - a2 > 0 ) + qmemcpy(v11, a2, v12); + v13 = &v11[v12]; + if ( Src ) + operator delete(Src); + *this = v8; + this[1] = v13; + result = &v8[4 * v18]; + this[2] = result; + return result; +} + +//----- (00507544) -------------------------------------------------------- +int __thiscall std::vector>>::at( + _DWORD *this, + unsigned int a2) +{ + if ( a2 >= (this[1] - *this) >> 2 ) + std::__throw_out_of_range_fmt( + "vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)", + a2, + (this[1] - *this) >> 2); + return *this + 4 * a2; +} + +//----- (0050757C) -------------------------------------------------------- +char *__thiscall std::vector>>::push_back( + int this, + _DWORD *a2) +{ + int v2; // eax + char *result; // eax + + v2 = *(_DWORD *)(this + 4); + if ( v2 == *(_DWORD *)(this + 8) ) + return std::vector>>::_M_realloc_insert> const&>( + (void **)this, + *(_BYTE **)(this + 4), + a2); + result = (char *)(v2 + 4); + *((_DWORD *)result - 1) = *a2; + *(_DWORD *)(this + 4) = result; + return result; +} + +//----- (005075AC) -------------------------------------------------------- +char **__thiscall std::vector>::_M_realloc_insert>( + char **this, + char *a2, + _DWORD *a3) +{ + int v3; // ebx + int v4; // eax + bool v5; // cf + unsigned int v6; // ebx + char *v7; // esi + int v8; // edx + _DWORD *v9; // edi + void **v10; // esi + void **v11; // ecx + int v12; // edx + _DWORD *v13; // ecx + void **v14; // ecx + int v15; // edx + char **result; // eax + void **v17; // [esp+10h] [ebp-28h] + char *Block; // [esp+18h] [ebp-20h] + char *v20; // [esp+1Ch] [ebp-1Ch] + + v17 = (void **)this[1]; + Block = *this; + v3 = ((char *)v17 - *this) >> 5; + if ( v3 == 0x3FFFFFF ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = ((char *)v17 - *this) >> 5; + v5 = __CFADD__(v4, v3); + v6 = v4 + v3; + if ( v5 ) + { + v6 = 0x3FFFFFF; +LABEL_11: + v20 = (char *)operator new(32 * v6); + goto LABEL_12; + } + v20 = 0; + if ( v6 ) + { + if ( v6 > 0x3FFFFFF ) + v6 = 0x3FFFFFF; + goto LABEL_11; + } +LABEL_12: + v7 = &v20[a2 - Block]; + std::string::basic_string(v7, a3); + v8 = a3[7]; + v9 = v20; + *((_DWORD *)v7 + 6) = a3[6]; + *((_DWORD *)v7 + 7) = v8; + v10 = (void **)Block; + while ( 1 ) + { + v9 += 8; + if ( a2 == (char *)v10 ) + break; + std::string::basic_string(v9 - 8, v10); + v11 = v10; + v10 += 8; + v12 = (int)*(v10 - 1); + *(v9 - 2) = *(v10 - 2); + *(v9 - 1) = v12; + std::string::_M_dispose(v11); + } + while ( v10 != v17 ) + { + v13 = v9; + v9 += 8; + std::string::basic_string(v13, v10); + v14 = v10; + v10 += 8; + v15 = (int)*(v10 - 1); + *(v9 - 2) = *(v10 - 2); + *(v9 - 1) = v15; + std::string::_M_dispose(v14); + } + if ( Block ) + operator delete(Block); + result = this; + *this = v20; + this[1] = (char *)v9; + this[2] = &v20[32 * v6]; + return result; +} + +//----- (005076D4) -------------------------------------------------------- +void __fastcall std::vector>::~vector(void ***a1) +{ + void **v2; // edi + void **i; // esi + void **v4; // ecx + + v2 = a1[1]; + for ( i = *a1; v2 != i; i += 8 ) + { + v4 = i; + std::string::_M_dispose(v4); + } + if ( *a1 ) + operator delete(*a1); +} + +//----- (0050770C) -------------------------------------------------------- +_DWORD *__thiscall std::vector>::emplace_back>( + _DWORD *this, + _DWORD *a2) +{ + char *v3; // ecx + _DWORD *result; // eax + + v3 = (char *)this[1]; + if ( v3 == (char *)this[2] ) + return std::vector>::_M_realloc_insert>( + this, + v3, + a2); + result = std::pair::pair(v3, a2); + this[1] += 136; + return result; +} + +//----- (0050774C) -------------------------------------------------------- +_DWORD *__thiscall std::vector>::_M_realloc_insert>( + _DWORD *this, + char *a2, + _DWORD *a3) +{ + int v3; // eax + int v4; // ebx + bool v6; // cf + unsigned int v7; // ebx + void **v8; // edi + _DWORD *i; // ecx + void **v10; // ecx + void **v11; // ecx + _DWORD *result; // eax + char *v13; // [esp+10h] [ebp-28h] + _DWORD *v14; // [esp+14h] [ebp-24h] + char *Block; // [esp+18h] [ebp-20h] + _DWORD *v16; // [esp+1Ch] [ebp-1Ch] + + v13 = (char *)this[1]; + Block = (char *)*this; + v3 = -252645135 * ((int)&v13[-*this] >> 3); + if ( v3 == 15790320 ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = -252645135 * ((v13 - Block) >> 3); + v6 = __CFADD__(v3, v4); + v7 = v3 + v4; + if ( v6 ) + { + v7 = 15790320; +LABEL_11: + v16 = operator new(136 * v7); + goto LABEL_12; + } + v16 = 0; + if ( v7 ) + { + if ( v7 > 0xF0F0F0 ) + v7 = 15790320; + goto LABEL_11; + } +LABEL_12: + std::pair::pair((_DWORD *)((char *)v16 + a2 - Block), a3); + v8 = (void **)Block; + for ( i = v16; ; i = v14 ) + { + v14 = i + 34; + if ( a2 == (char *)v8 ) + break; + std::pair::pair(i, v8); + v10 = v8; + v8 += 34; + std::pair::~pair(v10); + } + while ( v8 != (void **)v13 ) + { + std::pair::pair(v14, v8); + v11 = v8; + v8 += 34; + std::pair::~pair(v11); + v14 += 34; + } + if ( Block ) + operator delete(Block); + this[2] = &v16[34 * v7]; + *this = v16; + result = v14; + this[1] = v14; + return result; +} + +//----- (0050786C) -------------------------------------------------------- +void __fastcall std::vector>::~vector(void ***a1) +{ + void **v2; // edi + void **i; // esi + void **v4; // ecx + + v2 = a1[1]; + for ( i = *a1; v2 != i; i += 34 ) + { + v4 = i; + std::pair::~pair(v4); + } + if ( *a1 ) + operator delete(*a1); +} + +//----- (005078A8) -------------------------------------------------------- +char **__thiscall std::vector>::emplace_back>( + int this, + _DWORD *a2) +{ + int v3; // esi + char **result; // eax + + v3 = *(_DWORD *)(this + 4); + if ( v3 == *(_DWORD *)(this + 8) ) + return std::vector>::_M_realloc_insert>( + (char **)this, + (char *)v3, + a2); + std::string::basic_string((_DWORD *)v3, a2); + result = (char **)a2[6]; + *(_DWORD *)(v3 + 24) = result; + *(_DWORD *)(this + 4) += 28; + return result; +} + +//----- (005078F0) -------------------------------------------------------- +char **__thiscall std::vector>::_M_realloc_insert>( + char **this, + char *a2, + _DWORD *a3) +{ + int v3; // ebx + int v4; // eax + bool v5; // cf + unsigned int v6; // ebx + char *v7; // esi + _DWORD *v8; // edi + void **v9; // esi + void **v10; // ecx + _DWORD *v11; // ecx + void **v12; // ecx + char **result; // eax + void **v14; // [esp+10h] [ebp-28h] + char *Block; // [esp+18h] [ebp-20h] + char *v17; // [esp+1Ch] [ebp-1Ch] + + v14 = (void **)this[1]; + Block = *this; + v3 = -1227133513 * (((char *)v14 - *this) >> 2); + if ( v3 == 76695844 ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = -1227133513 * (((char *)v14 - *this) >> 2); + v5 = __CFADD__(v4, v3); + v6 = v4 - 1227133513 * (((char *)v14 - *this) >> 2); + if ( v5 ) + { + v6 = 76695844; +LABEL_11: + v17 = (char *)operator new(28 * v6); + goto LABEL_12; + } + v17 = 0; + if ( v6 ) + { + if ( v6 > 0x4924924 ) + v6 = 76695844; + goto LABEL_11; + } +LABEL_12: + v7 = &v17[a2 - Block]; + std::string::basic_string(v7, a3); + v8 = v17; + *((_DWORD *)v7 + 6) = a3[6]; + v9 = (void **)Block; + while ( 1 ) + { + v8 += 7; + if ( a2 == (char *)v9 ) + break; + std::string::basic_string(v8 - 7, v9); + v10 = v9; + v9 += 7; + *(v8 - 1) = *(v9 - 1); + std::string::_M_dispose(v10); + } + while ( v9 != v14 ) + { + v11 = v8; + v8 += 7; + std::string::basic_string(v11, v9); + v12 = v9; + v9 += 7; + *(v8 - 1) = *(v9 - 1); + std::string::_M_dispose(v12); + } + if ( Block ) + operator delete(Block); + result = this; + *this = v17; + this[1] = (char *)v8; + this[2] = &v17[28 * v6]; + return result; +} + +//----- (00507A0C) -------------------------------------------------------- +void __fastcall std::vector>::~vector(void ***a1) +{ + void **v2; // edi + void **i; // esi + void **v4; // ecx + + v2 = a1[1]; + for ( i = *a1; v2 != i; i += 7 ) + { + v4 = i; + std::string::_M_dispose(v4); + } + if ( *a1 ) + operator delete(*a1); +} + +//----- (00507A44) -------------------------------------------------------- +char *__thiscall std::vector>::_M_realloc_insert>( + _DWORD *this, + char *a2, + _DWORD *a3) +{ + int v3; // ebx + int v4; // eax + bool v6; // cf + unsigned int v7; // ebx + char *v8; // eax + char *v9; // esi + char *result; // eax + void **v11; // edx + void **v12; // edx + char *v13; // [esp+1Ch] [ebp-2Ch] + char *v14; // [esp+1Ch] [ebp-2Ch] + int v15; // [esp+20h] [ebp-28h] + void **v16; // [esp+20h] [ebp-28h] + void **v17; // [esp+20h] [ebp-28h] + char *v18; // [esp+24h] [ebp-24h] + char *v19; // [esp+24h] [ebp-24h] + char *Block; // [esp+28h] [ebp-20h] + char *v21; // [esp+2Ch] [ebp-1Ch] + + v18 = (char *)this[1]; + Block = (char *)*this; + v3 = -1227133513 * ((int)&v18[-*this] >> 2); + if ( v3 == 76695844 ) + std::__throw_length_error((std::length_error *)"vector::_M_realloc_insert"); + v4 = 1; + if ( v3 ) + v4 = -1227133513 * ((int)&v18[-*this] >> 2); + v6 = __CFADD__(v4, v3); + v7 = v4 - 1227133513 * ((int)&v18[-*this] >> 2); + v15 = a2 - Block; + if ( v6 ) + { + v7 = 76695844; +LABEL_11: + v21 = (char *)operator new(28 * v7); + goto LABEL_12; + } + v21 = 0; + if ( v7 ) + { + if ( v7 > 0x4924924 ) + v7 = 76695844; + goto LABEL_11; + } +LABEL_12: + *(_DWORD *)&v21[v15] = *a3; + std::string::basic_string(&v21[v15 + 4], a3 + 1); + v8 = v21; + v9 = Block; + while ( 1 ) + { + result = v8 + 28; + if ( a2 == v9 ) + break; + v13 = result; + *((_DWORD *)result - 7) = *(_DWORD *)v9; + v11 = (void **)(v9 + 4); + v9 += 28; + v16 = v11; + std::string::basic_string((_DWORD *)result - 6, v11); + std::string::_M_dispose(v16); + v8 = v13; + } + while ( v9 != v18 ) + { + v14 = result; + *(_DWORD *)result = *(_DWORD *)v9; + v12 = (void **)(v9 + 4); + v9 += 28; + v17 = v12; + std::string::basic_string((_DWORD *)result + 1, v12); + std::string::_M_dispose(v17); + result = v14 + 28; + } + if ( Block ) + { + v19 = result; + operator delete(Block); + result = v19; + } + this[1] = result; + *this = v21; + this[2] = &v21[28 * v7]; + return result; +} + +//----- (00507B84) -------------------------------------------------------- +void __fastcall std::vector>::~vector(void **a1) +{ + char *v2; // edi + char *i; // esi + void **v4; // ecx + + v2 = (char *)a1[1]; + for ( i = (char *)*a1; v2 != i; i += 28 ) + { + v4 = (void **)(i + 4); + std::string::_M_dispose(v4); + } + if ( *a1 ) + operator delete(*a1); +} + +//----- (00507BC0) -------------------------------------------------------- +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3) +{ + _DWORD *v4; // eax + char *v5; // esi + _DWORD *v6; // eax + int result; // eax + + v4 = (_DWORD *)this[2]; + if ( !v4 ) + { + v4 = operator new(0x44u); + *v4 = &off_5606D4; + v4[1] = 0; + v4[2] = 0; + v4[3] = 0; + *((_WORD *)v4 + 8) = 0; + *((_BYTE *)v4 + 18) = 0; + v4[5] = 0; + v4[6] = 0; + v4[7] = 0; + v4[8] = 0; + v4[9] = 0; + v4[10] = 0; + v4[11] = 0; + v4[12] = 0; + v4[13] = 0; + *((_BYTE *)v4 + 67) = 0; + this[2] = v4; + } + *((_BYTE *)v4 + 17) = 46; + v5 = std::money_base::_S_atoms; + *(_BYTE *)(this[2] + 18) = 44; + v6 = (_DWORD *)this[2]; + v6[2] = &unk_556C08; + v6[3] = 0; + v6[5] = &unk_556C08; + v6[6] = 0; + v6[7] = &unk_556C08; + v6[8] = 0; + v6[9] = &unk_556C08; + v6[10] = 0; + v6[11] = 0; + v6[12] = std::money_base::_S_default_pattern; + *(_DWORD *)(this[2] + 52) = std::money_base::_S_default_pattern; + for ( result = 0; result != 11; ++result ) + *(_BYTE *)(this[2] + result + 56) = v5[result]; + return result; +} +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 55AF40: using guessed type int std::money_base::_S_default_pattern; +// 5606D4: using guessed type int (*off_5606D4)(); + +//----- (00507CE0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55F820; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00507D80) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55F820; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00507E20) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55F820; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00507EC0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55F820; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00507F60) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55F820; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508000) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55F820; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (005080A0) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + int v1; // ecx + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v1 = a1[2]; + *a1 = &off_55F820; + if ( v1 ) + (*(void (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 508100: variable 'lpfctx' is possibly undefined +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508170) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + int v1; // ecx + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v1 = a1[2]; + *a1 = &off_55F820; + if ( v1 ) + (*(void (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 5081D0: variable 'lpfctx' is possibly undefined +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508220) -------------------------------------------------------- +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3) +{ + _DWORD *v4; // eax + char *v5; // esi + _DWORD *v6; // eax + int result; // eax + + v4 = (_DWORD *)this[2]; + if ( !v4 ) + { + v4 = operator new(0x44u); + *v4 = &off_5606E4; + v4[1] = 0; + v4[2] = 0; + v4[3] = 0; + *((_WORD *)v4 + 8) = 0; + *((_BYTE *)v4 + 18) = 0; + v4[5] = 0; + v4[6] = 0; + v4[7] = 0; + v4[8] = 0; + v4[9] = 0; + v4[10] = 0; + v4[11] = 0; + v4[12] = 0; + v4[13] = 0; + *((_BYTE *)v4 + 67) = 0; + this[2] = v4; + } + *((_BYTE *)v4 + 17) = 46; + v5 = std::money_base::_S_atoms; + *(_BYTE *)(this[2] + 18) = 44; + v6 = (_DWORD *)this[2]; + v6[2] = &unk_556C08; + v6[3] = 0; + v6[5] = &unk_556C08; + v6[6] = 0; + v6[7] = &unk_556C08; + v6[8] = 0; + v6[9] = &unk_556C08; + v6[10] = 0; + v6[11] = 0; + v6[12] = std::money_base::_S_default_pattern; + *(_DWORD *)(this[2] + 52) = std::money_base::_S_default_pattern; + for ( result = 0; result != 11; ++result ) + *(_BYTE *)(this[2] + result + 56) = v5[result]; + return result; +} +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 55AF40: using guessed type int std::money_base::_S_default_pattern; +// 5606E4: using guessed type int (*off_5606E4)(); + +//----- (00508340) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55F854; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (005083E0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55F854; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508480) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55F854; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508520) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55F854; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (005085C0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55F854; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508660) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55F854; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508700) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + int v1; // ecx + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v1 = a1[2]; + *a1 = &off_55F854; + if ( v1 ) + (*(void (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 508760: variable 'lpfctx' is possibly undefined +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (005087D0) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + int v1; // ecx + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v1 = a1[2]; + *a1 = &off_55F854; + if ( v1 ) + (*(void (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 508830: variable 'lpfctx' is possibly undefined +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508880) -------------------------------------------------------- +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3) +{ + _DWORD *v4; // eax + char *v5; // ebx + int v6; // ecx + int result; // eax + + v4 = (_DWORD *)this[2]; + if ( !v4 ) + { + v4 = operator new(0x54u); + v4[1] = 0; + *v4 = &off_5606F4; + v4[2] = 0; + v4[3] = 0; + *((_BYTE *)v4 + 16) = 0; + *(_DWORD *)((char *)v4 + 18) = 0; + v4[6] = 0; + v4[7] = 0; + v4[8] = 0; + v4[9] = 0; + v4[10] = 0; + v4[11] = 0; + v4[12] = 0; + v4[13] = 0; + v4[14] = 0; + *((_BYTE *)v4 + 82) = 0; + this[2] = v4; + } + *(_DWORD *)((char *)v4 + 18) = 2883630; + v4[2] = &unk_556C08; + v5 = std::money_base::_S_atoms; + v4[13] = std::money_base::_S_default_pattern; + v4[3] = 0; + v4[6] = &unk_556C0A; + v4[7] = 0; + v4[8] = &unk_556C0A; + v4[9] = 0; + v4[10] = &unk_556C0A; + v4[11] = 0; + v4[12] = 0; + *(_DWORD *)(this[2] + 56) = std::money_base::_S_default_pattern; + v6 = this[2]; + for ( result = 0; result != 11; ++result ) + *(_WORD *)(v6 + 2 * result + 60) = v5[result]; + return result; +} +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 55AF40: using guessed type int std::money_base::_S_default_pattern; +// 5606F4: using guessed type int (*off_5606F4)(); + +//----- (005089A0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55F888; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508A40) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55F888; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508AE0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55F888; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508B80) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55F888; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508C20) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55F888; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508CC0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55F888; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508D60) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + int v1; // ecx + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v1 = a1[2]; + *a1 = &off_55F888; + if ( v1 ) + (*(void (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 508DC0: variable 'lpfctx' is possibly undefined +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508E30) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + int v1; // ecx + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v1 = a1[2]; + *a1 = &off_55F888; + if ( v1 ) + (*(void (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 508E90: variable 'lpfctx' is possibly undefined +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00508EE0) -------------------------------------------------------- +int __thiscall std::moneypunct::_M_initialize_moneypunct(_DWORD *this, int a2, int a3) +{ + _DWORD *v4; // eax + char *v5; // ebx + int v6; // ecx + int result; // eax + + v4 = (_DWORD *)this[2]; + if ( !v4 ) + { + v4 = operator new(0x54u); + v4[1] = 0; + *v4 = &off_560704; + v4[2] = 0; + v4[3] = 0; + *((_BYTE *)v4 + 16) = 0; + *(_DWORD *)((char *)v4 + 18) = 0; + v4[6] = 0; + v4[7] = 0; + v4[8] = 0; + v4[9] = 0; + v4[10] = 0; + v4[11] = 0; + v4[12] = 0; + v4[13] = 0; + v4[14] = 0; + *((_BYTE *)v4 + 82) = 0; + this[2] = v4; + } + *(_DWORD *)((char *)v4 + 18) = 2883630; + v4[2] = &unk_556C08; + v5 = std::money_base::_S_atoms; + v4[13] = std::money_base::_S_default_pattern; + v4[3] = 0; + v4[6] = &unk_556C0A; + v4[7] = 0; + v4[8] = &unk_556C0A; + v4[9] = 0; + v4[10] = &unk_556C0A; + v4[11] = 0; + v4[12] = 0; + *(_DWORD *)(this[2] + 56) = std::money_base::_S_default_pattern; + v6 = this[2]; + for ( result = 0; result != 11; ++result ) + *(_WORD *)(v6 + 2 * result + 60) = v5[result]; + return result; +} +// 53F588: using guessed type char *std::money_base::_S_atoms; +// 55AF40: using guessed type int std::money_base::_S_default_pattern; +// 560704: using guessed type int (*off_560704)(); + +//----- (00509000) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55F8BC; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (005090A0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55F8BC; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00509140) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55F8BC; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (005091E0) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55F8BC; + this[2] = a2; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00509280) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2, int a3, int a4) +{ + *this = &off_55F8BC; + this[2] = 0; + this[1] = a4 != 0; + std::moneypunct::_M_initialize_moneypunct(this, a2, a3); +} +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00509320) -------------------------------------------------------- +void __thiscall std::moneypunct::moneypunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55F8BC; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); +} +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (005093C0) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + int v1; // ecx + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v1 = a1[2]; + *a1 = &off_55F8BC; + if ( v1 ) + (*(void (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 509420: variable 'lpfctx' is possibly undefined +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00509490) -------------------------------------------------------- +void __fastcall std::moneypunct::~moneypunct(_DWORD *a1) +{ + int v1; // ecx + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v1 = a1[2]; + *a1 = &off_55F8BC; + if ( v1 ) + (*(void (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 5094F0: variable 'lpfctx' is possibly undefined +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00509540) -------------------------------------------------------- +void __thiscall std::string::_M_destroy(void **this, int a2) +{ + operator delete(*this); +} + +//----- (00509560) -------------------------------------------------------- +void __fastcall std::string::_M_dispose(void **a1) +{ + if ( *a1 != a1 + 2 ) + operator delete(*a1); +} + +//----- (00509590) -------------------------------------------------------- +unsigned int *__thiscall std::string::_M_replace(unsigned int *this, size_t a2, size_t a3, char *Src, size_t a5) +{ + unsigned int v5; // eax + unsigned int v7; // edi + unsigned int v8; // ecx + bool v9; // cl + unsigned int v10; // eax + unsigned int v12; // eax + size_t v13; // eax + size_t v14; // ebp + size_t v15; // edx + _BYTE *v16; // esi + unsigned int v17; // [esp+1Ch] [ebp-30h] + _BYTE *v18; // [esp+20h] [ebp-2Ch] + bool v19; // [esp+27h] [ebp-25h] + size_t Size; // [esp+28h] [ebp-24h] + size_t v21; // [esp+2Ch] [ebp-20h] + + v5 = this[1]; + if ( a5 > a3 + 0x3FFFFFFF - v5 ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace"); + v21 = a5 - a3; + v7 = v5 + a5 - a3; + v17 = *this; + if ( (unsigned int *)*this == this + 2 ) + v8 = 15; + else + v8 = this[2]; + if ( v8 < v7 ) + { + std::string::_M_mutate((int)this, a2, a3, Src, a5); + goto LABEL_12; + } + v18 = (_BYTE *)(a2 + v17); + v19 = v5 != a3 + a2; + Size = v5 - (a3 + a2); + v9 = v19 && a3 != a5; + if ( v17 <= (unsigned int)Src && (unsigned int)Src <= v17 + v5 ) + { + if ( a5 && a3 >= a5 ) + { + if ( a5 != 1 ) + { + memmove(v18, Src, a5); + if ( !v19 || a3 == a5 ) + goto LABEL_12; +LABEL_18: + if ( Size == 1 ) + v18[a5] = v18[a3]; + else + memmove(&v18[a5], &v18[a3], Size); +LABEL_20: + if ( a3 >= a5 ) + goto LABEL_12; + v12 = (unsigned int)&v18[a3]; + if ( &v18[a3] < &Src[a5] ) + { + if ( v12 > (unsigned int)Src ) + { + v13 = v12 - (_DWORD)Src; + v14 = v13; + if ( v13 == 1 ) + { + *v18 = *Src; + } + else if ( v13 ) + { + memmove(v18, Src, v13); + } + v15 = a5 - v14; + v16 = &v18[a5]; + if ( a5 - v14 == 1 ) + { + v18[v14] = *v16; + } + else if ( v15 ) + { + memcpy(&v18[v14], v16, v15); + } + } + else if ( a5 == 1 ) + { + *v18 = Src[v21]; + } + else if ( a5 ) + { + memcpy(v18, &Src[v21], a5); + } + goto LABEL_12; + } + if ( a5 != 1 ) + { + if ( a5 ) + memmove(v18, Src, a5); + goto LABEL_12; + } +LABEL_27: + *v18 = *Src; + goto LABEL_12; + } + *v18 = *Src; + } + if ( !v9 ) + goto LABEL_20; + goto LABEL_18; + } + if ( v9 ) + { + if ( Size == 1 ) + v18[a5] = v18[a3]; + else + memmove(&v18[a5], &v18[a3], Size); + } + if ( a5 ) + { + if ( a5 != 1 ) + { + memcpy(v18, Src, a5); + goto LABEL_12; + } + goto LABEL_27; + } +LABEL_12: + v10 = *this; + this[1] = v7; + *(_BYTE *)(v10 + v7) = 0; + return this; +} + +//----- (005098A0) -------------------------------------------------------- +int __cdecl std::string::_S_compare(int a1, int a2) +{ + return a1 - a2; +} + +//----- (005098B0) -------------------------------------------------------- +int __thiscall std::string::_M_capacity(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + this[2] = a2; + return result; +} + +//----- (005098C0) -------------------------------------------------------- +int __thiscall std::string::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (005098D0) -------------------------------------------------------- +int __thiscall std::string::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (005098E0) -------------------------------------------------------- +int __thiscall std::string::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (005098F0) -------------------------------------------------------- +int __thiscall std::string::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (00509900) -------------------------------------------------------- +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, size_t Size, char a3) +{ + _BYTE *result; // eax + int Val; // edi + + if ( Size > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + this[2] = Size; + *this = result; + Val = a3; + goto LABEL_6; + } + result = (_BYTE *)*this; + if ( !Size ) + { + this[1] = 0; + *result = 0; + return result; + } + if ( Size != 1 ) + { + Val = a3; +LABEL_6: + memset(result, Val, Size); + result = (_BYTE *)*this; + this[1] = Size; + result[Size] = 0; + return result; + } + *result = a3; + result = (_BYTE *)*this; + this[1] = 1; + result[1] = 0; + return result; +} + +//----- (005099A0) -------------------------------------------------------- +_BYTE *__thiscall std::string::_M_construct<__gnu_cxx::__normal_iterator>( + _DWORD *this, + _BYTE *Src, + int a3, + int a4) +{ + size_t Size; // ebx + _BYTE *result; // eax + + Size = a3 - (_DWORD)Src; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + this[2] = Size; + *this = result; + } + else + { + result = (_BYTE *)*this; + if ( Size == 1 ) + { + *result = *Src; + result = (_BYTE *)*this; + this[1] = 1; + result[1] = 0; + return result; + } + if ( !Size ) + { + this[1] = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + result = (_BYTE *)*this; + this[1] = Size; + result[Size] = 0; + return result; +} + +//----- (00509A40) -------------------------------------------------------- +_BYTE *__thiscall std::string::_M_construct<__gnu_cxx::__normal_iterator>( + _DWORD *this, + _BYTE *Src, + int a3, + int a4) +{ + size_t Size; // ebx + _BYTE *result; // eax + + Size = a3 - (_DWORD)Src; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + this[2] = Size; + *this = result; + } + else + { + result = (_BYTE *)*this; + if ( Size == 1 ) + { + *result = *Src; + result = (_BYTE *)*this; + this[1] = 1; + result[1] = 0; + return result; + } + if ( !Size ) + { + this[1] = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + result = (_BYTE *)*this; + this[1] = Size; + result[Size] = 0; + return result; +} + +//----- (00509AE0) -------------------------------------------------------- +unsigned int __thiscall std::string::_M_construct(void **this, unsigned __int8 *Src, size_t Size) +{ + unsigned int result; // eax + _BYTE *v5; // edx + unsigned int v6[7]; // [esp+1Ch] [ebp-1Ch] BYREF + + if ( !Src && Size ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v6[0] = Size - (_DWORD)Src; + if ( Size - (unsigned int)Src > 0xF ) + { + *this = std::string::_M_create(v6, 0); + this[2] = (void *)v6[0]; + } + std::string::_S_copy_chars(*this, Src, Size); + result = v6[0]; + v5 = *this; + this[1] = (void *)v6[0]; + v5[result] = 0; + return result; +} +// 509AE0: using guessed type unsigned int var_1C[7]; + +//----- (00509B60) -------------------------------------------------------- +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, _BYTE *Src, int a3, int a4) +{ + size_t Size; // ebx + _BYTE *result; // eax + + if ( a3 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + Size = a3 - (_DWORD)Src; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + this[2] = Size; + *this = result; + } + else + { + result = (_BYTE *)*this; + if ( Size == 1 ) + { + *result = *Src; + result = (_BYTE *)*this; + this[1] = 1; + result[1] = 0; + return result; + } + if ( !Size ) + { + this[1] = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + result = (_BYTE *)*this; + this[1] = Size; + result[Size] = 0; + return result; +} + +//----- (00509C10) -------------------------------------------------------- +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, _BYTE *Src, int a3) +{ + size_t Size; // ebx + _BYTE *result; // eax + unsigned int v6; // ebx + unsigned int v7; // ebx + unsigned int v8[4]; // [esp+1Ch] [ebp-10h] BYREF + + if ( a3 ) + { + if ( !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + } + Size = a3 - (_DWORD)Src; + v8[0] = a3 - (_DWORD)Src; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xF ) + { + result = std::string::_M_create(v8, 0); + *this = result; + this[2] = v8[0]; + } + else + { + result = (_BYTE *)*this; + if ( Size == 1 ) + { + *result = *Src; + v6 = v8[0]; + result = (_BYTE *)*this; + this[1] = v8[0]; + result[v6] = 0; + return result; + } + if ( !Size ) + { + this[1] = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + v7 = v8[0]; + result = (_BYTE *)*this; + this[1] = v8[0]; + result[v7] = 0; + return result; +} +// 509C10: using guessed type unsigned int var_10[4]; + +//----- (00509CD0) -------------------------------------------------------- +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, _BYTE *Src, int a3) +{ + size_t Size; // ebx + _BYTE *result; // eax + unsigned int v6; // ebx + unsigned int v7; // ebx + unsigned int v8[4]; // [esp+1Ch] [ebp-10h] BYREF + + if ( a3 ) + { + if ( !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + } + Size = a3 - (_DWORD)Src; + v8[0] = a3 - (_DWORD)Src; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xF ) + { + result = std::string::_M_create(v8, 0); + *this = result; + this[2] = v8[0]; + } + else + { + result = (_BYTE *)*this; + if ( Size == 1 ) + { + *result = *Src; + v6 = v8[0]; + result = (_BYTE *)*this; + this[1] = v8[0]; + result[v6] = 0; + return result; + } + if ( !Size ) + { + this[1] = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + v7 = v8[0]; + result = (_BYTE *)*this; + this[1] = v8[0]; + result[v7] = 0; + return result; +} +// 509CD0: using guessed type unsigned int var_10[4]; + +//----- (00509D90) -------------------------------------------------------- +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, _BYTE *Src, int a3) +{ + size_t Size; // ebx + _BYTE *result; // eax + unsigned int v6; // ebx + unsigned int v7; // ebx + unsigned int v8[4]; // [esp+1Ch] [ebp-10h] BYREF + + if ( a3 ) + { + if ( !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + } + Size = a3 - (_DWORD)Src; + v8[0] = a3 - (_DWORD)Src; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xF ) + { + result = std::string::_M_create(v8, 0); + *this = result; + this[2] = v8[0]; + } + else + { + result = (_BYTE *)*this; + if ( Size == 1 ) + { + *result = *Src; + v6 = v8[0]; + result = (_BYTE *)*this; + this[1] = v8[0]; + result[v6] = 0; + return result; + } + if ( !Size ) + { + this[1] = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + v7 = v8[0]; + result = (_BYTE *)*this; + this[1] = v8[0]; + result[v7] = 0; + return result; +} +// 509D90: using guessed type unsigned int var_10[4]; + +//----- (00509E50) -------------------------------------------------------- +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, _BYTE *Src, int a3) +{ + size_t Size; // ebx + _BYTE *result; // eax + unsigned int v6; // ebx + unsigned int v7; // ebx + unsigned int v8[4]; // [esp+1Ch] [ebp-10h] BYREF + + if ( a3 ) + { + if ( !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + } + Size = a3 - (_DWORD)Src; + v8[0] = a3 - (_DWORD)Src; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xF ) + { + result = std::string::_M_create(v8, 0); + *this = result; + this[2] = v8[0]; + } + else + { + result = (_BYTE *)*this; + if ( Size == 1 ) + { + *result = *Src; + v6 = v8[0]; + result = (_BYTE *)*this; + this[1] = v8[0]; + result[v6] = 0; + return result; + } + if ( !Size ) + { + this[1] = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + v7 = v8[0]; + result = (_BYTE *)*this; + this[1] = v8[0]; + result[v7] = 0; + return result; +} +// 509E50: using guessed type unsigned int var_10[4]; + +//----- (00509F10) -------------------------------------------------------- +_BYTE *__thiscall std::string::_M_construct(_DWORD *this, _BYTE *Src, int a3, int a4) +{ + size_t Size; // ebx + _BYTE *result; // eax + + if ( a3 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + Size = a3 - (_DWORD)Src; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + this[2] = Size; + *this = result; + } + else + { + result = (_BYTE *)*this; + if ( Size == 1 ) + { + *result = *Src; + result = (_BYTE *)*this; + this[1] = 1; + result[1] = 0; + return result; + } + if ( !Size ) + { + this[1] = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + result = (_BYTE *)*this; + this[1] = Size; + result[Size] = 0; + return result; +} + +//----- (00509FC0) -------------------------------------------------------- +int __fastcall std::string::_M_local_data(int a1) +{ + return a1 + 8; +} + +//----- (00509FD0) -------------------------------------------------------- +int __thiscall std::string::_M_set_length(int *this, int a2) +{ + int result; // eax + int v3; // edx + + result = a2; + v3 = *this; + this[1] = a2; + *(_BYTE *)(v3 + a2) = 0; + return result; +} + +//----- (00509FE0) -------------------------------------------------------- +int __cdecl std::string::_S_copy_chars(_BYTE *a1, unsigned __int8 *Src, size_t Size) +{ + int result; // eax + + result = Size - (_DWORD)Src; + if ( Size - (_DWORD)Src == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( result ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (0050A020) -------------------------------------------------------- +int __cdecl std::string::_S_copy_chars(_BYTE *a1, unsigned __int8 *Src, size_t Size) +{ + int result; // eax + + result = Size - (_DWORD)Src; + if ( Size - (_DWORD)Src == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( result ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (0050A060) -------------------------------------------------------- +int __cdecl std::string::_S_copy_chars(_BYTE *a1, unsigned __int8 *Src, size_t Size) +{ + int result; // eax + + result = Size - (_DWORD)Src; + if ( Size - (_DWORD)Src == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( result ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (0050A0A0) -------------------------------------------------------- +int __cdecl std::string::_S_copy_chars(_BYTE *a1, unsigned __int8 *Src, size_t Size) +{ + int result; // eax + + result = Size - (_DWORD)Src; + if ( Size - (_DWORD)Src == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( result ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (0050A0E0) -------------------------------------------------------- +void __fastcall std::string::shrink_to_fit(_DWORD *a1) +{ + unsigned int v1; // eax + + if ( (_DWORD *)*a1 == a1 + 2 ) + v1 = 15; + else + v1 = a1[2]; + if ( a1[1] < v1 ) + std::string::reserve(a1, 0); +} + +//----- (0050A180) -------------------------------------------------------- +_DWORD *__thiscall std::string::_M_replace_aux(_DWORD *this, size_t a2, int a3, size_t a4, char a5) +{ + int v6; // edx + _DWORD *v7; // eax + unsigned int v8; // esi + unsigned int v9; // ebp + size_t Size; // edx + size_t v11; // eax + _BYTE *Src; // ecx + _BYTE *v13; // eax + _BYTE *v14; // eax + + v6 = this[1]; + if ( a4 > a3 + 0x3FFFFFFF - v6 ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace_aux"); + v7 = (_DWORD *)*this; + v8 = v6 + a4 - a3; + if ( (_DWORD *)*this == this + 2 ) + v9 = 15; + else + v9 = this[2]; + if ( v9 < v8 ) + { + std::string::_M_mutate((int)this, a2, a3, 0, a4); + v7 = (_DWORD *)*this; + if ( !a4 ) + goto LABEL_13; + } + else + { + Size = v6 - (a3 + a2); + if ( !Size || a3 == a4 ) + { +LABEL_9: + if ( !a4 ) + goto LABEL_13; + goto LABEL_10; + } + v11 = (size_t)v7 + a2; + Src = (_BYTE *)(v11 + a3); + v13 = (_BYTE *)(a4 + v11); + if ( Size != 1 ) + { + memmove(v13, Src, Size); + v7 = (_DWORD *)*this; + goto LABEL_9; + } + *v13 = *Src; + v7 = (_DWORD *)*this; + if ( !a4 ) + goto LABEL_13; + } +LABEL_10: + v14 = (char *)v7 + a2; + if ( a4 == 1 ) + *v14 = a5; + else + memset(v14, a5, a4); + v7 = (_DWORD *)*this; +LABEL_13: + this[1] = v8; + *((_BYTE *)v7 + v8) = 0; + return this; +} + +//----- (0050A2A0) -------------------------------------------------------- +int __fastcall std::string::_M_get_allocator(int a1) +{ + return a1; +} + +//----- (0050A2B0) -------------------------------------------------------- +_BYTE *__thiscall std::string::_M_construct_aux_2(_DWORD *this, size_t Size, char a3) +{ + _BYTE *result; // eax + + if ( Size > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + this[2] = Size; + *this = result; +LABEL_6: + memset(result, a3, Size); + result = (_BYTE *)*this; + this[1] = Size; + result[Size] = 0; + return result; + } + result = (_BYTE *)*this; + if ( !Size ) + { + this[1] = 0; + *result = 0; + return result; + } + if ( Size != 1 ) + goto LABEL_6; + *result = a3; + result = (_BYTE *)*this; + this[1] = 1; + result[1] = 0; + return result; +} + +//----- (0050A350) -------------------------------------------------------- +unsigned int __thiscall std::string::at(_DWORD *this, unsigned int a2) +{ + if ( a2 >= this[1] ) + std::__throw_out_of_range_fmt("basic_string::at: __n (which is %zu) >= this->size() (which is %zu)", a2, this[1]); + return *this + a2; +} + +//----- (0050A380) -------------------------------------------------------- +int __fastcall std::string::end(_DWORD *a1) +{ + return a1[1] + *a1; +} + +//----- (0050A390) -------------------------------------------------------- +int __fastcall std::string::back(_DWORD *a1) +{ + return *a1 + a1[1] - 1; +} + +//----- (0050A3A0) -------------------------------------------------------- +_DWORD *__thiscall std::string::rend(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2; + return result; +} + +//----- (0050A3B0) -------------------------------------------------------- +_BYTE *__thiscall std::string::swap(_DWORD *this, _DWORD *a2) +{ + _BYTE *result; // eax + _BYTE *v3; // edi + _BYTE *v4; // esi + _BYTE *v5; // edx + int v6; // ebp + int v7; // edx + int v8; // esi + int v9; // edx + int v10; // edi + int v11; // ebp + int v12; // edi + int v13; // [esp+0h] [ebp-28h] + int v14; // [esp+4h] [ebp-24h] + + result = a2; + if ( this != a2 ) + { + v3 = (_BYTE *)*this; + v4 = (_BYTE *)*a2; + v5 = a2 + 2; + if ( this + 2 == (_DWORD *)*this ) + { + if ( v5 == v4 ) + { + v8 = a2[1]; + if ( this[1] ) + { + if ( !v8 ) + { + a2[2] = this[2]; + a2[3] = this[3]; + a2[4] = this[4]; + a2[5] = this[5]; + a2[1] = this[1]; + result = (_BYTE *)*this; + this[1] = 0; + *result = 0; + return result; + } + v11 = a2[2]; + v12 = a2[3]; + v13 = a2[4]; + v14 = a2[5]; + a2[2] = this[2]; + a2[3] = this[3]; + a2[4] = this[4]; + a2[5] = this[5]; + v9 = this[1]; + this[3] = v12; + this[2] = v11; + this[4] = v13; + this[5] = v14; + v8 = a2[1]; + } + else + { + if ( v8 ) + { + this[2] = a2[2]; + this[3] = a2[3]; + this[4] = a2[4]; + this[5] = a2[5]; + this[1] = a2[1]; + a2[1] = 0; + result = (_BYTE *)*a2; + *(_BYTE *)*a2 = 0; + return result; + } + v9 = 0; + } + } + else + { + v10 = a2[2]; + a2[2] = this[2]; + a2[3] = this[3]; + a2[4] = this[4]; + a2[5] = this[5]; + *this = v4; + *a2 = v5; + v9 = this[1]; + this[2] = v10; + v8 = a2[1]; + } + } + else + { + v6 = this[2]; + if ( v5 == v4 ) + { + this[2] = a2[2]; + this[3] = a2[3]; + this[4] = a2[4]; + this[5] = a2[5]; + *a2 = v3; + *this = this + 2; + } + else + { + *this = v4; + v7 = a2[2]; + *a2 = v3; + this[2] = v7; + } + a2[2] = v6; + v8 = a2[1]; + v9 = this[1]; + } + this[1] = v8; + a2[1] = v9; + } + return result; +} + +//----- (0050A520) -------------------------------------------------------- +int __fastcall std::string::begin(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (0050A530) -------------------------------------------------------- +_BYTE *__fastcall std::string::clear(int a1) +{ + _BYTE *result; // eax + + result = *(_BYTE **)a1; + *(_DWORD *)(a1 + 4) = 0; + *result = 0; + return result; +} + +//----- (0050A540) -------------------------------------------------------- +char *__thiscall std::string::erase(int *this, char *a2) +{ + int v3; // edx + int v4; // eax + char *v5; // esi + size_t Size; // edi + + v3 = *this; + v4 = this[1] - 1; + v5 = &a2[-*this]; + Size = v4 - (_DWORD)v5; + if ( (char *)v4 != v5 ) + { + if ( Size == 1 ) + *a2 = a2[1]; + else + memmove(a2, a2 + 1, Size); + v3 = *this; + v4 = this[1] - 1; + } + this[1] = v4; + *(_BYTE *)(v3 + v4) = 0; + return &v5[*this]; +} + +//----- (0050A5B0) -------------------------------------------------------- +int __thiscall std::string::erase(int *this, _BYTE *a2, int a3) +{ + int v4; // esi + + v4 = (int)&a2[-*this]; + if ( a3 == this[1] + *this ) + { + this[1] = v4; + *a2 = 0; + } + else + { + std::string::_M_erase(this, v4, a3 - (_DWORD)a2); + } + return v4 + *this; +} + +//----- (0050A610) -------------------------------------------------------- +int __thiscall std::string::erase(int *this, int a2) +{ + int v3; // ebx + + v3 = a2 - *this; + std::string::_M_erase(this, v3, 1); + return v3 + *this; +} + +//----- (0050A640) -------------------------------------------------------- +int __thiscall std::string::erase(int *this, _BYTE *a2, int a3) +{ + int v4; // esi + + v4 = (int)&a2[-*this]; + if ( a3 == this[1] + *this ) + { + this[1] = v4; + *a2 = 0; + } + else + { + std::string::_M_erase(this, v4, a3 - (_DWORD)a2); + } + return v4 + *this; +} + +//----- (0050A6A0) -------------------------------------------------------- +int *__thiscall std::string::erase(int *this, unsigned int a2, unsigned int a3) +{ + int *result; // eax + unsigned int v4; // edx + unsigned int v5; // edx + int v6; // edx + + result = this; + v4 = this[1]; + if ( a2 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + a2, + v4); + if ( a3 == -1 ) + { + v6 = *this; + this[1] = a2; + *(_BYTE *)(v6 + a2) = 0; + } + else if ( a3 ) + { + v5 = v4 - a2; + if ( v5 > a3 ) + v5 = a3; + std::string::_M_erase(this, a2, v5); + return this; + } + return result; +} + +//----- (0050A720) -------------------------------------------------------- +int __fastcall std::string::front(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (0050A730) -------------------------------------------------------- +_DWORD *__thiscall std::string::append(_DWORD *this, char *Str) +{ + unsigned int Size; // eax + size_t v4; // ebp + _DWORD *v5; // edx + unsigned int v6; // edi + unsigned int v7; // ecx + _BYTE *v8; // edx + _DWORD *result; // eax + + Size = strlen(Str); + v4 = this[1]; + if ( 0x3FFFFFFF - v4 < Size ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v5 = (_DWORD *)*this; + v6 = v4 + Size; + if ( (_DWORD *)*this == this + 2 ) + v7 = 15; + else + v7 = this[2]; + if ( v6 > v7 ) + { + std::string::_M_mutate((int)this, v4, 0, Str, Size); + v5 = (_DWORD *)*this; + } + else if ( Size ) + { + v8 = (char *)v5 + v4; + if ( Size == 1 ) + *v8 = *Str; + else + memcpy(v8, Str, Size); + v5 = (_DWORD *)*this; + } + this[1] = v6; + result = this; + *((_BYTE *)v5 + v6) = 0; + return result; +} + +//----- (0050A7F0) -------------------------------------------------------- +_DWORD *__thiscall std::string::append(_DWORD *this, _BYTE *Src, size_t Size) +{ + size_t v4; // edi + _DWORD *v5; // eax + unsigned int v6; // esi + unsigned int v7; // ecx + _BYTE *v8; // eax + + v4 = this[1]; + if ( Size > 0x3FFFFFFF - v4 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v5 = (_DWORD *)*this; + v6 = Size + v4; + if ( (_DWORD *)*this == this + 2 ) + v7 = 15; + else + v7 = this[2]; + if ( v6 > v7 ) + { + std::string::_M_mutate((int)this, v4, 0, Src, Size); + v5 = (_DWORD *)*this; + } + else if ( Size ) + { + v8 = (char *)v5 + v4; + if ( Size == 1 ) + *v8 = *Src; + else + memcpy(v8, Src, Size); + v5 = (_DWORD *)*this; + } + this[1] = v6; + *((_BYTE *)v5 + v6) = 0; + return this; +} + +//----- (0050A8B0) -------------------------------------------------------- +_DWORD *__thiscall std::string::append(_DWORD *this, int a2) +{ + _DWORD *v3; // edi + size_t v4; // ecx + size_t v5; // edx + _BYTE *Src; // ebp + _DWORD *v7; // eax + unsigned int v8; // esi + unsigned int v9; // edi + _BYTE *v10; // eax + + v3 = this + 2; + v4 = this[1]; + v5 = *(_DWORD *)(a2 + 4); + Src = *(_BYTE **)a2; + v7 = (_DWORD *)*this; + v8 = v5 + v4; + if ( (_DWORD *)*this == v3 ) + v9 = 15; + else + v9 = this[2]; + if ( v8 > v9 ) + { + std::string::_M_mutate((int)this, v4, 0, Src, v5); + v7 = (_DWORD *)*this; + } + else if ( v5 ) + { + v10 = (char *)v7 + v4; + if ( v5 == 1 ) + *v10 = *Src; + else + memcpy(v10, Src, *(_DWORD *)(a2 + 4)); + v7 = (_DWORD *)*this; + } + this[1] = v8; + *((_BYTE *)v7 + v8) = 0; + return this; +} + +//----- (0050A950) -------------------------------------------------------- +_DWORD *__thiscall std::string::append(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4) +{ + size_t Size; // eax + _BYTE *Src; // edi + int v7; // ecx + _DWORD *v8; // edx + unsigned int v9; // esi + unsigned int v10; // ebp + _BYTE *v11; // edx + _DWORD *result; // eax + + Size = a4; + if ( a2[1] - a3 <= a4 ) + Size = a2[1] - a3; + if ( a3 > a2[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::append", + a3, + a2[1]); + Src = (_BYTE *)(*a2 + a3); + v7 = this[1]; + v8 = (_DWORD *)*this; + v9 = Size + v7; + if ( (_DWORD *)*this == this + 2 ) + v10 = 15; + else + v10 = this[2]; + if ( v9 > v10 ) + { + std::string::_M_mutate((int)this, this[1], 0, Src, Size); + v8 = (_DWORD *)*this; + } + else if ( Size ) + { + v11 = (char *)v8 + v7; + if ( Size == 1 ) + *v11 = *Src; + else + memcpy(v11, Src, Size); + v8 = (_DWORD *)*this; + } + this[1] = v9; + result = this; + *((_BYTE *)v8 + v9) = 0; + return result; +} + +//----- (0050AA30) -------------------------------------------------------- +_DWORD *__thiscall std::string::append(_DWORD *this, _BYTE *Src, size_t Size) +{ + size_t v4; // edi + _DWORD *v5; // eax + unsigned int v6; // esi + unsigned int v7; // ecx + _BYTE *v8; // eax + + v4 = this[1]; + if ( Size > 0x3FFFFFFF - v4 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v5 = (_DWORD *)*this; + v6 = Size + v4; + if ( (_DWORD *)*this == this + 2 ) + v7 = 15; + else + v7 = this[2]; + if ( v6 > v7 ) + { + std::string::_M_mutate((int)this, v4, 0, Src, Size); + v5 = (_DWORD *)*this; + } + else if ( Size ) + { + v8 = (char *)v5 + v4; + if ( Size == 1 ) + *v8 = *Src; + else + memcpy(v8, Src, Size); + v5 = (_DWORD *)*this; + } + this[1] = v6; + *((_BYTE *)v5 + v6) = 0; + return this; +} + +//----- (0050AAF0) -------------------------------------------------------- +_DWORD *__thiscall std::string::append(_DWORD *this, size_t a2, char a3) +{ + return std::string::_M_replace_aux(this, this[1], 0, a2, a3); +} + +//----- (0050AB20) -------------------------------------------------------- +_DWORD *__thiscall std::string::assign(_DWORD *this, int a2) +{ + _BYTE *v3; // eax + _BYTE *Src; // ecx + int v5; // edx + int v6; // ebp + + v3 = (_BYTE *)*this; + Src = *(_BYTE **)a2; + v5 = *(_DWORD *)(a2 + 4); + if ( *(_DWORD *)a2 != a2 + 8 ) + { + if ( v3 == (_BYTE *)(this + 2) ) + { + *this = Src; + this[1] = v5; + this[2] = *(_DWORD *)(a2 + 8); + } + else + { + *this = Src; + v6 = this[2]; + this[1] = v5; + this[2] = *(_DWORD *)(a2 + 8); + if ( v3 ) + { + *(_DWORD *)a2 = v3; + *(_DWORD *)(a2 + 8) = v6; + goto LABEL_5; + } + } + *(_DWORD *)a2 = a2 + 8; + v3 = (_BYTE *)(a2 + 8); + goto LABEL_5; + } + if ( v5 ) + { + if ( v5 == 1 ) + *v3 = *(_BYTE *)(a2 + 8); + else + memcpy(v3, Src, *(_DWORD *)(a2 + 4)); + v5 = *(_DWORD *)(a2 + 4); + v3 = (_BYTE *)*this; + } + this[1] = v5; + v3[v5] = 0; + v3 = *(_BYTE **)a2; +LABEL_5: + *(_DWORD *)(a2 + 4) = 0; + *v3 = 0; + return this; +} + +//----- (0050ABD0) -------------------------------------------------------- +unsigned int *__thiscall std::string::assign(unsigned int *this, char *Str) +{ + size_t v3; // eax + + v3 = strlen(Str); + return std::string::_M_replace(this, 0, this[1], Str, v3); +} + +//----- (0050AC10) -------------------------------------------------------- +unsigned int *__thiscall std::string::assign(unsigned int *this, char *a2, size_t a3) +{ + return std::string::_M_replace(this, 0, this[1], a2, a3); +} + +//----- (0050AC40) -------------------------------------------------------- +void *__thiscall std::string::assign(void *this, int a2) +{ + std::string::_M_assign((int)this, a2); + return this; +} + +//----- (0050AC60) -------------------------------------------------------- +unsigned int *__thiscall std::string::assign(unsigned int *this, _DWORD *a2, unsigned int a3, size_t a4) +{ + size_t v4; // eax + + v4 = a2[1] - a3; + if ( v4 > a4 ) + v4 = a4; + if ( a3 > a2[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::assign", + a3, + a2[1]); + return std::string::_M_replace(this, 0, this[1], (char *)(*a2 + a3), v4); +} + +//----- (0050ACD0) -------------------------------------------------------- +unsigned int *__thiscall std::string::assign(unsigned int *this, char *a2, size_t a3) +{ + return std::string::_M_replace(this, 0, this[1], a2, a3); +} + +//----- (0050AD00) -------------------------------------------------------- +_DWORD *__thiscall std::string::assign(_DWORD *this, size_t a2, char a3) +{ + return std::string::_M_replace_aux(this, 0, this[1], a2, a3); +} + +//----- (0050AD30) -------------------------------------------------------- +size_t __thiscall std::string::insert(unsigned int *this, int a2, char *a3, size_t a4) +{ + size_t v5; // eax + size_t v6; // ebx + + v5 = this[1]; + v6 = a2 - *this; + if ( v6 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + v5); + std::string::_M_replace(this, v6, 0, a3, a4); + return v6 + *this; +} + +//----- (0050ADA0) -------------------------------------------------------- +size_t __thiscall std::string::insert(_DWORD *this, int a2, char a3) +{ + size_t v4; // ebx + + v4 = a2 - *this; + std::string::_M_replace_aux(this, v4, 0, 1u, a3); + return v4 + *this; +} + +//----- (0050ADE0) -------------------------------------------------------- +size_t __thiscall std::string::insert(_DWORD *this, int a2, size_t a3, char a4) +{ + size_t v5; // ebx + + v5 = a2 - *this; + std::string::_M_replace_aux(this, v5, 0, a3, a4); + return v5 + *this; +} + +//----- (0050AE20) -------------------------------------------------------- +unsigned int *__thiscall std::string::insert(unsigned int *this, int a2, char *a3, size_t a4) +{ + size_t v4; // eax + + v4 = a2 - *this; + if ( v4 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v4, + this[1]); + return std::string::_M_replace(this, v4, 0, a3, a4); +} + +//----- (0050AE80) -------------------------------------------------------- +size_t __thiscall std::string::insert(_DWORD *this, int a2, char a3) +{ + size_t v4; // ebx + + v4 = a2 - *this; + std::string::_M_replace_aux(this, v4, 0, 1u, a3); + return v4 + *this; +} + +//----- (0050AEC0) -------------------------------------------------------- +_DWORD *__thiscall std::string::insert(_DWORD *this, int a2, size_t a3, char a4) +{ + return std::string::_M_replace_aux(this, a2 - *this, 0, a3, a4); +} + +//----- (0050AF00) -------------------------------------------------------- +unsigned int *__thiscall std::string::insert(unsigned int *this, unsigned int a2, char *Str) +{ + size_t v4; // eax + + v4 = strlen(Str); + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::string::_M_replace(this, a2, 0, Str, v4); +} + +//----- (0050AF70) -------------------------------------------------------- +unsigned int *__thiscall std::string::insert(unsigned int *this, unsigned int a2, char *a3, size_t a4) +{ + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::string::_M_replace(this, a2, 0, a3, a4); +} + +//----- (0050AFD0) -------------------------------------------------------- +unsigned int *__thiscall std::string::insert(unsigned int *this, unsigned int a2, int a3) +{ + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::string::_M_replace(this, a2, 0, *(char **)a3, *(_DWORD *)(a3 + 4)); +} + +//----- (0050B030) -------------------------------------------------------- +unsigned int *__thiscall std::string::insert(unsigned int *this, unsigned int a2, _DWORD *a3, char *a4, size_t a5) +{ + size_t v5; // eax + + v5 = a5; + if ( a3[1] - (int)a4 <= a5 ) + v5 = a3[1] - (_DWORD)a4; + if ( (unsigned int)a4 > a3[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::insert", + (size_t)a4, + a3[1]); + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::string::_M_replace(this, a2, 0, &a4[*a3], v5); +} + +//----- (0050B0C0) -------------------------------------------------------- +_DWORD *__thiscall std::string::insert(_DWORD *this, unsigned int a2, size_t a3, char a4) +{ + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::insert", + a2, + this[1]); + return std::string::_M_replace_aux(this, a2, 0, a3, a4); +} + +//----- (0050B120) -------------------------------------------------------- +unsigned int *__thiscall std::string::insert<__gnu_cxx::__normal_iterator>( + unsigned int *this, + int a2, + char *a3, + int a4) +{ + size_t v4; // eax + + v4 = a2 - *this; + if ( v4 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v4, + this[1]); + return std::string::_M_replace(this, v4, 0, a3, a4 - (_DWORD)a3); +} + +//----- (0050B180) -------------------------------------------------------- +_DWORD *__thiscall std::string::rbegin(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2 + a2[1]; + return result; +} + +//----- (0050B190) -------------------------------------------------------- +_DWORD *__thiscall std::string::resize(int *this, _DWORD *a2) +{ + size_t v2; // edx + _DWORD *result; // eax + int v4; // edx + + v2 = this[1]; + result = a2; + if ( (unsigned int)a2 > v2 ) + return std::string::_M_replace_aux(this, v2, 0, (size_t)a2 - v2, 0); + if ( (unsigned int)a2 < v2 ) + { + v4 = *this; + this[1] = (int)a2; + *((_BYTE *)a2 + v4) = 0; + } + return result; +} + +//----- (0050B1E0) -------------------------------------------------------- +_DWORD *__thiscall std::string::resize(int *this, _DWORD *a2, char a3) +{ + size_t v3; // edx + _DWORD *result; // eax + int v5; // edx + + v3 = this[1]; + result = a2; + if ( v3 < (unsigned int)a2 ) + return std::string::_M_replace_aux(this, v3, 0, (size_t)a2 - v3, a3); + if ( v3 > (unsigned int)a2 ) + { + v5 = *this; + this[1] = (int)a2; + *((_BYTE *)a2 + v5) = 0; + } + return result; +} + +//----- (0050B230) -------------------------------------------------------- +int __thiscall std::string::_M_data(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (0050B240) -------------------------------------------------------- +int __cdecl std::string::_S_copy(_BYTE *a1, unsigned __int8 *Src, int Size) +{ + int result; // eax + + result = Size; + if ( Size == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( Size ) + { + return (int)memcpy(a1, Src, Size); + } + return result; +} + +//----- (0050B280) -------------------------------------------------------- +int __cdecl std::string::_S_move(_BYTE *a1, unsigned __int8 *Src, int Size) +{ + int result; // eax + + result = Size; + if ( Size == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( Size ) + { + return (int)memmove(a1, Src, Size); + } + return result; +} + +//----- (0050B2C0) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5) +{ + size_t v5; // eax + size_t v6; // edx + + v5 = a3 - a2; + v6 = a2 - *this; + if ( a3 - a2 > this[1] - v6 ) + v5 = this[1] - v6; + if ( v6 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + this[1]); + return std::string::_M_replace(this, v6, v5, a4, a5 - (_DWORD)a4); +} + +//----- (0050B330) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5) +{ + size_t v5; // eax + size_t v6; // edx + + v5 = a3 - a2; + v6 = a2 - *this; + if ( a3 - a2 > this[1] - v6 ) + v5 = this[1] - v6; + if ( v6 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + this[1]); + return std::string::_M_replace(this, v6, v5, a4, a5 - (_DWORD)a4); +} + +//----- (0050B3A0) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, int a4) +{ + size_t v4; // edx + size_t v5; // eax + + v4 = a2 - *this; + v5 = a3 - a2; + if ( a3 - a2 > this[1] - v4 ) + v5 = this[1] - v4; + if ( v4 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v4, + this[1]); + return std::string::_M_replace(this, v4, v5, *(char **)a4, *(_DWORD *)(a4 + 4)); +} + +//----- (0050B410) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *Str) +{ + size_t v5; // eax + size_t v6; // edx + size_t v7; // ecx + size_t v8; // eax + + v5 = strlen(Str); + v6 = a2 - *this; + v7 = v5; + v8 = a3 - a2; + if ( a3 - a2 > this[1] - v6 ) + v8 = this[1] - v6; + if ( v6 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + this[1]); + return std::string::_M_replace(this, v6, v8, Str, v7); +} + +//----- (0050B490) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5) +{ + size_t v5; // eax + size_t v6; // edx + + v5 = a3 - a2; + v6 = a2 - *this; + if ( a3 - a2 > this[1] - v6 ) + v5 = this[1] - v6; + if ( v6 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + this[1]); + return std::string::_M_replace(this, v6, v5, a4, a5 - (_DWORD)a4); +} + +//----- (0050B500) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5) +{ + size_t v5; // eax + size_t v6; // edx + + v5 = a3 - a2; + v6 = a2 - *this; + if ( a3 - a2 > this[1] - v6 ) + v5 = this[1] - v6; + if ( v6 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + this[1]); + return std::string::_M_replace(this, v6, v5, a4, a5); +} + +//----- (0050B570) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5) +{ + size_t v5; // eax + size_t v6; // edx + + v5 = a3 - a2; + v6 = a2 - *this; + if ( a3 - a2 > this[1] - v6 ) + v5 = this[1] - v6; + if ( v6 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + this[1]); + return std::string::_M_replace(this, v6, v5, a4, a5 - (_DWORD)a4); +} + +//----- (0050B5E0) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5) +{ + size_t v5; // eax + size_t v6; // edx + + v5 = a3 - a2; + v6 = a2 - *this; + if ( a3 - a2 > this[1] - v6 ) + v5 = this[1] - v6; + if ( v6 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + this[1]); + return std::string::_M_replace(this, v6, v5, a4, a5); +} + +//----- (0050B650) -------------------------------------------------------- +_DWORD *__thiscall std::string::replace(_DWORD *this, int a2, int a3, size_t a4, char a5) +{ + return std::string::_M_replace_aux(this, a2 - *this, a3 - a2, a4, a5); +} + +//----- (0050B670) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5) +{ + size_t v5; // eax + size_t v6; // edx + + v5 = a3 - a2; + v6 = a2 - *this; + if ( a3 - a2 > this[1] - v6 ) + v5 = this[1] - v6; + if ( v6 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + this[1]); + return std::string::_M_replace(this, v6, v5, a4, a5 - (_DWORD)a4); +} + +//----- (0050B6E0) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *Str) +{ + size_t v5; // eax + size_t v6; // edx + size_t v7; // ecx + size_t v8; // eax + + v5 = strlen(Str); + v6 = a2 - *this; + v7 = v5; + v8 = a3 - a2; + if ( a3 - a2 > this[1] - v6 ) + v8 = this[1] - v6; + if ( v6 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + this[1]); + return std::string::_M_replace(this, v6, v8, Str, v7); +} + +//----- (0050B760) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5) +{ + size_t v5; // eax + size_t v6; // edx + + v5 = a3 - a2; + v6 = a2 - *this; + if ( a3 - a2 > this[1] - v6 ) + v5 = this[1] - v6; + if ( v6 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + this[1]); + return std::string::_M_replace(this, v6, v5, a4, a5 - (_DWORD)a4); +} + +//----- (0050B7D0) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5) +{ + size_t v5; // eax + size_t v6; // edx + + v5 = a3 - a2; + v6 = a2 - *this; + if ( a3 - a2 > this[1] - v6 ) + v5 = this[1] - v6; + if ( v6 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + this[1]); + return std::string::_M_replace(this, v6, v5, a4, a5); +} + +//----- (0050B840) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, int a4) +{ + size_t v4; // edx + size_t v5; // eax + + v4 = a2 - *this; + v5 = a3 - a2; + if ( a3 - a2 > this[1] - v4 ) + v5 = this[1] - v4; + if ( v4 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v4, + this[1]); + return std::string::_M_replace(this, v4, v5, *(char **)a4, *(_DWORD *)(a4 + 4)); +} + +//----- (0050B8B0) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5) +{ + size_t v5; // eax + size_t v6; // edx + + v5 = a3 - a2; + v6 = a2 - *this; + if ( a3 - a2 > this[1] - v6 ) + v5 = this[1] - v6; + if ( v6 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + this[1]); + return std::string::_M_replace(this, v6, v5, a4, a5 - (_DWORD)a4); +} + +//----- (0050B920) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, int a2, int a3, char *a4, size_t a5) +{ + size_t v5; // eax + size_t v6; // edx + + v5 = a3 - a2; + v6 = a2 - *this; + if ( a3 - a2 > this[1] - v6 ) + v5 = this[1] - v6; + if ( v6 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v6, + this[1]); + return std::string::_M_replace(this, v6, v5, a4, a5 - (_DWORD)a4); +} + +//----- (0050B990) -------------------------------------------------------- +_DWORD *__thiscall std::string::replace(_DWORD *this, int a2, int a3, size_t a4, char a5) +{ + return std::string::_M_replace_aux(this, a2 - *this, a3 - a2, a4, a5); +} + +//----- (0050B9B0) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, unsigned int a2, unsigned int a3, char *Str) +{ + size_t v5; // edx + size_t v6; // eax + + v5 = strlen(Str); + v6 = this[1] - a2; + if ( v6 > a3 ) + v6 = a3; + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::string::_M_replace(this, a2, v6, Str, v5); +} + +//----- (0050BA20) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace( + unsigned int *this, + unsigned int a2, + unsigned int a3, + char *a4, + size_t a5) +{ + size_t v5; // eax + + v5 = this[1] - a2; + if ( v5 > a3 ) + v5 = a3; + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::string::_M_replace(this, a2, v5, a4, a5); +} + +//----- (0050BA80) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace(unsigned int *this, unsigned int a2, unsigned int a3, int a4) +{ + size_t v4; // eax + + v4 = this[1] - a2; + if ( v4 > a3 ) + v4 = a3; + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::string::_M_replace(this, a2, v4, *(char **)a4, *(_DWORD *)(a4 + 4)); +} + +//----- (0050BAF0) -------------------------------------------------------- +unsigned int *__thiscall std::string::replace( + unsigned int *this, + unsigned int a2, + unsigned int a3, + _DWORD *a4, + unsigned int a5, + unsigned int a6) +{ + size_t v6; // eax + size_t v7; // esi + + v6 = a6; + if ( a4[1] - a5 <= a6 ) + v6 = a4[1] - a5; + if ( a5 > a4[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a5, + a4[1]); + v7 = this[1] - a2; + if ( v7 > a3 ) + v7 = a3; + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::string::_M_replace(this, a2, v7, (char *)(*a4 + a5), v6); +} + +//----- (0050BB90) -------------------------------------------------------- +_DWORD *__thiscall std::string::replace(_DWORD *this, unsigned int a2, unsigned int a3, size_t a4, char a5) +{ + unsigned int v5; // eax + + v5 = this[1] - a2; + if ( v5 > a3 ) + v5 = a3; + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::string::_M_replace_aux(this, a2, v5, a4, a5); +} + +//----- (0050BBF0) -------------------------------------------------------- +void __thiscall std::string::reserve(_DWORD *this, unsigned int a2) +{ + unsigned int v3; // ecx + unsigned int v4; // eax + _BYTE *Block; // edi + _BYTE *v6; // esi + unsigned int v7; // edx + unsigned int v8; // ebp + _BYTE *v9; // eax + _BYTE *Src; // ebp + _BYTE *v11; // edi + int v12; // eax + unsigned int v13; // eax + + v3 = this[1]; + v4 = a2; + if ( a2 < v3 ) + { + a2 = v3; + v4 = v3; + } + Block = (_BYTE *)*this; + v6 = this + 2; + if ( this + 2 == (_DWORD *)*this ) + v7 = 15; + else + v7 = this[2]; + if ( v7 != v4 ) + { + v8 = 15; + if ( v7 <= 0xF ) + v8 = v7; + if ( v8 >= v4 ) + { + if ( v6 != Block ) + { + if ( v3 ) + { + if ( v3 != -1 ) + memcpy(this + 2, Block, v3 + 1); + } + else + { + *((_BYTE *)this + 8) = *Block; + } + operator delete(Block); + *this = v6; + } + } + else + { + v9 = std::string::_M_create(&a2, v7); + Src = (_BYTE *)*this; + v11 = v9; + v12 = this[1]; + if ( v12 ) + { + if ( v12 != -1 ) + memcpy(v11, Src, v12 + 1); + } + else + { + *v11 = *Src; + } + if ( Src != v6 ) + operator delete(Src); + v13 = a2; + *this = v11; + this[2] = v13; + } + } +} + +//----- (0050BD00) -------------------------------------------------------- +int __thiscall std::string::_M_erase(int *this, int a2, int a3) +{ + int v4; // eax + int v5; // ecx + _BYTE *Src; // edx + _BYTE *v7; // ecx + int result; // eax + + v4 = this[1]; + v5 = *this; + if ( v4 != a3 + a2 && a3 ) + { + Src = (_BYTE *)(v5 + a3 + a2); + v7 = (_BYTE *)(a2 + v5); + if ( v4 - (a3 + a2) == 1 ) + *v7 = *Src; + else + memmove(v7, Src, v4 - (a3 + a2)); + v5 = *this; + v4 = this[1]; + } + result = v4 - a3; + this[1] = result; + *(_BYTE *)(v5 + result) = 0; + return result; +} + +//----- (0050BD70) -------------------------------------------------------- +int __fastcall std::string::pop_back(_DWORD *a1) +{ + int result; // eax + + result = a1[1]; + a1[1] = result - 1; + *(_BYTE *)(*a1 + result - 1) = 0; + return result; +} + +//----- (0050BD90) -------------------------------------------------------- +_DWORD *__thiscall std::string::_M_append(_DWORD *this, _BYTE *Src, size_t Size) +{ + _DWORD *v4; // edi + size_t v5; // ecx + _DWORD *v6; // eax + unsigned int v7; // esi + unsigned int v8; // edi + _BYTE *v9; // eax + + v4 = this + 2; + v5 = this[1]; + v6 = (_DWORD *)*this; + v7 = v5 + Size; + if ( (_DWORD *)*this == v4 ) + v8 = 15; + else + v8 = this[2]; + if ( v7 > v8 ) + { + std::string::_M_mutate((int)this, v5, 0, Src, Size); + v6 = (_DWORD *)*this; + } + else if ( Size ) + { + v9 = (char *)v6 + v5; + if ( Size == 1 ) + *v9 = *Src; + else + memcpy(v9, Src, Size); + v6 = (_DWORD *)*this; + } + this[1] = v7; + *((_BYTE *)v6 + v7) = 0; + return this; +} + +//----- (0050BE30) -------------------------------------------------------- +void __thiscall std::string::_M_assign(int this, int a2) +{ + _BYTE *v2; // esi + size_t Size; // edi + unsigned int v5; // eax + _BYTE *Src; // eax + unsigned int v7; // eax + int v8; // [esp+1Ch] [ebp-30h] + unsigned int v9[8]; // [esp+2Ch] [ebp-20h] BYREF + + if ( this != a2 ) + { + v2 = *(_BYTE **)this; + Size = *(_DWORD *)(a2 + 4); + if ( this + 8 == *(_DWORD *)this ) + v5 = 15; + else + v5 = *(_DWORD *)(this + 8); + if ( v5 < Size ) + { + v8 = this + 8; + v9[0] = *(_DWORD *)(a2 + 4); + v2 = std::string::_M_create(v9, v5); + if ( v8 != *(_DWORD *)this ) + operator delete(*(void **)this); + v7 = v9[0]; + *(_DWORD *)this = v2; + *(_DWORD *)(this + 8) = v7; + if ( !Size ) + goto LABEL_9; + } + else if ( !Size ) + { +LABEL_9: + *(_DWORD *)(this + 4) = Size; + v2[Size] = 0; + return; + } + Src = *(_BYTE **)a2; + if ( Size == 1 ) + *v2 = *Src; + else + memcpy(v2, Src, Size); + v2 = *(_BYTE **)this; + goto LABEL_9; + } +} +// 50BE30: using guessed type unsigned int var_20[8]; + +//----- (0050BEF0) -------------------------------------------------------- +void *__stdcall std::string::_M_create(unsigned int *a1, unsigned int a2) +{ + unsigned int v2; // eax + unsigned int v3; // edx + + v2 = *a1; + if ( *a1 > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + if ( v2 > a2 ) + { + v3 = 2 * a2; + if ( v2 < 2 * a2 ) + { + if ( v3 > 0x3FFFFFFF ) + { + *a1 = 0x3FFFFFFF; + return operator new(0x40000000u); + } + *a1 = v3; + v2 = 2 * a2; + } + } + return operator new(v2 + 1); +} + +//----- (0050BF60) -------------------------------------------------------- +int __thiscall std::string::_M_length(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + this[1] = a2; + return result; +} + +//----- (0050BF70) -------------------------------------------------------- +size_t __thiscall std::string::_M_mutate(int this, size_t Size, int a3, _BYTE *a4, size_t a5) +{ + _BYTE *v6; // edi + unsigned int v7; // eax + _BYTE *v8; // eax + _BYTE *Block; // ecx + _BYTE *v10; // ebp + _BYTE *v11; // esi + size_t result; // eax + _BYTE *Src; // [esp+4h] [ebp-48h] + size_t v14; // [esp+14h] [ebp-38h] + size_t v15; // [esp+18h] [ebp-34h] + _BYTE *v16; // [esp+18h] [ebp-34h] + _BYTE *v17; // [esp+1Ch] [ebp-30h] + _BYTE *v18; // [esp+1Ch] [ebp-30h] + size_t v19[8]; // [esp+2Ch] [ebp-20h] BYREF + + v15 = Size + a3; + v14 = *(_DWORD *)(this + 4) - (Size + a3); + v6 = (_BYTE *)(this + 8); + v19[0] = *(_DWORD *)(this + 4) + a5 - a3; + if ( this + 8 == *(_DWORD *)this ) + v7 = 15; + else + v7 = *(_DWORD *)(this + 8); + v8 = std::string::_M_create(v19, v7); + Block = *(_BYTE **)this; + v10 = v8; + if ( Size ) + { + if ( Size == 1 ) + { + *v8 = *Block; + } + else + { + v17 = *(_BYTE **)this; + memcpy(v8, *(const void **)this, Size); + Block = v17; + } + } + if ( a4 && a5 ) + { + if ( a5 == 1 ) + { + v10[Size] = *a4; + } + else + { + v18 = Block; + memcpy(&v10[Size], a4, a5); + Block = v18; + } + } + if ( v14 ) + { + v11 = &v10[a5 + Size]; + if ( v14 == 1 ) + { + *v11 = Block[v15]; + } + else + { + Src = &Block[v15]; + v16 = Block; + memcpy(v11, Src, v14); + Block = v16; + } + } + if ( v6 != Block ) + operator delete(Block); + result = v19[0]; + *(_DWORD *)this = v10; + *(_DWORD *)(this + 8) = result; + return result; +} +// 50BF70: using guessed type size_t var_20[8]; + +//----- (0050C0C0) -------------------------------------------------------- +void *__cdecl std::string::_S_assign(_BYTE *a1, void *Val, size_t Size) +{ + void *result; // eax + + result = Val; + if ( Val == (void *)1 ) + { + *a1 = Size; + } + else if ( Val ) + { + return memset(a1, (char)Size, (size_t)Val); + } + return result; +} + +//----- (0050C100) -------------------------------------------------------- +_DWORD *__thiscall std::string::push_back(_DWORD *this, char a2) +{ + size_t v3; // esi + _DWORD *v4; // eax + unsigned int v5; // edi + unsigned int v6; // edx + _DWORD *result; // eax + + v3 = this[1]; + v4 = (_DWORD *)*this; + v5 = v3 + 1; + if ( (_DWORD *)*this == this + 2 ) + v6 = 15; + else + v6 = this[2]; + if ( v5 > v6 ) + { + std::string::_M_mutate((int)this, v3, 0, 0, 1u); + v4 = (_DWORD *)*this; + } + *((_BYTE *)v4 + v3) = a2; + result = (_DWORD *)*this; + this[1] = v5; + *((_BYTE *)result + v3 + 1) = 0; + return result; +} + +//----- (0050C180) -------------------------------------------------------- +_DWORD *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + int v3; // ebx + + result = a2; + *this = this + 2; + if ( result + 2 == (_DWORD *)*result ) + { + this[2] = a2[2]; + this[3] = a2[3]; + this[4] = a2[4]; + this[5] = a2[5]; + } + else + { + *this = *a2; + this[2] = a2[2]; + } + v3 = a2[1]; + *a2 = a2 + 2; + a2[1] = 0; + *((_BYTE *)a2 + 8) = 0; + this[1] = v3; + return result; +} + +//----- (0050C1E0) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, int a2, int a3) +{ + _BYTE *result; // eax + int v4; // ebx + int v5; // ebx + int v6; // edx + + result = (_BYTE *)a2; + *this = this + 2; + if ( result + 8 == *(_BYTE **)result ) + { + this[2] = *(_DWORD *)(a2 + 8); + this[3] = *(_DWORD *)(a2 + 12); + this[4] = *(_DWORD *)(a2 + 16); + this[5] = *(_DWORD *)(a2 + 20); + v6 = *(_DWORD *)(a2 + 4); + *(_DWORD *)(a2 + 4) = 0; + result = *(_BYTE **)a2; + this[1] = v6; + *result = 0; + } + else + { + *this = *(_DWORD *)a2; + v4 = *(_DWORD *)(a2 + 4); + *(_DWORD *)a2 = a2 + 8; + this[1] = v4; + v5 = *(_DWORD *)(a2 + 8); + *(_DWORD *)(a2 + 4) = 0; + *(_BYTE *)(a2 + 8) = 0; + this[2] = v5; + } + return result; +} + +//----- (0050C250) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, char *Str, int a3) +{ + int v4; // eax + int v6; // [esp+8h] [ebp-14h] + + *this = this + 2; + v4 = -1; + if ( Str ) + v4 = (int)&Str[strlen(Str)]; + LOBYTE(v6) = 0; + return std::string::_M_construct(this, Str, v4, v6); +} +// 50C281: variable 'v6' is possibly undefined + +//----- (0050C2A0) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _BYTE *a2, int a3, int a4) +{ + *this = this + 2; + LOBYTE(a4) = 0; + return std::string::_M_construct(this, a2, (int)&a2[a3], a4); +} + +//----- (0050C2C0) -------------------------------------------------------- +char *__thiscall std::string::basic_string(_DWORD *this, int a2) +{ + char *result; // eax + + result = (char *)(this + 2); + this[1] = 0; + *this = this + 2; + *((_BYTE *)this + 8) = 0; + return result; +} + +//----- (0050C2E0) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(char *this, int a2) +{ + _BYTE *result; // eax + char *Src; // edi + size_t Size; // esi + char v6; // dl + + result = this + 8; + *(_DWORD *)this = this + 8; + Src = *(char **)a2; + Size = *(_DWORD *)(a2 + 4); + if ( Size + *(_DWORD *)a2 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + if ( Size > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + *((_DWORD *)this + 2) = Size; + *(_DWORD *)this = result; + } + else + { + if ( Size == 1 ) + { + v6 = *Src; + *((_DWORD *)this + 1) = 1; + this[8] = v6; + this[9] = 0; + return result; + } + if ( !Size ) + { + *((_DWORD *)this + 1) = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + result = *(_BYTE **)this; + *((_DWORD *)this + 1) = Size; + result[Size] = 0; + return result; +} + +//----- (0050C390) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(char *this, int a2, int a3) +{ + _BYTE *result; // eax + size_t Size; // esi + char *Src; // edi + + result = this + 8; + *(_DWORD *)this = this + 8; + Size = *(_DWORD *)(a2 + 4); + Src = *(char **)a2; + if ( Size > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + *((_DWORD *)this + 2) = Size; + *(_DWORD *)this = result; + } + else + { + if ( Size == 1 ) + { + this[8] = *Src; + *((_DWORD *)this + 1) = 1; + this[9] = 0; + return result; + } + if ( !Size ) + { + *((_DWORD *)this + 1) = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + result = *(_BYTE **)this; + *((_DWORD *)this + 1) = Size; + result[Size] = 0; + return result; +} + +//----- (0050C430) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4) +{ + unsigned int v4; // eax + + *this = this + 2; + v4 = a2[1]; + if ( a3 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + a2[1]); + LOBYTE(a4) = 0; + return std::string::_M_construct(this, (_BYTE *)(a3 + *a2), *a2 + v4, a4); +} + +//----- (0050C480) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4) +{ + unsigned int v4; // edi + unsigned int v5; // eax + unsigned int v6; // eax + + *this = this + 2; + v4 = a4; + v5 = a2[1]; + if ( a3 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + v5); + v6 = v5 - a3; + LOBYTE(a4) = 0; + if ( v6 > v4 ) + v6 = v4; + return std::string::_M_construct(this, (_BYTE *)(a3 + *a2), a3 + *a2 + v6, a4); +} + +//----- (0050C4E0) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4, int a5) +{ + unsigned int v5; // eax + unsigned int v6; // eax + int v8; // [esp+8h] [ebp-14h] + + *this = this + 2; + v5 = a2[1]; + if ( a3 > v5 ) + std::__throw_out_of_range_fmt("%s: __pos (which is %zu) > this->size() (which is %zu)", "string::string", a3, v5); + v6 = v5 - a3; + LOBYTE(v8) = 0; + if ( v6 > a4 ) + v6 = a4; + return std::string::_M_construct(this, (_BYTE *)(a3 + *a2), a3 + *a2 + v6, v8); +} +// 50C517: variable 'v8' is possibly undefined + +//----- (0050C550) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _BYTE *a2, int a3, int a4) +{ + *this = this + 2; + LOBYTE(a4) = 0; + return std::string::_M_construct(this, a2, (int)&a2[a3], a4); +} + +//----- (0050C570) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(char *this, size_t Size, char a3, int a4) +{ + _BYTE *result; // eax + + result = this + 8; + *(_DWORD *)this = this + 8; + if ( Size > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + *((_DWORD *)this + 2) = Size; + *(_DWORD *)this = result; +LABEL_6: + memset(result, a3, Size); + result = *(_BYTE **)this; + *((_DWORD *)this + 1) = Size; + result[Size] = 0; + return result; + } + if ( !Size ) + { + *((_DWORD *)this + 1) = 0; + *result = 0; + return result; + } + if ( Size != 1 ) + goto LABEL_6; + this[8] = a3; + *((_DWORD *)this + 1) = 1; + this[9] = 0; + return result; +} + +//----- (0050C610) -------------------------------------------------------- +int __fastcall std::string::basic_string(int a1) +{ + int result; // eax + + result = a1 + 8; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)a1 = a1 + 8; + *(_BYTE *)(a1 + 8) = 0; + return result; +} + +//----- (0050C630) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string<__gnu_cxx::__normal_iterator,void>( + char *this, + char *Src, + int a3, + int a4) +{ + _BYTE *result; // eax + size_t Size; // ebx + + result = this + 8; + *(_DWORD *)this = this + 8; + Size = a3 - (_DWORD)Src; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + *((_DWORD *)this + 2) = Size; + *(_DWORD *)this = result; + } + else + { + if ( Size == 1 ) + { + this[8] = *Src; + *((_DWORD *)this + 1) = 1; + this[9] = 0; + return result; + } + if ( !Size ) + { + *((_DWORD *)this + 1) = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + result = *(_BYTE **)this; + *((_DWORD *)this + 1) = Size; + result[Size] = 0; + return result; +} + +//----- (0050C6D0) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _BYTE *a2, int a3, int a4) +{ + LOBYTE(a4) = 0; + *this = this + 2; + return std::string::_M_construct(this, a2, a3, a4); +} + +//----- (0050C6E0) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(char *this, char *Src, int a3, int a4) +{ + _BYTE *result; // eax + size_t Size; // ebx + char v7; // dl + + result = this + 8; + *(_DWORD *)this = this + 8; + if ( !Src && a3 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + Size = a3 - (_DWORD)Src; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + *((_DWORD *)this + 2) = Size; + *(_DWORD *)this = result; + } + else + { + if ( Size == 1 ) + { + v7 = *Src; + *((_DWORD *)this + 1) = 1; + this[8] = v7; + this[9] = 0; + return result; + } + if ( !Size ) + { + *((_DWORD *)this + 1) = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + result = *(_BYTE **)this; + *((_DWORD *)this + 1) = Size; + result[Size] = 0; + return result; +} + +//----- (0050C790) -------------------------------------------------------- +_DWORD *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + int v3; // ebx + + result = a2; + *this = this + 2; + if ( result + 2 == (_DWORD *)*result ) + { + this[2] = a2[2]; + this[3] = a2[3]; + this[4] = a2[4]; + this[5] = a2[5]; + } + else + { + *this = *a2; + this[2] = a2[2]; + } + v3 = a2[1]; + *a2 = a2 + 2; + a2[1] = 0; + *((_BYTE *)a2 + 8) = 0; + this[1] = v3; + return result; +} + +//----- (0050C7F0) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, int a2, int a3) +{ + _BYTE *result; // eax + int v4; // ebx + int v5; // ebx + int v6; // edx + + result = (_BYTE *)a2; + *this = this + 2; + if ( result + 8 == *(_BYTE **)result ) + { + this[2] = *(_DWORD *)(a2 + 8); + this[3] = *(_DWORD *)(a2 + 12); + this[4] = *(_DWORD *)(a2 + 16); + this[5] = *(_DWORD *)(a2 + 20); + v6 = *(_DWORD *)(a2 + 4); + *(_DWORD *)(a2 + 4) = 0; + result = *(_BYTE **)a2; + this[1] = v6; + *result = 0; + } + else + { + *this = *(_DWORD *)a2; + v4 = *(_DWORD *)(a2 + 4); + *(_DWORD *)a2 = a2 + 8; + this[1] = v4; + v5 = *(_DWORD *)(a2 + 8); + *(_DWORD *)(a2 + 4) = 0; + *(_BYTE *)(a2 + 8) = 0; + this[2] = v5; + } + return result; +} + +//----- (0050C860) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, char *Str, int a3) +{ + int v4; // eax + int v6; // [esp+8h] [ebp-14h] + + *this = this + 2; + v4 = -1; + if ( Str ) + v4 = (int)&Str[strlen(Str)]; + LOBYTE(v6) = 0; + return std::string::_M_construct(this, Str, v4, v6); +} +// 50C891: variable 'v6' is possibly undefined + +//----- (0050C8B0) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _BYTE *a2, int a3, int a4) +{ + *this = this + 2; + LOBYTE(a4) = 0; + return std::string::_M_construct(this, a2, (int)&a2[a3], a4); +} + +//----- (0050C8D0) -------------------------------------------------------- +char *__thiscall std::string::basic_string(_DWORD *this, int a2) +{ + char *result; // eax + + result = (char *)(this + 2); + this[1] = 0; + *this = this + 2; + *((_BYTE *)this + 8) = 0; + return result; +} + +//----- (0050C8F0) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(char *this, int a2) +{ + _BYTE *result; // eax + char *Src; // edi + size_t Size; // esi + char v6; // dl + + result = this + 8; + *(_DWORD *)this = this + 8; + Src = *(char **)a2; + Size = *(_DWORD *)(a2 + 4); + if ( Size + *(_DWORD *)a2 && !Src ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + if ( Size > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + *((_DWORD *)this + 2) = Size; + *(_DWORD *)this = result; + } + else + { + if ( Size == 1 ) + { + v6 = *Src; + *((_DWORD *)this + 1) = 1; + this[8] = v6; + this[9] = 0; + return result; + } + if ( !Size ) + { + *((_DWORD *)this + 1) = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + result = *(_BYTE **)this; + *((_DWORD *)this + 1) = Size; + result[Size] = 0; + return result; +} + +//----- (0050C9A0) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(char *this, int a2, int a3) +{ + _BYTE *result; // eax + size_t Size; // esi + char *Src; // edi + + result = this + 8; + *(_DWORD *)this = this + 8; + Size = *(_DWORD *)(a2 + 4); + Src = *(char **)a2; + if ( Size > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + *((_DWORD *)this + 2) = Size; + *(_DWORD *)this = result; + } + else + { + if ( Size == 1 ) + { + this[8] = *Src; + *((_DWORD *)this + 1) = 1; + this[9] = 0; + return result; + } + if ( !Size ) + { + *((_DWORD *)this + 1) = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + result = *(_BYTE **)this; + *((_DWORD *)this + 1) = Size; + result[Size] = 0; + return result; +} + +//----- (0050CA40) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4) +{ + unsigned int v4; // eax + + *this = this + 2; + v4 = a2[1]; + if ( a3 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + a2[1]); + LOBYTE(a4) = 0; + return std::string::_M_construct(this, (_BYTE *)(a3 + *a2), *a2 + v4, a4); +} + +//----- (0050CA90) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4) +{ + unsigned int v4; // edi + unsigned int v5; // eax + unsigned int v6; // eax + + *this = this + 2; + v4 = a4; + v5 = a2[1]; + if ( a3 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + v5); + v6 = v5 - a3; + LOBYTE(a4) = 0; + if ( v6 > v4 ) + v6 = v4; + return std::string::_M_construct(this, (_BYTE *)(a3 + *a2), a3 + *a2 + v6, a4); +} + +//----- (0050CAF0) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4, int a5) +{ + unsigned int v5; // eax + unsigned int v6; // eax + int v8; // [esp+8h] [ebp-14h] + + *this = this + 2; + v5 = a2[1]; + if ( a3 > v5 ) + std::__throw_out_of_range_fmt("%s: __pos (which is %zu) > this->size() (which is %zu)", "string::string", a3, v5); + v6 = v5 - a3; + LOBYTE(v8) = 0; + if ( v6 > a4 ) + v6 = a4; + return std::string::_M_construct(this, (_BYTE *)(a3 + *a2), a3 + *a2 + v6, v8); +} +// 50CB27: variable 'v8' is possibly undefined + +//----- (0050CB60) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _BYTE *a2, int a3, int a4) +{ + *this = this + 2; + LOBYTE(a4) = 0; + return std::string::_M_construct(this, a2, (int)&a2[a3], a4); +} + +//----- (0050CB80) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(char *this, size_t Size, char a3, int a4) +{ + _BYTE *result; // eax + + result = this + 8; + *(_DWORD *)this = this + 8; + if ( Size > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + *((_DWORD *)this + 2) = Size; + *(_DWORD *)this = result; +LABEL_6: + memset(result, a3, Size); + result = *(_BYTE **)this; + *((_DWORD *)this + 1) = Size; + result[Size] = 0; + return result; + } + if ( !Size ) + { + *((_DWORD *)this + 1) = 0; + *result = 0; + return result; + } + if ( Size != 1 ) + goto LABEL_6; + this[8] = a3; + *((_DWORD *)this + 1) = 1; + this[9] = 0; + return result; +} + +//----- (0050CC20) -------------------------------------------------------- +int __fastcall std::string::basic_string(int a1) +{ + int result; // eax + + result = a1 + 8; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)a1 = a1 + 8; + *(_BYTE *)(a1 + 8) = 0; + return result; +} + +//----- (0050CC40) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string<__gnu_cxx::__normal_iterator,void>( + char *this, + char *Src, + int a3, + int a4) +{ + _BYTE *result; // eax + size_t Size; // ebx + + result = this + 8; + *(_DWORD *)this = this + 8; + Size = a3 - (_DWORD)Src; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + *((_DWORD *)this + 2) = Size; + *(_DWORD *)this = result; + } + else + { + if ( Size == 1 ) + { + this[8] = *Src; + *((_DWORD *)this + 1) = 1; + this[9] = 0; + return result; + } + if ( !Size ) + { + *((_DWORD *)this + 1) = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + result = *(_BYTE **)this; + *((_DWORD *)this + 1) = Size; + result[Size] = 0; + return result; +} + +//----- (0050CCE0) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(_DWORD *this, _BYTE *a2, int a3, int a4) +{ + LOBYTE(a4) = 0; + *this = this + 2; + return std::string::_M_construct(this, a2, a3, a4); +} + +//----- (0050CCF0) -------------------------------------------------------- +_BYTE *__thiscall std::string::basic_string(char *this, char *Src, int a3, int a4) +{ + _BYTE *result; // eax + size_t Size; // ebx + char v7; // dl + + result = this + 8; + *(_DWORD *)this = this + 8; + if ( !Src && a3 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + Size = a3 - (_DWORD)Src; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xF ) + { + if ( Size > 0x3FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + result = operator new(Size + 1); + *((_DWORD *)this + 2) = Size; + *(_DWORD *)this = result; + } + else + { + if ( Size == 1 ) + { + v7 = *Src; + *((_DWORD *)this + 1) = 1; + this[8] = v7; + this[9] = 0; + return result; + } + if ( !Size ) + { + *((_DWORD *)this + 1) = 0; + *result = 0; + return result; + } + } + memcpy(result, Src, Size); + result = *(_BYTE **)this; + *((_DWORD *)this + 1) = Size; + result[Size] = 0; + return result; +} + +//----- (0050CDA0) -------------------------------------------------------- +void __fastcall std::string::~string(void **a1) +{ + if ( *a1 != a1 + 2 ) + operator delete(*a1); +} + +//----- (0050CDD0) -------------------------------------------------------- +void __fastcall std::string::~string(void **a1) +{ + if ( *a1 != a1 + 2 ) + operator delete(*a1); +} + +//----- (0050CE00) -------------------------------------------------------- +_DWORD *__thiscall std::string::operator=(_DWORD *this, _DWORD *a2) +{ + _BYTE *v3; // eax + _DWORD *v4; // ecx + int v5; // edx + int v6; // ebp + + v3 = (_BYTE *)*this; + v4 = (_DWORD *)*a2; + v5 = a2[1]; + if ( a2 + 2 != (_DWORD *)*a2 ) + { + if ( v3 == (_BYTE *)(this + 2) ) + { + *this = v4; + this[1] = v5; + this[2] = a2[2]; + } + else + { + *this = v4; + v6 = this[2]; + this[1] = v5; + this[2] = a2[2]; + if ( v3 ) + { + *a2 = v3; + a2[2] = v6; + goto LABEL_5; + } + } + *a2 = a2 + 2; + v3 = a2 + 2; + goto LABEL_5; + } + if ( v5 ) + { + if ( v5 == 1 ) + *v3 = *((_BYTE *)a2 + 8); + else + memcpy(v3, a2 + 2, a2[1]); + v3 = (_BYTE *)*this; + v5 = a2[1]; + } + this[1] = v5; + v3[v5] = 0; + v3 = (_BYTE *)*a2; +LABEL_5: + a2[1] = 0; + *v3 = 0; + return this; +} + +//----- (0050CEB0) -------------------------------------------------------- +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *Str) +{ + size_t v3; // eax + + v3 = strlen(Str); + return std::string::_M_replace(this, 0, this[1], Str, v3); +} + +//----- (0050CEF0) -------------------------------------------------------- +void *__thiscall std::string::operator=(void *this, int a2) +{ + std::string::_M_assign((int)this, a2); + return this; +} + +//----- (0050CF10) -------------------------------------------------------- +unsigned int *__thiscall std::string::operator=(unsigned int *this, char *a2, size_t a3) +{ + std::string::_M_replace(this, 0, this[1], a2, a3); + return this; +} + +//----- (0050CF50) -------------------------------------------------------- +_DWORD *__thiscall std::string::operator=(_DWORD *this, char a2) +{ + std::string::_M_replace_aux(this, 0, this[1], 1u, a2); + return this; +} + +//----- (0050CF90) -------------------------------------------------------- +int __thiscall std::string::operator[](_DWORD *this, int a2) +{ + return a2 + *this; +} + +//----- (0050CFA0) -------------------------------------------------------- +_DWORD *__thiscall std::string::operator+=(_DWORD *this, char *Str) +{ + unsigned int Size; // eax + size_t v4; // ebp + _DWORD *v5; // edx + unsigned int v6; // edi + unsigned int v7; // ecx + _BYTE *v8; // edx + _DWORD *result; // eax + + Size = strlen(Str); + v4 = this[1]; + if ( Size > 0x3FFFFFFF - v4 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v5 = (_DWORD *)*this; + v6 = Size + v4; + if ( (_DWORD *)*this == this + 2 ) + v7 = 15; + else + v7 = this[2]; + if ( v6 > v7 ) + { + std::string::_M_mutate((int)this, v4, 0, Str, Size); + v5 = (_DWORD *)*this; + } + else if ( Size ) + { + v8 = (char *)v5 + v4; + if ( Size == 1 ) + *v8 = *Str; + else + memcpy(v8, Str, Size); + v5 = (_DWORD *)*this; + } + this[1] = v6; + result = this; + *((_BYTE *)v5 + v6) = 0; + return result; +} + +//----- (0050D060) -------------------------------------------------------- +_DWORD *__thiscall std::string::operator+=(_DWORD *this, int a2) +{ + _DWORD *v3; // edi + size_t v4; // ecx + size_t v5; // edx + _BYTE *Src; // ebp + _DWORD *v7; // eax + unsigned int v8; // esi + unsigned int v9; // edi + _BYTE *v10; // eax + + v3 = this + 2; + v4 = this[1]; + v5 = *(_DWORD *)(a2 + 4); + Src = *(_BYTE **)a2; + v7 = (_DWORD *)*this; + v8 = v5 + v4; + if ( (_DWORD *)*this == v3 ) + v9 = 15; + else + v9 = this[2]; + if ( v8 > v9 ) + { + std::string::_M_mutate((int)this, v4, 0, Src, v5); + v7 = (_DWORD *)*this; + } + else if ( v5 ) + { + v10 = (char *)v7 + v4; + if ( v5 == 1 ) + *v10 = *Src; + else + memcpy(v10, Src, *(_DWORD *)(a2 + 4)); + v7 = (_DWORD *)*this; + } + this[1] = v8; + *((_BYTE *)v7 + v8) = 0; + return this; +} + +//----- (0050D100) -------------------------------------------------------- +_DWORD *__thiscall std::string::operator+=(_DWORD *this, _BYTE *Src, size_t Size) +{ + size_t v4; // edi + _DWORD *v5; // eax + unsigned int v6; // esi + unsigned int v7; // ecx + _BYTE *v8; // eax + + v4 = this[1]; + if ( Size > 0x3FFFFFFF - v4 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v5 = (_DWORD *)*this; + v6 = Size + v4; + if ( (_DWORD *)*this == this + 2 ) + v7 = 15; + else + v7 = this[2]; + if ( v6 > v7 ) + { + std::string::_M_mutate((int)this, v4, 0, Src, Size); + v5 = (_DWORD *)*this; + } + else if ( Size ) + { + v8 = (char *)v5 + v4; + if ( Size == 1 ) + *v8 = *Src; + else + memcpy(v8, Src, Size); + v5 = (_DWORD *)*this; + } + this[1] = v6; + *((_BYTE *)v5 + v6) = 0; + return this; +} + +//----- (0050D1C0) -------------------------------------------------------- +_DWORD *__thiscall std::string::operator+=(_DWORD *this, char a2) +{ + _DWORD *result; // eax + char *v3; // ecx + size_t v4; // ebx + char *v5; // edx + unsigned int v6; // esi + unsigned int v7; // ecx + int v8; // edx + _DWORD *v9; // [esp+1Ch] [ebp-10h] + + result = this; + v3 = (char *)(this + 2); + v4 = *((_DWORD *)v3 - 1); + v5 = (char *)*((_DWORD *)v3 - 2); + v6 = v4 + 1; + if ( v5 == v3 ) + v7 = 15; + else + v7 = result[2]; + if ( v6 > v7 ) + { + v9 = result; + std::string::_M_mutate((int)result, v4, 0, 0, 1u); + result = v9; + v5 = (char *)*v9; + } + v5[v4] = a2; + v8 = *result; + result[1] = v6; + *(_BYTE *)(v8 + v4 + 1) = 0; + return result; +} + +//----- (0050D240) -------------------------------------------------------- +void __thiscall std::wstring::_M_destroy(void **this, int a2) +{ + operator delete(*this); +} + +//----- (0050D260) -------------------------------------------------------- +void __fastcall std::wstring::_M_dispose(void **a1) +{ + if ( *a1 != a1 + 2 ) + operator delete(*a1); +} + +//----- (0050D290) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::_M_replace( + unsigned int *this, + int a2, + unsigned int a3, + _WORD *Src, + unsigned int a5) +{ + unsigned int v5; // eax + unsigned int v7; // edi + unsigned int v8; // ecx + bool v9; // cl + unsigned int v10; // eax + int v12; // ecx + unsigned int v13; // eax + signed int Size; // eax + signed int v15; // edx + unsigned int v16; // esi + unsigned int v17; // [esp+1Ch] [ebp-30h] + int v18; // [esp+1Ch] [ebp-30h] + int v19; // [esp+1Ch] [ebp-30h] + _WORD *v20; // [esp+20h] [ebp-2Ch] + bool v21; // [esp+24h] [ebp-28h] + signed int v22; // [esp+24h] [ebp-28h] + unsigned int v23; // [esp+28h] [ebp-24h] + unsigned int v24; // [esp+2Ch] [ebp-20h] + + v5 = this[1]; + if ( a5 > a3 + 0x1FFFFFFF - v5 ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace"); + v24 = a5 - a3; + v7 = v5 + a5 - a3; + v17 = *this; + if ( (unsigned int *)*this == this + 2 ) + v8 = 7; + else + v8 = this[2]; + if ( v8 < v7 ) + { + std::wstring::_M_mutate((int)this, a2, a3, Src, a5); + goto LABEL_12; + } + v20 = (_WORD *)(v17 + 2 * a2); + v23 = v5 - (a3 + a2); + v9 = a3 != a5 && v5 != a3 + a2; + if ( v17 <= (unsigned int)Src && (unsigned int)Src <= v17 + 2 * v5 ) + { + if ( a5 && a3 >= a5 ) + { + if ( a5 != 1 ) + { + v21 = a3 != a5 && v5 != a3 + a2; + v18 = a5; + memmove(v20, Src, 2 * a5); + if ( !v21 ) + goto LABEL_12; + goto LABEL_18; + } + *v20 = *Src; + } + if ( !v9 ) + goto LABEL_20; + v18 = a5; +LABEL_18: + if ( v23 == 1 ) + v20[v18] = v20[a3]; + else + memmove(&v20[v18], &v20[a3], 2 * v23); +LABEL_20: + if ( a3 >= a5 ) + goto LABEL_12; + v12 = a5; + v13 = (unsigned int)&v20[a3]; + if ( v13 < (unsigned int)&Src[a5] ) + { + if ( v13 > (unsigned int)Src ) + { + Size = v13 - (_DWORD)Src; + v15 = Size; + v19 = Size >> 1; + if ( Size >> 1 == 1 ) + { + *v20 = *Src; + } + else if ( v19 ) + { + v22 = Size; + memmove(v20, Src, Size); + v12 = a5; + v15 = v22; + } + v16 = a5 - v19; + if ( a5 - v19 == 1 ) + { + *(_WORD *)((char *)v20 + v15) = v20[v12]; + } + else if ( v16 ) + { + memcpy((char *)v20 + v15, &v20[v12], 2 * v16); + } + } + else if ( a5 == 1 ) + { + *v20 = Src[v24]; + } + else if ( a5 ) + { + memcpy(v20, &Src[v24], 2 * a5); + } + goto LABEL_12; + } + if ( a5 != 1 ) + { + if ( a5 ) + memmove(v20, Src, 2 * a5); + goto LABEL_12; + } +LABEL_27: + *v20 = *Src; + goto LABEL_12; + } + if ( v9 ) + { + if ( v23 == 1 ) + v20[a5] = v20[a3]; + else + memmove(&v20[a5], &v20[a3], 2 * v23); + } + if ( a5 ) + { + if ( a5 != 1 ) + { + memcpy(v20, Src, 2 * a5); + goto LABEL_12; + } + goto LABEL_27; + } +LABEL_12: + v10 = *this; + this[1] = v7; + *(_WORD *)(v10 + 2 * v7) = 0; + return this; +} + +//----- (0050D5E0) -------------------------------------------------------- +int __cdecl std::wstring::_S_compare(int a1, int a2) +{ + return a1 - a2; +} + +//----- (0050D5F0) -------------------------------------------------------- +int __thiscall std::wstring::_M_capacity(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + this[2] = a2; + return result; +} + +//----- (0050D600) -------------------------------------------------------- +int __thiscall std::wstring::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (0050D610) -------------------------------------------------------- +int __thiscall std::wstring::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (0050D620) -------------------------------------------------------- +int __thiscall std::wstring::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (0050D630) -------------------------------------------------------- +int __thiscall std::wstring::_Alloc_hider::_Alloc_hider(_DWORD *this, int a2, int a3) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (0050D640) -------------------------------------------------------- +int __thiscall std::wstring::_M_construct(_DWORD *this, unsigned int a2, __int16 a3) +{ + _WORD *v4; // ecx + int result; // eax + _WORD *v6; // eax + _WORD *v7; // edx + unsigned int v8; // eax + + if ( a2 > 7 ) + { + if ( a2 > 0x1FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + v6 = operator new(2 * a2 + 2); + this[2] = a2; + *this = v6; + v4 = v6; + } + else + { + v4 = (_WORD *)*this; + if ( !a2 ) + goto LABEL_3; + if ( a2 == 1 ) + { + *v4 = a3; + goto LABEL_3; + } + } + v7 = v4; + v8 = a2; + do + { + *v7++ = a3; + --v8; + } + while ( v8 ); +LABEL_3: + result = 0; + this[1] = a2; + v4[a2] = 0; + return result; +} + +//----- (0050D6C0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::_M_construct<__gnu_cxx::__normal_iterator>( + _DWORD *this, + _WORD *Src, + int a3, + int a4) +{ + size_t Size; // ebx + int v6; // edi + _WORD *result; // eax + + Size = a3 - (_DWORD)Src; + v6 = (a3 - (int)Src) >> 1; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xE ) + { + if ( Size > 0x3FFFFFFE ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + if ( (unsigned int)(v6 + 1) > 0x3FFFFFFF ) + std::__throw_bad_alloc(); + result = operator new(Size + 2); + this[2] = v6; + *this = result; + } + else + { + result = (_WORD *)*this; + } + if ( v6 == 1 ) + { + *result = *Src; + } + else if ( v6 ) + { + memcpy(result, Src, Size); + result = (_WORD *)*this; + } + this[1] = v6; + *(_WORD *)((char *)result + Size) = 0; + return result; +} + +//----- (0050D760) -------------------------------------------------------- +_WORD *__thiscall std::wstring::_M_construct<__gnu_cxx::__normal_iterator>( + _DWORD *this, + _WORD *Src, + int a3, + int a4) +{ + size_t Size; // ebx + int v6; // edi + _WORD *result; // eax + + Size = a3 - (_DWORD)Src; + v6 = (a3 - (int)Src) >> 1; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xE ) + { + if ( Size > 0x3FFFFFFE ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + if ( (unsigned int)(v6 + 1) > 0x3FFFFFFF ) + std::__throw_bad_alloc(); + result = operator new(Size + 2); + this[2] = v6; + *this = result; + } + else + { + result = (_WORD *)*this; + } + if ( v6 == 1 ) + { + *result = *Src; + } + else if ( v6 ) + { + memcpy(result, Src, Size); + result = (_WORD *)*this; + } + this[1] = v6; + *(_WORD *)((char *)result + Size) = 0; + return result; +} + +//----- (0050D800) -------------------------------------------------------- +_WORD *__thiscall std::wstring::_M_construct(_DWORD *this, _WORD *Src, int a3, int a4) +{ + size_t Size; // ebx + int v6; // ebp + _WORD *result; // eax + + if ( !Src && a3 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + Size = a3 - (_DWORD)Src; + v6 = (a3 - (int)Src) >> 1; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xE ) + { + if ( Size > 0x3FFFFFFE ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + if ( (unsigned int)(v6 + 1) > 0x3FFFFFFF ) + std::__throw_bad_alloc(); + result = operator new(Size + 2); + this[2] = v6; + *this = result; + } + else + { + result = (_WORD *)*this; + } + if ( v6 == 1 ) + { + *result = *Src; + } + else if ( v6 ) + { + memcpy(result, Src, Size); + result = (_WORD *)*this; + } + this[1] = v6; + *(_WORD *)((char *)result + Size) = 0; + return result; +} + +//----- (0050D8C0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::_M_construct(_DWORD *this, _WORD *Src, int a3) +{ + int v4; // ebp + _WORD *result; // eax + unsigned int v6; // edx + unsigned int v7[8]; // [esp+1Ch] [ebp-20h] BYREF + + if ( !Src && a3 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v4 = (a3 - (int)Src) >> 1; + v7[0] = v4; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xE ) + { + result = std::wstring::_M_create(v7, 0); + *this = result; + this[2] = v7[0]; + } + else + { + result = (_WORD *)*this; + } + if ( v4 == 1 ) + { + *result = *Src; + } + else if ( v4 ) + { + memcpy(result, Src, a3 - (_DWORD)Src); + result = (_WORD *)*this; + } + v6 = v7[0]; + this[1] = v7[0]; + result[v6] = 0; + return result; +} +// 50D8C0: using guessed type unsigned int var_20[8]; + +//----- (0050D960) -------------------------------------------------------- +_WORD *__thiscall std::wstring::_M_construct(_DWORD *this, _WORD *Src, int a3) +{ + int v4; // ebp + _WORD *result; // eax + unsigned int v6; // edx + unsigned int v7[8]; // [esp+1Ch] [ebp-20h] BYREF + + if ( !Src && a3 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v4 = (a3 - (int)Src) >> 1; + v7[0] = v4; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xE ) + { + result = std::wstring::_M_create(v7, 0); + *this = result; + this[2] = v7[0]; + } + else + { + result = (_WORD *)*this; + } + if ( v4 == 1 ) + { + *result = *Src; + } + else if ( v4 ) + { + memcpy(result, Src, a3 - (_DWORD)Src); + result = (_WORD *)*this; + } + v6 = v7[0]; + this[1] = v7[0]; + result[v6] = 0; + return result; +} +// 50D960: using guessed type unsigned int var_20[8]; + +//----- (0050DA00) -------------------------------------------------------- +_WORD *__thiscall std::wstring::_M_construct(_DWORD *this, _WORD *Src, int a3, int a4) +{ + size_t Size; // ebx + int v6; // ebp + _WORD *result; // eax + + if ( !Src && a3 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + Size = a3 - (_DWORD)Src; + v6 = (a3 - (int)Src) >> 1; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xE ) + { + if ( Size > 0x3FFFFFFE ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + if ( (unsigned int)(v6 + 1) > 0x3FFFFFFF ) + std::__throw_bad_alloc(); + result = operator new(Size + 2); + this[2] = v6; + *this = result; + } + else + { + result = (_WORD *)*this; + } + if ( v6 == 1 ) + { + *result = *Src; + } + else if ( v6 ) + { + memcpy(result, Src, Size); + result = (_WORD *)*this; + } + this[1] = v6; + *(_WORD *)((char *)result + Size) = 0; + return result; +} + +//----- (0050DAC0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::_M_construct(_DWORD *this, _WORD *Src, int a3) +{ + int v4; // ebp + _WORD *result; // eax + unsigned int v6; // edx + unsigned int v7[8]; // [esp+1Ch] [ebp-20h] BYREF + + if ( !Src && a3 ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v4 = (a3 - (int)Src) >> 1; + v7[0] = v4; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xE ) + { + result = std::wstring::_M_create(v7, 0); + *this = result; + this[2] = v7[0]; + } + else + { + result = (_WORD *)*this; + } + if ( v4 == 1 ) + { + *result = *Src; + } + else if ( v4 ) + { + memcpy(result, Src, a3 - (_DWORD)Src); + result = (_WORD *)*this; + } + v6 = v7[0]; + this[1] = v7[0]; + result[v6] = 0; + return result; +} +// 50DAC0: using guessed type unsigned int var_20[8]; + +//----- (0050DB60) -------------------------------------------------------- +int __fastcall std::wstring::_M_local_data(int a1) +{ + return a1 + 8; +} + +//----- (0050DB70) -------------------------------------------------------- +int __thiscall std::wstring::_M_set_length(int *this, int a2) +{ + int result; // eax + int v3; // edx + + result = a2; + v3 = *this; + this[1] = a2; + *(_WORD *)(v3 + 2 * a2) = 0; + return result; +} + +//----- (0050DB90) -------------------------------------------------------- +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size) +{ + int result; // eax + int v4; // ecx + + result = Size - (_DWORD)Src; + v4 = (int)(Size - (_DWORD)Src) >> 1; + if ( v4 == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( v4 ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (0050DBD0) -------------------------------------------------------- +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size) +{ + int result; // eax + int v4; // ecx + + result = Size - (_DWORD)Src; + v4 = (int)(Size - (_DWORD)Src) >> 1; + if ( v4 == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( v4 ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (0050DC10) -------------------------------------------------------- +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size) +{ + int result; // eax + int v4; // ecx + + result = Size - (_DWORD)Src; + v4 = (int)(Size - (_DWORD)Src) >> 1; + if ( v4 == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( v4 ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (0050DC50) -------------------------------------------------------- +int __cdecl std::wstring::_S_copy_chars(_WORD *a1, unsigned __int16 *Src, size_t Size) +{ + int result; // eax + int v4; // ecx + + result = Size - (_DWORD)Src; + v4 = (int)(Size - (_DWORD)Src) >> 1; + if ( v4 == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( v4 ) + { + return (int)memcpy(a1, Src, Size - (_DWORD)Src); + } + return result; +} + +//----- (0050DC90) -------------------------------------------------------- +void __fastcall std::wstring::shrink_to_fit(_DWORD *a1) +{ + unsigned int v1; // eax + + if ( (_DWORD *)*a1 == a1 + 2 ) + v1 = 7; + else + v1 = a1[2]; + if ( a1[1] < v1 ) + std::wstring::reserve((int)a1, 0); +} + +//----- (0050DD30) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::_M_replace_aux(_DWORD *this, int a2, int a3, unsigned int a4, __int16 a5) +{ + int v6; // edx + unsigned int v7; // ebx + _DWORD *v8; // ecx + unsigned int v9; // edi + unsigned int v10; // ebp + int v11; // edx + char *v12; // ebp + char *Src; // eax + char *v14; // ebp + _WORD *v15; // eax + + v6 = this[1]; + v7 = a4; + if ( a4 > a3 + 0x1FFFFFFF - v6 ) + std::__throw_length_error((std::length_error *)"basic_string::_M_replace_aux"); + v8 = (_DWORD *)*this; + v9 = v6 + a4 - a3; + if ( (_DWORD *)*this == this + 2 ) + v10 = 7; + else + v10 = this[2]; + if ( v10 < v9 ) + { + std::wstring::_M_mutate((int)this, a2, a3, 0, a4); + v8 = (_DWORD *)*this; + if ( !a4 ) + goto LABEL_12; + } + else + { + v11 = v6 - (a3 + a2); + if ( !v11 || a3 == a4 ) + { +LABEL_9: + if ( !a4 ) + goto LABEL_12; + goto LABEL_10; + } + v12 = (char *)v8 + 2 * a2; + Src = &v12[2 * a3]; + v14 = &v12[2 * a4]; + if ( v11 != 1 ) + { + memmove(v14, Src, 2 * v11); + v8 = (_DWORD *)*this; + goto LABEL_9; + } + *(_WORD *)v14 = *(_WORD *)Src; + if ( !a4 ) + goto LABEL_12; + } +LABEL_10: + v15 = (_WORD *)v8 + a2; + if ( a4 == 1 ) + { + *v15 = a5; + } + else + { + do + { + *v15++ = a5; + --v7; + } + while ( v7 ); + } +LABEL_12: + this[1] = v9; + *((_WORD *)v8 + v9) = 0; + return this; +} + +//----- (0050DE60) -------------------------------------------------------- +int __fastcall std::wstring::_M_get_allocator(int a1) +{ + return a1; +} + +//----- (0050DE70) -------------------------------------------------------- +int __thiscall std::wstring::_M_construct_aux_2(_DWORD *this, unsigned int a2, __int16 a3) +{ + _WORD *v4; // ecx + int result; // eax + _WORD *v6; // eax + _WORD *v7; // edx + unsigned int v8; // eax + + if ( a2 > 7 ) + { + if ( a2 > 0x1FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + v6 = operator new(2 * a2 + 2); + this[2] = a2; + *this = v6; + v4 = v6; + } + else + { + v4 = (_WORD *)*this; + if ( !a2 ) + goto LABEL_3; + if ( a2 == 1 ) + { + *v4 = a3; + goto LABEL_3; + } + } + v7 = v4; + v8 = a2; + do + { + *v7++ = a3; + --v8; + } + while ( v8 ); +LABEL_3: + result = 0; + this[1] = a2; + v4[a2] = 0; + return result; +} + +//----- (0050DEF0) -------------------------------------------------------- +int __thiscall std::wstring::at(_DWORD *this, unsigned int a2) +{ + if ( a2 >= this[1] ) + std::__throw_out_of_range_fmt("basic_string::at: __n (which is %zu) >= this->size() (which is %zu)", a2, this[1]); + return *this + 2 * a2; +} + +//----- (0050DF20) -------------------------------------------------------- +int __fastcall std::wstring::end(_DWORD *a1) +{ + return *a1 + 2 * a1[1]; +} + +//----- (0050DF30) -------------------------------------------------------- +int __fastcall std::wstring::back(_DWORD *a1) +{ + return *a1 + 2 * a1[1] - 2; +} + +//----- (0050DF40) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::rend(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2; + return result; +} + +//----- (0050DF50) -------------------------------------------------------- +_WORD *__thiscall std::wstring::swap(_DWORD *this, _DWORD *a2) +{ + _WORD *result; // eax + _WORD *v3; // edi + _WORD *v4; // esi + _WORD *v5; // edx + int v6; // ebp + int v7; // edx + int v8; // edi + int v9; // edx + int v10; // ebp + int v11; // edi + int v12; // [esp+0h] [ebp-28h] + int v13; // [esp+0h] [ebp-28h] + int v14; // [esp+4h] [ebp-24h] + + result = a2; + if ( this != a2 ) + { + v3 = (_WORD *)*this; + v4 = (_WORD *)*a2; + v5 = a2 + 2; + if ( this + 2 == (_DWORD *)*this ) + { + v8 = a2[1]; + if ( v5 == v4 ) + { + if ( this[1] ) + { + if ( !v8 ) + { + a2[2] = this[2]; + a2[3] = this[3]; + a2[4] = this[4]; + a2[5] = this[5]; + a2[1] = this[1]; + result = (_WORD *)*this; + this[1] = 0; + *result = 0; + return result; + } + v10 = a2[2]; + v11 = a2[3]; + v13 = a2[4]; + v14 = a2[5]; + a2[2] = this[2]; + a2[3] = this[3]; + a2[4] = this[4]; + a2[5] = this[5]; + this[2] = v10; + this[4] = v13; + this[3] = v11; + this[5] = v14; + v8 = a2[1]; + v9 = this[1]; + } + else + { + if ( v8 ) + { + this[2] = a2[2]; + this[3] = a2[3]; + this[4] = a2[4]; + this[5] = a2[5]; + this[1] = a2[1]; + a2[1] = 0; + result = (_WORD *)*a2; + *(_WORD *)*a2 = 0; + return result; + } + v9 = 0; + } + } + else + { + v12 = a2[2]; + a2[2] = this[2]; + a2[3] = this[3]; + a2[4] = this[4]; + a2[5] = this[5]; + *this = v4; + *a2 = v5; + v9 = this[1]; + this[2] = v12; + } + } + else + { + v6 = this[2]; + if ( v5 == v4 ) + { + this[2] = a2[2]; + this[3] = a2[3]; + this[4] = a2[4]; + this[5] = a2[5]; + *a2 = v3; + *this = this + 2; + } + else + { + v7 = a2[2]; + *this = v4; + *a2 = v3; + this[2] = v7; + } + v8 = a2[1]; + v9 = this[1]; + a2[2] = v6; + } + this[1] = v8; + a2[1] = v9; + } + return result; +} + +//----- (0050E0D0) -------------------------------------------------------- +int __fastcall std::wstring::begin(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (0050E0E0) -------------------------------------------------------- +_WORD *__fastcall std::wstring::clear(int a1) +{ + _WORD *result; // eax + + result = *(_WORD **)a1; + *(_DWORD *)(a1 + 4) = 0; + *result = 0; + return result; +} + +//----- (0050E0F0) -------------------------------------------------------- +char *__thiscall std::wstring::erase(int *this, char *a2) +{ + int v3; // edx + int v4; // eax + char *v5; // ecx + int v6; // eax + char *v7; // edi + int v8; // esi + int v9; // ebp + + v3 = *this; + v4 = this[1]; + v5 = a2; + v6 = v4 - 1; + v7 = &a2[-v3]; + v8 = (int)&a2[-v3] >> 1; + v9 = v6 - v8; + if ( v6 != v8 ) + { + if ( v9 == 1 ) + { + *(_WORD *)a2 = *((_WORD *)a2 + 1); + } + else + { + memmove(a2, a2 + 2, 2 * v9); + v3 = *this; + v6 = this[1] - 1; + v5 = &v7[*this]; + } + } + this[1] = v6; + *(_WORD *)(v3 + 2 * v6) = 0; + return v5; +} + +//----- (0050E160) -------------------------------------------------------- +_WORD *__thiscall std::wstring::erase(int *this, _WORD *a2, int a3) +{ + int v4; // esi + int v5; // edi + int v6; // ecx + + v4 = (int)a2 - *this; + v5 = *this + 2 * this[1]; + v6 = v4 >> 1; + if ( a3 == v5 ) + { + this[1] = v6; + *a2 = 0; + return a2; + } + else + { + std::wstring::_M_erase(this, v6, (a3 - (int)a2) >> 1); + return (_WORD *)(v4 + *this); + } +} + +//----- (0050E1D0) -------------------------------------------------------- +int __thiscall std::wstring::erase(int *this, int a2) +{ + int v3; // ebx + + v3 = a2 - *this; + std::wstring::_M_erase(this, v3 >> 1, 1); + return v3 + *this; +} + +//----- (0050E200) -------------------------------------------------------- +_WORD *__thiscall std::wstring::erase(int *this, _WORD *a2, int a3) +{ + int v4; // esi + int v5; // edi + int v6; // ecx + + v4 = (int)a2 - *this; + v5 = *this + 2 * this[1]; + v6 = v4 >> 1; + if ( a3 == v5 ) + { + this[1] = v6; + *a2 = 0; + return a2; + } + else + { + std::wstring::_M_erase(this, v6, (a3 - (int)a2) >> 1); + return (_WORD *)(v4 + *this); + } +} + +//----- (0050E270) -------------------------------------------------------- +int *__thiscall std::wstring::erase(int *this, unsigned int a2, unsigned int a3) +{ + int *result; // eax + unsigned int v4; // edx + unsigned int v5; // edx + int v6; // edx + + result = this; + v4 = this[1]; + if ( a2 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::erase", + a2, + v4); + if ( a3 == -1 ) + { + v6 = *this; + this[1] = a2; + *(_WORD *)(v6 + 2 * a2) = 0; + } + else if ( a3 ) + { + v5 = v4 - a2; + if ( v5 > a3 ) + v5 = a3; + std::wstring::_M_erase(this, a2, v5); + return this; + } + return result; +} + +//----- (0050E2F0) -------------------------------------------------------- +int __fastcall std::wstring::front(int a1) +{ + return *(_DWORD *)a1; +} + +//----- (0050E300) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::append(_DWORD *this, wchar_t *String) +{ + unsigned int v3; // eax + int v4; // ecx + _DWORD *v5; // edx + unsigned int v6; // edi + unsigned int v7; // ebp + _WORD *v8; // ecx + + v3 = wcslen(String); + v4 = this[1]; + if ( v3 > 0x1FFFFFFF - v4 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v5 = (_DWORD *)*this; + v6 = v4 + v3; + if ( (_DWORD *)*this == this + 2 ) + v7 = 7; + else + v7 = this[2]; + if ( v6 > v7 ) + { + std::wstring::_M_mutate((int)this, this[1], 0, String, v3); + v5 = (_DWORD *)*this; + } + else if ( v3 ) + { + v8 = (_WORD *)v5 + v4; + if ( v3 == 1 ) + { + *v8 = *String; + } + else + { + memcpy(v8, String, 2 * v3); + v5 = (_DWORD *)*this; + } + } + this[1] = v6; + *((_WORD *)v5 + v6) = 0; + return this; +} + +//----- (0050E3C0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::append(_DWORD *this, _WORD *Src, unsigned int a3) +{ + int v4; // ecx + _DWORD *v5; // edx + unsigned int v6; // esi + unsigned int v7; // edi + _WORD *v8; // ecx + + v4 = this[1]; + if ( a3 > 0x1FFFFFFF - v4 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v5 = (_DWORD *)*this; + v6 = a3 + v4; + if ( (_DWORD *)*this == this + 2 ) + v7 = 7; + else + v7 = this[2]; + if ( v6 > v7 ) + { + std::wstring::_M_mutate((int)this, v4, 0, Src, a3); + v5 = (_DWORD *)*this; + } + else if ( a3 ) + { + v8 = (_WORD *)v5 + v4; + if ( a3 == 1 ) + { + *v8 = *Src; + } + else + { + memcpy(v8, Src, 2 * a3); + v5 = (_DWORD *)*this; + } + } + this[1] = v6; + *((_WORD *)v5 + v6) = 0; + return this; +} + +//----- (0050E480) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::append(_DWORD *this, int a2) +{ + _DWORD *v3; // edi + int v4; // ecx + int v5; // eax + _WORD *v6; // ebp + _DWORD *v7; // edx + unsigned int v8; // esi + unsigned int v9; // edi + _WORD *v10; // ecx + + v3 = this + 2; + v4 = this[1]; + v5 = *(_DWORD *)(a2 + 4); + v6 = *(_WORD **)a2; + v7 = (_DWORD *)*this; + v8 = v5 + v4; + if ( (_DWORD *)*this == v3 ) + v9 = 7; + else + v9 = this[2]; + if ( v8 > v9 ) + { + std::wstring::_M_mutate((int)this, v4, 0, v6, v5); + v7 = (_DWORD *)*this; + } + else if ( v5 ) + { + v10 = (_WORD *)v7 + v4; + if ( v5 == 1 ) + { + *v10 = *v6; + } + else + { + memcpy(v10, *(const void **)a2, 2 * v5); + v7 = (_DWORD *)*this; + } + } + this[1] = v8; + *((_WORD *)v7 + v8) = 0; + return this; +} + +//----- (0050E520) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::append(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4) +{ + int v5; // eax + _WORD *Src; // ebp + int v7; // ecx + _DWORD *v8; // edx + unsigned int v9; // esi + unsigned int v10; // edi + _WORD *v11; // ecx + + v5 = a4; + if ( a2[1] - a3 <= a4 ) + v5 = a2[1] - a3; + if ( a3 > a2[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::append", + a3, + a2[1]); + Src = (_WORD *)(*a2 + 2 * a3); + v7 = this[1]; + v8 = (_DWORD *)*this; + v9 = v5 + v7; + if ( (_DWORD *)*this == this + 2 ) + v10 = 7; + else + v10 = this[2]; + if ( v9 > v10 ) + { + std::wstring::_M_mutate((int)this, this[1], 0, Src, v5); + v8 = (_DWORD *)*this; + } + else if ( v5 ) + { + v11 = (_WORD *)v8 + v7; + if ( v5 == 1 ) + { + *v11 = *Src; + } + else + { + memcpy(v11, Src, 2 * v5); + v8 = (_DWORD *)*this; + } + } + this[1] = v9; + *((_WORD *)v8 + v9) = 0; + return this; +} + +//----- (0050E600) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::append(_DWORD *this, _WORD *Src, unsigned int a3) +{ + int v4; // ecx + _DWORD *v5; // edx + unsigned int v6; // esi + unsigned int v7; // ebp + _WORD *v8; // ecx + + v4 = this[1]; + if ( a3 > 0x1FFFFFFF - v4 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v5 = (_DWORD *)*this; + v6 = a3 + v4; + if ( (_DWORD *)*this == this + 2 ) + v7 = 7; + else + v7 = this[2]; + if ( v6 > v7 ) + { + std::wstring::_M_mutate((int)this, v4, 0, Src, a3); + v5 = (_DWORD *)*this; + } + else if ( a3 ) + { + v8 = (_WORD *)v5 + v4; + if ( a3 == 1 ) + { + *v8 = *Src; + } + else + { + memcpy(v8, Src, 2 * a3); + v5 = (_DWORD *)*this; + } + } + this[1] = v6; + *((_WORD *)v5 + v6) = 0; + return this; +} + +//----- (0050E6C0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::append(_DWORD *this, unsigned int a2, __int16 a3) +{ + return std::wstring::_M_replace_aux(this, this[1], 0, a2, a3); +} + +//----- (0050E6F0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::assign(_DWORD *this, _DWORD *a2) +{ + _WORD *v3; // eax + _DWORD *v4; // edi + _WORD *v5; // ecx + int v6; // edx + int v7; // ebp + int v9; // edi + int v10; // [esp+1Ch] [ebp-20h] + + v3 = (_WORD *)*this; + v4 = (_DWORD *)*a2; + v5 = a2 + 2; + v6 = a2[1]; + if ( (_DWORD *)*a2 != a2 + 2 ) + { + v10 = a2[2]; + if ( v3 == (_WORD *)(this + 2) ) + { + *this = v4; + this[1] = v6; + this[2] = v10; + } + else + { + this[1] = v6; + v7 = this[2]; + *this = v4; + this[2] = v10; + if ( v3 ) + { + *a2 = v3; + a2[2] = v7; + goto LABEL_5; + } + } + *a2 = v5; + v3 = a2 + 2; + goto LABEL_5; + } + v9 = v6; + if ( v6 ) + { + if ( v6 == 1 ) + { + *v3 = *((_WORD *)a2 + 4); + v9 = 1; + } + else + { + memcpy(v3, a2 + 2, 2 * v6); + v6 = a2[1]; + v3 = (_WORD *)*this; + v5 = (_WORD *)*a2; + v9 = v6; + } + } + this[1] = v6; + v3[v9] = 0; + v3 = v5; +LABEL_5: + a2[1] = 0; + *v3 = 0; + return this; +} + +//----- (0050E7B0) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::assign(unsigned int *this, wchar_t *String) +{ + unsigned int v3; // eax + + v3 = wcslen(String); + return std::wstring::_M_replace(this, 0, this[1], String, v3); +} + +//----- (0050E7F0) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::assign(unsigned int *this, _WORD *a2, int a3) +{ + return std::wstring::_M_replace(this, 0, this[1], a2, a3); +} + +//----- (0050E820) -------------------------------------------------------- +void *__thiscall std::wstring::assign(void *this, int a2) +{ + std::wstring::_M_assign((int)this, a2); + return this; +} + +//----- (0050E840) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::assign(unsigned int *this, _DWORD *a2, unsigned int a3, unsigned int a4) +{ + unsigned int v4; // eax + + v4 = a2[1] - a3; + if ( v4 > a4 ) + v4 = a4; + if ( a3 > a2[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::assign", + a3, + a2[1]); + return std::wstring::_M_replace(this, 0, this[1], (_WORD *)(*a2 + 2 * a3), v4); +} + +//----- (0050E8B0) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::assign(unsigned int *this, _WORD *a2, int a3) +{ + return std::wstring::_M_replace(this, 0, this[1], a2, a3); +} + +//----- (0050E8E0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::assign(_DWORD *this, unsigned int a2, __int16 a3) +{ + return std::wstring::_M_replace_aux(this, 0, this[1], a2, a3); +} + +//----- (0050E910) -------------------------------------------------------- +unsigned int __thiscall std::wstring::insert(unsigned int *this, int a2, _WORD *a3, int a4) +{ + int v5; // esi + unsigned int v6; // ecx + + v5 = a2 - *this; + v6 = this[1]; + if ( v5 >> 1 > v6 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v5 >> 1, + v6); + std::wstring::_M_replace(this, v5 >> 1, 0, a3, (2 * a4) >> 1); + return v5 + *this; +} + +//----- (0050E980) -------------------------------------------------------- +int __thiscall std::wstring::insert(_DWORD *this, int a2, unsigned int a3, __int16 a4) +{ + int v5; // ebx + + v5 = a2 - *this; + std::wstring::_M_replace_aux(this, v5 >> 1, 0, a3, a4); + return v5 + *this; +} + +//----- (0050E9D0) -------------------------------------------------------- +int __thiscall std::wstring::insert(_DWORD *this, int a2, __int16 a3) +{ + int v4; // ebx + + v4 = a2 - *this; + std::wstring::_M_replace_aux(this, v4 >> 1, 0, 1u, a3); + return v4 + *this; +} + +//----- (0050EA20) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::insert(unsigned int *this, int a2, _WORD *a3, int a4) +{ + unsigned int v4; // eax + + v4 = (int)(a2 - *this) >> 1; + if ( v4 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v4, + this[1]); + return std::wstring::_M_replace(this, v4, 0, a3, a4); +} + +//----- (0050EA80) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::insert(_DWORD *this, int a2, unsigned int a3, __int16 a4) +{ + return std::wstring::_M_replace_aux(this, (a2 - *this) >> 1, 0, a3, a4); +} + +//----- (0050EAC0) -------------------------------------------------------- +int __thiscall std::wstring::insert(_DWORD *this, int a2, __int16 a3) +{ + int v4; // ebx + + v4 = a2 - *this; + std::wstring::_M_replace_aux(this, v4 >> 1, 0, 1u, a3); + return v4 + *this; +} + +//----- (0050EB10) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::insert(unsigned int *this, unsigned int a2, wchar_t *String) +{ + unsigned int v4; // eax + + v4 = wcslen(String); + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::wstring::_M_replace(this, a2, 0, String, v4); +} + +//----- (0050EB80) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::insert(unsigned int *this, unsigned int a2, _WORD *a3, int a4) +{ + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::wstring::_M_replace(this, a2, 0, a3, a4); +} + +//----- (0050EBE0) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::insert(unsigned int *this, unsigned int a2, int a3) +{ + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::wstring::_M_replace(this, a2, 0, *(_WORD **)a3, *(_DWORD *)(a3 + 4)); +} + +//----- (0050EC40) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::insert( + unsigned int *this, + unsigned int a2, + _DWORD *a3, + unsigned int a4, + unsigned int a5) +{ + unsigned int v5; // eax + + v5 = a5; + if ( a3[1] - a4 <= a5 ) + v5 = a3[1] - a4; + if ( a4 > a3[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::insert", + a4, + a3[1]); + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::wstring::_M_replace(this, a2, 0, (_WORD *)(*a3 + 2 * a4), v5); +} + +//----- (0050ECD0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::insert(_DWORD *this, unsigned int a2, unsigned int a3, __int16 a4) +{ + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::insert", + a2, + this[1]); + return std::wstring::_M_replace_aux(this, a2, 0, a3, a4); +} + +//----- (0050ED30) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::insert<__gnu_cxx::__normal_iterator>( + unsigned int *this, + int a2, + _WORD *a3, + int a4) +{ + unsigned int v4; // eax + + v4 = (int)(a2 - *this) >> 1; + if ( v4 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v4, + this[1]); + return std::wstring::_M_replace(this, v4, 0, a3, (a4 - (int)a3) >> 1); +} + +//----- (0050EDA0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::rbegin(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + + result = this; + *this = *a2 + 2 * a2[1]; + return result; +} + +//----- (0050EDC0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::resize(int *this, unsigned int a2) +{ + unsigned int v2; // edx + _DWORD *result; // eax + int v4; // edx + + v2 = this[1]; + result = (_DWORD *)a2; + if ( a2 > v2 ) + return std::wstring::_M_replace_aux(this, v2, 0, a2 - v2, 0); + if ( a2 < v2 ) + { + v4 = *this; + this[1] = a2; + *(_WORD *)(v4 + 2 * a2) = 0; + } + return result; +} + +//----- (0050EE10) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::resize(int *this, unsigned int a2, __int16 a3) +{ + unsigned int v3; // edx + _DWORD *result; // eax + int v5; // edx + + v3 = this[1]; + result = (_DWORD *)a2; + if ( v3 < a2 ) + return std::wstring::_M_replace_aux(this, v3, 0, a2 - v3, a3); + if ( v3 > a2 ) + { + v5 = *this; + this[1] = a2; + *(_WORD *)(v5 + 2 * a2) = 0; + } + return result; +} + +//----- (0050EE70) -------------------------------------------------------- +int __thiscall std::wstring::_M_data(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + *this = a2; + return result; +} + +//----- (0050EE80) -------------------------------------------------------- +int __cdecl std::wstring::_S_copy(_WORD *a1, unsigned __int16 *Src, size_t Size) +{ + int result; // eax + + result = Size; + if ( Size == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( Size ) + { + return (int)memcpy(a1, Src, 2 * Size); + } + return result; +} + +//----- (0050EEC0) -------------------------------------------------------- +int __cdecl std::wstring::_S_move(_WORD *a1, unsigned __int16 *Src, size_t Size) +{ + int result; // eax + + result = Size; + if ( Size == 1 ) + { + result = *Src; + *a1 = result; + } + else if ( Size ) + { + return (int)memmove(a1, Src, 2 * Size); + } + return result; +} + +//----- (0050EF00) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5) +{ + unsigned int v5; // edx + unsigned int v6; // eax + + v5 = (int)(a2 - *this) >> 1; + v6 = (a3 - a2) >> 1; + if ( v6 > this[1] - v5 ) + v6 = this[1] - v5; + if ( v5 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v5, + this[1]); + return std::wstring::_M_replace(this, v5, v6, a4, (a5 - (int)a4) >> 1); +} + +//----- (0050EF70) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5) +{ + unsigned int v5; // edx + unsigned int v6; // eax + + v5 = (int)(a2 - *this) >> 1; + v6 = (a3 - a2) >> 1; + if ( v6 > this[1] - v5 ) + v6 = this[1] - v5; + if ( v5 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v5, + this[1]); + return std::wstring::_M_replace(this, v5, v6, a4, (a5 - (int)a4) >> 1); +} + +//----- (0050EFE0) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, int a4) +{ + unsigned int v4; // edx + unsigned int v5; // eax + + v4 = (int)(a2 - *this) >> 1; + v5 = (a3 - a2) >> 1; + if ( v5 > this[1] - v4 ) + v5 = this[1] - v4; + if ( v4 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v4, + this[1]); + return std::wstring::_M_replace(this, v4, v5, *(_WORD **)a4, *(_DWORD *)(a4 + 4)); +} + +//----- (0050F050) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, wchar_t *String) +{ + unsigned int v5; // ebp + unsigned int v6; // ecx + unsigned int v7; // edx + unsigned int v8; // eax + + v5 = this[1]; + v6 = wcslen(String); + v7 = (int)(a2 - *this) >> 1; + v8 = (a3 - a2) >> 1; + if ( v8 > this[1] - v7 ) + v8 = this[1] - v7; + if ( v7 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v7, + this[1]); + return std::wstring::_M_replace(this, v7, v8, String, v6); +} + +//----- (0050F0D0) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5) +{ + unsigned int v5; // edx + unsigned int v6; // eax + + v5 = (int)(a2 - *this) >> 1; + v6 = (a3 - a2) >> 1; + if ( v6 > this[1] - v5 ) + v6 = this[1] - v5; + if ( v5 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v5, + this[1]); + return std::wstring::_M_replace(this, v5, v6, a4, (a5 - (int)a4) >> 1); +} + +//----- (0050F140) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5) +{ + unsigned int v5; // edx + unsigned int v6; // eax + + v5 = (int)(a2 - *this) >> 1; + v6 = (a3 - a2) >> 1; + if ( v6 > this[1] - v5 ) + v6 = this[1] - v5; + if ( v5 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v5, + this[1]); + return std::wstring::_M_replace(this, v5, v6, a4, a5); +} + +//----- (0050F1B0) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5) +{ + unsigned int v5; // edx + unsigned int v6; // eax + + v5 = (int)(a2 - *this) >> 1; + v6 = (a3 - a2) >> 1; + if ( v6 > this[1] - v5 ) + v6 = this[1] - v5; + if ( v5 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v5, + this[1]); + return std::wstring::_M_replace(this, v5, v6, a4, (a5 - (int)a4) >> 1); +} + +//----- (0050F220) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5) +{ + unsigned int v5; // edx + unsigned int v6; // eax + + v5 = (int)(a2 - *this) >> 1; + v6 = (a3 - a2) >> 1; + if ( v6 > this[1] - v5 ) + v6 = this[1] - v5; + if ( v5 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v5, + this[1]); + return std::wstring::_M_replace(this, v5, v6, a4, a5); +} + +//----- (0050F290) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::replace(_DWORD *this, int a2, int a3, unsigned int a4, __int16 a5) +{ + return std::wstring::_M_replace_aux(this, (a2 - *this) >> 1, (a3 - a2) >> 1, a4, a5); +} + +//----- (0050F2C0) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5) +{ + unsigned int v5; // edx + unsigned int v6; // eax + + v5 = (int)(a2 - *this) >> 1; + v6 = (a3 - a2) >> 1; + if ( v6 > this[1] - v5 ) + v6 = this[1] - v5; + if ( v5 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v5, + this[1]); + return std::wstring::_M_replace(this, v5, v6, a4, (a5 - (int)a4) >> 1); +} + +//----- (0050F330) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, wchar_t *String) +{ + unsigned int v5; // ebp + unsigned int v6; // ecx + unsigned int v7; // edx + unsigned int v8; // eax + + v5 = this[1]; + v6 = wcslen(String); + v7 = (int)(a2 - *this) >> 1; + v8 = (a3 - a2) >> 1; + if ( v8 > this[1] - v7 ) + v8 = this[1] - v7; + if ( v7 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v7, + this[1]); + return std::wstring::_M_replace(this, v7, v8, String, v6); +} + +//----- (0050F3B0) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5) +{ + unsigned int v5; // edx + unsigned int v6; // eax + + v5 = (int)(a2 - *this) >> 1; + v6 = (a3 - a2) >> 1; + if ( v6 > this[1] - v5 ) + v6 = this[1] - v5; + if ( v5 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v5, + this[1]); + return std::wstring::_M_replace(this, v5, v6, a4, (a5 - (int)a4) >> 1); +} + +//----- (0050F420) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5) +{ + unsigned int v5; // edx + unsigned int v6; // eax + + v5 = (int)(a2 - *this) >> 1; + v6 = (a3 - a2) >> 1; + if ( v6 > this[1] - v5 ) + v6 = this[1] - v5; + if ( v5 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v5, + this[1]); + return std::wstring::_M_replace(this, v5, v6, a4, a5); +} + +//----- (0050F490) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, int a4) +{ + unsigned int v4; // edx + unsigned int v5; // eax + + v4 = (int)(a2 - *this) >> 1; + v5 = (a3 - a2) >> 1; + if ( v5 > this[1] - v4 ) + v5 = this[1] - v4; + if ( v4 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v4, + this[1]); + return std::wstring::_M_replace(this, v4, v5, *(_WORD **)a4, *(_DWORD *)(a4 + 4)); +} + +//----- (0050F500) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5) +{ + unsigned int v5; // edx + unsigned int v6; // eax + + v5 = (int)(a2 - *this) >> 1; + v6 = (a3 - a2) >> 1; + if ( v6 > this[1] - v5 ) + v6 = this[1] - v5; + if ( v5 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v5, + this[1]); + return std::wstring::_M_replace(this, v5, v6, a4, (a5 - (int)a4) >> 1); +} + +//----- (0050F570) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, int a2, int a3, _WORD *a4, int a5) +{ + unsigned int v5; // edx + unsigned int v6; // eax + + v5 = (int)(a2 - *this) >> 1; + v6 = (a3 - a2) >> 1; + if ( v6 > this[1] - v5 ) + v6 = this[1] - v5; + if ( v5 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + v5, + this[1]); + return std::wstring::_M_replace(this, v5, v6, a4, (a5 - (int)a4) >> 1); +} + +//----- (0050F5E0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::replace(_DWORD *this, int a2, int a3, unsigned int a4, __int16 a5) +{ + return std::wstring::_M_replace_aux(this, (a2 - *this) >> 1, (a3 - a2) >> 1, a4, a5); +} + +//----- (0050F610) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, unsigned int a2, unsigned int a3, wchar_t *String) +{ + unsigned int v5; // edx + unsigned int v6; // eax + + v5 = wcslen(String); + v6 = this[1] - a2; + if ( v6 > a3 ) + v6 = a3; + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::wstring::_M_replace(this, a2, v6, String, v5); +} + +//----- (0050F680) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, unsigned int a2, unsigned int a3, _WORD *a4, int a5) +{ + unsigned int v5; // eax + + v5 = this[1] - a2; + if ( v5 > a3 ) + v5 = a3; + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::wstring::_M_replace(this, a2, v5, a4, a5); +} + +//----- (0050F6E0) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace(unsigned int *this, unsigned int a2, unsigned int a3, int a4) +{ + unsigned int v4; // eax + + v4 = this[1] - a2; + if ( v4 > a3 ) + v4 = a3; + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::wstring::_M_replace(this, a2, v4, *(_WORD **)a4, *(_DWORD *)(a4 + 4)); +} + +//----- (0050F750) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::replace( + unsigned int *this, + unsigned int a2, + unsigned int a3, + _DWORD *a4, + unsigned int a5, + unsigned int a6) +{ + unsigned int v6; // eax + unsigned int v7; // edx + + v6 = a6; + if ( a4[1] - a5 <= a6 ) + v6 = a4[1] - a5; + if ( a5 > a4[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a5, + a4[1]); + v7 = this[1] - a2; + if ( v7 > a3 ) + v7 = a3; + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::wstring::_M_replace(this, a2, v7, (_WORD *)(*a4 + 2 * a5), v6); +} + +//----- (0050F7F0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::replace(_DWORD *this, unsigned int a2, unsigned int a3, unsigned int a4, __int16 a5) +{ + unsigned int v5; // eax + + v5 = this[1] - a2; + if ( v5 > a3 ) + v5 = a3; + if ( a2 > this[1] ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::replace", + a2, + this[1]); + return std::wstring::_M_replace_aux(this, a2, v5, a4, a5); +} + +//----- (0050F850) -------------------------------------------------------- +void __thiscall std::wstring::reserve(int this, unsigned int a2) +{ + unsigned int v3; // ecx + unsigned int v4; // eax + _WORD *v5; // edi + _WORD *v6; // esi + unsigned int v7; // edx + unsigned int v8; // ebp + _WORD *v9; // eax + _WORD *Block; // ebp + _WORD *v11; // edi + int v12; // eax + unsigned int v13; // eax + + v3 = *(_DWORD *)(this + 4); + v4 = a2; + if ( a2 < v3 ) + { + a2 = v3; + v4 = v3; + } + v5 = *(_WORD **)this; + v6 = (_WORD *)(this + 8); + if ( this + 8 == *(_DWORD *)this ) + v7 = 7; + else + v7 = *(_DWORD *)(this + 8); + if ( v7 != v4 ) + { + v8 = 7; + if ( v7 <= 7 ) + v8 = v7; + if ( v4 <= v8 ) + { + if ( v6 != v5 ) + { + if ( v3 ) + { + if ( v3 != -1 ) + memcpy((void *)(this + 8), *(const void **)this, 2 * (v3 + 1)); + } + else + { + *(_WORD *)(this + 8) = *v5; + } + operator delete(v5); + *(_DWORD *)this = v6; + } + } + else + { + v9 = std::wstring::_M_create(&a2, v7); + Block = *(_WORD **)this; + v11 = v9; + v12 = *(_DWORD *)(this + 4); + if ( v12 ) + { + if ( v12 != -1 ) + memcpy(v11, *(const void **)this, 2 * (v12 + 1)); + } + else + { + *v11 = *Block; + } + if ( Block != v6 ) + operator delete(Block); + v13 = a2; + *(_DWORD *)this = v11; + *(_DWORD *)(this + 8) = v13; + } + } +} + +//----- (0050F960) -------------------------------------------------------- +int __thiscall std::wstring::_M_erase(int *this, int a2, int a3) +{ + int v4; // eax + int v5; // ecx + int v6; // ebp + _WORD *v7; // edi + int result; // eax + + v4 = this[1]; + v5 = *this; + v6 = v4 - (a2 + a3); + if ( v4 != a2 + a3 && a3 ) + { + v7 = (_WORD *)(v5 + 2 * a2); + if ( v6 == 1 ) + { + *v7 = *(_WORD *)(v5 + 2 * (a2 + a3)); + } + else + { + memmove(v7, (const void *)(v5 + 2 * (a2 + a3)), 2 * v6); + v5 = *this; + v4 = this[1]; + } + } + result = v4 - a3; + this[1] = result; + *(_WORD *)(v5 + 2 * result) = 0; + return result; +} + +//----- (0050F9D0) -------------------------------------------------------- +int __fastcall std::wstring::pop_back(int *a1) +{ + int v1; // edx + int result; // eax + + v1 = *a1; + result = a1[1] - 1; + a1[1] = result; + *(_WORD *)(v1 + 2 * result) = 0; + return result; +} + +//----- (0050F9F0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::_M_append(_DWORD *this, _WORD *Src, int a3) +{ + _DWORD *v4; // edi + int v5; // ecx + _DWORD *v6; // edx + unsigned int v7; // esi + unsigned int v8; // edi + _WORD *v9; // ecx + + v4 = this + 2; + v5 = this[1]; + v6 = (_DWORD *)*this; + v7 = v5 + a3; + if ( (_DWORD *)*this == v4 ) + v8 = 7; + else + v8 = this[2]; + if ( v7 > v8 ) + { + std::wstring::_M_mutate((int)this, v5, 0, Src, a3); + v6 = (_DWORD *)*this; + } + else if ( a3 ) + { + v9 = (_WORD *)v6 + v5; + if ( a3 == 1 ) + { + *v9 = *Src; + } + else + { + memcpy(v9, Src, 2 * a3); + v6 = (_DWORD *)*this; + } + } + this[1] = v7; + *((_WORD *)v6 + v7) = 0; + return this; +} + +//----- (0050FA90) -------------------------------------------------------- +void __thiscall std::wstring::_M_assign(int this, int a2) +{ + _WORD *v2; // esi + unsigned int v3; // edi + unsigned int v5; // eax + size_t Size; // eax + _WORD *Src; // edx + unsigned int v8; // eax + int v9; // [esp+1Ch] [ebp-30h] + unsigned int v10[8]; // [esp+2Ch] [ebp-20h] BYREF + + if ( this != a2 ) + { + v2 = *(_WORD **)this; + v3 = *(_DWORD *)(a2 + 4); + if ( this + 8 == *(_DWORD *)this ) + v5 = 7; + else + v5 = *(_DWORD *)(this + 8); + if ( v5 < v3 ) + { + v9 = this + 8; + v10[0] = *(_DWORD *)(a2 + 4); + v2 = std::wstring::_M_create(v10, v5); + if ( v9 != *(_DWORD *)this ) + operator delete(*(void **)this); + v8 = v10[0]; + *(_DWORD *)this = v2; + *(_DWORD *)(this + 8) = v8; + Size = 2 * v3; + if ( !v3 ) + goto LABEL_8; + } + else + { + Size = 2 * v3; + if ( !v3 ) + { +LABEL_8: + *(_DWORD *)(this + 4) = v3; + v2[v3] = 0; + return; + } + } + Src = *(_WORD **)a2; + if ( v3 == 1 ) + { + *v2 = *Src; + } + else + { + memcpy(v2, Src, Size); + v2 = *(_WORD **)this; + } + goto LABEL_8; + } +} +// 50FA90: using guessed type unsigned int var_20[8]; + +//----- (0050FB50) -------------------------------------------------------- +void *__stdcall std::wstring::_M_create(unsigned int *a1, unsigned int a2) +{ + unsigned int v2; // eax + unsigned int v3; // edx + + v2 = *a1; + if ( *a1 > 0x1FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + if ( v2 > a2 ) + { + v3 = 2 * a2; + if ( v2 < 2 * a2 ) + { + if ( v3 > 0x1FFFFFFF ) + { + *a1 = 0x1FFFFFFF; + return operator new(0x40000000u); + } + *a1 = v3; + v2 = 2 * a2; + } + } + return operator new(2 * v2 + 2); +} + +//----- (0050FBC0) -------------------------------------------------------- +int __thiscall std::wstring::_M_length(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + this[1] = a2; + return result; +} + +//----- (0050FBD0) -------------------------------------------------------- +unsigned int __thiscall std::wstring::_M_mutate(int this, int a2, int a3, _WORD *a4, int a5) +{ + _WORD *v5; // ebp + unsigned int v7; // eax + _WORD *v8; // eax + _WORD *Block; // edx + _WORD *v10; // edi + _WORD *v11; // ecx + unsigned int result; // eax + _WORD *Src; // [esp+4h] [ebp-48h] + int v14; // [esp+14h] [ebp-38h] + int v15; // [esp+18h] [ebp-34h] + _WORD *v16; // [esp+18h] [ebp-34h] + _WORD *v17; // [esp+1Ch] [ebp-30h] + _WORD *v18; // [esp+1Ch] [ebp-30h] + unsigned int v19[8]; // [esp+2Ch] [ebp-20h] BYREF + + v5 = (_WORD *)(this + 8); + v15 = a2 + a3; + v14 = *(_DWORD *)(this + 4) - (a2 + a3); + v19[0] = *(_DWORD *)(this + 4) + a5 - a3; + if ( this + 8 == *(_DWORD *)this ) + v7 = 7; + else + v7 = *(_DWORD *)(this + 8); + v8 = std::wstring::_M_create(v19, v7); + Block = *(_WORD **)this; + v10 = v8; + if ( a2 ) + { + if ( a2 == 1 ) + { + *v8 = *Block; + } + else + { + v17 = *(_WORD **)this; + memcpy(v8, *(const void **)this, 2 * a2); + Block = v17; + } + } + if ( a4 && a5 ) + { + if ( a5 == 1 ) + { + v10[a2] = *a4; + } + else + { + v18 = Block; + memcpy(&v10[a2], a4, 2 * a5); + Block = v18; + } + } + if ( v14 ) + { + v11 = &v10[a5 + a2]; + if ( v14 == 1 ) + { + *v11 = Block[v15]; + } + else + { + Src = &Block[v15]; + v16 = Block; + memcpy(v11, Src, 2 * v14); + Block = v16; + } + } + if ( v5 != Block ) + operator delete(Block); + result = v19[0]; + *(_DWORD *)this = v10; + *(_DWORD *)(this + 8) = result; + return result; +} +// 50FBD0: using guessed type unsigned int var_20[8]; + +//----- (0050FD30) -------------------------------------------------------- +int __cdecl std::wstring::_S_assign(_WORD *a1, int a2, __int16 a3) +{ + int result; // eax + _WORD *v4; // edx + + result = a2; + v4 = a1; + if ( a2 == 1 ) + { + *a1 = a3; + } + else if ( a2 ) + { + do + { + *v4++ = a3; + --result; + } + while ( result ); + } + return result; +} + +//----- (0050FD70) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::push_back(_DWORD *this, __int16 a2) +{ + int v3; // esi + _DWORD *result; // eax + unsigned int v5; // edi + unsigned int v6; // edx + + v3 = this[1]; + result = (_DWORD *)*this; + v5 = v3 + 1; + if ( (_DWORD *)*this == this + 2 ) + v6 = 7; + else + v6 = this[2]; + if ( v5 > v6 ) + { + std::wstring::_M_mutate((int)this, v3, 0, 0, 1); + result = (_DWORD *)*this; + } + *((_WORD *)result + v3) = a2; + this[1] = v5; + *((_WORD *)result + v3 + 1) = 0; + return result; +} + +//----- (0050FDF0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + int v3; // ebx + + result = a2; + *this = this + 2; + if ( result + 2 == (_DWORD *)*result ) + { + this[2] = a2[2]; + this[3] = a2[3]; + this[4] = a2[4]; + this[5] = a2[5]; + } + else + { + *this = *a2; + this[2] = a2[2]; + } + v3 = a2[1]; + *a2 = a2 + 2; + a2[1] = 0; + *((_WORD *)a2 + 4) = 0; + this[1] = v3; + return result; +} + +//----- (0050FE50) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2, int a3) +{ + _WORD *result; // eax + int v4; // ebx + int v5; // ebx + int v6; // edx + + result = (_WORD *)a2; + *this = this + 2; + if ( result + 4 == *(_WORD **)result ) + { + this[2] = *(_DWORD *)(a2 + 8); + this[3] = *(_DWORD *)(a2 + 12); + this[4] = *(_DWORD *)(a2 + 16); + this[5] = *(_DWORD *)(a2 + 20); + v6 = *(_DWORD *)(a2 + 4); + *(_DWORD *)(a2 + 4) = 0; + result = *(_WORD **)a2; + this[1] = v6; + *result = 0; + } + else + { + *this = *(_DWORD *)a2; + v4 = *(_DWORD *)(a2 + 4); + *(_DWORD *)a2 = a2 + 8; + this[1] = v4; + v5 = *(_DWORD *)(a2 + 8); + *(_DWORD *)(a2 + 4) = 0; + this[2] = v5; + *(_WORD *)(a2 + 8) = 0; + } + return result; +} + +//----- (0050FED0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, wchar_t *String, int a3) +{ + int v3; // eax + size_t v4; // eax + int v6; // [esp+8h] [ebp-24h] + _DWORD *v7; // [esp+1Ch] [ebp-10h] + + *this = this + 2; + v3 = -2; + if ( String ) + { + v7 = this; + v4 = wcslen(String); + this = v7; + v3 = (int)&String[v4]; + } + LOBYTE(v6) = 0; + return std::wstring::_M_construct(this, String, v3, v6); +} +// 50FF05: variable 'v6' is possibly undefined + +//----- (0050FF20) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4) +{ + LOBYTE(a4) = 0; + *this = this + 2; + return std::wstring::_M_construct(this, a2, (int)&a2[a3], a4); +} + +//----- (0050FF40) -------------------------------------------------------- +int __thiscall std::wstring::basic_string(_DWORD *this, int a2) +{ + int result; // eax + + this[1] = 0; + *this = this + 2; + result = 0; + *((_WORD *)this + 4) = 0; + return result; +} + +//----- (0050FF60) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2) +{ + int v3; // [esp+8h] [ebp-14h] + + *this = this + 2; + LOBYTE(v3) = 0; + return std::wstring::_M_construct(this, *(_WORD **)a2, *(_DWORD *)a2 + 2 * *(_DWORD *)(a2 + 4), v3); +} +// 50FF80: variable 'v3' is possibly undefined + +//----- (0050FF90) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2, int a3) +{ + _WORD *result; // eax + _WORD *Src; // ebp + int v6; // edx + size_t Size; // edi + int v8; // esi + int v9; // [esp+1Ch] [ebp-20h] + int v10; // [esp+1Ch] [ebp-20h] + + result = this + 2; + *this = this + 2; + Src = *(_WORD **)a2; + v6 = *(_DWORD *)(a2 + 4); + Size = 2 * v6; + v8 = (2 * v6) >> 1; + if ( (unsigned int)(2 * v6) > 0xE ) + { + if ( Size > 0x3FFFFFFE ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + if ( (unsigned int)(v8 + 1) > 0x3FFFFFFF ) + std::__throw_bad_alloc(); + v10 = *(_DWORD *)(a2 + 4); + result = operator new(Size + 2); + this[2] = v8; + v6 = v10; + *this = result; + } + if ( v8 == 1 ) + { + *result = *Src; + } + else if ( v8 ) + { + v9 = v6; + memcpy(result, Src, Size); + result = (_WORD *)*this; + v6 = v9; + } + this[1] = v8; + result[v6] = 0; + return result; +} + +//----- (00510040) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4) +{ + unsigned int v4; // eax + + *this = this + 2; + v4 = a2[1]; + if ( a3 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + a2[1]); + LOBYTE(a4) = 0; + return std::wstring::_M_construct(this, (_WORD *)(*a2 + 2 * a3), *a2 + 2 * a3 + 2 * (v4 - a3), a4); +} + +//----- (005100A0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4) +{ + unsigned int v4; // esi + unsigned int v5; // eax + unsigned int v6; // eax + + *this = this + 2; + v4 = a4; + v5 = a2[1]; + if ( a3 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + a2[1]); + v6 = v5 - a3; + LOBYTE(a4) = 0; + if ( v6 > v4 ) + v6 = v4; + return std::wstring::_M_construct(this, (_WORD *)(*a2 + 2 * a3), *a2 + 2 * a3 + 2 * v6, a4); +} + +//----- (00510110) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4, int a5) +{ + unsigned int v5; // eax + unsigned int v6; // eax + int v8; // [esp+8h] [ebp-14h] + + *this = this + 2; + v5 = a2[1]; + if ( a3 > v5 ) + std::__throw_out_of_range_fmt("%s: __pos (which is %zu) > this->size() (which is %zu)", "string::string", a3, a2[1]); + v6 = v5 - a3; + LOBYTE(v8) = 0; + if ( v6 > a4 ) + v6 = a4; + return std::wstring::_M_construct(this, (_WORD *)(*a2 + 2 * a3), *a2 + 2 * a3 + 2 * v6, v8); +} +// 510149: variable 'v8' is possibly undefined + +//----- (00510180) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4) +{ + LOBYTE(a4) = 0; + *this = this + 2; + return std::wstring::_M_construct(this, a2, (int)&a2[a3], a4); +} + +//----- (005101A0) -------------------------------------------------------- +int __thiscall std::wstring::basic_string(_DWORD *this, unsigned int a2, __int16 a3, int a4) +{ + _WORD *v5; // ecx + int result; // eax + _WORD *v7; // eax + _WORD *v8; // edx + unsigned int v9; // eax + + v5 = this + 2; + *this = v5; + if ( a2 > 7 ) + { + if ( a2 > 0x1FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + v7 = operator new(2 * a2 + 2); + this[2] = a2; + *this = v7; + v5 = v7; + } + else + { + if ( !a2 ) + goto LABEL_3; + if ( a2 == 1 ) + { + *((_WORD *)this + 4) = a3; + goto LABEL_3; + } + } + v8 = v5; + v9 = a2; + do + { + *v8++ = a3; + --v9; + } + while ( v9 ); +LABEL_3: + result = 0; + this[1] = a2; + v5[a2] = 0; + return result; +} + +//----- (00510230) -------------------------------------------------------- +int __fastcall std::wstring::basic_string(int a1) +{ + int result; // eax + + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)a1 = a1 + 8; + result = 0; + *(_WORD *)(a1 + 8) = 0; + return result; +} + +//----- (00510250) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string<__gnu_cxx::__normal_iterator,void>( + _DWORD *this, + _WORD *Src, + int a3, + int a4) +{ + _WORD *result; // eax + size_t Size; // ebx + int v7; // edi + + result = this + 2; + *this = this + 2; + Size = a3 - (_DWORD)Src; + v7 = (a3 - (int)Src) >> 1; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xE ) + { + if ( Size > 0x3FFFFFFE ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + if ( (unsigned int)(v7 + 1) > 0x3FFFFFFF ) + std::__throw_bad_alloc(); + result = operator new(Size + 2); + this[2] = v7; + *this = result; + } + if ( v7 == 1 ) + { + *result = *Src; + } + else if ( v7 ) + { + memcpy(result, Src, Size); + result = (_WORD *)*this; + } + this[1] = v7; + *(_WORD *)((char *)result + Size) = 0; + return result; +} + +//----- (005102F0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4) +{ + LOBYTE(a4) = 0; + *this = this + 2; + return std::wstring::_M_construct(this, a2, a3, a4); +} + +//----- (00510300) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4) +{ + LOBYTE(a4) = 0; + *this = this + 2; + return std::wstring::_M_construct(this, a2, a3, a4); +} + +//----- (00510310) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2) +{ + _DWORD *result; // eax + int v3; // ebx + + result = a2; + *this = this + 2; + if ( result + 2 == (_DWORD *)*result ) + { + this[2] = a2[2]; + this[3] = a2[3]; + this[4] = a2[4]; + this[5] = a2[5]; + } + else + { + *this = *a2; + this[2] = a2[2]; + } + v3 = a2[1]; + *a2 = a2 + 2; + a2[1] = 0; + *((_WORD *)a2 + 4) = 0; + this[1] = v3; + return result; +} + +//----- (00510370) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2, int a3) +{ + _WORD *result; // eax + int v4; // ebx + int v5; // ebx + int v6; // edx + + result = (_WORD *)a2; + *this = this + 2; + if ( result + 4 == *(_WORD **)result ) + { + this[2] = *(_DWORD *)(a2 + 8); + this[3] = *(_DWORD *)(a2 + 12); + this[4] = *(_DWORD *)(a2 + 16); + this[5] = *(_DWORD *)(a2 + 20); + v6 = *(_DWORD *)(a2 + 4); + *(_DWORD *)(a2 + 4) = 0; + result = *(_WORD **)a2; + this[1] = v6; + *result = 0; + } + else + { + *this = *(_DWORD *)a2; + v4 = *(_DWORD *)(a2 + 4); + *(_DWORD *)a2 = a2 + 8; + this[1] = v4; + v5 = *(_DWORD *)(a2 + 8); + *(_DWORD *)(a2 + 4) = 0; + this[2] = v5; + *(_WORD *)(a2 + 8) = 0; + } + return result; +} + +//----- (005103F0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, wchar_t *String, int a3) +{ + int v3; // eax + size_t v4; // eax + int v6; // [esp+8h] [ebp-24h] + _DWORD *v7; // [esp+1Ch] [ebp-10h] + + *this = this + 2; + v3 = -2; + if ( String ) + { + v7 = this; + v4 = wcslen(String); + this = v7; + v3 = (int)&String[v4]; + } + LOBYTE(v6) = 0; + return std::wstring::_M_construct(this, String, v3, v6); +} +// 510425: variable 'v6' is possibly undefined + +//----- (00510440) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4) +{ + LOBYTE(a4) = 0; + *this = this + 2; + return std::wstring::_M_construct(this, a2, (int)&a2[a3], a4); +} + +//----- (00510460) -------------------------------------------------------- +int __thiscall std::wstring::basic_string(_DWORD *this, int a2) +{ + int result; // eax + + this[1] = 0; + *this = this + 2; + result = 0; + *((_WORD *)this + 4) = 0; + return result; +} + +//----- (00510480) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2) +{ + int v3; // [esp+8h] [ebp-14h] + + *this = this + 2; + LOBYTE(v3) = 0; + return std::wstring::_M_construct(this, *(_WORD **)a2, *(_DWORD *)a2 + 2 * *(_DWORD *)(a2 + 4), v3); +} +// 5104A0: variable 'v3' is possibly undefined + +//----- (005104B0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, int a2, int a3) +{ + _WORD *result; // eax + _WORD *Src; // ebp + int v6; // edx + size_t Size; // edi + int v8; // esi + int v9; // [esp+1Ch] [ebp-20h] + int v10; // [esp+1Ch] [ebp-20h] + + result = this + 2; + *this = this + 2; + Src = *(_WORD **)a2; + v6 = *(_DWORD *)(a2 + 4); + Size = 2 * v6; + v8 = (2 * v6) >> 1; + if ( (unsigned int)(2 * v6) > 0xE ) + { + if ( Size > 0x3FFFFFFE ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + if ( (unsigned int)(v8 + 1) > 0x3FFFFFFF ) + std::__throw_bad_alloc(); + v10 = *(_DWORD *)(a2 + 4); + result = operator new(Size + 2); + this[2] = v8; + v6 = v10; + *this = result; + } + if ( v8 == 1 ) + { + *result = *Src; + } + else if ( v8 ) + { + v9 = v6; + memcpy(result, Src, Size); + result = (_WORD *)*this; + v6 = v9; + } + this[1] = v8; + result[v6] = 0; + return result; +} + +//----- (00510560) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4) +{ + unsigned int v4; // eax + + *this = this + 2; + v4 = a2[1]; + if ( a3 > v4 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + a2[1]); + LOBYTE(a4) = 0; + return std::wstring::_M_construct(this, (_WORD *)(*a2 + 2 * a3), *a2 + 2 * a3 + 2 * (v4 - a3), a4); +} + +//----- (005105C0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, int a4) +{ + unsigned int v4; // esi + unsigned int v5; // eax + unsigned int v6; // eax + + *this = this + 2; + v4 = a4; + v5 = a2[1]; + if ( a3 > v5 ) + std::__throw_out_of_range_fmt( + "%s: __pos (which is %zu) > this->size() (which is %zu)", + "basic_string::basic_string", + a3, + a2[1]); + v6 = v5 - a3; + LOBYTE(a4) = 0; + if ( v6 > v4 ) + v6 = v4; + return std::wstring::_M_construct(this, (_WORD *)(*a2 + 2 * a3), *a2 + 2 * a3 + 2 * v6, a4); +} + +//----- (00510630) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _DWORD *a2, unsigned int a3, unsigned int a4, int a5) +{ + unsigned int v5; // eax + unsigned int v6; // eax + int v8; // [esp+8h] [ebp-14h] + + *this = this + 2; + v5 = a2[1]; + if ( a3 > v5 ) + std::__throw_out_of_range_fmt("%s: __pos (which is %zu) > this->size() (which is %zu)", "string::string", a3, a2[1]); + v6 = v5 - a3; + LOBYTE(v8) = 0; + if ( v6 > a4 ) + v6 = a4; + return std::wstring::_M_construct(this, (_WORD *)(*a2 + 2 * a3), *a2 + 2 * a3 + 2 * v6, v8); +} +// 510669: variable 'v8' is possibly undefined + +//----- (005106A0) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4) +{ + LOBYTE(a4) = 0; + *this = this + 2; + return std::wstring::_M_construct(this, a2, (int)&a2[a3], a4); +} + +//----- (005106C0) -------------------------------------------------------- +int __thiscall std::wstring::basic_string(_DWORD *this, unsigned int a2, __int16 a3, int a4) +{ + _WORD *v5; // ecx + int result; // eax + _WORD *v7; // eax + _WORD *v8; // edx + unsigned int v9; // eax + + v5 = this + 2; + *this = v5; + if ( a2 > 7 ) + { + if ( a2 > 0x1FFFFFFF ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + v7 = operator new(2 * a2 + 2); + this[2] = a2; + *this = v7; + v5 = v7; + } + else + { + if ( !a2 ) + goto LABEL_3; + if ( a2 == 1 ) + { + *((_WORD *)this + 4) = a3; + goto LABEL_3; + } + } + v8 = v5; + v9 = a2; + do + { + *v8++ = a3; + --v9; + } + while ( v9 ); +LABEL_3: + result = 0; + this[1] = a2; + v5[a2] = 0; + return result; +} + +//----- (00510750) -------------------------------------------------------- +int __fastcall std::wstring::basic_string(int a1) +{ + int result; // eax + + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)a1 = a1 + 8; + result = 0; + *(_WORD *)(a1 + 8) = 0; + return result; +} + +//----- (00510770) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string<__gnu_cxx::__normal_iterator,void>( + _DWORD *this, + _WORD *Src, + int a3, + int a4) +{ + _WORD *result; // eax + size_t Size; // ebx + int v7; // edi + + result = this + 2; + *this = this + 2; + Size = a3 - (_DWORD)Src; + v7 = (a3 - (int)Src) >> 1; + if ( (unsigned int)(a3 - (_DWORD)Src) > 0xE ) + { + if ( Size > 0x3FFFFFFE ) + std::__throw_length_error((std::length_error *)"basic_string::_M_create"); + if ( (unsigned int)(v7 + 1) > 0x3FFFFFFF ) + std::__throw_bad_alloc(); + result = operator new(Size + 2); + this[2] = v7; + *this = result; + } + if ( v7 == 1 ) + { + *result = *Src; + } + else if ( v7 ) + { + memcpy(result, Src, Size); + result = (_WORD *)*this; + } + this[1] = v7; + *(_WORD *)((char *)result + Size) = 0; + return result; +} + +//----- (00510810) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4) +{ + LOBYTE(a4) = 0; + *this = this + 2; + return std::wstring::_M_construct(this, a2, a3, a4); +} + +//----- (00510820) -------------------------------------------------------- +_WORD *__thiscall std::wstring::basic_string(_DWORD *this, _WORD *a2, int a3, int a4) +{ + LOBYTE(a4) = 0; + *this = this + 2; + return std::wstring::_M_construct(this, a2, a3, a4); +} + +//----- (00510830) -------------------------------------------------------- +void __fastcall std::wstring::~wstring(void **a1) +{ + if ( *a1 != a1 + 2 ) + operator delete(*a1); +} + +//----- (00510860) -------------------------------------------------------- +void __fastcall std::wstring::~wstring(void **a1) +{ + if ( *a1 != a1 + 2 ) + operator delete(*a1); +} + +//----- (00510890) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::operator=(_DWORD *this, int a2) +{ + _WORD *v3; // eax + _WORD *Src; // edx + int v5; // ecx + int v6; // ebp + int v8; // edi + int v9; // [esp+1Ch] [ebp-20h] + + v3 = (_WORD *)*this; + Src = *(_WORD **)a2; + v5 = *(_DWORD *)(a2 + 4); + if ( a2 + 8 != *(_DWORD *)a2 ) + { + v9 = *(_DWORD *)(a2 + 8); + if ( v3 == (_WORD *)(this + 2) ) + { + *this = Src; + this[1] = v5; + this[2] = v9; + } + else + { + *this = Src; + v6 = this[2]; + this[1] = v5; + this[2] = v9; + if ( v3 ) + { + *(_DWORD *)a2 = v3; + *(_DWORD *)(a2 + 8) = v6; + goto LABEL_5; + } + } + *(_DWORD *)a2 = a2 + 8; + v3 = (_WORD *)(a2 + 8); + goto LABEL_5; + } + v8 = v5; + if ( v5 ) + { + if ( v5 == 1 ) + { + *v3 = *Src; + v8 = 1; + } + else + { + memcpy(v3, Src, 2 * v5); + v5 = *(_DWORD *)(a2 + 4); + v3 = (_WORD *)*this; + Src = *(_WORD **)a2; + v8 = v5; + } + } + this[1] = v5; + v3[v8] = 0; + v3 = Src; +LABEL_5: + *(_DWORD *)(a2 + 4) = 0; + *v3 = 0; + return this; +} + +//----- (00510950) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::operator=(unsigned int *this, wchar_t *String) +{ + unsigned int v3; // eax + + v3 = wcslen(String); + return std::wstring::_M_replace(this, 0, this[1], String, v3); +} + +//----- (00510990) -------------------------------------------------------- +void *__thiscall std::wstring::operator=(void *this, int a2) +{ + std::wstring::_M_assign((int)this, a2); + return this; +} + +//----- (005109B0) -------------------------------------------------------- +unsigned int *__thiscall std::wstring::operator=(unsigned int *this, _WORD *a2, int a3) +{ + std::wstring::_M_replace(this, 0, this[1], a2, a3); + return this; +} + +//----- (005109F0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::operator=(_DWORD *this, __int16 a2) +{ + std::wstring::_M_replace_aux(this, 0, this[1], 1u, a2); + return this; +} + +//----- (00510A30) -------------------------------------------------------- +int __thiscall std::wstring::operator[](_DWORD *this, int a2) +{ + return *this + 2 * a2; +} + +//----- (00510A40) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::operator+=(_DWORD *this, wchar_t *String) +{ + unsigned int v3; // eax + int v4; // ecx + _DWORD *v5; // edx + unsigned int v6; // edi + unsigned int v7; // ebp + _WORD *v8; // ecx + + v3 = wcslen(String); + v4 = this[1]; + if ( v3 > 0x1FFFFFFF - v4 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v5 = (_DWORD *)*this; + v6 = v3 + v4; + if ( (_DWORD *)*this == this + 2 ) + v7 = 7; + else + v7 = this[2]; + if ( v6 > v7 ) + { + std::wstring::_M_mutate((int)this, this[1], 0, String, v3); + v5 = (_DWORD *)*this; + } + else if ( v3 ) + { + v8 = (_WORD *)v5 + v4; + if ( v3 == 1 ) + { + *v8 = *String; + } + else + { + memcpy(v8, String, 2 * v3); + v5 = (_DWORD *)*this; + } + } + this[1] = v6; + *((_WORD *)v5 + v6) = 0; + return this; +} + +//----- (00510B00) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::operator+=(_DWORD *this, int a2) +{ + _DWORD *v3; // edi + int v4; // ecx + int v5; // eax + _WORD *v6; // ebp + _DWORD *v7; // edx + unsigned int v8; // esi + unsigned int v9; // edi + _WORD *v10; // ecx + + v3 = this + 2; + v4 = this[1]; + v5 = *(_DWORD *)(a2 + 4); + v6 = *(_WORD **)a2; + v7 = (_DWORD *)*this; + v8 = v5 + v4; + if ( (_DWORD *)*this == v3 ) + v9 = 7; + else + v9 = this[2]; + if ( v8 > v9 ) + { + std::wstring::_M_mutate((int)this, v4, 0, v6, v5); + v7 = (_DWORD *)*this; + } + else if ( v5 ) + { + v10 = (_WORD *)v7 + v4; + if ( v5 == 1 ) + { + *v10 = *v6; + } + else + { + memcpy(v10, *(const void **)a2, 2 * v5); + v7 = (_DWORD *)*this; + } + } + this[1] = v8; + *((_WORD *)v7 + v8) = 0; + return this; +} + +//----- (00510BA0) -------------------------------------------------------- +_DWORD *__thiscall std::wstring::operator+=(_DWORD *this, _WORD *Src, unsigned int a3) +{ + int v4; // ecx + _DWORD *v5; // edx + unsigned int v6; // esi + unsigned int v7; // ebp + _WORD *v8; // ecx + + v4 = this[1]; + if ( a3 > 0x1FFFFFFF - v4 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + v5 = (_DWORD *)*this; + v6 = a3 + v4; + if ( (_DWORD *)*this == this + 2 ) + v7 = 7; + else + v7 = this[2]; + if ( v6 > v7 ) + { + std::wstring::_M_mutate((int)this, v4, 0, Src, a3); + v5 = (_DWORD *)*this; + } + else if ( a3 ) + { + v8 = (_WORD *)v5 + v4; + if ( a3 == 1 ) + { + *v8 = *Src; + } + else + { + memcpy(v8, Src, 2 * a3); + v5 = (_DWORD *)*this; + } + } + this[1] = v6; + *((_WORD *)v5 + v6) = 0; + return this; +} + +//----- (00510C60) -------------------------------------------------------- +int __thiscall std::wstring::operator+=(char *this, __int16 a2) +{ + int result; // eax + char *v3; // ecx + int v4; // ebx + char *v5; // edx + unsigned int v6; // esi + unsigned int v7; // ecx + char **v8; // [esp+1Ch] [ebp-10h] + + result = (int)this; + v3 = this + 8; + v4 = *((_DWORD *)v3 - 1); + v5 = (char *)*((_DWORD *)v3 - 2); + v6 = v4 + 1; + if ( v5 == v3 ) + v7 = 7; + else + v7 = *(_DWORD *)(result + 8); + if ( v6 > v7 ) + { + v8 = (char **)result; + std::wstring::_M_mutate(result, v4, 0, 0, 1); + result = (int)v8; + v5 = *v8; + } + *(_WORD *)&v5[2 * v4] = a2; + *(_DWORD *)(result + 4) = v6; + *(_WORD *)&v5[2 * v4 + 2] = 0; + return result; +} + +//----- (00510CE0) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FC68; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_55F8F0; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 55F8F0: using guessed type int (*off_55F8F0)(); +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (00510E20) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + this[1] = a3 != 0; + *this = &off_55FC68; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_55F8F0; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 55F8F0: using guessed type int (*off_55F8F0)(); +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (00510F70) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FC68; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_55F8F0; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 55F8F0: using guessed type int (*off_55F8F0)(); +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (005110B0) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + this[1] = a3 != 0; + *this = &off_55FC68; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_55F8F0; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 55F8F0: using guessed type int (*off_55F8F0)(); +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (00511200) -------------------------------------------------------- +void __fastcall std::collate_byname::~collate_byname(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_55FC68; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 51123E: variable 'lpfctx' is possibly undefined +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (00511260) -------------------------------------------------------- +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FC68; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 51129E: variable 'lpfctx' is possibly undefined +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (005112C0) -------------------------------------------------------- +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FC68; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 5112FE: variable 'lpfctx' is possibly undefined +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (00511320) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FC84; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_55F90C; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 55F90C: using guessed type int (*off_55F90C)(); +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (00511460) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + this[1] = a3 != 0; + *this = &off_55FC84; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_55F90C; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 55F90C: using guessed type int (*off_55F90C)(); +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (005115B0) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FC84; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_55F90C; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 55F90C: using guessed type int (*off_55F90C)(); +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (005116F0) -------------------------------------------------------- +void __thiscall std::collate_byname::collate_byname(_DWORD *this, int ***a2, int a3) +{ + int **v4; // [esp+14h] [ebp-48h] + + v4 = *a2; + this[1] = a3 != 0; + *this = &off_55FC84; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_55F90C; + if ( *(_BYTE *)v4 != 67 || *((_BYTE *)v4 + 1) ) + { + if ( strcmp((const char *)v4, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), v4); + } + } +} +// 55F90C: using guessed type int (*off_55F90C)(); +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (00511840) -------------------------------------------------------- +void __fastcall std::collate_byname::~collate_byname(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_55FC84; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 51187E: variable 'lpfctx' is possibly undefined +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (005118A0) -------------------------------------------------------- +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FC84; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 5118DE: variable 'lpfctx' is possibly undefined +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (00511900) -------------------------------------------------------- +void __fastcall std::collate_byname::~collate_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FC84; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 51193E: variable 'lpfctx' is possibly undefined +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (00511960) -------------------------------------------------------- +unsigned int __thiscall std::stringbuf::__xfer_bufptrs::__xfer_bufptrs(_DWORD *this, _DWORD *a2, int a3) +{ + int v3; // ebx + unsigned int result; // eax + int v5; // esi + unsigned int v6; // edi + int v7; // ebp + int v8; // esi + + this[2] = -1; + this[3] = -1; + v3 = a2[9]; + *this = a3; + result = a2[1]; + this[4] = -1; + v5 = a2[4]; + this[5] = -1; + this[6] = -1; + this[7] = -1; + this[8] = -1; + this[9] = -1; + this[10] = -1; + this[11] = -1; + this[12] = -1; + this[13] = -1; + if ( !result ) + { + if ( !v5 ) + return result; + goto LABEL_3; + } + *((_QWORD *)this + 1) = (int)(result - v3); + *((_QWORD *)this + 2) = a2[2] - v3; + result = a2[3]; + *((_QWORD *)this + 3) = (int)(result - v3); + if ( v5 ) + { +LABEL_3: + *((_QWORD *)this + 4) = v5 - v3; + v6 = a2[5]; + v7 = v6 - v5; + v8 = a2[6]; + *((_QWORD *)this + 5) = v7; + *((_QWORD *)this + 6) = v8 - v3; + if ( result < v6 ) + result = v6; + } + if ( result ) + { + result -= v3; + a2[10] = result; + } + return result; +} + +//----- (00511A50) -------------------------------------------------------- +unsigned int __thiscall std::stringbuf::__xfer_bufptrs::__xfer_bufptrs(_DWORD *this, _DWORD *a2, int a3) +{ + int v3; // ebx + unsigned int result; // eax + int v5; // esi + unsigned int v6; // edi + int v7; // ebp + int v8; // esi + + this[2] = -1; + this[3] = -1; + v3 = a2[9]; + *this = a3; + result = a2[1]; + this[4] = -1; + v5 = a2[4]; + this[5] = -1; + this[6] = -1; + this[7] = -1; + this[8] = -1; + this[9] = -1; + this[10] = -1; + this[11] = -1; + this[12] = -1; + this[13] = -1; + if ( !result ) + { + if ( !v5 ) + return result; + goto LABEL_3; + } + *((_QWORD *)this + 1) = (int)(result - v3); + *((_QWORD *)this + 2) = a2[2] - v3; + result = a2[3]; + *((_QWORD *)this + 3) = (int)(result - v3); + if ( v5 ) + { +LABEL_3: + *((_QWORD *)this + 4) = v5 - v3; + v6 = a2[5]; + v7 = v6 - v5; + v8 = a2[6]; + *((_QWORD *)this + 5) = v7; + *((_QWORD *)this + 6) = v8 - v3; + if ( result < v6 ) + result = v6; + } + if ( result ) + { + result -= v3; + a2[10] = result; + } + return result; +} + +//----- (00511B40) -------------------------------------------------------- +int __fastcall std::stringbuf::__xfer_bufptrs::~__xfer_bufptrs(int a1) +{ + int v1; // eax + _DWORD *v2; // esi + int v3; // ebx + int v4; // edx + int v5; // edi + int v6; // edi + int result; // eax + __int64 v8; // rax + int v9; // ebp + int v10; // ebx + int v11; // ecx + + v1 = *(_DWORD *)(a1 + 8); + v2 = *(_DWORD **)a1; + v3 = *(_DWORD *)(*(_DWORD *)a1 + 36); + if ( (v1 & *(_DWORD *)(a1 + 12)) != -1 ) + { + v4 = *(_DWORD *)(a1 + 24); + v5 = *(_DWORD *)(a1 + 16); + v2[1] = v3 + v1; + v2[2] = v3 + v5; + v2[3] = v3 + v4; + } + v6 = *(_DWORD *)(a1 + 32); + result = v6 & *(_DWORD *)(a1 + 36); + if ( result != -1 ) + { + v8 = *(_QWORD *)(a1 + 40); + v9 = v3 + *(_DWORD *)(a1 + 48); + v10 = v6 + v3; + v2[4] = v10; + v2[6] = v9; + if ( v8 > 0x7FFFFFFF ) + { + v11 = v10 + 0x7FFFFFFF; + do + { + v10 = v11; + v8 -= 0x7FFFFFFFLL; + v11 += 0x7FFFFFFF; + } + while ( v8 > 0x7FFFFFFF ); + } + result = v10 + v8; + v2[5] = result; + } + return result; +} + +//----- (00511BD0) -------------------------------------------------------- +int __fastcall std::stringbuf::__xfer_bufptrs::~__xfer_bufptrs(int a1) +{ + int v1; // eax + _DWORD *v2; // esi + int v3; // ebx + int v4; // edx + int v5; // edi + int v6; // edi + int result; // eax + __int64 v8; // rax + int v9; // ebp + int v10; // ebx + int v11; // ecx + + v1 = *(_DWORD *)(a1 + 8); + v2 = *(_DWORD **)a1; + v3 = *(_DWORD *)(*(_DWORD *)a1 + 36); + if ( (v1 & *(_DWORD *)(a1 + 12)) != -1 ) + { + v4 = *(_DWORD *)(a1 + 24); + v5 = *(_DWORD *)(a1 + 16); + v2[1] = v3 + v1; + v2[2] = v3 + v5; + v2[3] = v3 + v4; + } + v6 = *(_DWORD *)(a1 + 32); + result = v6 & *(_DWORD *)(a1 + 36); + if ( result != -1 ) + { + v8 = *(_QWORD *)(a1 + 40); + v9 = v3 + *(_DWORD *)(a1 + 48); + v10 = v6 + v3; + v2[4] = v10; + v2[6] = v9; + if ( v8 > 0x7FFFFFFF ) + { + v11 = v10 + 0x7FFFFFFF; + do + { + v10 = v11; + v8 -= 0x7FFFFFFFLL; + v11 += 0x7FFFFFFF; + } + while ( v8 > 0x7FFFFFFF ); + } + result = v10 + v8; + v2[5] = result; + } + return result; +} + +//----- (00511C60) -------------------------------------------------------- +unsigned int __fastcall std::stringbuf::_M_update_egptr(int a1) +{ + unsigned int result; // eax + + result = *(_DWORD *)(a1 + 20); + if ( result && *(_DWORD *)(a1 + 12) < result ) + { + if ( (*(_BYTE *)(a1 + 32) & 8) == 0 ) + { + *(_DWORD *)(a1 + 4) = result; + *(_DWORD *)(a1 + 8) = result; + } + *(_DWORD *)(a1 + 12) = result; + } + return result; +} + +//----- (00511C90) -------------------------------------------------------- +_DWORD *__thiscall std::stringbuf::_M_stringbuf_init(_DWORD *this, int a2) +{ + int v2; // esi + int v3; // edx + _DWORD *result; // eax + char *v5; // edx + int v6; // edi + int v7; // [esp+0h] [ebp-2Ch] + + v2 = 0; + v3 = this[10]; + result = (_DWORD *)this[9]; + this[8] = a2; + if ( (a2 & 3) != 0 ) + v2 = v3; + v5 = (char *)result + v3; + if ( result == this + 11 ) + v6 = 15; + else + v6 = this[11]; + if ( (a2 & 8) != 0 ) + { + this[1] = result; + this[2] = result; + this[3] = v5; + } + if ( (a2 & 0x10) != 0 ) + { + this[6] = (char *)result + v6; + this[4] = result; + if ( (unsigned int)v2 > 0x7FFFFFFFuLL ) + { + v7 = v2 - 0x7FFFFFFF; + if ( (((unsigned __int64)(unsigned int)v2 - 0x7FFFFFFF) >> 32) | (unsigned int)(v2 + 1) ) + { + result = (_DWORD *)((char *)result + 0x7FFFFFFF); + } + else + { + v7 = 1; + result = (_DWORD *)((char *)result - 2); + } + v2 = v7; + } + result = (_DWORD *)((char *)result + v2); + this[5] = result; + if ( (a2 & 8) == 0 ) + { + this[1] = v5; + this[2] = v5; + this[3] = v5; + } + } + return result; +} + +//----- (00511D90) -------------------------------------------------------- +int __thiscall std::stringbuf::str(int this, int a2) +{ + unsigned int v3; // eax + + std::string::_M_replace((unsigned int *)(this + 36), 0, *(_DWORD *)(this + 40), *(char **)a2, *(_DWORD *)(a2 + 4)); + v3 = 0; + if ( (*(_BYTE *)(this + 32) & 3) != 0 ) + v3 = *(_DWORD *)(this + 40); + return std::stringbuf::_M_sync((_DWORD *)this, *(_DWORD **)(this + 36), 0, v3); +} + +//----- (00511DF0) -------------------------------------------------------- +void __thiscall std::stringbuf::swap(_DWORD *this, int a2) +{ + int v2; // edx + int v3; // esi + int v4; // ebx + unsigned int v5; // eax + unsigned int v6; // ecx + int v7; // ebx + int v8; // esi + int v9; // ebx + int v10; // ecx + unsigned int v11; // eax + unsigned int v12; // edi + int v13; // eax + int v14; // edx + int v15; // eax + int v16; // edx + int v17; // eax + int v18; // edx + int v19; // eax + int v20; // edx + int v21; // eax + int v22; // eax + _DWORD *v23; // ebx + int v24; // esi + int v25; // edx + int v26; // ecx + int v27; // edi + __int64 v28; // rax + int v29; // ecx + _DWORD *v30; // ebx + int v31; // esi + int v32; // eax + int v33; // ecx + __int64 v34; // rax + int v35; // ecx + int v36; // esi + struct _Unwind_Exception *v37; // edi + struct _Unwind_Exception *v38; // ecx + const std::locale *v39; // [esp+4h] [ebp-E4h] + const std::locale *v40; // [esp+4h] [ebp-E4h] + const std::locale *v41; // [esp+4h] [ebp-E4h] + const std::locale *v42; // [esp+4h] [ebp-E4h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-D0h] + _DWORD *v45; // [esp+54h] [ebp-94h] BYREF + _DWORD *v46; // [esp+58h] [ebp-90h] BYREF + _DWORD *v47; // [esp+5Ch] [ebp-8Ch] BYREF + _DWORD *v48; // [esp+60h] [ebp-88h] + __int64 v49; // [esp+68h] [ebp-80h] + __int64 v50; // [esp+70h] [ebp-78h] + __int64 v51; // [esp+78h] [ebp-70h] + __int64 v52; // [esp+80h] [ebp-68h] + __int64 v53; // [esp+88h] [ebp-60h] + __int64 v54; // [esp+90h] [ebp-58h] + _DWORD *v55; // [esp+98h] [ebp-50h] + __int64 v56; // [esp+A0h] [ebp-48h] + __int64 v57; // [esp+A8h] [ebp-40h] + __int64 v58; // [esp+B0h] [ebp-38h] + __int64 v59; // [esp+B8h] [ebp-30h] + __int64 v60; // [esp+C0h] [ebp-28h] + __int64 v61; // [esp+C8h] [ebp-20h] + + v49 = -1LL; + v48 = (_DWORD *)a2; + v2 = this[1]; + v50 = -1LL; + v3 = this[9]; + v4 = this[4]; + v51 = -1LL; + v52 = -1LL; + v53 = -1LL; + v54 = -1LL; + if ( !v2 ) + { + v5 = 0; + if ( !v4 ) + goto LABEL_7; + goto LABEL_3; + } + v49 = v2 - v3; + v50 = this[2] - v3; + v5 = this[3]; + v51 = (int)(v5 - v3); + if ( v4 ) + { +LABEL_3: + v52 = v4 - v3; + v6 = this[5]; + LODWORD(v53) = this[5] - v4; + v7 = this[6]; + v53 = (int)v53; + v54 = v7 - v3; + if ( v5 < v6 ) + v5 = v6; + } + if ( v5 ) + this[10] = v5 - v3; +LABEL_7: + v56 = -1LL; + v55 = this; + v57 = -1LL; + v8 = *(_DWORD *)(a2 + 4); + v58 = -1LL; + v9 = *(_DWORD *)(a2 + 36); + v10 = *(_DWORD *)(a2 + 16); + v59 = -1LL; + v60 = -1LL; + v61 = -1LL; + if ( !v8 ) + { + v11 = 0; + if ( !v10 ) + goto LABEL_13; + goto LABEL_9; + } + v56 = v8 - v9; + v57 = *(_DWORD *)(a2 + 8) - v9; + v11 = *(_DWORD *)(a2 + 12); + v58 = (int)(v11 - v9); + if ( v10 ) + { +LABEL_9: + v59 = v10 - v9; + v12 = *(_DWORD *)(a2 + 20); + v60 = (int)(v12 - v10); + v61 = *(_DWORD *)(a2 + 24) - v9; + if ( v11 < v12 ) + v11 = v12; + } + if ( v11 ) + *(_DWORD *)(a2 + 40) = v11 - v9; +LABEL_13: + this[1] = v8; + *(_DWORD *)(a2 + 4) = v2; + v13 = this[2]; + this[2] = *(_DWORD *)(a2 + 8); + v14 = *(_DWORD *)(a2 + 12); + *(_DWORD *)(a2 + 8) = v13; + v15 = this[3]; + this[3] = v14; + v16 = *(_DWORD *)(a2 + 16); + *(_DWORD *)(a2 + 12) = v15; + v17 = this[4]; + this[4] = v16; + v18 = *(_DWORD *)(a2 + 20); + *(_DWORD *)(a2 + 16) = v17; + v19 = this[5]; + this[5] = v18; + v20 = *(_DWORD *)(a2 + 24); + *(_DWORD *)(a2 + 20) = v19; + v21 = this[6]; + this[6] = v20; + *(_DWORD *)(a2 + 24) = v21; + std::locale::locale((volatile signed __int32 **)&v47, (volatile signed __int32 **)this + 7, v39); + std::locale::operator=((volatile signed __int32 **)this + 7, (volatile signed __int32 **)(a2 + 28)); + std::locale::operator=((volatile signed __int32 **)(a2 + 28), (volatile signed __int32 **)&v47); + std::locale::~locale(&v47); + std::locale::locale((volatile signed __int32 **)&v45, (volatile signed __int32 **)(a2 + 28), v40); + std::locale::locale((volatile signed __int32 **)&v46, (volatile signed __int32 **)this + 7, v41); + (*(void (__thiscall **)(_DWORD *, _DWORD **))(*this + 8))(this, &v45); + std::locale::operator=((volatile signed __int32 **)this + 7, (volatile signed __int32 **)&v45); + std::locale::locale((volatile signed __int32 **)&v47, (volatile signed __int32 **)(a2 + 28), v42); + (*(void (__thiscall **)(int, _DWORD **))(*(_DWORD *)a2 + 8))(a2, &v46); + std::locale::operator=((volatile signed __int32 **)(a2 + 28), (volatile signed __int32 **)&v46); + std::locale::~locale(&v47); + std::locale::~locale(&v46); + std::locale::~locale(&v45); + v22 = this[8]; + this[8] = *(_DWORD *)(a2 + 32); + *(_DWORD *)(a2 + 32) = v22; + std::string::swap(this + 9, (_DWORD *)(a2 + 36)); + v23 = v55; + v24 = v55[9]; + if ( ((unsigned int)v56 & HIDWORD(v56)) != -1 ) + { + v25 = v58; + v26 = v57; + v55[1] = v24 + v56; + v23[2] = v24 + v26; + v23[3] = v24 + v25; + } + if ( ((unsigned int)v59 & HIDWORD(v59)) != -1 ) + { + v27 = v61; + v28 = v60; + v29 = v24 + v59; + v23[4] = v24 + v59; + for ( v23[6] = v24 + v27; v28 > 0x7FFFFFFF; v28 -= 0x7FFFFFFFLL ) + v29 += 0x7FFFFFFF; + v23[5] = v29 + v28; + } + v30 = v48; + v31 = v48[9]; + if ( ((unsigned int)v49 & HIDWORD(v49)) != -1 ) + { + v32 = v51; + v33 = v50; + v48[1] = v31 + v49; + v30[2] = v31 + v33; + v30[3] = v31 + v32; + } + if ( ((unsigned int)v52 & HIDWORD(v52)) != -1 ) + { + v34 = v53; + v35 = v31 + v52; + v36 = v31 + v54; + v30[4] = v35; + v37 = (struct _Unwind_Exception *)v35; + v30[6] = v36; + if ( v34 > 0x7FFFFFFF ) + { + v38 = (struct _Unwind_Exception *)(v35 + 0x7FFFFFFF); + do + { + lpuexcpta = v38; + v34 -= 0x7FFFFFFFLL; + v38 = (struct _Unwind_Exception *)((char *)v38 + 0x7FFFFFFF); + } + while ( v34 > 0x7FFFFFFF ); + v37 = lpuexcpta; + } + v30[5] = (char *)v37 + v34; + } +} +// 5120BA: variable 'v39' is possibly undefined +// 512102: variable 'v40' is possibly undefined +// 512115: variable 'v41' is possibly undefined +// 51215E: variable 'v42' is possibly undefined + +//----- (005123C0) -------------------------------------------------------- +_DWORD *__thiscall std::stringbuf::setbuf(int this, _DWORD *a2, int a3) +{ + _DWORD *result; // eax + int v4; // ebx + _DWORD *v5; // esi + int v6; // edi + int v7; // ecx + int v8; // ebp + int v9; // ebp + int v10; // [esp+0h] [ebp-14h] + + result = (_DWORD *)this; + if ( a2 && a3 >= 0 ) + { + *(_DWORD *)(this + 40) = 0; + v4 = a3; + **(_BYTE **)(this + 36) = 0; + v5 = *(_DWORD **)(this + 36); + v10 = *(_DWORD *)(this + 32) & 0x10; + v6 = *(_DWORD *)(this + 32) & 8; + v7 = (int)a2 + *(_DWORD *)(this + 40); + if ( v5 == result + 11 ) + v8 = 15; + else + v8 = result[11]; + v9 = (int)a2 + v8; + if ( a2 != v5 ) + { + v7 += a3; + v4 = 0; + v9 = v7; + } + if ( v6 ) + { + result[1] = a2; + result[2] = (char *)a2 + v4; + result[3] = v7; + if ( v10 ) + { + result[5] = a2; + result[4] = a2; + result[6] = v9; + } + } + else if ( v10 ) + { + result[5] = a2; + result[4] = a2; + result[6] = v9; + result[1] = v7; + result[2] = v7; + result[3] = v7; + } + } + return result; +} + +//----- (00512480) -------------------------------------------------------- +int __thiscall std::stringbuf::_M_sync(_DWORD *this, _DWORD *a2, int a3, unsigned int a4) +{ + _DWORD *v4; // edi + int result; // eax + int v6; // esi + int v7; // ebx + int v8; // ebp + int v9; // edx + int v10; // ebp + __int64 v11; // rax + int v12; // [esp+4h] [ebp-18h] + + v4 = (_DWORD *)this[9]; + result = (int)a2 + this[10]; + v12 = result; + v6 = this[8] & 0x10; + v7 = this[8] & 8; + if ( v4 == this + 11 ) + v8 = 15; + else + v8 = this[11]; + if ( a2 == v4 ) + { + v10 = (int)a2 + v8; + } + else + { + v9 = a3; + a3 = 0; + v12 = v9 + result; + result = v12; + v10 = v12; + } + if ( v7 ) + { + this[1] = a2; + this[2] = (char *)a2 + a3; + result = v12; + this[3] = v12; + } + if ( v6 ) + { + this[6] = v10; + this[4] = a2; + if ( a4 > 0x7FFFFFFFuLL ) + { + v11 = a4 - 0x7FFFFFFFLL; + if ( (a4 + 1) | HIDWORD(v11) ) + { + a2 = (_DWORD *)((char *)a2 + 0x7FFFFFFF); + } + else + { + a2 = (_DWORD *)((char *)a2 - 2); + LODWORD(v11) = 1; + } + a4 = v11; + } + result = (int)a2 + a4; + this[5] = (char *)a2 + a4; + if ( !v7 ) + { + result = v12; + this[1] = v12; + this[2] = v12; + this[3] = v12; + } + } + return result; +} + +//----- (00512590) -------------------------------------------------------- +_DWORD *__thiscall std::stringbuf::seekoff(_DWORD *this, _DWORD *a2, __int64 a3, int a4, unsigned int a5) +{ + unsigned int v5; // edx + unsigned __int8 v6; // bp + unsigned __int8 v7; // di + unsigned int v9; // eax + _DWORD *v10; // ebx + int v11; // esi + int v12; // edi + __int64 v13; // [esp+0h] [ebp-34h] + unsigned __int8 v14; // [esp+8h] [ebp-2Ch] + __int64 v15; // [esp+8h] [ebp-2Ch] + int v16; // [esp+18h] [ebp-1Ch] + char v17; // [esp+1Fh] [ebp-15h] + + *this = -1; + this[1] = -1; + this[2] = 0; + v13 = a3; + v5 = (a5 & a2[8]) >> 4; + v6 = (a4 != 1) & v5 & (((unsigned __int8)a5 & a2[8] & 8) != 0); + v14 = ((a5 >> 3) ^ 1) & 1 & v5; + v7 = (((unsigned __int8)a5 & a2[8] & 8) != 0) & ((a5 >> 4) ^ 1); + if ( v7 ) + { + v16 = a2[1]; + if ( !v16 && a3 ) + return this; + v17 = v6 | v14; + } + else + { + v16 = a2[4]; + if ( !v16 && a3 ) + return this; + v17 = v14 | v6; + if ( !(v14 | v6) ) + return this; + } + v9 = a2[5]; + if ( v9 ) + { + v10 = a2; + if ( v9 > a2[3] ) + { + if ( (a2[8] & 8) == 0 ) + { + a2[1] = v9; + v10 = a2; + a2[2] = v9; + } + v10[3] = v9; + } + } + if ( a4 == 1 ) + { + v15 = a3 + (int)(v9 - v16); + v13 = a2[2] - v16 + a3; + } + else + { + v15 = a3; + if ( a4 == 2 ) + { + v13 = a2[3] - v16 + a3; + v15 = v13; + } + } + if ( v6 | v7 && v13 >= 0 && a2[3] - v16 >= v13 ) + { + *(_QWORD *)this = v13; + v12 = a2[1] + v13; + this[2] = 0; + a2[2] = v12; + } + if ( v15 >= 0 && v17 && a2[3] - v16 >= v15 ) + { + *(_QWORD *)this = v15; + v11 = a2[4] + v15; + this[2] = 0; + a2[5] = v11; + } + return this; +} + +//----- (00512800) -------------------------------------------------------- +_DWORD *__thiscall std::stringbuf::seekpos(_DWORD *this, _DWORD *a2, __int64 a3, int a4, int a5, int a6) +{ + _DWORD *result; // eax + int v7; // ecx + int v8; // ebx + unsigned int v9; // ebp + int v10; // [esp+0h] [ebp-2Ch] + + result = this; + *this = -1; + this[1] = -1; + this[2] = 0; + v7 = a2[8] & 8; + v10 = a6 & a2[8]; + if ( (a6 & v7) != 0 ) + v8 = a2[1]; + else + v8 = a2[4]; + if ( (!a3 || v8) && (v10 & 0x18) != 0 ) + { + v9 = a2[5]; + if ( v9 && v9 > a2[3] ) + { + if ( !v7 ) + { + a2[1] = v9; + a2[2] = v9; + } + a2[3] = v9; + } + if ( a3 >= 0 && a2[3] - v8 >= a3 ) + { + if ( (a6 & v7) != 0 ) + a2[2] = a3 + a2[1]; + if ( (v10 & 0x10) != 0 ) + a2[5] = a2[4] + a3; + *(_QWORD *)result = a3; + result[2] = a4; + } + } + return result; +} + +//----- (005128F0) -------------------------------------------------------- +int __thiscall std::stringbuf::_M_pbump(_DWORD *this, int a2, int a3, __int64 a4) +{ + __int64 v5; // rax + int v6; // ecx + int result; // eax + + v5 = a4; + this[6] = a3; + v6 = a2; + for ( this[4] = a2; v5 > 0x7FFFFFFF; v5 -= 0x7FFFFFFFLL ) + v6 += 0x7FFFFFFF; + result = v6 + v5; + this[5] = result; + return result; +} + +//----- (00512950) -------------------------------------------------------- +int __thiscall std::stringbuf::overflow(_DWORD *this, int a2) +{ + int v2; // esi + _DWORD *v3; // ecx + unsigned int v4; // eax + unsigned int v5; // ebx + int v6; // edi + unsigned int v7; // eax + char *v8; // eax + _BYTE *v9; // edx + unsigned int v10; // eax + _BYTE *v12; // edx + int v13; // eax + int v14; // ebx + int v15; // eax + _BYTE *v16; // [esp+14h] [ebp-74h] + int v17; // [esp+14h] [ebp-74h] + size_t v18; // [esp+14h] [ebp-74h] + void *Block; // [esp+58h] [ebp-30h] BYREF + int v22; // [esp+5Ch] [ebp-2Ch] + int v23[10]; // [esp+60h] [ebp-28h] BYREF + + v2 = this[8]; + if ( (v2 & 0x10) == 0 ) + return -1; + if ( a2 == -1 ) + return 0; + v3 = (_DWORD *)this[9]; + if ( v3 == this + 11 ) + v4 = 15; + else + v4 = this[11]; + v5 = this[6]; + v6 = this[4]; + v16 = (_BYTE *)this[5]; + if ( v5 - v6 >= v4 ) + { + if ( v5 > (unsigned int)v16 ) + goto LABEL_21; + if ( v4 != 0x3FFFFFFF ) + { + if ( v5 <= (unsigned int)v16 ) + { + v7 = 2 * v4; + LOBYTE(v23[0]) = 0; + Block = v23; + if ( v7 > 0x3FFFFFFF ) + v7 = 0x3FFFFFFF; + v22 = 0; + if ( v7 < 0x200 ) + v7 = 512; + std::string::reserve(&Block, v7); + v8 = (char *)this[4]; + v17 = v22; + if ( v8 ) + { + std::string::_M_replace((unsigned int *)&Block, 0, v22, v8, this[6] - (_DWORD)v8); + v17 = v22; + } + v9 = Block; + v10 = 15; + if ( Block != v23 ) + v10 = v23[0]; + if ( v17 + 1 > v10 ) + { + std::string::_M_mutate((int)&Block, v17, 0, 0, 1u); + v9 = Block; + } + v9[v17] = a2; + v22 = v17 + 1; + *((_BYTE *)Block + v17 + 1) = 0; + std::string::swap(this + 9, &Block); + std::stringbuf::_M_sync(this, (_DWORD *)this[9], this[2] - this[1], this[5] - this[4]); + if ( Block != v23 ) + operator delete(Block); + goto LABEL_22; + } +LABEL_21: + *v16 = a2; +LABEL_22: + ++this[5]; + return a2; + } + return -1; + } + this[4] = v3; + v12 = &v16[(_DWORD)v3 - v6]; + this[6] = (char *)v3 + v4; + this[5] = v12; + if ( (v2 & 8) != 0 ) + { + v18 = this[1]; + v13 = this[3]; + this[1] = v3; + v14 = (int)v3 + v13 - v18 + 1; + v15 = this[2]; + this[3] = v14; + this[2] = (char *)v3 + v15 - v18; + } + *v12 = a2; + ++this[5]; + return a2; +} + +//----- (00512C10) -------------------------------------------------------- +int __thiscall std::stringbuf::pbackfail(int this, int a2) +{ + unsigned int v2; // edx + int result; // eax + char v4; // bl + + v2 = *(_DWORD *)(this + 8); + result = a2; + if ( v2 <= *(_DWORD *)(this + 4) ) + return -1; + if ( a2 == -1 ) + { + result = 0; + *(_DWORD *)(this + 8) = v2 - 1; + return result; + } + v4 = *(_BYTE *)(v2 - 1); + if ( (*(_BYTE *)(this + 32) & 0x10) == 0 && v4 != (_BYTE)a2 ) + return -1; + *(_DWORD *)(this + 8) = v2 - 1; + if ( v4 != (_BYTE)a2 ) + *(_BYTE *)(v2 - 1) = a2; + return result; +} + +//----- (00512C60) -------------------------------------------------------- +int __fastcall std::stringbuf::showmanyc(int a1) +{ + unsigned int v1; // edx + unsigned int v2; // eax + + if ( (*(_BYTE *)(a1 + 32) & 8) == 0 ) + return -1; + v1 = *(_DWORD *)(a1 + 20); + v2 = *(_DWORD *)(a1 + 12); + if ( v1 ) + { + if ( v1 > v2 ) + { + *(_DWORD *)(a1 + 12) = v1; + v2 = v1; + } + } + return v2 - *(_DWORD *)(a1 + 8); +} + +//----- (00512C90) -------------------------------------------------------- +int __fastcall std::stringbuf::underflow(int a1) +{ + unsigned int v1; // eax + unsigned int v2; // edx + unsigned __int8 *v3; // eax + + if ( (*(_BYTE *)(a1 + 32) & 8) == 0 ) + return -1; + v1 = *(_DWORD *)(a1 + 20); + v2 = *(_DWORD *)(a1 + 12); + if ( v1 ) + { + if ( v1 > v2 ) + { + *(_DWORD *)(a1 + 12) = v1; + v2 = v1; + } + } + v3 = *(unsigned __int8 **)(a1 + 8); + if ( (unsigned int)v3 < v2 ) + return *v3; + else + return -1; +} + +//----- (00512CD0) -------------------------------------------------------- +void __thiscall std::stringbuf::basic_stringbuf(_DWORD *this, std::locale *a2) +{ + int v2; // edx + unsigned int v3; // eax + int v4; // ecx + int v5; // eax + std::locale *v6; // eax + int v7; // ebx + int v8; // ecx + int v9; // ebx + char *v10; // eax + int v11; // edx + int v12; // ecx + char *v13; // ecx + const std::locale *v14; // [esp+4h] [ebp-A4h] + char *v15; // [esp+14h] [ebp-94h] + __int64 v18; // [esp+60h] [ebp-48h] + int v19; // [esp+68h] [ebp-40h] + __int64 v20; // [esp+70h] [ebp-38h] + __int64 v21; // [esp+78h] [ebp-30h] + int v22; // [esp+80h] [ebp-28h] + int v23; // [esp+88h] [ebp-20h] + + v18 = -1LL; + v19 = -1; + v2 = *((_DWORD *)a2 + 9); + v3 = *((_DWORD *)a2 + 1); + LODWORD(v20) = -1; + v21 = -1LL; + v22 = -1; + v23 = -1; + if ( !v3 ) + { + v4 = *((_DWORD *)a2 + 4); + if ( !v4 ) + goto LABEL_7; + goto LABEL_3; + } + v18 = (int)(v3 - v2); + v19 = *((_DWORD *)a2 + 2) - v2; + v3 = *((_DWORD *)a2 + 3); + v20 = (int)(v3 - v2); + v4 = *((_DWORD *)a2 + 4); + if ( v4 ) + { +LABEL_3: + v21 = v4 - v2; + v22 = *((_DWORD *)a2 + 5) - v4; + v23 = *((_DWORD *)a2 + 6) - v2; + if ( v3 < *((_DWORD *)a2 + 5) ) + v3 = *((_DWORD *)a2 + 5); + } + if ( v3 ) + *((_DWORD *)a2 + 10) = v3 - v2; +LABEL_7: + std::streambuf::basic_streambuf(this, a2, v14); + v5 = *((_DWORD *)a2 + 8); + *this = &off_55F928; + this[9] = this + 11; + this[8] = v5; + v15 = (char *)a2 + 44; + v6 = (std::locale *)*((_DWORD *)a2 + 9); + if ( v6 == (std::locale *)((char *)a2 + 44) ) + { + this[11] = *((_DWORD *)a2 + 11); + this[12] = *((_DWORD *)a2 + 12); + this[13] = *((_DWORD *)a2 + 13); + this[14] = *((_DWORD *)a2 + 14); + } + else + { + this[9] = v6; + this[11] = *((_DWORD *)a2 + 11); + } + this[10] = *((_DWORD *)a2 + 10); + *((_BYTE *)a2 + 44) = 0; + *((_DWORD *)a2 + 9) = v15; + *((_DWORD *)a2 + 10) = 0; + v7 = this[9]; + if ( ((unsigned int)v18 & HIDWORD(v18)) != -1 ) + { + this[1] = v7 + v18; + this[2] = v7 + v19; + this[3] = v7 + v20; + } + if ( ((unsigned int)v21 & HIDWORD(v21)) != -1 ) + { + v8 = v7 + v23; + v9 = v21 + v7; + this[6] = v8; + this[4] = v9; + this[5] = v9 + v22; + } + v10 = (char *)*((_DWORD *)a2 + 9); + v11 = *((_DWORD *)a2 + 8) & 0x10; + if ( v10 == v15 ) + v12 = 15; + else + v12 = *((_DWORD *)a2 + 11); + v13 = &v10[v12]; + if ( (*((_DWORD *)a2 + 8) & 8) != 0 ) + { + *((_DWORD *)a2 + 1) = v10; + *((_DWORD *)a2 + 2) = v10; + *((_DWORD *)a2 + 3) = v10; + if ( v11 ) + { + *((_DWORD *)a2 + 5) = v10; + *((_DWORD *)a2 + 4) = v10; + *((_DWORD *)a2 + 6) = v13; + } + } + else if ( v11 ) + { + *((_DWORD *)a2 + 5) = v10; + *((_DWORD *)a2 + 4) = v10; + *((_DWORD *)a2 + 6) = v13; + *((_DWORD *)a2 + 1) = v10; + *((_DWORD *)a2 + 2) = v10; + *((_DWORD *)a2 + 3) = v10; + } +} +// 512EE3: conditional instruction was optimized away because rax.8 is in (<80000000u|>=FFFFFFFF80000000u) +// 512E18: variable 'v14' is possibly undefined +// 55F928: using guessed type int (*off_55F928)(); + +//----- (00513000) -------------------------------------------------------- +std::locale *__thiscall std::stringbuf::basic_stringbuf(_DWORD *this, std::locale **a2, int a3) +{ + std::locale *v4; // eax + std::locale *v5; // edx + std::locale *result; // eax + std::locale *v7; // edx + const std::locale *v8; // [esp+4h] [ebp-18h] + + std::streambuf::basic_streambuf(this, (std::locale *)a2, v8); + v4 = a2[8]; + *this = &off_55F928; + this[9] = this + 11; + v5 = a2[9]; + this[8] = v4; + result = (std::locale *)(a2 + 11); + if ( v5 == (std::locale *)(a2 + 11) ) + { + this[11] = a2[11]; + this[12] = a2[12]; + this[13] = a2[13]; + this[14] = a2[14]; + } + else + { + this[9] = v5; + this[11] = a2[11]; + } + v7 = a2[10]; + a2[9] = result; + a2[10] = 0; + this[10] = v7; + *((_BYTE *)a2 + 44) = 0; + return result; +} +// 51300E: variable 'v8' is possibly undefined +// 55F928: using guessed type int (*off_55F928)(); + +//----- (00513080) -------------------------------------------------------- +void __thiscall std::stringbuf::basic_stringbuf(_DWORD *this, int a2, int a3) +{ + int v3; // eax + _BYTE *v4; // edx + unsigned int v5; // eax + + *this = &off_560424; + this[1] = 0; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + std::locale::locale(this + 7); + v3 = *(_DWORD *)(a2 + 4); + v4 = *(_BYTE **)a2; + *this = &off_55F928; + this[8] = 0; + this[9] = this + 11; + std::string::_M_construct(this + 9, v4, (int)&v4[v3]); + this[8] = a3; + v5 = 0; + if ( (a3 & 3) != 0 ) + v5 = this[10]; + std::stringbuf::_M_sync(this, (_DWORD *)this[9], 0, v5); +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (005131A0) -------------------------------------------------------- +char *__thiscall std::stringbuf::basic_stringbuf(_DWORD *this, int a2) +{ + _DWORD *v3; // ecx + char *result; // eax + + v3 = this + 7; + *(v3 - 7) = &off_560424; + *(v3 - 6) = 0; + *(v3 - 5) = 0; + *(v3 - 4) = 0; + *(v3 - 3) = 0; + *(v3 - 2) = 0; + *(v3 - 1) = 0; + std::locale::locale(v3); + *this = &off_55F928; + this[10] = 0; + this[8] = a2; + result = (char *)(this + 11); + this[9] = this + 11; + *((_BYTE *)this + 44) = 0; + return result; +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00513210) -------------------------------------------------------- +int __fastcall std::stringbuf::basic_stringbuf(int a1) +{ + _DWORD *v2; // ecx + int result; // eax + + v2 = (_DWORD *)(a1 + 28); + *(v2 - 7) = &off_560424; + *(v2 - 6) = 0; + *(v2 - 5) = 0; + *(v2 - 4) = 0; + *(v2 - 3) = 0; + *(v2 - 2) = 0; + *(v2 - 1) = 0; + std::locale::locale(v2); + result = a1 + 44; + *(_BYTE *)(a1 + 44) = 0; + *(_DWORD *)a1 = &off_55F928; + *(_DWORD *)(a1 + 32) = 24; + *(_DWORD *)(a1 + 36) = a1 + 44; + *(_DWORD *)(a1 + 40) = 0; + return result; +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00513280) -------------------------------------------------------- +void __thiscall std::stringbuf::basic_stringbuf(_DWORD *this, std::locale *a2) +{ + int v2; // edx + unsigned int v3; // eax + int v4; // ecx + int v5; // eax + std::locale *v6; // eax + int v7; // ebx + int v8; // ecx + int v9; // ebx + char *v10; // eax + int v11; // edx + int v12; // ecx + char *v13; // ecx + const std::locale *v14; // [esp+4h] [ebp-A4h] + char *v15; // [esp+14h] [ebp-94h] + __int64 v18; // [esp+60h] [ebp-48h] + int v19; // [esp+68h] [ebp-40h] + __int64 v20; // [esp+70h] [ebp-38h] + __int64 v21; // [esp+78h] [ebp-30h] + int v22; // [esp+80h] [ebp-28h] + int v23; // [esp+88h] [ebp-20h] + + v18 = -1LL; + v19 = -1; + v2 = *((_DWORD *)a2 + 9); + v3 = *((_DWORD *)a2 + 1); + LODWORD(v20) = -1; + v21 = -1LL; + v22 = -1; + v23 = -1; + if ( !v3 ) + { + v4 = *((_DWORD *)a2 + 4); + if ( !v4 ) + goto LABEL_7; + goto LABEL_3; + } + v18 = (int)(v3 - v2); + v19 = *((_DWORD *)a2 + 2) - v2; + v3 = *((_DWORD *)a2 + 3); + v20 = (int)(v3 - v2); + v4 = *((_DWORD *)a2 + 4); + if ( v4 ) + { +LABEL_3: + v21 = v4 - v2; + v22 = *((_DWORD *)a2 + 5) - v4; + v23 = *((_DWORD *)a2 + 6) - v2; + if ( v3 < *((_DWORD *)a2 + 5) ) + v3 = *((_DWORD *)a2 + 5); + } + if ( v3 ) + *((_DWORD *)a2 + 10) = v3 - v2; +LABEL_7: + std::streambuf::basic_streambuf(this, a2, v14); + v5 = *((_DWORD *)a2 + 8); + *this = &off_55F928; + this[9] = this + 11; + this[8] = v5; + v15 = (char *)a2 + 44; + v6 = (std::locale *)*((_DWORD *)a2 + 9); + if ( v6 == (std::locale *)((char *)a2 + 44) ) + { + this[11] = *((_DWORD *)a2 + 11); + this[12] = *((_DWORD *)a2 + 12); + this[13] = *((_DWORD *)a2 + 13); + this[14] = *((_DWORD *)a2 + 14); + } + else + { + this[9] = v6; + this[11] = *((_DWORD *)a2 + 11); + } + this[10] = *((_DWORD *)a2 + 10); + *((_BYTE *)a2 + 44) = 0; + *((_DWORD *)a2 + 9) = v15; + *((_DWORD *)a2 + 10) = 0; + v7 = this[9]; + if ( ((unsigned int)v18 & HIDWORD(v18)) != -1 ) + { + this[1] = v7 + v18; + this[2] = v7 + v19; + this[3] = v7 + v20; + } + if ( ((unsigned int)v21 & HIDWORD(v21)) != -1 ) + { + v8 = v7 + v23; + v9 = v21 + v7; + this[6] = v8; + this[4] = v9; + this[5] = v9 + v22; + } + v10 = (char *)*((_DWORD *)a2 + 9); + v11 = *((_DWORD *)a2 + 8) & 0x10; + if ( v10 == v15 ) + v12 = 15; + else + v12 = *((_DWORD *)a2 + 11); + v13 = &v10[v12]; + if ( (*((_DWORD *)a2 + 8) & 8) != 0 ) + { + *((_DWORD *)a2 + 1) = v10; + *((_DWORD *)a2 + 2) = v10; + *((_DWORD *)a2 + 3) = v10; + if ( v11 ) + { + *((_DWORD *)a2 + 5) = v10; + *((_DWORD *)a2 + 4) = v10; + *((_DWORD *)a2 + 6) = v13; + } + } + else if ( v11 ) + { + *((_DWORD *)a2 + 5) = v10; + *((_DWORD *)a2 + 4) = v10; + *((_DWORD *)a2 + 6) = v13; + *((_DWORD *)a2 + 1) = v10; + *((_DWORD *)a2 + 2) = v10; + *((_DWORD *)a2 + 3) = v10; + } +} +// 513493: conditional instruction was optimized away because rax.8 is in (<80000000u|>=FFFFFFFF80000000u) +// 5133C8: variable 'v14' is possibly undefined +// 55F928: using guessed type int (*off_55F928)(); + +//----- (005135B0) -------------------------------------------------------- +std::locale *__thiscall std::stringbuf::basic_stringbuf(_DWORD *this, std::locale **a2, int a3) +{ + std::locale *v4; // eax + std::locale *v5; // edx + std::locale *result; // eax + std::locale *v7; // edx + const std::locale *v8; // [esp+4h] [ebp-18h] + + std::streambuf::basic_streambuf(this, (std::locale *)a2, v8); + v4 = a2[8]; + *this = &off_55F928; + this[9] = this + 11; + v5 = a2[9]; + this[8] = v4; + result = (std::locale *)(a2 + 11); + if ( v5 == (std::locale *)(a2 + 11) ) + { + this[11] = a2[11]; + this[12] = a2[12]; + this[13] = a2[13]; + this[14] = a2[14]; + } + else + { + this[9] = v5; + this[11] = a2[11]; + } + v7 = a2[10]; + a2[9] = result; + a2[10] = 0; + this[10] = v7; + *((_BYTE *)a2 + 44) = 0; + return result; +} +// 5135BE: variable 'v8' is possibly undefined +// 55F928: using guessed type int (*off_55F928)(); + +//----- (00513630) -------------------------------------------------------- +void __thiscall std::stringbuf::basic_stringbuf(_DWORD *this, int a2, int a3) +{ + int v3; // eax + _BYTE *v4; // edx + unsigned int v5; // eax + + *this = &off_560424; + this[1] = 0; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + std::locale::locale(this + 7); + v3 = *(_DWORD *)(a2 + 4); + v4 = *(_BYTE **)a2; + *this = &off_55F928; + this[8] = 0; + this[9] = this + 11; + std::string::_M_construct(this + 9, v4, (int)&v4[v3]); + this[8] = a3; + v5 = 0; + if ( (a3 & 3) != 0 ) + v5 = this[10]; + std::stringbuf::_M_sync(this, (_DWORD *)this[9], 0, v5); +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00513750) -------------------------------------------------------- +char *__thiscall std::stringbuf::basic_stringbuf(_DWORD *this, int a2) +{ + _DWORD *v3; // ecx + char *result; // eax + + v3 = this + 7; + *(v3 - 7) = &off_560424; + *(v3 - 6) = 0; + *(v3 - 5) = 0; + *(v3 - 4) = 0; + *(v3 - 3) = 0; + *(v3 - 2) = 0; + *(v3 - 1) = 0; + std::locale::locale(v3); + *this = &off_55F928; + this[10] = 0; + this[8] = a2; + result = (char *)(this + 11); + this[9] = this + 11; + *((_BYTE *)this + 44) = 0; + return result; +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (005137C0) -------------------------------------------------------- +int __fastcall std::stringbuf::basic_stringbuf(int a1) +{ + _DWORD *v2; // ecx + int result; // eax + + v2 = (_DWORD *)(a1 + 28); + *(v2 - 7) = &off_560424; + *(v2 - 6) = 0; + *(v2 - 5) = 0; + *(v2 - 4) = 0; + *(v2 - 3) = 0; + *(v2 - 2) = 0; + *(v2 - 1) = 0; + std::locale::locale(v2); + result = a1 + 44; + *(_BYTE *)(a1 + 44) = 0; + *(_DWORD *)a1 = &off_55F928; + *(_DWORD *)(a1 + 32) = 24; + *(_DWORD *)(a1 + 36) = a1 + 44; + *(_DWORD *)(a1 + 40) = 0; + return result; +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00513830) -------------------------------------------------------- +void __fastcall std::stringbuf::~stringbuf(_DWORD *Block) +{ + _DWORD *v2; // eax + + v2 = (_DWORD *)Block[9]; + *Block = &off_55F928; + if ( v2 != Block + 11 ) + operator delete(v2); + *Block = &off_560424; + std::locale::~locale((_DWORD **)Block + 7); + operator delete(Block); +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00513870) -------------------------------------------------------- +void __fastcall std::stringbuf::~stringbuf(int a1) +{ + void *Block; // eax + + Block = *(void **)(a1 + 36); + *(_DWORD *)a1 = &off_55F928; + if ( Block != (void *)(a1 + 44) ) + operator delete(Block); + *(_DWORD *)a1 = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 28)); +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (005138A0) -------------------------------------------------------- +int __thiscall std::stringbuf::operator=(int this, int a2) +{ + int v2; // ecx + int v3; // ebx + unsigned int v4; // eax + unsigned int v5; // edx + int v6; // edx + _BYTE *v7; // eax + int v8; // ecx + int v9; // ebx + char *v10; // eax + char *v11; // ebx + int v12; // edx + int v13; // ecx + char *v14; // ecx + _DWORD *v15; // esi + int v16; // ecx + int v17; // edx + int v18; // ebx + int v19; // edi + __int64 v20; // rax + int v21; // ebx + int v22; // ecx + int v24; // edx + const std::locale *v25; // [esp+4h] [ebp-A4h] + const std::locale *v26; // [esp+4h] [ebp-A4h] + char *Src; // [esp+14h] [ebp-94h] + _DWORD *v29; // [esp+50h] [ebp-58h] BYREF + _DWORD *v30; // [esp+54h] [ebp-54h] BYREF + _DWORD *v31; // [esp+58h] [ebp-50h] + __int64 v32; // [esp+60h] [ebp-48h] + __int64 v33; // [esp+68h] [ebp-40h] + __int64 v34; // [esp+70h] [ebp-38h] + __int64 v35; // [esp+78h] [ebp-30h] + __int64 v36; // [esp+80h] [ebp-28h] + int v37; // [esp+88h] [ebp-20h] + int v38; // [esp+8Ch] [ebp-1Ch] + + v32 = -1LL; + v31 = (_DWORD *)this; + v33 = -1LL; + v2 = *(_DWORD *)(a2 + 16); + v3 = *(_DWORD *)(a2 + 36); + v4 = *(_DWORD *)(a2 + 4); + v34 = -1LL; + v35 = -1LL; + v36 = -1LL; + v37 = -1; + v38 = -1; + if ( !v4 ) + { + if ( !v2 ) + goto LABEL_7; + goto LABEL_3; + } + v32 = (int)(v4 - v3); + v33 = *(_DWORD *)(a2 + 8) - v3; + v4 = *(_DWORD *)(a2 + 12); + v34 = (int)(v4 - v3); + if ( v2 ) + { +LABEL_3: + v35 = v2 - v3; + v5 = *(_DWORD *)(a2 + 20); + v36 = (int)(v5 - v2); + v37 = *(_DWORD *)(a2 + 24) - v3; + v38 = v37 >> 31; + if ( v4 < v5 ) + v4 = v5; + } + if ( v4 ) + *(_DWORD *)(a2 + 40) = v4 - v3; +LABEL_7: + std::streambuf::operator=((volatile signed __int32 **)this, a2); + std::locale::locale((volatile signed __int32 **)&v29, (volatile signed __int32 **)(a2 + 28), v25); + std::locale::locale((volatile signed __int32 **)&v30, (volatile signed __int32 **)(this + 28), v26); + (*(void (__thiscall **)(int, _DWORD **))(*(_DWORD *)this + 8))(this, &v29); + std::locale::operator=((volatile signed __int32 **)(this + 28), (volatile signed __int32 **)&v29); + std::locale::~locale(&v30); + std::locale::~locale(&v29); + v6 = *(_DWORD *)(a2 + 36); + *(_DWORD *)(this + 32) = *(_DWORD *)(a2 + 32); + v7 = *(_BYTE **)(this + 36); + Src = (char *)(a2 + 44); + if ( v6 == a2 + 44 ) + { + v24 = *(_DWORD *)(a2 + 40); + if ( v24 ) + { + if ( v24 == 1 ) + *v7 = *(_BYTE *)(a2 + 44); + else + memcpy(v7, Src, *(_DWORD *)(a2 + 40)); + v24 = *(_DWORD *)(a2 + 40); + v7 = *(_BYTE **)(this + 36); + } + *(_DWORD *)(this + 40) = v24; + v7[v24] = 0; + v7 = *(_BYTE **)(a2 + 36); + } + else + { + v8 = *(_DWORD *)(a2 + 40); + if ( v7 == (_BYTE *)(this + 44) ) + { + *(_DWORD *)(this + 36) = v6; + *(_DWORD *)(this + 40) = v8; + *(_DWORD *)(this + 44) = *(_DWORD *)(a2 + 44); + } + else + { + *(_DWORD *)(this + 36) = v6; + *(_DWORD *)(this + 40) = v8; + v9 = *(_DWORD *)(this + 44); + *(_DWORD *)(this + 44) = *(_DWORD *)(a2 + 44); + if ( v7 ) + { + *(_DWORD *)(a2 + 36) = v7; + *(_DWORD *)(a2 + 44) = v9; + goto LABEL_11; + } + } + v7 = (_BYTE *)(a2 + 44); + *(_DWORD *)(a2 + 36) = Src; + } +LABEL_11: + *(_DWORD *)(a2 + 40) = 0; + *v7 = 0; + v10 = *(char **)(a2 + 36); + v11 = &v10[*(_DWORD *)(a2 + 40)]; + v12 = *(_DWORD *)(a2 + 32) & 0x10; + if ( v10 == Src ) + v13 = 15; + else + v13 = *(_DWORD *)(a2 + 44); + v14 = &v10[v13]; + if ( (*(_DWORD *)(a2 + 32) & 8) != 0 ) + { + *(_DWORD *)(a2 + 4) = v10; + *(_DWORD *)(a2 + 8) = v10; + *(_DWORD *)(a2 + 12) = v11; + if ( v12 ) + { + *(_DWORD *)(a2 + 20) = v10; + *(_DWORD *)(a2 + 16) = v10; + *(_DWORD *)(a2 + 24) = v14; + } + } + else if ( v12 ) + { + *(_DWORD *)(a2 + 20) = v10; + *(_DWORD *)(a2 + 16) = v10; + *(_DWORD *)(a2 + 24) = v14; + *(_DWORD *)(a2 + 4) = v11; + *(_DWORD *)(a2 + 8) = v11; + *(_DWORD *)(a2 + 12) = v11; + } + v15 = v31; + v16 = v31[9]; + if ( ((unsigned int)v32 & HIDWORD(v32)) != -1 ) + { + v17 = v34; + v18 = v33; + v31[1] = v16 + v32; + v15[2] = v16 + v18; + v15[3] = v16 + v17; + } + if ( ((unsigned int)v35 & HIDWORD(v35)) != -1 ) + { + v19 = v37; + v20 = v36; + v21 = v16 + v35; + v15[4] = v16 + v35; + v15[6] = v16 + v19; + if ( v20 > 0x7FFFFFFF ) + { + v22 = v21 + 0x7FFFFFFF; + do + { + v21 = v22; + v20 -= 0x7FFFFFFFLL; + v22 += 0x7FFFFFFF; + } + while ( v20 > 0x7FFFFFFF ); + } + v15[5] = v21 + v20; + } + return this; +} +// 5139FB: variable 'v25' is possibly undefined +// 513A17: variable 'v26' is possibly undefined + +//----- (00513D00) -------------------------------------------------------- +unsigned int __thiscall std::wstringbuf::__xfer_bufptrs::__xfer_bufptrs(_DWORD *this, _DWORD *a2, int a3) +{ + int v3; // ebx + unsigned int result; // eax + int v5; // esi + unsigned int v6; // edi + + this[2] = -1; + this[3] = -1; + v3 = a2[9]; + *this = a3; + result = a2[1]; + this[4] = -1; + v5 = a2[4]; + this[5] = -1; + this[6] = -1; + this[7] = -1; + this[8] = -1; + this[9] = -1; + this[10] = -1; + this[11] = -1; + this[12] = -1; + this[13] = -1; + if ( !result ) + { + if ( !v5 ) + return result; + goto LABEL_3; + } + *((_QWORD *)this + 1) = (int)(result - v3) >> 1; + *((_QWORD *)this + 2) = (a2[2] - v3) >> 1; + result = a2[3]; + *((_QWORD *)this + 3) = (int)(result - v3) >> 1; + if ( v5 ) + { +LABEL_3: + *((_QWORD *)this + 4) = __PAIR64__((v5 - v3) >> 31, (v5 - v3) >> 1); + v6 = a2[5]; + *((_QWORD *)this + 5) = (int)(v6 - v5) >> 1; + *((_QWORD *)this + 6) = (a2[6] - v3) >> 1; + if ( result < v6 ) + result = v6; + } + if ( result ) + { + result = (int)(result - v3) >> 1; + a2[10] = result; + } + return result; +} + +//----- (00513E00) -------------------------------------------------------- +unsigned int __thiscall std::wstringbuf::__xfer_bufptrs::__xfer_bufptrs(_DWORD *this, _DWORD *a2, int a3) +{ + int v3; // ebx + unsigned int result; // eax + int v5; // esi + unsigned int v6; // edi + + this[2] = -1; + this[3] = -1; + v3 = a2[9]; + *this = a3; + result = a2[1]; + this[4] = -1; + v5 = a2[4]; + this[5] = -1; + this[6] = -1; + this[7] = -1; + this[8] = -1; + this[9] = -1; + this[10] = -1; + this[11] = -1; + this[12] = -1; + this[13] = -1; + if ( !result ) + { + if ( !v5 ) + return result; + goto LABEL_3; + } + *((_QWORD *)this + 1) = (int)(result - v3) >> 1; + *((_QWORD *)this + 2) = (a2[2] - v3) >> 1; + result = a2[3]; + *((_QWORD *)this + 3) = (int)(result - v3) >> 1; + if ( v5 ) + { +LABEL_3: + *((_QWORD *)this + 4) = __PAIR64__((v5 - v3) >> 31, (v5 - v3) >> 1); + v6 = a2[5]; + *((_QWORD *)this + 5) = (int)(v6 - v5) >> 1; + *((_QWORD *)this + 6) = (a2[6] - v3) >> 1; + if ( result < v6 ) + result = v6; + } + if ( result ) + { + result = (int)(result - v3) >> 1; + a2[10] = result; + } + return result; +} + +//----- (00513F00) -------------------------------------------------------- +int __fastcall std::wstringbuf::__xfer_bufptrs::~__xfer_bufptrs(int a1) +{ + int v1; // eax + _DWORD *v2; // esi + int v3; // ebx + int v4; // edx + int v5; // edi + int v6; // edi + int result; // eax + __int64 v8; // rax + int v9; // ecx + int v10; // ebx + int v11; // ecx + + v1 = *(_DWORD *)(a1 + 8); + v2 = *(_DWORD **)a1; + v3 = *(_DWORD *)(*(_DWORD *)a1 + 36); + if ( (v1 & *(_DWORD *)(a1 + 12)) != -1 ) + { + v4 = *(_DWORD *)(a1 + 24); + v5 = *(_DWORD *)(a1 + 16); + v2[1] = v3 + 2 * v1; + v2[2] = v3 + 2 * v5; + v2[3] = v3 + 2 * v4; + } + v6 = *(_DWORD *)(a1 + 32); + result = v6 & *(_DWORD *)(a1 + 36); + if ( result != -1 ) + { + v8 = *(_QWORD *)(a1 + 40); + v9 = v3 + 2 * *(_DWORD *)(a1 + 48); + v10 = v3 + 2 * v6; + v2[6] = v9; + v2[4] = v10; + if ( v8 > 0x7FFFFFFF ) + { + v11 = v10 - 2; + do + { + v10 = v11; + v8 -= 0x7FFFFFFFLL; + v11 -= 2; + } + while ( v8 > 0x7FFFFFFF ); + } + result = v10 + 2 * v8; + v2[5] = result; + } + return result; +} + +//----- (00513F90) -------------------------------------------------------- +int __fastcall std::wstringbuf::__xfer_bufptrs::~__xfer_bufptrs(int a1) +{ + int v1; // eax + _DWORD *v2; // esi + int v3; // ebx + int v4; // edx + int v5; // edi + int v6; // edi + int result; // eax + __int64 v8; // rax + int v9; // ecx + int v10; // ebx + int v11; // ecx + + v1 = *(_DWORD *)(a1 + 8); + v2 = *(_DWORD **)a1; + v3 = *(_DWORD *)(*(_DWORD *)a1 + 36); + if ( (v1 & *(_DWORD *)(a1 + 12)) != -1 ) + { + v4 = *(_DWORD *)(a1 + 24); + v5 = *(_DWORD *)(a1 + 16); + v2[1] = v3 + 2 * v1; + v2[2] = v3 + 2 * v5; + v2[3] = v3 + 2 * v4; + } + v6 = *(_DWORD *)(a1 + 32); + result = v6 & *(_DWORD *)(a1 + 36); + if ( result != -1 ) + { + v8 = *(_QWORD *)(a1 + 40); + v9 = v3 + 2 * *(_DWORD *)(a1 + 48); + v10 = v3 + 2 * v6; + v2[6] = v9; + v2[4] = v10; + if ( v8 > 0x7FFFFFFF ) + { + v11 = v10 - 2; + do + { + v10 = v11; + v8 -= 0x7FFFFFFFLL; + v11 -= 2; + } + while ( v8 > 0x7FFFFFFF ); + } + result = v10 + 2 * v8; + v2[5] = result; + } + return result; +} + +//----- (00514020) -------------------------------------------------------- +unsigned int __fastcall std::wstringbuf::_M_update_egptr(int a1) +{ + unsigned int result; // eax + + result = *(_DWORD *)(a1 + 20); + if ( result && *(_DWORD *)(a1 + 12) < result ) + { + if ( (*(_BYTE *)(a1 + 32) & 8) == 0 ) + { + *(_DWORD *)(a1 + 4) = result; + *(_DWORD *)(a1 + 8) = result; + } + *(_DWORD *)(a1 + 12) = result; + } + return result; +} + +//----- (00514050) -------------------------------------------------------- +_DWORD *__thiscall std::wstringbuf::_M_stringbuf_init(_DWORD *this, int a2) +{ + int v2; // ebx + int v3; // edi + _DWORD *result; // eax + int v5; // edi + _DWORD *v6; // [esp+8h] [ebp-1Ch] + + v2 = 0; + v3 = this[10]; + result = (_DWORD *)this[9]; + this[8] = a2; + if ( (a2 & 3) != 0 ) + v2 = v3; + v6 = (_DWORD *)((char *)result + 2 * v3); + if ( result == this + 11 ) + v5 = 14; + else + v5 = 2 * this[11]; + if ( (a2 & 8) != 0 ) + { + this[1] = result; + this[2] = result; + this[3] = v6; + } + if ( (a2 & 0x10) != 0 ) + { + this[6] = (char *)result + v5; + this[4] = result; + if ( (unsigned int)v2 > 0x7FFFFFFFuLL ) + { + if ( (((unsigned __int64)(unsigned int)v2 - 0x7FFFFFFF) >> 32) | (unsigned int)(v2 + 1) ) + { + result = (_DWORD *)((char *)result - 2); + v2 -= 0x7FFFFFFF; + } + else + { + --result; + v2 = 1; + } + } + result = (_DWORD *)((char *)result + 2 * v2); + this[5] = result; + if ( (a2 & 8) == 0 ) + { + result = v6; + this[1] = v6; + this[2] = v6; + this[3] = v6; + } + } + return result; +} + +//----- (00514140) -------------------------------------------------------- +int __thiscall std::wstringbuf::str(int this, int a2) +{ + unsigned int v3; // eax + + std::wstring::_M_replace((unsigned int *)(this + 36), 0, *(_DWORD *)(this + 40), *(_WORD **)a2, *(_DWORD *)(a2 + 4)); + v3 = 0; + if ( (*(_BYTE *)(this + 32) & 3) != 0 ) + v3 = *(_DWORD *)(this + 40); + return std::wstringbuf::_M_sync((_DWORD *)this, *(_DWORD **)(this + 36), 0, v3); +} + +//----- (005141A0) -------------------------------------------------------- +void __thiscall std::wstringbuf::swap(_DWORD *this, int a2) +{ + std::locale *v2; // esi + int v3; // ecx + int v4; // ebx + unsigned int v5; // eax + unsigned int v6; // esi + int v7; // esi + int v8; // ecx + int v9; // ebx + unsigned int v10; // eax + unsigned int v11; // edi + int v12; // eax + int v13; // edx + int v14; // eax + int v15; // edx + int v16; // eax + int v17; // edx + int v18; // eax + int v19; // edx + int v20; // eax + int v21; // eax + _DWORD *v22; // ebx + int v23; // ecx + int v24; // edx + int v25; // esi + __int64 v26; // rax + int v27; // edi + int v28; // ecx + bool v29; // cf + _DWORD *v30; // esi + int v31; // ecx + int v32; // edx + int v33; // ebx + int v34; // edi + __int64 v35; // rax + int v36; // ebx + int v37; // ecx + const std::locale *v38; // [esp+4h] [ebp-E4h] + const std::locale *v39; // [esp+4h] [ebp-E4h] + const std::locale *v40; // [esp+4h] [ebp-E4h] + const std::locale *v41; // [esp+4h] [ebp-E4h] + std::locale *v42; // [esp+10h] [ebp-D8h] + std::locale *v43; // [esp+10h] [ebp-D8h] + std::locale *v44; // [esp+10h] [ebp-D8h] + std::locale *v45; // [esp+10h] [ebp-D8h] + std::locale *v46; // [esp+14h] [ebp-D4h] + _DWORD *v48; // [esp+54h] [ebp-94h] BYREF + _DWORD *v49; // [esp+58h] [ebp-90h] BYREF + _DWORD *v50; // [esp+5Ch] [ebp-8Ch] BYREF + _DWORD *v51; // [esp+60h] [ebp-88h] + int v52; // [esp+68h] [ebp-80h] + int v53; // [esp+6Ch] [ebp-7Ch] + int v54; // [esp+70h] [ebp-78h] + int v55; // [esp+74h] [ebp-74h] + __int64 v56; // [esp+78h] [ebp-70h] + int v57; // [esp+80h] [ebp-68h] + int v58; // [esp+84h] [ebp-64h] + __int64 v59; // [esp+88h] [ebp-60h] + int v60; // [esp+90h] [ebp-58h] + int v61; // [esp+94h] [ebp-54h] + _DWORD *v62; // [esp+98h] [ebp-50h] + int v63; // [esp+A0h] [ebp-48h] + int v64; // [esp+A4h] [ebp-44h] + int v65; // [esp+A8h] [ebp-40h] + int v66; // [esp+ACh] [ebp-3Ch] + __int64 v67; // [esp+B0h] [ebp-38h] + int v68; // [esp+B8h] [ebp-30h] + int v69; // [esp+BCh] [ebp-2Ch] + __int64 v70; // [esp+C0h] [ebp-28h] + int v71; // [esp+C8h] [ebp-20h] + int v72; // [esp+CCh] [ebp-1Ch] + + v52 = -1; + v53 = -1; + v2 = (std::locale *)this[1]; + v51 = (_DWORD *)a2; + v54 = -1; + v3 = this[9]; + v55 = -1; + v4 = this[4]; + v56 = -1LL; + v57 = -1; + v58 = -1; + v59 = -1LL; + v60 = -1; + v61 = -1; + v46 = v2; + if ( !v2 ) + { + v5 = 0; + if ( !v4 ) + goto LABEL_7; + goto LABEL_3; + } + v52 = ((int)v2 - v3) >> 1; + v53 = ((int)v2 - v3) >> 31; + v42 = (std::locale *)this[2]; + v54 = ((int)v42 - v3) >> 1; + v55 = ((int)v42 - v3) >> 31; + v5 = this[3]; + v56 = (int)(v5 - v3) >> 1; + if ( v4 ) + { +LABEL_3: + v57 = (v4 - v3) >> 1; + v58 = (v4 - v3) >> 31; + v6 = this[5]; + v43 = (std::locale *)this[6]; + v59 = (int)(v6 - v4) >> 1; + v60 = ((int)v43 - v3) >> 1; + v61 = ((int)v43 - v3) >> 31; + if ( v5 < v6 ) + v5 = v6; + } + if ( v5 ) + this[10] = (int)(v5 - v3) >> 1; +LABEL_7: + v63 = -1; + v64 = -1; + v62 = this; + v65 = -1; + v7 = *(_DWORD *)(a2 + 4); + v66 = -1; + v67 = -1LL; + v8 = *(_DWORD *)(a2 + 36); + v9 = *(_DWORD *)(a2 + 16); + v68 = -1; + v69 = -1; + v70 = -1LL; + v71 = -1; + v72 = -1; + if ( !v7 ) + { + v10 = 0; + if ( !v9 ) + goto LABEL_13; + goto LABEL_9; + } + v63 = (v7 - v8) >> 1; + v64 = (v7 - v8) >> 31; + v44 = *(std::locale **)(a2 + 8); + v65 = ((int)v44 - v8) >> 1; + v66 = ((int)v44 - v8) >> 31; + v10 = *(_DWORD *)(a2 + 12); + v67 = (int)(v10 - v8) >> 1; + if ( v9 ) + { +LABEL_9: + v68 = (v9 - v8) >> 1; + v69 = (v9 - v8) >> 31; + v11 = *(_DWORD *)(a2 + 20); + v70 = (int)(v11 - v9) >> 1; + v45 = *(std::locale **)(a2 + 24); + v71 = ((int)v45 - v8) >> 1; + v72 = ((int)v45 - v8) >> 31; + if ( v10 < v11 ) + v10 = v11; + } + if ( v10 ) + *(_DWORD *)(a2 + 40) = (int)(v10 - v8) >> 1; +LABEL_13: + this[1] = v7; + *(_DWORD *)(a2 + 4) = v46; + v12 = this[2]; + this[2] = *(_DWORD *)(a2 + 8); + v13 = *(_DWORD *)(a2 + 12); + *(_DWORD *)(a2 + 8) = v12; + v14 = this[3]; + this[3] = v13; + v15 = *(_DWORD *)(a2 + 16); + *(_DWORD *)(a2 + 12) = v14; + v16 = this[4]; + this[4] = v15; + v17 = *(_DWORD *)(a2 + 20); + *(_DWORD *)(a2 + 16) = v16; + v18 = this[5]; + this[5] = v17; + v19 = *(_DWORD *)(a2 + 24); + *(_DWORD *)(a2 + 20) = v18; + v20 = this[6]; + this[6] = v19; + *(_DWORD *)(a2 + 24) = v20; + std::locale::locale((volatile signed __int32 **)&v50, (volatile signed __int32 **)this + 7, v38); + std::locale::operator=((volatile signed __int32 **)this + 7, (volatile signed __int32 **)(a2 + 28)); + std::locale::operator=((volatile signed __int32 **)(a2 + 28), (volatile signed __int32 **)&v50); + std::locale::~locale(&v50); + std::locale::locale((volatile signed __int32 **)&v48, (volatile signed __int32 **)(a2 + 28), v39); + std::locale::locale((volatile signed __int32 **)&v49, (volatile signed __int32 **)this + 7, v40); + (*(void (__thiscall **)(_DWORD *, _DWORD **))(*this + 8))(this, &v48); + std::locale::operator=((volatile signed __int32 **)this + 7, (volatile signed __int32 **)&v48); + std::locale::locale((volatile signed __int32 **)&v50, (volatile signed __int32 **)(a2 + 28), v41); + (*(void (__thiscall **)(int, _DWORD **))(*(_DWORD *)a2 + 8))(a2, &v49); + std::locale::operator=((volatile signed __int32 **)(a2 + 28), (volatile signed __int32 **)&v49); + std::locale::~locale(&v50); + std::locale::~locale(&v49); + std::locale::~locale(&v48); + v21 = this[8]; + this[8] = *(_DWORD *)(a2 + 32); + *(_DWORD *)(a2 + 32) = v21; + std::wstring::swap(this + 9, (_DWORD *)(a2 + 36)); + v22 = v62; + v23 = v62[9]; + if ( (v63 & v64) != -1 ) + { + v24 = v67; + v25 = v65; + v62[1] = v23 + 2 * v63; + v22[2] = v23 + 2 * v25; + v22[3] = v23 + 2 * v24; + } + if ( (v68 & v69) != -1 ) + { + v26 = v70; + v27 = v23 + 2 * v71; + v28 = v23 + 2 * v68; + v29 = (unsigned int)v70 > 0x7FFFFFFF; + v22[4] = v28; + v22[6] = v27; + if ( v29 + HIDWORD(v26) > 0 ) + { + do + { + v28 -= 2; + v26 -= 0x7FFFFFFFLL; + } + while ( v26 > 0x7FFFFFFF ); + } + v22[5] = v28 + 2 * v26; + } + v30 = v51; + v31 = v51[9]; + if ( (v52 & v53) != -1 ) + { + v32 = v56; + v33 = v54; + v51[1] = v31 + 2 * v52; + v30[2] = v31 + 2 * v33; + v30[3] = v31 + 2 * v32; + } + if ( (v57 & v58) != -1 ) + { + v34 = v60; + v35 = v59; + v36 = v31 + 2 * v57; + v30[4] = v36; + v30[6] = v31 + 2 * v34; + if ( v35 > 0x7FFFFFFF ) + { + v37 = v36 - 2; + do + { + v36 = v37; + v35 -= 0x7FFFFFFFLL; + v37 -= 2; + } + while ( v35 > 0x7FFFFFFF ); + } + v30[5] = v36 + 2 * v35; + } +} +// 514481: variable 'v38' is possibly undefined +// 5144C9: variable 'v39' is possibly undefined +// 5144DC: variable 'v40' is possibly undefined +// 514527: variable 'v41' is possibly undefined + +//----- (00514780) -------------------------------------------------------- +_DWORD *__thiscall std::wstringbuf::setbuf(_DWORD *this, _DWORD *a2, int a3) +{ + _WORD *v4; // eax + int v5; // ecx + + if ( !a2 || a3 < 0 ) + return this; + v4 = (_WORD *)this[9]; + this[10] = 0; + *v4 = 0; + std::wstringbuf::_M_sync(this, a2, a3, 0); + return (_DWORD *)v5; +} +// 5147C7: variable 'v5' is possibly undefined + +//----- (005147E0) -------------------------------------------------------- +int __thiscall std::wstringbuf::_M_sync(_DWORD *this, _DWORD *a2, int a3, unsigned int a4) +{ + int result; // eax + _DWORD *v5; // esi + int v6; // ebx + int v7; // edx + int v8; // edi + int v9; // edi + int v10; // esi + int v11; // edi + int v12; // [esp+0h] [ebp-1Ch] + + result = (int)a2; + v5 = (_DWORD *)this[9]; + v6 = this[8] & 0x10; + v7 = (int)a2 + 2 * this[10]; + v12 = this[8] & 8; + if ( v5 == this + 11 ) + v8 = 14; + else + v8 = 2 * this[11]; + v9 = (int)a2 + v8; + if ( a2 != v5 ) + { + v10 = a3; + a3 = 0; + v7 += 2 * v10; + v9 = v7; + } + if ( v12 ) + { + this[1] = a2; + this[3] = v7; + this[2] = (char *)a2 + 2 * a3; + } + if ( v6 ) + { + this[6] = v9; + this[4] = a2; + if ( a4 > 0x7FFFFFFF ) + { + v11 = a4 - 0x7FFFFFFF; + if ( (((unsigned __int64)a4 - 0x7FFFFFFF) >> 32) | (a4 + 1) ) + { + result = (int)a2 - 2; + } + else + { + result = (int)(a2 - 1); + v11 = 1; + } + a4 = v11; + } + this[5] = result + 2 * a4; + result = v12; + if ( !v12 ) + { + this[1] = v7; + this[2] = v7; + this[3] = v7; + } + } + return result; +} + +//----- (005148D0) -------------------------------------------------------- +_DWORD *__thiscall std::wstringbuf::seekoff(_DWORD *this, int a2, __int64 a3, int a4, unsigned int a5) +{ + bool v5; // bl + int v6; // ebx + unsigned int v8; // eax + int v9; // edx + int v10; // edx + __int64 v11; // [esp+0h] [ebp-34h] + unsigned int v12; // [esp+8h] [ebp-2Ch] + unsigned __int8 v13; // [esp+8h] [ebp-2Ch] + __int64 v14; // [esp+8h] [ebp-2Ch] + __int16 v15; // [esp+1Dh] [ebp-17h] + char v16; // [esp+1Fh] [ebp-15h] + + *this = -1; + this[1] = -1; + this[2] = 0; + v11 = a3; + v5 = ((unsigned __int8)a5 & *(_BYTE *)(a2 + 32) & 8) != 0; + v12 = (a5 & *(_DWORD *)(a2 + 32)) >> 4; + LOBYTE(v15) = (a4 != 1) & v12 & v5; + v13 = v12 & ((a5 >> 3) ^ 1) & 1; + HIBYTE(v15) = v5 & ((a5 >> 4) ^ 1); + if ( HIBYTE(v15) ) + { + v6 = *(_DWORD *)(a2 + 4); + if ( !v6 && a3 ) + return this; + v16 = v15 | v13; + } + else + { + v6 = *(_DWORD *)(a2 + 16); + if ( !v6 && a3 ) + return this; + v16 = v13 | v15; + if ( !(v13 | (unsigned __int8)v15) ) + return this; + } + v8 = *(_DWORD *)(a2 + 20); + if ( v8 && v8 > *(_DWORD *)(a2 + 12) ) + { + if ( (*(_DWORD *)(a2 + 32) & 8) == 0 ) + { + *(_DWORD *)(a2 + 4) = v8; + *(_DWORD *)(a2 + 8) = v8; + } + *(_DWORD *)(a2 + 12) = v8; + } + if ( a4 == 1 ) + { + v14 = a3 + ((int)(v8 - v6) >> 1); + v11 = ((*(_DWORD *)(a2 + 8) - v6) >> 1) + a3; + } + else + { + v14 = a3; + if ( a4 == 2 ) + { + v11 = ((*(_DWORD *)(a2 + 12) - v6) >> 1) + a3; + v14 = v11; + } + } + if ( v15 && v11 >= 0 && (*(_DWORD *)(a2 + 12) - v6) >> 1 >= v11 ) + { + v10 = *(_DWORD *)(a2 + 4); + *(_QWORD *)this = v11; + this[2] = 0; + *(_DWORD *)(a2 + 8) = v10 + 2 * v11; + } + if ( v14 >= 0 && v16 && (*(_DWORD *)(a2 + 12) - v6) >> 1 >= v14 ) + { + v9 = *(_DWORD *)(a2 + 16); + *(_QWORD *)this = v14; + this[2] = 0; + *(_DWORD *)(a2 + 20) = v9 + 2 * v14; + } + return this; +} + +//----- (00514B10) -------------------------------------------------------- +_DWORD *__thiscall std::wstringbuf::seekpos(_DWORD *this, _DWORD *a2, __int64 a3, int a4, int a5, int a6) +{ + _DWORD *result; // eax + int v7; // ecx + int v8; // ebx + unsigned int v9; // ebp + int v10; // [esp+0h] [ebp-2Ch] + + result = this; + *this = -1; + this[1] = -1; + this[2] = 0; + v7 = a2[8] & 8; + v10 = a6 & a2[8]; + if ( (a6 & v7) != 0 ) + v8 = a2[1]; + else + v8 = a2[4]; + if ( (!a3 || v8) && (v10 & 0x18) != 0 ) + { + v9 = a2[5]; + if ( v9 && v9 > a2[3] ) + { + if ( !v7 ) + { + a2[1] = v9; + a2[2] = v9; + } + a2[3] = v9; + } + if ( a3 >= 0 && __SPAIR64__((a2[3] - v8) >> 31, (a2[3] - v8) >> 1) >= a3 ) + { + if ( (a6 & v7) != 0 ) + a2[2] = a2[1] + 2 * a3; + if ( (v10 & 0x10) != 0 ) + a2[5] = a2[4] + 2 * a3; + *(_QWORD *)result = a3; + result[2] = a4; + } + } + return result; +} + +//----- (00514C00) -------------------------------------------------------- +int __thiscall std::wstringbuf::_M_pbump(_DWORD *this, int a2, int a3, __int64 a4) +{ + __int64 v5; // rax + int v6; // ecx + int result; // eax + + v5 = a4; + this[6] = a3; + v6 = a2; + for ( this[4] = a2; v5 > 0x7FFFFFFF; v5 -= 0x7FFFFFFFLL ) + v6 -= 2; + result = v6 + 2 * v5; + this[5] = result; + return result; +} + +//----- (00514C60) -------------------------------------------------------- +int __thiscall std::wstringbuf::overflow(_DWORD *this, unsigned __int16 a2) +{ + _DWORD *v2; // ebx + unsigned int v3; // edx + unsigned int v4; // esi + unsigned __int16 *v5; // eax + unsigned int v6; // eax + _WORD *v7; // edx + _WORD *v8; // eax + unsigned int v9; // edx + char *v11; // eax + int v12; // edx + int v13; // ecx + int v14; // edx + _DWORD *v15; // edi + char *v16; // eax + int v17; // [esp+1Ch] [ebp-7Ch] + int v18; // [esp+20h] [ebp-78h] + int v19; // [esp+20h] [ebp-78h] + int v20; // [esp+20h] [ebp-78h] + unsigned __int16 lpuexcpta; // [esp+28h] [ebp-70h] + void *Block; // [esp+68h] [ebp-30h] BYREF + int v24; // [esp+6Ch] [ebp-2Ch] + int v25[10]; // [esp+70h] [ebp-28h] BYREF + + v18 = this[8]; + if ( (v18 & 0x10) == 0 ) + return (unsigned __int16)-1; + if ( a2 == 0xFFFF ) + return 0; + v2 = (_DWORD *)this[9]; + if ( v2 == this + 11 ) + v3 = 7; + else + v3 = this[11]; + v4 = this[6]; + v5 = (unsigned __int16 *)this[5]; + v17 = this[4]; + if ( (int)(v4 - v17) >> 1 >= v3 ) + { + if ( v4 > (unsigned int)v5 ) + goto LABEL_22; + if ( v3 != 0x1FFFFFFF ) + { + if ( v4 <= (unsigned int)v5 ) + { + v24 = 0; + Block = v25; + v6 = 2 * v3; + LOWORD(v25[0]) = 0; + if ( 2 * v3 > 0x1FFFFFFF ) + v6 = 0x1FFFFFFF; + if ( v6 < 0x200 ) + v6 = 512; + std::wstring::reserve((int)&Block, v6); + v7 = (_WORD *)this[4]; + v19 = v24; + if ( v7 ) + { + std::wstring::_M_replace((unsigned int *)&Block, 0, v24, v7, (this[6] - (int)v7) >> 1); + v19 = v24; + } + v8 = Block; + v9 = 7; + if ( Block != v25 ) + v9 = v25[0]; + if ( v19 + 1 > v9 ) + { + std::wstring::_M_mutate((int)&Block, v19, 0, 0, 1); + v8 = Block; + } + v8[v19] = a2; + v24 = v19 + 1; + v8[v19 + 1] = 0; + std::wstring::swap(this + 9, &Block); + std::wstringbuf::_M_sync(this, (_DWORD *)this[9], (this[2] - this[1]) >> 1, (this[5] - this[4]) >> 1); + if ( Block != v25 ) + operator delete(Block); + v5 = (unsigned __int16 *)this[5]; + goto LABEL_23; + } +LABEL_22: + *v5 = a2; +LABEL_23: + this[5] = v5 + 1; + return a2; + } + return (unsigned __int16)-1; + } + v11 = (char *)v5 + (_DWORD)v2 - v17; + this[4] = v2; + this[6] = (char *)v2 + 2 * v3; + this[5] = v11; + if ( (v18 & 8) != 0 ) + { + v12 = this[1]; + this[1] = v2; + v20 = v12; + v13 = (int)v2 + this[3] - v12 + 2; + v14 = this[2]; + this[3] = v13; + this[2] = (char *)v2 + v14 - v20; + } + v15 = this; + v16 = v11 + 2; + *((_WORD *)v16 - 1) = a2; + lpuexcpta = a2; + v15[5] = v16; + return lpuexcpta; +} + +//----- (00514F50) -------------------------------------------------------- +int __thiscall std::wstringbuf::pbackfail(int this, int a2) +{ + unsigned int v2; // eax + int v3; // edx + int v4; // esi + + v2 = *(_DWORD *)(this + 8); + v3 = -1; + if ( v2 <= *(_DWORD *)(this + 4) ) + return v3; + if ( (_WORD)a2 == 0xFFFF ) + { + *(_DWORD *)(this + 8) = v2 - 2; + return 0; + } + v4 = *(unsigned __int16 *)(v2 - 2); + if ( (*(_BYTE *)(this + 32) & 0x10) == 0 && (_WORD)v4 != (_WORD)a2 ) + return v3; + *(_DWORD *)(this + 8) = v2 - 2; + v3 = v4; + if ( (_WORD)v4 == (_WORD)a2 ) + return v3; + *(_WORD *)(v2 - 2) = a2; + return a2; +} + +//----- (00514FB0) -------------------------------------------------------- +int __fastcall std::wstringbuf::showmanyc(int a1) +{ + unsigned int v1; // edx + unsigned int v2; // eax + + if ( (*(_BYTE *)(a1 + 32) & 8) == 0 ) + return -1; + v1 = *(_DWORD *)(a1 + 20); + v2 = *(_DWORD *)(a1 + 12); + if ( v1 ) + { + if ( v1 > v2 ) + { + *(_DWORD *)(a1 + 12) = v1; + v2 = v1; + } + } + return (int)(v2 - *(_DWORD *)(a1 + 8)) >> 1; +} + +//----- (00514FE0) -------------------------------------------------------- +int __fastcall std::wstringbuf::underflow(int a1) +{ + unsigned int v2; // eax + unsigned int v3; // edx + unsigned __int16 *v4; // eax + + if ( (*(_BYTE *)(a1 + 32) & 8) == 0 ) + return -1; + v2 = *(_DWORD *)(a1 + 20); + v3 = *(_DWORD *)(a1 + 12); + if ( v2 ) + { + if ( v2 > v3 ) + { + *(_DWORD *)(a1 + 12) = v2; + v3 = v2; + } + } + v4 = *(unsigned __int16 **)(a1 + 8); + if ( (unsigned int)v4 < v3 ) + return *v4; + else + return -1; +} + +//----- (00515020) -------------------------------------------------------- +void __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, std::locale *a2) +{ + int v2; // edx + unsigned int v3; // eax + int v4; // ecx + int v5; // eax + char *v6; // esi + std::locale *v7; // eax + int v8; // ecx + int v9; // ebx + char *v10; // ecx + int v11; // edx + const std::locale *v12; // [esp+4h] [ebp-A4h] + int v15; // [esp+60h] [ebp-48h] + int v16; // [esp+64h] [ebp-44h] + int v17; // [esp+68h] [ebp-40h] + __int64 v18; // [esp+70h] [ebp-38h] + int v19; // [esp+78h] [ebp-30h] + int v20; // [esp+7Ch] [ebp-2Ch] + int v21; // [esp+80h] [ebp-28h] + int v22; // [esp+88h] [ebp-20h] + + v15 = -1; + v16 = -1; + v17 = -1; + v2 = *((_DWORD *)a2 + 9); + v3 = *((_DWORD *)a2 + 1); + LODWORD(v18) = -1; + v19 = -1; + v20 = -1; + v21 = -1; + v22 = -1; + if ( !v3 ) + { + v4 = *((_DWORD *)a2 + 4); + if ( !v4 ) + goto LABEL_7; + goto LABEL_3; + } + v15 = (int)(v3 - v2) >> 1; + v16 = (int)(v3 - v2) >> 31; + v17 = (*((_DWORD *)a2 + 2) - v2) >> 1; + v3 = *((_DWORD *)a2 + 3); + v18 = (int)(v3 - v2) >> 1; + v4 = *((_DWORD *)a2 + 4); + if ( v4 ) + { +LABEL_3: + v19 = (v4 - v2) >> 1; + v20 = (v4 - v2) >> 31; + v21 = (*((_DWORD *)a2 + 5) - v4) >> 1; + v22 = (*((_DWORD *)a2 + 6) - v2) >> 1; + if ( v3 < *((_DWORD *)a2 + 5) ) + v3 = *((_DWORD *)a2 + 5); + } + if ( v3 ) + *((_DWORD *)a2 + 10) = (int)(v3 - v2) >> 1; +LABEL_7: + std::wstreambuf::basic_streambuf(this, a2, v12); + v5 = *((_DWORD *)a2 + 8); + *this = &off_55F968; + this[9] = this + 11; + this[8] = v5; + v6 = (char *)a2 + 44; + v7 = (std::locale *)*((_DWORD *)a2 + 9); + if ( v7 == (std::locale *)((char *)a2 + 44) ) + { + this[11] = *((_DWORD *)a2 + 11); + this[12] = *((_DWORD *)a2 + 12); + this[13] = *((_DWORD *)a2 + 13); + this[14] = *((_DWORD *)a2 + 14); + } + else + { + this[9] = v7; + this[11] = *((_DWORD *)a2 + 11); + } + this[10] = *((_DWORD *)a2 + 10); + *((_DWORD *)a2 + 9) = v6; + *((_WORD *)a2 + 22) = 0; + v8 = this[9]; + *((_DWORD *)a2 + 10) = 0; + if ( (v15 & v16) != -1 ) + { + this[1] = v8 + 2 * v15; + this[2] = v8 + 2 * v17; + this[3] = v8 + 2 * v18; + } + if ( (v19 & v20) != -1 ) + { + v9 = v8 + 2 * v19; + this[6] = v8 + 2 * v22; + this[4] = v9; + this[5] = v9 + 2 * v21; + } + v10 = (char *)a2 + 58; + v11 = *((_DWORD *)a2 + 8) & 0x10; + if ( (*((_DWORD *)a2 + 8) & 8) != 0 ) + { + *((_DWORD *)a2 + 1) = v6; + *((_DWORD *)a2 + 2) = v6; + *((_DWORD *)a2 + 3) = v6; + if ( v11 ) + { + *((_DWORD *)a2 + 5) = v6; + *((_DWORD *)a2 + 4) = v6; + *((_DWORD *)a2 + 6) = v10; + } + } + else if ( v11 ) + { + *((_DWORD *)a2 + 5) = v6; + *((_DWORD *)a2 + 4) = v6; + *((_DWORD *)a2 + 6) = v10; + *((_DWORD *)a2 + 1) = v6; + *((_DWORD *)a2 + 2) = v6; + *((_DWORD *)a2 + 3) = v6; + } +} +// 51524C: conditional instruction was optimized away because rax.8 is in (<80000000u|>=FFFFFFFF80000000u) +// 515178: variable 'v12' is possibly undefined +// 55F968: using guessed type int (*off_55F968)(); + +//----- (00515350) -------------------------------------------------------- +int __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, std::locale **a2, int a3) +{ + std::locale *v4; // eax + std::locale *v5; // edx + std::locale *v6; // edx + int result; // eax + const std::locale *v8; // [esp+4h] [ebp-18h] + + std::wstreambuf::basic_streambuf(this, (std::locale *)a2, v8); + v4 = a2[8]; + *this = &off_55F968; + this[9] = this + 11; + v5 = a2[9]; + this[8] = v4; + if ( v5 == (std::locale *)(a2 + 11) ) + { + this[11] = a2[11]; + this[12] = a2[12]; + this[13] = a2[13]; + this[14] = a2[14]; + } + else + { + this[9] = v5; + this[11] = a2[11]; + } + v6 = a2[10]; + a2[9] = (std::locale *)(a2 + 11); + result = 0; + a2[10] = 0; + this[10] = v6; + *((_WORD *)a2 + 22) = 0; + return result; +} +// 51535E: variable 'v8' is possibly undefined +// 55F968: using guessed type int (*off_55F968)(); + +//----- (005153D0) -------------------------------------------------------- +void __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, int a2, int a3) +{ + int v3; // edx + _WORD *v4; // eax + unsigned int v5; // eax + + *this = &off_560464; + this[1] = 0; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + std::locale::locale(this + 7); + v3 = *(_DWORD *)(a2 + 4); + v4 = *(_WORD **)a2; + *this = &off_55F968; + this[8] = 0; + this[9] = this + 11; + std::wstring::_M_construct(this + 9, v4, (int)&v4[v3]); + this[8] = a3; + v5 = 0; + if ( (a3 & 3) != 0 ) + v5 = this[10]; + std::wstringbuf::_M_sync(this, (_DWORD *)this[9], 0, v5); +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (005154F0) -------------------------------------------------------- +int __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, int a2) +{ + _DWORD *v3; // ecx + int result; // eax + + v3 = this + 7; + *(v3 - 7) = &off_560464; + *(v3 - 6) = 0; + *(v3 - 5) = 0; + *(v3 - 4) = 0; + *(v3 - 3) = 0; + *(v3 - 2) = 0; + *(v3 - 1) = 0; + std::locale::locale(v3); + *this = &off_55F968; + this[10] = 0; + this[8] = a2; + this[9] = this + 11; + result = 0; + *((_WORD *)this + 22) = 0; + return result; +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (00515560) -------------------------------------------------------- +int __fastcall std::wstringbuf::basic_stringbuf(int a1) +{ + _DWORD *v2; // ecx + int result; // eax + + v2 = (_DWORD *)(a1 + 28); + *(v2 - 7) = &off_560464; + *(v2 - 6) = 0; + *(v2 - 5) = 0; + *(v2 - 4) = 0; + *(v2 - 3) = 0; + *(v2 - 2) = 0; + *(v2 - 1) = 0; + std::locale::locale(v2); + *(_DWORD *)a1 = &off_55F968; + *(_DWORD *)(a1 + 36) = a1 + 44; + result = 0; + *(_DWORD *)(a1 + 32) = 24; + *(_DWORD *)(a1 + 40) = 0; + *(_WORD *)(a1 + 44) = 0; + return result; +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (005155D0) -------------------------------------------------------- +void __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, std::locale *a2) +{ + int v2; // edx + unsigned int v3; // eax + int v4; // ecx + int v5; // eax + char *v6; // esi + std::locale *v7; // eax + int v8; // ecx + int v9; // ebx + char *v10; // ecx + int v11; // edx + const std::locale *v12; // [esp+4h] [ebp-A4h] + int v15; // [esp+60h] [ebp-48h] + int v16; // [esp+64h] [ebp-44h] + int v17; // [esp+68h] [ebp-40h] + __int64 v18; // [esp+70h] [ebp-38h] + int v19; // [esp+78h] [ebp-30h] + int v20; // [esp+7Ch] [ebp-2Ch] + int v21; // [esp+80h] [ebp-28h] + int v22; // [esp+88h] [ebp-20h] + + v15 = -1; + v16 = -1; + v17 = -1; + v2 = *((_DWORD *)a2 + 9); + v3 = *((_DWORD *)a2 + 1); + LODWORD(v18) = -1; + v19 = -1; + v20 = -1; + v21 = -1; + v22 = -1; + if ( !v3 ) + { + v4 = *((_DWORD *)a2 + 4); + if ( !v4 ) + goto LABEL_7; + goto LABEL_3; + } + v15 = (int)(v3 - v2) >> 1; + v16 = (int)(v3 - v2) >> 31; + v17 = (*((_DWORD *)a2 + 2) - v2) >> 1; + v3 = *((_DWORD *)a2 + 3); + v18 = (int)(v3 - v2) >> 1; + v4 = *((_DWORD *)a2 + 4); + if ( v4 ) + { +LABEL_3: + v19 = (v4 - v2) >> 1; + v20 = (v4 - v2) >> 31; + v21 = (*((_DWORD *)a2 + 5) - v4) >> 1; + v22 = (*((_DWORD *)a2 + 6) - v2) >> 1; + if ( v3 < *((_DWORD *)a2 + 5) ) + v3 = *((_DWORD *)a2 + 5); + } + if ( v3 ) + *((_DWORD *)a2 + 10) = (int)(v3 - v2) >> 1; +LABEL_7: + std::wstreambuf::basic_streambuf(this, a2, v12); + v5 = *((_DWORD *)a2 + 8); + *this = &off_55F968; + this[9] = this + 11; + this[8] = v5; + v6 = (char *)a2 + 44; + v7 = (std::locale *)*((_DWORD *)a2 + 9); + if ( v7 == (std::locale *)((char *)a2 + 44) ) + { + this[11] = *((_DWORD *)a2 + 11); + this[12] = *((_DWORD *)a2 + 12); + this[13] = *((_DWORD *)a2 + 13); + this[14] = *((_DWORD *)a2 + 14); + } + else + { + this[9] = v7; + this[11] = *((_DWORD *)a2 + 11); + } + this[10] = *((_DWORD *)a2 + 10); + *((_DWORD *)a2 + 9) = v6; + *((_WORD *)a2 + 22) = 0; + v8 = this[9]; + *((_DWORD *)a2 + 10) = 0; + if ( (v15 & v16) != -1 ) + { + this[1] = v8 + 2 * v15; + this[2] = v8 + 2 * v17; + this[3] = v8 + 2 * v18; + } + if ( (v19 & v20) != -1 ) + { + v9 = v8 + 2 * v19; + this[6] = v8 + 2 * v22; + this[4] = v9; + this[5] = v9 + 2 * v21; + } + v10 = (char *)a2 + 58; + v11 = *((_DWORD *)a2 + 8) & 0x10; + if ( (*((_DWORD *)a2 + 8) & 8) != 0 ) + { + *((_DWORD *)a2 + 1) = v6; + *((_DWORD *)a2 + 2) = v6; + *((_DWORD *)a2 + 3) = v6; + if ( v11 ) + { + *((_DWORD *)a2 + 5) = v6; + *((_DWORD *)a2 + 4) = v6; + *((_DWORD *)a2 + 6) = v10; + } + } + else if ( v11 ) + { + *((_DWORD *)a2 + 5) = v6; + *((_DWORD *)a2 + 4) = v6; + *((_DWORD *)a2 + 6) = v10; + *((_DWORD *)a2 + 1) = v6; + *((_DWORD *)a2 + 2) = v6; + *((_DWORD *)a2 + 3) = v6; + } +} +// 5157FC: conditional instruction was optimized away because rax.8 is in (<80000000u|>=FFFFFFFF80000000u) +// 515728: variable 'v12' is possibly undefined +// 55F968: using guessed type int (*off_55F968)(); + +//----- (00515900) -------------------------------------------------------- +int __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, std::locale **a2, int a3) +{ + std::locale *v4; // eax + std::locale *v5; // edx + std::locale *v6; // edx + int result; // eax + const std::locale *v8; // [esp+4h] [ebp-18h] + + std::wstreambuf::basic_streambuf(this, (std::locale *)a2, v8); + v4 = a2[8]; + *this = &off_55F968; + this[9] = this + 11; + v5 = a2[9]; + this[8] = v4; + if ( v5 == (std::locale *)(a2 + 11) ) + { + this[11] = a2[11]; + this[12] = a2[12]; + this[13] = a2[13]; + this[14] = a2[14]; + } + else + { + this[9] = v5; + this[11] = a2[11]; + } + v6 = a2[10]; + a2[9] = (std::locale *)(a2 + 11); + result = 0; + a2[10] = 0; + this[10] = v6; + *((_WORD *)a2 + 22) = 0; + return result; +} +// 51590E: variable 'v8' is possibly undefined +// 55F968: using guessed type int (*off_55F968)(); + +//----- (00515980) -------------------------------------------------------- +void __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, int a2, int a3) +{ + int v3; // edx + _WORD *v4; // eax + unsigned int v5; // eax + + *this = &off_560464; + this[1] = 0; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + std::locale::locale(this + 7); + v3 = *(_DWORD *)(a2 + 4); + v4 = *(_WORD **)a2; + *this = &off_55F968; + this[8] = 0; + this[9] = this + 11; + std::wstring::_M_construct(this + 9, v4, (int)&v4[v3]); + this[8] = a3; + v5 = 0; + if ( (a3 & 3) != 0 ) + v5 = this[10]; + std::wstringbuf::_M_sync(this, (_DWORD *)this[9], 0, v5); +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (00515AA0) -------------------------------------------------------- +int __thiscall std::wstringbuf::basic_stringbuf(_DWORD *this, int a2) +{ + _DWORD *v3; // ecx + int result; // eax + + v3 = this + 7; + *(v3 - 7) = &off_560464; + *(v3 - 6) = 0; + *(v3 - 5) = 0; + *(v3 - 4) = 0; + *(v3 - 3) = 0; + *(v3 - 2) = 0; + *(v3 - 1) = 0; + std::locale::locale(v3); + *this = &off_55F968; + this[10] = 0; + this[8] = a2; + this[9] = this + 11; + result = 0; + *((_WORD *)this + 22) = 0; + return result; +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (00515B10) -------------------------------------------------------- +int __fastcall std::wstringbuf::basic_stringbuf(int a1) +{ + _DWORD *v2; // ecx + int result; // eax + + v2 = (_DWORD *)(a1 + 28); + *(v2 - 7) = &off_560464; + *(v2 - 6) = 0; + *(v2 - 5) = 0; + *(v2 - 4) = 0; + *(v2 - 3) = 0; + *(v2 - 2) = 0; + *(v2 - 1) = 0; + std::locale::locale(v2); + *(_DWORD *)a1 = &off_55F968; + *(_DWORD *)(a1 + 36) = a1 + 44; + result = 0; + *(_DWORD *)(a1 + 32) = 24; + *(_DWORD *)(a1 + 40) = 0; + *(_WORD *)(a1 + 44) = 0; + return result; +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (00515B80) -------------------------------------------------------- +void __fastcall std::wstringbuf::~wstringbuf(_DWORD *Block) +{ + _DWORD *v2; // eax + + v2 = (_DWORD *)Block[9]; + *Block = &off_55F968; + if ( v2 != Block + 11 ) + operator delete(v2); + *Block = &off_560464; + std::locale::~locale((_DWORD **)Block + 7); + operator delete(Block); +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (00515BC0) -------------------------------------------------------- +void __fastcall std::wstringbuf::~wstringbuf(int a1) +{ + void *Block; // eax + + Block = *(void **)(a1 + 36); + *(_DWORD *)a1 = &off_55F968; + if ( Block != (void *)(a1 + 44) ) + operator delete(Block); + *(_DWORD *)a1 = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 28)); +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (00515BF0) -------------------------------------------------------- +int __thiscall std::wstringbuf::operator=(int this, int a2) +{ + int v2; // ecx + int v3; // edx + unsigned int v4; // eax + unsigned int v5; // ebx + int v6; // edi + _WORD *v7; // eax + int v8; // edx + int v9; // ecx + int v10; // ebx + int v11; // esi + int v12; // edx + int v13; // ebx + int v14; // ecx + int v15; // edx + _WORD *v16; // edx + _DWORD *v17; // esi + int v18; // ecx + int v19; // edx + int v20; // ebx + int v21; // edi + __int64 v22; // rax + int v23; // ebx + int v24; // ecx + _WORD *v26; // ebx + int v27; // edx + int v28; // ecx + const std::locale *v29; // [esp+4h] [ebp-A4h] + const std::locale *v30; // [esp+4h] [ebp-A4h] + void *Srca; // [esp+14h] [ebp-94h] + _WORD *Src; // [esp+14h] [ebp-94h] + _DWORD *v34; // [esp+50h] [ebp-58h] BYREF + _DWORD *v35; // [esp+54h] [ebp-54h] BYREF + _DWORD *v36; // [esp+58h] [ebp-50h] + int v37; // [esp+60h] [ebp-48h] + int v38; // [esp+64h] [ebp-44h] + int v39; // [esp+68h] [ebp-40h] + int v40; // [esp+6Ch] [ebp-3Ch] + __int64 v41; // [esp+70h] [ebp-38h] + int v42; // [esp+78h] [ebp-30h] + int v43; // [esp+7Ch] [ebp-2Ch] + __int64 v44; // [esp+80h] [ebp-28h] + int v45; // [esp+88h] [ebp-20h] + int v46; // [esp+8Ch] [ebp-1Ch] + + v37 = -1; + v38 = -1; + v36 = (_DWORD *)this; + v39 = -1; + v2 = *(_DWORD *)(a2 + 16); + v3 = *(_DWORD *)(a2 + 36); + v4 = *(_DWORD *)(a2 + 4); + v40 = -1; + v41 = -1LL; + v42 = -1; + v43 = -1; + v44 = -1LL; + v45 = -1; + v46 = -1; + if ( !v4 ) + { + if ( !v2 ) + goto LABEL_7; + goto LABEL_3; + } + v37 = (int)(v4 - v3) >> 1; + v38 = (int)(v4 - v3) >> 31; + Srca = *(void **)(a2 + 8); + v39 = ((int)Srca - v3) >> 1; + v40 = ((int)Srca - v3) >> 31; + v4 = *(_DWORD *)(a2 + 12); + v41 = (int)(v4 - v3) >> 1; + if ( v2 ) + { +LABEL_3: + v42 = (v2 - v3) >> 1; + v43 = (v2 - v3) >> 31; + v5 = *(_DWORD *)(a2 + 20); + LODWORD(v44) = (int)(v5 - v2) >> 1; + v6 = *(_DWORD *)(a2 + 24); + v44 = (int)v44; + v45 = (v6 - v3) >> 1; + v46 = (v6 - v3) >> 31; + if ( v4 < v5 ) + v4 = v5; + } + if ( v4 ) + *(_DWORD *)(a2 + 40) = (int)(v4 - v3) >> 1; +LABEL_7: + std::wstreambuf::operator=((volatile signed __int32 **)this, a2); + std::locale::locale((volatile signed __int32 **)&v34, (volatile signed __int32 **)(a2 + 28), v29); + std::locale::locale((volatile signed __int32 **)&v35, (volatile signed __int32 **)(this + 28), v30); + (*(void (__thiscall **)(int, _DWORD **))(*(_DWORD *)this + 8))(this, &v34); + std::locale::operator=((volatile signed __int32 **)(this + 28), (volatile signed __int32 **)&v34); + std::locale::~locale(&v35); + std::locale::~locale(&v34); + *(_DWORD *)(this + 32) = *(_DWORD *)(a2 + 32); + v7 = *(_WORD **)(this + 36); + v8 = *(_DWORD *)(a2 + 36); + Src = (_WORD *)(a2 + 44); + if ( v8 != a2 + 44 ) + { + v9 = *(_DWORD *)(a2 + 44); + v10 = *(_DWORD *)(a2 + 40); + if ( v7 == (_WORD *)(this + 44) ) + { + *(_DWORD *)(this + 36) = v8; + *(_DWORD *)(this + 40) = v10; + *(_DWORD *)(this + 44) = v9; + } + else + { + v11 = *(_DWORD *)(this + 44); + *(_DWORD *)(this + 36) = v8; + *(_DWORD *)(this + 40) = v10; + *(_DWORD *)(this + 44) = v9; + if ( v7 ) + { + *(_DWORD *)(a2 + 36) = v7; + *(_DWORD *)(a2 + 44) = v11; + goto LABEL_11; + } + } + v7 = (_WORD *)(a2 + 44); + *(_WORD *)(a2 + 44) = 0; + *(_DWORD *)(a2 + 36) = Src; + *(_DWORD *)(a2 + 40) = 0; + v14 = *(_DWORD *)(a2 + 32) & 0x10; + v16 = (_WORD *)(a2 + 58); + if ( (*(_DWORD *)(a2 + 32) & 8) != 0 ) + goto LABEL_14; + goto LABEL_26; + } + v26 = (_WORD *)(a2 + 44); + v27 = *(_DWORD *)(a2 + 40); + v28 = v27; + if ( v27 ) + { + if ( v27 == 1 ) + { + *v7 = *(_WORD *)(a2 + 44); + v28 = 1; + } + else + { + memcpy(v7, Src, 2 * v27); + v27 = *(_DWORD *)(a2 + 40); + v26 = *(_WORD **)(a2 + 36); + v7 = *(_WORD **)(this + 36); + v28 = v27; + } + } + *(_DWORD *)(this + 40) = v27; + v7[v28] = 0; + v7 = v26; +LABEL_11: + *(_DWORD *)(a2 + 40) = 0; + v12 = *(_DWORD *)(a2 + 32); + *v7 = 0; + v13 = v12 & 8; + v14 = v12 & 0x10; + if ( v7 == Src ) + v15 = 7; + else + v15 = *(_DWORD *)(a2 + 44); + v16 = &v7[v15]; + if ( v13 ) + { +LABEL_14: + *(_DWORD *)(a2 + 4) = v7; + *(_DWORD *)(a2 + 8) = v7; + *(_DWORD *)(a2 + 12) = v7; + if ( v14 ) + { + *(_DWORD *)(a2 + 20) = v7; + *(_DWORD *)(a2 + 16) = v7; + *(_DWORD *)(a2 + 24) = v16; + } + goto LABEL_16; + } +LABEL_26: + if ( v14 ) + { + *(_DWORD *)(a2 + 20) = v7; + *(_DWORD *)(a2 + 16) = v7; + *(_DWORD *)(a2 + 24) = v16; + *(_DWORD *)(a2 + 4) = v7; + *(_DWORD *)(a2 + 8) = v7; + *(_DWORD *)(a2 + 12) = v7; + } +LABEL_16: + v17 = v36; + v18 = v36[9]; + if ( (v37 & v38) != -1 ) + { + v19 = v41; + v20 = v39; + v36[1] = v18 + 2 * v37; + v17[2] = v18 + 2 * v20; + v17[3] = v18 + 2 * v19; + } + if ( (v42 & v43) != -1 ) + { + v21 = v45; + v22 = v44; + v23 = v18 + 2 * v42; + v17[4] = v23; + v17[6] = v18 + 2 * v21; + if ( v22 > 0x7FFFFFFF ) + { + v24 = v23 - 2; + do + { + v23 = v24; + v22 -= 0x7FFFFFFFLL; + v24 -= 2; + } + while ( v22 > 0x7FFFFFFF ); + } + v17[5] = v23 + 2 * v22; + } + return this; +} +// 515D58: variable 'v29' is possibly undefined +// 515D77: variable 'v30' is possibly undefined + +//----- (00516080) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FCA0; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_55F9A8; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 55F9A8: using guessed type int (*off_55F9A8)(); +// 55FCA0: using guessed type int (*off_55FCA0)(); + +//----- (005161C0) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3) +{ + std::messages_byname::messages_byname(this, (int **)*a2, a3); +} + +//----- (005161D0) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FCA0; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_55F9A8; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 55F9A8: using guessed type int (*off_55F9A8)(); +// 55FCA0: using guessed type int (*off_55FCA0)(); + +//----- (00516310) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3) +{ + std::messages_byname::messages_byname(this, (int **)*a2, a3); +} + +//----- (00516320) -------------------------------------------------------- +void __fastcall std::messages_byname::~messages_byname(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_55FCA0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 51635E: variable 'lpfctx' is possibly undefined +// 55FCA0: using guessed type int (*off_55FCA0)(); + +//----- (00516380) -------------------------------------------------------- +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FCA0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 5163BE: variable 'lpfctx' is possibly undefined +// 55FCA0: using guessed type int (*off_55FCA0)(); + +//----- (005163E0) -------------------------------------------------------- +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FCA0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 51641E: variable 'lpfctx' is possibly undefined +// 55FCA0: using guessed type int (*off_55FCA0)(); + +//----- (00516440) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FCBC; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_55F9C4; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 55F9C4: using guessed type int (*off_55F9C4)(); +// 55FCBC: using guessed type int (*off_55FCBC)(); + +//----- (00516580) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3) +{ + std::messages_byname::messages_byname(this, (int **)*a2, a3); +} + +//----- (00516590) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FCBC; + this[2] = std::locale::facet::_S_get_c_locale(); + *this = &off_55F9C4; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(this + 2)); + std::locale::facet::_S_create_c_locale((std::locale::facet *)(this + 2), a2); + } + } +} +// 55F9C4: using guessed type int (*off_55F9C4)(); +// 55FCBC: using guessed type int (*off_55FCBC)(); + +//----- (005166D0) -------------------------------------------------------- +void __thiscall std::messages_byname::messages_byname(_DWORD *this, int **a2, int a3) +{ + std::messages_byname::messages_byname(this, (int **)*a2, a3); +} + +//----- (005166E0) -------------------------------------------------------- +void __fastcall std::messages_byname::~messages_byname(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_55FCBC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 51671E: variable 'lpfctx' is possibly undefined +// 55FCBC: using guessed type int (*off_55FCBC)(); + +//----- (00516740) -------------------------------------------------------- +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FCBC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 51677E: variable 'lpfctx' is possibly undefined +// 55FCBC: using guessed type int (*off_55FCBC)(); + +//----- (005167A0) -------------------------------------------------------- +void __fastcall std::messages_byname::~messages_byname(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FCBC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 5167DE: variable 'lpfctx' is possibly undefined +// 55FCBC: using guessed type int (*off_55FCBC)(); + +//----- (00516800) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55FCD8; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_55F9E0; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::numpunct::_M_initialize_numpunct(this, v4[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55F9E0: using guessed type int (*off_55F9E0)(); +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00516940) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55FCD8; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_55F9E0; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::numpunct::_M_initialize_numpunct(this, v5[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55F9E0: using guessed type int (*off_55F9E0)(); +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00516A90) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55FCD8; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_55F9E0; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::numpunct::_M_initialize_numpunct(this, v4[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55F9E0: using guessed type int (*off_55F9E0)(); +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00516BD0) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55FCD8; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_55F9E0; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::numpunct::_M_initialize_numpunct(this, v5[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55F9E0: using guessed type int (*off_55F9E0)(); +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00516D20) -------------------------------------------------------- +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *Block) +{ + *Block = &off_55F9E0; + std::numpunct::~numpunct(Block); + operator delete(Block); +} +// 55F9E0: using guessed type int (*off_55F9E0)(); + +//----- (00516D40) -------------------------------------------------------- +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1) +{ + *a1 = &off_55F9E0; + std::numpunct::~numpunct(a1); +} +// 55F9E0: using guessed type int (*off_55F9E0)(); + +//----- (00516D50) -------------------------------------------------------- +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1) +{ + *a1 = &off_55F9E0; + std::numpunct::~numpunct(a1); +} +// 55F9E0: using guessed type int (*off_55F9E0)(); + +//----- (00516D60) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55FCFC; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_55FA04; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::numpunct::_M_initialize_numpunct(this, v4[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55FA04: using guessed type int (*off_55FA04)(); +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00516EA0) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55FCFC; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_55FA04; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::numpunct::_M_initialize_numpunct(this, v5[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55FA04: using guessed type int (*off_55FA04)(); +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00516FF0) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55FCFC; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_55FA04; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::numpunct::_M_initialize_numpunct(this, v4[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55FA04: using guessed type int (*off_55FA04)(); +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00517130) -------------------------------------------------------- +void __thiscall std::numpunct_byname::numpunct_byname(_DWORD *this, struct _Unwind_Exception **a2, int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55FCFC; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); + *this = &off_55FA04; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::numpunct::_M_initialize_numpunct(this, v5[0]); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55FA04: using guessed type int (*off_55FA04)(); +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00517280) -------------------------------------------------------- +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *Block) +{ + *Block = &off_55FA04; + std::numpunct::~numpunct(Block); + operator delete(Block); +} +// 55FA04: using guessed type int (*off_55FA04)(); + +//----- (005172A0) -------------------------------------------------------- +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1) +{ + *a1 = &off_55FA04; + std::numpunct::~numpunct(a1); +} +// 55FA04: using guessed type int (*off_55FA04)(); + +//----- (005172B0) -------------------------------------------------------- +void __fastcall std::numpunct_byname::~numpunct_byname(_DWORD *a1) +{ + *a1 = &off_55FA04; + std::numpunct::~numpunct(a1); +} +// 55FA04: using guessed type int (*off_55FA04)(); + +//----- (005172C0) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_55FA28; + result = a3 != 0; + this[1] = result; + return result; +} +// 55FA28: using guessed type int (*off_55FA28)(); + +//----- (005172E0) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_55FA28; + result = a3 != 0; + this[1] = result; + return result; +} +// 55FA28: using guessed type int (*off_55FA28)(); + +//----- (00517300) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_55FA28; + result = a3 != 0; + this[1] = result; + return result; +} +// 55FA28: using guessed type int (*off_55FA28)(); + +//----- (00517320) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_55FA28; + result = a3 != 0; + this[1] = result; + return result; +} +// 55FA28: using guessed type int (*off_55FA28)(); + +//----- (00517340) -------------------------------------------------------- +void __fastcall std::time_get_byname>::~time_get_byname(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_55FD20; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 51734C: variable 'Blocka' is possibly undefined +// 55FD20: using guessed type int (*off_55FD20)(); + +//----- (00517360) -------------------------------------------------------- +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FD20; + std::locale::facet::~facet(a1); +} +// 517360: variable 'v1' is possibly undefined +// 55FD20: using guessed type int (*off_55FD20)(); + +//----- (00517370) -------------------------------------------------------- +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FD20; + std::locale::facet::~facet(a1); +} +// 517370: variable 'v1' is possibly undefined +// 55FD20: using guessed type int (*off_55FD20)(); + +//----- (00517380) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_55FA54; + result = a3 != 0; + this[1] = result; + return result; +} +// 55FA54: using guessed type int (*off_55FA54)(); + +//----- (005173A0) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_55FA54; + result = a3 != 0; + this[1] = result; + return result; +} +// 55FA54: using guessed type int (*off_55FA54)(); + +//----- (005173C0) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_55FA54; + result = a3 != 0; + this[1] = result; + return result; +} +// 55FA54: using guessed type int (*off_55FA54)(); + +//----- (005173E0) -------------------------------------------------------- +BOOL __thiscall std::time_get_byname>::time_get_byname( + _DWORD *this, + int a2, + int a3) +{ + BOOL result; // eax + + *this = &off_55FA54; + result = a3 != 0; + this[1] = result; + return result; +} +// 55FA54: using guessed type int (*off_55FA54)(); + +//----- (00517400) -------------------------------------------------------- +void __fastcall std::time_get_byname>::~time_get_byname(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_55FD4C; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 51740C: variable 'Blocka' is possibly undefined +// 55FD4C: using guessed type int (*off_55FD4C)(); + +//----- (00517420) -------------------------------------------------------- +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FD4C; + std::locale::facet::~facet(a1); +} +// 517420: variable 'v1' is possibly undefined +// 55FD4C: using guessed type int (*off_55FD4C)(); + +//----- (00517430) -------------------------------------------------------- +void __cdecl std::time_get_byname>::~time_get_byname(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FD4C; + std::locale::facet::~facet(a1); +} +// 517430: variable 'v1' is possibly undefined +// 55FD4C: using guessed type int (*off_55FD4C)(); + +//----- (00517440) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55F820; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FA80; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FA80: using guessed type int (*off_55FA80)(); + +//----- (00517590) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55F820; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FA80; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FA80: using guessed type int (*off_55FA80)(); + +//----- (005176F0) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55F820; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FA80; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FA80: using guessed type int (*off_55FA80)(); + +//----- (00517840) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55F820; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FA80; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55F820: using guessed type int (__cdecl *off_55F820)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FA80: using guessed type int (*off_55FA80)(); + +//----- (005179A0) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block) +{ + *Block = &off_55FA80; + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 55FA80: using guessed type int (*off_55FA80)(); + +//----- (005179C0) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_55FA80; + std::moneypunct::~moneypunct(a1); +} +// 55FA80: using guessed type int (*off_55FA80)(); + +//----- (005179D0) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_55FA80; + std::moneypunct::~moneypunct(a1); +} +// 55FA80: using guessed type int (*off_55FA80)(); + +//----- (005179E0) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55F854; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FAB4; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FAB4: using guessed type int (*off_55FAB4)(); + +//----- (00517B30) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55F854; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FAB4; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FAB4: using guessed type int (*off_55FAB4)(); + +//----- (00517C90) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55F854; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FAB4; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FAB4: using guessed type int (*off_55FAB4)(); + +//----- (00517DE0) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55F854; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FAB4; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55F854: using guessed type int (__cdecl *off_55F854)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FAB4: using guessed type int (*off_55FAB4)(); + +//----- (00517F40) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block) +{ + *Block = &off_55FAB4; + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 55FAB4: using guessed type int (*off_55FAB4)(); + +//----- (00517F60) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_55FAB4; + std::moneypunct::~moneypunct(a1); +} +// 55FAB4: using guessed type int (*off_55FAB4)(); + +//----- (00517F70) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_55FAB4; + std::moneypunct::~moneypunct(a1); +} +// 55FAB4: using guessed type int (*off_55FAB4)(); + +//----- (00517F80) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55F888; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FAE8; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FAE8: using guessed type int (*off_55FAE8)(); + +//----- (005180D0) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55F888; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FAE8; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FAE8: using guessed type int (*off_55FAE8)(); + +//----- (00518230) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55F888; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FAE8; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FAE8: using guessed type int (*off_55FAE8)(); + +//----- (00518380) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55F888; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FAE8; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55F888: using guessed type int (__cdecl *off_55F888)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FAE8: using guessed type int (*off_55FAE8)(); + +//----- (005184E0) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block) +{ + *Block = &off_55FAE8; + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 55FAE8: using guessed type int (*off_55FAE8)(); + +//----- (00518500) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_55FAE8; + std::moneypunct::~moneypunct(a1); +} +// 55FAE8: using guessed type int (*off_55FAE8)(); + +//----- (00518510) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_55FAE8; + std::moneypunct::~moneypunct(a1); +} +// 55FAE8: using guessed type int (*off_55FAE8)(); + +//----- (00518520) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55F8BC; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FB1C; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FB1C: using guessed type int (*off_55FB1C)(); + +//----- (00518670) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55F8BC; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FB1C; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FB1C: using guessed type int (*off_55FB1C)(); + +//----- (005187D0) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname(_DWORD *this, int **a2, int a3) +{ + int v4[3]; // [esp+5Ch] [ebp-Ch] BYREF + + this[1] = a3 != 0; + *this = &off_55F8BC; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FB1C; + if ( *(_BYTE *)a2 != 67 || *((_BYTE *)a2 + 1) ) + { + if ( strcmp((const char *)a2, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v4, a2); + std::moneypunct::_M_initialize_moneypunct(this, v4[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v4); + } + } +} +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FB1C: using guessed type int (*off_55FB1C)(); + +//----- (00518920) -------------------------------------------------------- +void __thiscall std::moneypunct_byname::moneypunct_byname( + _DWORD *this, + struct _Unwind_Exception **a2, + int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + int v5[3]; // [esp+5Ch] [ebp-Ch] BYREF + + lpuexcpt = *a2; + this[1] = a3 != 0; + *this = &off_55F8BC; + this[2] = 0; + std::moneypunct::_M_initialize_moneypunct(this, 0, 0); + *this = &off_55FB1C; + if ( *(_BYTE *)lpuexcpt != 67 || *((_BYTE *)lpuexcpt + 1) ) + { + if ( strcmp((const char *)lpuexcpt, "POSIX") ) + { + std::locale::facet::_S_create_c_locale((std::locale::facet *)v5, (int **)lpuexcpt); + std::moneypunct::_M_initialize_moneypunct(this, v5[0], 0); + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)v5); + } + } +} +// 55F8BC: using guessed type int (__cdecl *off_55F8BC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); +// 55FB1C: using guessed type int (*off_55FB1C)(); + +//----- (00518A80) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *Block) +{ + *Block = &off_55FB1C; + std::moneypunct::~moneypunct(Block); + operator delete(Block); +} +// 55FB1C: using guessed type int (*off_55FB1C)(); + +//----- (00518AA0) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_55FB1C; + std::moneypunct::~moneypunct(a1); +} +// 55FB1C: using guessed type int (*off_55FB1C)(); + +//----- (00518AB0) -------------------------------------------------------- +void __fastcall std::moneypunct_byname::~moneypunct_byname(_DWORD *a1) +{ + *a1 = &off_55FB1C; + std::moneypunct::~moneypunct(a1); +} +// 55FB1C: using guessed type int (*off_55FB1C)(); + +//----- (00518AC0) -------------------------------------------------------- +int __thiscall std::basic_stringstream,std::allocator>::str(int this, int a2) +{ + _DWORD *v2; // esi + unsigned int v4; // eax + + v2 = (_DWORD *)(this + 12); + std::string::_M_replace((unsigned int *)(this + 48), 0, *(_DWORD *)(this + 52), *(char **)a2, *(_DWORD *)(a2 + 4)); + v4 = 0; + if ( (*(_BYTE *)(this + 44) & 3) != 0 ) + v4 = *(_DWORD *)(this + 52); + return std::stringbuf::_M_sync(v2, *(_DWORD **)(this + 48), 0, v4); +} + +//----- (00518B30) -------------------------------------------------------- +void __thiscall std::basic_stringstream,std::allocator>::swap( + _DWORD *this, + _DWORD *a2) +{ + std::ios_base *v3; // edi + std::ios_base *v4; // esi + int v5; // edx + char v6; // cl + char v7; // cl + int v8; // edx + std::ios_base *v9; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v9); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + v8 = this[1]; + *((_BYTE *)v4 + 117) = v7; + this[1] = a2[1]; + a2[1] = v8; + std::stringbuf::swap(this + 3, (int)(a2 + 3)); +} +// 518B70: variable 'v9' is possibly undefined + +//----- (00518C00) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + _DWORD *this, + int *a2) +{ + int v2; // eax + int v3; // eax + std::ios_base *v4; // ecx + int v5; // eax + std::ios_base *v6; // [esp+0h] [ebp-58h] + struct _Unwind_Exception *lpuexcpt; // [esp+10h] [ebp-48h] + _DWORD *v8; // [esp+14h] [ebp-44h] + + v8 = this + 18; + std::ios_base::ios_base(this + 18); + *((_WORD *)this + 94) = 0; + v2 = a2[1]; + *this = &unk_55B244; + this[1] = v2; + this[46] = 0; + v3 = *a2; + this[48] = 0; + this[49] = 0; + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(v3 - 12)); + this[18] = &unk_55B258; + this[50] = 0; + this[51] = 0; + lpuexcpt = v4; + std::ios_base::_M_move((int)v8, v4, v6); + std::ios::_M_cache_locale(v8, (int)(this + 45)); + this[48] = 0; + v5 = *((_DWORD *)lpuexcpt + 28); + *((_DWORD *)lpuexcpt + 28) = 0; + this[46] = v5; + *((_WORD *)this + 94) = *((_WORD *)lpuexcpt + 58); + a2[1] = 0; + *this = &off_55FB54; + this[18] = off_55FB7C; + this[2] = off_55FB68; + std::stringbuf::basic_stringbuf(this + 3, (std::locale *)(a2 + 3)); + this[48] = this + 3; +} +// 518D92: positive sp value 4 has been found +// 518CA5: variable 'v6' is possibly undefined +// 55FB54: using guessed type int (*off_55FB54)(); +// 55FB68: using guessed type int (*off_55FB68[2])(); +// 55FB7C: using guessed type int (*off_55FB7C[2])(); + +//----- (00518DA0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + _DWORD *this, + int a2, + int a3) +{ + int v3; // eax + _BYTE *v4; // edx + unsigned int v5; // eax + _DWORD *v6; // [esp+20h] [ebp-48h] + int v7; // [esp+24h] [ebp-44h] + + v7 = (int)(this + 18); + std::ios_base::ios_base(this + 18); + this[46] = 0; + *((_WORD *)this + 94) = 0; + this[48] = 0; + this[49] = 0; + this[50] = 0; + this[51] = 0; + *this = &unk_55B244; + this[18] = &unk_55B258; + this[1] = 0; + std::ios::init(v7, 0); + this[2] = &unk_55B26C; + this[18] = &unk_55B280; + std::ios::init(v7, 0); + *this = &off_55FB54; + this[18] = off_55FB7C; + this[2] = off_55FB68; + this[3] = &off_560424; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + v6 = this + 3; + std::locale::locale(this + 10); + v3 = *(_DWORD *)(a2 + 4); + v4 = *(_BYTE **)a2; + this[3] = &off_55F928; + this[11] = 0; + this[12] = this + 14; + std::string::_M_construct(this + 12, v4, (int)&v4[v3]); + this[11] = a3; + v5 = 0; + if ( (a3 & 3) != 0 ) + v5 = this[13]; + std::stringbuf::_M_sync(v6, (_DWORD *)this[12], 0, v5); + std::ios::init(v7, (int)v6); +} +// 518FBE: positive sp value 4 has been found +// 55F928: using guessed type int (*off_55F928)(); +// 55FB54: using guessed type int (*off_55FB54)(); +// 55FB68: using guessed type int (*off_55FB68[2])(); +// 55FB7C: using guessed type int (*off_55FB7C[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00519000) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + _DWORD *this, + int a2) +{ + int v2; // [esp+24h] [ebp-44h] + + v2 = (int)(this + 18); + std::ios_base::ios_base(this + 18); + this[46] = 0; + *((_WORD *)this + 94) = 0; + this[48] = 0; + this[49] = 0; + this[50] = 0; + this[51] = 0; + *this = &unk_55B244; + this[18] = &unk_55B258; + this[1] = 0; + std::ios::init(v2, 0); + this[2] = &unk_55B26C; + this[18] = &unk_55B280; + std::ios::init(v2, 0); + *this = &off_55FB54; + this[18] = off_55FB7C; + this[2] = off_55FB68; + this[3] = &off_560424; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + std::locale::locale(this + 10); + this[11] = a2; + this[3] = &off_55F928; + this[12] = this + 14; + this[13] = 0; + *((_BYTE *)this + 56) = 0; + std::ios::init(v2, (int)(this + 3)); +} +// 5191BD: positive sp value 4 has been found +// 55F928: using guessed type int (*off_55F928)(); +// 55FB54: using guessed type int (*off_55FB54)(); +// 55FB68: using guessed type int (*off_55FB68[2])(); +// 55FB7C: using guessed type int (*off_55FB7C[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (005191E0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __fastcall std::basic_stringstream,std::allocator>::basic_stringstream(int a1) +{ + int v1; // [esp+24h] [ebp-44h] + + v1 = a1 + 72; + std::ios_base::ios_base((_DWORD *)(a1 + 72)); + *(_DWORD *)(a1 + 184) = 0; + *(_WORD *)(a1 + 188) = 0; + *(_DWORD *)(a1 + 192) = 0; + *(_DWORD *)(a1 + 196) = 0; + *(_DWORD *)(a1 + 200) = 0; + *(_DWORD *)(a1 + 204) = 0; + *(_DWORD *)a1 = &unk_55B244; + *(_DWORD *)(a1 + 72) = &unk_55B258; + *(_DWORD *)(a1 + 4) = 0; + std::ios::init(v1, 0); + *(_DWORD *)(a1 + 8) = &unk_55B26C; + *(_DWORD *)(a1 + 72) = &unk_55B280; + std::ios::init(v1, 0); + *(_DWORD *)a1 = &off_55FB54; + *(_DWORD *)(a1 + 72) = off_55FB7C; + *(_DWORD *)(a1 + 8) = off_55FB68; + *(_DWORD *)(a1 + 12) = &off_560424; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 24) = 0; + *(_DWORD *)(a1 + 28) = 0; + *(_DWORD *)(a1 + 32) = 0; + *(_DWORD *)(a1 + 36) = 0; + std::locale::locale((_DWORD *)(a1 + 40)); + *(_DWORD *)(a1 + 12) = &off_55F928; + *(_DWORD *)(a1 + 44) = 24; + *(_DWORD *)(a1 + 48) = a1 + 56; + *(_DWORD *)(a1 + 52) = 0; + *(_BYTE *)(a1 + 56) = 0; + std::ios::init(v1, a1 + 12); +} +// 51939C: positive sp value 4 has been found +// 55F928: using guessed type int (*off_55F928)(); +// 55FB54: using guessed type int (*off_55FB54)(); +// 55FB68: using guessed type int (*off_55FB68[2])(); +// 55FB7C: using guessed type int (*off_55FB7C[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (005193C0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + int *this, + int *a2, + _DWORD *a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + int v10; // eax + int v11; // edx + int v12; // eax + int v13; // edx + std::ios_base *v14; // [esp+0h] [ebp-58h] + std::ios_base *v15; // [esp+10h] [ebp-48h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-44h] + + v4 = a2[2]; + v5 = a2[3]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = a3[1]; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v4 - 12)); + v15 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move((int)lpuexcpt, v15, v14); + std::ios::_M_cache_locale(lpuexcpt, (int)lpuexcpt + 108); + v7 = *((_DWORD *)v15 + 28); + *((_DWORD *)lpuexcpt + 30) = 0; + *((_DWORD *)v15 + 28) = 0; + *((_DWORD *)lpuexcpt + 28) = v7; + *((_WORD *)lpuexcpt + 58) = *((_WORD *)v15 + 58); + v8 = a2[5]; + a3[1] = 0; + v9 = a2[4]; + this[2] = v9; + *(int *)((char *)this + *(_DWORD *)(v9 - 12) + 8) = v8; + v10 = a2[1]; + v11 = a2[6]; + *this = v10; + *(int *)((char *)this + *(_DWORD *)(v10 - 12)) = v11; + this[2] = a2[7]; + v12 = *a2; + v13 = a2[8]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v12 - 12)) = v13; + this[2] = a2[9]; + std::stringbuf::basic_stringbuf(this + 3, (std::locale *)(a3 + 3)); + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 120) = (int)(this + 3); +} +// 51950E: positive sp value 4 has been found +// 519426: variable 'v14' is possibly undefined + +//----- (00519530) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + int *this, + int *a2, + int a3, + int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + _DWORD *v9; // ecx + int v10; // eax + int v11; // edx + int v12; // edx + int v13; // eax + int v14; // eax + int v15; // eax + _BYTE *v16; // edx + unsigned int v17; // eax + _DWORD *v18; // [esp+24h] [ebp-44h] + + v5 = a2[2]; + v6 = a2[3]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = a2[4]; + this[2] = v8; + v9 = (int *)((char *)this + *(_DWORD *)(v8 - 12) + 8); + *v9 = a2[5]; + std::ios::init((int)v9, 0); + v10 = a2[1]; + v11 = a2[6]; + *this = v10; + *(int *)((char *)this + *(_DWORD *)(v10 - 12)) = v11; + this[2] = a2[7]; + v12 = a2[8]; + v13 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v13 - 12)) = v12; + v14 = a2[9]; + this[3] = (int)&off_560424; + this[2] = v14; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + v18 = this + 3; + std::locale::locale(this + 10); + v15 = *(_DWORD *)(a3 + 4); + v16 = *(_BYTE **)a3; + this[3] = (int)&off_55F928; + this[11] = 0; + this[12] = (int)(this + 14); + std::string::_M_construct(this + 12, v16, (int)&v16[v15]); + this[11] = a4; + v17 = 0; + if ( (a4 & 3) != 0 ) + v17 = this[13]; + std::stringbuf::_M_sync(v18, (_DWORD *)this[12], 0, v17); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)v18); +} +// 519717: positive sp value 4 has been found +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00519780) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + int *this, + int *a2, + int a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + _DWORD *v8; // ecx + int v9; // eax + int v10; // edx + int v11; // edx + int v12; // eax + int v13; // eax + int v14; // eax + + v4 = a2[2]; + v5 = a2[3]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v4 - 12), 0); + v7 = a2[4]; + this[2] = v7; + v8 = (int *)((char *)this + *(_DWORD *)(v7 - 12) + 8); + *v8 = a2[5]; + std::ios::init((int)v8, 0); + v9 = a2[1]; + v10 = a2[6]; + *this = v9; + *(int *)((char *)this + *(_DWORD *)(v9 - 12)) = v10; + this[2] = a2[7]; + v11 = a2[8]; + v12 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v12 - 12)) = v11; + v13 = a2[9]; + this[3] = (int)&off_560424; + this[4] = 0; + this[2] = v13; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + std::locale::locale(this + 10); + this[11] = a3; + this[12] = (int)(this + 14); + v14 = *this; + this[3] = (int)&off_55F928; + this[13] = 0; + *((_BYTE *)this + 56) = 0; + std::ios::init((int)this + *(_DWORD *)(v14 - 12), (int)(this + 3)); +} +// 51990A: positive sp value 4 has been found +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00519960) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + int *this, + int *a2) +{ + int v3; // eax + int v4; // ecx + int v5; // edx + int v6; // eax + _DWORD *v7; // ecx + int v8; // eax + int v9; // edx + int v10; // edx + int v11; // eax + int v12; // eax + int v13; // eax + + v3 = a2[2]; + v4 = a2[3]; + v5 = *(_DWORD *)(v3 - 12); + *this = v3; + *(int *)((char *)this + v5) = v4; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v3 - 12), 0); + v6 = a2[4]; + this[2] = v6; + v7 = (int *)((char *)this + *(_DWORD *)(v6 - 12) + 8); + *v7 = a2[5]; + std::ios::init((int)v7, 0); + v8 = a2[1]; + v9 = a2[6]; + *this = v8; + *(int *)((char *)this + *(_DWORD *)(v8 - 12)) = v9; + this[2] = a2[7]; + v10 = a2[8]; + v11 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v11 - 12)) = v10; + v12 = a2[9]; + this[3] = (int)&off_560424; + this[4] = 0; + this[2] = v12; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + std::locale::locale(this + 10); + this[3] = (int)&off_55F928; + this[12] = (int)(this + 14); + v13 = *this; + this[11] = 24; + this[13] = 0; + *((_BYTE *)this + 56) = 0; + std::ios::init((int)this + *(_DWORD *)(v13 - 12), (int)(this + 3)); +} +// 519AEB: positive sp value 4 has been found +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00519B40) -------------------------------------------------------- +void __fastcall std::basic_stringstream,std::allocator>::~basic_stringstream( + _DWORD *Block) +{ + _DWORD *v2; // eax + + v2 = (_DWORD *)Block[12]; + *Block = &off_55FB54; + Block[18] = off_55FB7C; + Block[2] = off_55FB68; + Block[3] = &off_55F928; + if ( v2 != Block + 14 ) + operator delete(v2); + Block[3] = &off_560424; + std::locale::~locale((_DWORD **)Block + 10); + Block[2] = &unk_55B26C; + *Block = &unk_55B244; + Block[1] = 0; + Block[18] = &off_560E20; + std::ios_base::~ios_base((int)(Block + 18)); + operator delete(Block); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FB54: using guessed type int (*off_55FB54)(); +// 55FB68: using guessed type int (*off_55FB68[2])(); +// 55FB7C: using guessed type int (*off_55FB7C[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00519BC0) -------------------------------------------------------- +void __fastcall std::basic_stringstream,std::allocator>::~basic_stringstream(int a1) +{ + void *Block; // eax + + Block = *(void **)(a1 + 48); + *(_DWORD *)a1 = &off_55FB54; + *(_DWORD *)(a1 + 72) = off_55FB7C; + *(_DWORD *)(a1 + 8) = off_55FB68; + *(_DWORD *)(a1 + 12) = &off_55F928; + if ( Block != (void *)(a1 + 56) ) + operator delete(Block); + *(_DWORD *)(a1 + 12) = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 40)); + *(_DWORD *)(a1 + 8) = &unk_55B26C; + *(_DWORD *)a1 = &unk_55B244; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 72) = &off_560E20; + std::ios_base::~ios_base(a1 + 72); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FB54: using guessed type int (*off_55FB54)(); +// 55FB68: using guessed type int (*off_55FB68[2])(); +// 55FB7C: using guessed type int (*off_55FB7C[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00519C30) -------------------------------------------------------- +int __thiscall std::basic_stringstream,std::allocator>::~basic_stringstream( + char *this, + int *a2) +{ + int v3; // eax + int v4; // eax + int v5; // eax + int v6; // eax + int v7; // eax + int result; // eax + + v3 = *a2; + *(_DWORD *)this = *a2; + *(_DWORD *)&this[*(_DWORD *)(v3 - 12)] = a2[8]; + v4 = a2[9]; + *((_DWORD *)this + 3) = &off_55F928; + *((_DWORD *)this + 2) = v4; + if ( *((char **)this + 12) != this + 56 ) + operator delete(*((void **)this + 12)); + *((_DWORD *)this + 3) = &off_560424; + std::locale::~locale((_DWORD **)this + 10); + v5 = a2[1]; + *(_DWORD *)this = v5; + *(_DWORD *)&this[*(_DWORD *)(v5 - 12)] = a2[6]; + *((_DWORD *)this + 2) = a2[7]; + v6 = a2[4]; + *((_DWORD *)this + 2) = v6; + *(_DWORD *)&this[*(_DWORD *)(v6 - 12) + 8] = a2[5]; + v7 = a2[2]; + *(_DWORD *)this = v7; + result = *(_DWORD *)(v7 - 12); + *(_DWORD *)&this[result] = a2[3]; + *((_DWORD *)this + 1) = 0; + return result; +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (00519CC0) -------------------------------------------------------- +_DWORD *__thiscall std::basic_stringstream,std::allocator>::operator=( + _DWORD *this, + _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // eax + char v6; // cl + char v7; // cl + int v8; // eax + std::ios_base *v10; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v10); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + v8 = this[1]; + *((_BYTE *)v4 + 117) = v7; + this[1] = a2[1]; + a2[1] = v8; + std::stringbuf::operator=((int)(this + 3), (int)(a2 + 3)); + return this; +} +// 519D00: variable 'v10' is possibly undefined + +//----- (00519DA0) -------------------------------------------------------- +int __thiscall std::basic_stringstream,std::allocator>::str( + int this, + int a2) +{ + _DWORD *v2; // esi + unsigned int v4; // eax + + v2 = (_DWORD *)(this + 12); + std::wstring::_M_replace((unsigned int *)(this + 48), 0, *(_DWORD *)(this + 52), *(_WORD **)a2, *(_DWORD *)(a2 + 4)); + v4 = 0; + if ( (*(_BYTE *)(this + 44) & 3) != 0 ) + v4 = *(_DWORD *)(this + 52); + return std::wstringbuf::_M_sync(v2, *(_DWORD **)(this + 48), 0, v4); +} + +//----- (00519E10) -------------------------------------------------------- +void __thiscall std::basic_stringstream,std::allocator>::swap( + _DWORD *this, + _DWORD *a2) +{ + std::ios_base *v3; // edi + std::ios_base *v4; // esi + int v5; // edx + __int16 v6; // cx + int v7; // edx + std::ios_base *v8; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v8); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + v7 = this[1]; + *((_BYTE *)v4 + 118) = v6; + this[1] = a2[1]; + a2[1] = v7; + std::wstringbuf::swap(this + 3, (int)(a2 + 3)); +} +// 519E50: variable 'v8' is possibly undefined + +//----- (00519EF0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + _DWORD *this, + _DWORD *a2) +{ + int v2; // eax + int v3; // eax + std::ios_base *v4; // edx + int v5; // eax + int v6; // edx + unsigned int v7; // eax + int v8; // ecx + int v9; // eax + _DWORD *v10; // esi + _DWORD *v11; // eax + int v12; // ecx + int v13; // ebx + char *v14; // ecx + int v15; // edx + std::ios_base *v16; // [esp+0h] [ebp-B8h] + const std::locale *v17; // [esp+0h] [ebp-B8h] + struct _Unwind_Exception *lpuexcpta; // [esp+20h] [ebp-98h] + struct _Unwind_Exception *lpuexcpt; // [esp+20h] [ebp-98h] + _DWORD *v20; // [esp+24h] [ebp-94h] + int v22; // [esp+70h] [ebp-48h] + int v23; // [esp+74h] [ebp-44h] + int v24; // [esp+78h] [ebp-40h] + __int64 v25; // [esp+80h] [ebp-38h] + int v26; // [esp+88h] [ebp-30h] + int v27; // [esp+8Ch] [ebp-2Ch] + int v28; // [esp+90h] [ebp-28h] + int v29; // [esp+98h] [ebp-20h] + + v20 = this + 18; + std::ios_base::ios_base(this + 18); + v2 = a2[1]; + this[46] = 0; + this[1] = v2; + *((_WORD *)this + 94) = 0; + v3 = *a2; + *this = &unk_55B294; + *((_BYTE *)this + 190) = 0; + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(v3 - 12)); + this[48] = 0; + this[49] = 0; + this[50] = 0; + this[51] = 0; + this[18] = &unk_55B2A8; + lpuexcpta = v4; + std::ios_base::_M_move((int)v20, v4, v16); + std::wios::_M_cache_locale(v20, (int)(this + 45)); + v22 = -1; + v23 = -1; + v5 = *((_DWORD *)lpuexcpta + 28); + *((_DWORD *)lpuexcpta + 28) = 0; + this[48] = 0; + this[46] = v5; + v24 = -1; + *((_WORD *)this + 94) = *((_WORD *)lpuexcpta + 58); + v6 = a2[12]; + *((_BYTE *)this + 190) = *((_BYTE *)lpuexcpta + 118); + LODWORD(v25) = -1; + a2[1] = 0; + lpuexcpt = (struct _Unwind_Exception *)(this + 3); + v7 = a2[4]; + *this = &off_55FB90; + this[18] = off_55FBB8; + this[2] = off_55FBA4; + v26 = -1; + v27 = -1; + v28 = -1; + v29 = -1; + if ( !v7 ) + { + v8 = a2[7]; + if ( !v8 ) + goto LABEL_7; + goto LABEL_3; + } + v22 = (int)(v7 - v6) >> 1; + v23 = (int)(v7 - v6) >> 31; + v24 = (a2[5] - v6) >> 1; + v7 = a2[6]; + v25 = (int)(v7 - v6) >> 1; + v8 = a2[7]; + if ( v8 ) + { +LABEL_3: + v26 = (v8 - v6) >> 1; + v27 = (v8 - v6) >> 31; + v28 = (a2[8] - v8) >> 1; + v29 = (a2[9] - v6) >> 1; + if ( v7 < a2[8] ) + v7 = a2[8]; + } + if ( v7 ) + a2[13] = (int)(v7 - v6) >> 1; +LABEL_7: + std::wstreambuf::basic_streambuf(lpuexcpt, (std::locale *)(a2 + 3), v17); + v9 = a2[11]; + this[3] = &off_55F968; + this[12] = this + 14; + v10 = a2 + 14; + this[11] = v9; + v11 = (_DWORD *)a2[12]; + if ( v11 == a2 + 14 ) + { + this[14] = a2[14]; + this[15] = a2[15]; + this[16] = a2[16]; + this[17] = a2[17]; + } + else + { + this[12] = v11; + this[14] = a2[14]; + } + this[13] = a2[13]; + a2[12] = v10; + *((_WORD *)a2 + 28) = 0; + v12 = this[12]; + a2[13] = 0; + if ( (v22 & v23) != -1 ) + { + this[4] = v12 + 2 * v22; + this[5] = v12 + 2 * v24; + this[6] = v12 + 2 * v25; + } + if ( (v26 & v27) != -1 ) + { + v13 = v12 + 2 * v26; + this[9] = v12 + 2 * v29; + this[7] = v13; + this[8] = v13 + 2 * v28; + } + v14 = (char *)a2 + 70; + v15 = a2[11] & 0x10; + if ( (a2[11] & 8) != 0 ) + { + a2[4] = v10; + a2[5] = v10; + a2[6] = v10; + if ( v15 ) + { + a2[8] = v10; + a2[7] = v10; + a2[9] = v14; + } + } + else if ( v15 ) + { + a2[8] = v10; + a2[7] = v10; + a2[9] = v14; + a2[4] = v10; + a2[5] = v10; + a2[6] = v10; + } + this[48] = lpuexcpt; +} +// 51A375: positive sp value 4 has been found +// 51A234: conditional instruction was optimized away because rax.8 is in (<80000000u|>=FFFFFFFF80000000u) +// 519FB9: variable 'v16' is possibly undefined +// 51A15F: variable 'v17' is possibly undefined +// 55F968: using guessed type int (*off_55F968)(); +// 55FB90: using guessed type int (*off_55FB90)(); +// 55FBA4: using guessed type int (*off_55FBA4[2])(); +// 55FBB8: using guessed type int (*off_55FBB8[2])(); + +//----- (0051A380) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + _DWORD *this, + int a2, + int a3) +{ + int v3; // edx + _WORD *v4; // eax + unsigned int v5; // eax + _DWORD *v6; // [esp+20h] [ebp-48h] + int v7; // [esp+24h] [ebp-44h] + + v7 = (int)(this + 18); + std::ios_base::ios_base(this + 18); + this[46] = 0; + *((_WORD *)this + 94) = 0; + *((_BYTE *)this + 190) = 0; + this[48] = 0; + this[49] = 0; + this[50] = 0; + this[51] = 0; + *this = &unk_55B294; + this[18] = &unk_55B2A8; + this[1] = 0; + std::wios::init(v7, 0); + this[2] = &unk_55B2F8; + this[18] = &unk_55B30C; + std::wios::init(v7, 0); + *this = &off_55FB90; + this[18] = off_55FBB8; + this[2] = off_55FBA4; + this[3] = &off_560464; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + v6 = this + 3; + std::locale::locale(this + 10); + v3 = *(_DWORD *)(a2 + 4); + v4 = *(_WORD **)a2; + this[3] = &off_55F968; + this[11] = 0; + this[12] = this + 14; + std::wstring::_M_construct(this + 12, v4, (int)&v4[v3]); + this[11] = a3; + v5 = 0; + if ( (a3 & 3) != 0 ) + v5 = this[13]; + std::wstringbuf::_M_sync(v6, (_DWORD *)this[12], 0, v5); + std::wios::init(v7, (int)v6); +} +// 51A5A3: positive sp value 4 has been found +// 55F968: using guessed type int (*off_55F968)(); +// 55FB90: using guessed type int (*off_55FB90)(); +// 55FBA4: using guessed type int (*off_55FBA4[2])(); +// 55FBB8: using guessed type int (*off_55FBB8[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051A5E0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + _DWORD *this, + int a2) +{ + int v2; // [esp+24h] [ebp-44h] + + v2 = (int)(this + 18); + std::ios_base::ios_base(this + 18); + this[46] = 0; + *((_WORD *)this + 94) = 0; + *((_BYTE *)this + 190) = 0; + this[48] = 0; + this[49] = 0; + this[50] = 0; + this[51] = 0; + *this = &unk_55B294; + this[18] = &unk_55B2A8; + this[1] = 0; + std::wios::init(v2, 0); + this[2] = &unk_55B2F8; + this[18] = &unk_55B30C; + std::wios::init(v2, 0); + *this = &off_55FB90; + this[18] = off_55FBB8; + this[2] = off_55FBA4; + this[3] = &off_560464; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + std::locale::locale(this + 10); + this[11] = a2; + *((_WORD *)this + 28) = 0; + this[3] = &off_55F968; + this[12] = this + 14; + this[13] = 0; + std::wios::init(v2, (int)(this + 3)); +} +// 51A7A6: positive sp value 4 has been found +// 55F968: using guessed type int (*off_55F968)(); +// 55FB90: using guessed type int (*off_55FB90)(); +// 55FBA4: using guessed type int (*off_55FBA4[2])(); +// 55FBB8: using guessed type int (*off_55FBB8[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051A7D0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __fastcall std::basic_stringstream,std::allocator>::basic_stringstream( + int a1) +{ + int v1; // [esp+24h] [ebp-44h] + + v1 = a1 + 72; + std::ios_base::ios_base((_DWORD *)(a1 + 72)); + *(_DWORD *)(a1 + 184) = 0; + *(_WORD *)(a1 + 188) = 0; + *(_BYTE *)(a1 + 190) = 0; + *(_DWORD *)(a1 + 192) = 0; + *(_DWORD *)(a1 + 196) = 0; + *(_DWORD *)(a1 + 200) = 0; + *(_DWORD *)(a1 + 204) = 0; + *(_DWORD *)a1 = &unk_55B294; + *(_DWORD *)(a1 + 72) = &unk_55B2A8; + *(_DWORD *)(a1 + 4) = 0; + std::wios::init(v1, 0); + *(_DWORD *)(a1 + 8) = &unk_55B2F8; + *(_DWORD *)(a1 + 72) = &unk_55B30C; + std::wios::init(v1, 0); + *(_DWORD *)a1 = &off_55FB90; + *(_DWORD *)(a1 + 72) = off_55FBB8; + *(_DWORD *)(a1 + 8) = off_55FBA4; + *(_DWORD *)(a1 + 12) = &off_560464; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 24) = 0; + *(_DWORD *)(a1 + 28) = 0; + *(_DWORD *)(a1 + 32) = 0; + *(_DWORD *)(a1 + 36) = 0; + std::locale::locale((_DWORD *)(a1 + 40)); + *(_WORD *)(a1 + 56) = 0; + *(_DWORD *)(a1 + 12) = &off_55F968; + *(_DWORD *)(a1 + 44) = 24; + *(_DWORD *)(a1 + 48) = a1 + 56; + *(_DWORD *)(a1 + 52) = 0; + std::wios::init(v1, a1 + 12); +} +// 51A995: positive sp value 4 has been found +// 55F968: using guessed type int (*off_55F968)(); +// 55FB90: using guessed type int (*off_55FB90)(); +// 55FBA4: using guessed type int (*off_55FBA4[2])(); +// 55FBB8: using guessed type int (*off_55FBB8[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051A9C0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + int *this, + int *a2, + _DWORD *a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + int v10; // eax + int v11; // edx + int v12; // eax + int v13; // edx + int v14; // edx + unsigned int v15; // eax + int v16; // ecx + int v17; // eax + _DWORD *v18; // esi + _DWORD *v19; // eax + int v20; // ecx + int v21; // ebx + char *v22; // ecx + int v23; // edx + std::ios_base *v24; // [esp+0h] [ebp-A8h] + const std::locale *v25; // [esp+0h] [ebp-A8h] + std::ios_base *v26; // [esp+10h] [ebp-98h] + _DWORD *v27; // [esp+10h] [ebp-98h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-94h] + int v30; // [esp+60h] [ebp-48h] + int v31; // [esp+64h] [ebp-44h] + int v32; // [esp+68h] [ebp-40h] + __int64 v33; // [esp+70h] [ebp-38h] + int v34; // [esp+78h] [ebp-30h] + int v35; // [esp+7Ch] [ebp-2Ch] + int v36; // [esp+80h] [ebp-28h] + int v37; // [esp+88h] [ebp-20h] + + v4 = a2[2]; + v5 = a2[3]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = a3[1]; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v4 - 12)); + v26 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move((int)lpuexcpt, v26, v24); + std::wios::_M_cache_locale(lpuexcpt, (int)lpuexcpt + 108); + v7 = *((_DWORD *)v26 + 28); + *((_DWORD *)lpuexcpt + 30) = 0; + *((_DWORD *)v26 + 28) = 0; + *((_DWORD *)lpuexcpt + 28) = v7; + *((_WORD *)lpuexcpt + 58) = *((_WORD *)v26 + 58); + *((_BYTE *)lpuexcpt + 118) = *((_BYTE *)v26 + 118); + a3[1] = 0; + v8 = a2[5]; + v9 = a2[4]; + this[2] = v9; + *(int *)((char *)this + *(_DWORD *)(v9 - 12) + 8) = v8; + v10 = a2[1]; + v11 = a2[6]; + *this = v10; + *(int *)((char *)this + *(_DWORD *)(v10 - 12)) = v11; + this[2] = a2[7]; + v12 = *a2; + v13 = a2[8]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v12 - 12)) = v13; + v30 = -1; + this[2] = a2[9]; + v27 = this + 3; + v31 = -1; + v14 = a3[12]; + v15 = a3[4]; + v32 = -1; + LODWORD(v33) = -1; + v34 = -1; + v35 = -1; + v36 = -1; + v37 = -1; + if ( !v15 ) + { + v16 = a3[7]; + if ( !v16 ) + goto LABEL_7; + goto LABEL_3; + } + v30 = (int)(v15 - v14) >> 1; + v31 = (int)(v15 - v14) >> 31; + v32 = (a3[5] - v14) >> 1; + v15 = a3[6]; + v33 = (int)(v15 - v14) >> 1; + v16 = a3[7]; + if ( v16 ) + { +LABEL_3: + v34 = (v16 - v14) >> 1; + v35 = (v16 - v14) >> 31; + v36 = (a3[8] - v16) >> 1; + v37 = (a3[9] - v14) >> 1; + if ( v15 < a3[8] ) + v15 = a3[8]; + } + if ( v15 ) + a3[13] = (int)(v15 - v14) >> 1; +LABEL_7: + std::wstreambuf::basic_streambuf(v27, (std::locale *)(a3 + 3), v25); + v17 = a3[11]; + this[3] = (int)&off_55F968; + this[12] = (int)(this + 14); + v18 = a3 + 14; + this[11] = v17; + v19 = (_DWORD *)a3[12]; + if ( v19 == a3 + 14 ) + { + this[14] = a3[14]; + this[15] = a3[15]; + this[16] = a3[16]; + this[17] = a3[17]; + } + else + { + this[12] = (int)v19; + this[14] = a3[14]; + } + this[13] = a3[13]; + a3[12] = v18; + *((_WORD *)a3 + 28) = 0; + v20 = this[12]; + a3[13] = 0; + if ( (v30 & v31) != -1 ) + { + this[4] = v20 + 2 * v30; + this[5] = v20 + 2 * v32; + this[6] = v20 + 2 * v33; + } + if ( (v34 & v35) != -1 ) + { + v21 = v20 + 2 * v34; + this[9] = v20 + 2 * v37; + this[7] = v21; + this[8] = v21 + 2 * v36; + } + v22 = (char *)a3 + 70; + v23 = a3[11] & 0x10; + if ( (a3[11] & 8) != 0 ) + { + a3[4] = v18; + a3[5] = v18; + a3[6] = v18; + if ( v23 ) + { + a3[8] = v18; + a3[7] = v18; + a3[9] = v22; + } + } + else if ( v23 ) + { + a3[8] = v18; + a3[7] = v18; + a3[9] = v22; + a3[4] = v18; + a3[5] = v18; + a3[6] = v18; + } + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 120) = (int)v27; +} +// 51ADE8: positive sp value 4 has been found +// 51ACD5: conditional instruction was optimized away because rax.8 is in (<80000000u|>=FFFFFFFF80000000u) +// 51AA3B: variable 'v24' is possibly undefined +// 51AC00: variable 'v25' is possibly undefined +// 55F968: using guessed type int (*off_55F968)(); + +//----- (0051AE10) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + int *this, + int *a2, + int a3, + int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + _DWORD *v9; // ecx + int v10; // eax + int v11; // edx + int v12; // edx + int v13; // eax + int v14; // eax + int v15; // edx + _WORD *v16; // eax + unsigned int v17; // eax + _DWORD *v18; // [esp+24h] [ebp-44h] + + v5 = a2[2]; + v6 = a2[3]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = a2[4]; + this[2] = v8; + v9 = (int *)((char *)this + *(_DWORD *)(v8 - 12) + 8); + *v9 = a2[5]; + std::wios::init((int)v9, 0); + v10 = a2[1]; + v11 = a2[6]; + *this = v10; + *(int *)((char *)this + *(_DWORD *)(v10 - 12)) = v11; + this[2] = a2[7]; + v12 = a2[8]; + v13 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v13 - 12)) = v12; + v14 = a2[9]; + this[3] = (int)&off_560464; + this[2] = v14; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + v18 = this + 3; + std::locale::locale(this + 10); + v15 = *(_DWORD *)(a3 + 4); + v16 = *(_WORD **)a3; + this[3] = (int)&off_55F968; + this[11] = 0; + this[12] = (int)(this + 14); + std::wstring::_M_construct(this + 12, v16, (int)&v16[v15]); + this[11] = a4; + v17 = 0; + if ( (a4 & 3) != 0 ) + v17 = this[13]; + std::wstringbuf::_M_sync(v18, (_DWORD *)this[12], 0, v17); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)v18); +} +// 51AFF3: positive sp value 4 has been found +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051B060) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + int *this, + int *a2, + int a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + _DWORD *v8; // ecx + int v9; // eax + int v10; // edx + int v11; // edx + int v12; // eax + int v13; // eax + int v14; // eax + + v4 = a2[2]; + v5 = a2[3]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v4 - 12), 0); + v7 = a2[4]; + this[2] = v7; + v8 = (int *)((char *)this + *(_DWORD *)(v7 - 12) + 8); + *v8 = a2[5]; + std::wios::init((int)v8, 0); + v9 = a2[1]; + v10 = a2[6]; + *this = v9; + *(int *)((char *)this + *(_DWORD *)(v9 - 12)) = v10; + this[2] = a2[7]; + v11 = a2[8]; + v12 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v12 - 12)) = v11; + v13 = a2[9]; + this[3] = (int)&off_560464; + this[4] = 0; + this[2] = v13; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + std::locale::locale(this + 10); + this[11] = a3; + this[12] = (int)(this + 14); + v14 = *this; + *((_WORD *)this + 28) = 0; + this[3] = (int)&off_55F968; + this[13] = 0; + std::wios::init((int)this + *(_DWORD *)(v14 - 12), (int)(this + 3)); +} +// 51B1EC: positive sp value 4 has been found +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051B240) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +void __thiscall std::basic_stringstream,std::allocator>::basic_stringstream( + int *this, + int *a2) +{ + int v3; // eax + int v4; // ecx + int v5; // edx + int v6; // eax + _DWORD *v7; // ecx + int v8; // eax + int v9; // edx + int v10; // edx + int v11; // eax + int v12; // eax + int v13; // eax + + v3 = a2[2]; + v4 = a2[3]; + v5 = *(_DWORD *)(v3 - 12); + *this = v3; + *(int *)((char *)this + v5) = v4; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v3 - 12), 0); + v6 = a2[4]; + this[2] = v6; + v7 = (int *)((char *)this + *(_DWORD *)(v6 - 12) + 8); + *v7 = a2[5]; + std::wios::init((int)v7, 0); + v8 = a2[1]; + v9 = a2[6]; + *this = v8; + *(int *)((char *)this + *(_DWORD *)(v8 - 12)) = v9; + this[2] = a2[7]; + v10 = a2[8]; + v11 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v11 - 12)) = v10; + v12 = a2[9]; + this[3] = (int)&off_560464; + this[4] = 0; + this[2] = v12; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + this[9] = 0; + std::locale::locale(this + 10); + *((_WORD *)this + 28) = 0; + this[12] = (int)(this + 14); + v13 = *this; + this[3] = (int)&off_55F968; + this[11] = 24; + this[13] = 0; + std::wios::init((int)this + *(_DWORD *)(v13 - 12), (int)(this + 3)); +} +// 51B3CD: positive sp value 4 has been found +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051B420) -------------------------------------------------------- +void __fastcall std::basic_stringstream,std::allocator>::~basic_stringstream( + _DWORD *Block) +{ + _DWORD *v2; // eax + + v2 = (_DWORD *)Block[12]; + *Block = &off_55FB90; + Block[18] = off_55FBB8; + Block[2] = off_55FBA4; + Block[3] = &off_55F968; + if ( v2 != Block + 14 ) + operator delete(v2); + Block[3] = &off_560464; + std::locale::~locale((_DWORD **)Block + 10); + Block[2] = &unk_55B2F8; + *Block = &unk_55B294; + Block[1] = 0; + Block[18] = &off_560E30; + std::ios_base::~ios_base((int)(Block + 18)); + operator delete(Block); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FB90: using guessed type int (*off_55FB90)(); +// 55FBA4: using guessed type int (*off_55FBA4[2])(); +// 55FBB8: using guessed type int (*off_55FBB8[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (0051B4A0) -------------------------------------------------------- +void __fastcall std::basic_stringstream,std::allocator>::~basic_stringstream( + int a1) +{ + void *Block; // eax + + Block = *(void **)(a1 + 48); + *(_DWORD *)a1 = &off_55FB90; + *(_DWORD *)(a1 + 72) = off_55FBB8; + *(_DWORD *)(a1 + 8) = off_55FBA4; + *(_DWORD *)(a1 + 12) = &off_55F968; + if ( Block != (void *)(a1 + 56) ) + operator delete(Block); + *(_DWORD *)(a1 + 12) = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 40)); + *(_DWORD *)(a1 + 8) = &unk_55B2F8; + *(_DWORD *)a1 = &unk_55B294; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 72) = &off_560E30; + std::ios_base::~ios_base(a1 + 72); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FB90: using guessed type int (*off_55FB90)(); +// 55FBA4: using guessed type int (*off_55FBA4[2])(); +// 55FBB8: using guessed type int (*off_55FBB8[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (0051B510) -------------------------------------------------------- +int __thiscall std::basic_stringstream,std::allocator>::~basic_stringstream( + char *this, + int *a2) +{ + int v3; // eax + int v4; // eax + int v5; // eax + int v6; // eax + int v7; // eax + int result; // eax + + v3 = *a2; + *(_DWORD *)this = *a2; + *(_DWORD *)&this[*(_DWORD *)(v3 - 12)] = a2[8]; + v4 = a2[9]; + *((_DWORD *)this + 3) = &off_55F968; + *((_DWORD *)this + 2) = v4; + if ( *((char **)this + 12) != this + 56 ) + operator delete(*((void **)this + 12)); + *((_DWORD *)this + 3) = &off_560464; + std::locale::~locale((_DWORD **)this + 10); + v5 = a2[1]; + *(_DWORD *)this = v5; + *(_DWORD *)&this[*(_DWORD *)(v5 - 12)] = a2[6]; + *((_DWORD *)this + 2) = a2[7]; + v6 = a2[4]; + *((_DWORD *)this + 2) = v6; + *(_DWORD *)&this[*(_DWORD *)(v6 - 12) + 8] = a2[5]; + v7 = a2[2]; + *(_DWORD *)this = v7; + result = *(_DWORD *)(v7 - 12); + *(_DWORD *)&this[result] = a2[3]; + *((_DWORD *)this + 1) = 0; + return result; +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051B5A0) -------------------------------------------------------- +_DWORD *__thiscall std::basic_stringstream,std::allocator>::operator=( + _DWORD *this, + _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // eax + __int16 v6; // cx + int v7; // eax + std::ios_base *v9; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v9); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + v7 = this[1]; + *((_BYTE *)v4 + 118) = v6; + this[1] = a2[1]; + a2[1] = v7; + std::wstringbuf::operator=((int)(this + 3), (int)(a2 + 3)); + return this; +} +// 51B5E0: variable 'v9' is possibly undefined + +//----- (0051B680) -------------------------------------------------------- +int __thiscall std::istringstream::str(int this, int a2) +{ + _DWORD *v2; // esi + unsigned int v4; // eax + + v2 = (_DWORD *)(this + 8); + std::string::_M_replace((unsigned int *)(this + 44), 0, *(_DWORD *)(this + 48), *(char **)a2, *(_DWORD *)(a2 + 4)); + v4 = 0; + if ( (*(_BYTE *)(this + 40) & 3) != 0 ) + v4 = *(_DWORD *)(this + 48); + return std::stringbuf::_M_sync(v2, *(_DWORD **)(this + 44), 0, v4); +} + +//----- (0051B6F0) -------------------------------------------------------- +void __thiscall std::istringstream::swap(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // edi + std::ios_base *v4; // esi + int v5; // edx + char v6; // cl + char v7; // cl + int v8; // edx + std::ios_base *v9; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v9); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + v8 = this[1]; + *((_BYTE *)v4 + 117) = v7; + this[1] = a2[1]; + a2[1] = v8; + std::stringbuf::swap(this + 2, (int)(a2 + 2)); +} +// 51B730: variable 'v9' is possibly undefined + +//----- (0051B7C0) -------------------------------------------------------- +void __thiscall std::istringstream::basic_istringstream(_DWORD *this, _DWORD *a2) +{ + int v2; // eax + int v3; // eax + std::ios_base *v4; // esi + int v5; // eax + int v6; // edx + unsigned int v7; // eax + int v8; // ecx + int v9; // eax + _DWORD *v10; // eax + int v11; // ebx + int v12; // ecx + int v13; // ebx + _DWORD *v14; // eax + int v15; // edx + int v16; // ecx + int v17; // ecx + std::ios_base *v18; // [esp+4h] [ebp-B4h] + const std::locale *v19; // [esp+4h] [ebp-B4h] + struct _Unwind_Exception *lpuexcpt; // [esp+20h] [ebp-98h] + _DWORD *v21; // [esp+24h] [ebp-94h] + _DWORD *v22; // [esp+24h] [ebp-94h] + __int64 v24; // [esp+70h] [ebp-48h] + int v25; // [esp+78h] [ebp-40h] + __int64 v26; // [esp+80h] [ebp-38h] + __int64 v27; // [esp+88h] [ebp-30h] + int v28; // [esp+90h] [ebp-28h] + int v29; // [esp+98h] [ebp-20h] + + v21 = this + 17; + std::ios_base::ios_base(this + 17); + *((_WORD *)this + 92) = 0; + v2 = a2[1]; + this[45] = 0; + this[1] = v2; + this[47] = 0; + v3 = *a2; + *this = &unk_55B320; + this[48] = 0; + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(v3 - 12)); + this[17] = &unk_55B334; + this[49] = 0; + this[50] = 0; + std::ios_base::_M_move((int)v21, v4, v18); + std::ios::_M_cache_locale(v21, (int)(this + 44)); + v24 = -1LL; + v5 = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = 0; + this[47] = 0; + this[45] = v5; + v25 = -1; + *((_WORD *)this + 92) = *((_WORD *)v4 + 58); + a2[1] = 0; + lpuexcpt = (struct _Unwind_Exception *)(this + 2); + v6 = a2[11]; + v7 = a2[3]; + *this = &off_55FBCC; + this[17] = off_55FBE0; + LODWORD(v26) = -1; + v27 = -1LL; + v28 = -1; + v29 = -1; + if ( !v7 ) + { + v8 = a2[6]; + if ( !v8 ) + goto LABEL_7; + goto LABEL_3; + } + v24 = (int)(v7 - v6); + v25 = a2[4] - v6; + v7 = a2[5]; + v26 = (int)(v7 - v6); + v8 = a2[6]; + if ( v8 ) + { +LABEL_3: + v27 = v8 - v6; + v28 = a2[7] - v8; + v29 = a2[8] - v6; + if ( v7 < a2[7] ) + v7 = a2[7]; + } + if ( v7 ) + a2[12] = v7 - v6; +LABEL_7: + std::streambuf::basic_streambuf(lpuexcpt, (std::locale *)(a2 + 2), v19); + v9 = a2[10]; + this[2] = &off_55F928; + this[11] = this + 13; + this[10] = v9; + v22 = a2 + 13; + v10 = (_DWORD *)a2[11]; + if ( v10 == a2 + 13 ) + { + this[13] = a2[13]; + this[14] = a2[14]; + this[15] = a2[15]; + this[16] = a2[16]; + } + else + { + this[11] = v10; + this[13] = a2[13]; + } + this[12] = a2[12]; + *((_BYTE *)a2 + 52) = 0; + a2[11] = v22; + a2[12] = 0; + v11 = this[11]; + if ( ((unsigned int)v24 & HIDWORD(v24)) != -1 ) + { + this[3] = v11 + v24; + this[4] = v11 + v25; + this[5] = v11 + v26; + } + if ( ((unsigned int)v27 & HIDWORD(v27)) != -1 ) + { + v12 = v11 + v29; + v13 = v27 + v11; + this[8] = v12; + this[6] = v13; + this[7] = v13 + v28; + } + v14 = (_DWORD *)a2[11]; + v15 = a2[10] & 0x10; + if ( v14 == v22 ) + v16 = 15; + else + v16 = a2[13]; + v17 = (int)v14 + v16; + if ( (a2[10] & 8) != 0 ) + { + a2[3] = v14; + a2[4] = v14; + a2[5] = v14; + if ( v15 ) + { + a2[7] = v14; + a2[6] = v14; + a2[8] = v17; + } + } + else if ( v15 ) + { + a2[7] = v14; + a2[6] = v14; + a2[8] = v17; + a2[3] = v14; + a2[4] = v14; + a2[5] = v14; + } + this[47] = lpuexcpt; +} +// 51BAD5: conditional instruction was optimized away because rax.8 is in (<80000000u|>=FFFFFFFF80000000u) +// 51B882: variable 'v18' is possibly undefined +// 51BA09: variable 'v19' is possibly undefined +// 55F928: using guessed type int (*off_55F928)(); +// 55FBCC: using guessed type int (*off_55FBCC)(); +// 55FBE0: using guessed type int (*off_55FBE0[2])(); + +//----- (0051BC50) -------------------------------------------------------- +void __thiscall std::istringstream::basic_istringstream(_DWORD *this, int a2, int a3) +{ + int v3; // eax + _BYTE *v4; // edx + unsigned int v5; // eax + int v6; // [esp+20h] [ebp-48h] + _DWORD *v7; // [esp+24h] [ebp-44h] + + v6 = (int)(this + 17); + std::ios_base::ios_base(this + 17); + this[45] = 0; + *((_WORD *)this + 92) = 0; + this[47] = 0; + this[48] = 0; + this[49] = 0; + this[50] = 0; + *this = &unk_55B320; + this[17] = &unk_55B334; + this[1] = 0; + std::ios::init(v6, 0); + *this = &off_55FBCC; + this[17] = off_55FBE0; + this[2] = &off_560424; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + v7 = this + 2; + std::locale::locale(this + 9); + v3 = *(_DWORD *)(a2 + 4); + v4 = *(_BYTE **)a2; + this[2] = &off_55F928; + this[10] = 0; + this[11] = this + 13; + std::string::_M_construct(this + 11, v4, (int)&v4[v3]); + v5 = 0; + this[10] = a3 | 8; + if ( (a3 & 3) != 0 ) + v5 = this[12]; + std::stringbuf::_M_sync(v7, (_DWORD *)this[11], 0, v5); + std::ios::init(v6, (int)v7); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FBCC: using guessed type int (*off_55FBCC)(); +// 55FBE0: using guessed type int (*off_55FBE0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051BE70) -------------------------------------------------------- +void __thiscall std::istringstream::basic_istringstream(_DWORD *this, int a2) +{ + int v2; // [esp+24h] [ebp-44h] + + v2 = (int)(this + 17); + std::ios_base::ios_base(this + 17); + this[45] = 0; + *((_WORD *)this + 92) = 0; + this[47] = 0; + this[48] = 0; + this[49] = 0; + this[50] = 0; + *this = &unk_55B320; + this[17] = &unk_55B334; + this[1] = 0; + std::ios::init(v2, 0); + *this = &off_55FBCC; + this[17] = off_55FBE0; + this[2] = &off_560424; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + std::locale::locale(this + 9); + this[2] = &off_55F928; + this[10] = a2 | 8; + this[11] = this + 13; + this[12] = 0; + *((_BYTE *)this + 52) = 0; + std::ios::init(v2, (int)(this + 2)); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FBCC: using guessed type int (*off_55FBCC)(); +// 55FBE0: using guessed type int (*off_55FBE0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051C010) -------------------------------------------------------- +void __fastcall std::istringstream::basic_istringstream(int a1) +{ + int v1; // [esp+24h] [ebp-44h] + + v1 = a1 + 68; + std::ios_base::ios_base((_DWORD *)(a1 + 68)); + *(_DWORD *)(a1 + 180) = 0; + *(_WORD *)(a1 + 184) = 0; + *(_DWORD *)(a1 + 188) = 0; + *(_DWORD *)(a1 + 192) = 0; + *(_DWORD *)(a1 + 196) = 0; + *(_DWORD *)(a1 + 200) = 0; + *(_DWORD *)a1 = &unk_55B320; + *(_DWORD *)(a1 + 68) = &unk_55B334; + *(_DWORD *)(a1 + 4) = 0; + std::ios::init(v1, 0); + *(_DWORD *)a1 = &off_55FBCC; + *(_DWORD *)(a1 + 68) = off_55FBE0; + *(_DWORD *)(a1 + 8) = &off_560424; + *(_DWORD *)(a1 + 12) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 24) = 0; + *(_DWORD *)(a1 + 28) = 0; + *(_DWORD *)(a1 + 32) = 0; + std::locale::locale((_DWORD *)(a1 + 36)); + *(_DWORD *)(a1 + 8) = &off_55F928; + *(_DWORD *)(a1 + 40) = 8; + *(_DWORD *)(a1 + 44) = a1 + 52; + *(_DWORD *)(a1 + 48) = 0; + *(_BYTE *)(a1 + 52) = 0; + std::ios::init(v1, a1 + 8); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FBCC: using guessed type int (*off_55FBCC)(); +// 55FBE0: using guessed type int (*off_55FBE0[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051C1A0) -------------------------------------------------------- +void __thiscall std::istringstream::basic_istringstream(int *this, int *a2, _DWORD *a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + std::ios_base *v10; // [esp+4h] [ebp-54h] + std::ios_base *v11; // [esp+10h] [ebp-48h] + int v12; // [esp+14h] [ebp-44h] + + v4 = a2[1]; + v5 = a2[2]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = a3[1]; + v12 = (int)this + *(_DWORD *)(v4 - 12); + v11 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move(v12, v11, v10); + std::ios::_M_cache_locale((_DWORD *)v12, v12 + 108); + v7 = *((_DWORD *)v11 + 28); + *(_DWORD *)(v12 + 120) = 0; + *((_DWORD *)v11 + 28) = 0; + v8 = a2[3]; + *(_DWORD *)(v12 + 112) = v7; + *(_WORD *)(v12 + 116) = *((_WORD *)v11 + 58); + a3[1] = 0; + v9 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v9 - 12)) = v8; + std::stringbuf::basic_stringbuf(this + 2, (std::locale *)(a3 + 2)); + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 120) = (int)(this + 2); +} +// 51C207: variable 'v10' is possibly undefined + +//----- (0051C2E0) -------------------------------------------------------- +void __thiscall std::istringstream::basic_istringstream(int *this, int *a2, int a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + int v9; // edx + _BYTE *v10; // edx + int v11; // eax + unsigned int v12; // eax + _DWORD *v13; // [esp+24h] [ebp-44h] + + v5 = a2[1]; + v6 = a2[2]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = *a2; + v9 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v8 - 12)) = v9; + v13 = this + 2; + this[2] = (int)&off_560424; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + std::locale::locale(this + 9); + v10 = *(_BYTE **)a3; + v11 = *(_DWORD *)(a3 + 4); + this[2] = (int)&off_55F928; + this[10] = 0; + this[11] = (int)(this + 13); + std::string::_M_construct(this + 11, v10, (int)&v10[v11]); + v12 = 0; + this[10] = a4 | 8; + if ( (a4 & 3) != 0 ) + v12 = this[12]; + std::stringbuf::_M_sync(v13, (_DWORD *)this[11], 0, v12); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)v13); +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051C4C0) -------------------------------------------------------- +void __thiscall std::istringstream::basic_istringstream(int *this, int *a2, int a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + + v4 = a2[1]; + v5 = a2[2]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v4 - 12), 0); + v7 = *a2; + v8 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v7 - 12)) = v8; + this[2] = (int)&off_560424; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + std::locale::locale(this + 9); + this[12] = 0; + this[10] = a3 | 8; + this[11] = (int)(this + 13); + v9 = *this; + *((_BYTE *)this + 52) = 0; + this[2] = (int)&off_55F928; + std::ios::init((int)this + *(_DWORD *)(v9 - 12), (int)(this + 2)); +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051C610) -------------------------------------------------------- +void __thiscall std::istringstream::basic_istringstream(int *this, int *a2) +{ + int v3; // eax + int v4; // ecx + int v5; // edx + int v6; // eax + int v7; // edx + int v8; // eax + int v9; // ecx + + v3 = a2[1]; + v4 = a2[2]; + v5 = *(_DWORD *)(v3 - 12); + *this = v3; + *(int *)((char *)this + v5) = v4; + this[1] = 0; + std::ios::init((int)this + *(_DWORD *)(v3 - 12), 0); + v6 = *a2; + v7 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v7; + this[2] = (int)&off_560424; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + std::locale::locale(this + 9); + this[12] = 0; + this[11] = (int)(this + 13); + v8 = *this; + *((_BYTE *)this + 52) = 0; + this[2] = (int)&off_55F928; + v9 = *(_DWORD *)(v8 - 12); + this[10] = 8; + std::ios::init((int)this + v9, (int)(this + 2)); +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051C760) -------------------------------------------------------- +void __fastcall std::istringstream::~istringstream(_DWORD *Block) +{ + _DWORD *v2; // eax + + v2 = (_DWORD *)Block[11]; + *Block = &off_55FBCC; + Block[17] = off_55FBE0; + Block[2] = &off_55F928; + if ( v2 != Block + 13 ) + operator delete(v2); + Block[2] = &off_560424; + std::locale::~locale((_DWORD **)Block + 9); + *Block = &unk_55B320; + Block[1] = 0; + Block[17] = &off_560E20; + std::ios_base::~ios_base((int)(Block + 17)); + operator delete(Block); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FBCC: using guessed type int (*off_55FBCC)(); +// 55FBE0: using guessed type int (*off_55FBE0[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (0051C7D0) -------------------------------------------------------- +void __fastcall std::istringstream::~istringstream(int a1) +{ + void *Block; // eax + + Block = *(void **)(a1 + 44); + *(_DWORD *)a1 = &off_55FBCC; + *(_DWORD *)(a1 + 68) = off_55FBE0; + *(_DWORD *)(a1 + 8) = &off_55F928; + if ( Block != (void *)(a1 + 52) ) + operator delete(Block); + *(_DWORD *)(a1 + 8) = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 36)); + *(_DWORD *)a1 = &unk_55B320; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 68) = &off_560E20; + std::ios_base::~ios_base(a1 + 68); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FBCC: using guessed type int (*off_55FBCC)(); +// 55FBE0: using guessed type int (*off_55FBE0[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (0051C830) -------------------------------------------------------- +int __thiscall std::istringstream::~istringstream(int *this, int *a2) +{ + int v3; // eax + char *Block; // eax + int v5; // eax + int result; // eax + + v3 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v3 - 12)) = a2[3]; + Block = (char *)this[11]; + this[2] = (int)&off_55F928; + if ( Block != (char *)(this + 13) ) + operator delete(Block); + this[2] = (int)&off_560424; + std::locale::~locale((_DWORD **)this + 9); + v5 = a2[1]; + *this = v5; + result = *(_DWORD *)(v5 - 12); + *(int *)((char *)this + result) = a2[2]; + this[1] = 0; + return result; +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051C890) -------------------------------------------------------- +_DWORD *__thiscall std::istringstream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // eax + char v6; // cl + char v7; // cl + int v8; // eax + std::ios_base *v10; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v10); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + v8 = this[1]; + *((_BYTE *)v4 + 117) = v7; + this[1] = a2[1]; + a2[1] = v8; + std::stringbuf::operator=((int)(this + 2), (int)(a2 + 2)); + return this; +} +// 51C8D0: variable 'v10' is possibly undefined + +//----- (0051C970) -------------------------------------------------------- +int __thiscall std::wistringstream::str(int this, int a2) +{ + _DWORD *v2; // esi + unsigned int v4; // eax + + v2 = (_DWORD *)(this + 8); + std::wstring::_M_replace((unsigned int *)(this + 44), 0, *(_DWORD *)(this + 48), *(_WORD **)a2, *(_DWORD *)(a2 + 4)); + v4 = 0; + if ( (*(_BYTE *)(this + 40) & 3) != 0 ) + v4 = *(_DWORD *)(this + 48); + return std::wstringbuf::_M_sync(v2, *(_DWORD **)(this + 44), 0, v4); +} + +//----- (0051C9E0) -------------------------------------------------------- +void __thiscall std::wistringstream::swap(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // edi + std::ios_base *v4; // esi + int v5; // edx + __int16 v6; // cx + int v7; // edx + std::ios_base *v8; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v8); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + v7 = this[1]; + *((_BYTE *)v4 + 118) = v6; + this[1] = a2[1]; + a2[1] = v7; + std::wstringbuf::swap(this + 2, (int)(a2 + 2)); +} +// 51CA20: variable 'v8' is possibly undefined + +//----- (0051CAC0) -------------------------------------------------------- +void __thiscall std::wistringstream::basic_istringstream(_DWORD *this, _DWORD *a2) +{ + int v2; // eax + int v3; // eax + std::ios_base *v4; // edx + int v5; // eax + int v6; // edx + unsigned int v7; // eax + int v8; // ecx + int v9; // eax + _DWORD *v10; // esi + _DWORD *v11; // eax + int v12; // ecx + int v13; // ebx + char *v14; // ecx + int v15; // edx + std::ios_base *v16; // [esp+4h] [ebp-B4h] + const std::locale *v17; // [esp+4h] [ebp-B4h] + struct _Unwind_Exception *lpuexcpta; // [esp+20h] [ebp-98h] + struct _Unwind_Exception *lpuexcpt; // [esp+20h] [ebp-98h] + _DWORD *v20; // [esp+24h] [ebp-94h] + int v22; // [esp+70h] [ebp-48h] + int v23; // [esp+74h] [ebp-44h] + int v24; // [esp+78h] [ebp-40h] + __int64 v25; // [esp+80h] [ebp-38h] + int v26; // [esp+88h] [ebp-30h] + int v27; // [esp+8Ch] [ebp-2Ch] + int v28; // [esp+90h] [ebp-28h] + int v29; // [esp+98h] [ebp-20h] + + v20 = this + 17; + std::ios_base::ios_base(this + 17); + v2 = a2[1]; + this[45] = 0; + this[1] = v2; + *((_WORD *)this + 92) = 0; + v3 = *a2; + *this = &unk_55B348; + *((_BYTE *)this + 186) = 0; + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(v3 - 12)); + this[47] = 0; + this[48] = 0; + this[49] = 0; + this[50] = 0; + this[17] = &unk_55B35C; + lpuexcpta = v4; + std::ios_base::_M_move((int)v20, v4, v16); + std::wios::_M_cache_locale(v20, (int)(this + 44)); + v22 = -1; + v23 = -1; + v5 = *((_DWORD *)lpuexcpta + 28); + *((_DWORD *)lpuexcpta + 28) = 0; + this[47] = 0; + this[45] = v5; + v24 = -1; + *((_WORD *)this + 92) = *((_WORD *)lpuexcpta + 58); + v6 = a2[11]; + *((_BYTE *)this + 186) = *((_BYTE *)lpuexcpta + 118); + LODWORD(v25) = -1; + a2[1] = 0; + lpuexcpt = (struct _Unwind_Exception *)(this + 2); + v7 = a2[3]; + *this = &off_55FBF4; + this[17] = off_55FC08; + v26 = -1; + v27 = -1; + v28 = -1; + v29 = -1; + if ( !v7 ) + { + v8 = a2[6]; + if ( !v8 ) + goto LABEL_7; + goto LABEL_3; + } + v22 = (int)(v7 - v6) >> 1; + v23 = (int)(v7 - v6) >> 31; + v24 = (a2[4] - v6) >> 1; + v7 = a2[5]; + v25 = (int)(v7 - v6) >> 1; + v8 = a2[6]; + if ( v8 ) + { +LABEL_3: + v26 = (v8 - v6) >> 1; + v27 = (v8 - v6) >> 31; + v28 = (a2[7] - v8) >> 1; + v29 = (a2[8] - v6) >> 1; + if ( v7 < a2[7] ) + v7 = a2[7]; + } + if ( v7 ) + a2[12] = (int)(v7 - v6) >> 1; +LABEL_7: + std::wstreambuf::basic_streambuf(lpuexcpt, (std::locale *)(a2 + 2), v17); + v9 = a2[10]; + this[2] = &off_55F968; + this[11] = this + 13; + v10 = a2 + 13; + this[10] = v9; + v11 = (_DWORD *)a2[11]; + if ( v11 == a2 + 13 ) + { + this[13] = a2[13]; + this[14] = a2[14]; + this[15] = a2[15]; + this[16] = a2[16]; + } + else + { + this[11] = v11; + this[13] = a2[13]; + } + this[12] = a2[12]; + a2[11] = v10; + *((_WORD *)a2 + 26) = 0; + v12 = this[11]; + a2[12] = 0; + if ( (v22 & v23) != -1 ) + { + this[3] = v12 + 2 * v22; + this[4] = v12 + 2 * v24; + this[5] = v12 + 2 * v25; + } + if ( (v26 & v27) != -1 ) + { + v13 = v12 + 2 * v26; + this[8] = v12 + 2 * v29; + this[6] = v13; + this[7] = v13 + 2 * v28; + } + v14 = (char *)a2 + 66; + v15 = a2[10] & 0x10; + if ( (a2[10] & 8) != 0 ) + { + a2[3] = v10; + a2[4] = v10; + a2[5] = v10; + if ( v15 ) + { + a2[7] = v10; + a2[6] = v10; + a2[8] = v14; + } + } + else if ( v15 ) + { + a2[7] = v10; + a2[6] = v10; + a2[8] = v14; + a2[3] = v10; + a2[4] = v10; + a2[5] = v10; + } + this[47] = lpuexcpt; +} +// 51CDFD: conditional instruction was optimized away because rax.8 is in (<80000000u|>=FFFFFFFF80000000u) +// 51CB89: variable 'v16' is possibly undefined +// 51CD28: variable 'v17' is possibly undefined +// 55F968: using guessed type int (*off_55F968)(); +// 55FBF4: using guessed type int (*off_55FBF4)(); +// 55FC08: using guessed type int (*off_55FC08[2])(); + +//----- (0051CF50) -------------------------------------------------------- +void __thiscall std::wistringstream::basic_istringstream(_DWORD *this, int a2, int a3) +{ + int v3; // edx + _WORD *v4; // eax + unsigned int v5; // eax + int v6; // [esp+20h] [ebp-48h] + _DWORD *v7; // [esp+24h] [ebp-44h] + + v6 = (int)(this + 17); + std::ios_base::ios_base(this + 17); + this[45] = 0; + *((_WORD *)this + 92) = 0; + *((_BYTE *)this + 186) = 0; + this[47] = 0; + this[48] = 0; + this[49] = 0; + this[50] = 0; + *this = &unk_55B348; + this[17] = &unk_55B35C; + this[1] = 0; + std::wios::init(v6, 0); + *this = &off_55FBF4; + this[17] = off_55FC08; + this[2] = &off_560464; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + v7 = this + 2; + std::locale::locale(this + 9); + v3 = *(_DWORD *)(a2 + 4); + v4 = *(_WORD **)a2; + this[2] = &off_55F968; + this[10] = 0; + this[11] = this + 13; + std::wstring::_M_construct(this + 11, v4, (int)&v4[v3]); + v5 = 0; + this[10] = a3 | 8; + if ( (a3 & 3) != 0 ) + v5 = this[12]; + std::wstringbuf::_M_sync(v7, (_DWORD *)this[11], 0, v5); + std::wios::init(v6, (int)v7); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FBF4: using guessed type int (*off_55FBF4)(); +// 55FC08: using guessed type int (*off_55FC08[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051D170) -------------------------------------------------------- +void __thiscall std::wistringstream::basic_istringstream(_DWORD *this, int a2) +{ + int v2; // [esp+24h] [ebp-44h] + + v2 = (int)(this + 17); + std::ios_base::ios_base(this + 17); + this[45] = 0; + *((_WORD *)this + 92) = 0; + *((_BYTE *)this + 186) = 0; + this[47] = 0; + this[48] = 0; + this[49] = 0; + this[50] = 0; + *this = &unk_55B348; + this[17] = &unk_55B35C; + this[1] = 0; + std::wios::init(v2, 0); + *this = &off_55FBF4; + this[17] = off_55FC08; + this[2] = &off_560464; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + std::locale::locale(this + 9); + this[2] = &off_55F968; + this[10] = a2 | 8; + this[11] = this + 13; + this[12] = 0; + *((_WORD *)this + 26) = 0; + std::wios::init(v2, (int)(this + 2)); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FBF4: using guessed type int (*off_55FBF4)(); +// 55FC08: using guessed type int (*off_55FC08[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051D310) -------------------------------------------------------- +void __fastcall std::wistringstream::basic_istringstream(int a1) +{ + int v1; // [esp+24h] [ebp-44h] + + v1 = a1 + 68; + std::ios_base::ios_base((_DWORD *)(a1 + 68)); + *(_DWORD *)(a1 + 180) = 0; + *(_WORD *)(a1 + 184) = 0; + *(_BYTE *)(a1 + 186) = 0; + *(_DWORD *)(a1 + 188) = 0; + *(_DWORD *)(a1 + 192) = 0; + *(_DWORD *)(a1 + 196) = 0; + *(_DWORD *)(a1 + 200) = 0; + *(_DWORD *)a1 = &unk_55B348; + *(_DWORD *)(a1 + 68) = &unk_55B35C; + *(_DWORD *)(a1 + 4) = 0; + std::wios::init(v1, 0); + *(_DWORD *)a1 = &off_55FBF4; + *(_DWORD *)(a1 + 68) = off_55FC08; + *(_DWORD *)(a1 + 8) = &off_560464; + *(_DWORD *)(a1 + 12) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 24) = 0; + *(_DWORD *)(a1 + 28) = 0; + *(_DWORD *)(a1 + 32) = 0; + std::locale::locale((_DWORD *)(a1 + 36)); + *(_DWORD *)(a1 + 8) = &off_55F968; + *(_DWORD *)(a1 + 44) = a1 + 52; + *(_DWORD *)(a1 + 40) = 8; + *(_DWORD *)(a1 + 48) = 0; + *(_WORD *)(a1 + 52) = 0; + std::wios::init(v1, a1 + 8); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FBF4: using guessed type int (*off_55FBF4)(); +// 55FC08: using guessed type int (*off_55FC08[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051D4B0) -------------------------------------------------------- +void __thiscall std::wistringstream::basic_istringstream(int *this, int *a2, _DWORD *a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + int v10; // edx + unsigned int v11; // eax + int v12; // ecx + int v13; // eax + _DWORD *v14; // esi + _DWORD *v15; // eax + int v16; // ecx + int v17; // ebx + char *v18; // ecx + int v19; // edx + std::ios_base *v20; // [esp+4h] [ebp-A4h] + const std::locale *v21; // [esp+4h] [ebp-A4h] + std::ios_base *v22; // [esp+10h] [ebp-98h] + _DWORD *v23; // [esp+10h] [ebp-98h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-94h] + int v26; // [esp+60h] [ebp-48h] + int v27; // [esp+64h] [ebp-44h] + int v28; // [esp+68h] [ebp-40h] + __int64 v29; // [esp+70h] [ebp-38h] + int v30; // [esp+78h] [ebp-30h] + int v31; // [esp+7Ch] [ebp-2Ch] + int v32; // [esp+80h] [ebp-28h] + int v33; // [esp+88h] [ebp-20h] + + v4 = a2[1]; + v5 = a2[2]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = a3[1]; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v4 - 12)); + v22 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move((int)lpuexcpt, v22, v20); + std::wios::_M_cache_locale(lpuexcpt, (int)lpuexcpt + 108); + v7 = *((_DWORD *)v22 + 28); + *((_DWORD *)lpuexcpt + 30) = 0; + *((_DWORD *)v22 + 28) = 0; + *((_DWORD *)lpuexcpt + 28) = v7; + *((_WORD *)lpuexcpt + 58) = *((_WORD *)v22 + 58); + *((_BYTE *)lpuexcpt + 118) = *((_BYTE *)v22 + 118); + a3[1] = 0; + v8 = a2[3]; + v9 = *a2; + *this = *a2; + v26 = -1; + *(int *)((char *)this + *(_DWORD *)(v9 - 12)) = v8; + v23 = this + 2; + v27 = -1; + v28 = -1; + LODWORD(v29) = -1; + v30 = -1; + v31 = -1; + v32 = -1; + v33 = -1; + v10 = a3[11]; + v11 = a3[3]; + if ( !v11 ) + { + v12 = a3[6]; + if ( !v12 ) + goto LABEL_7; + goto LABEL_3; + } + v26 = (int)(v11 - v10) >> 1; + v27 = (int)(v11 - v10) >> 31; + v28 = (a3[4] - v10) >> 1; + v11 = a3[5]; + v29 = (int)(v11 - v10) >> 1; + v12 = a3[6]; + if ( v12 ) + { +LABEL_3: + v30 = (v12 - v10) >> 1; + v31 = (v12 - v10) >> 31; + v32 = (a3[7] - v12) >> 1; + v33 = (a3[8] - v10) >> 1; + if ( v11 < a3[7] ) + v11 = a3[7]; + } + if ( v11 ) + a3[12] = (int)(v11 - v10) >> 1; +LABEL_7: + std::wstreambuf::basic_streambuf(v23, (std::locale *)(a3 + 2), v21); + v13 = a3[10]; + this[2] = (int)&off_55F968; + this[11] = (int)(this + 13); + v14 = a3 + 13; + this[10] = v13; + v15 = (_DWORD *)a3[11]; + if ( v15 == a3 + 13 ) + { + this[13] = a3[13]; + this[14] = a3[14]; + this[15] = a3[15]; + this[16] = a3[16]; + } + else + { + this[11] = (int)v15; + this[13] = a3[13]; + } + this[12] = a3[12]; + a3[11] = v14; + *((_WORD *)a3 + 26) = 0; + v16 = this[11]; + a3[12] = 0; + if ( (v26 & v27) != -1 ) + { + this[3] = v16 + 2 * v26; + this[4] = v16 + 2 * v28; + this[5] = v16 + 2 * v29; + } + if ( (v30 & v31) != -1 ) + { + v17 = v16 + 2 * v30; + this[8] = v16 + 2 * v33; + this[6] = v17; + this[7] = v17 + 2 * v32; + } + v18 = (char *)a3 + 66; + v19 = a3[10] & 0x10; + if ( (a3[10] & 8) != 0 ) + { + a3[3] = v14; + a3[4] = v14; + a3[5] = v14; + if ( v19 ) + { + a3[7] = v14; + a3[6] = v14; + a3[8] = v18; + } + } + else if ( v19 ) + { + a3[7] = v14; + a3[6] = v14; + a3[8] = v18; + a3[3] = v14; + a3[4] = v14; + a3[5] = v14; + } + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 120) = (int)v23; +} +// 51D79B: conditional instruction was optimized away because rax.8 is in (<80000000u|>=FFFFFFFF80000000u) +// 51D52B: variable 'v20' is possibly undefined +// 51D6C6: variable 'v21' is possibly undefined +// 55F968: using guessed type int (*off_55F968)(); + +//----- (0051D8D0) -------------------------------------------------------- +void __thiscall std::wistringstream::basic_istringstream(int *this, int *a2, int a3, int a4) +{ + int v5; // eax + int v6; // ecx + int v7; // edx + int v8; // eax + int v9; // edx + int v10; // edx + _WORD *v11; // eax + unsigned int v12; // eax + _DWORD *v13; // [esp+24h] [ebp-44h] + + v5 = a2[1]; + v6 = a2[2]; + v7 = *(_DWORD *)(v5 - 12); + *this = v5; + *(int *)((char *)this + v7) = v6; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v5 - 12), 0); + v8 = *a2; + v9 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v8 - 12)) = v9; + v13 = this + 2; + this[2] = (int)&off_560464; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + std::locale::locale(this + 9); + v10 = *(_DWORD *)(a3 + 4); + v11 = *(_WORD **)a3; + this[2] = (int)&off_55F968; + this[10] = 0; + this[11] = (int)(this + 13); + std::wstring::_M_construct(this + 11, v11, (int)&v11[v10]); + v12 = 0; + this[10] = a4 | 8; + if ( (a4 & 3) != 0 ) + v12 = this[12]; + std::wstringbuf::_M_sync(v13, (_DWORD *)this[11], 0, v12); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)v13); +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051DAA0) -------------------------------------------------------- +void __thiscall std::wistringstream::basic_istringstream(int *this, int *a2, int a3) +{ + int v4; // eax + int v5; // ecx + int v6; // edx + int v7; // eax + int v8; // edx + int v9; // eax + + v4 = a2[1]; + v5 = a2[2]; + v6 = *(_DWORD *)(v4 - 12); + *this = v4; + *(int *)((char *)this + v6) = v5; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v4 - 12), 0); + v7 = *a2; + v8 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v7 - 12)) = v8; + this[2] = (int)&off_560464; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + std::locale::locale(this + 9); + this[12] = 0; + this[10] = a3 | 8; + this[11] = (int)(this + 13); + *((_WORD *)this + 26) = 0; + v9 = *this; + this[2] = (int)&off_55F968; + std::wios::init((int)this + *(_DWORD *)(v9 - 12), (int)(this + 2)); +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051DC00) -------------------------------------------------------- +void __thiscall std::wistringstream::basic_istringstream(int *this, int *a2) +{ + int v3; // eax + int v4; // ecx + int v5; // edx + int v6; // eax + int v7; // edx + int v8; // eax + int v9; // ecx + + v3 = a2[1]; + v4 = a2[2]; + v5 = *(_DWORD *)(v3 - 12); + *this = v3; + *(int *)((char *)this + v5) = v4; + this[1] = 0; + std::wios::init((int)this + *(_DWORD *)(v3 - 12), 0); + v6 = *a2; + v7 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v7; + this[2] = (int)&off_560464; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + this[8] = 0; + std::locale::locale(this + 9); + this[12] = 0; + this[11] = (int)(this + 13); + *((_WORD *)this + 26) = 0; + v8 = *this; + this[2] = (int)&off_55F968; + v9 = *(_DWORD *)(v8 - 12); + this[10] = 8; + std::wios::init((int)this + v9, (int)(this + 2)); +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051DD50) -------------------------------------------------------- +void __fastcall std::wistringstream::~wistringstream(_DWORD *Block) +{ + _DWORD *v2; // eax + + v2 = (_DWORD *)Block[11]; + *Block = &off_55FBF4; + Block[17] = off_55FC08; + Block[2] = &off_55F968; + if ( v2 != Block + 13 ) + operator delete(v2); + Block[2] = &off_560464; + std::locale::~locale((_DWORD **)Block + 9); + *Block = &unk_55B348; + Block[1] = 0; + Block[17] = &off_560E30; + std::ios_base::~ios_base((int)(Block + 17)); + operator delete(Block); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FBF4: using guessed type int (*off_55FBF4)(); +// 55FC08: using guessed type int (*off_55FC08[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (0051DDC0) -------------------------------------------------------- +void __fastcall std::wistringstream::~wistringstream(int a1) +{ + void *Block; // eax + + Block = *(void **)(a1 + 44); + *(_DWORD *)a1 = &off_55FBF4; + *(_DWORD *)(a1 + 68) = off_55FC08; + *(_DWORD *)(a1 + 8) = &off_55F968; + if ( Block != (void *)(a1 + 52) ) + operator delete(Block); + *(_DWORD *)(a1 + 8) = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 36)); + *(_DWORD *)a1 = &unk_55B348; + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)(a1 + 68) = &off_560E30; + std::ios_base::~ios_base(a1 + 68); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FBF4: using guessed type int (*off_55FBF4)(); +// 55FC08: using guessed type int (*off_55FC08[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (0051DE20) -------------------------------------------------------- +int __thiscall std::wistringstream::~wistringstream(int *this, int *a2) +{ + int v3; // eax + char *Block; // eax + int v5; // eax + int result; // eax + + v3 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v3 - 12)) = a2[3]; + Block = (char *)this[11]; + this[2] = (int)&off_55F968; + if ( Block != (char *)(this + 13) ) + operator delete(Block); + this[2] = (int)&off_560464; + std::locale::~locale((_DWORD **)this + 9); + v5 = a2[1]; + *this = v5; + result = *(_DWORD *)(v5 - 12); + *(int *)((char *)this + result) = a2[2]; + this[1] = 0; + return result; +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051DE80) -------------------------------------------------------- +_DWORD *__thiscall std::wistringstream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // eax + __int16 v6; // cx + int v7; // eax + std::ios_base *v9; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v9); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + v7 = this[1]; + *((_BYTE *)v4 + 118) = v6; + this[1] = a2[1]; + a2[1] = v7; + std::wstringbuf::operator=((int)(this + 2), (int)(a2 + 2)); + return this; +} +// 51DEC0: variable 'v9' is possibly undefined + +//----- (0051DF60) -------------------------------------------------------- +int __thiscall std::ostringstream::str(int this, int a2) +{ + _DWORD *v2; // esi + unsigned int v4; // eax + + v2 = (_DWORD *)(this + 4); + std::string::_M_replace((unsigned int *)(this + 40), 0, *(_DWORD *)(this + 44), *(char **)a2, *(_DWORD *)(a2 + 4)); + v4 = 0; + if ( (*(_BYTE *)(this + 36) & 3) != 0 ) + v4 = *(_DWORD *)(this + 44); + return std::stringbuf::_M_sync(v2, *(_DWORD **)(this + 40), 0, v4); +} + +//----- (0051DFD0) -------------------------------------------------------- +void __thiscall std::ostringstream::swap(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // edx + char v6; // cl + char v7; // cl + std::ios_base *v8; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v8); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + *((_BYTE *)v4 + 117) = v7; + std::stringbuf::swap(this + 1, (int)(a2 + 1)); +} +// 51E010: variable 'v8' is possibly undefined + +//----- (0051E0A0) -------------------------------------------------------- +void __thiscall std::ostringstream::basic_ostringstream(_DWORD *this, _DWORD *a2) +{ + int v2; // eax + int v3; // edx + unsigned int v4; // eax + int v5; // ecx + int v6; // eax + _DWORD *v7; // eax + int v8; // ebx + int v9; // ecx + int v10; // ebx + _DWORD *v11; // eax + int v12; // edx + int v13; // ecx + int v14; // ecx + std::ios_base *v15; // [esp+4h] [ebp-B4h] + const std::locale *v16; // [esp+4h] [ebp-B4h] + struct _Unwind_Exception *lpuexcpta; // [esp+20h] [ebp-98h] + struct _Unwind_Exception *lpuexcpt; // [esp+20h] [ebp-98h] + _DWORD *v19; // [esp+24h] [ebp-94h] + _DWORD *v20; // [esp+24h] [ebp-94h] + __int64 v22; // [esp+70h] [ebp-48h] + int v23; // [esp+78h] [ebp-40h] + __int64 v24; // [esp+80h] [ebp-38h] + __int64 v25; // [esp+88h] [ebp-30h] + int v26; // [esp+90h] [ebp-28h] + int v27; // [esp+98h] [ebp-20h] + + v19 = this + 16; + std::ios_base::ios_base(this + 16); + this[44] = 0; + *((_WORD *)this + 90) = 0; + this[46] = 0; + this[47] = 0; + this[48] = 0; + this[49] = 0; + *this = &unk_55B370; + this[16] = &unk_55B384; + lpuexcpta = (struct _Unwind_Exception *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_move((int)v19, lpuexcpta, v15); + std::ios::_M_cache_locale(v19, (int)(this + 43)); + v22 = -1LL; + v2 = *((_DWORD *)lpuexcpta + 28); + *this = &off_55FC1C; + *((_DWORD *)lpuexcpta + 28) = 0; + this[44] = v2; + LOWORD(v2) = *((_WORD *)lpuexcpta + 58); + this[46] = 0; + *((_WORD *)this + 90) = v2; + lpuexcpt = (struct _Unwind_Exception *)(this + 1); + v3 = a2[10]; + v4 = a2[2]; + this[16] = off_55FC30; + v23 = -1; + LODWORD(v24) = -1; + v25 = -1LL; + v26 = -1; + v27 = -1; + if ( !v4 ) + { + v5 = a2[5]; + if ( !v5 ) + goto LABEL_7; + goto LABEL_3; + } + v22 = (int)(v4 - v3); + v23 = a2[3] - v3; + v4 = a2[4]; + v24 = (int)(v4 - v3); + v5 = a2[5]; + if ( v5 ) + { +LABEL_3: + v25 = v5 - v3; + v26 = a2[6] - v5; + v27 = a2[7] - v3; + if ( v4 < a2[6] ) + v4 = a2[6]; + } + if ( v4 ) + a2[11] = v4 - v3; +LABEL_7: + std::streambuf::basic_streambuf(lpuexcpt, (std::locale *)(a2 + 1), v16); + v6 = a2[9]; + this[1] = &off_55F928; + this[10] = this + 12; + this[9] = v6; + v20 = a2 + 12; + v7 = (_DWORD *)a2[10]; + if ( v7 == a2 + 12 ) + { + this[12] = a2[12]; + this[13] = a2[13]; + this[14] = a2[14]; + this[15] = a2[15]; + } + else + { + this[10] = v7; + this[12] = a2[12]; + } + this[11] = a2[11]; + *((_BYTE *)a2 + 48) = 0; + a2[10] = v20; + a2[11] = 0; + v8 = this[10]; + if ( ((unsigned int)v22 & HIDWORD(v22)) != -1 ) + { + this[2] = v8 + v22; + this[3] = v8 + v23; + this[4] = v8 + v24; + } + if ( ((unsigned int)v25 & HIDWORD(v25)) != -1 ) + { + v9 = v8 + v27; + v10 = v25 + v8; + this[7] = v9; + this[5] = v10; + this[6] = v10 + v26; + } + v11 = (_DWORD *)a2[10]; + v12 = a2[9] & 0x10; + if ( v11 == v20 ) + v13 = 15; + else + v13 = a2[12]; + v14 = (int)v11 + v13; + if ( (a2[9] & 8) != 0 ) + { + a2[2] = v11; + a2[3] = v11; + a2[4] = v11; + if ( v12 ) + { + a2[6] = v11; + a2[5] = v11; + a2[7] = v14; + } + } + else if ( v12 ) + { + a2[6] = v11; + a2[5] = v11; + a2[7] = v14; + a2[2] = v11; + a2[3] = v11; + a2[4] = v11; + } + this[46] = lpuexcpt; +} +// 51E39F: conditional instruction was optimized away because rax.8 is in (<80000000u|>=FFFFFFFF80000000u) +// 51E156: variable 'v15' is possibly undefined +// 51E2D3: variable 'v16' is possibly undefined +// 55F928: using guessed type int (*off_55F928)(); +// 55FC1C: using guessed type int (*off_55FC1C)(); +// 55FC30: using guessed type int (*off_55FC30[2])(); + +//----- (0051E520) -------------------------------------------------------- +void __thiscall std::ostringstream::basic_ostringstream(_DWORD *this, int a2, int a3) +{ + int v3; // eax + _BYTE *v4; // edx + unsigned int v5; // eax + int v6; // [esp+20h] [ebp-48h] + _DWORD *v7; // [esp+24h] [ebp-44h] + + v6 = (int)(this + 16); + std::ios_base::ios_base(this + 16); + this[44] = 0; + *((_WORD *)this + 90) = 0; + this[46] = 0; + this[47] = 0; + this[48] = 0; + this[49] = 0; + *this = &unk_55B370; + this[16] = &unk_55B384; + std::ios::init(v6, 0); + *this = &off_55FC1C; + this[16] = off_55FC30; + this[1] = &off_560424; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + v7 = this + 1; + std::locale::locale(this + 8); + v3 = *(_DWORD *)(a2 + 4); + v4 = *(_BYTE **)a2; + this[1] = &off_55F928; + this[9] = 0; + this[10] = this + 12; + std::string::_M_construct(this + 10, v4, (int)&v4[v3]); + v5 = 0; + this[9] = a3 | 0x10; + if ( (a3 & 3) != 0 ) + v5 = this[11]; + std::stringbuf::_M_sync(v7, (_DWORD *)this[10], 0, v5); + std::ios::init(v6, (int)v7); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FC1C: using guessed type int (*off_55FC1C)(); +// 55FC30: using guessed type int (*off_55FC30[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051E730) -------------------------------------------------------- +void __thiscall std::ostringstream::basic_ostringstream(_DWORD *this, int a2) +{ + int v2; // [esp+24h] [ebp-44h] + + v2 = (int)(this + 16); + std::ios_base::ios_base(this + 16); + this[44] = 0; + *((_WORD *)this + 90) = 0; + this[46] = 0; + this[47] = 0; + this[48] = 0; + this[49] = 0; + *this = &unk_55B370; + this[16] = &unk_55B384; + std::ios::init(v2, 0); + *this = &off_55FC1C; + this[16] = off_55FC30; + this[1] = &off_560424; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + std::locale::locale(this + 8); + this[1] = &off_55F928; + this[9] = a2 | 0x10; + this[10] = this + 12; + this[11] = 0; + *((_BYTE *)this + 48) = 0; + std::ios::init(v2, (int)(this + 1)); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FC1C: using guessed type int (*off_55FC1C)(); +// 55FC30: using guessed type int (*off_55FC30[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051E8C0) -------------------------------------------------------- +void __fastcall std::ostringstream::basic_ostringstream(int a1) +{ + int v1; // [esp+24h] [ebp-44h] + + v1 = a1 + 64; + std::ios_base::ios_base((_DWORD *)(a1 + 64)); + *(_DWORD *)(a1 + 176) = 0; + *(_WORD *)(a1 + 180) = 0; + *(_DWORD *)(a1 + 184) = 0; + *(_DWORD *)(a1 + 188) = 0; + *(_DWORD *)(a1 + 192) = 0; + *(_DWORD *)(a1 + 196) = 0; + *(_DWORD *)a1 = &unk_55B370; + *(_DWORD *)(a1 + 64) = &unk_55B384; + std::ios::init(v1, 0); + *(_DWORD *)a1 = &off_55FC1C; + *(_DWORD *)(a1 + 64) = off_55FC30; + *(_DWORD *)(a1 + 4) = &off_560424; + *(_DWORD *)(a1 + 8) = 0; + *(_DWORD *)(a1 + 12) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 24) = 0; + *(_DWORD *)(a1 + 28) = 0; + std::locale::locale((_DWORD *)(a1 + 32)); + *(_DWORD *)(a1 + 4) = &off_55F928; + *(_DWORD *)(a1 + 36) = 16; + *(_DWORD *)(a1 + 40) = a1 + 48; + *(_DWORD *)(a1 + 44) = 0; + *(_BYTE *)(a1 + 48) = 0; + std::ios::init(v1, a1 + 4); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FC1C: using guessed type int (*off_55FC1C)(); +// 55FC30: using guessed type int (*off_55FC30[2])(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051EA50) -------------------------------------------------------- +void __thiscall std::ostringstream::basic_ostringstream(int *this, int *a2, _DWORD *a3) +{ + int v4; // eax + int v5; // eax + int v6; // eax + int v7; // edx + int v8; // edx + unsigned int v9; // eax + int v10; // ecx + int v11; // eax + _DWORD *v12; // eax + int v13; // ebx + int v14; // ecx + int v15; // ebx + struct _Unwind_Exception *v16; // eax + int v17; // edx + int v18; // ecx + char *v19; // ecx + std::ios_base *v20; // [esp+4h] [ebp-A4h] + const std::locale *v21; // [esp+4h] [ebp-A4h] + std::ios_base *v22; // [esp+10h] [ebp-98h] + _DWORD *v23; // [esp+10h] [ebp-98h] + struct _Unwind_Exception *lpuexcpta; // [esp+14h] [ebp-94h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-94h] + __int64 v27; // [esp+60h] [ebp-48h] + int v28; // [esp+68h] [ebp-40h] + __int64 v29; // [esp+70h] [ebp-38h] + __int64 v30; // [esp+78h] [ebp-30h] + int v31; // [esp+80h] [ebp-28h] + int v32; // [esp+88h] [ebp-20h] + + v4 = a2[1]; + *this = v4; + lpuexcpta = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v4 - 12)); + *(_DWORD *)lpuexcpta = a2[2]; + v22 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move((int)lpuexcpta, v22, v20); + std::ios::_M_cache_locale(lpuexcpta, (int)lpuexcpta + 108); + v5 = *((_DWORD *)v22 + 28); + *((_DWORD *)lpuexcpta + 30) = 0; + *((_DWORD *)v22 + 28) = 0; + *((_DWORD *)lpuexcpta + 28) = v5; + *((_WORD *)lpuexcpta + 58) = *((_WORD *)v22 + 58); + v6 = *a2; + v7 = a2[3]; + *this = *a2; + v27 = -1LL; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v7; + v23 = this + 1; + v28 = -1; + LODWORD(v29) = -1; + v30 = -1LL; + v31 = -1; + v32 = -1; + v8 = a3[10]; + v9 = a3[2]; + if ( !v9 ) + { + v10 = a3[5]; + if ( !v10 ) + goto LABEL_7; + goto LABEL_3; + } + v27 = (int)(v9 - v8); + v28 = a3[3] - v8; + v9 = a3[4]; + v29 = (int)(v9 - v8); + v10 = a3[5]; + if ( v10 ) + { +LABEL_3: + v30 = v10 - v8; + v31 = a3[6] - v10; + v32 = a3[7] - v8; + if ( v9 < a3[6] ) + v9 = a3[6]; + } + if ( v9 ) + a3[11] = v9 - v8; +LABEL_7: + std::streambuf::basic_streambuf(v23, (std::locale *)(a3 + 1), v21); + v11 = a3[9]; + this[1] = (int)&off_55F928; + this[10] = (int)(this + 12); + this[9] = v11; + lpuexcpt = (struct _Unwind_Exception *)(a3 + 12); + v12 = (_DWORD *)a3[10]; + if ( v12 == a3 + 12 ) + { + this[12] = a3[12]; + this[13] = a3[13]; + this[14] = a3[14]; + this[15] = a3[15]; + } + else + { + this[10] = (int)v12; + this[12] = a3[12]; + } + this[11] = a3[11]; + a3[10] = lpuexcpt; + *((_BYTE *)a3 + 48) = 0; + v13 = this[10]; + a3[11] = 0; + if ( ((unsigned int)v27 & HIDWORD(v27)) != -1 ) + { + this[2] = v13 + v27; + this[3] = v13 + v28; + this[4] = v13 + v29; + } + if ( ((unsigned int)v30 & HIDWORD(v30)) != -1 ) + { + v14 = v13 + v32; + v15 = v30 + v13; + this[7] = v14; + this[5] = v15; + this[6] = v15 + v31; + } + v16 = (struct _Unwind_Exception *)a3[10]; + v17 = a3[9] & 0x10; + if ( v16 == lpuexcpt ) + v18 = 15; + else + v18 = a3[12]; + v19 = (char *)v16 + v18; + if ( (a3[9] & 8) != 0 ) + { + a3[2] = v16; + a3[3] = v16; + a3[4] = v16; + if ( v17 ) + { + a3[6] = v16; + a3[5] = v16; + a3[7] = v19; + } + } + else if ( v17 ) + { + a3[6] = v16; + a3[5] = v16; + a3[7] = v19; + a3[2] = v16; + a3[3] = v16; + a3[4] = v16; + } + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 120) = (int)v23; +} +// 51ED0A: conditional instruction was optimized away because rax.8 is in (<80000000u|>=FFFFFFFF80000000u) +// 51EAC2: variable 'v20' is possibly undefined +// 51EC3E: variable 'v21' is possibly undefined +// 55F928: using guessed type int (*off_55F928)(); + +//----- (0051EE60) -------------------------------------------------------- +void __thiscall std::ostringstream::basic_ostringstream(int *this, int *a2, int a3, int a4) +{ + int v5; // eax + _DWORD *v6; // ecx + int v7; // eax + int v8; // edx + _BYTE *v9; // edx + int v10; // eax + unsigned int v11; // eax + _DWORD *v12; // [esp+24h] [ebp-44h] + + v5 = a2[1]; + *this = v5; + v6 = (int *)((char *)this + *(_DWORD *)(v5 - 12)); + *v6 = a2[2]; + std::ios::init((int)v6, 0); + v7 = *a2; + v8 = a2[3]; + *this = *a2; + v12 = this + 1; + *(int *)((char *)this + *(_DWORD *)(v7 - 12)) = v8; + this[1] = (int)&off_560424; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + std::locale::locale(this + 8); + v9 = *(_BYTE **)a3; + v10 = *(_DWORD *)(a3 + 4); + this[1] = (int)&off_55F928; + this[9] = 0; + this[10] = (int)(this + 12); + std::string::_M_construct(this + 10, v9, (int)&v9[v10]); + v11 = 0; + this[9] = a4 | 0x10; + if ( (a4 & 3) != 0 ) + v11 = this[11]; + std::stringbuf::_M_sync(v12, (_DWORD *)this[10], 0, v11); + std::ios::init((int)this + *(_DWORD *)(*this - 12), (int)v12); +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051F020) -------------------------------------------------------- +void __thiscall std::ostringstream::basic_ostringstream(int *this, int *a2, int a3) +{ + int v3; // eax + _DWORD *v4; // ecx + int v5; // eax + int v6; // edx + int v7; // eax + int v8; // ecx + + v3 = a2[1]; + *this = v3; + v4 = (int *)((char *)this + *(_DWORD *)(v3 - 12)); + *v4 = a2[2]; + std::ios::init((int)v4, 0); + v5 = *a2; + v6 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v5 - 12)) = v6; + this[1] = (int)&off_560424; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + std::locale::locale(this + 8); + this[11] = 0; + this[9] = a3 | 0x10; + this[10] = (int)(this + 12); + v7 = *this; + *((_BYTE *)this + 48) = 0; + v8 = *(_DWORD *)(v7 - 12); + this[1] = (int)&off_55F928; + std::ios::init((int)this + v8, (int)(this + 1)); +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051F160) -------------------------------------------------------- +void __thiscall std::ostringstream::basic_ostringstream(int *this, int *a2) +{ + int v2; // eax + _DWORD *v3; // ecx + int v4; // eax + int v5; // edx + int v6; // eax + + v2 = a2[1]; + *this = v2; + v3 = (int *)((char *)this + *(_DWORD *)(v2 - 12)); + *v3 = a2[2]; + std::ios::init((int)v3, 0); + v4 = *a2; + v5 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v4 - 12)) = v5; + this[1] = (int)&off_560424; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + std::locale::locale(this + 8); + this[1] = (int)&off_55F928; + this[10] = (int)(this + 12); + v6 = *this; + this[9] = 16; + this[11] = 0; + *((_BYTE *)this + 48) = 0; + std::ios::init((int)this + *(_DWORD *)(v6 - 12), (int)(this + 1)); +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051F290) -------------------------------------------------------- +void __fastcall std::ostringstream::~ostringstream(_DWORD *Block) +{ + _DWORD *v2; // eax + + v2 = (_DWORD *)Block[10]; + *Block = &off_55FC1C; + Block[16] = off_55FC30; + Block[1] = &off_55F928; + if ( v2 != Block + 12 ) + operator delete(v2); + Block[1] = &off_560424; + std::locale::~locale((_DWORD **)Block + 8); + *Block = &unk_55B370; + Block[16] = &off_560E20; + std::ios_base::~ios_base((int)(Block + 16)); + operator delete(Block); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FC1C: using guessed type int (*off_55FC1C)(); +// 55FC30: using guessed type int (*off_55FC30[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (0051F2F0) -------------------------------------------------------- +void __fastcall std::ostringstream::~ostringstream(int a1) +{ + void *Block; // eax + + Block = *(void **)(a1 + 40); + *(_DWORD *)a1 = &off_55FC1C; + *(_DWORD *)(a1 + 64) = off_55FC30; + *(_DWORD *)(a1 + 4) = &off_55F928; + if ( Block != (void *)(a1 + 48) ) + operator delete(Block); + *(_DWORD *)(a1 + 4) = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 32)); + *(_DWORD *)a1 = &unk_55B370; + *(_DWORD *)(a1 + 64) = &off_560E20; + std::ios_base::~ios_base(a1 + 64); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FC1C: using guessed type int (*off_55FC1C)(); +// 55FC30: using guessed type int (*off_55FC30[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (0051F350) -------------------------------------------------------- +int __thiscall std::ostringstream::~ostringstream(int *this, int *a2) +{ + int v3; // eax + char *Block; // eax + int v5; // eax + int result; // eax + + v3 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v3 - 12)) = a2[3]; + Block = (char *)this[10]; + this[1] = (int)&off_55F928; + if ( Block != (char *)(this + 12) ) + operator delete(Block); + this[1] = (int)&off_560424; + std::locale::~locale((_DWORD **)this + 8); + v5 = a2[1]; + *this = v5; + result = *(_DWORD *)(v5 - 12); + *(int *)((char *)this + result) = a2[2]; + return result; +} +// 55F928: using guessed type int (*off_55F928)(); +// 560424: using guessed type int (*off_560424)(); + +//----- (0051F3B0) -------------------------------------------------------- +_DWORD *__thiscall std::ostringstream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // eax + char v6; // cl + char v7; // cl + std::ios_base *v9; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v9); + std::ios::_M_cache_locale(v3, (int)v3 + 108); + std::ios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + *((_DWORD *)v4 + 28) = v5; + v6 = *((_BYTE *)v3 + 116); + *((_BYTE *)v3 + 116) = *((_BYTE *)v4 + 116); + LOBYTE(v5) = *((_BYTE *)v4 + 117); + *((_BYTE *)v4 + 116) = v6; + v7 = *((_BYTE *)v3 + 117); + *((_BYTE *)v3 + 117) = v5; + *((_BYTE *)v4 + 117) = v7; + std::stringbuf::operator=((int)(this + 1), (int)(a2 + 1)); + return this; +} +// 51F3F0: variable 'v9' is possibly undefined + +//----- (0051F480) -------------------------------------------------------- +int __thiscall std::wostringstream::str(int this, int a2) +{ + _DWORD *v2; // esi + unsigned int v4; // eax + + v2 = (_DWORD *)(this + 4); + std::wstring::_M_replace((unsigned int *)(this + 40), 0, *(_DWORD *)(this + 44), *(_WORD **)a2, *(_DWORD *)(a2 + 4)); + v4 = 0; + if ( (*(_BYTE *)(this + 36) & 3) != 0 ) + v4 = *(_DWORD *)(this + 44); + return std::wstringbuf::_M_sync(v2, *(_DWORD **)(this + 40), 0, v4); +} + +//----- (0051F4F0) -------------------------------------------------------- +void __thiscall std::wostringstream::swap(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // edx + __int16 v6; // cx + std::ios_base *v7; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v7); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + *((_BYTE *)v4 + 118) = v6; + std::wstringbuf::swap(this + 1, (int)(a2 + 1)); +} +// 51F530: variable 'v7' is possibly undefined + +//----- (0051F5C0) -------------------------------------------------------- +void __thiscall std::wostringstream::basic_ostringstream(_DWORD *this, _DWORD *a2) +{ + int v2; // eax + int v3; // edx + unsigned int v4; // eax + int v5; // ecx + int v6; // eax + _DWORD *v7; // esi + _DWORD *v8; // eax + int v9; // ecx + int v10; // ebx + char *v11; // ecx + int v12; // edx + std::ios_base *v13; // [esp+4h] [ebp-B4h] + const std::locale *v14; // [esp+4h] [ebp-B4h] + struct _Unwind_Exception *lpuexcpta; // [esp+20h] [ebp-98h] + struct _Unwind_Exception *lpuexcpt; // [esp+20h] [ebp-98h] + _DWORD *v17; // [esp+24h] [ebp-94h] + int v19; // [esp+70h] [ebp-48h] + int v20; // [esp+74h] [ebp-44h] + int v21; // [esp+78h] [ebp-40h] + __int64 v22; // [esp+80h] [ebp-38h] + int v23; // [esp+88h] [ebp-30h] + int v24; // [esp+8Ch] [ebp-2Ch] + int v25; // [esp+90h] [ebp-28h] + int v26; // [esp+98h] [ebp-20h] + + v17 = this + 16; + std::ios_base::ios_base(this + 16); + *((_WORD *)this + 90) = 0; + this[44] = 0; + *((_BYTE *)this + 182) = 0; + this[46] = 0; + this[47] = 0; + this[48] = 0; + this[49] = 0; + *this = &unk_55B398; + this[16] = &unk_55B3AC; + lpuexcpta = (struct _Unwind_Exception *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_move((int)v17, lpuexcpta, v13); + std::wios::_M_cache_locale(v17, (int)(this + 43)); + v19 = -1; + v20 = -1; + v2 = *((_DWORD *)lpuexcpta + 28); + *this = &off_55FC44; + *((_DWORD *)lpuexcpta + 28) = 0; + this[44] = v2; + LOWORD(v2) = *((_WORD *)lpuexcpta + 58); + this[46] = 0; + *((_WORD *)this + 90) = v2; + LOBYTE(v2) = *((_BYTE *)lpuexcpta + 118); + this[16] = off_55FC58; + v3 = a2[10]; + *((_BYTE *)this + 182) = v2; + lpuexcpt = (struct _Unwind_Exception *)(this + 1); + v4 = a2[2]; + v21 = -1; + LODWORD(v22) = -1; + v23 = -1; + v24 = -1; + v25 = -1; + v26 = -1; + if ( !v4 ) + { + v5 = a2[5]; + if ( !v5 ) + goto LABEL_7; + goto LABEL_3; + } + v19 = (int)(v4 - v3) >> 1; + v20 = (int)(v4 - v3) >> 31; + v21 = (a2[3] - v3) >> 1; + v4 = a2[4]; + v22 = (int)(v4 - v3) >> 1; + v5 = a2[5]; + if ( v5 ) + { +LABEL_3: + v23 = (v5 - v3) >> 1; + v24 = (v5 - v3) >> 31; + v25 = (a2[6] - v5) >> 1; + v26 = (a2[7] - v3) >> 1; + if ( v4 < a2[6] ) + v4 = a2[6]; + } + if ( v4 ) + a2[11] = (int)(v4 - v3) >> 1; +LABEL_7: + std::wstreambuf::basic_streambuf(lpuexcpt, (std::locale *)(a2 + 1), v14); + v6 = a2[9]; + this[1] = &off_55F968; + this[10] = this + 12; + v7 = a2 + 12; + this[9] = v6; + v8 = (_DWORD *)a2[10]; + if ( v8 == a2 + 12 ) + { + this[12] = a2[12]; + this[13] = a2[13]; + this[14] = a2[14]; + this[15] = a2[15]; + } + else + { + this[10] = v8; + this[12] = a2[12]; + } + this[11] = a2[11]; + a2[10] = v7; + *((_WORD *)a2 + 24) = 0; + v9 = this[10]; + a2[11] = 0; + if ( (v19 & v20) != -1 ) + { + this[2] = v9 + 2 * v19; + this[3] = v9 + 2 * v21; + this[4] = v9 + 2 * v22; + } + if ( (v23 & v24) != -1 ) + { + v10 = v9 + 2 * v23; + this[7] = v9 + 2 * v26; + this[5] = v10; + this[6] = v10 + 2 * v25; + } + v11 = (char *)a2 + 62; + v12 = a2[9] & 0x10; + if ( (a2[9] & 8) != 0 ) + { + a2[2] = v7; + a2[3] = v7; + a2[4] = v7; + if ( v12 ) + { + a2[6] = v7; + a2[5] = v7; + a2[7] = v11; + } + } + else if ( v12 ) + { + a2[6] = v7; + a2[5] = v7; + a2[7] = v11; + a2[2] = v7; + a2[3] = v7; + a2[4] = v7; + } + this[46] = lpuexcpt; +} +// 51F8E9: conditional instruction was optimized away because rax.8 is in (<80000000u|>=FFFFFFFF80000000u) +// 51F67F: variable 'v13' is possibly undefined +// 51F814: variable 'v14' is possibly undefined +// 55F968: using guessed type int (*off_55F968)(); +// 55FC44: using guessed type int (*off_55FC44)(); +// 55FC58: using guessed type int (*off_55FC58[2])(); + +//----- (0051FA30) -------------------------------------------------------- +void __thiscall std::wostringstream::basic_ostringstream(_DWORD *this, int a2, int a3) +{ + int v3; // edx + _WORD *v4; // eax + unsigned int v5; // eax + int v6; // [esp+20h] [ebp-48h] + _DWORD *v7; // [esp+24h] [ebp-44h] + + v6 = (int)(this + 16); + std::ios_base::ios_base(this + 16); + this[44] = 0; + *((_WORD *)this + 90) = 0; + *((_BYTE *)this + 182) = 0; + this[46] = 0; + this[47] = 0; + this[48] = 0; + this[49] = 0; + *this = &unk_55B398; + this[16] = &unk_55B3AC; + std::wios::init(v6, 0); + *this = &off_55FC44; + this[16] = off_55FC58; + this[1] = &off_560464; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + v7 = this + 1; + std::locale::locale(this + 8); + v3 = *(_DWORD *)(a2 + 4); + v4 = *(_WORD **)a2; + this[1] = &off_55F968; + this[9] = 0; + this[10] = this + 12; + std::wstring::_M_construct(this + 10, v4, (int)&v4[v3]); + v5 = 0; + this[9] = a3 | 0x10; + if ( (a3 & 3) != 0 ) + v5 = this[11]; + std::wstringbuf::_M_sync(v7, (_DWORD *)this[10], 0, v5); + std::wios::init(v6, (int)v7); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FC44: using guessed type int (*off_55FC44)(); +// 55FC58: using guessed type int (*off_55FC58[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051FC40) -------------------------------------------------------- +void __thiscall std::wostringstream::basic_ostringstream(_DWORD *this, int a2) +{ + int v2; // [esp+24h] [ebp-44h] + + v2 = (int)(this + 16); + std::ios_base::ios_base(this + 16); + this[44] = 0; + *((_WORD *)this + 90) = 0; + *((_BYTE *)this + 182) = 0; + this[46] = 0; + this[47] = 0; + this[48] = 0; + this[49] = 0; + *this = &unk_55B398; + this[16] = &unk_55B3AC; + std::wios::init(v2, 0); + *this = &off_55FC44; + this[16] = off_55FC58; + this[1] = &off_560464; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + std::locale::locale(this + 8); + this[1] = &off_55F968; + this[9] = a2 | 0x10; + this[10] = this + 12; + this[11] = 0; + *((_WORD *)this + 24) = 0; + std::wios::init(v2, (int)(this + 1)); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FC44: using guessed type int (*off_55FC44)(); +// 55FC58: using guessed type int (*off_55FC58[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051FDD0) -------------------------------------------------------- +void __fastcall std::wostringstream::basic_ostringstream(int a1) +{ + int v1; // [esp+24h] [ebp-44h] + + v1 = a1 + 64; + std::ios_base::ios_base((_DWORD *)(a1 + 64)); + *(_DWORD *)(a1 + 176) = 0; + *(_WORD *)(a1 + 180) = 0; + *(_BYTE *)(a1 + 182) = 0; + *(_DWORD *)(a1 + 184) = 0; + *(_DWORD *)(a1 + 188) = 0; + *(_DWORD *)(a1 + 192) = 0; + *(_DWORD *)(a1 + 196) = 0; + *(_DWORD *)a1 = &unk_55B398; + *(_DWORD *)(a1 + 64) = &unk_55B3AC; + std::wios::init(v1, 0); + *(_DWORD *)a1 = &off_55FC44; + *(_DWORD *)(a1 + 64) = off_55FC58; + *(_DWORD *)(a1 + 4) = &off_560464; + *(_DWORD *)(a1 + 8) = 0; + *(_DWORD *)(a1 + 12) = 0; + *(_DWORD *)(a1 + 16) = 0; + *(_DWORD *)(a1 + 20) = 0; + *(_DWORD *)(a1 + 24) = 0; + *(_DWORD *)(a1 + 28) = 0; + std::locale::locale((_DWORD *)(a1 + 32)); + *(_DWORD *)(a1 + 4) = &off_55F968; + *(_DWORD *)(a1 + 40) = a1 + 48; + *(_DWORD *)(a1 + 36) = 16; + *(_DWORD *)(a1 + 44) = 0; + *(_WORD *)(a1 + 48) = 0; + std::wios::init(v1, a1 + 4); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FC44: using guessed type int (*off_55FC44)(); +// 55FC58: using guessed type int (*off_55FC58[2])(); +// 560464: using guessed type int (*off_560464)(); + +//----- (0051FF60) -------------------------------------------------------- +void __thiscall std::wostringstream::basic_ostringstream(int *this, int *a2, _DWORD *a3) +{ + int v4; // eax + int v5; // eax + int v6; // eax + int v7; // edx + unsigned int v8; // eax + int v9; // edx + int v10; // ecx + int v11; // eax + _DWORD *v12; // esi + _DWORD *v13; // eax + int v14; // ecx + int v15; // ebx + char *v16; // ecx + int v17; // edx + std::ios_base *v18; // [esp+4h] [ebp-A4h] + const std::locale *v19; // [esp+4h] [ebp-A4h] + std::ios_base *v20; // [esp+10h] [ebp-98h] + _DWORD *v21; // [esp+10h] [ebp-98h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-94h] + int v24; // [esp+60h] [ebp-48h] + int v25; // [esp+64h] [ebp-44h] + int v26; // [esp+68h] [ebp-40h] + __int64 v27; // [esp+70h] [ebp-38h] + int v28; // [esp+78h] [ebp-30h] + int v29; // [esp+7Ch] [ebp-2Ch] + int v30; // [esp+80h] [ebp-28h] + int v31; // [esp+88h] [ebp-20h] + + v4 = a2[1]; + *this = v4; + lpuexcpt = (struct _Unwind_Exception *)((char *)this + *(_DWORD *)(v4 - 12)); + *(_DWORD *)lpuexcpt = a2[2]; + v20 = (std::ios_base *)((char *)a3 + *(_DWORD *)(*a3 - 12)); + std::ios_base::_M_move((int)lpuexcpt, v20, v18); + std::wios::_M_cache_locale(lpuexcpt, (int)lpuexcpt + 108); + v5 = *((_DWORD *)v20 + 28); + *((_DWORD *)lpuexcpt + 30) = 0; + *((_DWORD *)v20 + 28) = 0; + *((_DWORD *)lpuexcpt + 28) = v5; + *((_WORD *)lpuexcpt + 58) = *((_WORD *)v20 + 58); + *((_BYTE *)lpuexcpt + 118) = *((_BYTE *)v20 + 118); + v6 = *a2; + v7 = a2[3]; + *this = *a2; + v24 = -1; + *(int *)((char *)this + *(_DWORD *)(v6 - 12)) = v7; + v21 = this + 1; + v25 = -1; + v26 = -1; + LODWORD(v27) = -1; + v28 = -1; + v29 = -1; + v30 = -1; + v31 = -1; + v8 = a3[2]; + v9 = a3[10]; + if ( !v8 ) + { + v10 = a3[5]; + if ( !v10 ) + goto LABEL_7; + goto LABEL_3; + } + v24 = (int)(v8 - v9) >> 1; + v25 = (int)(v8 - v9) >> 31; + v26 = (a3[3] - v9) >> 1; + v8 = a3[4]; + v27 = (int)(v8 - v9) >> 1; + v10 = a3[5]; + if ( v10 ) + { +LABEL_3: + v28 = (v10 - v9) >> 1; + v29 = (v10 - v9) >> 31; + v30 = (a3[6] - v10) >> 1; + v31 = (a3[7] - v9) >> 1; + if ( v8 < a3[6] ) + v8 = a3[6]; + } + if ( v8 ) + a3[11] = (int)(v8 - v9) >> 1; +LABEL_7: + std::wstreambuf::basic_streambuf(v21, (std::locale *)(a3 + 1), v19); + v11 = a3[9]; + this[1] = (int)&off_55F968; + v12 = a3 + 12; + this[9] = v11; + this[10] = (int)(this + 12); + v13 = (_DWORD *)a3[10]; + if ( v13 == a3 + 12 ) + { + this[12] = a3[12]; + this[13] = a3[13]; + this[14] = a3[14]; + this[15] = a3[15]; + } + else + { + this[10] = (int)v13; + this[12] = a3[12]; + } + this[11] = a3[11]; + a3[10] = v12; + *((_WORD *)a3 + 24) = 0; + v14 = this[10]; + a3[11] = 0; + if ( (v24 & v25) != -1 ) + { + this[2] = v14 + 2 * v24; + this[3] = v14 + 2 * v26; + this[4] = v14 + 2 * v27; + } + if ( (v28 & v29) != -1 ) + { + v15 = v14 + 2 * v28; + this[7] = v14 + 2 * v31; + this[5] = v15; + this[6] = v15 + 2 * v30; + } + v16 = (char *)a3 + 62; + v17 = a3[9] & 0x10; + if ( (a3[9] & 8) != 0 ) + { + a3[2] = v12; + a3[3] = v12; + a3[4] = v12; + if ( v17 ) + { + a3[6] = v12; + a3[5] = v12; + a3[7] = v16; + } + } + else if ( v17 ) + { + a3[6] = v12; + a3[5] = v12; + a3[7] = v16; + a3[2] = v12; + a3[3] = v12; + a3[4] = v12; + } + *(int *)((char *)this + *(_DWORD *)(*this - 12) + 120) = (int)v21; +} +// 520237: conditional instruction was optimized away because rax.8 is in (<80000000u|>=FFFFFFFF80000000u) +// 51FFD2: variable 'v18' is possibly undefined +// 520160: variable 'v19' is possibly undefined +// 55F968: using guessed type int (*off_55F968)(); + +//----- (00520370) -------------------------------------------------------- +void __thiscall std::wostringstream::basic_ostringstream(int *this, int *a2, int a3, int a4) +{ + int v5; // eax + _DWORD *v6; // ecx + int v7; // eax + int v8; // edx + int v9; // edx + _WORD *v10; // eax + unsigned int v11; // eax + _DWORD *v12; // [esp+24h] [ebp-44h] + + v5 = a2[1]; + *this = v5; + v6 = (int *)((char *)this + *(_DWORD *)(v5 - 12)); + *v6 = a2[2]; + std::wios::init((int)v6, 0); + v7 = *a2; + v8 = a2[3]; + *this = *a2; + v12 = this + 1; + *(int *)((char *)this + *(_DWORD *)(v7 - 12)) = v8; + this[1] = (int)&off_560464; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + std::locale::locale(this + 8); + v9 = *(_DWORD *)(a3 + 4); + v10 = *(_WORD **)a3; + this[1] = (int)&off_55F968; + this[9] = 0; + this[10] = (int)(this + 12); + std::wstring::_M_construct(this + 10, v10, (int)&v10[v9]); + v11 = 0; + this[9] = a4 | 0x10; + if ( (a4 & 3) != 0 ) + v11 = this[11]; + std::wstringbuf::_M_sync(v12, (_DWORD *)this[10], 0, v11); + std::wios::init((int)this + *(_DWORD *)(*this - 12), (int)v12); +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (00520530) -------------------------------------------------------- +void __thiscall std::wostringstream::basic_ostringstream(int *this, int *a2, int a3) +{ + int v3; // eax + _DWORD *v4; // ecx + int v5; // eax + int v6; // edx + int v7; // eax + + v3 = a2[1]; + *this = v3; + v4 = (int *)((char *)this + *(_DWORD *)(v3 - 12)); + *v4 = a2[2]; + std::wios::init((int)v4, 0); + v5 = *a2; + v6 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v5 - 12)) = v6; + this[1] = (int)&off_560464; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + std::locale::locale(this + 8); + this[11] = 0; + this[9] = a3 | 0x10; + this[10] = (int)(this + 12); + *((_WORD *)this + 24) = 0; + v7 = *this; + this[1] = (int)&off_55F968; + std::wios::init((int)this + *(_DWORD *)(v7 - 12), (int)(this + 1)); +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (00520670) -------------------------------------------------------- +void __thiscall std::wostringstream::basic_ostringstream(int *this, int *a2) +{ + int v2; // eax + _DWORD *v3; // ecx + int v4; // eax + int v5; // edx + int v6; // eax + + v2 = a2[1]; + *this = v2; + v3 = (int *)((char *)this + *(_DWORD *)(v2 - 12)); + *v3 = a2[2]; + std::wios::init((int)v3, 0); + v4 = *a2; + v5 = a2[3]; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v4 - 12)) = v5; + this[1] = (int)&off_560464; + this[2] = 0; + this[3] = 0; + this[4] = 0; + this[5] = 0; + this[6] = 0; + this[7] = 0; + std::locale::locale(this + 8); + this[1] = (int)&off_55F968; + this[10] = (int)(this + 12); + *((_WORD *)this + 24) = 0; + v6 = *this; + this[9] = 16; + this[11] = 0; + std::wios::init((int)this + *(_DWORD *)(v6 - 12), (int)(this + 1)); +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (005207B0) -------------------------------------------------------- +void __fastcall std::wostringstream::~wostringstream(_DWORD *Block) +{ + _DWORD *v2; // eax + + v2 = (_DWORD *)Block[10]; + *Block = &off_55FC44; + Block[16] = off_55FC58; + Block[1] = &off_55F968; + if ( v2 != Block + 12 ) + operator delete(v2); + Block[1] = &off_560464; + std::locale::~locale((_DWORD **)Block + 8); + *Block = &unk_55B398; + Block[16] = &off_560E30; + std::ios_base::~ios_base((int)(Block + 16)); + operator delete(Block); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FC44: using guessed type int (*off_55FC44)(); +// 55FC58: using guessed type int (*off_55FC58[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00520810) -------------------------------------------------------- +void __fastcall std::wostringstream::~wostringstream(int a1) +{ + void *Block; // eax + + Block = *(void **)(a1 + 40); + *(_DWORD *)a1 = &off_55FC44; + *(_DWORD *)(a1 + 64) = off_55FC58; + *(_DWORD *)(a1 + 4) = &off_55F968; + if ( Block != (void *)(a1 + 48) ) + operator delete(Block); + *(_DWORD *)(a1 + 4) = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 32)); + *(_DWORD *)a1 = &unk_55B398; + *(_DWORD *)(a1 + 64) = &off_560E30; + std::ios_base::~ios_base(a1 + 64); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FC44: using guessed type int (*off_55FC44)(); +// 55FC58: using guessed type int (*off_55FC58[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00520870) -------------------------------------------------------- +int __thiscall std::wostringstream::~wostringstream(int *this, int *a2) +{ + int v3; // eax + char *Block; // eax + int v5; // eax + int result; // eax + + v3 = *a2; + *this = *a2; + *(int *)((char *)this + *(_DWORD *)(v3 - 12)) = a2[3]; + Block = (char *)this[10]; + this[1] = (int)&off_55F968; + if ( Block != (char *)(this + 12) ) + operator delete(Block); + this[1] = (int)&off_560464; + std::locale::~locale((_DWORD **)this + 8); + v5 = a2[1]; + *this = v5; + result = *(_DWORD *)(v5 - 12); + *(int *)((char *)this + result) = a2[2]; + return result; +} +// 55F968: using guessed type int (*off_55F968)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (005208D0) -------------------------------------------------------- +_DWORD *__thiscall std::wostringstream::operator=(_DWORD *this, _DWORD *a2) +{ + std::ios_base *v3; // esi + std::ios_base *v4; // ebx + int v5; // eax + __int16 v6; // cx + std::ios_base *v8; // [esp+4h] [ebp-68h] + + v3 = (std::ios_base *)((char *)this + *(_DWORD *)(*this - 12)); + v4 = (std::ios_base *)((char *)a2 + *(_DWORD *)(*a2 - 12)); + std::ios_base::_M_swap(v3, v4, v8); + std::wios::_M_cache_locale(v3, (int)v3 + 108); + std::wios::_M_cache_locale(v4, (int)v4 + 108); + v5 = *((_DWORD *)v3 + 28); + *((_DWORD *)v3 + 28) = *((_DWORD *)v4 + 28); + v6 = *((_WORD *)v4 + 58); + *((_DWORD *)v4 + 28) = v5; + LOWORD(v5) = *((_WORD *)v3 + 58); + *((_WORD *)v3 + 58) = v6; + LOBYTE(v6) = *((_BYTE *)v3 + 118); + *((_WORD *)v4 + 58) = v5; + *((_BYTE *)v3 + 118) = *((_BYTE *)v4 + 118); + *((_BYTE *)v4 + 118) = v6; + std::wstringbuf::operator=((int)(this + 1), (int)(a2 + 1)); + return this; +} +// 520910: variable 'v8' is possibly undefined + +//----- (005209A0) -------------------------------------------------------- +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3) +{ + int result; // eax + + *this = &off_55FC68; + this[1] = a3 != 0; + result = std::locale::facet::_S_clone_c_locale(); + this[2] = result; + return result; +} +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (005209D0) -------------------------------------------------------- +void __thiscall std::collate::collate(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FC68; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (00520A70) -------------------------------------------------------- +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3) +{ + int result; // eax + + *this = &off_55FC68; + this[1] = a3 != 0; + result = std::locale::facet::_S_clone_c_locale(); + this[2] = result; + return result; +} +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (00520AA0) -------------------------------------------------------- +void __thiscall std::collate::collate(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FC68; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (00520B40) -------------------------------------------------------- +void __fastcall std::collate::~collate(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_55FC68; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 520B7E: variable 'lpfctx' is possibly undefined +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (00520BA0) -------------------------------------------------------- +void __fastcall std::collate::~collate(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FC68; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 520BDE: variable 'lpfctx' is possibly undefined +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (00520C00) -------------------------------------------------------- +void __fastcall std::collate::~collate(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FC68; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 520C3E: variable 'lpfctx' is possibly undefined +// 55FC68: using guessed type int (*off_55FC68)(); + +//----- (00520C60) -------------------------------------------------------- +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3) +{ + int result; // eax + + *this = &off_55FC84; + this[1] = a3 != 0; + result = std::locale::facet::_S_clone_c_locale(); + this[2] = result; + return result; +} +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (00520C90) -------------------------------------------------------- +void __thiscall std::collate::collate(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FC84; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (00520D30) -------------------------------------------------------- +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3) +{ + int result; // eax + + *this = &off_55FC84; + this[1] = a3 != 0; + result = std::locale::facet::_S_clone_c_locale(); + this[2] = result; + return result; +} +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (00520D60) -------------------------------------------------------- +void __thiscall std::collate::collate(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FC84; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (00520E00) -------------------------------------------------------- +void __fastcall std::collate::~collate(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_55FC84; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 520E3E: variable 'lpfctx' is possibly undefined +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (00520E60) -------------------------------------------------------- +void __fastcall std::collate::~collate(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FC84; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 520E9E: variable 'lpfctx' is possibly undefined +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (00520EC0) -------------------------------------------------------- +void __fastcall std::collate::~collate(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FC84; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 520EFE: variable 'lpfctx' is possibly undefined +// 55FC84: using guessed type int (*off_55FC84)(); + +//----- (00520F20) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4) +{ + this[1] = a4 != 0; + *this = &off_55FCA0; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 55FCA0: using guessed type int (*off_55FCA0)(); + +//----- (00520FC0) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FCA0; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 55FCA0: using guessed type int (*off_55FCA0)(); + +//----- (00521060) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4) +{ + this[1] = a4 != 0; + *this = &off_55FCA0; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 55FCA0: using guessed type int (*off_55FCA0)(); + +//----- (00521100) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FCA0; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 55FCA0: using guessed type int (*off_55FCA0)(); + +//----- (005211A0) -------------------------------------------------------- +void __fastcall std::messages::~messages(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_55FCA0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 5211DE: variable 'lpfctx' is possibly undefined +// 55FCA0: using guessed type int (*off_55FCA0)(); + +//----- (00521200) -------------------------------------------------------- +void __fastcall std::messages::~messages(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FCA0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 52123E: variable 'lpfctx' is possibly undefined +// 55FCA0: using guessed type int (*off_55FCA0)(); + +//----- (00521260) -------------------------------------------------------- +void __fastcall std::messages::~messages(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FCA0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 52129E: variable 'lpfctx' is possibly undefined +// 55FCA0: using guessed type int (*off_55FCA0)(); + +//----- (005212C0) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4) +{ + this[1] = a4 != 0; + *this = &off_55FCBC; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 55FCBC: using guessed type int (*off_55FCBC)(); + +//----- (00521360) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FCBC; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 55FCBC: using guessed type int (*off_55FCBC)(); + +//----- (00521400) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4) +{ + this[1] = a4 != 0; + *this = &off_55FCBC; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 55FCBC: using guessed type int (*off_55FCBC)(); + +//----- (005214A0) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FCBC; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 55FCBC: using guessed type int (*off_55FCBC)(); + +//----- (00521540) -------------------------------------------------------- +void __fastcall std::messages::~messages(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_55FCBC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 52157E: variable 'lpfctx' is possibly undefined +// 55FCBC: using guessed type int (*off_55FCBC)(); + +//----- (005215A0) -------------------------------------------------------- +void __fastcall std::messages::~messages(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FCBC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 5215DE: variable 'lpfctx' is possibly undefined +// 55FCBC: using guessed type int (*off_55FCBC)(); + +//----- (00521600) -------------------------------------------------------- +void __fastcall std::messages::~messages(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_55FCBC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 52163E: variable 'lpfctx' is possibly undefined +// 55FCBC: using guessed type int (*off_55FCBC)(); + +//----- (00521660) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::_M_initialize_numpunct(_DWORD *this, int a2) +{ + _DWORD *v2; // eax + char *v3; // esi + int i; // eax + char *v5; // esi + int j; // eax + _DWORD *result; // eax + _DWORD *v8; // [esp+1Ch] [ebp-10h] + + v2 = (_DWORD *)this[2]; + if ( !v2 ) + { + v8 = this; + v2 = operator new(0x68u); + this = v8; + v2[1] = 0; + *v2 = &off_5605B0; + v2[2] = 0; + v2[3] = 0; + *((_BYTE *)v2 + 16) = 0; + v2[5] = 0; + v2[6] = 0; + v2[7] = 0; + v2[8] = 0; + *((_WORD *)v2 + 18) = 0; + *((_BYTE *)v2 + 100) = 0; + v8[2] = v2; + } + v2[2] = &unk_556C10; + v3 = std::__num_base::_S_atoms_out[0]; + v2[3] = 0; + *((_BYTE *)v2 + 16) = 0; + *((_BYTE *)v2 + 36) = 46; + *(_BYTE *)(this[2] + 37) = 44; + for ( i = 0; i != 36; ++i ) + *(_BYTE *)(this[2] + i + 38) = v3[i]; + v5 = std::__num_base::_S_atoms_in[0]; + for ( j = 0; j != 26; ++j ) + *(_BYTE *)(this[2] + j + 74) = v5[j]; + result = (_DWORD *)this[2]; + result[5] = "true"; + result[6] = 4; + result[7] = "false"; + result[8] = 5; + return result; +} +// 53F580: using guessed type char *std::__num_base::_S_atoms_in[3]; +// 53F584: using guessed type char *std::__num_base::_S_atoms_out[2]; +// 5605B0: using guessed type int (*off_5605B0)(); + +//----- (00521760) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FCD8; + this[2] = a2; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00521800) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + *this = &off_55FCD8; + this[2] = 0; + this[1] = a3 != 0; + std::numpunct::_M_initialize_numpunct(this, a2); +} +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00521890) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FCD8; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00521930) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FCD8; + this[2] = a2; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (005219D0) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + *this = &off_55FCD8; + this[2] = 0; + this[1] = a3 != 0; + std::numpunct::_M_initialize_numpunct(this, a2); +} +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00521A60) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FCD8; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00521B00) -------------------------------------------------------- +void __fastcall std::numpunct::~numpunct(_DWORD *a1) +{ + int v1; // ecx + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v1 = a1[2]; + *a1 = &off_55FCD8; + if ( v1 ) + (*(void (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 521B60: variable 'lpfctx' is possibly undefined +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00521BD0) -------------------------------------------------------- +void __fastcall std::numpunct::~numpunct(_DWORD *a1) +{ + int v1; // ecx + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v1 = a1[2]; + *a1 = &off_55FCD8; + if ( v1 ) + (*(void (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 521C30: variable 'lpfctx' is possibly undefined +// 55FCD8: using guessed type int (__cdecl *off_55FCD8)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00521C80) -------------------------------------------------------- +int __thiscall std::numpunct::_M_initialize_numpunct(_DWORD *this, int a2) +{ + _DWORD *v2; // edx + char *v3; // ebx + int v4; // eax + char *v5; // ebx + int result; // eax + _DWORD *v7; // eax + + v2 = (_DWORD *)this[2]; + if ( !v2 ) + { + v7 = operator new(0xA8u); + v7[1] = 0; + v2 = v7; + *v7 = &off_5605C0; + v7[2] = 0; + v7[3] = 0; + *((_BYTE *)v7 + 16) = 0; + v7[5] = 0; + v7[6] = 0; + v7[7] = 0; + v7[8] = 0; + v7[9] = 0; + *((_BYTE *)v7 + 164) = 0; + this[2] = v7; + } + v2[2] = &unk_556C10; + v3 = std::__num_base::_S_atoms_out[0]; + v4 = 0; + v2[3] = 0; + *((_BYTE *)v2 + 16) = 0; + v2[9] = 2883630; + do + { + *((_WORD *)v2 + v4 + 20) = v3[v4]; + ++v4; + } + while ( v4 != 36 ); + v5 = std::__num_base::_S_atoms_in[0]; + for ( result = 0; result != 26; ++result ) + *((_WORD *)v2 + result + 56) = v5[result]; + v2[5] = &off_556C1C; + v2[6] = 4; + v2[7] = &off_556C26; + v2[8] = 5; + return result; +} +// 53F580: using guessed type char *std::__num_base::_S_atoms_in[3]; +// 53F584: using guessed type char *std::__num_base::_S_atoms_out[2]; +// 556C1C: using guessed type void *off_556C1C; +// 556C26: using guessed type void *off_556C26; +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (00521D70) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FCFC; + this[2] = a2; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00521E10) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + *this = &off_55FCFC; + this[2] = 0; + this[1] = a3 != 0; + std::numpunct::_M_initialize_numpunct(this, a2); +} +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00521EA0) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FCFC; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00521F40) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_55FCFC; + this[2] = a2; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00521FE0) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + *this = &off_55FCFC; + this[2] = 0; + this[1] = a3 != 0; + std::numpunct::_M_initialize_numpunct(this, a2); +} +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00522070) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_55FCFC; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00522110) -------------------------------------------------------- +void __fastcall std::numpunct::~numpunct(_DWORD *a1) +{ + int v1; // ecx + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v1 = a1[2]; + *a1 = &off_55FCFC; + if ( v1 ) + (*(void (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 522170: variable 'lpfctx' is possibly undefined +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (005221E0) -------------------------------------------------------- +void __fastcall std::numpunct::~numpunct(_DWORD *a1) +{ + int v1; // ecx + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + v1 = a1[2]; + *a1 = &off_55FCFC; + if ( v1 ) + (*(void (__fastcall **)(int))(*(_DWORD *)v1 + 4))(v1); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 522240: variable 'lpfctx' is possibly undefined +// 55FCFC: using guessed type int (__cdecl *off_55FCFC)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00522290) -------------------------------------------------------- +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_55FD20; + result = a2 != 0; + this[1] = result; + return result; +} +// 55FD20: using guessed type int (*off_55FD20)(); + +//----- (005222B0) -------------------------------------------------------- +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_55FD20; + result = a2 != 0; + this[1] = result; + return result; +} +// 55FD20: using guessed type int (*off_55FD20)(); + +//----- (005222D0) -------------------------------------------------------- +void __fastcall std::time_get>::~time_get(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_55FD20; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 5222DC: variable 'Blocka' is possibly undefined +// 55FD20: using guessed type int (*off_55FD20)(); + +//----- (005222F0) -------------------------------------------------------- +void __cdecl std::time_get>::~time_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FD20; + std::locale::facet::~facet(a1); +} +// 5222F0: variable 'v1' is possibly undefined +// 55FD20: using guessed type int (*off_55FD20)(); + +//----- (00522300) -------------------------------------------------------- +void __cdecl std::time_get>::~time_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FD20; + std::locale::facet::~facet(a1); +} +// 522300: variable 'v1' is possibly undefined +// 55FD20: using guessed type int (*off_55FD20)(); + +//----- (00522310) -------------------------------------------------------- +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_55FD4C; + result = a2 != 0; + this[1] = result; + return result; +} +// 55FD4C: using guessed type int (*off_55FD4C)(); + +//----- (00522330) -------------------------------------------------------- +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_55FD4C; + result = a2 != 0; + this[1] = result; + return result; +} +// 55FD4C: using guessed type int (*off_55FD4C)(); + +//----- (00522350) -------------------------------------------------------- +void __fastcall std::time_get>::~time_get(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_55FD4C; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52235C: variable 'Blocka' is possibly undefined +// 55FD4C: using guessed type int (*off_55FD4C)(); + +//----- (00522370) -------------------------------------------------------- +void __cdecl std::time_get>::~time_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FD4C; + std::locale::facet::~facet(a1); +} +// 522370: variable 'v1' is possibly undefined +// 55FD4C: using guessed type int (*off_55FD4C)(); + +//----- (00522380) -------------------------------------------------------- +void __cdecl std::time_get>::~time_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FD4C; + std::locale::facet::~facet(a1); +} +// 522380: variable 'v1' is possibly undefined +// 55FD4C: using guessed type int (*off_55FD4C)(); + +//----- (00522390) -------------------------------------------------------- +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_55FD78; + result = a2 != 0; + this[1] = result; + return result; +} +// 55FD78: using guessed type int (*off_55FD78)(); + +//----- (005223B0) -------------------------------------------------------- +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_55FD78; + result = a2 != 0; + this[1] = result; + return result; +} +// 55FD78: using guessed type int (*off_55FD78)(); + +//----- (005223D0) -------------------------------------------------------- +void __fastcall std::money_get>::~money_get(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_55FD78; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 5223DC: variable 'Blocka' is possibly undefined +// 55FD78: using guessed type int (*off_55FD78)(); + +//----- (005223F0) -------------------------------------------------------- +void __cdecl std::money_get>::~money_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FD78; + std::locale::facet::~facet(a1); +} +// 5223F0: variable 'v1' is possibly undefined +// 55FD78: using guessed type int (*off_55FD78)(); + +//----- (00522400) -------------------------------------------------------- +void __cdecl std::money_get>::~money_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FD78; + std::locale::facet::~facet(a1); +} +// 522400: variable 'v1' is possibly undefined +// 55FD78: using guessed type int (*off_55FD78)(); + +//----- (00522410) -------------------------------------------------------- +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_55FD90; + result = a2 != 0; + this[1] = result; + return result; +} +// 55FD90: using guessed type int (*off_55FD90)(); + +//----- (00522430) -------------------------------------------------------- +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_55FD90; + result = a2 != 0; + this[1] = result; + return result; +} +// 55FD90: using guessed type int (*off_55FD90)(); + +//----- (00522450) -------------------------------------------------------- +void __fastcall std::money_get>::~money_get(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_55FD90; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52245C: variable 'Blocka' is possibly undefined +// 55FD90: using guessed type int (*off_55FD90)(); + +//----- (00522470) -------------------------------------------------------- +void __cdecl std::money_get>::~money_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FD90; + std::locale::facet::~facet(a1); +} +// 522470: variable 'v1' is possibly undefined +// 55FD90: using guessed type int (*off_55FD90)(); + +//----- (00522480) -------------------------------------------------------- +void __cdecl std::money_get>::~money_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FD90; + std::locale::facet::~facet(a1); +} +// 522480: variable 'v1' is possibly undefined +// 55FD90: using guessed type int (*off_55FD90)(); + +//----- (00522490) -------------------------------------------------------- +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_55FDA8; + result = a2 != 0; + this[1] = result; + return result; +} +// 55FDA8: using guessed type int (*off_55FDA8)(); + +//----- (005224B0) -------------------------------------------------------- +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_55FDA8; + result = a2 != 0; + this[1] = result; + return result; +} +// 55FDA8: using guessed type int (*off_55FDA8)(); + +//----- (005224D0) -------------------------------------------------------- +void __fastcall std::money_put>::~money_put(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_55FDA8; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 5224DC: variable 'Blocka' is possibly undefined +// 55FDA8: using guessed type int (*off_55FDA8)(); + +//----- (005224F0) -------------------------------------------------------- +void __cdecl std::money_put>::~money_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FDA8; + std::locale::facet::~facet(a1); +} +// 5224F0: variable 'v1' is possibly undefined +// 55FDA8: using guessed type int (*off_55FDA8)(); + +//----- (00522500) -------------------------------------------------------- +void __cdecl std::money_put>::~money_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FDA8; + std::locale::facet::~facet(a1); +} +// 522500: variable 'v1' is possibly undefined +// 55FDA8: using guessed type int (*off_55FDA8)(); + +//----- (00522510) -------------------------------------------------------- +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_55FDC0; + result = a2 != 0; + this[1] = result; + return result; +} +// 55FDC0: using guessed type int (*off_55FDC0)(); + +//----- (00522530) -------------------------------------------------------- +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_55FDC0; + result = a2 != 0; + this[1] = result; + return result; +} +// 55FDC0: using guessed type int (*off_55FDC0)(); + +//----- (00522550) -------------------------------------------------------- +void __fastcall std::money_put>::~money_put(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_55FDC0; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52255C: variable 'Blocka' is possibly undefined +// 55FDC0: using guessed type int (*off_55FDC0)(); + +//----- (00522570) -------------------------------------------------------- +void __cdecl std::money_put>::~money_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FDC0; + std::locale::facet::~facet(a1); +} +// 522570: variable 'v1' is possibly undefined +// 55FDC0: using guessed type int (*off_55FDC0)(); + +//----- (00522580) -------------------------------------------------------- +void __cdecl std::money_put>::~money_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FDC0; + std::locale::facet::~facet(a1); +} +// 522580: variable 'v1' is possibly undefined +// 55FDC0: using guessed type int (*off_55FDC0)(); + +//----- (00522590) -------------------------------------------------------- +std::__cxx11 *__cdecl std::to_string(std::__cxx11 *this, unsigned int a2) +{ + int v2; // esi + unsigned int v3; // ebx + unsigned int i; // eax + _BYTE *v5; // ecx + _BYTE *j; // esi + unsigned int v7; // edx + int v8; // ebx + + v2 = 1; + v3 = abs32(a2); + for ( i = v3; i > 9; i /= 0x2710u ) + { + if ( i <= 0x63 ) + { + ++v2; + break; + } + if ( i <= 0x3E7 ) + { + v2 += 2; + break; + } + if ( i <= 0x270F ) + { + v2 += 3; + break; + } + v2 += 4; + } + *(_DWORD *)this = (char *)this + 8; + std::string::_M_construct(this, (a2 >> 31) + v2, 45); + v5 = (_BYTE *)(*(_DWORD *)this + ((a2 & 0x80000000) != 0)); + for ( j = &v5[v2]; ; *j = std::__detail::__to_chars_10_impl(char *,unsigned int,unsigned int)::__digits[v7] ) + { + j -= 2; + if ( v3 <= 0x63 ) + break; + v7 = 2 * (v3 % 0x64); + v3 /= 0x64u; + j[1] = byte_5610E1[v7]; + } + if ( v3 <= 9 ) + { + *v5 = v3 + 48; + } + else + { + v8 = 2 * v3; + v5[1] = byte_5610E1[v8]; + *v5 = std::__detail::__to_chars_10_impl(char *,unsigned int,unsigned int)::__digits[v8]; + } + return this; +} + +//----- (00522668) -------------------------------------------------------- +std::__cxx11 *__cdecl std::to_string(std::__cxx11 *this, unsigned int a2) +{ + size_t v2; // ecx + unsigned int v3; // ebx + unsigned int i; // eax + _BYTE *v5; // ecx + _BYTE *j; // edi + unsigned int v7; // edx + int v8; // ebx + + v2 = 1; + v3 = a2; + for ( i = a2; i > 9; i /= 0x2710u ) + { + if ( i <= 0x63 ) + { + ++v2; + break; + } + if ( i <= 0x3E7 ) + { + v2 += 2; + break; + } + if ( i <= 0x270F ) + { + v2 += 3; + break; + } + v2 += 4; + } + *(_DWORD *)this = (char *)this + 8; + std::string::_M_construct(this, v2, 0); + v5 = *(_BYTE **)this; + for ( j = (_BYTE *)(*(_DWORD *)this + *((_DWORD *)this + 1)); + ; + *j = std::__detail::__to_chars_10_impl(char *,unsigned int,unsigned int)::__digits[v7] ) + { + j -= 2; + if ( v3 <= 0x63 ) + break; + v7 = 2 * (v3 % 0x64); + v3 /= 0x64u; + j[1] = byte_5610E1[v7]; + } + if ( v3 <= 9 ) + { + *v5 = v3 + 48; + } + else + { + v8 = 2 * v3; + v5[1] = byte_5610E1[v8]; + *v5 = std::__detail::__to_chars_10_impl(char *,unsigned int,unsigned int)::__digits[v8]; + } + return this; +} + +//----- (00522730) -------------------------------------------------------- +void __fastcall std::codecvt::~codecvt(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &unk_5608DC; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52273C: variable 'Blocka' is possibly undefined + +//----- (00522750) -------------------------------------------------------- +void __cdecl std::codecvt::~codecvt(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &unk_5608DC; + std::locale::facet::~facet(a1); +} +// 522750: variable 'v1' is possibly undefined + +//----- (00522760) -------------------------------------------------------- +void __fastcall std::codecvt::~codecvt(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &unk_560908; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52276C: variable 'Blocka' is possibly undefined + +//----- (00522780) -------------------------------------------------------- +void __cdecl std::codecvt::~codecvt(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &unk_560908; + std::locale::facet::~facet(a1); +} +// 522780: variable 'v1' is possibly undefined + +//----- (00522790) -------------------------------------------------------- +void __fastcall std::codecvt::~codecvt(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &unk_560934; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52279C: variable 'Blocka' is possibly undefined + +//----- (005227B0) -------------------------------------------------------- +void __cdecl std::codecvt::~codecvt(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &unk_560934; + std::locale::facet::~facet(a1); +} +// 5227B0: variable 'v1' is possibly undefined + +//----- (005227C0) -------------------------------------------------------- +void __fastcall std::codecvt::~codecvt(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &unk_560960; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 5227CC: variable 'Blocka' is possibly undefined + +//----- (005227E0) -------------------------------------------------------- +void __cdecl std::codecvt::~codecvt(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &unk_560960; + std::locale::facet::~facet(a1); +} +// 5227E0: variable 'v1' is possibly undefined + +//----- (005227F0) -------------------------------------------------------- +int __thiscall std::codecvt::codecvt(_DWORD *this, char a2, int a3) +{ + int result; // eax + + *this = &off_560B88; + this[1] = a3 != 0; + result = std::locale::facet::_S_clone_c_locale(); + this[2] = result; + return result; +} +// 560B88: using guessed type int (__cdecl *off_560B88)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00522820) -------------------------------------------------------- +void __thiscall std::codecvt::codecvt(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560B88; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560B88: using guessed type int (__cdecl *off_560B88)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (005228D0) -------------------------------------------------------- +void __fastcall std::codecvt::~codecvt(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560B88; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + *a1 = &unk_56098C; + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 522935: variable 'lpfctx' is possibly undefined +// 560B88: using guessed type int (__cdecl *off_560B88)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (005229B0) -------------------------------------------------------- +void __fastcall std::codecvt::~codecvt(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560B88; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + *a1 = &unk_56098C; + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 522A15: variable 'lpfctx' is possibly undefined +// 560B88: using guessed type int (__cdecl *off_560B88)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00522A60) -------------------------------------------------------- +int __thiscall std::codecvt::codecvt(_DWORD *this, char a2, int a3) +{ + int result; // eax + + *this = &off_560BB4; + this[1] = a3 != 0; + result = std::locale::facet::_S_clone_c_locale(); + this[2] = result; + return result; +} +// 560BB4: using guessed type int (__cdecl *off_560BB4)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00522A90) -------------------------------------------------------- +void __thiscall std::codecvt::codecvt(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560BB4; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560BB4: using guessed type int (__cdecl *off_560BB4)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00522B40) -------------------------------------------------------- +void __fastcall std::codecvt::~codecvt(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560BB4; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + *a1 = &unk_5609B8; + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(a1); +} +// 522BA5: variable 'lpfctx' is possibly undefined +// 560BB4: using guessed type int (__cdecl *off_560BB4)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00522C20) -------------------------------------------------------- +void __fastcall std::codecvt::~codecvt(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560BB4; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + *a1 = &unk_5609B8; + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 522C85: variable 'lpfctx' is possibly undefined +// 560BB4: using guessed type int (__cdecl *off_560BB4)(int, int, int, int, int, struct _Unwind_Exception *lpuexcpt, int, int, int); + +//----- (00522CD0) -------------------------------------------------------- +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3) +{ + int result; // eax + + *this = &off_560BE0; + this[1] = a3 != 0; + result = std::locale::facet::_S_clone_c_locale(); + this[2] = result; + return result; +} +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (00522D00) -------------------------------------------------------- +void __thiscall std::collate::collate(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560BE0; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (00522DA0) -------------------------------------------------------- +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3) +{ + int result; // eax + + *this = &off_560BE0; + this[1] = a3 != 0; + result = std::locale::facet::_S_clone_c_locale(); + this[2] = result; + return result; +} +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (00522DD0) -------------------------------------------------------- +void __thiscall std::collate::collate(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560BE0; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (00522E70) -------------------------------------------------------- +void __fastcall std::collate::~collate(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_560BE0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 522EAE: variable 'lpfctx' is possibly undefined +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (00522ED0) -------------------------------------------------------- +void __fastcall std::collate::~collate(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560BE0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 522F0E: variable 'lpfctx' is possibly undefined +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (00522F30) -------------------------------------------------------- +void __fastcall std::collate::~collate(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560BE0; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 522F6E: variable 'lpfctx' is possibly undefined +// 560BE0: using guessed type int (*off_560BE0)(); + +//----- (00522F90) -------------------------------------------------------- +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3) +{ + int result; // eax + + *this = &off_560BFC; + this[1] = a3 != 0; + result = std::locale::facet::_S_clone_c_locale(); + this[2] = result; + return result; +} +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (00522FC0) -------------------------------------------------------- +void __thiscall std::collate::collate(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560BFC; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (00523060) -------------------------------------------------------- +int __thiscall std::collate::collate(_DWORD *this, char a2, int a3) +{ + int result; // eax + + *this = &off_560BFC; + this[1] = a3 != 0; + result = std::locale::facet::_S_clone_c_locale(); + this[2] = result; + return result; +} +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (00523090) -------------------------------------------------------- +void __thiscall std::collate::collate(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560BFC; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (00523130) -------------------------------------------------------- +void __fastcall std::collate::~collate(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_560BFC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 52316E: variable 'lpfctx' is possibly undefined +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (00523190) -------------------------------------------------------- +void __fastcall std::collate::~collate(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560BFC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 5231CE: variable 'lpfctx' is possibly undefined +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (005231F0) -------------------------------------------------------- +void __fastcall std::collate::~collate(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560BFC; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 52322E: variable 'lpfctx' is possibly undefined +// 560BFC: using guessed type int (*off_560BFC)(); + +//----- (00523250) -------------------------------------------------------- +BOOL __thiscall std::num_get>::num_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560C18; + result = a2 != 0; + this[1] = result; + return result; +} +// 560C18: using guessed type int (*off_560C18)(); + +//----- (00523270) -------------------------------------------------------- +BOOL __thiscall std::num_get>::num_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560C18; + result = a2 != 0; + this[1] = result; + return result; +} +// 560C18: using guessed type int (*off_560C18)(); + +//----- (00523290) -------------------------------------------------------- +void __fastcall std::num_get>::~num_get(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560C18; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52329C: variable 'Blocka' is possibly undefined +// 560C18: using guessed type int (*off_560C18)(); + +//----- (005232B0) -------------------------------------------------------- +void __cdecl std::num_get>::~num_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560C18; + std::locale::facet::~facet(a1); +} +// 5232B0: variable 'v1' is possibly undefined +// 560C18: using guessed type int (*off_560C18)(); + +//----- (005232C0) -------------------------------------------------------- +void __cdecl std::num_get>::~num_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560C18; + std::locale::facet::~facet(a1); +} +// 5232C0: variable 'v1' is possibly undefined +// 560C18: using guessed type int (*off_560C18)(); + +//----- (005232D0) -------------------------------------------------------- +BOOL __thiscall std::num_get>::num_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560C54; + result = a2 != 0; + this[1] = result; + return result; +} +// 560C54: using guessed type int (*off_560C54)(); + +//----- (005232F0) -------------------------------------------------------- +BOOL __thiscall std::num_get>::num_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560C54; + result = a2 != 0; + this[1] = result; + return result; +} +// 560C54: using guessed type int (*off_560C54)(); + +//----- (00523310) -------------------------------------------------------- +void __fastcall std::num_get>::~num_get(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560C54; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52331C: variable 'Blocka' is possibly undefined +// 560C54: using guessed type int (*off_560C54)(); + +//----- (00523330) -------------------------------------------------------- +void __cdecl std::num_get>::~num_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560C54; + std::locale::facet::~facet(a1); +} +// 523330: variable 'v1' is possibly undefined +// 560C54: using guessed type int (*off_560C54)(); + +//----- (00523340) -------------------------------------------------------- +void __cdecl std::num_get>::~num_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560C54; + std::locale::facet::~facet(a1); +} +// 523340: variable 'v1' is possibly undefined +// 560C54: using guessed type int (*off_560C54)(); + +//----- (00523350) -------------------------------------------------------- +BOOL __thiscall std::num_put>::num_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560C90; + result = a2 != 0; + this[1] = result; + return result; +} +// 560C90: using guessed type int (*off_560C90)(); + +//----- (00523370) -------------------------------------------------------- +BOOL __thiscall std::num_put>::num_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560C90; + result = a2 != 0; + this[1] = result; + return result; +} +// 560C90: using guessed type int (*off_560C90)(); + +//----- (00523390) -------------------------------------------------------- +void __fastcall std::num_put>::~num_put(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560C90; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52339C: variable 'Blocka' is possibly undefined +// 560C90: using guessed type int (*off_560C90)(); + +//----- (005233B0) -------------------------------------------------------- +void __cdecl std::num_put>::~num_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560C90; + std::locale::facet::~facet(a1); +} +// 5233B0: variable 'v1' is possibly undefined +// 560C90: using guessed type int (*off_560C90)(); + +//----- (005233C0) -------------------------------------------------------- +void __cdecl std::num_put>::~num_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560C90; + std::locale::facet::~facet(a1); +} +// 5233C0: variable 'v1' is possibly undefined +// 560C90: using guessed type int (*off_560C90)(); + +//----- (005233D0) -------------------------------------------------------- +BOOL __thiscall std::num_put>::num_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560CC0; + result = a2 != 0; + this[1] = result; + return result; +} +// 560CC0: using guessed type int (*off_560CC0)(); + +//----- (005233F0) -------------------------------------------------------- +BOOL __thiscall std::num_put>::num_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560CC0; + result = a2 != 0; + this[1] = result; + return result; +} +// 560CC0: using guessed type int (*off_560CC0)(); + +//----- (00523410) -------------------------------------------------------- +void __fastcall std::num_put>::~num_put(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560CC0; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52341C: variable 'Blocka' is possibly undefined +// 560CC0: using guessed type int (*off_560CC0)(); + +//----- (00523430) -------------------------------------------------------- +void __cdecl std::num_put>::~num_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560CC0; + std::locale::facet::~facet(a1); +} +// 523430: variable 'v1' is possibly undefined +// 560CC0: using guessed type int (*off_560CC0)(); + +//----- (00523440) -------------------------------------------------------- +void __cdecl std::num_put>::~num_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560CC0; + std::locale::facet::~facet(a1); +} +// 523440: variable 'v1' is possibly undefined +// 560CC0: using guessed type int (*off_560CC0)(); + +//----- (00523450) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::less,std::allocator>::_M_insert_unique( + _DWORD *this, + _DWORD *a2) +{ + int result; // eax + _DWORD *v4; // edx + _DWORD *v5; // edi + _DWORD *v6; // ebx + char v7; // [esp+1Fh] [ebp-19h] + + result = std::_Rb_tree,std::less,std::allocator>::_M_get_insert_unique_pos( + this, + (int)a2); + if ( v4 ) + { + v7 = 1; + v5 = v4; + if ( !result && v4 != this + 1 ) + v7 = std::operator<((int)a2, (int)(v4 + 4)); + v6 = operator new(0x28u); + std::string::basic_string(v6 + 4, a2); + std::_Rb_tree_insert_and_rebalance(v7, v6, v5, this + 1); + ++this[5]; + return (int)v6; + } + return result; +} +// 523469: variable 'v4' is possibly undefined + +//----- (005234E4) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::less,std::allocator>::_M_get_insert_unique_pos( + _DWORD *this, + int a2) +{ + char v2; // al + _DWORD *v3; // ebx + _DWORD *i; // esi + _DWORD *v5; // edx + int result; // eax + int v7; // esi + bool v8; // zf + _DWORD *v9; // [esp+1Ch] [ebp-1Ch] + + v2 = 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v3 = i; + v9 = this; + v2 = std::operator<(a2, (int)(i + 4)); + v5 = (_DWORD *)i[3]; + this = v9; + if ( v2 ) + v5 = (_DWORD *)i[2]; + } + if ( v2 ) + { + if ( (_DWORD *)this[3] == v3 ) + return 0; + v7 = std::_Rb_tree_decrement(v3); + } + else + { + v7 = (int)v3; + } + v8 = (unsigned __int8)std::operator<(v7 + 16, a2) == 0; + result = v7; + if ( !v8 ) + return 0; + return result; +} +// 523555: conditional instruction was optimized away because zf.1==0 + +//----- (00523564) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::less,std::allocator>::_M_get_insert_hint_unique_pos( + _DWORD *this, + _DWORD *a2, + int a3) +{ + int result; // eax + int v5; // [esp+1Ch] [ebp-1Ch] + int v6; // [esp+1Ch] [ebp-1Ch] + + if ( a2 == this + 1 ) + { + if ( this[5] && (unsigned __int8)std::operator<(this[4] + 16, a3) ) + return 0; + return std::_Rb_tree,std::less,std::allocator>::_M_get_insert_unique_pos( + this, + a3); + } + if ( !(unsigned __int8)std::operator<(a3, (int)(a2 + 4)) ) + { + if ( !(unsigned __int8)std::operator<((int)(a2 + 4), a3) ) + return (int)a2; + if ( (_DWORD *)this[4] == a2 ) + return 0; + v6 = std::_Rb_tree_increment((int)a2); + if ( (unsigned __int8)std::operator<(a3, v6 + 16) ) + { + if ( !a2[3] ) + return 0; + return v6; + } + return std::_Rb_tree,std::less,std::allocator>::_M_get_insert_unique_pos( + this, + a3); + } + result = this[3]; + if ( (_DWORD *)result == a2 ) + return result; + v5 = std::_Rb_tree_decrement(a2); + if ( !(unsigned __int8)std::operator<(v5 + 16, a3) ) + return std::_Rb_tree,std::less,std::allocator>::_M_get_insert_unique_pos( + this, + a3); + result = (int)a2; + if ( !*(_DWORD *)(v5 + 12) ) + return 0; + return result; +} + +//----- (00523660) -------------------------------------------------------- +void __fastcall std::_Rb_tree,std::less,std::allocator>::~_Rb_tree( + int a1) +{ + std::_Rb_tree,std::less,std::allocator>::_M_erase(*(_DWORD *)(a1 + 8)); +} + +//----- (00523668) -------------------------------------------------------- +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos( + _DWORD *this, + int a2) +{ + char v2; // al + _DWORD *v3; // ebx + _DWORD *i; // esi + _DWORD *v5; // edx + int result; // eax + int v7; // esi + bool v8; // zf + _DWORD *v9; // [esp+1Ch] [ebp-1Ch] + + v2 = 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v3 = i; + v9 = this; + v2 = std::operator<(a2, (int)(i + 4)); + v5 = (_DWORD *)i[3]; + this = v9; + if ( v2 ) + v5 = (_DWORD *)i[2]; + } + if ( v2 ) + { + if ( (_DWORD *)this[3] == v3 ) + return 0; + v7 = std::_Rb_tree_decrement(v3); + } + else + { + v7 = (int)v3; + } + v8 = (unsigned __int8)std::operator<(v7 + 16, a2) == 0; + result = v7; + if ( !v8 ) + return 0; + return result; +} +// 5236D9: conditional instruction was optimized away because zf.1==0 + +//----- (005236E8) -------------------------------------------------------- +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_hint_unique_pos( + _DWORD *this, + _DWORD *a2, + int a3) +{ + int result; // eax + _DWORD *v5; // edx + int *v6; // eax + int v7; // [esp+1Ch] [ebp-2Ch] + int v8[7]; // [esp+2Ch] [ebp-1Ch] BYREF + + if ( a2 == this + 1 ) + { + if ( this[5] && (unsigned __int8)std::operator<(this[4] + 16, a3) ) + return 0; + return std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos( + this, + a3); + } + if ( !(unsigned __int8)std::operator<(a3, (int)(a2 + 4)) ) + { + if ( !(unsigned __int8)std::operator<((int)(a2 + 4), a3) ) + return (int)a2; + v5 = (_DWORD *)this[4]; + v8[0] = (int)a2; + if ( v5 == a2 ) + return 0; + v6 = std::_Rb_tree_iterator>>::operator++(v8); + if ( (unsigned __int8)std::operator<(a3, *v6 + 16) ) + { + if ( !a2[3] ) + return 0; + return v8[0]; + } + return std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos( + this, + a3); + } + result = this[3]; + if ( (_DWORD *)result == a2 ) + return result; + v7 = std::_Rb_tree_decrement(a2); + if ( !(unsigned __int8)std::operator<(v7 + 16, a3) ) + return std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos( + this, + a3); + result = (int)a2; + if ( !*(_DWORD *)(v7 + 12) ) + return 0; + return result; +} +// 5236E8: using guessed type int var_1C[7]; + +//----- (005237E0) -------------------------------------------------------- +void __fastcall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::~_Rb_tree( + int a1) +{ + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(*(_DWORD *)(a1 + 8)); +} + +//----- (005237E8) -------------------------------------------------------- +_DWORD *__thiscall std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::lower_bound( + _DWORD *this, + int a2) +{ + _DWORD *v2; // esi + _DWORD *i; // ebx + char v4; // al + _DWORD *v5; // edx + + v2 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v4 = std::operator<((int)(i + 4), a2); + v5 = (_DWORD *)i[3]; + if ( !v4 ) + v5 = (_DWORD *)i[2]; + if ( !v4 ) + v2 = i; + } + return v2; +} + +//----- (00523828) -------------------------------------------------------- +_DWORD *__thiscall std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_insert_node( + _DWORD *this, + int a2, + _DWORD *a3, + _DWORD *a4) +{ + char v4; // al + _DWORD *v6; // ebx + _DWORD *result; // eax + + v4 = 1; + v6 = this + 1; + if ( !a2 && a3 != v6 ) + v4 = std::operator<((int)(a4 + 4), (int)(a3 + 4)); + std::_Rb_tree_insert_and_rebalance(v4, a4, a3, v6); + result = a4; + ++this[5]; + return result; +} + +//----- (00523884) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_get_insert_unique_pos( + _DWORD *this, + int a2) +{ + char v2; // al + _DWORD *v3; // ebx + _DWORD *i; // esi + _DWORD *v5; // edx + int result; // eax + int v7; // esi + bool v8; // zf + _DWORD *v9; // [esp+1Ch] [ebp-1Ch] + + v2 = 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v3 = i; + v9 = this; + v2 = std::operator<(a2, (int)(i + 4)); + v5 = (_DWORD *)i[3]; + this = v9; + if ( v2 ) + v5 = (_DWORD *)i[2]; + } + if ( v2 ) + { + if ( (_DWORD *)this[3] == v3 ) + return 0; + v7 = std::_Rb_tree_decrement(v3); + } + else + { + v7 = (int)v3; + } + v8 = (unsigned __int8)std::operator<(v7 + 16, a2) == 0; + result = v7; + if ( !v8 ) + return 0; + return result; +} +// 5238F5: conditional instruction was optimized away because zf.1==0 + +//----- (00523904) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_get_insert_hint_unique_pos( + _DWORD *this, + _DWORD *a2, + int a3) +{ + int result; // eax + int v5; // [esp+1Ch] [ebp-1Ch] + int v6; // [esp+1Ch] [ebp-1Ch] + + if ( a2 == this + 1 ) + { + if ( this[5] && (unsigned __int8)std::operator<(this[4] + 16, a3) ) + return 0; + return std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_get_insert_unique_pos( + this, + a3); + } + if ( !(unsigned __int8)std::operator<(a3, (int)(a2 + 4)) ) + { + if ( !(unsigned __int8)std::operator<((int)(a2 + 4), a3) ) + return (int)a2; + if ( (_DWORD *)this[4] == a2 ) + return 0; + v6 = std::_Rb_tree_increment((int)a2); + if ( (unsigned __int8)std::operator<(a3, v6 + 16) ) + { + if ( !a2[3] ) + return 0; + return v6; + } + return std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_get_insert_unique_pos( + this, + a3); + } + result = this[3]; + if ( (_DWORD *)result == a2 ) + return result; + v5 = std::_Rb_tree_decrement(a2); + if ( !(unsigned __int8)std::operator<(v5 + 16, a3) ) + return std::_Rb_tree,std::allocator>>>,std::_Select1st,std::allocator>>>>,std::less,std::allocator,std::allocator>>>>>::_M_get_insert_unique_pos( + this, + a3); + result = (int)a2; + if ( !*(_DWORD *)(v5 + 12) ) + return 0; + return result; +} + +//----- (00523A00) -------------------------------------------------------- +char *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_emplace_unique>( + _DWORD *this, + int a2) +{ + int v2; // edx + char v3; // al + struct _Unwind_Exception *v4; // edx + int v5; // eax + char v6; // al + struct _Unwind_Exception *v8; // [esp+14h] [ebp-54h] + void **v10; // [esp+1Ch] [ebp-4Ch] + char *Block; // [esp+20h] [ebp-48h] + struct _Unwind_Exception *v12; // [esp+24h] [ebp-44h] + int v13; // [esp+24h] [ebp-44h] + struct _Unwind_Exception *lpuexcpt; // [esp+28h] [ebp-40h] + + Block = (char *)operator new(0x30u); + v10 = (void **)(Block + 16); + std::string::basic_string(Block + 16, a2); + v2 = *(_DWORD *)(a2 + 28); + *((_DWORD *)Block + 10) = *(_DWORD *)(a2 + 24); + *((_DWORD *)Block + 11) = v2; + v12 = (struct _Unwind_Exception *)this[2]; + v8 = (struct _Unwind_Exception *)(this + 1); + lpuexcpt = (struct _Unwind_Exception *)(this + 1); + v3 = 1; + while ( v12 ) + { + v3 = std::operator<((int)v10, (int)v12 + 16); + v4 = (struct _Unwind_Exception *)*((_DWORD *)v12 + 3); + if ( v3 ) + v4 = (struct _Unwind_Exception *)*((_DWORD *)v12 + 2); + lpuexcpt = v12; + v12 = v4; + } + if ( v3 ) + { + if ( (struct _Unwind_Exception *)this[3] == lpuexcpt ) + goto LABEL_12; + v5 = std::_Rb_tree_decrement(lpuexcpt); + } + else + { + v5 = (int)lpuexcpt; + } + v13 = v5; + if ( !(unsigned __int8)std::operator<(v5 + 16, (int)v10) ) + { + std::string::_M_dispose(v10); + operator delete(Block); + return (char *)v13; + } +LABEL_12: + v6 = 1; + if ( v8 != lpuexcpt ) + v6 = std::operator<((int)v10, (int)lpuexcpt + 16); + std::_Rb_tree_insert_and_rebalance(v6, Block, lpuexcpt, v8); + ++this[5]; + return Block; +} + +//----- (00523BD0) -------------------------------------------------------- +void __fastcall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree( + int a1) +{ + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(*(_DWORD *)(a1 + 8)); +} + +//----- (00523BD8) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::equal_range( + _DWORD *this, + int a2) +{ + _DWORD *v2; // ebx + int i; // esi + int v4; // edi + char v5; // al + int j; // ecx + bool v7; // zf + int v8; // eax + int v10; // [esp+1Ch] [ebp-1Ch] + + v2 = this + 1; + for ( i = this[2]; ; i = v4 ) + { + if ( !i ) + return (int)v2; + if ( (unsigned __int8)std::operator<(i + 16, a2) ) + { + v4 = *(_DWORD *)(i + 12); + i = (int)v2; + goto LABEL_5; + } + v5 = std::operator<(a2, i + 16); + v4 = *(_DWORD *)(i + 8); + if ( !v5 ) + break; +LABEL_5: + v2 = (_DWORD *)i; + } + for ( j = *(_DWORD *)(i + 12); j; j = v8 ) + { + v10 = j; + v7 = (unsigned __int8)std::operator<(a2, j + 16) == 0; + v8 = *(_DWORD *)(v10 + 8); + if ( v7 ) + v8 = *(_DWORD *)(v10 + 12); + } + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_lower_bound( + v4, + i, + a2); +} + +//----- (00523C70) -------------------------------------------------------- +_DWORD *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_insert_node( + _DWORD *this, + int a2, + _DWORD *a3, + _DWORD *a4) +{ + char v4; // al + _DWORD *v6; // ebx + _DWORD *result; // eax + + v4 = 1; + v6 = this + 1; + if ( !a2 && a3 != v6 ) + v4 = std::operator<((int)(a4 + 4), (int)(a3 + 4)); + std::_Rb_tree_insert_and_rebalance(v4, a4, a3, v6); + result = a4; + ++this[5]; + return result; +} + +//----- (00523CCC) -------------------------------------------------------- +struct _Unwind_Exception *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_emplace_unique>( + _DWORD *this, + char **a2) +{ + _DWORD *v2; // edx + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-44h] + void **Block; // [esp+18h] [ebp-40h] + + Block = (void **)operator new(0x98u); + std::string::basic_string(Block + 4, *a2); + WXML::DOMLib::Token::Token(Block + 10, (int)(a2 + 1)); + lpuexcpt = (struct _Unwind_Exception *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + (int)(Block + 4)); + if ( v2 ) + return (struct _Unwind_Exception *)std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_insert_node( + this, + (int)lpuexcpt, + v2, + Block); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_drop_node(Block); + return lpuexcpt; +} +// 523D58: variable 'v2' is possibly undefined + +//----- (00523E00) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + _DWORD *this, + int a2) +{ + char v2; // al + _DWORD *v3; // ebx + _DWORD *i; // esi + _DWORD *v5; // edx + int result; // eax + int v7; // esi + bool v8; // zf + _DWORD *v9; // [esp+1Ch] [ebp-1Ch] + + v2 = 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v3 = i; + v9 = this; + v2 = std::operator<(a2, (int)(i + 4)); + v5 = (_DWORD *)i[3]; + this = v9; + if ( v2 ) + v5 = (_DWORD *)i[2]; + } + if ( v2 ) + { + if ( (_DWORD *)this[3] == v3 ) + return 0; + v7 = std::_Rb_tree_decrement(v3); + } + else + { + v7 = (int)v3; + } + v8 = (unsigned __int8)std::operator<(v7 + 16, a2) == 0; + result = v7; + if ( !v8 ) + return 0; + return result; +} +// 523E71: conditional instruction was optimized away because zf.1==0 + +//----- (00523E80) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + _DWORD *this, + _DWORD *a2, + int a3) +{ + int result; // eax + int v5; // [esp+1Ch] [ebp-1Ch] + int v6; // [esp+1Ch] [ebp-1Ch] + + if ( a2 == this + 1 ) + { + if ( this[5] && (unsigned __int8)std::operator<(this[4] + 16, a3) ) + return 0; + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + } + if ( !(unsigned __int8)std::operator<(a3, (int)(a2 + 4)) ) + { + if ( !(unsigned __int8)std::operator<((int)(a2 + 4), a3) ) + return (int)a2; + if ( (_DWORD *)this[4] == a2 ) + return 0; + v6 = std::_Rb_tree_increment((int)a2); + if ( (unsigned __int8)std::operator<(a3, v6 + 16) ) + { + if ( !a2[3] ) + return 0; + return v6; + } + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + } + result = this[3]; + if ( (_DWORD *)result == a2 ) + return result; + v5 = std::_Rb_tree_decrement(a2); + if ( !(unsigned __int8)std::operator<(v5 + 16, a3) ) + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + result = (int)a2; + if ( !*(_DWORD *)(v5 + 12) ) + return 0; + return result; +} + +//----- (00523F7C) -------------------------------------------------------- +_DWORD *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::find( + _DWORD *this, + int a2) +{ + _DWORD *v2; // esi + _DWORD *v3; // ebx + _DWORD *i; // edi + char v5; // al + _DWORD *v6; // edx + + v2 = this + 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v6 ) + { + v5 = std::operator<((int)(i + 4), a2); + v6 = (_DWORD *)i[3]; + if ( !v5 ) + v6 = (_DWORD *)i[2]; + if ( !v5 ) + v3 = i; + } + if ( v2 != v3 && (unsigned __int8)std::operator<(a2, (int)(v3 + 4)) ) + return v2; + return v3; +} + +//----- (00523FDC) -------------------------------------------------------- +_DWORD *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::lower_bound( + _DWORD *this, + int a2) +{ + _DWORD *v2; // esi + _DWORD *i; // ebx + char v4; // al + _DWORD *v5; // edx + + v2 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v4 = std::operator<((int)(i + 4), a2); + v5 = (_DWORD *)i[3]; + if ( !v4 ) + v5 = (_DWORD *)i[2]; + if ( !v4 ) + v2 = i; + } + return v2; +} + +//----- (0052401C) -------------------------------------------------------- +_DWORD *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_insert_node( + _DWORD *this, + int a2, + _DWORD *a3, + _DWORD *a4) +{ + char v4; // al + _DWORD *v6; // ebx + _DWORD *result; // eax + + v4 = 1; + v6 = this + 1; + if ( !a2 && a3 != v6 ) + v4 = std::operator<((int)(a4 + 4), (int)(a3 + 4)); + std::_Rb_tree_insert_and_rebalance(v4, a4, a3, v6); + result = a4; + ++this[5]; + return result; +} + +//----- (00524078) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + _DWORD *this, + int a2) +{ + char v2; // al + _DWORD *v3; // ebx + _DWORD *i; // esi + _DWORD *v5; // edx + int result; // eax + int v7; // esi + bool v8; // zf + _DWORD *v9; // [esp+1Ch] [ebp-1Ch] + + v2 = 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v3 = i; + v9 = this; + v2 = std::operator<(a2, (int)(i + 4)); + v5 = (_DWORD *)i[3]; + this = v9; + if ( v2 ) + v5 = (_DWORD *)i[2]; + } + if ( v2 ) + { + if ( (_DWORD *)this[3] == v3 ) + return 0; + v7 = std::_Rb_tree_decrement(v3); + } + else + { + v7 = (int)v3; + } + v8 = (unsigned __int8)std::operator<(v7 + 16, a2) == 0; + result = v7; + if ( !v8 ) + return 0; + return result; +} +// 5240E9: conditional instruction was optimized away because zf.1==0 + +//----- (005240F8) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + _DWORD *this, + _DWORD *a2, + int a3) +{ + int result; // eax + int v5; // [esp+1Ch] [ebp-1Ch] + int v6; // [esp+1Ch] [ebp-1Ch] + + if ( a2 == this + 1 ) + { + if ( this[5] && (unsigned __int8)std::operator<(this[4] + 16, a3) ) + return 0; + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + } + if ( !(unsigned __int8)std::operator<(a3, (int)(a2 + 4)) ) + { + if ( !(unsigned __int8)std::operator<((int)(a2 + 4), a3) ) + return (int)a2; + if ( (_DWORD *)this[4] == a2 ) + return 0; + v6 = std::_Rb_tree_increment((int)a2); + if ( (unsigned __int8)std::operator<(a3, v6 + 16) ) + { + if ( !a2[3] ) + return 0; + return v6; + } + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + } + result = this[3]; + if ( (_DWORD *)result == a2 ) + return result; + v5 = std::_Rb_tree_decrement(a2); + if ( !(unsigned __int8)std::operator<(v5 + 16, a3) ) + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + result = (int)a2; + if ( !*(_DWORD *)(v5 + 12) ) + return 0; + return result; +} + +//----- (005241F4) -------------------------------------------------------- +void __fastcall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree( + int a1) +{ + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(*(_DWORD *)(a1 + 8)); +} + +//----- (005241FC) -------------------------------------------------------- +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos( + _DWORD *this, + int a2) +{ + char v2; // al + _DWORD *v3; // ebx + _DWORD *i; // esi + _DWORD *v5; // edx + int result; // eax + int v7; // esi + bool v8; // zf + _DWORD *v9; // [esp+1Ch] [ebp-1Ch] + + v2 = 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v3 = i; + v9 = this; + v2 = std::operator<(a2, (int)(i + 4)); + v5 = (_DWORD *)i[3]; + this = v9; + if ( v2 ) + v5 = (_DWORD *)i[2]; + } + if ( v2 ) + { + if ( (_DWORD *)this[3] == v3 ) + return 0; + v7 = std::_Rb_tree_decrement(v3); + } + else + { + v7 = (int)v3; + } + v8 = (unsigned __int8)std::operator<(v7 + 16, a2) == 0; + result = v7; + if ( !v8 ) + return 0; + return result; +} +// 52426D: conditional instruction was optimized away because zf.1==0 + +//----- (0052427C) -------------------------------------------------------- +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_hint_unique_pos( + _DWORD *this, + _DWORD *a2, + int a3) +{ + int result; // eax + int v5; // [esp+1Ch] [ebp-1Ch] + int v6; // [esp+1Ch] [ebp-1Ch] + + if ( a2 == this + 1 ) + { + if ( this[5] && (unsigned __int8)std::operator<(this[4] + 16, a3) ) + return 0; + return std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos( + this, + a3); + } + if ( !(unsigned __int8)std::operator<(a3, (int)(a2 + 4)) ) + { + if ( !(unsigned __int8)std::operator<((int)(a2 + 4), a3) ) + return (int)a2; + if ( (_DWORD *)this[4] == a2 ) + return 0; + v6 = std::_Rb_tree_increment((int)a2); + if ( (unsigned __int8)std::operator<(a3, v6 + 16) ) + { + if ( !a2[3] ) + return 0; + return v6; + } + return std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos( + this, + a3); + } + result = this[3]; + if ( (_DWORD *)result == a2 ) + return result; + v5 = std::_Rb_tree_decrement(a2); + if ( !(unsigned __int8)std::operator<(v5 + 16, a3) ) + return std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos( + this, + a3); + result = (int)a2; + if ( !*(_DWORD *)(v5 + 12) ) + return 0; + return result; +} + +//----- (00524378) -------------------------------------------------------- +void __fastcall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::~_Rb_tree( + int a1) +{ + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(*(_DWORD *)(a1 + 8)); +} + +//----- (00524380) -------------------------------------------------------- +_DWORD *__thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::lower_bound( + _DWORD *this, + int a2) +{ + _DWORD *v2; // esi + _DWORD *i; // ebx + char v4; // al + _DWORD *v5; // edx + + v2 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v4 = std::operator<((int)(i + 4), a2); + v5 = (_DWORD *)i[3]; + if ( !v4 ) + v5 = (_DWORD *)i[2]; + if ( !v4 ) + v2 = i; + } + return v2; +} + +//----- (005243C0) -------------------------------------------------------- +_DWORD *__thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_insert_node( + _DWORD *this, + int a2, + _DWORD *a3, + _DWORD *a4) +{ + char v4; // al + _DWORD *v6; // ebx + _DWORD *result; // eax + + v4 = 1; + v6 = this + 1; + if ( !a2 && a3 != v6 ) + v4 = std::operator<((int)(a4 + 4), (int)(a3 + 4)); + std::_Rb_tree_insert_and_rebalance(v4, a4, a3, v6); + result = a4; + ++this[5]; + return result; +} + +//----- (0052441C) -------------------------------------------------------- +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos( + _DWORD *this, + int a2) +{ + char v2; // al + _DWORD *v3; // ebx + _DWORD *i; // esi + _DWORD *v5; // edx + int result; // eax + int v7; // esi + bool v8; // zf + _DWORD *v9; // [esp+1Ch] [ebp-1Ch] + + v2 = 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v3 = i; + v9 = this; + v2 = std::operator<(a2, (int)(i + 4)); + v5 = (_DWORD *)i[3]; + this = v9; + if ( v2 ) + v5 = (_DWORD *)i[2]; + } + if ( v2 ) + { + if ( (_DWORD *)this[3] == v3 ) + return 0; + v7 = std::_Rb_tree_decrement(v3); + } + else + { + v7 = (int)v3; + } + v8 = (unsigned __int8)std::operator<(v7 + 16, a2) == 0; + result = v7; + if ( !v8 ) + return 0; + return result; +} +// 52448D: conditional instruction was optimized away because zf.1==0 + +//----- (0052449C) -------------------------------------------------------- +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_hint_unique_pos( + _DWORD *this, + _DWORD *a2, + int a3) +{ + int result; // eax + int v5; // [esp+1Ch] [ebp-1Ch] + int v6; // [esp+1Ch] [ebp-1Ch] + + if ( a2 == this + 1 ) + { + if ( this[5] && (unsigned __int8)std::operator<(this[4] + 16, a3) ) + return 0; + return std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos( + this, + a3); + } + if ( !(unsigned __int8)std::operator<(a3, (int)(a2 + 4)) ) + { + if ( !(unsigned __int8)std::operator<((int)(a2 + 4), a3) ) + return (int)a2; + if ( (_DWORD *)this[4] == a2 ) + return 0; + v6 = std::_Rb_tree_increment((int)a2); + if ( (unsigned __int8)std::operator<(a3, v6 + 16) ) + { + if ( !a2[3] ) + return 0; + return v6; + } + return std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos( + this, + a3); + } + result = this[3]; + if ( (_DWORD *)result == a2 ) + return result; + v5 = std::_Rb_tree_decrement(a2); + if ( !(unsigned __int8)std::operator<(v5 + 16, a3) ) + return std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_unique_pos( + this, + a3); + result = (int)a2; + if ( !*(_DWORD *)(v5 + 12) ) + return 0; + return result; +} + +//----- (00524598) -------------------------------------------------------- +int __thiscall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_Rb_tree( + _DWORD *this, + int a2) +{ + int result; // eax + int v4; // edx + int v5; // ecx + int v6; // edx + int v7; // ecx + int v8; // edx + + this[2] = 0; + result = *(_DWORD *)(a2 + 8); + this[1] = 0; + this[3] = this + 1; + this[4] = this + 1; + this[5] = 0; + if ( result ) + { + result = std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_copy>,std::_Select1st>>,std::less,std::allocator>>>::_Alloc_node>( + result, + (int)(this + 1)); + v4 = result; + do + { + v5 = v4; + v4 = *(_DWORD *)(v4 + 8); + } + while ( v4 ); + this[3] = v5; + v6 = result; + do + { + v7 = v6; + v6 = *(_DWORD *)(v6 + 12); + } + while ( v6 ); + v8 = *(_DWORD *)(a2 + 20); + this[4] = v7; + this[2] = result; + this[5] = v8; + } + return result; +} + +//----- (005245F8) -------------------------------------------------------- +void __fastcall std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::~_Rb_tree( + int a1) +{ + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_erase(*(_DWORD *)(a1 + 8)); +} + +//----- (00524600) -------------------------------------------------------- +_DWORD *__thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_insert_node( + _DWORD *this, + int a2, + _DWORD *a3, + _DWORD *a4) +{ + char v4; // al + _DWORD *v6; // ebx + _DWORD *result; // eax + + v4 = 1; + v6 = this + 1; + if ( !a2 && a3 != v6 ) + v4 = std::operator<((int)(a4 + 4), (int)(a3 + 4)); + std::_Rb_tree_insert_and_rebalance(v4, a4, a3, v6); + result = a4; + ++this[5]; + return result; +} + +//----- (0052465C) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + _DWORD *this, + int a2) +{ + char v2; // al + _DWORD *v3; // ebx + _DWORD *i; // esi + _DWORD *v5; // edx + int result; // eax + int v7; // esi + bool v8; // zf + _DWORD *v9; // [esp+1Ch] [ebp-1Ch] + + v2 = 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v3 = i; + v9 = this; + v2 = std::operator<(a2, (int)(i + 4)); + v5 = (_DWORD *)i[3]; + this = v9; + if ( v2 ) + v5 = (_DWORD *)i[2]; + } + if ( v2 ) + { + if ( (_DWORD *)this[3] == v3 ) + return 0; + v7 = std::_Rb_tree_decrement(v3); + } + else + { + v7 = (int)v3; + } + v8 = (unsigned __int8)std::operator<(v7 + 16, a2) == 0; + result = v7; + if ( !v8 ) + return 0; + return result; +} +// 5246CD: conditional instruction was optimized away because zf.1==0 + +//----- (005246DC) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + _DWORD *this, + _DWORD *a2, + int a3) +{ + int result; // eax + int v5; // [esp+1Ch] [ebp-1Ch] + int v6; // [esp+1Ch] [ebp-1Ch] + + if ( a2 == this + 1 ) + { + if ( this[5] && (unsigned __int8)std::operator<(this[4] + 16, a3) ) + return 0; + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + } + if ( !(unsigned __int8)std::operator<(a3, (int)(a2 + 4)) ) + { + if ( !(unsigned __int8)std::operator<((int)(a2 + 4), a3) ) + return (int)a2; + if ( (_DWORD *)this[4] == a2 ) + return 0; + v6 = std::_Rb_tree_increment((int)a2); + if ( (unsigned __int8)std::operator<(a3, v6 + 16) ) + { + if ( !a2[3] ) + return 0; + return v6; + } + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + } + result = this[3]; + if ( (_DWORD *)result == a2 ) + return result; + v5 = std::_Rb_tree_decrement(a2); + if ( !(unsigned __int8)std::operator<(v5 + 16, a3) ) + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + result = (int)a2; + if ( !*(_DWORD *)(v5 + 12) ) + return 0; + return result; +} + +//----- (005247D8) -------------------------------------------------------- +void __fastcall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree( + int a1) +{ + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(*(_DWORD *)(a1 + 8)); +} + +//----- (005247E0) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + _DWORD *this, + int a2) +{ + char v2; // al + _DWORD *v3; // ebx + _DWORD *i; // esi + _DWORD *v5; // edx + int result; // eax + int v7; // esi + bool v8; // zf + _DWORD *v9; // [esp+1Ch] [ebp-1Ch] + + v2 = 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v3 = i; + v9 = this; + v2 = std::operator<(a2, (int)(i + 4)); + v5 = (_DWORD *)i[3]; + this = v9; + if ( v2 ) + v5 = (_DWORD *)i[2]; + } + if ( v2 ) + { + if ( (_DWORD *)this[3] == v3 ) + return 0; + v7 = std::_Rb_tree_decrement(v3); + } + else + { + v7 = (int)v3; + } + v8 = (unsigned __int8)std::operator<(v7 + 16, a2) == 0; + result = v7; + if ( !v8 ) + return 0; + return result; +} +// 524851: conditional instruction was optimized away because zf.1==0 + +//----- (00524860) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + _DWORD *this, + _DWORD *a2, + int a3) +{ + int result; // eax + int v5; // [esp+1Ch] [ebp-1Ch] + int v6; // [esp+1Ch] [ebp-1Ch] + + if ( a2 == this + 1 ) + { + if ( this[5] && (unsigned __int8)std::operator<(this[4] + 16, a3) ) + return 0; + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + } + if ( !(unsigned __int8)std::operator<(a3, (int)(a2 + 4)) ) + { + if ( !(unsigned __int8)std::operator<((int)(a2 + 4), a3) ) + return (int)a2; + if ( (_DWORD *)this[4] == a2 ) + return 0; + v6 = std::_Rb_tree_increment((int)a2); + if ( (unsigned __int8)std::operator<(a3, v6 + 16) ) + { + if ( !a2[3] ) + return 0; + return v6; + } + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + } + result = this[3]; + if ( (_DWORD *)result == a2 ) + return result; + v5 = std::_Rb_tree_decrement(a2); + if ( !(unsigned __int8)std::operator<(v5 + 16, a3) ) + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + result = (int)a2; + if ( !*(_DWORD *)(v5 + 12) ) + return 0; + return result; +} + +//----- (0052495C) -------------------------------------------------------- +void __fastcall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree( + int a1) +{ + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(*(_DWORD *)(a1 + 8)); +} + +//----- (00524964) -------------------------------------------------------- +int __thiscall std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_get_insert_unique_pos( + _DWORD *this, + _DWORD *a2) +{ + bool v2; // dl + _DWORD *v3; // ebx + _DWORD *i; // eax + _DWORD *v5; // edi + int result; // eax + + v2 = 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v5 ) + { + v3 = i; + v5 = (_DWORD *)i[3]; + if ( i[4] > *a2 ) + v5 = (_DWORD *)i[2]; + v2 = i[4] > *a2; + } + if ( v2 ) + { + if ( (_DWORD *)this[3] == v3 ) + return 0; + result = std::_Rb_tree_decrement(v3); + } + else + { + result = (int)v3; + } + if ( *(_DWORD *)(result + 16) < *a2 ) + return 0; + return result; +} + +//----- (005249C4) -------------------------------------------------------- +int __thiscall std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_get_insert_hint_unique_pos( + _DWORD *this, + _DWORD *a2, + int *a3) +{ + int v3; // edi + int result; // eax + int v5; // eax + int v6; // edx + _DWORD *v7; // [esp+1Ch] [ebp-1Ch] + _DWORD *v8; // [esp+1Ch] [ebp-1Ch] + + if ( a2 == this + 1 ) + { + if ( this[5] && *a3 > *(_DWORD *)(this[4] + 16) ) + return 0; + return std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_get_insert_unique_pos( + this, + a3); + } + v3 = *a3; + if ( a2[4] <= *a3 ) + { + if ( a2[4] >= *a3 ) + return (int)a2; + if ( (_DWORD *)this[4] == a2 ) + return 0; + v8 = this; + result = std::_Rb_tree_increment((int)a2); + this = v8; + if ( v3 < *(_DWORD *)(result + 16) ) + { + if ( !a2[3] ) + return 0; + return result; + } + return std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_get_insert_unique_pos( + this, + a3); + } + result = this[3]; + if ( (_DWORD *)result == a2 ) + return result; + v7 = this; + v5 = std::_Rb_tree_decrement(a2); + this = v7; + v6 = v5; + if ( *(_DWORD *)(v5 + 16) >= v3 ) + return std::_Rb_tree>>,std::_Select1st>>>,std::less,std::allocator>>>>::_M_get_insert_unique_pos( + this, + a3); + result = (int)a2; + if ( !*(_DWORD *)(v6 + 12) ) + return 0; + return result; +} + +//----- (00524A64) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + _DWORD *this, + unsigned int *a2) +{ + bool v2; // dl + _DWORD *v3; // ebx + _DWORD *i; // eax + unsigned int v5; // ebx + _DWORD *v6; // edi + bool v7; // cc + int result; // eax + + v2 = 1; + v3 = this + 1; + for ( i = (_DWORD *)this[2]; i; i = v6 ) + { + v5 = i[4]; + v6 = (_DWORD *)i[3]; + v2 = *a2 < v5; + v7 = v5 <= *a2; + v3 = i; + if ( !v7 ) + v6 = (_DWORD *)i[2]; + } + if ( v2 ) + { + if ( (_DWORD *)this[3] == v3 ) + return 0; + result = std::_Rb_tree_decrement(v3); + } + else + { + result = (int)v3; + } + if ( *(_DWORD *)(result + 16) < *a2 ) + return 0; + return result; +} + +//----- (00524AC8) -------------------------------------------------------- +int __thiscall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_hint_unique_pos( + _DWORD *this, + _DWORD *a2, + unsigned int *a3) +{ + unsigned int v3; // edi + int result; // eax + int v5; // eax + int v6; // edx + _DWORD *v7; // [esp+1Ch] [ebp-1Ch] + _DWORD *v8; // [esp+1Ch] [ebp-1Ch] + + if ( a2 == this + 1 ) + { + if ( this[5] && *a3 > *(_DWORD *)(this[4] + 16) ) + return 0; + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + } + v3 = *a3; + if ( a2[4] <= *a3 ) + { + if ( a2[4] >= *a3 ) + return (int)a2; + if ( (_DWORD *)this[4] == a2 ) + return 0; + v8 = this; + result = std::_Rb_tree_increment((int)a2); + this = v8; + if ( v3 < *(_DWORD *)(result + 16) ) + { + if ( !a2[3] ) + return 0; + return result; + } + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + } + result = this[3]; + if ( (_DWORD *)result == a2 ) + return result; + v7 = this; + v5 = std::_Rb_tree_decrement(a2); + this = v7; + v6 = v5; + if ( *(_DWORD *)(v5 + 16) >= v3 ) + return std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_get_insert_unique_pos( + this, + a3); + result = (int)a2; + if ( !*(_DWORD *)(v6 + 12) ) + return 0; + return result; +} + +//----- (00524B68) -------------------------------------------------------- +void __fastcall std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree( + int a1) +{ + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::_M_erase(*(_DWORD *)(a1 + 8)); +} + +//----- (00524B70) -------------------------------------------------------- +void __fastcall std::bad_cast::~bad_cast(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_560CF0; + std::exception::~exception(Block); + operator delete(a1); +} +// 524B7C: variable 'Block' is possibly undefined +// 560CF0: using guessed type void (__cdecl *off_560CF0)(std::bad_cast *__hidden this); + +//----- (00524BA0) -------------------------------------------------------- +void __cdecl std::bad_cast::~bad_cast(std::exception *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560CF0; + std::exception::~exception(a1); +} +// 524BA0: variable 'v1' is possibly undefined +// 560CF0: using guessed type void (__cdecl *off_560CF0)(std::bad_cast *__hidden this); + +//----- (00524BB0) -------------------------------------------------------- +int *__userpurge std::ios_base::_M_grow_words@(_DWORD *a1@, int this, char a3, bool a4) +{ + char *v4; // eax + _DWORD *v5; // eax + int v6; // edx + int v7; // esi + int *v8; // ebx + int *v9; // eax + int v10; // edi + int v11; // ebp + char *v12; // edx + int v13; // eax + int *v17; // [esp+1Ch] [ebp-60h] + int v18; // [esp+20h] [ebp-5Ch] + int v19; // [esp+24h] [ebp-58h] + int v20; // [esp+28h] [ebp-54h] + + if ( (unsigned int)this > 0x7FFFFFFE ) + { + v12 = "ios_base::_M_grow_words is not valid"; + } + else + { + v17 = a1 + 9; + if ( this <= 7 ) + { + v18 = 8; +LABEL_21: + a1[26] = v17; + a1[25] = v18; + return &v17[2 * this]; + } + v4 = (char *)(this + 1); + v18 = this + 1; + if ( this + 1 > 0xFFFFFFF ) + __cxa_throw_bad_array_new_length(); + v20 = 8 * (_DWORD)v4; + v19 = operator new[](8 * (_DWORD)v4); + if ( v19 ) + { + v5 = (_DWORD *)v19; + v6 = v19; + do + { + *v5 = 0; + v5 += 2; + *(v5 - 1) = 0; + } + while ( (_DWORD *)(v19 + v20) != v5 ); + v7 = a1[25]; + v8 = (int *)a1[26]; + v9 = v8; + if ( v7 > 0 ) + { + do + { + v10 = *v9; + v11 = v9[1]; + v9 += 2; + v6 += 8; + *(_DWORD *)(v6 - 8) = v10; + *(_DWORD *)(v6 - 4) = v11; + } + while ( &v8[2 * v7] != v9 ); + } + if ( v17 != v8 && v8 ) + operator delete[](v8); + v17 = (int *)v19; + goto LABEL_21; + } + v12 = "ios_base::_M_grow_words allocation failed"; + } + v13 = a1[5] | 1; + a1[5] = v13; + if ( (a1[4] & v13) != 0 ) + std::__throw_ios_failure(v12); + if ( a3 ) + a1[8] = 0; + else + a1[7] = 0; + return a1 + 7; +} + +//----- (00524DB0) -------------------------------------------------------- +int __cdecl std::ios_base::sync_with_stdio(std::ios_base *this) +{ + FILE *v3; // eax + FILE *v4; // eax + FILE *v5; // eax + FILE *v6; // eax + FILE *v7; // eax + FILE *v8; // eax + FILE *(__cdecl *v9)(unsigned int); // [esp+14h] [ebp-54h] + unsigned __int8 lpuexcpt; // [esp+18h] [ebp-50h] + + lpuexcpt = std::ios_base::Init::_S_synced_with_stdio; + if ( (_BYTE)this != 1 && std::ios_base::Init::_S_synced_with_stdio ) + { + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd(&std::ios_base::Init::_S_refcount, 1u) ) + goto LABEL_6; + } + else if ( std::ios_base::Init::_S_refcount++ ) + { +LABEL_6: + std::ios_base::Init::_S_synced_with_stdio = 0; + __gnu_internal::buf_cout_sync = &off_560424; + std::locale::~locale((_DWORD **)&dword_53F17C); + __gnu_internal::buf_cin_sync = &off_560424; + std::locale::~locale((_DWORD **)&dword_53F0FC); + __gnu_internal::buf_cerr_sync = &off_560424; + std::locale::~locale((_DWORD **)&dword_53F13C); + __gnu_internal::buf_wcout_sync = &off_560464; + std::locale::~locale((_DWORD **)&dword_53F23C); + __gnu_internal::buf_wcin_sync = &off_560464; + std::locale::~locale((_DWORD **)&dword_53F1BC); + __gnu_internal::buf_wcerr_sync = &off_560464; + std::locale::~locale((_DWORD **)&dword_53F1FC); + v9 = ___acrt_iob_func; + v3 = ___acrt_iob_func(1u); + __gnu_cxx::stdio_filebuf::stdio_filebuf(__gnu_internal::buf_cout, v3, 16, 512); + v4 = v9(0); + __gnu_cxx::stdio_filebuf::stdio_filebuf(__gnu_internal::buf_cin, v4, 8, 512); + v5 = v9(2u); + __gnu_cxx::stdio_filebuf::stdio_filebuf(__gnu_internal::buf_cerr, v5, 16, 512); + std::ios::rdbuf(dword_53F9A4, (int)__gnu_internal::buf_cout); + std::ios::rdbuf(dword_53F7C8, (int)__gnu_internal::buf_cin); + std::ios::rdbuf(&dword_53F864, (int)__gnu_internal::buf_cerr); + std::ios::rdbuf(dword_53F904, (int)__gnu_internal::buf_cerr); + v6 = v9(1u); + __gnu_cxx::stdio_filebuf::stdio_filebuf(__gnu_internal::buf_wcout, v6, 16, 512); + v7 = v9(0); + __gnu_cxx::stdio_filebuf::stdio_filebuf(__gnu_internal::buf_wcin, v7, 8, 512); + v8 = v9(2u); + __gnu_cxx::stdio_filebuf::stdio_filebuf(__gnu_internal::buf_wcerr, v8, 16, 512); + std::wios::rdbuf(dword_53FC24, (int)__gnu_internal::buf_wcout); + std::wios::rdbuf(dword_53FA48, (int)__gnu_internal::buf_wcin); + std::wios::rdbuf(&dword_53FAE4, (int)__gnu_internal::buf_wcerr); + std::wios::rdbuf(dword_53FB84, (int)__gnu_internal::buf_wcerr); + std::ios_base::Init::~Init(); + return lpuexcpt; + } + std::ios_base::Init::Init(); + goto LABEL_6; + } + return lpuexcpt; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F0FC: using guessed type _DWORD dword_53F0FC; +// 53F13C: using guessed type _DWORD dword_53F13C; +// 53F17C: using guessed type _DWORD dword_53F17C; +// 53F1BC: using guessed type _DWORD dword_53F1BC; +// 53F1FC: using guessed type _DWORD dword_53F1FC; +// 53F23C: using guessed type _DWORD dword_53F23C; +// 53F778: using guessed type int std::ios_base::Init::_S_refcount; +// 53F77C: using guessed type char std::ios_base::Init::_S_synced_with_stdio; +// 53F7C8: using guessed type int dword_53F7C8[28]; +// 53F864: using guessed type int dword_53F864; +// 53F904: using guessed type int dword_53F904[28]; +// 53F9A4: using guessed type int dword_53F9A4[28]; +// 53FA48: using guessed type int dword_53FA48[28]; +// 53FAE4: using guessed type int dword_53FAE4; +// 53FB84: using guessed type int dword_53FB84[28]; +// 53FC24: using guessed type int dword_53FC24[28]; +// 560424: using guessed type int (*off_560424)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (005250D0) -------------------------------------------------------- +void __thiscall std::ios_base::_M_call_callbacks(_DWORD *this, int a2) +{ + int **i; // [esp+14h] [ebp-58h] + + for ( i = (int **)this[6]; i; i = (int **)*i ) + ((void (__cdecl *)(int, _DWORD *, int *))i[1])(a2, this, i[2]); +} + +//----- (005251C0) -------------------------------------------------------- +_DWORD *__thiscall std::ios_base::register_callback(_DWORD *this, int a2, int a3) +{ + _DWORD *result; // eax + int v5; // edx + + result = operator new(0x10u); + v5 = this[6]; + result[3] = 0; + *result = v5; + this[6] = result; + result[1] = a2; + result[2] = a3; + return result; +} + +//----- (00525200) -------------------------------------------------------- +void __fastcall std::ios_base::_M_dispose_callbacks(int a1) +{ + volatile signed __int32 *Block; // eax + int v3; // edx + volatile signed __int32 *v4; // esi + + Block = *(volatile signed __int32 **)(a1 + 24); + if ( Block ) + { + while ( 1 ) + { + if ( _CRT_MT ) + { + if ( _InterlockedExchangeAdd(Block + 3, 0xFFFFFFFF) ) + break; + } + else + { + v3 = *((_DWORD *)Block + 3); + *((_DWORD *)Block + 3) = v3 - 1; + if ( v3 ) + break; + } + v4 = (volatile signed __int32 *)*Block; + operator delete((void *)Block); + if ( !v4 ) + break; + Block = v4; + } + } + *(_DWORD *)(a1 + 24) = 0; +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (00525260) -------------------------------------------------------- +void std::ios_base::Init::Init() +{ + if ( !_CRT_MT ) + { + if ( std::ios_base::Init::_S_refcount++ ) + return; +LABEL_5: + std::ios_base::Init::Init(); + return; + } + if ( !_InterlockedExchangeAdd(&std::ios_base::Init::_S_refcount, 1u) ) + goto LABEL_5; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F778: using guessed type int std::ios_base::Init::_S_refcount; + +//----- (005252A0) -------------------------------------------------------- +void std::ios_base::Init::Init() +{ + FILE *v0; // eax + int v1; // eax + int v2; // eax + int v3; // eax + int v4; // eax + int v5; // eax + int v6; // [esp+14h] [ebp-44h] + int v7; // [esp+14h] [ebp-44h] + int v8; // [esp+14h] [ebp-44h] + int v9; // [esp+14h] [ebp-44h] + int v10; // [esp+14h] [ebp-44h] + FILE *(__cdecl *lpuexcpt)(unsigned int); // [esp+18h] [ebp-40h] + struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-40h] + + std::ios_base::Init::_S_synced_with_stdio = 1; + lpuexcpt = ___acrt_iob_func; + v0 = ___acrt_iob_func(1u); + __gnu_internal::buf_cout_sync = &off_560424; + v6 = (int)v0; + dword_53F164 = 0; + dword_53F168 = 0; + dword_53F16C = 0; + dword_53F170 = 0; + dword_53F174 = 0; + dword_53F178 = 0; + std::locale::locale(&dword_53F17C); + __gnu_internal::buf_cout_sync = &off_55F2B4; + dword_53F180 = v6; + dword_53F184 = -1; + v1 = (int)lpuexcpt(0); + __gnu_internal::buf_cin_sync = &off_560424; + v7 = v1; + dword_53F0E4 = 0; + dword_53F0E8 = 0; + dword_53F0EC = 0; + dword_53F0F0 = 0; + dword_53F0F4 = 0; + dword_53F0F8 = 0; + std::locale::locale(&dword_53F0FC); + __gnu_internal::buf_cin_sync = &off_55F2B4; + dword_53F100 = v7; + dword_53F104 = -1; + v2 = (int)lpuexcpt(2u); + __gnu_internal::buf_cerr_sync = &off_560424; + v8 = v2; + dword_53F124 = 0; + dword_53F128 = 0; + dword_53F12C = 0; + dword_53F130 = 0; + dword_53F134 = 0; + dword_53F138 = 0; + std::locale::locale(&dword_53F13C); + __gnu_internal::buf_cerr_sync = &off_55F2B4; + dword_53F144 = -1; + dword_53F140 = v8; + std::ios_base::ios_base(dword_53F9A4); + dword_53FA14 = 0; + word_53FA18 = 0; + dword_53FA1C = 0; + dword_53FA20 = 0; + dword_53FA24 = 0; + dword_53FA28 = 0; + std::cout = (int)&off_55FE68; + dword_53F9A4[0] = (int)off_55FE7C; + std::ios::init((int)dword_53F9A4, (int)&__gnu_internal::buf_cout_sync); + std::ios_base::ios_base(dword_53F7C8); + dword_53F838 = 0; + word_53F83C = 0; + dword_53F840 = 0; + dword_53F844 = 0; + dword_53F848 = 0; + dword_53F84C = 0; + std::cin = (int)&off_55FE40; + dword_53F7C8[0] = (int)off_55FE54; + dword_53F7C4 = 0; + std::ios::init((int)dword_53F7C8, (int)&__gnu_internal::buf_cin_sync); + std::ios_base::ios_base(&dword_53F864); + word_53F8D8 = 0; + dword_53F8D4 = 0; + dword_53F8DC = 0; + dword_53F8E0 = 0; + dword_53F8E4 = 0; + dword_53F8E8 = 0; + std::cerr = (int)&off_55FE68; + dword_53F864 = (int)off_55FE7C; + std::ios::init((int)&dword_53F864, (int)&__gnu_internal::buf_cerr_sync); + std::ios_base::ios_base(dword_53F904); + dword_53F974 = 0; + word_53F978 = 0; + dword_53F97C = 0; + dword_53F980 = 0; + dword_53F984 = 0; + dword_53F988 = 0; + std::clog = (int)&off_55FE68; + dword_53F904[0] = (int)off_55FE7C; + std::ios::init((int)dword_53F904, (int)&__gnu_internal::buf_cerr_sync); + dword_53F870 |= 0x2000u; + dword_53F838 = (int)&std::cout; + dword_53F8D4 = (int)&std::cout; + v3 = (int)lpuexcpt(1u); + __gnu_internal::buf_wcout_sync = &off_560464; + v9 = v3; + dword_53F224 = 0; + dword_53F228 = 0; + dword_53F22C = 0; + dword_53F230 = 0; + dword_53F234 = 0; + dword_53F238 = 0; + std::locale::locale(&dword_53F23C); + __gnu_internal::buf_wcout_sync = &off_55F2F4; + word_53F244 = -1; + dword_53F240 = v9; + v4 = (int)lpuexcpt(0); + __gnu_internal::buf_wcin_sync = &off_560464; + v10 = v4; + dword_53F1A4 = 0; + dword_53F1A8 = 0; + dword_53F1AC = 0; + dword_53F1B0 = 0; + dword_53F1B4 = 0; + dword_53F1B8 = 0; + std::locale::locale(&dword_53F1BC); + __gnu_internal::buf_wcin_sync = &off_55F2F4; + word_53F1C4 = -1; + dword_53F1C0 = v10; + v5 = (int)lpuexcpt(2u); + __gnu_internal::buf_wcerr_sync = &off_560464; + lpuexcpta = (struct _Unwind_Exception *)v5; + dword_53F1E4 = 0; + dword_53F1E8 = 0; + dword_53F1EC = 0; + dword_53F1F0 = 0; + dword_53F1F4 = 0; + dword_53F1F8 = 0; + std::locale::locale(&dword_53F1FC); + __gnu_internal::buf_wcerr_sync = &off_55F2F4; + dword_53F200 = (int)lpuexcpta; + word_53F204 = -1; + std::ios_base::ios_base(dword_53FC24); + dword_53FC94 = 0; + word_53FC98 = 0; + byte_53FC9A = 0; + dword_53FC9C = 0; + dword_53FCA0 = 0; + dword_53FCA4 = 0; + dword_53FCA8 = 0; + std::wcout = (int)&off_5601C4; + dword_53FC24[0] = (int)off_5601D8; + std::wios::init((int)dword_53FC24, (int)&__gnu_internal::buf_wcout_sync); + std::ios_base::ios_base(dword_53FA48); + dword_53FAB8 = 0; + word_53FABC = 0; + byte_53FABE = 0; + dword_53FAC0 = 0; + dword_53FAC4 = 0; + dword_53FAC8 = 0; + dword_53FACC = 0; + std::wcin = (int)&off_56019C; + dword_53FA48[0] = (int)off_5601B0; + dword_53FA44 = 0; + std::wios::init((int)dword_53FA48, (int)&__gnu_internal::buf_wcin_sync); + std::ios_base::ios_base(&dword_53FAE4); + word_53FB58 = 0; + dword_53FB54 = 0; + byte_53FB5A = 0; + dword_53FB5C = 0; + dword_53FB60 = 0; + dword_53FB64 = 0; + dword_53FB68 = 0; + std::wcerr = (int)&off_5601C4; + dword_53FAE4 = (int)off_5601D8; + std::wios::init((int)&dword_53FAE4, (int)&__gnu_internal::buf_wcerr_sync); + std::ios_base::ios_base(dword_53FB84); + dword_53FBF4 = 0; + word_53FBF8 = 0; + byte_53FBFA = 0; + dword_53FBFC = 0; + dword_53FC00 = 0; + dword_53FC04 = 0; + dword_53FC08 = 0; + std::wclog = (int)&off_5601C4; + dword_53FB84[0] = (int)off_5601D8; + std::wios::init((int)dword_53FB84, (int)&__gnu_internal::buf_wcerr_sync); + dword_53FAF0 |= 0x2000u; + dword_53FAB8 = (int)&std::wcout; + dword_53FB54 = (int)&std::wcout; + if ( _CRT_MT ) + _InterlockedAdd(&std::ios_base::Init::_S_refcount, 1u); + else + ++std::ios_base::Init::_S_refcount; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F0E4: using guessed type int dword_53F0E4; +// 53F0E8: using guessed type int dword_53F0E8; +// 53F0EC: using guessed type int dword_53F0EC; +// 53F0F0: using guessed type int dword_53F0F0; +// 53F0F4: using guessed type int dword_53F0F4; +// 53F0F8: using guessed type int dword_53F0F8; +// 53F0FC: using guessed type _DWORD dword_53F0FC; +// 53F100: using guessed type int dword_53F100; +// 53F104: using guessed type int dword_53F104; +// 53F124: using guessed type int dword_53F124; +// 53F128: using guessed type int dword_53F128; +// 53F12C: using guessed type int dword_53F12C; +// 53F130: using guessed type int dword_53F130; +// 53F134: using guessed type int dword_53F134; +// 53F138: using guessed type int dword_53F138; +// 53F13C: using guessed type _DWORD dword_53F13C; +// 53F140: using guessed type int dword_53F140; +// 53F144: using guessed type int dword_53F144; +// 53F164: using guessed type int dword_53F164; +// 53F168: using guessed type int dword_53F168; +// 53F16C: using guessed type int dword_53F16C; +// 53F170: using guessed type int dword_53F170; +// 53F174: using guessed type int dword_53F174; +// 53F178: using guessed type int dword_53F178; +// 53F17C: using guessed type _DWORD dword_53F17C; +// 53F180: using guessed type int dword_53F180; +// 53F184: using guessed type int dword_53F184; +// 53F1A4: using guessed type int dword_53F1A4; +// 53F1A8: using guessed type int dword_53F1A8; +// 53F1AC: using guessed type int dword_53F1AC; +// 53F1B0: using guessed type int dword_53F1B0; +// 53F1B4: using guessed type int dword_53F1B4; +// 53F1B8: using guessed type int dword_53F1B8; +// 53F1BC: using guessed type _DWORD dword_53F1BC; +// 53F1C0: using guessed type int dword_53F1C0; +// 53F1C4: using guessed type __int16 word_53F1C4; +// 53F1E4: using guessed type int dword_53F1E4; +// 53F1E8: using guessed type int dword_53F1E8; +// 53F1EC: using guessed type int dword_53F1EC; +// 53F1F0: using guessed type int dword_53F1F0; +// 53F1F4: using guessed type int dword_53F1F4; +// 53F1F8: using guessed type int dword_53F1F8; +// 53F1FC: using guessed type _DWORD dword_53F1FC; +// 53F200: using guessed type int dword_53F200; +// 53F204: using guessed type __int16 word_53F204; +// 53F224: using guessed type int dword_53F224; +// 53F228: using guessed type int dword_53F228; +// 53F22C: using guessed type int dword_53F22C; +// 53F230: using guessed type int dword_53F230; +// 53F234: using guessed type int dword_53F234; +// 53F238: using guessed type int dword_53F238; +// 53F23C: using guessed type _DWORD dword_53F23C; +// 53F240: using guessed type int dword_53F240; +// 53F244: using guessed type __int16 word_53F244; +// 53F778: using guessed type int std::ios_base::Init::_S_refcount; +// 53F77C: using guessed type char std::ios_base::Init::_S_synced_with_stdio; +// 53F7C0: using guessed type int std::cin; +// 53F7C4: using guessed type int dword_53F7C4; +// 53F7C8: using guessed type int dword_53F7C8[28]; +// 53F838: using guessed type int dword_53F838; +// 53F83C: using guessed type __int16 word_53F83C; +// 53F840: using guessed type int dword_53F840; +// 53F844: using guessed type int dword_53F844; +// 53F848: using guessed type int dword_53F848; +// 53F84C: using guessed type int dword_53F84C; +// 53F860: using guessed type int std::cerr; +// 53F864: using guessed type int dword_53F864; +// 53F870: using guessed type int dword_53F870; +// 53F8D4: using guessed type int dword_53F8D4; +// 53F8D8: using guessed type __int16 word_53F8D8; +// 53F8DC: using guessed type int dword_53F8DC; +// 53F8E0: using guessed type int dword_53F8E0; +// 53F8E4: using guessed type int dword_53F8E4; +// 53F8E8: using guessed type int dword_53F8E8; +// 53F900: using guessed type int std::clog; +// 53F904: using guessed type int dword_53F904[28]; +// 53F974: using guessed type int dword_53F974; +// 53F978: using guessed type __int16 word_53F978; +// 53F97C: using guessed type int dword_53F97C; +// 53F980: using guessed type int dword_53F980; +// 53F984: using guessed type int dword_53F984; +// 53F988: using guessed type int dword_53F988; +// 53F9A0: using guessed type int std::cout; +// 53F9A4: using guessed type int dword_53F9A4[28]; +// 53FA14: using guessed type int dword_53FA14; +// 53FA18: using guessed type __int16 word_53FA18; +// 53FA1C: using guessed type int dword_53FA1C; +// 53FA20: using guessed type int dword_53FA20; +// 53FA24: using guessed type int dword_53FA24; +// 53FA28: using guessed type int dword_53FA28; +// 53FA40: using guessed type int std::wcin; +// 53FA44: using guessed type int dword_53FA44; +// 53FA48: using guessed type int dword_53FA48[28]; +// 53FAB8: using guessed type int dword_53FAB8; +// 53FABC: using guessed type __int16 word_53FABC; +// 53FABE: using guessed type char byte_53FABE; +// 53FAC0: using guessed type int dword_53FAC0; +// 53FAC4: using guessed type int dword_53FAC4; +// 53FAC8: using guessed type int dword_53FAC8; +// 53FACC: using guessed type int dword_53FACC; +// 53FAE0: using guessed type int std::wcerr; +// 53FAE4: using guessed type int dword_53FAE4; +// 53FAF0: using guessed type int dword_53FAF0; +// 53FB54: using guessed type int dword_53FB54; +// 53FB58: using guessed type __int16 word_53FB58; +// 53FB5A: using guessed type char byte_53FB5A; +// 53FB5C: using guessed type int dword_53FB5C; +// 53FB60: using guessed type int dword_53FB60; +// 53FB64: using guessed type int dword_53FB64; +// 53FB68: using guessed type int dword_53FB68; +// 53FB80: using guessed type int std::wclog; +// 53FB84: using guessed type int dword_53FB84[28]; +// 53FBF4: using guessed type int dword_53FBF4; +// 53FBF8: using guessed type __int16 word_53FBF8; +// 53FBFA: using guessed type char byte_53FBFA; +// 53FBFC: using guessed type int dword_53FBFC; +// 53FC00: using guessed type int dword_53FC00; +// 53FC04: using guessed type int dword_53FC04; +// 53FC08: using guessed type int dword_53FC08; +// 53FC20: using guessed type int std::wcout; +// 53FC24: using guessed type int dword_53FC24[28]; +// 53FC94: using guessed type int dword_53FC94; +// 53FC98: using guessed type __int16 word_53FC98; +// 53FC9A: using guessed type char byte_53FC9A; +// 53FC9C: using guessed type int dword_53FC9C; +// 53FCA0: using guessed type int dword_53FCA0; +// 53FCA4: using guessed type int dword_53FCA4; +// 53FCA8: using guessed type int dword_53FCA8; +// 55F2B4: using guessed type int (*off_55F2B4)(); +// 55F2F4: using guessed type int (*off_55F2F4)(); +// 55FE40: using guessed type void (__cdecl *off_55FE40)(std::istream *__hidden this); +// 55FE54: using guessed type void (__cdecl *off_55FE54[2])(std::istream *__hidden this); +// 55FE68: using guessed type void (__cdecl *off_55FE68)(std::ostream *__hidden this); +// 55FE7C: using guessed type void (__cdecl *off_55FE7C[2])(std::ostream *__hidden this); +// 56019C: using guessed type int (*off_56019C)(); +// 5601B0: using guessed type int (*off_5601B0[2])(); +// 5601C4: using guessed type int (*off_5601C4)(); +// 5601D8: using guessed type int (*off_5601D8[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560464: using guessed type int (*off_560464)(); + +//----- (00525B90) -------------------------------------------------------- +void __cdecl std::ios_base::Init::~Init() +{ + int v0; // eax + + if ( !_CRT_MT ) + { + v0 = std::ios_base::Init::_S_refcount--; + if ( v0 != 2 ) + return; +LABEL_5: + std::ostream::flush(&std::cout); + std::ostream::flush(&std::cerr); + std::ostream::flush(&std::clog); + std::wostream::flush(&std::wcout); + std::wostream::flush(&std::wcerr); + std::wostream::flush(&std::wclog); + return; + } + if ( _InterlockedExchangeAdd(&std::ios_base::Init::_S_refcount, 0xFFFFFFFF) == 2 ) + goto LABEL_5; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F778: using guessed type int std::ios_base::Init::_S_refcount; +// 53F860: using guessed type int std::cerr; +// 53F900: using guessed type int std::clog; +// 53F9A0: using guessed type int std::cout; +// 53FAE0: using guessed type int std::wcerr; +// 53FB80: using guessed type int std::wclog; +// 53FC20: using guessed type int std::wcout; + +//----- (00525C70) -------------------------------------------------------- +volatile signed __int32 **__thiscall std::ios_base::imbue( + volatile signed __int32 **ecx0, + volatile signed __int32 **this, + volatile signed __int32 **a3) +{ + const std::locale *v5; // [esp+4h] [ebp-18h] + + std::locale::locale(ecx0, this + 27, v5); + std::locale::operator=(this + 27, a3); + std::ios_base::_M_call_callbacks(this, 1); + return ecx0; +} +// 525C82: variable 'v5' is possibly undefined + +//----- (00525CC0) -------------------------------------------------------- +int std::ios_base::xalloc() +{ + int result; // eax + + if ( _CRT_MT ) + return _InterlockedExchangeAdd(&std::ios_base::xalloc(void)::_S_top, 1u) + 4; + result = std::ios_base::xalloc(void)::_S_top + 4; + ++std::ios_base::xalloc(void)::_S_top; + return result; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53FCFC: using guessed type int std::ios_base::xalloc(void)::_S_top; + +//----- (00525D00) -------------------------------------------------------- +void __fastcall std::ios_base::_M_init(int a1) +{ + _DWORD *v2[4]; // [esp+1Ch] [ebp-10h] BYREF + + *(_DWORD *)(a1 + 4) = 6; + *(_DWORD *)(a1 + 8) = 0; + *(_DWORD *)(a1 + 12) = 4098; + std::locale::locale(v2); + std::locale::operator=((volatile signed __int32 **)(a1 + 108), (volatile signed __int32 **)v2); + std::locale::~locale(v2); +} + +//----- (00525D50) -------------------------------------------------------- +volatile signed __int32 **__userpurge std::ios_base::_M_move@( + int a1@, + std::ios_base *this, + std::ios_base *a3) +{ + int v3; // edi + int v5; // eax + int v6; // eax + std::ios_base *v7; // eax + int v8; // eax + int v10; // edx + _DWORD *v11; // eax + int *v12; // ecx + int v13; // ebp + int v14; // edi + + v3 = a1 + 36; + *(_DWORD *)(a1 + 4) = *((_DWORD *)this + 1); + *(_DWORD *)(a1 + 8) = *((_DWORD *)this + 2); + *(_DWORD *)(a1 + 12) = *((_DWORD *)this + 3); + *(_DWORD *)(a1 + 16) = *((_DWORD *)this + 4); + *(_DWORD *)(a1 + 20) = *((_DWORD *)this + 5); + v5 = *((_DWORD *)this + 6); + *((_DWORD *)this + 6) = 0; + *(_DWORD *)(a1 + 24) = v5; + v6 = *(_DWORD *)(a1 + 104); + if ( v6 != a1 + 36 && v6 ) + operator delete[](*(void **)(a1 + 104)); + v7 = (std::ios_base *)*((_DWORD *)this + 26); + if ( v7 == (std::ios_base *)((char *)this + 36) ) + { + *(_DWORD *)(a1 + 104) = v3; + v10 = 0; + *(_DWORD *)(a1 + 100) = 8; + while ( 1 ) + { + v11 = (_DWORD *)(v3 + v10); + v12 = (int *)(v10 + *((_DWORD *)this + 26)); + v10 += 8; + v13 = *v12; + v14 = v12[1]; + *v12 = 0; + v12[1] = 0; + *v11 = v13; + v11[1] = v14; + if ( v10 == 64 ) + break; + v3 = *(_DWORD *)(a1 + 104); + } + } + else + { + *((_DWORD *)this + 26) = (char *)this + 36; + *(_DWORD *)(a1 + 104) = v7; + v8 = *((_DWORD *)this + 25); + *((_DWORD *)this + 25) = 8; + *(_DWORD *)(a1 + 100) = v8; + } + return std::locale::operator=((volatile signed __int32 **)(a1 + 108), (volatile signed __int32 **)this + 27); +} + +//----- (00525E20) -------------------------------------------------------- +void __userpurge std::ios_base::_M_swap(std::ios_base *a1@, std::ios_base *this, std::ios_base *a3) +{ + char *v3; // ebp + std::ios_base *v4; // ebx + int v5; // eax + char *v6; // edi + int v7; // edx + int v8; // eax + int v9; // edx + int v10; // eax + int v11; // edx + int v12; // eax + int v13; // edx + int v14; // eax + int v15; // edx + int v16; // eax + char *v17; // edx + char *v18; // eax + std::ios_base *v19; // edx + int v20; // eax + volatile signed __int32 **v21; // ebx + int i; // ecx + int v23; // ebp + int v24; // edi + int v25; // edx + const std::locale *Src; // [esp+4h] [ebp-48h] + std::ios_base *v27; // [esp+18h] [ebp-34h] + std::ios_base *v28; // [esp+1Ch] [ebp-30h] + _DWORD *v29[8]; // [esp+2Ch] [ebp-20h] BYREF + + v3 = (char *)a1 + 36; + v4 = a1; + v5 = *((_DWORD *)a1 + 1); + v6 = (char *)*((_DWORD *)a1 + 26); + *((_DWORD *)a1 + 1) = *((_DWORD *)this + 1); + v7 = *((_DWORD *)this + 2); + *((_DWORD *)this + 1) = v5; + v8 = *((_DWORD *)a1 + 2); + *((_DWORD *)a1 + 2) = v7; + v9 = *((_DWORD *)this + 3); + *((_DWORD *)this + 2) = v8; + v10 = *((_DWORD *)a1 + 3); + *((_DWORD *)a1 + 3) = v9; + v11 = *((_DWORD *)this + 4); + *((_DWORD *)this + 3) = v10; + v12 = *((_DWORD *)a1 + 4); + *((_DWORD *)a1 + 4) = v11; + v13 = *((_DWORD *)this + 5); + *((_DWORD *)this + 4) = v12; + v14 = *((_DWORD *)a1 + 5); + *((_DWORD *)a1 + 5) = v13; + v15 = *((_DWORD *)this + 6); + *((_DWORD *)this + 5) = v14; + v16 = *((_DWORD *)a1 + 6); + *((_DWORD *)a1 + 6) = v15; + v17 = (char *)this + 36; + *((_DWORD *)this + 6) = v16; + v18 = (char *)*((_DWORD *)this + 26); + if ( v6 != (char *)a1 + 36 ) + { +LABEL_6: + if ( v18 != v17 ) + { + *((_DWORD *)a1 + 26) = v18; + *((_DWORD *)this + 26) = v6; + goto LABEL_8; + } + if ( v6 != v3 ) + { + v19 = a1; + a1 = this; + goto LABEL_5; + } +LABEL_4: + v3 = (char *)this + 36; + v6 = (char *)*((_DWORD *)this + 26); + v19 = this; +LABEL_5: + v28 = a1; + v27 = v19; + memmove((char *)v19 + 36, (char *)a1 + 36, 0x40u); + *((_DWORD *)v28 + 26) = v6; + *((_DWORD *)v27 + 26) = v3; +LABEL_8: + v20 = *((_DWORD *)v4 + 25); + *((_DWORD *)v4 + 25) = *((_DWORD *)this + 25); + *((_DWORD *)this + 25) = v20; + goto LABEL_9; + } + if ( v18 != v17 ) + { + if ( v6 == v3 ) + goto LABEL_4; + goto LABEL_6; + } + for ( i = 0; i != 8; ++i ) + { + v23 = *((_DWORD *)v4 + 2 * i + 9); + v24 = *((_DWORD *)v4 + 2 * i + 10); + v25 = *((_DWORD *)this + 2 * i + 10); + *((_DWORD *)v4 + 2 * i + 9) = *((_DWORD *)this + 2 * i + 9); + *((_DWORD *)v4 + 2 * i + 10) = v25; + *((_DWORD *)this + 2 * i + 9) = v23; + *((_DWORD *)this + 2 * i + 10) = v24; + } +LABEL_9: + v21 = (volatile signed __int32 **)((char *)v4 + 108); + std::locale::locale((volatile signed __int32 **)v29, v21, Src); + std::locale::operator=(v21, (volatile signed __int32 **)this + 27); + std::locale::operator=((volatile signed __int32 **)this + 27, (volatile signed __int32 **)v29); + std::locale::~locale(v29); +} +// 525EF9: variable 'Src' is possibly undefined + +//----- (00525F80) -------------------------------------------------------- +void __thiscall std::ios_base::failure[abi:cxx11]::failure(_DWORD *this, char *a2, int *a3) +{ + std::system_error::system_error(this, *a3, a3[1], a2); + *this = &off_55FDD8; +} +// 55FDD8: using guessed type int (*off_55FDD8)(); + +//----- (00525FC0) -------------------------------------------------------- +void __thiscall std::ios_base::failure[abi:cxx11]::failure(_DWORD *this, int a2) +{ + if ( !(_BYTE)`guard variable for'`anonymous namespace'::__io_category_instance(void)::__ec + && __cxa_guard_acquire(&`guard variable for'`anonymous namespace'::__io_category_instance(void)::__ec) ) + { + __cxa_guard_release(&`guard variable for'`anonymous namespace'::__io_category_instance(void)::__ec); + atexit((_PVFV)__tcf_0_7); + } + std::system_error::system_error(this, 1, (int)&`anonymous namespace'::__io_category_instance(void)::__ec, a2); + *this = &off_55FDD8; +} +// 53FCD0: using guessed type void (__cdecl **`anonymous namespace'::__io_category_instance(void)::__ec)(_anonymous_namespace_::io_error_category *__hidden this); +// 55FDD8: using guessed type int (*off_55FDD8)(); + +//----- (00526030) -------------------------------------------------------- +void __thiscall std::ios_base::failure[abi:cxx11]::failure(_DWORD *this, int a2, int *a3) +{ + std::system_error::system_error(this, *a3, a3[1], a2); + *this = &off_55FDD8; +} +// 55FDD8: using guessed type int (*off_55FDD8)(); + +//----- (00526070) -------------------------------------------------------- +void __fastcall std::ios_base::failure[abi:cxx11]::~failure(_DWORD *Block) +{ + std::exception *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_55FDD8; + std::system_error::~system_error(Blocka); + operator delete(Block); +} +// 52607C: variable 'Blocka' is possibly undefined +// 55FDD8: using guessed type int (*off_55FDD8)(); + +//----- (00526090) -------------------------------------------------------- +void __cdecl std::ios_base::failure[abi:cxx11]::~failure(std::exception *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_55FDD8; + std::system_error::~system_error(a1); +} +// 526090: variable 'v1' is possibly undefined +// 55FDD8: using guessed type int (*off_55FDD8)(); + +//----- (005260A0) -------------------------------------------------------- +void __userpurge std::ios_base::failure::failure(_DWORD *a1@, std::ios_base::failure *this, const std::string *a3) +{ + const std::string *v3; // [esp+4h] [ebp-54h] + + *a1 = &off_55FDEC; + std::string::string(a1 + 1, this, v3); +} +// 5260E8: variable 'v3' is possibly undefined +// 55FDEC: using guessed type void (__cdecl *off_55FDEC)(std::ios_base::failure *__hidden this); + +//----- (00526130) -------------------------------------------------------- +void __fastcall std::ios_base::failure::~failure(_DWORD *a1) +{ + int v2; // eax + int v3; // ecx + int v4; // eax + std::exception *Block; // [esp+0h] [ebp-2Ch] + int v6[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v2 = _CRT_MT; + *a1 = &off_55FDEC; + v3 = a1[1]; + if ( v2 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v3 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; +LABEL_5: + std::string::_Rep::_M_destroy((void *)(v3 - 12), (int)v6); + goto LABEL_3; + } + v4 = *(_DWORD *)(v3 - 4); + *(_DWORD *)(v3 - 4) = v4 - 1; + if ( v4 <= 0 ) + goto LABEL_5; +LABEL_3: + std::exception::~exception(Block); + operator delete(a1); +} +// 526157: variable 'Block' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55FDEC: using guessed type void (__cdecl *off_55FDEC)(std::ios_base::failure *__hidden this); +// 526130: using guessed type int var_D[3]; + +//----- (005261A0) -------------------------------------------------------- +void __cdecl std::ios_base::failure::~failure(std::ios_base::failure *this) +{ + _DWORD *v1; // ecx + int v2; // eax + int v3; // ecx + int v4; // eax + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v2 = _CRT_MT; + *v1 = &off_55FDEC; + v3 = v1[1]; + if ( v2 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v3 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_3; + } + else + { + v4 = *(_DWORD *)(v3 - 4); + *(_DWORD *)(v3 - 4) = v4 - 1; + if ( v4 > 0 ) + { +LABEL_3: + std::exception::~exception(this); + return; + } + } + std::string::_Rep::_M_destroy((void *)(v3 - 12), (int)v5); + std::exception::~exception(this); +} +// 5261AB: variable 'v1' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; +// 55FDEC: using guessed type void (__cdecl *off_55FDEC)(std::ios_base::failure *__hidden this); +// 5261A0: using guessed type int var_D[3]; + +//----- (00526200) -------------------------------------------------------- +void __fastcall std::ios_base::ios_base(_DWORD *a1) +{ + _DWORD *v1; // ebx + _DWORD *v2; // eax + _DWORD *v3; // ecx + + v1 = a1 + 9; + *a1 = &off_560D04; + v2 = a1 + 9; + a1[1] = 0; + a1[2] = 0; + a1[3] = 0; + a1[4] = 0; + a1[5] = 0; + a1[6] = 0; + a1[7] = 0; + a1[8] = 0; + do + { + *v2 = 0; + v2 += 2; + *(v2 - 1) = 0; + } + while ( a1 + 25 != v2 ); + a1[25] = 8; + v3 = a1 + 27; + *(v3 - 1) = v1; + std::locale::locale(v3); +} +// 560D04: using guessed type void (__cdecl *off_560D04)(std::ios_base *__hidden this); + +//----- (00526280) -------------------------------------------------------- +void __fastcall std::ios_base::~ios_base(int a1) +{ + void *Block; // eax + + *(_DWORD *)a1 = &off_560D04; + std::ios_base::_M_call_callbacks((_DWORD *)a1, 0); + std::ios_base::_M_dispose_callbacks(a1); + Block = *(void **)(a1 + 104); + if ( Block != (void *)(a1 + 36) ) + { + if ( Block ) + operator delete[](Block); + *(_DWORD *)(a1 + 104) = 0; + } + std::locale::~locale((_DWORD **)(a1 + 108)); + operator delete((void *)a1); +} +// 560D04: using guessed type void (__cdecl *off_560D04)(std::ios_base *__hidden this); + +//----- (005262E0) -------------------------------------------------------- +void __fastcall std::ios_base::~ios_base(int a1) +{ + void *Block; // eax + + *(_DWORD *)a1 = &off_560D04; + std::ios_base::_M_call_callbacks((_DWORD *)a1, 0); + std::ios_base::_M_dispose_callbacks(a1); + Block = *(void **)(a1 + 104); + if ( Block != (void *)(a1 + 36) ) + { + if ( Block ) + operator delete[](Block); + *(_DWORD *)(a1 + 104) = 0; + } + std::locale::~locale((_DWORD **)(a1 + 108)); +} +// 560D04: using guessed type void (__cdecl *off_560D04)(std::ios_base *__hidden this); + +//----- (00526330) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4) +{ + this[1] = a4 != 0; + *this = &off_560D14; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560D14: using guessed type int (*off_560D14)(); + +//----- (005263D0) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560D14; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560D14: using guessed type int (*off_560D14)(); + +//----- (00526470) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4) +{ + this[1] = a4 != 0; + *this = &off_560D14; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560D14: using guessed type int (*off_560D14)(); + +//----- (00526510) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560D14; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560D14: using guessed type int (*off_560D14)(); + +//----- (005265B0) -------------------------------------------------------- +void __fastcall std::messages::~messages(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_560D14; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 5265EE: variable 'lpfctx' is possibly undefined +// 560D14: using guessed type int (*off_560D14)(); + +//----- (00526610) -------------------------------------------------------- +void __fastcall std::messages::~messages(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560D14; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 52664E: variable 'lpfctx' is possibly undefined +// 560D14: using guessed type int (*off_560D14)(); + +//----- (00526670) -------------------------------------------------------- +void __fastcall std::messages::~messages(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560D14; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 5266AE: variable 'lpfctx' is possibly undefined +// 560D14: using guessed type int (*off_560D14)(); + +//----- (005266D0) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4) +{ + this[1] = a4 != 0; + *this = &off_560D30; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560D30: using guessed type int (*off_560D30)(); + +//----- (00526770) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560D30; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560D30: using guessed type int (*off_560D30)(); + +//----- (00526810) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2, int a3, int a4) +{ + this[1] = a4 != 0; + *this = &off_560D30; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560D30: using guessed type int (*off_560D30)(); + +//----- (005268B0) -------------------------------------------------------- +void __thiscall std::messages::messages(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560D30; + this[2] = std::locale::facet::_S_get_c_locale(); +} +// 560D30: using guessed type int (*off_560D30)(); + +//----- (00526950) -------------------------------------------------------- +void __fastcall std::messages::~messages(_DWORD *Block) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *Block = &off_560D30; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(Block + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); + operator delete(Block); +} +// 52698E: variable 'lpfctx' is possibly undefined +// 560D30: using guessed type int (*off_560D30)(); + +//----- (005269B0) -------------------------------------------------------- +void __fastcall std::messages::~messages(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560D30; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 5269EE: variable 'lpfctx' is possibly undefined +// 560D30: using guessed type int (*off_560D30)(); + +//----- (00526A10) -------------------------------------------------------- +void __fastcall std::messages::~messages(_DWORD *a1) +{ + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + + *a1 = &off_560D30; + std::locale::facet::_S_destroy_c_locale((std::locale::facet *)(a1 + 2)); + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 526A4E: variable 'lpfctx' is possibly undefined +// 560D30: using guessed type int (*off_560D30)(); + +//----- (00526A70) -------------------------------------------------------- +_DWORD *__thiscall std::numpunct::_M_initialize_numpunct(_DWORD *this, int a2) +{ + _DWORD *v2; // eax + char *v3; // esi + int i; // eax + char *v5; // esi + int j; // eax + _DWORD *result; // eax + _DWORD *v8; // [esp+1Ch] [ebp-10h] + + v2 = (_DWORD *)this[2]; + if ( !v2 ) + { + v8 = this; + v2 = operator new(0x68u); + this = v8; + v2[1] = 0; + *v2 = &off_5605B0; + v2[2] = 0; + v2[3] = 0; + *((_BYTE *)v2 + 16) = 0; + v2[5] = 0; + v2[6] = 0; + v2[7] = 0; + v2[8] = 0; + *((_WORD *)v2 + 18) = 0; + *((_BYTE *)v2 + 100) = 0; + v8[2] = v2; + } + v2[2] = &unk_556C34; + v3 = std::__num_base::_S_atoms_out[0]; + v2[3] = 0; + *((_BYTE *)v2 + 16) = 0; + *((_BYTE *)v2 + 36) = 46; + *(_BYTE *)(this[2] + 37) = 44; + for ( i = 0; i != 36; ++i ) + *(_BYTE *)(this[2] + i + 38) = v3[i]; + v5 = std::__num_base::_S_atoms_in[0]; + for ( j = 0; j != 26; ++j ) + *(_BYTE *)(this[2] + j + 74) = v5[j]; + result = (_DWORD *)this[2]; + result[5] = "true"; + result[6] = 4; + result[7] = "false"; + result[8] = 5; + return result; +} +// 53F580: using guessed type char *std::__num_base::_S_atoms_in[3]; +// 53F584: using guessed type char *std::__num_base::_S_atoms_out[2]; +// 5605B0: using guessed type int (*off_5605B0)(); + +//----- (00526B70) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_560D4C; + this[2] = a2; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 560D4C: using guessed type int (*off_560D4C)(); + +//----- (00526C10) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + *this = &off_560D4C; + this[2] = 0; + this[1] = a3 != 0; + std::numpunct::_M_initialize_numpunct(this, a2); +} +// 560D4C: using guessed type int (*off_560D4C)(); + +//----- (00526CA0) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560D4C; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 560D4C: using guessed type int (*off_560D4C)(); + +//----- (00526D40) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_560D4C; + this[2] = a2; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 560D4C: using guessed type int (*off_560D4C)(); + +//----- (00526DE0) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + *this = &off_560D4C; + this[2] = 0; + this[1] = a3 != 0; + std::numpunct::_M_initialize_numpunct(this, a2); +} +// 560D4C: using guessed type int (*off_560D4C)(); + +//----- (00526E70) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560D4C; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 560D4C: using guessed type int (*off_560D4C)(); + +//----- (00526F10) -------------------------------------------------------- +void __fastcall std::numpunct::~numpunct(_DWORD *a1) +{ + std::numpunct::~numpunct(a1); + operator delete(a1); +} + +//----- (00526FA0) -------------------------------------------------------- +void __fastcall std::numpunct::~numpunct(_DWORD *a1) +{ + void *v1; // edx + void (__fastcall *v2)(void *); // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + void *Block; // [esp+14h] [ebp-48h] + + v1 = (void *)a1[2]; + *a1 = &off_560D4C; + Block = v1; + if ( v1 ) + { + v2 = *(void (__fastcall **)(void *))(*(_DWORD *)v1 + 4); + if ( v2 == std::__numpunct_cache::~__numpunct_cache ) + { + std::__numpunct_cache::~__numpunct_cache((std::locale::facet *)lpfctx); + operator delete(Block); + } + else + { + v2(v1); + } + } + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 526FFF: variable 'lpfctx' is possibly undefined +// 560D4C: using guessed type int (*off_560D4C)(); + +//----- (005270A0) -------------------------------------------------------- +int __thiscall std::numpunct::_M_initialize_numpunct(_DWORD *this, int a2) +{ + _DWORD *v2; // edx + char *v3; // ebx + int v4; // eax + char *v5; // ebx + int result; // eax + _DWORD *v7; // eax + + v2 = (_DWORD *)this[2]; + if ( !v2 ) + { + v7 = operator new(0xA8u); + v7[1] = 0; + v2 = v7; + *v7 = &off_5605C0; + v7[2] = 0; + v7[3] = 0; + *((_BYTE *)v7 + 16) = 0; + v7[5] = 0; + v7[6] = 0; + v7[7] = 0; + v7[8] = 0; + v7[9] = 0; + *((_BYTE *)v7 + 164) = 0; + this[2] = v7; + } + v2[2] = &unk_556C34; + v3 = std::__num_base::_S_atoms_out[0]; + v4 = 0; + v2[3] = 0; + *((_BYTE *)v2 + 16) = 0; + v2[9] = 2883630; + do + { + *((_WORD *)v2 + v4 + 20) = v3[v4]; + ++v4; + } + while ( v4 != 36 ); + v5 = std::__num_base::_S_atoms_in[0]; + for ( result = 0; result != 26; ++result ) + *((_WORD *)v2 + result + 56) = v5[result]; + v2[5] = &off_556C40; + v2[6] = 4; + v2[7] = &off_556C4A; + v2[8] = 5; + return result; +} +// 53F580: using guessed type char *std::__num_base::_S_atoms_in[3]; +// 53F584: using guessed type char *std::__num_base::_S_atoms_out[2]; +// 556C40: using guessed type void *off_556C40; +// 556C4A: using guessed type void *off_556C4A; +// 5605C0: using guessed type int (*off_5605C0)(); + +//----- (00527190) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_560D70; + this[2] = a2; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 560D70: using guessed type int (*off_560D70)(); + +//----- (00527230) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + *this = &off_560D70; + this[2] = 0; + this[1] = a3 != 0; + std::numpunct::_M_initialize_numpunct(this, a2); +} +// 560D70: using guessed type int (*off_560D70)(); + +//----- (005272C0) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560D70; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 560D70: using guessed type int (*off_560D70)(); + +//----- (00527360) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + this[1] = a3 != 0; + *this = &off_560D70; + this[2] = a2; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 560D70: using guessed type int (*off_560D70)(); + +//----- (00527400) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2, int a3) +{ + *this = &off_560D70; + this[2] = 0; + this[1] = a3 != 0; + std::numpunct::_M_initialize_numpunct(this, a2); +} +// 560D70: using guessed type int (*off_560D70)(); + +//----- (00527490) -------------------------------------------------------- +void __thiscall std::numpunct::numpunct(_DWORD *this, int a2) +{ + this[1] = a2 != 0; + *this = &off_560D70; + this[2] = 0; + std::numpunct::_M_initialize_numpunct(this, 0); +} +// 560D70: using guessed type int (*off_560D70)(); + +//----- (00527530) -------------------------------------------------------- +void __fastcall std::numpunct::~numpunct(_DWORD *a1) +{ + std::numpunct::~numpunct(a1); + operator delete(a1); +} + +//----- (005275C0) -------------------------------------------------------- +void __fastcall std::numpunct::~numpunct(_DWORD *a1) +{ + void *v1; // edx + void (__fastcall *v2)(void *); // eax + struct SjLj_Function_Context *lpfctx; // [esp+0h] [ebp-5Ch] + void *Block; // [esp+14h] [ebp-48h] + + v1 = (void *)a1[2]; + *a1 = &off_560D70; + Block = v1; + if ( v1 ) + { + v2 = *(void (__fastcall **)(void *))(*(_DWORD *)v1 + 4); + if ( v2 == std::__numpunct_cache::~__numpunct_cache ) + { + std::__numpunct_cache::~__numpunct_cache((std::locale::facet *)lpfctx); + operator delete(Block); + } + else + { + v2(v1); + } + } + std::locale::facet::~facet((std::locale::facet *)lpfctx); +} +// 52761F: variable 'lpfctx' is possibly undefined +// 560D70: using guessed type int (*off_560D70)(); + +//----- (005276C0) -------------------------------------------------------- +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560D94; + result = a2 != 0; + this[1] = result; + return result; +} +// 560D94: using guessed type int (*off_560D94)(); + +//----- (005276E0) -------------------------------------------------------- +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560D94; + result = a2 != 0; + this[1] = result; + return result; +} +// 560D94: using guessed type int (*off_560D94)(); + +//----- (00527700) -------------------------------------------------------- +void __fastcall std::time_get>::~time_get(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560D94; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52770C: variable 'Blocka' is possibly undefined +// 560D94: using guessed type int (*off_560D94)(); + +//----- (00527720) -------------------------------------------------------- +void __cdecl std::time_get>::~time_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560D94; + std::locale::facet::~facet(a1); +} +// 527720: variable 'v1' is possibly undefined +// 560D94: using guessed type int (*off_560D94)(); + +//----- (00527730) -------------------------------------------------------- +void __cdecl std::time_get>::~time_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560D94; + std::locale::facet::~facet(a1); +} +// 527730: variable 'v1' is possibly undefined +// 560D94: using guessed type int (*off_560D94)(); + +//----- (00527740) -------------------------------------------------------- +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560DBC; + result = a2 != 0; + this[1] = result; + return result; +} +// 560DBC: using guessed type int (*off_560DBC)(); + +//----- (00527760) -------------------------------------------------------- +BOOL __thiscall std::time_get>::time_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560DBC; + result = a2 != 0; + this[1] = result; + return result; +} +// 560DBC: using guessed type int (*off_560DBC)(); + +//----- (00527780) -------------------------------------------------------- +void __fastcall std::time_get>::~time_get(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560DBC; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52778C: variable 'Blocka' is possibly undefined +// 560DBC: using guessed type int (*off_560DBC)(); + +//----- (005277A0) -------------------------------------------------------- +void __cdecl std::time_get>::~time_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560DBC; + std::locale::facet::~facet(a1); +} +// 5277A0: variable 'v1' is possibly undefined +// 560DBC: using guessed type int (*off_560DBC)(); + +//----- (005277B0) -------------------------------------------------------- +void __cdecl std::time_get>::~time_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560DBC; + std::locale::facet::~facet(a1); +} +// 5277B0: variable 'v1' is possibly undefined +// 560DBC: using guessed type int (*off_560DBC)(); + +//----- (005277C0) -------------------------------------------------------- +BOOL __thiscall std::time_put>::time_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560DE4; + result = a2 != 0; + this[1] = result; + return result; +} +// 560DE4: using guessed type int (*off_560DE4)(); + +//----- (005277E0) -------------------------------------------------------- +BOOL __thiscall std::time_put>::time_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560DE4; + result = a2 != 0; + this[1] = result; + return result; +} +// 560DE4: using guessed type int (*off_560DE4)(); + +//----- (00527800) -------------------------------------------------------- +void __fastcall std::time_put>::~time_put(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560DE4; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52780C: variable 'Blocka' is possibly undefined +// 560DE4: using guessed type int (*off_560DE4)(); + +//----- (00527820) -------------------------------------------------------- +void __cdecl std::time_put>::~time_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560DE4; + std::locale::facet::~facet(a1); +} +// 527820: variable 'v1' is possibly undefined +// 560DE4: using guessed type int (*off_560DE4)(); + +//----- (00527830) -------------------------------------------------------- +void __cdecl std::time_put>::~time_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560DE4; + std::locale::facet::~facet(a1); +} +// 527830: variable 'v1' is possibly undefined +// 560DE4: using guessed type int (*off_560DE4)(); + +//----- (00527840) -------------------------------------------------------- +BOOL __thiscall std::time_put>::time_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560DF8; + result = a2 != 0; + this[1] = result; + return result; +} +// 560DF8: using guessed type int (*off_560DF8)(); + +//----- (00527860) -------------------------------------------------------- +BOOL __thiscall std::time_put>::time_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560DF8; + result = a2 != 0; + this[1] = result; + return result; +} +// 560DF8: using guessed type int (*off_560DF8)(); + +//----- (00527880) -------------------------------------------------------- +void __fastcall std::time_put>::~time_put(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560DF8; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 52788C: variable 'Blocka' is possibly undefined +// 560DF8: using guessed type int (*off_560DF8)(); + +//----- (005278A0) -------------------------------------------------------- +void __cdecl std::time_put>::~time_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560DF8; + std::locale::facet::~facet(a1); +} +// 5278A0: variable 'v1' is possibly undefined +// 560DF8: using guessed type int (*off_560DF8)(); + +//----- (005278B0) -------------------------------------------------------- +void __cdecl std::time_put>::~time_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560DF8; + std::locale::facet::~facet(a1); +} +// 5278B0: variable 'v1' is possibly undefined +// 560DF8: using guessed type int (*off_560DF8)(); + +//----- (005278C0) -------------------------------------------------------- +void __fastcall std::bad_alloc::~bad_alloc(_DWORD *a1) +{ + std::exception *Block; // [esp+0h] [ebp-1Ch] + + *a1 = &off_560E0C; + std::exception::~exception(Block); + operator delete(a1); +} +// 5278CC: variable 'Block' is possibly undefined +// 560E0C: using guessed type void (__cdecl *off_560E0C)(std::bad_alloc *__hidden this); + +//----- (005278F0) -------------------------------------------------------- +void __cdecl std::bad_alloc::~bad_alloc(std::exception *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560E0C; + std::exception::~exception(a1); +} +// 5278F0: variable 'v1' is possibly undefined +// 560E0C: using guessed type void (__cdecl *off_560E0C)(std::bad_alloc *__hidden this); + +//----- (00527900) -------------------------------------------------------- +int __thiscall std::ios::exceptions(_DWORD *this, int a2) +{ + bool v2; // zf + int v3; // edx + int result; // eax + + v2 = this[30] == 0; + v3 = this[5]; + result = a2; + this[4] = a2; + if ( v2 ) + { + v3 |= 1u; + this[5] = v3; + } + if ( (v3 & a2) != 0 ) + std::__throw_ios_failure("basic_ios::clear"); + return result; +} + +//----- (00527940) -------------------------------------------------------- +int __thiscall std::ios::_M_setstate(_DWORD *this, int a2) +{ + int result; // eax + + this[5] |= a2; + result = this[4] & a2; + if ( result ) + __cxa_rethrow(); + return result; +} + +//----- (00527960) -------------------------------------------------------- +void *__thiscall std::ios::_M_cache_locale(_DWORD *this, int a2) +{ + void *result; // eax + + if ( (unsigned __int8)std::has_facet>(a2) ) + { + this[31] = std::use_facet>(a2); + if ( (unsigned __int8)std::has_facet>>(a2) ) + goto LABEL_3; +LABEL_6: + this[32] = 0; + result = (void *)std::has_facet>>(a2); + if ( (_BYTE)result ) + goto LABEL_4; + goto LABEL_7; + } + this[31] = 0; + if ( !(unsigned __int8)std::has_facet>>(a2) ) + goto LABEL_6; +LABEL_3: + this[32] = std::use_facet>>(a2); + result = (void *)std::has_facet>>(a2); + if ( (_BYTE)result ) + { +LABEL_4: + result = std::use_facet>>(a2); + this[33] = result; + return result; + } +LABEL_7: + this[33] = 0; + return result; +} + +//----- (00527A00) -------------------------------------------------------- +int __thiscall std::ios::tie(_DWORD *this, int a2) +{ + int result; // eax + + result = this[28]; + this[28] = a2; + return result; +} + +//----- (00527A10) -------------------------------------------------------- +int __thiscall std::ios::fill(int this, char a2) +{ + int result; // eax + _BYTE *v4; // edi + int (__stdcall *v5)(unsigned __int8); // edx + + if ( *(_BYTE *)(this + 117) ) + { + result = *(unsigned __int8 *)(this + 116); + *(_BYTE *)(this + 116) = a2; + } + else + { + v4 = *(_BYTE **)(this + 124); + if ( !v4 ) + std::__throw_bad_cast(); + if ( v4[28] ) + { + result = (unsigned __int8)v4[61]; + } + else + { + std::ctype::_M_widen_init(*(_DWORD *)(this + 124)); + v5 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v4 + 24); + result = 32; + if ( v5 != std::ctype::do_widen ) + result = ((int (__thiscall *)(_BYTE *, int))v5)(v4, 32); + } + *(_BYTE *)(this + 117) = 1; + *(_BYTE *)(this + 116) = a2; + } + return result; +} + +//----- (00527A90) -------------------------------------------------------- +BOOL __thiscall std::ios::init(int this, int a2) +{ + BOOL result; // eax + + std::ios_base::_M_init(this); + std::ios::_M_cache_locale((_DWORD *)this, this + 108); + *(_DWORD *)(this + 120) = a2; + *(_WORD *)(this + 116) = 0; + result = a2 == 0; + *(_DWORD *)(this + 112) = 0; + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 20) = result; + return result; +} + +//----- (00527AE0) -------------------------------------------------------- +int __thiscall std::ios::move(int this, std::ios_base *a2) +{ + int v3; // eax + int result; // eax + std::ios_base *v5; // [esp+4h] [ebp-18h] + + std::ios_base::_M_move(this, a2, v5); + std::ios::_M_cache_locale((_DWORD *)this, this + 108); + v3 = *((_DWORD *)a2 + 28); + *((_DWORD *)a2 + 28) = 0; + *(_DWORD *)(this + 112) = v3; + *(_BYTE *)(this + 116) = *((_BYTE *)a2 + 116); + result = *((unsigned __int8 *)a2 + 117); + *(_DWORD *)(this + 120) = 0; + *(_BYTE *)(this + 117) = result; + return result; +} +// 527AEE: variable 'v5' is possibly undefined + +//----- (00527B30) -------------------------------------------------------- +int __thiscall std::ios::move(int this, std::ios_base *a2) +{ + int v3; // eax + int result; // eax + std::ios_base *v5; // [esp+4h] [ebp-18h] + + std::ios_base::_M_move(this, a2, v5); + std::ios::_M_cache_locale((_DWORD *)this, this + 108); + v3 = *((_DWORD *)a2 + 28); + *((_DWORD *)a2 + 28) = 0; + *(_DWORD *)(this + 112) = v3; + *(_BYTE *)(this + 116) = *((_BYTE *)a2 + 116); + result = *((unsigned __int8 *)a2 + 117); + *(_DWORD *)(this + 120) = 0; + *(_BYTE *)(this + 117) = result; + return result; +} +// 527B3E: variable 'v5' is possibly undefined + +//----- (00527B80) -------------------------------------------------------- +void __thiscall std::ios::swap(int this, std::ios_base *a2) +{ + int v3; // eax + char v4; // dl + char v5; // dl + std::ios_base *v6; // [esp+4h] [ebp-58h] + + std::ios_base::_M_swap((std::ios_base *)this, a2, v6); + std::ios::_M_cache_locale((_DWORD *)this, this + 108); + std::ios::_M_cache_locale(a2, (int)a2 + 108); + v3 = *(_DWORD *)(this + 112); + *(_DWORD *)(this + 112) = *((_DWORD *)a2 + 28); + *((_DWORD *)a2 + 28) = v3; + v4 = *(_BYTE *)(this + 116); + *(_BYTE *)(this + 116) = *((_BYTE *)a2 + 116); + LOBYTE(v3) = *((_BYTE *)a2 + 117); + *((_BYTE *)a2 + 116) = v4; + v5 = *(_BYTE *)(this + 117); + *(_BYTE *)(this + 117) = v3; + *((_BYTE *)a2 + 117) = v5; +} +// 527BAD: variable 'v6' is possibly undefined + +//----- (00527C20) -------------------------------------------------------- +int __thiscall std::ios::clear(_DWORD *this, int a2) +{ + int v2; // eax + int result; // eax + + v2 = a2; + if ( !this[30] ) + v2 = a2 | 1; + this[5] = v2; + result = this[4] & v2; + if ( result ) + std::__throw_ios_failure("basic_ios::clear"); + return result; +} + +//----- (00527C60) -------------------------------------------------------- +volatile signed __int32 **__thiscall std::ios::imbue( + volatile signed __int32 **this, + volatile signed __int32 **a2, + volatile signed __int32 **a3) +{ + volatile signed __int32 *v3; // edx + const std::locale *v5; // [esp+4h] [ebp-64h] + const std::locale *v6; // [esp+4h] [ebp-64h] + volatile signed __int32 **v7; // [esp+10h] [ebp-58h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + _DWORD *v10[3]; // [esp+5Ch] [ebp-Ch] BYREF + + std::locale::locale(this, a2 + 27, v5); + std::ios_base::imbue((volatile signed __int32 **)v10, a2, a3); + std::locale::~locale(v10); + std::ios::_M_cache_locale(a2, (int)a3); + v3 = a2[30]; + if ( v3 ) + { + lpuexcpt = (struct _Unwind_Exception *)a2[30]; + v7 = (volatile signed __int32 **)(v3 + 7); + std::locale::locale((volatile signed __int32 **)v10, (volatile signed __int32 **)v3 + 7, v6); + (*(void (__thiscall **)(struct _Unwind_Exception *, volatile signed __int32 **))(*(_DWORD *)lpuexcpt + 8))( + lpuexcpt, + a3); + std::locale::operator=(v7, a3); + std::locale::~locale(v10); + } + return this; +} +// 527C9B: variable 'v5' is possibly undefined +// 527CF4: variable 'v6' is possibly undefined + +//----- (00527D80) -------------------------------------------------------- +int __thiscall std::ios::rdbuf(_DWORD *this, int a2) +{ + int v2; // edx + + v2 = this[30]; + this[30] = a2; + this[5] = a2 == 0; + if ( (this[4] & (a2 == 0)) != 0 ) + std::__throw_ios_failure("basic_ios::clear"); + return v2; +} + +//----- (00527DC0) -------------------------------------------------------- +int __thiscall std::ios::copyfmt(int this, _DWORD *a2) +{ + _DWORD *v3; // esi + int v4; // eax + _DWORD *v5; // edx + void *v6; // ebp + int v7; // edi + void *Block; // eax + _DWORD *v9; // edx + int v10; // ebp + int v11; // ecx + int v12; // eax + int v13; // esi + int v14; // eax + bool v15; // zf + char v16; // dl + int v17; // eax + int v18; // ecx + int v19; // edx + _DWORD *v21; // eax + int v22; // ecx + _BYTE *v24; // edi + _BYTE *v25; // edi + int (__stdcall *v26)(unsigned __int8); // eax + int (__stdcall *v27)(unsigned __int8); // eax + const std::locale *v28; // [esp+4h] [ebp-48h] + _DWORD *v29; // [esp+1Ch] [ebp-30h] + _DWORD *v30; // [esp+1Ch] [ebp-30h] + unsigned __int8 v31; // [esp+1Ch] [ebp-30h] + _DWORD *v32[8]; // [esp+2Ch] [ebp-20h] BYREF + + v3 = a2; + if ( (_DWORD *)this == a2 ) + return this; + v4 = a2[25]; + if ( v4 > 8 ) + { + if ( v4 > 0xFFFFFFF ) + __cxa_throw_bad_array_new_length(); + v6 = (void *)(this + 36); + v21 = (_DWORD *)operator new[](8 * v4); + v5 = v21; + v22 = a2[25] - 1; + if ( v22 >= 0 ) + { + do + { + *v21 = 0; + v21 += 2; + *(v21 - 1) = 0; + } + while ( v22-- != 0 ); + } + } + else + { + v5 = (_DWORD *)(this + 36); + v6 = (void *)(this + 36); + } + v7 = a2[6]; + if ( v7 ) + { + if ( _CRT_MT ) + _InterlockedAdd((volatile signed __int32 *)(v7 + 12), 1u); + else + ++*(_DWORD *)(v7 + 12); + } + v29 = v5; + std::ios_base::_M_call_callbacks((_DWORD *)this, 0); + Block = *(void **)(this + 104); + v9 = v29; + if ( Block != v6 ) + { + if ( Block ) + { + operator delete[](Block); + v9 = v29; + } + *(_DWORD *)(this + 104) = 0; + } + v30 = v9; + std::ios_base::_M_dispose_callbacks(this); + v10 = a2[25]; + *(_DWORD *)(this + 24) = v7; + if ( v10 > 0 ) + { + v11 = a2[26]; + v12 = 0; + do + { + v13 = *(_DWORD *)(v11 + v12 * 4 + 4); + v30[v12] = *(_DWORD *)(v11 + v12 * 4); + v30[v12 + 1] = v13; + v12 += 2; + } + while ( v12 != 2 * v10 ); + v3 = a2; + } + v14 = v3[3]; + v15 = *((_BYTE *)v3 + 117) == 0; + *(_DWORD *)(this + 104) = v30; + *(_DWORD *)(this + 100) = v10; + *(_DWORD *)(this + 12) = v14; + *(_DWORD *)(this + 8) = v3[2]; + *(_DWORD *)(this + 4) = v3[1]; + *(_DWORD *)(this + 112) = v3[28]; + if ( v15 ) + { + v24 = (_BYTE *)v3[31]; + if ( !v24 ) + goto LABEL_38; + if ( v24[28] ) + { + v16 = v24[61]; + } + else + { + std::ctype::_M_widen_init(v3[31]); + v16 = 32; + v27 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v24 + 24); + if ( v27 != std::ctype::do_widen ) + v16 = ((int (__fastcall *)(_BYTE *, int, int))v27)(v24, 32, 32); + } + *((_BYTE *)v3 + 116) = v16; + *((_BYTE *)v3 + 117) = 1; + if ( *(_BYTE *)(this + 117) ) + goto LABEL_17; +LABEL_29: + v25 = *(_BYTE **)(this + 124); + if ( v25 ) + { + if ( !v25[28] ) + { + v31 = v16; + std::ctype::_M_widen_init(*(_DWORD *)(this + 124)); + v16 = v31; + v26 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v25 + 24); + if ( v26 != std::ctype::do_widen ) + { + ((void (__fastcall *)(_BYTE *, _DWORD, int))v26)(v25, v31, 32); + v16 = v31; + } + } + *(_BYTE *)(this + 117) = 1; + goto LABEL_17; + } +LABEL_38: + std::__throw_bad_cast(); + } + v16 = *((_BYTE *)v3 + 116); + if ( !*(_BYTE *)(this + 117) ) + goto LABEL_29; +LABEL_17: + *(_BYTE *)(this + 116) = v16; + std::locale::locale((volatile signed __int32 **)v32, (volatile signed __int32 **)v3 + 27, v28); + std::locale::operator=((volatile signed __int32 **)(this + 108), (volatile signed __int32 **)v32); + std::locale::~locale(v32); + std::ios::_M_cache_locale((_DWORD *)this, this + 108); + std::ios_base::_M_call_callbacks((_DWORD *)this, 2); + v17 = v3[4]; + v18 = *(_DWORD *)(this + 120); + v19 = *(_DWORD *)(this + 20); + *(_DWORD *)(this + 16) = v17; + if ( !v18 ) + { + v19 |= 1u; + *(_DWORD *)(this + 20) = v19; + } + if ( (v17 & v19) != 0 ) + std::__throw_ios_failure("basic_ios::clear"); + return this; +} +// 527ECD: variable 'v28' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (00528060) -------------------------------------------------------- +int __thiscall std::ios::setstate(_DWORD *this, int a2) +{ + int v2; // eax + int result; // eax + + v2 = this[5] | a2; + if ( !this[30] ) + v2 |= 1u; + this[5] = v2; + result = this[4] & v2; + if ( result ) + std::__throw_ios_failure("basic_ios::clear"); + return result; +} + +//----- (005280A0) -------------------------------------------------------- +int __thiscall std::ios::set_rdbuf(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + this[30] = a2; + return result; +} + +//----- (005280B0) -------------------------------------------------------- +void __thiscall std::ios::basic_ios(int this, int a2) +{ + std::ios_base::ios_base((_DWORD *)this); + *(_WORD *)(this + 116) = 0; + *(_DWORD *)this = &off_560E20; + *(_DWORD *)(this + 112) = 0; + *(_DWORD *)(this + 120) = 0; + *(_DWORD *)(this + 124) = 0; + *(_DWORD *)(this + 128) = 0; + *(_DWORD *)(this + 132) = 0; + std::ios_base::_M_init(this); + std::ios::_M_cache_locale((_DWORD *)this, this + 108); + *(_WORD *)(this + 116) = 0; + *(_DWORD *)(this + 112) = 0; + *(_DWORD *)(this + 120) = a2; + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 20) = a2 == 0; +} +// 560E20: using guessed type int (*off_560E20)(); + +//----- (005281A0) -------------------------------------------------------- +int __fastcall std::ios::basic_ios(int a1) +{ + int result; // eax + + std::ios_base::ios_base((_DWORD *)a1); + result = 0; + *(_DWORD *)a1 = &off_560E20; + *(_DWORD *)(a1 + 112) = 0; + *(_WORD *)(a1 + 116) = 0; + *(_DWORD *)(a1 + 120) = 0; + *(_DWORD *)(a1 + 124) = 0; + *(_DWORD *)(a1 + 128) = 0; + *(_DWORD *)(a1 + 132) = 0; + return result; +} +// 560E20: using guessed type int (*off_560E20)(); + +//----- (005281F0) -------------------------------------------------------- +void __thiscall std::ios::basic_ios(int this, int a2) +{ + std::ios_base::ios_base((_DWORD *)this); + *(_WORD *)(this + 116) = 0; + *(_DWORD *)this = &off_560E20; + *(_DWORD *)(this + 112) = 0; + *(_DWORD *)(this + 120) = 0; + *(_DWORD *)(this + 124) = 0; + *(_DWORD *)(this + 128) = 0; + *(_DWORD *)(this + 132) = 0; + std::ios_base::_M_init(this); + std::ios::_M_cache_locale((_DWORD *)this, this + 108); + *(_WORD *)(this + 116) = 0; + *(_DWORD *)(this + 112) = 0; + *(_DWORD *)(this + 120) = a2; + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 20) = a2 == 0; +} +// 560E20: using guessed type int (*off_560E20)(); + +//----- (005282E0) -------------------------------------------------------- +int __fastcall std::ios::basic_ios(int a1) +{ + int result; // eax + + std::ios_base::ios_base((_DWORD *)a1); + result = 0; + *(_DWORD *)a1 = &off_560E20; + *(_DWORD *)(a1 + 112) = 0; + *(_WORD *)(a1 + 116) = 0; + *(_DWORD *)(a1 + 120) = 0; + *(_DWORD *)(a1 + 124) = 0; + *(_DWORD *)(a1 + 128) = 0; + *(_DWORD *)(a1 + 132) = 0; + return result; +} +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00528330) -------------------------------------------------------- +void __fastcall std::ios::~ios(_DWORD *Block) +{ + *Block = &off_560E20; + std::ios_base::~ios_base((int)Block); + operator delete(Block); +} +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00528350) -------------------------------------------------------- +void __fastcall std::ios::~ios(int a1) +{ + *(_DWORD *)a1 = &off_560E20; + std::ios_base::~ios_base(a1); +} +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00528360) -------------------------------------------------------- +void __fastcall std::ios::~ios(int a1) +{ + *(_DWORD *)a1 = &off_560E20; + std::ios_base::~ios_base(a1); +} +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00528370) -------------------------------------------------------- +int __thiscall std::wios::exceptions(_DWORD *this, int a2) +{ + bool v2; // zf + int v3; // edx + int result; // eax + + v2 = this[30] == 0; + v3 = this[5]; + result = a2; + this[4] = a2; + if ( v2 ) + { + v3 |= 1u; + this[5] = v3; + } + if ( (v3 & a2) != 0 ) + std::__throw_ios_failure("basic_ios::clear"); + return result; +} + +//----- (005283B0) -------------------------------------------------------- +int __thiscall std::wios::_M_setstate(_DWORD *this, int a2) +{ + int result; // eax + + this[5] |= a2; + result = this[4] & a2; + if ( result ) + __cxa_rethrow(); + return result; +} + +//----- (005283D0) -------------------------------------------------------- +void *__thiscall std::wios::_M_cache_locale(_DWORD *this, int a2) +{ + void *result; // eax + + if ( (unsigned __int8)std::has_facet>(a2) ) + { + this[31] = std::use_facet>(a2); + if ( (unsigned __int8)std::has_facet>>(a2) ) + goto LABEL_3; +LABEL_6: + this[32] = 0; + result = (void *)std::has_facet>>(a2); + if ( (_BYTE)result ) + goto LABEL_4; + goto LABEL_7; + } + this[31] = 0; + if ( !(unsigned __int8)std::has_facet>>(a2) ) + goto LABEL_6; +LABEL_3: + this[32] = std::use_facet>>(a2); + result = (void *)std::has_facet>>(a2); + if ( (_BYTE)result ) + { +LABEL_4: + result = std::use_facet>>(a2); + this[33] = result; + return result; + } +LABEL_7: + this[33] = 0; + return result; +} + +//----- (00528470) -------------------------------------------------------- +int __thiscall std::wios::tie(_DWORD *this, int a2) +{ + int result; // eax + + result = this[28]; + this[28] = a2; + return result; +} + +//----- (00528480) -------------------------------------------------------- +int __thiscall std::wios::fill(int this, __int16 a2) +{ + int result; // eax + int v4; // ecx + + if ( *(_BYTE *)(this + 118) ) + { + result = *(unsigned __int16 *)(this + 116); + *(_WORD *)(this + 116) = a2; + } + else + { + v4 = *(_DWORD *)(this + 124); + if ( !v4 ) + std::__throw_bad_cast(); + result = (*(int (__thiscall **)(int, int))(*(_DWORD *)v4 + 40))(v4, 32); + *(_WORD *)(this + 116) = a2; + *(_BYTE *)(this + 118) = 1; + } + return result; +} + +//----- (005284E0) -------------------------------------------------------- +BOOL __thiscall std::wios::init(int this, int a2) +{ + BOOL result; // eax + + std::ios_base::_M_init(this); + std::wios::_M_cache_locale((_DWORD *)this, this + 108); + *(_DWORD *)(this + 120) = a2; + *(_WORD *)(this + 116) = 0; + result = a2 == 0; + *(_BYTE *)(this + 118) = 0; + *(_DWORD *)(this + 112) = 0; + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 20) = result; + return result; +} + +//----- (00528530) -------------------------------------------------------- +int __thiscall std::wios::move(int this, std::ios_base *a2) +{ + int v3; // eax + int result; // eax + std::ios_base *v5; // [esp+4h] [ebp-18h] + + std::ios_base::_M_move(this, a2, v5); + std::wios::_M_cache_locale((_DWORD *)this, this + 108); + v3 = *((_DWORD *)a2 + 28); + *((_DWORD *)a2 + 28) = 0; + *(_DWORD *)(this + 112) = v3; + *(_WORD *)(this + 116) = *((_WORD *)a2 + 58); + result = *((unsigned __int8 *)a2 + 118); + *(_DWORD *)(this + 120) = 0; + *(_BYTE *)(this + 118) = result; + return result; +} +// 52853E: variable 'v5' is possibly undefined + +//----- (00528590) -------------------------------------------------------- +int __thiscall std::wios::move(int this, std::ios_base *a2) +{ + int v3; // eax + int result; // eax + std::ios_base *v5; // [esp+4h] [ebp-18h] + + std::ios_base::_M_move(this, a2, v5); + std::wios::_M_cache_locale((_DWORD *)this, this + 108); + v3 = *((_DWORD *)a2 + 28); + *((_DWORD *)a2 + 28) = 0; + *(_DWORD *)(this + 112) = v3; + *(_WORD *)(this + 116) = *((_WORD *)a2 + 58); + result = *((unsigned __int8 *)a2 + 118); + *(_DWORD *)(this + 120) = 0; + *(_BYTE *)(this + 118) = result; + return result; +} +// 52859E: variable 'v5' is possibly undefined + +//----- (005285F0) -------------------------------------------------------- +void __thiscall std::wios::swap(int this, std::ios_base *a2) +{ + int v3; // eax + __int16 v4; // dx + std::ios_base *v5; // [esp+4h] [ebp-58h] + + std::ios_base::_M_swap((std::ios_base *)this, a2, v5); + std::wios::_M_cache_locale((_DWORD *)this, this + 108); + std::wios::_M_cache_locale(a2, (int)a2 + 108); + v3 = *(_DWORD *)(this + 112); + *(_DWORD *)(this + 112) = *((_DWORD *)a2 + 28); + v4 = *((_WORD *)a2 + 58); + *((_DWORD *)a2 + 28) = v3; + LOWORD(v3) = *(_WORD *)(this + 116); + *(_WORD *)(this + 116) = v4; + LOBYTE(v4) = *(_BYTE *)(this + 118); + *((_WORD *)a2 + 58) = v3; + *(_BYTE *)(this + 118) = *((_BYTE *)a2 + 118); + *((_BYTE *)a2 + 118) = v4; +} +// 52861D: variable 'v5' is possibly undefined + +//----- (00528690) -------------------------------------------------------- +int __thiscall std::wios::clear(_DWORD *this, int a2) +{ + int v2; // eax + int result; // eax + + v2 = a2; + if ( !this[30] ) + v2 = a2 | 1; + this[5] = v2; + result = this[4] & v2; + if ( result ) + std::__throw_ios_failure("basic_ios::clear"); + return result; +} + +//----- (005286D0) -------------------------------------------------------- +volatile signed __int32 **__thiscall std::wios::imbue( + volatile signed __int32 **this, + volatile signed __int32 **a2, + volatile signed __int32 **a3) +{ + volatile signed __int32 *v3; // edx + const std::locale *v5; // [esp+4h] [ebp-64h] + const std::locale *v6; // [esp+4h] [ebp-64h] + volatile signed __int32 **v7; // [esp+10h] [ebp-58h] + struct _Unwind_Exception *lpuexcpt; // [esp+14h] [ebp-54h] + _DWORD *v10[3]; // [esp+5Ch] [ebp-Ch] BYREF + + std::locale::locale(this, a2 + 27, v5); + std::ios_base::imbue((volatile signed __int32 **)v10, a2, a3); + std::locale::~locale(v10); + std::wios::_M_cache_locale(a2, (int)a3); + v3 = a2[30]; + if ( v3 ) + { + lpuexcpt = (struct _Unwind_Exception *)a2[30]; + v7 = (volatile signed __int32 **)(v3 + 7); + std::locale::locale((volatile signed __int32 **)v10, (volatile signed __int32 **)v3 + 7, v6); + (*(void (__thiscall **)(struct _Unwind_Exception *, volatile signed __int32 **))(*(_DWORD *)lpuexcpt + 8))( + lpuexcpt, + a3); + std::locale::operator=(v7, a3); + std::locale::~locale(v10); + } + return this; +} +// 52870B: variable 'v5' is possibly undefined +// 528764: variable 'v6' is possibly undefined + +//----- (005287F0) -------------------------------------------------------- +int __thiscall std::wios::rdbuf(_DWORD *this, int a2) +{ + int v2; // edx + + v2 = this[30]; + this[30] = a2; + this[5] = a2 == 0; + if ( (this[4] & (a2 == 0)) != 0 ) + std::__throw_ios_failure("basic_ios::clear"); + return v2; +} + +//----- (00528830) -------------------------------------------------------- +int __thiscall std::wios::copyfmt(int this, _DWORD *a2) +{ + _DWORD *v3; // esi + int v4; // eax + _DWORD *v5; // edx + void *v6; // ebp + int v7; // edi + void *Block; // eax + _DWORD *v9; // edx + int v10; // ebp + int v11; // ecx + int v12; // eax + int v13; // esi + int v14; // eax + bool v15; // zf + __int16 v16; // di + int v17; // eax + int v18; // ecx + int v19; // edx + _DWORD *v21; // eax + int v22; // ecx + int v23; // ecx + __int16 v24; // ax + int v25; // ecx + const std::locale *v26; // [esp+8h] [ebp-48h] + _DWORD *v27; // [esp+20h] [ebp-30h] + _DWORD *v28; // [esp+20h] [ebp-30h] + _DWORD *v29[8]; // [esp+30h] [ebp-20h] BYREF + + v3 = a2; + if ( (_DWORD *)this == a2 ) + return this; + v4 = a2[25]; + if ( v4 > 8 ) + { + if ( v4 > 0xFFFFFFF ) + __cxa_throw_bad_array_new_length(); + v6 = (void *)(this + 36); + v21 = (_DWORD *)operator new[](8 * v4); + v5 = v21; + v22 = a2[25] - 1; + if ( v22 >= 0 ) + { + do + { + --v22; + *v21 = 0; + v21 += 2; + *(v21 - 1) = 0; + } + while ( v22 != -1 ); + } + } + else + { + v5 = (_DWORD *)(this + 36); + v6 = (void *)(this + 36); + } + v7 = a2[6]; + if ( v7 ) + { + if ( _CRT_MT ) + _InterlockedAdd((volatile signed __int32 *)(v7 + 12), 1u); + else + ++*(_DWORD *)(v7 + 12); + } + v27 = v5; + std::ios_base::_M_call_callbacks((_DWORD *)this, 0); + Block = *(void **)(this + 104); + v9 = v27; + if ( Block != v6 ) + { + if ( Block ) + { + operator delete[](Block); + v9 = v27; + } + *(_DWORD *)(this + 104) = 0; + } + v28 = v9; + std::ios_base::_M_dispose_callbacks(this); + v10 = a2[25]; + *(_DWORD *)(this + 24) = v7; + if ( v10 > 0 ) + { + v11 = a2[26]; + v12 = 0; + do + { + v13 = *(_DWORD *)(v11 + v12 * 4 + 4); + v28[v12] = *(_DWORD *)(v11 + v12 * 4); + v28[v12 + 1] = v13; + v12 += 2; + } + while ( v12 != 2 * v10 ); + v3 = a2; + } + v14 = v3[3]; + v15 = *((_BYTE *)v3 + 118) == 0; + *(_DWORD *)(this + 104) = v28; + *(_DWORD *)(this + 100) = v10; + *(_DWORD *)(this + 12) = v14; + *(_DWORD *)(this + 8) = v3[2]; + *(_DWORD *)(this + 4) = v3[1]; + *(_DWORD *)(this + 112) = v3[28]; + if ( v15 ) + { + v23 = v3[31]; + if ( !v23 ) + goto LABEL_30; + v24 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v23 + 40))(v23, 32); + *((_BYTE *)v3 + 118) = 1; + v15 = *(_BYTE *)(this + 118) == 0; + *((_WORD *)v3 + 58) = v24; + v16 = v24; + if ( !v15 ) + goto LABEL_17; +LABEL_27: + v25 = *(_DWORD *)(this + 124); + if ( v25 ) + { + (*(void (__thiscall **)(int, int))(*(_DWORD *)v25 + 40))(v25, 32); + *(_BYTE *)(this + 118) = 1; + goto LABEL_17; + } +LABEL_30: + std::__throw_bad_cast(); + } + v16 = *((_WORD *)v3 + 58); + if ( !*(_BYTE *)(this + 118) ) + goto LABEL_27; +LABEL_17: + *(_WORD *)(this + 116) = v16; + std::locale::locale((volatile signed __int32 **)v29, (volatile signed __int32 **)v3 + 27, v26); + std::locale::operator=((volatile signed __int32 **)(this + 108), (volatile signed __int32 **)v29); + std::locale::~locale(v29); + std::wios::_M_cache_locale((_DWORD *)this, this + 108); + std::ios_base::_M_call_callbacks((_DWORD *)this, 2); + v17 = v3[4]; + v18 = *(_DWORD *)(this + 120); + v19 = *(_DWORD *)(this + 20); + *(_DWORD *)(this + 16) = v17; + if ( !v18 ) + { + v19 |= 1u; + *(_DWORD *)(this + 20) = v19; + } + if ( (v19 & v17) != 0 ) + std::__throw_ios_failure("basic_ios::clear"); + return this; +} +// 52893E: variable 'v26' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (00528A70) -------------------------------------------------------- +int __thiscall std::wios::setstate(_DWORD *this, int a2) +{ + int v2; // eax + int result; // eax + + v2 = this[5] | a2; + if ( !this[30] ) + v2 |= 1u; + this[5] = v2; + result = this[4] & v2; + if ( result ) + std::__throw_ios_failure("basic_ios::clear"); + return result; +} + +//----- (00528AB0) -------------------------------------------------------- +int __thiscall std::wios::set_rdbuf(_DWORD *this, int a2) +{ + int result; // eax + + result = a2; + this[30] = a2; + return result; +} + +//----- (00528AC0) -------------------------------------------------------- +void __thiscall std::wios::basic_ios(int this, int a2) +{ + std::ios_base::ios_base((_DWORD *)this); + *(_WORD *)(this + 116) = 0; + *(_DWORD *)this = &off_560E30; + *(_DWORD *)(this + 112) = 0; + *(_BYTE *)(this + 118) = 0; + *(_DWORD *)(this + 120) = 0; + *(_DWORD *)(this + 124) = 0; + *(_DWORD *)(this + 128) = 0; + *(_DWORD *)(this + 132) = 0; + std::ios_base::_M_init(this); + std::wios::_M_cache_locale((_DWORD *)this, this + 108); + *(_WORD *)(this + 116) = 0; + *(_BYTE *)(this + 118) = 0; + *(_DWORD *)(this + 120) = a2; + *(_DWORD *)(this + 112) = 0; + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 20) = a2 == 0; +} +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00528BB0) -------------------------------------------------------- +int __fastcall std::wios::basic_ios(int a1) +{ + int result; // eax + + std::ios_base::ios_base((_DWORD *)a1); + result = 0; + *(_DWORD *)a1 = &off_560E30; + *(_DWORD *)(a1 + 112) = 0; + *(_WORD *)(a1 + 116) = 0; + *(_BYTE *)(a1 + 118) = 0; + *(_DWORD *)(a1 + 120) = 0; + *(_DWORD *)(a1 + 124) = 0; + *(_DWORD *)(a1 + 128) = 0; + *(_DWORD *)(a1 + 132) = 0; + return result; +} +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00528C00) -------------------------------------------------------- +void __thiscall std::wios::basic_ios(int this, int a2) +{ + std::ios_base::ios_base((_DWORD *)this); + *(_WORD *)(this + 116) = 0; + *(_DWORD *)this = &off_560E30; + *(_DWORD *)(this + 112) = 0; + *(_BYTE *)(this + 118) = 0; + *(_DWORD *)(this + 120) = 0; + *(_DWORD *)(this + 124) = 0; + *(_DWORD *)(this + 128) = 0; + *(_DWORD *)(this + 132) = 0; + std::ios_base::_M_init(this); + std::wios::_M_cache_locale((_DWORD *)this, this + 108); + *(_WORD *)(this + 116) = 0; + *(_BYTE *)(this + 118) = 0; + *(_DWORD *)(this + 120) = a2; + *(_DWORD *)(this + 112) = 0; + *(_DWORD *)(this + 16) = 0; + *(_DWORD *)(this + 20) = a2 == 0; +} +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00528CF0) -------------------------------------------------------- +int __fastcall std::wios::basic_ios(int a1) +{ + int result; // eax + + std::ios_base::ios_base((_DWORD *)a1); + result = 0; + *(_DWORD *)a1 = &off_560E30; + *(_DWORD *)(a1 + 112) = 0; + *(_WORD *)(a1 + 116) = 0; + *(_BYTE *)(a1 + 118) = 0; + *(_DWORD *)(a1 + 120) = 0; + *(_DWORD *)(a1 + 124) = 0; + *(_DWORD *)(a1 + 128) = 0; + *(_DWORD *)(a1 + 132) = 0; + return result; +} +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00528D40) -------------------------------------------------------- +void __fastcall std::wios::~wios(_DWORD *Block) +{ + *Block = &off_560E30; + std::ios_base::~ios_base((int)Block); + operator delete(Block); +} +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00528D60) -------------------------------------------------------- +void __fastcall std::wios::~wios(int a1) +{ + *(_DWORD *)a1 = &off_560E30; + std::ios_base::~ios_base(a1); +} +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00528D70) -------------------------------------------------------- +void __fastcall std::wios::~wios(int a1) +{ + *(_DWORD *)a1 = &off_560E30; + std::ios_base::~ios_base(a1); +} +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00528D80) -------------------------------------------------------- +void __fastcall std::exception::~exception(void *Block) +{ + operator delete(Block); +} + +//----- (00528DB0) -------------------------------------------------------- +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560E54; + result = a2 != 0; + this[1] = result; + return result; +} +// 560E54: using guessed type int (*off_560E54)(); + +//----- (00528DD0) -------------------------------------------------------- +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560E54; + result = a2 != 0; + this[1] = result; + return result; +} +// 560E54: using guessed type int (*off_560E54)(); + +//----- (00528DF0) -------------------------------------------------------- +void __fastcall std::money_get>::~money_get(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560E54; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 528DFC: variable 'Blocka' is possibly undefined +// 560E54: using guessed type int (*off_560E54)(); + +//----- (00528E10) -------------------------------------------------------- +void __cdecl std::money_get>::~money_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560E54; + std::locale::facet::~facet(a1); +} +// 528E10: variable 'v1' is possibly undefined +// 560E54: using guessed type int (*off_560E54)(); + +//----- (00528E20) -------------------------------------------------------- +void __cdecl std::money_get>::~money_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560E54; + std::locale::facet::~facet(a1); +} +// 528E20: variable 'v1' is possibly undefined +// 560E54: using guessed type int (*off_560E54)(); + +//----- (00528E30) -------------------------------------------------------- +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560E6C; + result = a2 != 0; + this[1] = result; + return result; +} +// 560E6C: using guessed type int (*off_560E6C)(); + +//----- (00528E50) -------------------------------------------------------- +BOOL __thiscall std::money_get>::money_get(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560E6C; + result = a2 != 0; + this[1] = result; + return result; +} +// 560E6C: using guessed type int (*off_560E6C)(); + +//----- (00528E70) -------------------------------------------------------- +void __fastcall std::money_get>::~money_get(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560E6C; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 528E7C: variable 'Blocka' is possibly undefined +// 560E6C: using guessed type int (*off_560E6C)(); + +//----- (00528E90) -------------------------------------------------------- +void __cdecl std::money_get>::~money_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560E6C; + std::locale::facet::~facet(a1); +} +// 528E90: variable 'v1' is possibly undefined +// 560E6C: using guessed type int (*off_560E6C)(); + +//----- (00528EA0) -------------------------------------------------------- +void __cdecl std::money_get>::~money_get(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560E6C; + std::locale::facet::~facet(a1); +} +// 528EA0: variable 'v1' is possibly undefined +// 560E6C: using guessed type int (*off_560E6C)(); + +//----- (00528EB0) -------------------------------------------------------- +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560E84; + result = a2 != 0; + this[1] = result; + return result; +} +// 560E84: using guessed type int (*off_560E84)(); + +//----- (00528ED0) -------------------------------------------------------- +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560E84; + result = a2 != 0; + this[1] = result; + return result; +} +// 560E84: using guessed type int (*off_560E84)(); + +//----- (00528EF0) -------------------------------------------------------- +void __fastcall std::money_put>::~money_put(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560E84; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 528EFC: variable 'Blocka' is possibly undefined +// 560E84: using guessed type int (*off_560E84)(); + +//----- (00528F10) -------------------------------------------------------- +void __cdecl std::money_put>::~money_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560E84; + std::locale::facet::~facet(a1); +} +// 528F10: variable 'v1' is possibly undefined +// 560E84: using guessed type int (*off_560E84)(); + +//----- (00528F20) -------------------------------------------------------- +void __cdecl std::money_put>::~money_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560E84; + std::locale::facet::~facet(a1); +} +// 528F20: variable 'v1' is possibly undefined +// 560E84: using guessed type int (*off_560E84)(); + +//----- (00528F30) -------------------------------------------------------- +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560E9C; + result = a2 != 0; + this[1] = result; + return result; +} +// 560E9C: using guessed type int (*off_560E9C)(); + +//----- (00528F50) -------------------------------------------------------- +BOOL __thiscall std::money_put>::money_put(_DWORD *this, int a2) +{ + BOOL result; // eax + + *this = &off_560E9C; + result = a2 != 0; + this[1] = result; + return result; +} +// 560E9C: using guessed type int (*off_560E9C)(); + +//----- (00528F70) -------------------------------------------------------- +void __fastcall std::money_put>::~money_put(_DWORD *Block) +{ + std::locale::facet *Blocka; // [esp+0h] [ebp-1Ch] + + *Block = &off_560E9C; + std::locale::facet::~facet(Blocka); + operator delete(Block); +} +// 528F7C: variable 'Blocka' is possibly undefined +// 560E9C: using guessed type int (*off_560E9C)(); + +//----- (00528F90) -------------------------------------------------------- +void __cdecl std::money_put>::~money_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560E9C; + std::locale::facet::~facet(a1); +} +// 528F90: variable 'v1' is possibly undefined +// 560E9C: using guessed type int (*off_560E9C)(); + +//----- (00528FA0) -------------------------------------------------------- +void __cdecl std::money_put>::~money_put(std::locale::facet *a1) +{ + _DWORD *v1; // ecx + + *v1 = &off_560E9C; + std::locale::facet::~facet(a1); +} +// 528FA0: variable 'v1' is possibly undefined +// 560E9C: using guessed type int (*off_560E9C)(); + +//----- (00528FB0) -------------------------------------------------------- +void __fastcall std::type_info::~type_info(void *Block) +{ + operator delete(Block); +} + +//----- (00528FE0) -------------------------------------------------------- +void __cdecl std::__pop_heap<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>( + int a1, + int a2, + unsigned __int8 **a3, + int (__cdecl **a4)(int, int)) +{ + void *v4[34]; // [esp+60h] [ebp-118h] BYREF + void *v5[36]; // [esp+E8h] [ebp-90h] BYREF + + std::pair::pair(v4, a3); + std::pair::operator=(a3, a1); + std::pair::pair(v5, v4); + std::__adjust_heap<__gnu_cxx::__normal_iterator *,std::vector>>,int,std::pair,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>( + a1, + 0, + -252645135 * ((a2 - a1) >> 3), + v5, + *a4); + std::pair::~pair(v5); + std::pair::~pair(v4); +} + +//----- (00529100) -------------------------------------------------------- +void __noreturn std::unexpected(void) +{ + __cxxabiv1::__unexpected(__cxxabiv1::__unexpected_handler); +} + +//----- (00529110) -------------------------------------------------------- +void __cdecl std::__make_heap<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>( + int a1, + int a2, + int (__cdecl **a3)(int, int)) +{ + int v3; // [esp+24h] [ebp-154h] + int lpuexcpt; // [esp+28h] [ebp-150h] + void *v5[34]; // [esp+60h] [ebp-118h] BYREF + void *v6[36]; // [esp+E8h] [ebp-90h] BYREF + + if ( a2 - a1 > 136 ) + { + v3 = -252645135 * ((a2 - a1) >> 3); + for ( lpuexcpt = (v3 - 2) / 2; ; --lpuexcpt ) + { + std::pair::pair(v5, (_DWORD *)(a1 + 136 * lpuexcpt)); + std::pair::pair(v6, v5); + std::__adjust_heap<__gnu_cxx::__normal_iterator *,std::vector>>,int,std::pair,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>( + a1, + lpuexcpt, + v3, + v6, + *a3); + std::pair::~pair(v6); + if ( !lpuexcpt ) + break; + std::pair::~pair(v5); + } + std::pair::~pair(v5); + } +} + +//----- (00529270) -------------------------------------------------------- +void __cdecl std::__adjust_heap<__gnu_cxx::__normal_iterator *,std::vector>>,int,std::pair,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>( + int a1, + int a2, + int a3, + _DWORD *a4, + int (__cdecl *a5)(int, int)) +{ + int i; // eax + bool v6; // zf + int v7; // eax + int v8; // eax + int v9; // [esp+24h] [ebp-D4h] + int v10; // [esp+24h] [ebp-D4h] + int v11; // [esp+24h] [ebp-D4h] + int lpuexcpt; // [esp+28h] [ebp-D0h] + void *v13[36]; // [esp+68h] [ebp-90h] BYREF + + for ( i = a2; ; i = v10 ) + { + lpuexcpt = i; + if ( (a3 - 1) / 2 <= i ) + break; + v9 = 2 * (i + 1); + v6 = (unsigned __int8)__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>::operator()<__gnu_cxx::__normal_iterator*,std::vector>>,__gnu_cxx::__normal_iterator*,std::vector>>>( + a5, + a1 + 272 * (i + 1), + a1 + 136 * (v9 - 1)) == 0; + v7 = v9 - 1; + if ( v6 ) + v7 = v9; + v10 = v7; + std::pair::operator=((unsigned __int8 **)(a1 + 136 * lpuexcpt), a1 + 136 * v7); + } + if ( (a3 & 1) == 0 && (a3 - 2) / 2 == i ) + { + std::pair::operator=((unsigned __int8 **)(a1 + 136 * i), a1 + 136 * (2 * i + 1)); + lpuexcpt = 2 * lpuexcpt + 1; + } + std::pair::pair(v13, a4); + v8 = lpuexcpt - 1; + while ( 1 ) + { + v11 = v8 / 2; + if ( a2 >= lpuexcpt || !((unsigned __int8 (__fastcall *)(int, int, int, void **))a5)(2, v8 % 2, a1 + 136 * v11, v13) ) + break; + std::pair::operator=((unsigned __int8 **)(a1 + 136 * lpuexcpt), a1 + 136 * v11); + v8 = v11 - 1; + lpuexcpt = v11; + } + std::pair::operator=((unsigned __int8 **)(a1 + 136 * lpuexcpt), (int)v13); + std::pair::~pair(v13); +} + +//----- (005294C0) -------------------------------------------------------- +int __cdecl std::__int_to_char(_BYTE *a1, unsigned int a2, int a3, __int16 a4, char a5) +{ + _BYTE *v6; // ebx + unsigned int v7; // eax + int v9; // eax + int v10; // eax + + if ( a5 ) + { + v6 = a1; + do + { + *--v6 = *(_BYTE *)(a3 + a2 % 0xA + 4); + v7 = a2; + a2 /= 0xAu; + } + while ( v7 > 9 ); + } + else if ( (a4 & 0x4A) == 64 ) + { + v6 = a1; + do + { + --v6; + v10 = a2 & 7; + a2 >>= 3; + *v6 = *(_BYTE *)(a3 + v10 + 4); + } + while ( a2 ); + } + else + { + v6 = a1; + do + { + --v6; + v9 = a2 & 0xF; + a2 >>= 4; + *v6 = *(_BYTE *)(a3 + ((a4 & 0x4000) == 0 ? 0xFFFFFFF0 : 0) + 20 + v9); + } + while ( a2 ); + } + return a1 - v6; +} + +//----- (00529570) -------------------------------------------------------- +int __cdecl std::__int_to_char( + _BYTE *a1, + unsigned int a2, + unsigned int a3, + int a4, + __int16 a5, + char a6) +{ + unsigned __int64 v6; // rdi + _BYTE *v7; // ebx + unsigned __int64 v8; // kr00_8 + char v10; // al + char v11; // al + unsigned __int64 v12; // [esp+18h] [ebp-24h] + + v6 = __PAIR64__(a2, a3); + if ( a6 ) + { + v7 = a1; + do + { + --v7; + v12 = __PAIR64__(v6, HIDWORD(v6)); + *v7 = *(_BYTE *)(a4 + __PAIR64__(v6, HIDWORD(v6)) % 0xA + 4); + v8 = __PAIR64__(v6, HIDWORD(v6)) / 0xA; + LODWORD(v6) = (__PAIR64__(v6, HIDWORD(v6)) / 0xA) >> 32; + HIDWORD(v6) = v8; + } + while ( v12 > 9 ); + } + else if ( (a5 & 0x4A) == 64 ) + { + v7 = a1; + do + { + v11 = BYTE4(v6); + HIDWORD(v6) = __PAIR64__(v6, HIDWORD(v6)) >> 3; + --v7; + LODWORD(v6) = (unsigned int)v6 >> 3; + *v7 = *(_BYTE *)(a4 + (v11 & 7) + 4); + } + while ( v6 ); + } + else + { + v7 = a1; + do + { + v10 = BYTE4(v6); + HIDWORD(v6) = __PAIR64__(v6, HIDWORD(v6)) >> 4; + --v7; + LODWORD(v6) = (unsigned int)v6 >> 4; + *v7 = *(_BYTE *)(a4 + ((a5 & 0x4000) == 0 ? 0xFFFFFFF0 : 0) + 20 + (v10 & 0xF)); + } + while ( v6 ); + } + return a1 - v7; +} + +//----- (00529670) -------------------------------------------------------- +int __cdecl std::__int_to_char(_WORD *a1, unsigned int a2, int a3, __int16 a4, char a5) +{ + _WORD *v6; // ebx + unsigned int v7; // eax + int v9; // eax + int v10; // eax + + if ( a5 ) + { + v6 = a1; + do + { + *--v6 = *(_WORD *)(a3 + 2 * (a2 % 0xA) + 8); + v7 = a2; + a2 /= 0xAu; + } + while ( v7 > 9 ); + } + else if ( (a4 & 0x4A) == 64 ) + { + v6 = a1; + do + { + --v6; + v10 = a2 & 7; + a2 >>= 3; + *v6 = *(_WORD *)(a3 + 2 * v10 + 8); + } + while ( a2 ); + } + else + { + v6 = a1; + do + { + --v6; + v9 = ((a4 & 0x4000) == 0 ? 4 : 20) + (a2 & 0xF); + a2 >>= 4; + *v6 = *(_WORD *)(a3 + 2 * v9); + } + while ( a2 ); + } + return a1 - v6; +} + +//----- (00529730) -------------------------------------------------------- +int __cdecl std::__int_to_char( + _WORD *a1, + unsigned int a2, + unsigned int a3, + int a4, + __int16 a5, + char a6) +{ + unsigned __int64 v6; // rdi + _WORD *v7; // ebx + unsigned __int64 v8; // kr00_8 + char v10; // al + char v11; // al + unsigned __int64 v12; // [esp+18h] [ebp-24h] + + v6 = __PAIR64__(a2, a3); + if ( a6 ) + { + v7 = a1; + do + { + --v7; + v12 = __PAIR64__(v6, HIDWORD(v6)); + *v7 = *(_WORD *)(a4 + 2 * (__PAIR64__(v6, HIDWORD(v6)) % 0xA) + 8); + v8 = __PAIR64__(v6, HIDWORD(v6)) / 0xA; + LODWORD(v6) = (__PAIR64__(v6, HIDWORD(v6)) / 0xA) >> 32; + HIDWORD(v6) = v8; + } + while ( v12 > 9 ); + } + else if ( (a5 & 0x4A) == 64 ) + { + v7 = a1; + do + { + v11 = BYTE4(v6); + HIDWORD(v6) = __PAIR64__(v6, HIDWORD(v6)) >> 3; + --v7; + LODWORD(v6) = (unsigned int)v6 >> 3; + *v7 = *(_WORD *)(a4 + 2 * (v11 & 7) + 8); + } + while ( v6 ); + } + else + { + v7 = a1; + do + { + v10 = BYTE4(v6); + HIDWORD(v6) = __PAIR64__(v6, HIDWORD(v6)) >> 4; + --v7; + LODWORD(v6) = (unsigned int)v6 >> 4; + *v7 = *(_WORD *)(a4 + 2 * (((a5 & 0x4000) == 0 ? 4 : 20) + (v10 & 0xF))); + } + while ( v6 ); + } + return a1 - v7; +} + +//----- (00529840) -------------------------------------------------------- +void (*std::get_terminate(void))(void) +{ + return __cxxabiv1::__terminate_handler; +} + +//----- (00529850) -------------------------------------------------------- +__int32 __cdecl std::set_terminate(void (__noreturn *a1)(void)) +{ + void (__noreturn *v1)(void); // eax + + v1 = a1; + if ( !a1 ) + v1 = __gnu_cxx::__verbose_terminate_handler; + return _InterlockedExchange((volatile __int32 *)&__cxxabiv1::__terminate_handler, (__int32)v1); +} + +//----- (00529870) -------------------------------------------------------- +_BYTE *__cdecl std::__add_grouping(_BYTE *a1, char a2, char *a3, int a4, _BYTE *a5, _BYTE *a6) +{ + _BYTE *v6; // edi + _BYTE *v7; // esi + _BYTE *v8; // edx + int v9; // ecx + unsigned int v10; // ebx + char *v11; // edi + int v12; // ebx + int v13; // ebp + _BYTE *result; // eax + _BYTE *v15; // edi + int v16; // ecx + _BYTE *v17; // esi + bool v18; // cf + _BYTE *v19; // edi + int v20; // ecx + _BYTE *v21; // esi + char *v22; // [esp+0h] [ebp-20h] + int v23; // [esp+8h] [ebp-18h] + unsigned int v24; // [esp+Ch] [ebp-14h] + _BYTE *v25; // [esp+38h] [ebp+18h] + + v6 = a1; + v7 = a5; + v8 = a6; + v9 = *a3; + if ( (unsigned __int8)(v9 - 1) > 0x7Du || a6 - a5 <= v9 ) + { + if ( a6 == a5 ) + return a1; + v12 = -1; + v13 = -1; + v23 = 0; + v24 = 0; + v22 = a3; + goto LABEL_10; + } + v23 = 0; + v10 = 0; + do + { + v8 -= v9; + if ( a4 - 1 > v10 ) + ++v10; + else + ++v23; + v11 = &a3[v10]; + v9 = a3[v10]; + } + while ( v8 - a5 > v9 && (unsigned __int8)(v9 - 1) <= 0x7Du ); + v24 = v10; + v12 = v10 - 1; + v22 = v11; + v6 = a1; + v13 = v23 - 1; + if ( a5 != v8 ) + { +LABEL_10: + result = &v6[v8 - a5]; + do + *v6++ = *v7++; + while ( v6 != result ); + goto LABEL_12; + } + result = a1; +LABEL_12: + if ( v23 ) + { + do + { + v15 = result + 1; + *result = a2; + v16 = (unsigned __int8)*v22; + if ( (char)v16 <= 0 ) + { + ++result; + } + else + { + result += (unsigned __int8)(v16 + 1); + v17 = v8; + do + *v15++ = *v17++; + while ( v15 != result ); + v8 += v16; + } + v18 = v13-- == 0; + } + while ( !v18 ); + } + if ( v24 ) + { + v25 = v8; + do + { + v19 = result + 1; + *result = a2; + v20 = (unsigned __int8)a3[v12]; + if ( (char)v20 <= 0 ) + { + ++result; + } + else + { + result += (unsigned __int8)(v20 + 1); + v21 = v25; + do + *v19++ = *v21++; + while ( v19 != result ); + v25 += v20; + } + v18 = v12-- == 0; + } + while ( !v18 ); + } + return result; +} + +//----- (00529A20) -------------------------------------------------------- +_WORD *__cdecl std::__add_grouping(_WORD *a1, __int16 a2, char *a3, int a4, char *a5, char *a6) +{ + char *v6; // edx + char *v7; // esi + _WORD *v8; // edi + int v9; // eax + unsigned int v10; // edi + unsigned int v11; // eax + int v12; // ebp + int v13; // ebx + _WORD *result; // eax + _WORD *v15; // edi + int v16; // ecx + char *v17; // esi + bool v18; // cf + _WORD *v19; // edi + int v20; // ecx + char *v21; // esi + char *v22; // [esp+0h] [ebp-20h] + int v23; // [esp+8h] [ebp-18h] + unsigned int v24; // [esp+Ch] [ebp-14h] + char *v25; // [esp+38h] [ebp+18h] + + v6 = a6; + v7 = a5; + v8 = a1; + v9 = *a3; + if ( (a6 - a5) >> 1 <= v9 || (unsigned __int8)(v9 - 1) > 0x7Du ) + { + if ( a6 == a5 ) + return a1; + v13 = -1; + v12 = -1; + v23 = 0; + v24 = 0; + v22 = a3; + goto LABEL_10; + } + v23 = 0; + v10 = 0; + do + { + v6 -= 2 * v9; + if ( a4 - 1 > v10 ) + ++v10; + else + ++v23; + v9 = a3[v10]; + } + while ( (v6 - a5) >> 1 > v9 && (unsigned __int8)(v9 - 1) <= 0x7Du ); + v11 = v10; + v24 = v10; + v22 = &a3[v10]; + v8 = a1; + v12 = v23 - 1; + v13 = v11 - 1; + if ( a5 != v6 ) + { +LABEL_10: + result = (_WORD *)((char *)v8 + v6 - a5); + do + { + *v8 = *(_WORD *)v7; + v7 += 2; + ++v8; + } + while ( v8 != result ); + goto LABEL_12; + } + result = a1; +LABEL_12: + if ( v23 ) + { + do + { + v15 = result + 1; + *result = a2; + v16 = (unsigned __int8)*v22; + if ( (char)v16 <= 0 ) + { + ++result; + } + else + { + result += (unsigned __int8)(v16 + 1); + v17 = v6; + do + { + *v15 = *(_WORD *)v17; + v17 += 2; + ++v15; + } + while ( v15 != result ); + v6 += 2 * v16; + } + v18 = v12-- == 0; + } + while ( !v18 ); + } + if ( v24 ) + { + v25 = v6; + do + { + v19 = result + 1; + *result = a2; + v20 = (unsigned __int8)a3[v13]; + if ( (char)v20 <= 0 ) + { + ++result; + } + else + { + result += (unsigned __int8)(v20 + 1); + v21 = v25; + do + { + *v19 = *(_WORD *)v21; + v21 += 2; + ++v19; + } + while ( v19 != result ); + v25 += 2 * v20; + } + v18 = v13-- == 0; + } + while ( !v18 ); + } + return result; +} + +//----- (00529BE0) -------------------------------------------------------- +void __cdecl std::__convert_to_v(unsigned __int8 *a1, double *a2, _DWORD *a3) +{ + long double v3; // fst7 + char *Locale; // [esp+10h] [ebp-5Ch] + char *Src; // [esp+14h] [ebp-58h] + unsigned int Size; // [esp+18h] [ebp-54h] + unsigned __int8 *v7; // [esp+5Ch] [ebp-10h] BYREF + + Src = setlocale(0, 0); + Size = strlen(Src) + 1; + Locale = (char *)operator new[](Size); + memcpy(Locale, Src, Size); + setlocale(0, "C"); + v3 = __mingw_strtod(a1, &v7); + *a2 = v3; + if ( v7 == a1 || *v7 ) + { + *a2 = 0.0; + *a3 = 4; + } + else if ( v3 < -1.797693134862316e308 || v3 > 1.797693134862316e308 ) + { + if ( v3 <= 0.0 ) + *a2 = -1.797693134862316e308; + else + *a2 = 1.797693134862316e308; + *a3 = 4; + } + setlocale(0, Locale); + operator delete[](Locale); +} + +//----- (00529D90) -------------------------------------------------------- +void __cdecl std::__convert_to_v(char *String, long double *a2, _DWORD *a3) +{ + long double v3; // fst7 + long double v4; // fst7 + char *Locale; // [esp+10h] [ebp-5Ch] + char *Src; // [esp+14h] [ebp-58h] + unsigned int Size; // [esp+18h] [ebp-54h] + char *EndPtr; // [esp+5Ch] [ebp-10h] BYREF + + Src = setlocale(0, 0); + Size = strlen(Src) + 1; + Locale = (char *)operator new[](Size); + memcpy(Locale, Src, Size); + setlocale(0, "C"); + v3 = strtold(String, &EndPtr); + *a2 = v3; + if ( EndPtr == String || *EndPtr ) + { + *a2 = 0.0; + *a3 = 4; + } + else if ( v3 < -1.189731495357231765e4932 || v3 > 1.189731495357231765e4932 ) + { + if ( v3 <= 0.0 ) + v4 = -1.189731495357231765e4932; + else + v4 = 1.189731495357231765e4932; + *a2 = v4; + *a3 = 4; + } + setlocale(0, Locale); + operator delete[](Locale); +} + +//----- (00529F20) -------------------------------------------------------- +void __cdecl std::__convert_to_v(unsigned __int8 *a1, float *a2, _DWORD *a3) +{ + long double v3; // fst7 + int v4; // eax + char *Locale; // [esp+10h] [ebp-5Ch] + char *Src; // [esp+14h] [ebp-58h] + unsigned int Size; // [esp+18h] [ebp-54h] + unsigned __int8 *v8; // [esp+5Ch] [ebp-10h] BYREF + + Src = setlocale(0, 0); + Size = strlen(Src) + 1; + Locale = (char *)operator new[](Size); + memcpy(Locale, Src, Size); + setlocale(0, "C"); + v3 = __mingw_strtof(a1, &v8); + *a2 = v3; + if ( v8 == a1 || *v8 ) + { + *a2 = 0.0; + *a3 = 4; + } + else if ( v3 < -3.4028235e38 || v3 > 3.4028235e38 ) + { + v4 = -8388609; + if ( v3 > 0.0 ) + v4 = 2139095039; + *(_DWORD *)a2 = v4; + *a3 = 4; + } + setlocale(0, Locale); + operator delete[](Locale); +} + +//----- (0052A0B0) -------------------------------------------------------- +void (*std::get_unexpected(void))(void) +{ + return __cxxabiv1::__unexpected_handler; +} + +//----- (0052A0C0) -------------------------------------------------------- +__int32 __cdecl std::set_unexpected(void (__noreturn *a1)(void)) +{ + void (__noreturn *v1)(void); // eax + + v1 = a1; + if ( !a1 ) + v1 = std::terminate; + return _InterlockedExchange((volatile __int32 *)&__cxxabiv1::__unexpected_handler, (__int32)v1); +} + +//----- (0052A0E0) -------------------------------------------------------- +int std::get_new_handler(void) +{ + return `anonymous namespace'::__new_handler; +} +// 53E498: using guessed type int `anonymous namespace'::__new_handler; + +//----- (0052A0F0) -------------------------------------------------------- +__int32 __cdecl std::set_new_handler(void (*a1)(void)) +{ + return _InterlockedExchange(&`anonymous namespace'::__new_handler, (__int32)a1); +} +// 53E498: using guessed type int `anonymous namespace'::__new_handler; + +//----- (0052A100) -------------------------------------------------------- +int std::__convert_from_v(int *const *a1, char *a2, int a3, char *a4, ...) +{ + char *v4; // ebx + unsigned int Size; // edi + void *Locale; // esi + int v8; // ebx + va_list va; // [esp+30h] [ebp+14h] BYREF + + va_start(va, a4); + v4 = setlocale(4, 0); + if ( *v4 == 67 && !v4[1] ) + return __mingw_vsnprintf((FILE *)a2, a3, a4, (int *)va); + Size = strlen(v4) + 1; + Locale = (void *)operator new[](Size); + memcpy(Locale, v4, Size); + setlocale(4, "C"); + v8 = __mingw_vsnprintf((FILE *)a2, a3, a4, (int *)va); + setlocale(4, (const char *)Locale); + operator delete[](Locale); + return v8; +} + +//----- (0052A1E0) -------------------------------------------------------- +void __cdecl std::__insertion_sort<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>( + unsigned __int8 **a1, + char *a2, + int (__cdecl *a3)(void **, struct _Unwind_Exception *)) +{ + char *i; // edi + char *v4; // esi + unsigned __int8 **v5; // eax + int v6; // edi + unsigned __int8 **v7; // [esp+1Ch] [ebp-ACh] + void *v8[40]; // [esp+28h] [ebp-A0h] BYREF + + if ( a2 != (char *)a1 ) + { + for ( i = (char *)(a1 + 34); i != a2; i = v4 ) + { + v4 = i + 136; + if ( (unsigned __int8)__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>::operator()<__gnu_cxx::__normal_iterator*,std::vector>>,__gnu_cxx::__normal_iterator*,std::vector>>>( + (int (__cdecl *)(int, int))a3, + (int)i, + (int)a1) ) + { + std::pair::pair(v8, i); + v5 = (unsigned __int8 **)(i + 136); + v6 = -252645135 * ((i - (char *)a1) >> 3); + while ( v6 > 0 ) + { + --v6; + v7 = v5 - 34; + std::pair::operator=(v5 - 34, (int)(v5 - 68)); + v5 = v7; + } + std::pair::operator=(a1, (int)v8); + std::pair::~pair(v8); + } + else + { + std::__unguarded_linear_insert<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Val_comp_iter const&,std::pair const&)>>( + i, + a3); + } + } + } +} + +//----- (0052A29C) -------------------------------------------------------- +int __cdecl std::__introsort_loop<__gnu_cxx::__normal_iterator *,std::vector>>,int,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>( + _DWORD *a1, + int a2, + int a3, + int (__cdecl *a4)(int, int)) +{ + int result; // eax + unsigned __int8 **i; // ebx + unsigned __int8 **v6; // eax + _DWORD *v7; // ebx + _DWORD *v8; // edi + char v9; // al + int v10; // ecx + _DWORD *v11; // edi + int v12; // ecx + char v13; // al + _DWORD *v14; // [esp+18h] [ebp-30h] + int v15; // [esp+18h] [ebp-30h] + int (__cdecl *v17)(int, int); // [esp+28h] [ebp-20h] BYREF + int (__cdecl *v18)(int, int); // [esp+2Ch] [ebp-1Ch] BYREF + + while ( 1 ) + { + result = a2 - (_DWORD)a1; + if ( a2 - (int)a1 <= 2176 ) + return result; + if ( !a3 ) + { + v17 = a4; + v18 = a4; + std::__make_heap<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>( + (int)a1, + a2, + &v18); + for ( i = (unsigned __int8 **)a2; + ; + std::__pop_heap<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>( + (int)a1, + (int)i, + i, + &v17) ) + { + v6 = i; + i -= 34; + result = (char *)v6 - (char *)a1; + if ( result <= 136 ) + break; + } + return result; + } + v7 = a1 + 34; + --a3; + v14 = &a1[34 * ((-252645135 * (result >> 3)) >> 1)]; + v8 = (_DWORD *)(a2 - 136); + v9 = __gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>::operator()<__gnu_cxx::__normal_iterator*,std::vector>>,__gnu_cxx::__normal_iterator*,std::vector>>>( + a4, + (int)(a1 + 34), + (int)v14); + v10 = a2 - 136; + if ( v9 ) + { + if ( (unsigned __int8)__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>::operator()<__gnu_cxx::__normal_iterator*,std::vector>>,__gnu_cxx::__normal_iterator*,std::vector>>>( + a4, + (int)v14, + v10) ) + goto LABEL_14; + if ( (unsigned __int8)__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>::operator()<__gnu_cxx::__normal_iterator*,std::vector>>,__gnu_cxx::__normal_iterator*,std::vector>>>( + a4, + (int)(a1 + 34), + (int)v8) ) + goto LABEL_13; + } + else if ( !(unsigned __int8)__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>::operator()<__gnu_cxx::__normal_iterator*,std::vector>>,__gnu_cxx::__normal_iterator*,std::vector>>>( + a4, + (int)(a1 + 34), + v10) ) + { + if ( !(unsigned __int8)__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>::operator()<__gnu_cxx::__normal_iterator*,std::vector>>,__gnu_cxx::__normal_iterator*,std::vector>>>( + a4, + (int)v14, + (int)v8) ) + { +LABEL_14: + std::pair::swap(a1, v14); + goto LABEL_15; + } +LABEL_13: + std::pair::swap(a1, v8); + goto LABEL_15; + } + std::pair::swap(a1, a1 + 34); +LABEL_15: + v11 = (_DWORD *)a2; + while ( 1 ) + { + if ( (unsigned __int8)__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>::operator()<__gnu_cxx::__normal_iterator*,std::vector>>,__gnu_cxx::__normal_iterator*,std::vector>>>( + a4, + (int)v7, + (int)a1) ) + goto LABEL_17; + v12 = (int)(v11 - 34); + do + { + v15 = v12; + v11 = (_DWORD *)v12; + v13 = __gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>::operator()<__gnu_cxx::__normal_iterator*,std::vector>>,__gnu_cxx::__normal_iterator*,std::vector>>>( + a4, + (int)a1, + v12); + v12 = v15 - 136; + } + while ( v13 ); + if ( v7 >= v11 ) + break; + std::pair::swap(v7, v11); +LABEL_17: + v7 += 34; + } + std::__introsort_loop<__gnu_cxx::__normal_iterator *,std::vector>>,int,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>( + v7, + a2, + a3, + a4); + a2 = (int)v7; + } +} + +//----- (0052A430) -------------------------------------------------------- +std::ostream::sentry *__cdecl std::__ostream_insert>( + std::ostream::sentry *a1, + int a2, + int a3) +{ + int v3; // eax + char *v4; // edi + int v5; // ebx + bool v6; // zf + _DWORD *v7; // ecx + unsigned __int8 *v8; // eax + int v9; // ecx + int v11; // eax + int v12; // edx + int v13; // eax + _DWORD *v14; // ecx + unsigned __int8 *v15; // eax + int (__stdcall *v16)(unsigned __int8); // eax + int (__stdcall *v17)(unsigned __int8); // eax + int v18; // [esp+0h] [ebp-88h] + std::ostream *v19; // [esp+4h] [ebp-84h] + _BYTE *v20; // [esp+14h] [ebp-74h] + int v21; // [esp+18h] [ebp-70h] + _BYTE *v22; // [esp+1Ch] [ebp-6Ch] + int v23; // [esp+20h] [ebp-68h] + int v24; // [esp+20h] [ebp-68h] + unsigned __int8 v25; // [esp+24h] [ebp-64h] + unsigned __int8 v26; // [esp+24h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+28h] [ebp-60h] + struct _Unwind_Exception *lpuexcpta; // [esp+28h] [ebp-60h] + char v29[4]; // [esp+68h] [ebp-20h] BYREF + _DWORD *v30; // [esp+6Ch] [ebp-1Ch] + + std::ostream::sentry::sentry((int)v29, a1, v19); + if ( v29[0] ) + { + v3 = *(_DWORD *)(*(_DWORD *)a1 - 12); + v4 = (char *)a1 + v3; + v5 = *(_DWORD *)((char *)a1 + v3 + 8); + lpuexcpt = (std::ostream::sentry *)((char *)a1 + v3); + if ( a3 >= v5 ) + { + v11 = (*(int (__thiscall **)(_DWORD, int, int))(**((_DWORD **)lpuexcpt + 30) + 48))( + *((_DWORD *)lpuexcpt + 30), + a2, + a3); + lpuexcpt = (std::ostream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)); + if ( a3 != v11 ) + { + std::ios::clear( + (std::ostream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 1); + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 8) = 0; + goto LABEL_12; + } + goto LABEL_11; + } + v21 = *((_DWORD *)v4 + 3) & 0xB0; + if ( v21 == 32 ) + { + if ( *((_DWORD *)lpuexcpt + 5) ) + { +LABEL_11: + *((_DWORD *)lpuexcpt + 2) = 0; + goto LABEL_12; + } + } + else + { + v23 = v5 - a3; + if ( v4[117] ) + { + v25 = v4[116]; + } + else + { + v20 = (_BYTE *)*((_DWORD *)lpuexcpt + 31); + if ( !v20 ) + std::__throw_bad_cast(); + if ( v20[28] ) + { + v25 = v20[61]; + } + else + { + std::ctype::_M_widen_init((int)v20); + v25 = 32; + v16 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v20 + 24); + if ( v16 != std::ctype::do_widen ) + v25 = ((int (__thiscall *)(_BYTE *, int))v16)(v20, 32); + } + *((_BYTE *)lpuexcpt + 116) = v25; + *((_BYTE *)lpuexcpt + 117) = 1; + v3 = *(_DWORD *)(*(_DWORD *)a1 - 12); + } + do + { + v7 = *(_DWORD **)((char *)a1 + v3 + 120); + v8 = (unsigned __int8 *)v7[5]; + if ( (unsigned int)v8 < v7[6] ) + { + *v8 = v25; + ++v7[5]; + } + else if ( (*(int (__thiscall **)(_DWORD *, _DWORD))(*v7 + 52))(v7, v25) == -1 ) + { + std::ios::clear( + (std::ostream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 1); + lpuexcpt = (std::ostream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)); + if ( !*((_DWORD *)lpuexcpt + 5) ) + goto LABEL_21; + goto LABEL_11; + } + v6 = v23-- == 1; + v3 = *(_DWORD *)(*(_DWORD *)a1 - 12); + } + while ( !v6 ); + lpuexcpt = (std::ostream::sentry *)((char *)a1 + v3); + if ( *(_DWORD *)((char *)a1 + v3 + 20) ) + goto LABEL_11; + } +LABEL_21: + v12 = (*(int (__thiscall **)(_DWORD, int, int))(**((_DWORD **)lpuexcpt + 30) + 48))( + *((_DWORD *)lpuexcpt + 30), + a2, + a3); + v13 = *(_DWORD *)(*(_DWORD *)a1 - 12); + lpuexcpt = (std::ostream::sentry *)((char *)a1 + v13); + if ( a3 != v12 ) + { + std::ios::clear((std::ostream::sentry *)((char *)a1 + v13), *(_DWORD *)((char *)a1 + v13 + 20) | 1); + v13 = *(_DWORD *)(*(_DWORD *)a1 - 12); + lpuexcpt = (std::ostream::sentry *)((char *)a1 + v13); + } + if ( v21 == 32 && !*((_DWORD *)lpuexcpt + 5) ) + { + v24 = v5 - a3; + if ( *((_BYTE *)lpuexcpt + 117) ) + { + v26 = *((_BYTE *)lpuexcpt + 116); + } + else + { + v22 = (_BYTE *)*((_DWORD *)lpuexcpt + 31); + if ( !v22 ) + std::__throw_bad_cast(); + if ( v22[28] ) + { + v26 = v22[61]; + } + else + { + std::ctype::_M_widen_init((int)v22); + v26 = 32; + v17 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v22 + 24); + if ( v17 != std::ctype::do_widen ) + v26 = ((int (__thiscall *)(_BYTE *, int))v17)(v22, 32); + } + *((_BYTE *)lpuexcpt + 116) = v26; + *((_BYTE *)lpuexcpt + 117) = 1; + v13 = *(_DWORD *)(*(_DWORD *)a1 - 12); + } + do + { + v14 = *(_DWORD **)((char *)a1 + v13 + 120); + v15 = (unsigned __int8 *)v14[5]; + if ( (unsigned int)v15 < v14[6] ) + { + *v15 = v26; + ++v14[5]; + } + else if ( (*(int (__thiscall **)(_DWORD *, _DWORD))(*v14 + 52))(v14, v26) == -1 ) + { + std::ios::clear( + (std::ostream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 1); + lpuexcpt = (std::ostream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)); + goto LABEL_11; + } + v6 = v24-- == 1; + v13 = *(_DWORD *)(*(_DWORD *)a1 - 12); + } + while ( !v6 ); + lpuexcpt = (std::ostream::sentry *)((char *)a1 + v13); + } + goto LABEL_11; + } +LABEL_12: + lpuexcpta = (struct _Unwind_Exception *)((char *)v30 + *(_DWORD *)(*v30 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v9 = *((_DWORD *)lpuexcpta + 30); + if ( v9 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v9 + 24))(v9, v18) == -1 ) + std::ios::clear( + (_DWORD *)((char *)v30 + *(_DWORD *)(*v30 - 12)), + *(_DWORD *)((char *)v30 + *(_DWORD *)(*v30 - 12) + 20) | 1); + } + } + return a1; +} +// 52A46F: variable 'v19' is possibly undefined +// 52A59A: variable 'v18' is possibly undefined +// 52A430: using guessed type char var_20[4]; + +//----- (0052A970) -------------------------------------------------------- +int *__cdecl std::__ostream_insert>(int *a1, int a2, int a3) +{ + char *v3; // esi + int v4; // edi + struct _Unwind_Exception *v5; // edx + unsigned int v6; // eax + _DWORD *v7; // ecx + unsigned int v8; // eax + __int16 v9; // ax + int v10; // ecx + int v12; // eax + int v13; // eax + unsigned int v14; // eax + unsigned __int16 v15; // ax + _DWORD *v16; // ecx + unsigned int v17; // eax + int v18; // ecx + int v19; // ecx + int v20; // [esp+0h] [ebp-88h] + int v21; // [esp+18h] [ebp-70h] + int v22; // [esp+20h] [ebp-68h] + int v23; // [esp+20h] [ebp-68h] + unsigned __int16 v24; // [esp+24h] [ebp-64h] + unsigned __int16 v25; // [esp+24h] [ebp-64h] + struct _Unwind_Exception *lpuexcpt; // [esp+28h] [ebp-60h] + struct _Unwind_Exception *lpuexcpta; // [esp+28h] [ebp-60h] + struct _Unwind_Exception *lpuexcptb; // [esp+28h] [ebp-60h] + int v29; // [esp+68h] [ebp-20h] BYREF + _DWORD *v30; // [esp+6Ch] [ebp-1Ch] + + std::wostream::sentry::sentry(&v29, a1); + if ( (_BYTE)v29 ) + { + v3 = (char *)a1 + *(_DWORD *)(*a1 - 12); + v4 = *((_DWORD *)v3 + 2); + lpuexcpt = (struct _Unwind_Exception *)v3; + v5 = (struct _Unwind_Exception *)v3; + if ( a3 >= v4 ) + { + v12 = (*(int (__thiscall **)(_DWORD, int, int))(**((_DWORD **)v3 + 30) + 48))(*((_DWORD *)v3 + 30), a2, a3); + v5 = (struct _Unwind_Exception *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + if ( a3 != v12 ) + { + std::wios::clear( + (int *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(int *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 1); +LABEL_20: + *(int *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 8) = 0; + goto LABEL_12; + } + goto LABEL_11; + } + v21 = *((_DWORD *)v3 + 3) & 0xB0; + if ( v21 == 32 ) + { + if ( *((_DWORD *)v3 + 5) ) + { +LABEL_11: + *((_DWORD *)v5 + 2) = 0; + goto LABEL_12; + } + } + else + { + v22 = v4 - a3; + if ( v3[118] ) + { + v24 = *((_WORD *)v3 + 58); + } + else + { + v18 = *((_DWORD *)v3 + 31); + if ( !v18 ) + std::__throw_bad_cast(); + v24 = (*(int (__fastcall **)(int, char *, int))(*(_DWORD *)v18 + 40))(v18, v3, 32); + *((_WORD *)v3 + 58) = v24; + v3[118] = 1; + lpuexcpt = (struct _Unwind_Exception *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + } + do + { + v7 = (_DWORD *)*((_DWORD *)lpuexcpt + 30); + v5 = lpuexcpt; + v8 = v7[5]; + if ( v8 < v7[6] ) + { + v6 = v8 + 2; + *(_WORD *)(v6 - 2) = v24; + v7[5] = v6; + if ( v24 == 0xFFFF ) + goto LABEL_10; + } + else + { + v9 = (*(int (__fastcall **)(_DWORD *, struct _Unwind_Exception *, _DWORD))(*v7 + 52))(v7, lpuexcpt, v24); + lpuexcpt = (struct _Unwind_Exception *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + v5 = lpuexcpt; + if ( v9 == -1 ) + { +LABEL_10: + std::wios::clear(lpuexcpt, *((_DWORD *)lpuexcpt + 5) | 1); + v5 = (struct _Unwind_Exception *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + if ( !*((_DWORD *)v5 + 5) ) + goto LABEL_22; + goto LABEL_11; + } + } + --v22; + } + while ( v22 ); + if ( *((_DWORD *)lpuexcpt + 5) ) + goto LABEL_11; + } +LABEL_22: + v13 = (*(int (__thiscall **)(_DWORD, int, int))(**((_DWORD **)v5 + 30) + 48))(*((_DWORD *)v5 + 30), a2, a3); + lpuexcptb = (struct _Unwind_Exception *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + v5 = lpuexcptb; + if ( a3 != v13 ) + { + std::wios::clear( + (int *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(int *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 1); + lpuexcptb = (struct _Unwind_Exception *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + v5 = lpuexcptb; + } + if ( v21 == 32 && !*((_DWORD *)lpuexcptb + 5) ) + { + v23 = v4 - a3; + if ( *((_BYTE *)lpuexcptb + 118) ) + { + v25 = *((_WORD *)lpuexcptb + 58); + } + else + { + v19 = *((_DWORD *)lpuexcptb + 31); + if ( !v19 ) + std::__throw_bad_cast(); + v25 = (*(int (__fastcall **)(int, struct _Unwind_Exception *, int))(*(_DWORD *)v19 + 40))(v19, v5, 32); + *((_WORD *)lpuexcptb + 58) = v25; + *((_BYTE *)lpuexcptb + 118) = 1; + lpuexcptb = (struct _Unwind_Exception *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + } + while ( 1 ) + { + v16 = (_DWORD *)*((_DWORD *)lpuexcptb + 30); + v5 = lpuexcptb; + v17 = v16[5]; + if ( v17 < v16[6] ) + { + v14 = v17 + 2; + *(_WORD *)(v14 - 2) = v25; + v16[5] = v14; + v15 = v25; + } + else + { + v15 = (*(int (__thiscall **)(_DWORD *, _DWORD))(*v16 + 52))(v16, v25); + lpuexcptb = (struct _Unwind_Exception *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + v5 = lpuexcptb; + } + if ( v15 == 0xFFFF ) + break; + if ( !--v23 ) + goto LABEL_11; + } + std::wios::clear(lpuexcptb, *((_DWORD *)lpuexcptb + 5) | 1); + goto LABEL_20; + } + goto LABEL_11; + } +LABEL_12: + lpuexcpta = (struct _Unwind_Exception *)((char *)v30 + *(_DWORD *)(*v30 - 12)); + if ( (*((_BYTE *)lpuexcpta + 13) & 0x20) != 0 && !std::uncaught_exception() ) + { + v10 = *((_DWORD *)lpuexcpta + 30); + if ( v10 ) + { + if ( (*(int (__thiscall **)(int, int))(*(_DWORD *)v10 + 24))(v10, v20) == -1 ) + std::wios::clear( + (_DWORD *)((char *)v30 + *(_DWORD *)(*v30 - 12)), + *(_DWORD *)((char *)v30 + *(_DWORD *)(*v30 - 12) + 20) | 1); + } + } + return a1; +} +// 52AAEF: variable 'v20' is possibly undefined + +//----- (0052AE50) -------------------------------------------------------- +int __cdecl std::__copy_streambufs>(_DWORD *a1, _DWORD *a2) +{ + char v3[13]; // [esp+1Fh] [ebp-Dh] BYREF + + return std::__copy_streambufs_eof>(a1, a2, v3); +} +// 52AE50: using guessed type char var_D[13]; + +//----- (0052AE80) -------------------------------------------------------- +int __cdecl std::__copy_streambufs>(_DWORD *a1, _DWORD *a2) +{ + char v3[13]; // [esp+1Fh] [ebp-Dh] BYREF + + return std::__copy_streambufs_eof>(a1, a2, v3); +} +// 52AE80: using guessed type char var_D[13]; + +//----- (0052AEB0) -------------------------------------------------------- +int __cdecl std::__verify_grouping(char *a1, unsigned int a2, int a3) +{ + return (unsigned __int8)std::__verify_grouping_impl(a1, a2, *(const char **)a3, *(_DWORD *)(a3 + 4)); +} + +//----- (0052AF50) -------------------------------------------------------- +int __cdecl std::__verify_grouping(char *a1, unsigned int a2, const char **a3) +{ + return std::__verify_grouping_impl(a1, a2, *a3, *((_DWORD *)*a3 - 3)); +} + +//----- (0052AF80) -------------------------------------------------------- +void (__cdecl ***std::iostream_category(void))(_anonymous_namespace_::io_error_category *__hidden this) +{ + if ( (_BYTE)`guard variable for'`anonymous namespace'::__io_category_instance(void)::__ec ) + return &`anonymous namespace'::__io_category_instance(void)::__ec; + if ( __cxa_guard_acquire(&`guard variable for'`anonymous namespace'::__io_category_instance(void)::__ec) ) + { + __cxa_guard_release(&`guard variable for'`anonymous namespace'::__io_category_instance(void)::__ec); + atexit((_PVFV)__tcf_0_7); + } + return &`anonymous namespace'::__io_category_instance(void)::__ec; +} +// 53FCD0: using guessed type void (__cdecl **`anonymous namespace'::__io_category_instance(void)::__ec)(_anonymous_namespace_::io_error_category *__hidden this); + +//----- (0052AFE0) -------------------------------------------------------- +int __cdecl std::_Rb_tree_decrement(_DWORD *a1) +{ + int v1; // eax + int v2; // edx + int v4; // eax + + if ( !*a1 && a1 == *(_DWORD **)(a1[1] + 4) ) + return a1[3]; + v1 = a1[2]; + if ( v1 ) + { + do + { + v2 = v1; + v1 = *(_DWORD *)(v1 + 12); + } + while ( v1 ); + return v2; + } + v2 = a1[1]; + if ( a1 != *(_DWORD **)(v2 + 8) ) + return v2; + do + { + v4 = v2; + v2 = *(_DWORD *)(v2 + 4); + } + while ( v4 == *(_DWORD *)(v2 + 8) ); + return v2; +} + +//----- (0052B040) -------------------------------------------------------- +int __cdecl std::_Rb_tree_decrement(_DWORD *a1) +{ + int v1; // eax + int v2; // edx + int v4; // eax + + if ( !*a1 && a1 == *(_DWORD **)(a1[1] + 4) ) + return a1[3]; + v1 = a1[2]; + if ( v1 ) + { + do + { + v2 = v1; + v1 = *(_DWORD *)(v1 + 12); + } + while ( v1 ); + return v2; + } + v2 = a1[1]; + if ( a1 != *(_DWORD **)(v2 + 8) ) + return v2; + do + { + v4 = v2; + v2 = *(_DWORD *)(v2 + 4); + } + while ( *(_DWORD *)(v2 + 8) == v4 ); + return v2; +} + +//----- (0052B0A0) -------------------------------------------------------- +int __cdecl std::_Rb_tree_increment(int a1) +{ + int v1; // eax + int v2; // edx + int v4; // eax + int v5; // edx + + v1 = *(_DWORD *)(a1 + 12); + if ( v1 ) + { + do + { + v2 = v1; + v1 = *(_DWORD *)(v1 + 8); + } + while ( v1 ); + return v2; + } + v4 = *(_DWORD *)(a1 + 4); + if ( a1 != *(_DWORD *)(v4 + 12) ) + return *(_DWORD *)(a1 + 4); + do + { + v5 = v4; + v4 = *(_DWORD *)(v4 + 4); + } + while ( *(_DWORD *)(v4 + 12) == v5 ); + if ( v4 != *(_DWORD *)(v5 + 12) ) + return v4; + return v5; +} + +//----- (0052B0F0) -------------------------------------------------------- +int __cdecl std::_Rb_tree_increment(int a1) +{ + int v1; // eax + int v2; // edx + int v4; // eax + int v5; // edx + + v1 = *(_DWORD *)(a1 + 12); + if ( v1 ) + { + do + { + v2 = v1; + v1 = *(_DWORD *)(v1 + 8); + } + while ( v1 ); + return v2; + } + v4 = *(_DWORD *)(a1 + 4); + if ( a1 != *(_DWORD *)(v4 + 12) ) + return *(_DWORD *)(a1 + 4); + do + { + v5 = v4; + v4 = *(_DWORD *)(v4 + 4); + } + while ( *(_DWORD *)(v4 + 12) == v5 ); + if ( v4 != *(_DWORD *)(v5 + 12) ) + return v4; + return v5; +} + +//----- (0052B140) -------------------------------------------------------- +bool std::uncaught_exception(void) +{ + return __cxa_get_globals()[1] != 0; +} + +//----- (0052B160) -------------------------------------------------------- +int std::uncaught_exceptions(void) +{ + return __cxa_get_globals()[1]; +} + +//----- (0052B170) -------------------------------------------------------- +int __cdecl std::_Rb_tree_black_count(_DWORD *a1, _DWORD *a2) +{ + _DWORD *v2; // eax + int v3; // edx + + v2 = a1; + v3 = 0; + if ( a1 ) + { + while ( 1 ) + { + v3 += *v2 == 1; + if ( v2 == a2 ) + break; + v2 = (_DWORD *)v2[1]; + } + } + return v3; +} + +//----- (0052B1A0) -------------------------------------------------------- +int __cdecl std::_Rb_tree_rotate_left(int a1, _DWORD *a2) +{ + int result; // eax + int v3; // edx + int v4; // ecx + int v5; // ecx + + result = a1; + v3 = *(_DWORD *)(a1 + 12); + v4 = *(_DWORD *)(v3 + 8); + *(_DWORD *)(a1 + 12) = v4; + if ( v4 ) + *(_DWORD *)(v4 + 4) = a1; + v5 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v3 + 4) = v5; + if ( a1 == *a2 ) + { + *a2 = v3; + *(_DWORD *)(v3 + 8) = a1; + *(_DWORD *)(a1 + 4) = v3; + } + else + { + if ( a1 == *(_DWORD *)(v5 + 8) ) + *(_DWORD *)(v5 + 8) = v3; + else + *(_DWORD *)(v5 + 12) = v3; + *(_DWORD *)(v3 + 8) = a1; + *(_DWORD *)(a1 + 4) = v3; + } + return result; +} + +//----- (0052B200) -------------------------------------------------------- +int __cdecl std::_Rb_tree_rotate_right(int a1, _DWORD *a2) +{ + int result; // eax + int v3; // edx + int v4; // ecx + int v5; // ecx + + result = a1; + v3 = *(_DWORD *)(a1 + 8); + v4 = *(_DWORD *)(v3 + 12); + *(_DWORD *)(a1 + 8) = v4; + if ( v4 ) + *(_DWORD *)(v4 + 4) = a1; + v5 = *(_DWORD *)(a1 + 4); + *(_DWORD *)(v3 + 4) = v5; + if ( a1 == *a2 ) + { + *a2 = v3; + *(_DWORD *)(v3 + 12) = a1; + *(_DWORD *)(a1 + 4) = v3; + } + else + { + if ( a1 == *(_DWORD *)(v5 + 12) ) + *(_DWORD *)(v5 + 12) = v3; + else + *(_DWORD *)(v5 + 8) = v3; + *(_DWORD *)(v3 + 12) = a1; + *(_DWORD *)(a1 + 4) = v3; + } + return result; +} + +//----- (0052B260) -------------------------------------------------------- +int __cdecl std::__copy_streambufs_eof>(_DWORD *a1, _DWORD *a2, _BYTE *a3) +{ + _BYTE *v3; // ecx + unsigned int v4; // ebx + int v5; // eax + int v6; // edi + int v7; // ebx + int v8; // eax + _BYTE *v9; // ecx + unsigned int v10; // ecx + + v3 = (_BYTE *)a1[2]; + v4 = a1[3]; + *a3 = 1; + if ( (unsigned int)v3 >= v4 ) + { + v6 = 0; + v5 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + if ( v5 == -1 ) + return v6; + v4 = a1[3]; + v3 = (_BYTE *)a1[2]; + } + else + { + LOBYTE(v5) = *v3; + } + v6 = 0; + while ( 1 ) + { + v7 = v4 - (_DWORD)v3; + if ( v7 > 1 ) + break; + while ( 1 ) + { + v9 = (_BYTE *)a2[5]; + if ( (unsigned int)v9 >= a2[6] ) + { + if ( (*(int (__thiscall **)(_DWORD *, _DWORD))(*a2 + 52))(a2, (unsigned __int8)v5) == -1 ) + goto LABEL_15; + } + else + { + *v9 = v5; + ++a2[5]; + } + v10 = a1[2]; + v4 = a1[3]; + ++v6; + if ( v10 >= v4 ) + { + if ( (*(int (__fastcall **)(_DWORD *))(*a1 + 40))(a1) == -1 ) + return v6; + v3 = (_BYTE *)a1[2]; + v4 = a1[3]; + } + else + { + v3 = (_BYTE *)(v10 + 1); + a1[2] = v3; + } + if ( v4 > (unsigned int)v3 ) + break; +LABEL_6: + v5 = (*(int (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + if ( v5 == -1 ) + return v6; + v3 = (_BYTE *)a1[2]; + v7 = a1[3] - (_DWORD)v3; + if ( v7 > 1 ) + goto LABEL_5; + } + LOBYTE(v5) = *v3; + } +LABEL_5: + v8 = (*(int (__thiscall **)(_DWORD *, _BYTE *, int))(*a2 + 48))(a2, v3, v7); + a1[2] += v8; + v6 += v8; + if ( v8 >= v7 ) + goto LABEL_6; +LABEL_15: + *a3 = 0; + return v6; +} + +//----- (0052B360) -------------------------------------------------------- +int __cdecl std::__copy_streambufs_eof>(_DWORD *a1, _DWORD *a2, _BYTE *a3) +{ + unsigned __int16 *v3; // eax + int v4; // ecx + int v5; // edi + int v6; // esi + int v7; // eax + unsigned int v8; // edx + __int16 *v9; // eax + _WORD *v10; // esi + __int16 v11; // dx + unsigned __int16 *v12; // eax + + *a3 = 1; + v3 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v3 >= a1[3] ) + v4 = (*(unsigned __int16 (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + else + v4 = *v3; + v5 = 0; + while ( (_WORD)v4 != 0xFFFF ) + { + v8 = a1[3]; + v9 = (__int16 *)a1[2]; + if ( (int)(v8 - (_DWORD)v9) > 2 ) + { + v6 = (int)(v8 - (_DWORD)v9) >> 1; + v7 = (*(int (__thiscall **)(_DWORD *, _DWORD, int))(*a2 + 48))(a2, a1[2], v6); + a1[2] += 2 * v7; + v5 += v7; + if ( v7 < v6 ) + goto LABEL_15; + goto LABEL_6; + } + v10 = (_WORD *)a2[5]; + if ( (unsigned int)v10 >= a2[6] ) + { + if ( (*(unsigned __int16 (__thiscall **)(_DWORD *, int))(*a2 + 52))(a2, v4) == 0xFFFF ) + { +LABEL_15: + *a3 = 0; + return v5; + } + v9 = (__int16 *)a1[2]; + ++v5; + if ( (unsigned int)v9 < a1[3] ) + { +LABEL_11: + v11 = *v9; + a1[2] = v9 + 1; + goto LABEL_12; + } + } + else + { + *v10 = v4; + ++v5; + a2[5] = v10 + 1; + if ( (unsigned int)v9 < v8 ) + goto LABEL_11; + } + v11 = (*(int (__fastcall **)(_DWORD *))(*a1 + 40))(a1); +LABEL_12: + if ( v11 == -1 ) + return v5; + v12 = (unsigned __int16 *)a1[2]; + if ( (unsigned int)v12 < a1[3] ) + { + v4 = *v12; + continue; + } +LABEL_6: + v4 = (*(unsigned __int16 (__fastcall **)(_DWORD *))(*a1 + 36))(a1); + } + return v5; +} + +//----- (0052B470) -------------------------------------------------------- +void __cdecl std::__destroy_ios_failure(std::exception *a1) +{ + void (__cdecl *v1)(std::ios_base::failure *__hidden); // eax + int v2; // eax + int v3; // ecx + int v4; // eax + int v5[3]; // [esp+1Fh] [ebp-Dh] BYREF + + v1 = **(void (__cdecl ***)(std::ios_base::failure *__hidden))a1; + if ( v1 == std::ios_base::failure::~failure ) + { + v2 = _CRT_MT; + v3 = *((_DWORD *)a1 + 1); + *(_DWORD *)a1 = &off_55FDEC; + if ( v2 ) + { + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v3 - 4), 0xFFFFFFFF) > 0 ) + goto LABEL_4; + } + else + { + v4 = *(_DWORD *)(v3 - 4); + *(_DWORD *)(v3 - 4) = v4 - 1; + if ( v4 > 0 ) + { +LABEL_4: + std::exception::~exception(a1); + return; + } + } + std::string::_Rep::_M_destroy((void *)(v3 - 12), (int)v5); + std::exception::~exception(a1); + } + else + { + ((void (__fastcall *)(std::exception *))v1)(a1); + } +} +// 53E1E4: using guessed type int _CRT_MT; +// 55FDEC: using guessed type void (__cdecl *off_55FDEC)(std::ios_base::failure *__hidden this); +// 52B470: using guessed type int var_D[3]; + +//----- (0052B4F0) -------------------------------------------------------- +int __cdecl std::__verify_grouping_impl(const char *a1, unsigned int a2, const char *a3, unsigned int a4) +{ + const char *v4; // ecx + int v5; // eax + unsigned int v6; // ebp + unsigned int v7; // edx + char v8; // bl + char v9; // cl + bool v10; // cl + bool v11; // di + char v12; // bl + char v13; // dl + char v15; // [esp+3h] [ebp-11h] + unsigned __int8 v16; // [esp+3h] [ebp-11h] + + v4 = a3; + v5 = a4 - 1; + v6 = a2 - 1; + if ( a2 - 1 > a4 - 1 ) + v6 = a4 - 1; + if ( v6 ) + { + v7 = 0; + do + { + v8 = a3[v5--]; + v9 = a1[v7++]; + v15 = v9; + v10 = v8 != v9; + v11 = v10; + } + while ( v7 < v6 && !v10 ); + v4 = a3; + v16 = v8 == v15; + } + else + { + v16 = 1; + v11 = 0; + } + v12 = a1[v6]; + if ( v5 && !v11 ) + { + do + v13 = v4[v5--]; + while ( v5 && v13 == v12 ); + v16 = v13 == v12; + } + if ( (unsigned __int8)(v12 - 1) <= 0x7Du ) + v16 &= *v4 <= (unsigned __int8)v12; + return v16; +} + +//----- (0052B5C0) -------------------------------------------------------- +void __cdecl std::__construct_ios_failure(_DWORD *a1, char *a2) +{ + int v2; // ecx + int v3; // eax + const std::string *v4; // [esp+4h] [ebp-28h] + int v5; // [esp+1Ah] [ebp-12h] BYREF + _DWORD v6[4]; // [esp+1Ch] [ebp-10h] BYREF + + std::string::string(v6, a2, (int)&v5); + std::ios_base::failure::failure(a1, (std::ios_base::failure *)v6, v4); + v2 = v6[0]; + if ( !_CRT_MT ) + { + v3 = *(_DWORD *)(v6[0] - 4); + *(_DWORD *)(v6[0] - 4) = v3 - 1; + if ( v3 > 0 ) + return; +LABEL_5: + std::string::_Rep::_M_destroy((void *)(v2 - 12), (int)&v5 + 1); + return; + } + if ( _InterlockedExchangeAdd((volatile signed __int32 *)(v6[0] - 4), 0xFFFFFFFF) <= 0 ) + goto LABEL_5; +} +// 52B5E8: variable 'v4' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (0052B640) -------------------------------------------------------- +bool __cdecl std::__is_ios_failure_handler(const __cxxabiv1::__class_type_info *a1) +{ + return std::type_info::operator==(a1, (int)&`typeinfo for'std::ios_base::failure); +} +// 55BD7C: using guessed type int *`typeinfo for'std::ios_base::failure; + +//----- (0052B660) -------------------------------------------------------- +void __noreturn std::__throw_out_of_range_fmt(char *Str, ...) +{ + size_t v1; // eax + unsigned int v2; // edx + int v3; // eax + void *v4; // esp + void *v5; // esp + std::out_of_range *exception; // eax + std::out_of_range *v7; // ecx + const char *v8; // [esp+4h] [ebp-54h] + char v9[4]; // [esp+10h] [ebp-48h] BYREF + std::out_of_range *v10; // [esp+18h] [ebp-40h] + va_list va; // [esp+64h] [ebp+Ch] BYREF + + va_start(va, Str); + v1 = strlen(Str); + v2 = v1 + 512; + v3 = 16 * ((v1 + 539) >> 4); + v4 = alloca(v3); + v5 = alloca(v3); + v10 = (std::out_of_range *)v9; + __gnu_cxx::__snprintf_lite(v9, v2, Str, va); + exception = (std::out_of_range *)__cxa_allocate_exception(8u); + v7 = v10; + v10 = exception; + std::out_of_range::out_of_range(exception, v7, v8); + __cxa_throw( + v10, + (struct type_info *)&`typeinfo for'std::out_of_range, + (void (__cdecl *)(void *))std::out_of_range::~out_of_range); +} +// 52B6FD: variable 'v8' is possibly undefined +// 55BEE4: using guessed type int *`typeinfo for'std::out_of_range; +// 52B660: using guessed type char anonymous_0[4]; + +//----- (0052B750) -------------------------------------------------------- +void __cdecl std::__unguarded_linear_insert<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Val_comp_iter const&,std::pair const&)>>( + _DWORD *a1, + int (__cdecl *a2)(void **, struct _Unwind_Exception *)) +{ + char v2; // al + int v3; // [esp+10h] [ebp-D8h] + unsigned __int8 **v4; // [esp+14h] [ebp-D4h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-D0h] + void *v6[36]; // [esp+58h] [ebp-90h] BYREF + + std::pair::pair(v6, a1); + lpuexcpt = (struct _Unwind_Exception *)(a1 - 34); + while ( 1 ) + { + v4 = (unsigned __int8 **)((char *)lpuexcpt + 136); + v3 = (int)lpuexcpt; + v2 = a2(v6, lpuexcpt); + lpuexcpt = (struct _Unwind_Exception *)((char *)lpuexcpt - 136); + if ( !v2 ) + break; + std::pair::operator=(v4, v3); + } + std::pair::operator=(v4, (int)v6); + std::pair::~pair(v6); +} + +//----- (0052B870) -------------------------------------------------------- +int *__cdecl std::_Rb_tree_rebalance_for_erase(int *a1, _DWORD *a2) +{ + int *v2; // ebp + int *v3; // edi + int *v4; // eax + int *v5; // ecx + int *v6; // edx + int *v7; // eax + int *v8; // ebp + int v9; // edi + int v10; // edi + int *v11; // ebp + _DWORD *v12; // edi + int *v13; // ecx + int *v14; // ebp + _DWORD *v15; // edi + int *v16; // ebp + int v17; // ecx + int v18; // ecx + int v20; // ecx + int *v21; // ecx + int *v22; // ebp + int v23; // edi + int *v24; // edi + int v25; // edi + int *v26; // edi + int *v27; // ecx + int *v28; // edi + _DWORD *v29; // edi + int v30; // edi + int v31; // edi + int *v32; // ebp + _DWORD *v33; // edi + int v34; // ecx + int v35; // ecx + _DWORD *v36; // edi + int v37; // edi + int v38; // edi + _DWORD *v39; // edi + _DWORD *v40; // [esp+0h] [ebp-14h] + _DWORD *v41; // [esp+0h] [ebp-14h] + + v2 = (int *)a1[2]; + v3 = (int *)a1[3]; + if ( !v2 ) + goto LABEL_76; + if ( !v3 ) + { + v7 = (int *)a1[1]; + goto LABEL_44; + } + v4 = (int *)a1[3]; + do + { + v5 = v4; + v4 = (int *)v4[2]; + } + while ( v4 ); + v6 = (int *)v5[3]; + if ( v5 == a1 ) + { + v3 = (int *)v5[3]; +LABEL_76: + v7 = (int *)a1[1]; + if ( !v3 ) + { + v6 = 0; + goto LABEL_45; + } + v2 = v3; +LABEL_44: + v2[1] = (int)v7; + v6 = v2; +LABEL_45: + if ( (int *)a2[1] == a1 ) + { + a2[1] = v6; + } + else + { + v20 = a1[1]; + if ( *(int **)(v20 + 8) == a1 ) + *(_DWORD *)(v20 + 8) = v6; + else + *(_DWORD *)(v20 + 12) = v6; + } + if ( (int *)a2[2] == a1 ) + { + v27 = v6; + if ( a1[3] ) + { + do + { + v28 = v27; + v27 = (int *)v27[2]; + } + while ( v27 ); + a2[2] = v28; + } + else + { + a2[2] = a1[1]; + } + } + v10 = *a1; + if ( (int *)a2[3] == a1 ) + { + v21 = v6; + if ( a1[2] ) + { + do + { + v22 = v21; + v21 = (int *)v21[3]; + } + while ( v21 ); + a2[3] = v22; + } + else + { + a2[3] = a1[1]; + } + } + goto LABEL_14; + } + v2[1] = (int)v5; + v7 = v3; + v5[2] = (int)v2; + if ( v5 != v3 ) + { + v7 = (int *)v5[1]; + v8 = v7; + if ( v6 ) + { + v6[1] = (int)v7; + v8 = (int *)v5[1]; + } + v8[2] = (int)v6; + v5[3] = (int)v3; + *(_DWORD *)(a1[3] + 4) = v5; + } + if ( (int *)a2[1] == a1 ) + { + a2[1] = v5; + v9 = a1[1]; + } + else + { + v9 = a1[1]; + if ( *(int **)(v9 + 8) == a1 ) + *(_DWORD *)(v9 + 8) = v5; + else + *(_DWORD *)(v9 + 12) = v5; + } + v5[1] = v9; + v10 = *v5; + *v5 = *a1; + *a1 = v10; +LABEL_14: + if ( !v10 ) + return a1; + if ( (int *)a2[1] == v6 ) + { +LABEL_41: + if ( v6 ) + goto LABEL_67; + return a1; + } + while ( 1 ) + { + if ( v6 && *v6 != 1 ) + goto LABEL_67; + v13 = (int *)v7[2]; + if ( v13 != v6 ) + break; + v13 = (int *)v7[3]; + v14 = (int *)v13[2]; + if ( !*v13 ) + { + *v13 = 1; + *v7 = 0; + v7[3] = (int)v14; + if ( v14 ) + v14[1] = (int)v7; + v25 = v7[1]; + v13[1] = v25; + if ( v7 == (int *)a2[1] ) + { + a2[1] = v13; + v26 = (int *)v7[3]; + } + else if ( v7 == *(int **)(v25 + 8) ) + { + *(_DWORD *)(v25 + 8) = v13; + v26 = v14; + } + else + { + *(_DWORD *)(v25 + 12) = v13; + v26 = (int *)v7[3]; + } + v13[2] = (int)v7; + v14 = (int *)v26[2]; + v7[1] = (int)v13; + v13 = v26; + } + if ( v14 && *v14 != 1 ) + { + v36 = (_DWORD *)v13[3]; + v40 = v36; + if ( !v36 || *v36 == 1 ) + { + v37 = v14[3]; + *v14 = 1; + *v13 = 0; + v13[2] = v37; + if ( v37 ) + *(_DWORD *)(v37 + 4) = v13; + v38 = v13[1]; + v14[1] = v38; + if ( v13 == (int *)a2[1] ) + { + a2[1] = v14; + } + else if ( v13 == *(int **)(v38 + 12) ) + { + *(_DWORD *)(v38 + 12) = v14; + } + else + { + *(_DWORD *)(v38 + 8) = v14; + } + v14[3] = (int)v13; + v13[1] = (int)v14; + v16 = (int *)v7[3]; + v39 = (_DWORD *)v16[3]; + *v16 = *v7; + v40 = v39; + *v7 = 1; + if ( !v39 ) + goto LABEL_35; + goto LABEL_34; + } +LABEL_33: + v16 = (int *)v7[3]; + *v13 = *v7; + *v7 = 1; +LABEL_34: + *v40 = 1; +LABEL_35: + v17 = v16[2]; + v7[3] = v17; + if ( v17 ) + *(_DWORD *)(v17 + 4) = v7; + v18 = v7[1]; + v16[1] = v18; + if ( v7 == (int *)a2[1] ) + { + a2[1] = v16; + } + else if ( v7 == *(int **)(v18 + 8) ) + { + *(_DWORD *)(v18 + 8) = v16; + } + else + { + *(_DWORD *)(v18 + 12) = v16; + } + v16[2] = (int)v7; + v7[1] = (int)v16; + goto LABEL_41; + } + v15 = (_DWORD *)v13[3]; + if ( v15 && *v15 != 1 ) + { + v40 = (_DWORD *)v13[3]; + goto LABEL_33; + } +LABEL_22: + *v13 = 0; + v6 = v7; + if ( (int *)a2[1] == v7 ) + goto LABEL_68; + v7 = (int *)v7[1]; + } + v11 = (int *)v13[3]; + if ( !*v13 ) + { + *v13 = 1; + *v7 = 0; + v7[2] = (int)v11; + if ( v11 ) + v11[1] = (int)v7; + v23 = v7[1]; + v13[1] = v23; + if ( v7 == (int *)a2[1] ) + { + a2[1] = v13; + v24 = (int *)v7[2]; + } + else if ( v7 == *(int **)(v23 + 12) ) + { + *(_DWORD *)(v23 + 12) = v13; + v24 = v11; + } + else + { + *(_DWORD *)(v23 + 8) = v13; + v24 = (int *)v7[2]; + } + v13[3] = (int)v7; + v11 = (int *)v24[3]; + v7[1] = (int)v13; + v13 = v24; + } + if ( !v11 || *v11 == 1 ) + { + v12 = (_DWORD *)v13[2]; + if ( !v12 || *v12 == 1 ) + goto LABEL_22; + v41 = (_DWORD *)v13[2]; +LABEL_91: + v32 = (int *)v7[2]; + *v13 = *v7; + *v7 = 1; + goto LABEL_92; + } + v29 = (_DWORD *)v13[2]; + v41 = v29; + if ( v29 && *v29 != 1 ) + goto LABEL_91; + v30 = v11[2]; + *v11 = 1; + *v13 = 0; + v13[3] = v30; + if ( v30 ) + *(_DWORD *)(v30 + 4) = v13; + v31 = v13[1]; + v11[1] = v31; + if ( v13 == (int *)a2[1] ) + { + a2[1] = v11; + } + else if ( v13 == *(int **)(v31 + 8) ) + { + *(_DWORD *)(v31 + 8) = v11; + } + else + { + *(_DWORD *)(v31 + 12) = v11; + } + v11[2] = (int)v13; + v13[1] = (int)v11; + v32 = (int *)v7[2]; + v33 = (_DWORD *)v32[2]; + *v32 = *v7; + v41 = v33; + *v7 = 1; + if ( v33 ) +LABEL_92: + *v41 = 1; + v34 = v32[3]; + v7[2] = v34; + if ( v34 ) + *(_DWORD *)(v34 + 4) = v7; + v35 = v7[1]; + v32[1] = v35; + if ( v7 == (int *)a2[1] ) + { + a2[1] = v32; + } + else if ( v7 == *(int **)(v35 + 12) ) + { + *(_DWORD *)(v35 + 12) = v32; + } + else + { + *(_DWORD *)(v35 + 8) = v32; + } + v32[3] = (int)v7; + v7[1] = (int)v32; + if ( !v6 ) + return a1; +LABEL_67: + v7 = v6; +LABEL_68: + *v7 = 1; + return a1; +} + +//----- (0052BD00) -------------------------------------------------------- +_DWORD *__cdecl std::_Rb_tree_insert_and_rebalance(char a1, _DWORD *a2, _DWORD *a3, _DWORD *a4) +{ + _DWORD *v4; // ecx + _DWORD *v5; // esi + _DWORD *result; // eax + _DWORD *v7; // edx + _DWORD *v8; // eax + _DWORD *v9; // ebx + _DWORD *v10; // ebp + int v11; // edx + int v12; // ebx + int v13; // ebx + int v14; // edx + int v15; // edx + int v16; // esi + int v17; // ebx + _DWORD *v18; // ebx + int v19; // ebx + _DWORD *v20; // ebx + _DWORD *v21; // esi + + v4 = a2; + a2[1] = a3; + a2[2] = 0; + a2[3] = 0; + *a2 = 0; + if ( !a1 ) + { + a3[3] = a2; + if ( (_DWORD *)a4[3] == a3 ) + { + v5 = (_DWORD *)a4[1]; + a4[3] = a2; + result = v5; +LABEL_6: + if ( a2 == v5 ) + { +LABEL_17: + *result = 1; + return result; + } + while ( 1 ) + { + while ( 1 ) + { + v7 = (_DWORD *)v4[1]; + if ( *v7 ) + goto LABEL_17; + v8 = (_DWORD *)v7[1]; + v9 = (_DWORD *)v8[2]; + if ( v7 != v9 ) + { + if ( !v9 || *v9 ) + { + if ( (_DWORD *)v7[2] == v4 ) + { + v16 = v4[3]; + v17 = v7[1]; + v7[2] = v16; + if ( v16 ) + { + *(_DWORD *)(v16 + 4) = v7; + v17 = v7[1]; + } + v4[1] = v17; + if ( v7 == (_DWORD *)a4[1] ) + { + a4[1] = v4; + } + else if ( v7 == *(_DWORD **)(v17 + 12) ) + { + *(_DWORD *)(v17 + 12) = v4; + } + else + { + *(_DWORD *)(v17 + 8) = v4; + } + v18 = v4; + v4[3] = v7; + v7[1] = v4; + v4 = v7; + v7 = v18; + } + *v7 = 1; + v11 = v8[3]; + *v8 = 0; + v12 = *(_DWORD *)(v11 + 8); + v8[3] = v12; + if ( v12 ) + *(_DWORD *)(v12 + 4) = v8; + v13 = v8[1]; + *(_DWORD *)(v11 + 4) = v13; + if ( v8 == (_DWORD *)a4[1] ) + { + a4[1] = v11; + } + else if ( v8 == *(_DWORD **)(v13 + 8) ) + { + *(_DWORD *)(v13 + 8) = v11; + } + else + { + *(_DWORD *)(v13 + 12) = v11; + } + *(_DWORD *)(v11 + 8) = v8; + v8[1] = v11; + v5 = (_DWORD *)a4[1]; + } + else + { + *v7 = 1; + v4 = v8; + *v9 = 1; + *v8 = 0; + } + goto LABEL_11; + } + v10 = (_DWORD *)v8[3]; + if ( !v10 || *v10 ) + break; + v4 = (_DWORD *)v7[1]; + *v7 = 1; + *v10 = 1; + *v8 = 0; + result = v5; + if ( v5 == v4 ) + goto LABEL_17; + } + if ( (_DWORD *)v7[3] == v4 ) + break; +LABEL_28: + *v7 = 1; + v14 = v9[3]; + *v8 = 0; + v8[2] = v14; + if ( v14 ) + *(_DWORD *)(v14 + 4) = v8; + v15 = v8[1]; + v9[1] = v15; + if ( v8 == (_DWORD *)a4[1] ) + { + a4[1] = v9; + } + else if ( v8 == *(_DWORD **)(v15 + 12) ) + { + *(_DWORD *)(v15 + 12) = v9; + } + else + { + *(_DWORD *)(v15 + 8) = v9; + } + v9[3] = v8; + v8[1] = v9; + v5 = (_DWORD *)a4[1]; +LABEL_11: + result = v5; + if ( v5 == v4 ) + goto LABEL_17; + } + v19 = v4[2]; + v7[3] = v19; + if ( v19 ) + { + *(_DWORD *)(v19 + 4) = v7; + v20 = (_DWORD *)v7[1]; + v4[1] = v20; + if ( v7 != (_DWORD *)a4[1] ) + { + if ( v7 != (_DWORD *)v20[2] ) + { + v20[3] = v4; +LABEL_48: + v21 = v4; + v4[2] = v7; + v9 = (_DWORD *)v8[2]; + v7[1] = v4; + v4 = v7; + v7 = v21; + goto LABEL_28; + } +LABEL_52: + v20[2] = v4; + goto LABEL_48; + } + } + else + { + v4[1] = v8; + v20 = v8; + if ( v7 != (_DWORD *)a4[1] ) + goto LABEL_52; + } + a4[1] = v4; + goto LABEL_48; + } +LABEL_5: + v5 = (_DWORD *)a4[1]; + result = v5; + goto LABEL_6; + } + a3[2] = a2; + if ( a4 != a3 ) + { + if ( (_DWORD *)a4[2] == a3 ) + a4[2] = a2; + goto LABEL_5; + } + result = a2; + a4[1] = a2; + a4[3] = a2; + *a2 = 1; + return result; +} + +//----- (0052BF60) -------------------------------------------------------- +_DWORD *__cdecl std::ws>(_DWORD *a1) +{ + _BYTE *v1; // eax + unsigned int v2; // eax + unsigned int v3; // edx + const std::locale *v5; // [esp+4h] [ebp-68h] + _DWORD *v6; // [esp+14h] [ebp-58h] + _DWORD *v7; // [esp+18h] [ebp-54h] + _DWORD *v8[4]; // [esp+5Ch] [ebp-10h] BYREF + + std::locale::locale( + (volatile signed __int32 **)v8, + (volatile signed __int32 **)((char *)a1 + *(_DWORD *)(*a1 - 12) + 108), + v5); + v7 = std::use_facet>((int)v8); + std::locale::~locale(v8); + v6 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*a1 - 12) + 120); + v1 = (_BYTE *)v6[2]; + if ( (unsigned int)v1 < v6[3] ) + goto LABEL_5; +LABEL_11: + v1 = (_BYTE *)(*(int (__fastcall **)(_DWORD *))(*v6 + 36))(v6); + if ( v1 == (_BYTE *)-1 ) + { +LABEL_9: + std::ios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 2); + } + else + { + while ( (*(_BYTE *)(v7[6] + 2 * (unsigned __int8)v1) & 0x20) != 0 ) + { + v2 = v6[2]; + v3 = v6[3]; + if ( v2 < v3 ) + { + v1 = (_BYTE *)(v2 + 1); + v6[2] = v1; + } + else + { + if ( (*(int (__fastcall **)(_DWORD *))(*v6 + 40))(v6) == -1 ) + goto LABEL_9; + v1 = (_BYTE *)v6[2]; + v3 = v6[3]; + } + if ( (unsigned int)v1 >= v3 ) + goto LABEL_11; +LABEL_5: + LOBYTE(v1) = *v1; + } + } + return a1; +} +// 52BFA9: variable 'v5' is possibly undefined + +//----- (0052C0E0) -------------------------------------------------------- +_DWORD *__cdecl std::ws>(_DWORD *a1) +{ + unsigned __int16 *v1; // eax + __int16 v2; // dx + unsigned __int16 i; // ax + __int16 *v4; // eax + const std::locale *v6; // [esp+Ch] [ebp-68h] + _DWORD *v7; // [esp+1Ch] [ebp-58h] + void *v8; // [esp+20h] [ebp-54h] + _DWORD *v9[4]; // [esp+64h] [ebp-10h] BYREF + + std::locale::locale( + (volatile signed __int32 **)v9, + (volatile signed __int32 **)((char *)a1 + *(_DWORD *)(*a1 - 12) + 108), + v6); + v8 = std::use_facet>((int)v9); + std::locale::~locale(v9); + v7 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*a1 - 12) + 120); + v1 = (unsigned __int16 *)v7[2]; + if ( (unsigned int)v1 < v7[3] ) + goto LABEL_5; +LABEL_12: + for ( i = (*(int (__fastcall **)(_DWORD *))(*v7 + 36))(v7); i != 0xFFFF; i = *v1 ) + { + if ( !(*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v8 + 8))(v8, 32, i) ) + return a1; + v4 = (__int16 *)v7[2]; + if ( (unsigned int)v4 < v7[3] ) + { + v2 = *v4; + v7[2] = v4 + 1; + if ( v2 == -1 ) + break; + } + else if ( (*(unsigned __int16 (__fastcall **)(_DWORD *))(*v7 + 40))(v7) == 0xFFFF ) + { + break; + } + v1 = (unsigned __int16 *)v7[2]; + if ( (unsigned int)v1 >= v7[3] ) + goto LABEL_12; +LABEL_5: + ; + } + std::wios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 2); + return a1; +} +// 52C129: variable 'v6' is possibly undefined + +//----- (0052C270) -------------------------------------------------------- +std::ios_base *__cdecl std::hex(std::ios_base *a1) +{ + *((_DWORD *)a1 + 3) = *((_DWORD *)a1 + 3) & 0xFFFFFFB5 | 8; + return a1; +} + +//----- (0052C290) -------------------------------------------------------- +_DWORD *__cdecl std::endl>(std::ostream::sentry *a1) +{ + int v1; // eax + _BYTE *v2; // ebx + int v3; // eax + std::ostream::sentry *v4; // eax + int (__stdcall *v6)(unsigned __int8); // edx + char v7; // [esp+4h] [ebp-18h] + + v1 = *(_DWORD *)(*(_DWORD *)a1 - 12); + v2 = *(_BYTE **)((char *)a1 + v1 + 124); + if ( !v2 ) + std::__throw_bad_cast(); + if ( v2[28] ) + { + v3 = (char)v2[39]; + } + else + { + std::ctype::_M_widen_init(*(_DWORD *)((char *)a1 + v1 + 124)); + v6 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v2 + 24); + v3 = 10; + if ( v6 != std::ctype::do_widen ) + v3 = ((char (__thiscall *)(_BYTE *, int))v6)(v2, 10); + } + v4 = std::ostream::put(a1, (std::ostream *)v3, v7); + return std::ostream::flush(v4); +} +// 52C2B5: variable 'v7' is possibly undefined + +//----- (0052C310) -------------------------------------------------------- +_DWORD *__cdecl std::endl>(int *a1) +{ + int v1; // ecx + unsigned __int16 v2; // ax + int *v3; // eax + + v1 = *(int *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 124); + if ( !v1 ) + std::__throw_bad_cast(); + v2 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v1 + 40))(v1, 10); + v3 = std::wostream::put(a1, v2); + return std::wostream::flush(v3); +} + +//----- (0052C360) -------------------------------------------------------- +std::ostream::sentry *__cdecl std::ends>(std::ostream::sentry *a1) +{ + char v2; // [esp+4h] [ebp-18h] + + return std::ostream::put(a1, 0, v2); +} +// 52C36E: variable 'v2' is possibly undefined + +//----- (0052C380) -------------------------------------------------------- +int *__cdecl std::ends>(int *a1) +{ + return std::wostream::put(a1, 0); +} + +//----- (0052C3A0) -------------------------------------------------------- +int __cdecl std::find<__gnu_cxx::__normal_iterator>,std::string>( + int a1, + int a2, + int a3) +{ + int v3; // esi + int i; // edi + int v5; // ebx + int v6; // eax + + v3 = a1; + for ( i = (-1431655765 * ((a2 - a1) >> 3)) >> 2; ; --i ) + { + v5 = v3; + if ( i <= 0 ) + break; + if ( (unsigned __int8)__gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v3) ) + return v5; + v5 = v3 + 24; + if ( (unsigned __int8)__gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v3 + 24) ) + return v5; + v5 = v3 + 48; + if ( (unsigned __int8)__gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v3 + 48) ) + return v5; + v5 = v3 + 72; + v3 += 96; + if ( (unsigned __int8)__gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v5) ) + return v5; + } + v6 = a2 - v3; + if ( a2 - v3 == 48 ) + { +LABEL_14: + if ( (unsigned __int8)__gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v5) ) + return v5; + v5 += 24; + goto LABEL_16; + } + if ( v6 == 72 ) + { + if ( (unsigned __int8)__gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v3) ) + return v5; + v5 = v3 + 24; + goto LABEL_14; + } + if ( v6 != 24 ) + return a2; +LABEL_16: + if ( !(unsigned __int8)__gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v5) ) + return a2; + return v5; +} + +//----- (0052C464) -------------------------------------------------------- +int __cdecl std::find<__gnu_cxx::__normal_iterator>,char const*>( + int a1, + int a2, + char **a3) +{ + int v3; // esi + int i; // edi + int v5; // ebx + int v6; // eax + + v3 = a1; + for ( i = (-1431655765 * ((a2 - a1) >> 3)) >> 2; ; --i ) + { + v5 = v3; + if ( i <= 0 ) + break; + if ( __gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v3) ) + { + return v5; + } + v5 = v3 + 24; + if ( __gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v3 + 24) ) + { + return v5; + } + v5 = v3 + 48; + if ( __gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v3 + 48) ) + { + return v5; + } + v5 = v3 + 72; + v3 += 96; + if ( __gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v5) ) + { + return v5; + } + } + v6 = a2 - v3; + if ( a2 - v3 == 48 ) + { +LABEL_14: + if ( __gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v5) ) + { + return v5; + } + v5 += 24; + goto LABEL_16; + } + if ( v6 == 72 ) + { + if ( __gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v3) ) + { + return v5; + } + v5 = v3 + 24; + goto LABEL_14; + } + if ( v6 != 24 ) + return a2; +LABEL_16: + if ( !__gnu_cxx::__ops::_Iter_equals_val::operator()<__gnu_cxx::__normal_iterator>>( + a3, + v5) ) + return a2; + return v5; +} + +//----- (0052C528) -------------------------------------------------------- +int __cdecl std::find<__gnu_cxx::__normal_iterator>,std::string>( + int a1, + int a2, + int a3) +{ + int v3; // ebx + int v4; // esi + int v5; // eax + int i; // [esp+1Ch] [ebp-1Ch] + + v3 = a1; + for ( i = (-1431655765 * ((a2 - a1) >> 3)) >> 2; ; --i ) + { + v4 = v3; + if ( i <= 0 ) + break; + if ( std::operator==(v3, a3) ) + return v4; + v4 = v3 + 24; + if ( std::operator==(v3 + 24, a3) ) + return v4; + v4 = v3 + 48; + if ( std::operator==(v3 + 48, a3) ) + return v4; + v4 = v3 + 72; + v3 += 96; + if ( std::operator==(v4, a3) ) + return v4; + } + v5 = a2 - v3; + if ( a2 - v3 == 48 ) + { +LABEL_14: + if ( std::operator==(v4, a3) ) + return v4; + v4 += 24; + goto LABEL_16; + } + if ( v5 == 72 ) + { + if ( std::operator==(v3, a3) ) + return v4; + v4 = v3 + 24; + goto LABEL_14; + } + if ( v5 != 24 ) + return a2; +LABEL_16: + if ( !std::operator==(v4, a3) ) + return a2; + return v4; +} + +//----- (0052C604) -------------------------------------------------------- +void __cdecl std::sort<__gnu_cxx::__normal_iterator *,std::vector>>,bool (*)(std::pair const&,std::pair const&)>( + char *a1, + char *a2, + int (__cdecl *a3)(int, int)) +{ + unsigned int v3; // eax + char *v4; // ebx + char *v5; // [esp+0h] [ebp-38h] + + if ( a1 != a2 ) + { + _BitScanReverse(&v3, -252645135 * ((a2 - a1) >> 3)); + std::__introsort_loop<__gnu_cxx::__normal_iterator *,std::vector>>,int,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>( + a1, + (int)a2, + 2 * (31 - (v3 ^ 0x1F)), + a3); + if ( a2 - a1 <= 2176 ) + { + std::__insertion_sort<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>( + (unsigned __int8 **)a1, + a2, + (int (__cdecl *)(void **, struct _Unwind_Exception *))a3); + } + else + { + v4 = a1 + 2176; + std::__insertion_sort<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Iter_comp_iter const&,std::pair const&)>>( + (unsigned __int8 **)a1, + a1 + 2176, + (int (__cdecl *)(void **, struct _Unwind_Exception *))a3); + while ( v4 != a2 ) + { + v5 = v4; + v4 += 136; + std::__unguarded_linear_insert<__gnu_cxx::__normal_iterator *,std::vector>>,__gnu_cxx::__ops::_Val_comp_iter const&,std::pair const&)>>( + v5, + (int (__cdecl *)(void **, struct _Unwind_Exception *))a3); + } + } + } +} + +//----- (0052C6B0) -------------------------------------------------------- +_DWORD *__cdecl std::flush>(_DWORD *a1) +{ + return std::ostream::flush(a1); +} + +//----- (0052C6C0) -------------------------------------------------------- +_DWORD *__cdecl std::flush>(_DWORD *a1) +{ + return std::wostream::flush(a1); +} + +//----- (0052C6D0) -------------------------------------------------------- +std::istream::sentry *__cdecl std::getline,std::allocator>( + std::istream::sentry *a1, + _DWORD *a2) +{ + int v2; // eax + _BYTE *v3; // ebx + unsigned __int8 v4; // al + int (__stdcall *v6)(unsigned __int8); // edx + + v2 = *(_DWORD *)(*(_DWORD *)a1 - 12); + v3 = *(_BYTE **)((char *)a1 + v2 + 124); + if ( !v3 ) + std::__throw_bad_cast(); + if ( v3[28] ) + { + v4 = v3[39]; + } + else + { + std::ctype::_M_widen_init(*(_DWORD *)((char *)a1 + v2 + 124)); + v6 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v3 + 24); + v4 = 10; + if ( v6 != std::ctype::do_widen ) + v4 = ((int (__thiscall *)(_BYTE *, int))v6)(v3, 10); + } + return std::getline,std::allocator>(a1, a2, v4); +} + +//----- (0052C750) -------------------------------------------------------- +std::istream::sentry *__cdecl std::getline,std::allocator>( + std::istream::sentry *a1, + _DWORD *a2, + unsigned __int8 a3) +{ + int v3; // eax + unsigned __int8 *v5; // eax + int v6; // edx + _BYTE *v7; // eax + size_t v8; // edx + unsigned __int8 *v9; // eax + unsigned int v10; // eax + signed int v11; // eax + _BYTE *v12; // eax + unsigned int v13; // edx + unsigned int v14; // eax + unsigned int v15; // edx + bool v16; // [esp+8h] [ebp-90h] + _DWORD *v17; // [esp+28h] [ebp-70h] + size_t v18; // [esp+2Ch] [ebp-6Ch] + size_t MaxCount; // [esp+30h] [ebp-68h] + size_t MaxCounta; // [esp+30h] [ebp-68h] + char MaxCountb; // [esp+30h] [ebp-68h] + unsigned int v22; // [esp+34h] [ebp-64h] + unsigned int v23; // [esp+34h] [ebp-64h] + char *Buf; // [esp+38h] [ebp-60h] + void *Bufa; // [esp+38h] [ebp-60h] + char v26[25]; // [esp+7Fh] [ebp-19h] BYREF + + std::istream::sentry::sentry(v26, a1, (std::istream *)1, v16); + if ( !v26[0] ) + { +LABEL_2: + v3 = 4; +LABEL_3: + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | v3); + return a1; + } + a2[1] = 0; + *(_BYTE *)*a2 = 0; + v17 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v5 = (unsigned __int8 *)v17[2]; + if ( (unsigned int)v5 >= v17[3] ) + v6 = (*(int (__fastcall **)(_DWORD *))(*v17 + 36))(v17); + else + v6 = *v5; + v22 = 0; + do + { + while ( 1 ) + { + if ( v6 == -1 ) + { + if ( !v22 ) + { + v3 = 6; + goto LABEL_3; + } +LABEL_34: + v3 = 2; + goto LABEL_3; + } + v10 = v17[3]; + Buf = (char *)v17[2]; + if ( a3 == v6 ) + goto LABEL_29; + v11 = v10 - v17[2]; + if ( (int)(0x3FFFFFFF - v22) <= v11 ) + v11 = 0x3FFFFFFF - v22; + MaxCounta = v11; + v18 = a2[1]; + if ( v11 <= 1 ) + break; + v7 = memchr(Buf, (char)a3, v11); + v8 = v7 - Buf; + if ( !v7 ) + v8 = MaxCounta; + MaxCount = v8; + if ( v8 > 0x3FFFFFFF - v18 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(a2, Buf, v8); + v22 += MaxCount; + v9 = (unsigned __int8 *)(MaxCount + v17[2]); + v17[2] = v9; + if ( (unsigned int)v9 >= v17[3] ) + goto LABEL_25; +LABEL_12: + v6 = *v9; + if ( v22 > 0x3FFFFFFE ) + goto LABEL_26; + } + MaxCountb = v6; + Bufa = (void *)(v18 + 1); + v12 = (_BYTE *)*a2; + if ( (_DWORD *)*a2 == a2 + 2 ) + v13 = 15; + else + v13 = a2[2]; + if ( (unsigned int)Bufa > v13 ) + { + std::string::_M_mutate((int)a2, v18, 0, 0, 1u); + v12 = (_BYTE *)*a2; + } + v12[v18] = MaxCountb; + ++v22; + a2[1] = Bufa; + *(_BYTE *)(*a2 + v18 + 1) = 0; + v14 = v17[2]; + v15 = v17[3]; + if ( v14 >= v15 ) + { + if ( (*(int (__fastcall **)(_DWORD *))(*v17 + 40))(v17) == -1 ) + goto LABEL_34; + v9 = (unsigned __int8 *)v17[2]; + v15 = v17[3]; + } + else + { + v9 = (unsigned __int8 *)(v14 + 1); + v17[2] = v9; + } + if ( v15 > (unsigned int)v9 ) + goto LABEL_12; +LABEL_25: + v6 = (*(int (__fastcall **)(_DWORD *))(*v17 + 36))(v17); + } + while ( v22 <= 0x3FFFFFFE ); +LABEL_26: + if ( v6 == -1 ) + goto LABEL_34; + v3 = 4; + if ( v6 != a3 ) + goto LABEL_3; + v10 = v17[3]; + Buf = (char *)v17[2]; +LABEL_29: + v23 = v22 + 1; + if ( v10 <= (unsigned int)Buf ) + { + (*(void (__fastcall **)(_DWORD *))(*v17 + 40))(v17); + if ( v23 ) + return a1; + goto LABEL_2; + } + v17[2] = Buf + 1; + if ( !v23 ) + goto LABEL_2; + return a1; +} +// 52C7A3: variable 'v16' is possibly undefined +// 52C750: using guessed type char var_19[25]; + +//----- (0052CBA0) -------------------------------------------------------- +_DWORD *__cdecl std::getline,std::allocator>( + _DWORD *a1, + _DWORD *a2, + __int16 a3) +{ + int v3; // eax + __int16 *v5; // eax + unsigned int v6; // ebx + __int16 *v7; // ecx + int v8; // eax + int v9; // edx + _WORD *v10; // eax + __int16 *v11; // eax + __int16 v12; // ax + _WORD *v13; // eax + unsigned int v14; // edx + __int16 v15; // ax + unsigned int v16; // [esp+24h] [ebp-74h] + int v17; // [esp+2Ch] [ebp-6Ch] + _DWORD *v18; // [esp+30h] [ebp-68h] + unsigned int v19; // [esp+34h] [ebp-64h] + unsigned int v20; // [esp+34h] [ebp-64h] + __int16 lpuexcpt; // [esp+38h] [ebp-60h] + unsigned int lpuexcpta; // [esp+38h] [ebp-60h] + char v23[25]; // [esp+7Fh] [ebp-19h] BYREF + + std::wistream::sentry::sentry(v23, a1, 1); + if ( !v23[0] ) + { +LABEL_2: + v3 = 4; +LABEL_3: + std::wios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | v3); + return a1; + } + a2[1] = 0; + *(_WORD *)*a2 = 0; + v18 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*a1 - 12) + 120); + v5 = (__int16 *)v18[2]; + if ( (unsigned int)v5 >= v18[3] ) + lpuexcpt = (*(int (__fastcall **)(_DWORD *))(*v18 + 36))(v18); + else + lpuexcpt = *v5; + v19 = 0; + do + { + if ( lpuexcpt == -1 ) + { + if ( !v19 ) + { + v3 = 6; + goto LABEL_3; + } +LABEL_39: + v3 = 2; + goto LABEL_3; + } + v6 = v18[3]; + v7 = (__int16 *)v18[2]; + if ( a3 == lpuexcpt ) + goto LABEL_24; + v8 = (int)(v6 - (_DWORD)v7) >> 1; + if ( v8 > (int)(0x1FFFFFFF - v19) ) + v8 = 0x1FFFFFFF - v19; + v17 = a2[1]; + if ( v8 <= 1 ) + { + v16 = v17 + 1; + v13 = (_WORD *)*a2; + if ( (_DWORD *)*a2 == a2 + 2 ) + v14 = 7; + else + v14 = a2[2]; + if ( v16 > v14 ) + { + std::wstring::_M_mutate((int)a2, v17, 0, 0, 1); + v7 = (__int16 *)v18[2]; + v13 = (_WORD *)*a2; + v6 = v18[3]; + } + ++v19; + v13[v17] = lpuexcpt; + a2[1] = v16; + v13[v17 + 1] = 0; + if ( v6 <= (unsigned int)v7 ) + { + v15 = (*(int (__fastcall **)(_DWORD *))(*v18 + 40))(v18); + } + else + { + v15 = *v7; + v18[2] = v7 + 1; + } + if ( v15 == -1 ) + goto LABEL_39; + v11 = (__int16 *)v18[2]; + if ( (unsigned int)v11 < v18[3] ) + { +LABEL_19: + v12 = *v11; + goto LABEL_20; + } + } + else + { + lpuexcpta = v8; + v9 = v8; + if ( v7 ) + { + v10 = (_WORD *)v18[2]; + while ( *v10 != a3 ) + { + ++v10; + if ( !--v9 ) + goto LABEL_17; + } + lpuexcpta = v10 - v7; + } +LABEL_17: + if ( lpuexcpta > 0x1FFFFFFF - v17 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::wstring::_M_append(a2, v7, lpuexcpta); + v19 += lpuexcpta; + v11 = (__int16 *)(v18[2] + 2 * lpuexcpta); + v18[2] = v11; + if ( (unsigned int)v11 < v18[3] ) + goto LABEL_19; + } + v12 = (*(int (__fastcall **)(_DWORD *))(*v18 + 36))(v18); +LABEL_20: + lpuexcpt = v12; + } + while ( v19 <= 0x1FFFFFFE ); + if ( v12 == -1 ) + goto LABEL_39; + v3 = 4; + if ( lpuexcpt != a3 ) + goto LABEL_3; + v7 = (__int16 *)v18[2]; + v6 = v18[3]; +LABEL_24: + v20 = v19 + 1; + if ( (unsigned int)v7 >= v6 ) + { + (*(void (__fastcall **)(_DWORD *))(*v18 + 40))(v18); + if ( v20 ) + return a1; + goto LABEL_2; + } + v18[2] = v7 + 1; + if ( !v20 ) + goto LABEL_2; + return a1; +} +// 52CBA0: using guessed type char var_19[25]; + +//----- (0052CFE0) -------------------------------------------------------- +int __cdecl std::setfill(unsigned __int8 a1) +{ + return a1; +} + +//----- (0052CFF0) -------------------------------------------------------- +int __cdecl std::setfill(unsigned __int16 a1) +{ + return a1; +} + +//----- (0052D000) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::moneypunct::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::moneypunct, + 0) != 0; + } + return v2; +} +// 52D049: variable 'v2' is possibly undefined +// 53F708: using guessed type signed __int32 std::moneypunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BB18: using guessed type int *`typeinfo for'std::moneypunct; + +//----- (0052D050) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::moneypunct::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::moneypunct, + 0) != 0; + } + return v2; +} +// 52D099: variable 'v2' is possibly undefined +// 53F710: using guessed type signed __int32 std::moneypunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BB58: using guessed type int *`typeinfo for'std::moneypunct; + +//----- (0052D0A0) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::collate::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::collate, + 0) != 0; + } + return v2; +} +// 52D0E9: variable 'v2' is possibly undefined +// 53F718: using guessed type signed __int32 std::collate::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BC90: using guessed type int *`typeinfo for'std::collate; + +//----- (0052D0F0) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::collate::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::collate, + 0) != 0; + } + return v2; +} +// 52D139: variable 'v2' is possibly undefined +// 53F71C: using guessed type signed __int32 std::collate::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BC9C: using guessed type int *`typeinfo for'std::collate; + +//----- (0052D140) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::messages::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::messages, + 0) != 0; + } + return v2; +} +// 52D189: variable 'v2' is possibly undefined +// 53F720: using guessed type signed __int32 std::messages::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BCA8: using guessed type int *`typeinfo for'std::messages; + +//----- (0052D190) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::messages::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::messages, + 0) != 0; + } + return v2; +} +// 52D1D9: variable 'v2' is possibly undefined +// 53F724: using guessed type signed __int32 std::messages::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BCC8: using guessed type int *`typeinfo for'std::messages; + +//----- (0052D1E0) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::numpunct::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::numpunct, + 0) != 0; + } + return v2; +} +// 52D229: variable 'v2' is possibly undefined +// 53F728: using guessed type signed __int32 std::numpunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BCE8: using guessed type int *`typeinfo for'std::numpunct; + +//----- (0052D230) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::numpunct::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::numpunct, + 0) != 0; + } + return v2; +} +// 52D279: variable 'v2' is possibly undefined +// 53F72C: using guessed type signed __int32 std::numpunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BCF4: using guessed type int *`typeinfo for'std::numpunct; + +//----- (0052D280) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::time_get>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::time_get>, + 0) != 0; + } + return v2; +} +// 52D2C9: variable 'v2' is possibly undefined +// 53F730: using guessed type signed __int32 std::time_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BD00: using guessed type int *`typeinfo for'std::time_get>; + +//----- (0052D2D0) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::time_get>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::time_get>, + 0) != 0; + } + return v2; +} +// 52D319: variable 'v2' is possibly undefined +// 53F734: using guessed type signed __int32 std::time_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BD20: using guessed type int *`typeinfo for'std::time_get>; + +//----- (0052D320) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::money_get>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_get>, + 0) != 0; + } + return v2; +} +// 52D369: variable 'v2' is possibly undefined +// 53F738: using guessed type signed __int32 std::money_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BD40: using guessed type int *`typeinfo for'std::money_get>; + +//----- (0052D370) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::money_get>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_get>, + 0) != 0; + } + return v2; +} +// 52D3B9: variable 'v2' is possibly undefined +// 53F73C: using guessed type signed __int32 std::money_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BD4C: using guessed type int *`typeinfo for'std::money_get>; + +//----- (0052D3C0) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::money_put>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_put>, + 0) != 0; + } + return v2; +} +// 52D409: variable 'v2' is possibly undefined +// 53F740: using guessed type signed __int32 std::money_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BD58: using guessed type int *`typeinfo for'std::money_put>; + +//----- (0052D410) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::money_put>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_put>, + 0) != 0; + } + return v2; +} +// 52D459: variable 'v2' is possibly undefined +// 53F744: using guessed type signed __int32 std::money_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BD64: using guessed type int *`typeinfo for'std::money_put>; + +//----- (0052D460) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::moneypunct::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::moneypunct, + 0) != 0; + } + return v2; +} +// 52D4A9: variable 'v2' is possibly undefined +// 53F58C: using guessed type signed __int32 std::moneypunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BDF4: using guessed type int *`typeinfo for'std::moneypunct; + +//----- (0052D4B0) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::moneypunct::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::moneypunct, + 0) != 0; + } + return v2; +} +// 52D4F9: variable 'v2' is possibly undefined +// 53F594: using guessed type signed __int32 std::moneypunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BE34: using guessed type int *`typeinfo for'std::moneypunct; + +//----- (0052D500) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::__timepunct::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::__timepunct, + 0) != 0; + } + return v2; +} +// 52D549: variable 'v2' is possibly undefined +// 53F59C: using guessed type signed __int32 std::__timepunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BE7C: using guessed type int *`typeinfo for'std::__timepunct; + +//----- (0052D550) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::__timepunct::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::__timepunct, + 0) != 0; + } + return v2; +} +// 52D599: variable 'v2' is possibly undefined +// 53F5A0: using guessed type signed __int32 std::__timepunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BE88: using guessed type int *`typeinfo for'std::__timepunct; + +//----- (0052D5A0) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::ctype::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::ctype, + 0) != 0; + } + return v2; +} +// 52D5E9: variable 'v2' is possibly undefined +// 53F6E0: using guessed type signed __int32 std::ctype::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C310: using guessed type int *`typeinfo for'std::ctype; + +//----- (0052D5F0) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::ctype::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::ctype, + 0) != 0; + } + return v2; +} +// 52D639: variable 'v2' is possibly undefined +// 53F6E4: using guessed type signed __int32 std::ctype::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C330: using guessed type int *`typeinfo for'std::ctype; + +//----- (0052D640) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::codecvt::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::codecvt, + 0) != 0; + } + return v2; +} +// 52D689: variable 'v2' is possibly undefined +// 53F758: using guessed type signed __int32 std::codecvt::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C36C: using guessed type int *`typeinfo for'std::codecvt; + +//----- (0052D690) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::codecvt::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::codecvt, + 0) != 0; + } + return v2; +} +// 52D6D9: variable 'v2' is possibly undefined +// 53F75C: using guessed type signed __int32 std::codecvt::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C378: using guessed type int *`typeinfo for'std::codecvt; + +//----- (0052D6E0) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::collate::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::collate, + 0) != 0; + } + return v2; +} +// 52D729: variable 'v2' is possibly undefined +// 53F760: using guessed type signed __int32 std::collate::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C384: using guessed type int *`typeinfo for'std::collate; + +//----- (0052D730) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::collate::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::collate, + 0) != 0; + } + return v2; +} +// 52D779: variable 'v2' is possibly undefined +// 53F764: using guessed type signed __int32 std::collate::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C390: using guessed type int *`typeinfo for'std::collate; + +//----- (0052D780) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::num_get>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::num_get>, + 0) != 0; + } + return v2; +} +// 52D7C9: variable 'v2' is possibly undefined +// 53F768: using guessed type signed __int32 std::num_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C39C: using guessed type int *`typeinfo for'std::num_get>; + +//----- (0052D7D0) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::num_get>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::num_get>, + 0) != 0; + } + return v2; +} +// 52D819: variable 'v2' is possibly undefined +// 53F76C: using guessed type signed __int32 std::num_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C3A8: using guessed type int *`typeinfo for'std::num_get>; + +//----- (0052D820) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::num_put>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::num_put>, + 0) != 0; + } + return v2; +} +// 52D869: variable 'v2' is possibly undefined +// 53F770: using guessed type signed __int32 std::num_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C3B4: using guessed type int *`typeinfo for'std::num_put>; + +//----- (0052D870) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::num_put>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::num_put>, + 0) != 0; + } + return v2; +} +// 52D8B9: variable 'v2' is possibly undefined +// 53F774: using guessed type signed __int32 std::num_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C3C0: using guessed type int *`typeinfo for'std::num_put>; + +//----- (0052D8C0) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::messages::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::messages, + 0) != 0; + } + return v2; +} +// 52D909: variable 'v2' is possibly undefined +// 53F780: using guessed type signed __int32 std::messages::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C3E0: using guessed type int *`typeinfo for'std::messages; + +//----- (0052D910) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::messages::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::messages, + 0) != 0; + } + return v2; +} +// 52D959: variable 'v2' is possibly undefined +// 53F784: using guessed type signed __int32 std::messages::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C400: using guessed type int *`typeinfo for'std::messages; + +//----- (0052D960) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::numpunct::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::numpunct, + 0) != 0; + } + return v2; +} +// 52D9A9: variable 'v2' is possibly undefined +// 53F788: using guessed type signed __int32 std::numpunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C420: using guessed type int *`typeinfo for'std::numpunct; + +//----- (0052D9B0) -------------------------------------------------------- +int __cdecl std::has_facet>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::numpunct::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::numpunct, + 0) != 0; + } + return v2; +} +// 52D9F9: variable 'v2' is possibly undefined +// 53F78C: using guessed type signed __int32 std::numpunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C42C: using guessed type int *`typeinfo for'std::numpunct; + +//----- (0052DA00) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::time_get>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::time_get>, + 0) != 0; + } + return v2; +} +// 52DA49: variable 'v2' is possibly undefined +// 53F790: using guessed type signed __int32 std::time_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C438: using guessed type int *`typeinfo for'std::time_get>; + +//----- (0052DA50) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::time_get>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::time_get>, + 0) != 0; + } + return v2; +} +// 52DA99: variable 'v2' is possibly undefined +// 53F794: using guessed type signed __int32 std::time_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C458: using guessed type int *`typeinfo for'std::time_get>; + +//----- (0052DAA0) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::time_put>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::time_put>, + 0) != 0; + } + return v2; +} +// 52DAE9: variable 'v2' is possibly undefined +// 53F798: using guessed type signed __int32 std::time_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C478: using guessed type int *`typeinfo for'std::time_put>; + +//----- (0052DAF0) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::time_put>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::time_put>, + 0) != 0; + } + return v2; +} +// 52DB39: variable 'v2' is possibly undefined +// 53F79C: using guessed type signed __int32 std::time_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C484: using guessed type int *`typeinfo for'std::time_put>; + +//----- (0052DB40) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::money_get>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_get>, + 0) != 0; + } + return v2; +} +// 52DB89: variable 'v2' is possibly undefined +// 53F7A0: using guessed type signed __int32 std::money_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C4BC: using guessed type int *`typeinfo for'std::money_get>; + +//----- (0052DB90) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::money_get>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_get>, + 0) != 0; + } + return v2; +} +// 52DBD9: variable 'v2' is possibly undefined +// 53F7A4: using guessed type signed __int32 std::money_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C4C8: using guessed type int *`typeinfo for'std::money_get>; + +//----- (0052DBE0) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(&std::money_put>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_put>, + 0) != 0; + } + return v2; +} +// 52DC29: variable 'v2' is possibly undefined +// 53F7A8: using guessed type signed __int32 std::money_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C4D4: using guessed type int *`typeinfo for'std::money_put>; + +//----- (0052DC30) -------------------------------------------------------- +int __cdecl std::has_facet>>(int a1) +{ + unsigned int v1; // eax + int v2; // ecx + const void *lpsrc; // eax + + v1 = std::locale::id::_M_id(std::money_put>::id); + v2 = 0; + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) > v1 ) + { + lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1); + if ( lpsrc ) + LOBYTE(v2) = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_put>, + 0) != 0; + } + return v2; +} +// 52DC79: variable 'v2' is possibly undefined +// 53F7AC: using guessed type signed __int32 std::money_put>::id[5]; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C4E0: using guessed type int *`typeinfo for'std::money_put>; + +//----- (0052DC80) -------------------------------------------------------- +void __noreturn std::terminate(void) +{ + __cxxabiv1::__terminate(__cxxabiv1::__terminate_handler); +} + +//----- (0052DC90) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::moneypunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::moneypunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F708: using guessed type signed __int32 std::moneypunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BB18: using guessed type int *`typeinfo for'std::moneypunct; + +//----- (0052DCF0) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::moneypunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::moneypunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F70C: using guessed type signed __int32 std::moneypunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BB38: using guessed type int *`typeinfo for'std::moneypunct; + +//----- (0052DD50) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::moneypunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::moneypunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F710: using guessed type signed __int32 std::moneypunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BB58: using guessed type int *`typeinfo for'std::moneypunct; + +//----- (0052DDB0) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::moneypunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::moneypunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F714: using guessed type signed __int32 std::moneypunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BB78: using guessed type int *`typeinfo for'std::moneypunct; + +//----- (0052DE10) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::collate::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::collate, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F718: using guessed type signed __int32 std::collate::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BC90: using guessed type int *`typeinfo for'std::collate; + +//----- (0052DE70) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::collate::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::collate, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F71C: using guessed type signed __int32 std::collate::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BC9C: using guessed type int *`typeinfo for'std::collate; + +//----- (0052DED0) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::messages::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::messages, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F720: using guessed type signed __int32 std::messages::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BCA8: using guessed type int *`typeinfo for'std::messages; + +//----- (0052DF30) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::messages::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::messages, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F724: using guessed type signed __int32 std::messages::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BCC8: using guessed type int *`typeinfo for'std::messages; + +//----- (0052DF90) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::numpunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::numpunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F728: using guessed type signed __int32 std::numpunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BCE8: using guessed type int *`typeinfo for'std::numpunct; + +//----- (0052DFF0) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::numpunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::numpunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F72C: using guessed type signed __int32 std::numpunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BCF4: using guessed type int *`typeinfo for'std::numpunct; + +//----- (0052E050) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::time_get>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::time_get>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F730: using guessed type signed __int32 std::time_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BD00: using guessed type int *`typeinfo for'std::time_get>; + +//----- (0052E0B0) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::time_get>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::time_get>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F734: using guessed type signed __int32 std::time_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BD20: using guessed type int *`typeinfo for'std::time_get>; + +//----- (0052E110) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::money_get>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_get>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F738: using guessed type signed __int32 std::money_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BD40: using guessed type int *`typeinfo for'std::money_get>; + +//----- (0052E170) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::money_get>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_get>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F73C: using guessed type signed __int32 std::money_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BD4C: using guessed type int *`typeinfo for'std::money_get>; + +//----- (0052E1D0) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::money_put>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_put>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F740: using guessed type signed __int32 std::money_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BD58: using guessed type int *`typeinfo for'std::money_put>; + +//----- (0052E230) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::money_put>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_put>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F744: using guessed type signed __int32 std::money_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BD64: using guessed type int *`typeinfo for'std::money_put>; + +//----- (0052E290) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::moneypunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::moneypunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F58C: using guessed type signed __int32 std::moneypunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BDF4: using guessed type int *`typeinfo for'std::moneypunct; + +//----- (0052E2F0) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::moneypunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::moneypunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F590: using guessed type signed __int32 std::moneypunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BE14: using guessed type int *`typeinfo for'std::moneypunct; + +//----- (0052E350) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::moneypunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::moneypunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F594: using guessed type signed __int32 std::moneypunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BE34: using guessed type int *`typeinfo for'std::moneypunct; + +//----- (0052E3B0) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::moneypunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::moneypunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F598: using guessed type signed __int32 std::moneypunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BE54: using guessed type int *`typeinfo for'std::moneypunct; + +//----- (0052E410) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::__timepunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::__timepunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F59C: using guessed type signed __int32 std::__timepunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BE7C: using guessed type int *`typeinfo for'std::__timepunct; + +//----- (0052E470) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::__timepunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::__timepunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F5A0: using guessed type signed __int32 std::__timepunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55BE88: using guessed type int *`typeinfo for'std::__timepunct; + +//----- (0052E4D0) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::ctype::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::ctype, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F6E0: using guessed type signed __int32 std::ctype::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C310: using guessed type int *`typeinfo for'std::ctype; + +//----- (0052E530) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::ctype::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::ctype, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F6E4: using guessed type signed __int32 std::ctype::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C330: using guessed type int *`typeinfo for'std::ctype; + +//----- (0052E590) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::codecvt::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::codecvt, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F758: using guessed type signed __int32 std::codecvt::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C36C: using guessed type int *`typeinfo for'std::codecvt; + +//----- (0052E5F0) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::codecvt::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::codecvt, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F75C: using guessed type signed __int32 std::codecvt::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C378: using guessed type int *`typeinfo for'std::codecvt; + +//----- (0052E650) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::collate::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::collate, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F760: using guessed type signed __int32 std::collate::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C384: using guessed type int *`typeinfo for'std::collate; + +//----- (0052E6B0) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::collate::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::collate, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F764: using guessed type signed __int32 std::collate::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C390: using guessed type int *`typeinfo for'std::collate; + +//----- (0052E710) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::num_get>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::num_get>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F768: using guessed type signed __int32 std::num_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C39C: using guessed type int *`typeinfo for'std::num_get>; + +//----- (0052E770) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::num_get>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::num_get>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F76C: using guessed type signed __int32 std::num_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C3A8: using guessed type int *`typeinfo for'std::num_get>; + +//----- (0052E7D0) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::num_put>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::num_put>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F770: using guessed type signed __int32 std::num_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C3B4: using guessed type int *`typeinfo for'std::num_put>; + +//----- (0052E830) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::num_put>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::num_put>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F774: using guessed type signed __int32 std::num_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C3C0: using guessed type int *`typeinfo for'std::num_put>; + +//----- (0052E890) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::messages::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::messages, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F780: using guessed type signed __int32 std::messages::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C3E0: using guessed type int *`typeinfo for'std::messages; + +//----- (0052E8F0) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::messages::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::messages, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F784: using guessed type signed __int32 std::messages::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C400: using guessed type int *`typeinfo for'std::messages; + +//----- (0052E950) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::numpunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::numpunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F788: using guessed type signed __int32 std::numpunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C420: using guessed type int *`typeinfo for'std::numpunct; + +//----- (0052E9B0) -------------------------------------------------------- +void *__cdecl std::use_facet>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::numpunct::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::numpunct, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F78C: using guessed type signed __int32 std::numpunct::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C42C: using guessed type int *`typeinfo for'std::numpunct; + +//----- (0052EA10) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::time_get>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::time_get>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F790: using guessed type signed __int32 std::time_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C438: using guessed type int *`typeinfo for'std::time_get>; + +//----- (0052EA70) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::time_get>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::time_get>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F794: using guessed type signed __int32 std::time_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C458: using guessed type int *`typeinfo for'std::time_get>; + +//----- (0052EAD0) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::time_put>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::time_put>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F798: using guessed type signed __int32 std::time_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C478: using guessed type int *`typeinfo for'std::time_put>; + +//----- (0052EB30) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::time_put>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::time_put>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F79C: using guessed type signed __int32 std::time_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C484: using guessed type int *`typeinfo for'std::time_put>; + +//----- (0052EB90) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::money_get>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_get>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F7A0: using guessed type signed __int32 std::money_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C4BC: using guessed type int *`typeinfo for'std::money_get>; + +//----- (0052EBF0) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::money_get>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_get>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F7A4: using guessed type signed __int32 std::money_get>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C4C8: using guessed type int *`typeinfo for'std::money_get>; + +//----- (0052EC50) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(&std::money_put>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_put>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F7A8: using guessed type signed __int32 std::money_put>::id; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C4D4: using guessed type int *`typeinfo for'std::money_put>; + +//----- (0052ECB0) -------------------------------------------------------- +void *__cdecl std::use_facet>>(int a1) +{ + unsigned int v1; // eax + const void *lpsrc; // eax + void *result; // eax + + v1 = std::locale::id::_M_id(std::money_put>::id); + if ( *(_DWORD *)(*(_DWORD *)a1 + 8) <= v1 || (lpsrc = *(const void **)(*(_DWORD *)(*(_DWORD *)a1 + 4) + 4 * v1)) == 0 ) + std::__throw_bad_cast(); + result = __dynamic_cast( + lpsrc, + (const struct __class_type_info *)&`typeinfo for'std::locale::facet, + (const struct __class_type_info *)&`typeinfo for'std::money_put>, + 0); + if ( !result ) + __cxa_bad_cast(); + return result; +} +// 53F7AC: using guessed type signed __int32 std::money_put>::id[5]; +// 55BB10: using guessed type int *`typeinfo for'std::locale::facet; +// 55C4E0: using guessed type int *`typeinfo for'std::money_put>; + +//----- (0052ED10) -------------------------------------------------------- +bool __cdecl std::operator==(int a1, int a2) +{ + bool result; // al + int v3; // edx + + result = 0; + v3 = *(_DWORD *)(a1 + 4); + if ( v3 == *(_DWORD *)(a2 + 4) ) + { + result = 1; + if ( v3 ) + return memcmp(*(const void **)a1, *(const void **)a2, *(_DWORD *)(a1 + 4)) == 0; + } + return result; +} + +//----- (0052ED4C) -------------------------------------------------------- +bool __cdecl std::operator==(char *a1, int a2) +{ + return std::string::compare(a2, a1) == 0; +} + +//----- (0052ED68) -------------------------------------------------------- +bool __cdecl std::operator==(int a1, char *a2) +{ + return std::string::compare(a1, a2) == 0; +} + +//----- (0052ED90) -------------------------------------------------------- +std::ostream::sentry *__cdecl std::operator<<>(std::ostream::sentry *a1, char *Str) +{ + int v2; // eax + + if ( Str ) + { + v2 = strlen(Str); + std::__ostream_insert>(a1, (int)Str, v2); + } + else + { + std::ios::clear( + (std::ostream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 1); + } + return a1; +} + +//----- (0052EDF0) -------------------------------------------------------- +std::ostream::sentry *__cdecl std::operator<<>(std::ostream::sentry *a1, char *Str) +{ + int v2; // eax + + if ( Str ) + { + v2 = strlen(Str); + std::__ostream_insert>(a1, (int)Str, v2); + } + else + { + std::ios::clear( + (std::ostream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 1); + } + return a1; +} + +//----- (0052EE50) -------------------------------------------------------- +std::ostream::sentry *__cdecl std::operator<<>(std::ostream::sentry *a1, char *Str) +{ + int v2; // eax + + if ( Str ) + { + v2 = strlen(Str); + std::__ostream_insert>(a1, (int)Str, v2); + } + else + { + std::ios::clear( + (std::ostream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 1); + } + return a1; +} + +//----- (0052EEB0) -------------------------------------------------------- +std::ostream::sentry *__cdecl std::operator<<>(std::ostream::sentry *a1, char a2) +{ + int v3[3]; // [esp+1Fh] [ebp-Dh] BYREF + + LOBYTE(v3[0]) = a2; + return std::__ostream_insert>(a1, (int)v3, 1); +} +// 52EEB0: using guessed type int var_D[3]; + +//----- (0052EEE0) -------------------------------------------------------- +std::ostream::sentry *__cdecl std::operator<<>(std::ostream::sentry *a1, char a2) +{ + int v3[4]; // [esp+1Ch] [ebp-10h] BYREF + + LOBYTE(v3[0]) = a2; + return std::__ostream_insert>(a1, (int)v3, 1); +} +// 52EEE0: using guessed type int var_10[4]; + +//----- (0052EF10) -------------------------------------------------------- +std::ostream::sentry *__cdecl std::operator<<>(std::ostream::sentry *a1, char a2) +{ + int v3[3]; // [esp+1Fh] [ebp-Dh] BYREF + + LOBYTE(v3[0]) = a2; + return std::__ostream_insert>(a1, (int)v3, 1); +} +// 52EF10: using guessed type int var_D[3]; + +//----- (0052EF40) -------------------------------------------------------- +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) |= a2; + return result; +} + +//----- (0052EF60) -------------------------------------------------------- +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 4) = a2; + return result; +} + +//----- (0052EF80) -------------------------------------------------------- +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) &= ~a2; + return result; +} + +//----- (0052EFA0) -------------------------------------------------------- +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 8) = a2; + return result; +} + +//----- (0052EFC0) -------------------------------------------------------- +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2) +{ + int v2; // ecx + + v2 = 64; + if ( a2 != 8 ) + { + v2 = 2; + if ( a2 != 10 ) + v2 = 8 * (a2 == 16); + } + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) = v2 | *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) & 0xFFFFFFB5; + return a1; +} + +//----- (0052F000) -------------------------------------------------------- +_DWORD *__cdecl std::operator<<>(_DWORD *a1, char a2) +{ + char *v2; // esi + _BYTE *v4; // edi + int (__stdcall *v5)(unsigned __int8); // eax + + v2 = (char *)a1 + *(_DWORD *)(*a1 - 12); + if ( !v2[117] ) + { + v4 = (_BYTE *)*((_DWORD *)v2 + 31); + if ( !v4 ) + std::__throw_bad_cast(); + if ( !v4[28] ) + { + std::ctype::_M_widen_init(*((_DWORD *)v2 + 31)); + v5 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v4 + 24); + if ( v5 != std::ctype::do_widen ) + ((void (__thiscall *)(_BYTE *, int))v5)(v4, 32); + } + v2[117] = 1; + } + v2[116] = a2; + return a1; +} + +//----- (0052F070) -------------------------------------------------------- +std::ostream::sentry *__cdecl std::operator<<(std::ostream::sentry *a1, int *a2) +{ + return std::__ostream_insert>(a1, *a2, a2[1]); +} + +//----- (0052F0A0) -------------------------------------------------------- +int *__cdecl std::operator<<>(int *a1, wchar_t *String) +{ + int v2; // eax + + if ( String ) + { + v2 = wcslen(String); + std::__ostream_insert>(a1, (int)String, v2); + } + else + { + std::wios::clear((int *)((char *)a1 + *(_DWORD *)(*a1 - 12)), *(int *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 1); + } + return a1; +} + +//----- (0052F100) -------------------------------------------------------- +int *__cdecl std::operator<<>(int *a1, char *Str) +{ + size_t v2; // eax + int v3; // ecx + __int16 v4; // ax + int v6; // [esp+18h] [ebp-60h] + _WORD *Block; // [esp+1Ch] [ebp-5Ch] + _WORD *v8; // [esp+24h] [ebp-54h] + char *lpuexcpt; // [esp+28h] [ebp-50h] + + if ( Str ) + { + v2 = strlen(Str); + if ( v2 > 0x3FFFFFFE ) + __cxa_throw_bad_array_new_length(); + v6 = v2; + Block = (_WORD *)operator new[](2 * v2); + v8 = Block; + lpuexcpt = Str; + if ( v6 ) + { + do + { + v3 = *(int *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 124); + if ( !v3 ) + std::__throw_bad_cast(); + v4 = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v3 + 40))(v3, *lpuexcpt++); + *v8++ = v4; + } + while ( &Str[v6] != lpuexcpt ); + } + std::__ostream_insert>(a1, (int)Block, v6); + operator delete[](Block); + } + else + { + std::wios::clear((int *)((char *)a1 + *(_DWORD *)(*a1 - 12)), *(int *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 1); + } + return a1; +} + +//----- (0052F330) -------------------------------------------------------- +int *__cdecl std::operator<<>(int *a1, __int16 a2) +{ + __int16 v3[8]; // [esp+1Ch] [ebp-10h] BYREF + + v3[0] = a2; + return std::__ostream_insert>(a1, (int)v3, 1); +} +// 52F330: using guessed type __int16 var_10[8]; + +//----- (0052F360) -------------------------------------------------------- +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) |= a2; + return result; +} + +//----- (0052F380) -------------------------------------------------------- +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 4) = a2; + return result; +} + +//----- (0052F3A0) -------------------------------------------------------- +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) &= ~a2; + return result; +} + +//----- (0052F3C0) -------------------------------------------------------- +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 8) = a2; + return result; +} + +//----- (0052F3E0) -------------------------------------------------------- +_DWORD *__cdecl std::operator<<>(_DWORD *a1, int a2) +{ + int v2; // ecx + + v2 = 64; + if ( a2 != 8 ) + { + v2 = 2; + if ( a2 != 10 ) + v2 = 8 * (a2 == 16); + } + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) = v2 | *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) & 0xFFFFFFB5; + return a1; +} + +//----- (0052F420) -------------------------------------------------------- +_DWORD *__cdecl std::operator<<>(_DWORD *a1, __int16 a2) +{ + char *v2; // esi + int v4; // ecx + + v2 = (char *)a1 + *(_DWORD *)(*a1 - 12); + if ( !v2[118] ) + { + v4 = *((_DWORD *)v2 + 31); + if ( !v4 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, int))(*(_DWORD *)v4 + 40))(v4, 32); + v2[118] = 1; + } + *((_WORD *)v2 + 58) = a2; + return a1; +} + +//----- (0052F480) -------------------------------------------------------- +int *__cdecl std::operator<<>(int *a1, char a2) +{ + int v2; // ecx + __int16 v4[7]; // [esp+22h] [ebp-Eh] BYREF + + v2 = *(int *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 124); + if ( !v2 ) + std::__throw_bad_cast(); + v4[0] = (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v2 + 40))(v2, a2); + return std::__ostream_insert>(a1, (int)v4, 1); +} +// 52F480: using guessed type __int16 var_E[7]; + +//----- (0052F4D0) -------------------------------------------------------- +unsigned int __cdecl std::operator<(int a1, int a2) +{ + return (unsigned int)std::string::compare(a1, a2) >> 31; +} + +//----- (0052F4EC) -------------------------------------------------------- +int __cdecl std::operator!=(char *a1, int a2) +{ + int v2; // eax + + LOBYTE(v2) = std::operator==(a1, a2); + return v2 ^ 1; +} +// 52F505: variable 'v2' is possibly undefined + +//----- (0052F50C) -------------------------------------------------------- +int __cdecl std::operator!=(int a1, char *a2) +{ + int v2; // eax + + LOBYTE(v2) = std::operator==(a1, a2); + return v2 ^ 1; +} +// 52F525: variable 'v2' is possibly undefined + +//----- (0052F52C) -------------------------------------------------------- +int __cdecl std::operator!=(int a1, int a2) +{ + int v2; // eax + + LOBYTE(v2) = std::operator==(a1, a2); + return v2 ^ 1; +} +// 52F545: variable 'v2' is possibly undefined + +//----- (0052F54C) -------------------------------------------------------- +_DWORD *__cdecl std::operator+(_DWORD *a1, _DWORD *a2, unsigned int *a3) +{ + unsigned int v3; // ebx + unsigned int v4; // edx + unsigned int v5; // ebx + _DWORD *v6; // eax + + v3 = 15; + v4 = a2[1] + a3[1]; + if ( (_DWORD *)*a2 != a2 + 2 ) + v3 = a2[2]; + if ( v4 <= v3 ) + goto LABEL_8; + v5 = 15; + if ( (unsigned int *)*a3 != a3 + 2 ) + v5 = a3[2]; + if ( v4 > v5 ) +LABEL_8: + v6 = std::string::append(a2, (int)a3); + else + v6 = std::string::insert(a3, 0, (int)a2); + std::string::basic_string(a1, v6); + return a1; +} + +//----- (0052F5BC) -------------------------------------------------------- +_DWORD *__cdecl std::operator+(_DWORD *a1, char *a2, unsigned int *a3) +{ + unsigned int *v3; // eax + + v3 = std::string::insert(a3, 0, a2); + std::string::basic_string(a1, v3); + return a1; +} + +//----- (0052F5EC) -------------------------------------------------------- +int __cdecl std::operator+(int a1, char *Str, int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-40h] + + lpuexcpt = (struct _Unwind_Exception *)strlen(Str); + *(_DWORD *)(a1 + 4) = 0; + *(_BYTE *)(a1 + 8) = 0; + *(_DWORD *)a1 = a1 + 8; + std::string::reserve((_DWORD *)a1, (unsigned int)lpuexcpt + *(_DWORD *)(a3 + 4)); + if ( (unsigned int)lpuexcpt > 0x3FFFFFFF - *(_DWORD *)(a1 + 4) ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append((_DWORD *)a1, Str, (size_t)lpuexcpt); + std::string::append((_DWORD *)a1, a3); + return a1; +} + +//----- (0052F6D4) -------------------------------------------------------- +char *__cdecl std::operator+(char *a1, int a2, char *a3) +{ + std::string::basic_string(a1, a2); + std::string::append(a1, a3); + return a1; +} + +//----- (0052F75C) -------------------------------------------------------- +char *__cdecl std::operator+(char *a1, int a2, int a3) +{ + std::string::basic_string(a1, a2); + std::string::append(a1, a3); + return a1; +} + +//----- (0052F7E4) -------------------------------------------------------- +int __cdecl std::operator+(int a1, char a2, int a3) +{ + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)a1 = a1 + 8; + *(_BYTE *)(a1 + 8) = 0; + std::string::reserve((_DWORD *)a1, *(_DWORD *)(a3 + 4) + 1); + std::string::_M_replace_aux((_DWORD *)a1, *(_DWORD *)(a1 + 4), 0, 1u, a2); + std::string::append((_DWORD *)a1, a3); + return a1; +} + +//----- (0052F8C0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +int *__cdecl std::operator+(int *a1, char *Str, std::string *a3) +{ + _DWORD *v3; // eax + unsigned int v5; // [esp+0h] [ebp-68h] + const std::string *v6; // [esp+0h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-50h] + unsigned int v8; // [esp+5Fh] [ebp-9h] BYREF + + lpuexcpt = (struct _Unwind_Exception *)strlen(Str); + v3 = std::string::_Rep::_S_create(0, 0); + v3[2] = 0; + v3 += 3; + *(v3 - 3) = 0; + *(_BYTE *)v3 = 0; + *a1 = (int)v3; + std::string::reserve(a1, (struct _Unwind_Exception *)((char *)lpuexcpt + *(_DWORD *)(*(_DWORD *)a3 - 12)), v5); + std::string::append(a1, (std::string *)Str, (size_t)lpuexcpt, (unsigned int)&v8); + std::string::append(a1, a3, v6); + return a1; +} +// 52F9A7: positive sp value 4 has been found +// 52F94D: variable 'v5' is possibly undefined +// 52F976: variable 'v6' is possibly undefined + +//----- (0052F9C0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +int *__cdecl std::operator+(int *a1, _DWORD *a2, std::string *a3) +{ + _DWORD *v3; // eax + const std::string *v5; // [esp+0h] [ebp-68h] + int v6; // [esp+5Fh] [ebp-9h] BYREF + + v3 = (_DWORD *)*a2; + if ( *(int *)(*a2 - 4) < 0 ) + { + v3 = std::string::_Rep::_M_clone((int)(v3 - 3), (int)&v6, 0); + } + else if ( _CRT_MT ) + { + _InterlockedAdd(v3 - 1, 1u); + } + else + { + ++*(v3 - 1); + } + *a1 = (int)v3; + std::string::append(a1, a3, v5); + return a1; +} +// 52FA8A: positive sp value 4 has been found +// 52FA1B: variable 'v5' is possibly undefined +// 53E1E4: using guessed type int _CRT_MT; + +//----- (0052FAA0) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +int *__cdecl std::operator+(int *a1, char a2, std::string *a3) +{ + _DWORD *v3; // eax + unsigned int v5; // [esp+0h] [ebp-68h] + const std::string *v6; // [esp+0h] [ebp-68h] + char v7[4]; // [esp+5Fh] [ebp-9h] BYREF + + v3 = std::string::_Rep::_S_create(0, 0); + v3[2] = 0; + v3 += 3; + *(v3 - 3) = 0; + *(_BYTE *)v3 = 0; + *a1 = (int)v3; + std::string::reserve(a1, (std::string *)(*(_DWORD *)(*(_DWORD *)a3 - 12) + 1), v5); + std::string::append(a1, 1u, a2, (char)v7); + std::string::append(a1, a3, v6); + return a1; +} +// 52FB7E: positive sp value 4 has been found +// 52FB22: variable 'v5' is possibly undefined +// 52FB4D: variable 'v6' is possibly undefined + +//----- (0052FBA0) -------------------------------------------------------- +int __cdecl std::operator+(int a1, wchar_t *String, int a3) +{ + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-40h] + + lpuexcpt = (struct _Unwind_Exception *)wcslen(String); + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)a1 = a1 + 8; + *(_WORD *)(a1 + 8) = 0; + std::wstring::reserve(a1, (unsigned int)lpuexcpt + *(_DWORD *)(a3 + 4)); + if ( (unsigned int)lpuexcpt > 0x1FFFFFFF - *(_DWORD *)(a1 + 4) ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::wstring::_M_append((_DWORD *)a1, String, (int)lpuexcpt); + std::wstring::_M_append((_DWORD *)a1, *(_WORD **)a3, *(_DWORD *)(a3 + 4)); + return a1; +} + +//----- (0052FCA0) -------------------------------------------------------- +_DWORD *__cdecl std::operator+(_DWORD *a1, int a2, int a3) +{ + int v4; // [esp+8h] [ebp-50h] + + *a1 = a1 + 2; + LOBYTE(v4) = 0; + std::wstring::_M_construct(a1, *(_WORD **)a2, *(_DWORD *)a2 + 2 * *(_DWORD *)(a2 + 4), v4); + std::wstring::_M_append(a1, *(_WORD **)a3, *(_DWORD *)(a3 + 4)); + return a1; +} +// 52FCFB: variable 'v4' is possibly undefined + +//----- (0052FD70) -------------------------------------------------------- +int __cdecl std::operator+(int a1, __int16 a2, int a3) +{ + *(_DWORD *)(a1 + 4) = 0; + *(_DWORD *)a1 = a1 + 8; + *(_WORD *)(a1 + 8) = 0; + std::wstring::reserve(a1, *(_DWORD *)(a3 + 4) + 1); + std::wstring::_M_replace_aux((_DWORD *)a1, *(_DWORD *)(a1 + 4), 0, 1u, a2); + std::wstring::_M_append((_DWORD *)a1, *(_WORD **)a3, *(_DWORD *)(a3 + 4)); + return a1; +} + +//----- (0052FE60) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +int *__cdecl std::operator+(int *a1, wchar_t *String, _DWORD *a3) +{ + _DWORD *v3; // eax + struct _Unwind_Exception *lpuexcpt; // [esp+18h] [ebp-50h] + + lpuexcpt = (struct _Unwind_Exception *)wcslen(String); + v3 = std::wstring::_Rep::_S_create(0, 0); + *((_WORD *)v3 + 6) = 0; + v3 += 3; + *(v3 - 1) = 0; + *(v3 - 3) = 0; + *a1 = (int)v3; + std::wstring::reserve(a1, (unsigned int)lpuexcpt + *(_DWORD *)(*a3 - 12)); + std::wstring::append(a1, (char *)String, (unsigned int)lpuexcpt); + std::wstring::append(a1, a3); + return a1; +} +// 52FF4A: positive sp value 4 has been found + +//----- (0052FF60) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +int *__cdecl std::operator+(int *a1, _DWORD *a2, _DWORD *a3) +{ + _DWORD *v3; // eax + int v5; // [esp+5Fh] [ebp-9h] BYREF + + v3 = (_DWORD *)*a2; + if ( *(int *)(*a2 - 4) < 0 ) + { + v3 = std::wstring::_Rep::_M_clone(v3 - 3, (int)&v5, 0); + } + else if ( _CRT_MT ) + { + _InterlockedAdd(v3 - 1, 1u); + } + else + { + ++*(v3 - 1); + } + *a1 = (int)v3; + std::wstring::append(a1, a3); + return a1; +} +// 53002A: positive sp value 4 has been found +// 53E1E4: using guessed type int _CRT_MT; + +//----- (00530040) -------------------------------------------------------- +// positive sp value has been detected, the output may be wrong! +int *__cdecl std::operator+(int *a1, __int16 a2, _DWORD *a3) +{ + _DWORD *v3; // eax + + v3 = std::wstring::_Rep::_S_create(0, 0); + *((_WORD *)v3 + 6) = 0; + v3 += 3; + *(v3 - 1) = 0; + *(v3 - 3) = 0; + *a1 = (int)v3; + std::wstring::reserve(a1, *(_DWORD *)(*a3 - 12) + 1); + std::wstring::append(a1, 1u, a2); + std::wstring::append(a1, a3); + return a1; +} +// 530121: positive sp value 4 has been found + +//----- (00530180) -------------------------------------------------------- +std::istream::sentry *__cdecl std::operator>>>(std::istream::sentry *a1, char *a2) +{ + int v2; // edx + char *v3; // eax + _BYTE *v4; // eax + int v5; // ecx + unsigned int v6; // esi + char *v7; // ebx + int v8; // edx + unsigned int v9; // edx + int v11; // edx + int v12; // eax + unsigned int v13; // eax + unsigned int v14; // edx + const std::locale *v15; // [esp+4h] [ebp-84h] + bool v16; // [esp+8h] [ebp-80h] + int v17; // [esp+10h] [ebp-78h] + _DWORD *v18; // [esp+14h] [ebp-74h] + int v19; // [esp+18h] [ebp-70h] + int v20; // [esp+1Ch] [ebp-6Ch] + _BYTE *Sizea; // [esp+20h] [ebp-68h] + size_t Size; // [esp+20h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+24h] [ebp-64h] + int v24; // [esp+28h] [ebp-60h] + char v25; // [esp+6Bh] [ebp-1Dh] BYREF + _DWORD *v26[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v25, a1, 0, v16); + if ( !v25 ) + { + v11 = *(_DWORD *)a1; + v12 = 4; + goto LABEL_23; + } + v2 = 0x7FFFFFFF; + v3 = (char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12); + if ( *((int *)v3 + 2) > 0 ) + v2 = *((_DWORD *)v3 + 2); + v19 = v2; + std::locale::locale((volatile signed __int32 **)v26, (volatile signed __int32 **)v3 + 27, v15); + v18 = std::use_facet>((int)v26); + std::locale::~locale(v26); + lpuexcpt = *(struct _Unwind_Exception **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v4 = (_BYTE *)*((_DWORD *)lpuexcpt + 2); + if ( (unsigned int)v4 >= *((_DWORD *)lpuexcpt + 3) ) + { + v4 = (_BYTE *)(*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + v17 = v19 - 1; + if ( v19 == 1 ) + { + if ( v4 != (_BYTE *)-1 ) + goto LABEL_43; + } + else if ( v4 != (_BYTE *)-1 ) + { + goto LABEL_6; + } + *a2 = 0; + v11 = *(_DWORD *)a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 8) = 0; + v12 = 6; + goto LABEL_23; + } + LOBYTE(v4) = *v4; + v17 = v19 - 1; + if ( v19 == 1 ) + { +LABEL_43: + *a2 = 0; + v11 = *(_DWORD *)a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 8) = 0; + v12 = 4; + goto LABEL_23; + } +LABEL_6: + v24 = 0; + while ( 1 ) + { + v5 = v18[6]; + if ( (*(_BYTE *)(v5 + 2 * (unsigned __int8)v4) & 0x20) != 0 ) + break; + v6 = *((_DWORD *)lpuexcpt + 3); + v7 = (char *)*((_DWORD *)lpuexcpt + 2); + v8 = v19 - v24 - 1; + if ( v8 > (int)(v6 - (_DWORD)v7) ) + v8 = *((_DWORD *)lpuexcpt + 3) - (_DWORD)v7; + if ( v8 <= 1 ) + { + ++v24; + *a2 = (char)v4; + Sizea = a2 + 1; + v13 = *((_DWORD *)lpuexcpt + 2); + v14 = *((_DWORD *)lpuexcpt + 3); + if ( v13 >= v14 ) + { + if ( (*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 40))(lpuexcpt) == -1 ) + goto LABEL_35; + v4 = (_BYTE *)*((_DWORD *)lpuexcpt + 2); + v14 = *((_DWORD *)lpuexcpt + 3); + } + else + { + v4 = (_BYTE *)(v13 + 1); + *((_DWORD *)lpuexcpt + 2) = v4; + } + if ( (unsigned int)v4 < v14 ) + { + LOBYTE(v4) = *v4; + ++a2; + goto LABEL_19; + } + v4 = (_BYTE *)(*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + ++a2; +LABEL_31: + if ( v24 >= v17 ) + { + if ( v4 != (_BYTE *)-1 ) + { +LABEL_20: + *a2 = 0; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 8) = 0; + return a1; + } + *a2 = 0; + v11 = *(_DWORD *)a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 8) = 0; + v12 = 2; + goto LABEL_23; + } + if ( v4 == (_BYTE *)-1 ) + { + Sizea = a2; +LABEL_35: + *Sizea = 0; + v11 = *(_DWORD *)a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 8) = 0; + v12 = v24 == 0 ? 6 : 2; + goto LABEL_23; + } + } + else + { + v9 = (unsigned int)&v7[v8]; + v4 = v7 + 1; + if ( v9 <= (unsigned int)(v7 + 1) ) + { + v20 = 1; + Size = 1; +LABEL_28: + memcpy(a2, v7, Size); + v6 = *((_DWORD *)lpuexcpt + 3); + v4 = (_BYTE *)(*((_DWORD *)lpuexcpt + 2) + Size); + goto LABEL_17; + } + do + { + if ( (*(_BYTE *)(v5 + 2 * (unsigned __int8)*v4) & 0x20) != 0 ) + { + v20 = v4 - v7; + Size = v4 - v7; + goto LABEL_16; + } + ++v4; + } + while ( v9 > (unsigned int)v4 ); + v20 = v4 - v7; + Size = v4 - v7; +LABEL_16: + if ( v20 ) + goto LABEL_28; +LABEL_17: + a2 += Size; + *((_DWORD *)lpuexcpt + 2) = v4; + v24 += v20; + if ( (unsigned int)v4 >= v6 ) + { + v4 = (_BYTE *)(*(int (__fastcall **)(struct _Unwind_Exception *))(*(_DWORD *)lpuexcpt + 36))(lpuexcpt); + goto LABEL_31; + } + LOBYTE(v4) = *v4; +LABEL_19: + if ( v24 >= v17 ) + goto LABEL_20; + } + } + *a2 = 0; + v11 = *(_DWORD *)a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 8) = 0; + if ( v24 ) + return a1; + v12 = 4; +LABEL_23: + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(v11 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(v11 - 12) + 20) | v12); + return a1; +} +// 5301C7: variable 'v16' is possibly undefined +// 5301FF: variable 'v15' is possibly undefined + +//----- (00530650) -------------------------------------------------------- +std::istream::sentry *__cdecl std::operator>>>(std::istream::sentry *a1, _BYTE *a2) +{ + _DWORD *v3; // ecx + char *v4; // eax + char v5; // dl + int v6; // eax + bool v7; // [esp+8h] [ebp-70h] + char v8[25]; // [esp+5Fh] [ebp-19h] BYREF + + std::istream::sentry::sentry(v8, a1, 0, v7); + if ( v8[0] ) + { + v3 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v4 = (char *)v3[2]; + if ( (unsigned int)v4 >= v3[3] ) + { + v6 = (*(int (__fastcall **)(_DWORD *))(*v3 + 40))(v3); + if ( v6 == -1 ) + { + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 20) | 6); + return a1; + } + v5 = v6; + } + else + { + v5 = *v4; + v3[2] = v4 + 1; + } + *a2 = v5; + } + return a1; +} +// 530697: variable 'v7' is possibly undefined +// 530650: using guessed type char var_19[25]; + +//----- (005307F0) -------------------------------------------------------- +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) |= a2; + return result; +} + +//----- (00530810) -------------------------------------------------------- +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 4) = a2; + return result; +} + +//----- (00530830) -------------------------------------------------------- +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) &= ~a2; + return result; +} + +//----- (00530850) -------------------------------------------------------- +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 8) = a2; + return result; +} + +//----- (00530870) -------------------------------------------------------- +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2) +{ + int v2; // ecx + + v2 = 64; + if ( a2 != 8 ) + { + v2 = 2; + if ( a2 != 10 ) + v2 = 8 * (a2 == 16); + } + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) = v2 | *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) & 0xFFFFFFB5; + return a1; +} + +//----- (005308B0) -------------------------------------------------------- +_DWORD *__cdecl std::operator>>>(_DWORD *a1, char a2) +{ + char *v2; // esi + _BYTE *v4; // edi + int (__stdcall *v5)(unsigned __int8); // eax + + v2 = (char *)a1 + *(_DWORD *)(*a1 - 12); + if ( !v2[117] ) + { + v4 = (_BYTE *)*((_DWORD *)v2 + 31); + if ( !v4 ) + std::__throw_bad_cast(); + if ( !v4[28] ) + { + std::ctype::_M_widen_init(*((_DWORD *)v2 + 31)); + v5 = *(int (__stdcall **)(unsigned __int8))(*(_DWORD *)v4 + 24); + if ( v5 != std::ctype::do_widen ) + ((void (__thiscall *)(_BYTE *, int))v5)(v4, 32); + } + v2[117] = 1; + } + v2[116] = a2; + return a1; +} + +//----- (00530920) -------------------------------------------------------- +std::istream::sentry *__cdecl std::operator>>(std::istream::sentry *a1, _DWORD *a2) +{ + int v2; // edx + int v3; // eax + int v5; // edx + char *v6; // eax + unsigned __int8 *v7; // eax + int v8; // ebx + _BYTE *v9; // esi + int v10; // edx + unsigned int v11; // edx + unsigned __int8 *v12; // eax + unsigned __int8 *v13; // eax + int v14; // eax + _BYTE *v15; // eax + unsigned int v16; // edx + unsigned int v17; // eax + unsigned int v18; // edx + const std::locale *v19; // [esp+4h] [ebp-94h] + bool v20; // [esp+8h] [ebp-90h] + _DWORD *v21; // [esp+20h] [ebp-78h] + char *v22; // [esp+24h] [ebp-74h] + unsigned int v23; // [esp+28h] [ebp-70h] + _DWORD *v24; // [esp+2Ch] [ebp-6Ch] + size_t v25; // [esp+30h] [ebp-68h] + unsigned int v26; // [esp+30h] [ebp-68h] + struct _Unwind_Exception *lpuexcpt; // [esp+34h] [ebp-64h] + unsigned int v28; // [esp+38h] [ebp-60h] + char v29; // [esp+7Bh] [ebp-1Dh] BYREF + _DWORD *v30[7]; // [esp+7Ch] [ebp-1Ch] BYREF + + std::istream::sentry::sentry(&v29, a1, 0, v20); + if ( !v29 ) + { + v2 = *(_DWORD *)a1; + v3 = 4; + goto LABEL_3; + } + v5 = 0x3FFFFFFF; + a2[1] = 0; + *(_BYTE *)*a2 = 0; + v6 = (char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12); + if ( *((int *)v6 + 2) > 0 ) + v5 = *((_DWORD *)v6 + 2); + v23 = v5; + std::locale::locale((volatile signed __int32 **)v30, (volatile signed __int32 **)v6 + 27, v19); + v21 = std::use_facet>((int)v30); + std::locale::~locale(v30); + v24 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 120); + v7 = (unsigned __int8 *)v24[2]; + if ( (unsigned int)v7 >= v24[3] ) + v25 = (*(int (__fastcall **)(_DWORD *))(*v24 + 36))(v24); + else + v25 = *v7; + v28 = 0; + while ( 1 ) + { + if ( v25 == -1 ) + { + v2 = *(_DWORD *)a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 8) = 0; + v3 = v28 == 0 ? 6 : 2; + goto LABEL_3; + } + v8 = v21[6]; + if ( (*(_BYTE *)(v8 + 2 * (unsigned __int8)v25) & 0x20) != 0 ) + break; + v9 = (_BYTE *)v24[2]; + v10 = v24[3] - (_DWORD)v9; + if ( v10 > (int)(v23 - v28) ) + v10 = v23 - v28; + lpuexcpt = (struct _Unwind_Exception *)a2[1]; + if ( v10 <= 1 ) + { + v22 = (char *)lpuexcpt + 1; + v15 = (_BYTE *)*a2; + if ( (_DWORD *)*a2 == a2 + 2 ) + v16 = 15; + else + v16 = a2[2]; + if ( (unsigned int)v22 > v16 ) + { + std::string::_M_mutate((int)a2, (size_t)lpuexcpt, 0, 0, 1u); + v15 = (_BYTE *)*a2; + } + *((_BYTE *)lpuexcpt + (_DWORD)v15) = v25; + ++v28; + a2[1] = v22; + *((_BYTE *)lpuexcpt + *a2 + 1) = 0; + v17 = v24[2]; + v18 = v24[3]; + if ( v17 >= v18 ) + { + if ( (*(int (__fastcall **)(_DWORD *))(*v24 + 40))(v24) == -1 ) + { + v2 = *(_DWORD *)a1; +LABEL_37: + *(_DWORD *)((char *)a1 + *(_DWORD *)(v2 - 12) + 8) = 0; + v3 = 2; + goto LABEL_3; + } + v13 = (unsigned __int8 *)v24[2]; + v18 = v24[3]; + } + else + { + v13 = (unsigned __int8 *)(v17 + 1); + v24[2] = v13; + } + if ( (unsigned int)v13 >= v18 ) + { +LABEL_33: + v14 = (*(int (__fastcall **)(_DWORD *))(*v24 + 36))(v24); + goto LABEL_23; + } + } + else + { + v11 = (unsigned int)&v9[v10]; + v12 = v9 + 1; + if ( v11 > (unsigned int)(v9 + 1) ) + { + do + { + if ( (*(_BYTE *)(v8 + 2 * *v12) & 0x20) != 0 ) + break; + ++v12; + } + while ( v11 > (unsigned int)v12 ); + v26 = v12 - v9; + } + else + { + v26 = 1; + } + if ( 0x3FFFFFFF - (int)lpuexcpt < v26 ) + std::__throw_length_error((std::length_error *)"basic_string::append"); + std::string::_M_append(a2, v9, v26); + v28 += v26; + v13 = (unsigned __int8 *)(v26 + v24[2]); + v24[2] = v13; + if ( (unsigned int)v13 >= v24[3] ) + goto LABEL_33; + } + v14 = *v13; +LABEL_23: + v25 = v14; + if ( v23 <= v28 ) + { + v2 = *(_DWORD *)a1; + if ( v14 != -1 ) + { + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 8) = 0; + return a1; + } + goto LABEL_37; + } + } + v2 = *(_DWORD *)a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*(_DWORD *)a1 - 12) + 8) = 0; + if ( v28 ) + return a1; + v3 = 4; +LABEL_3: + std::ios::clear( + (std::istream::sentry *)((char *)a1 + *(_DWORD *)(v2 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(v2 - 12) + 20) | v3); + return a1; +} +// 53096A: variable 'v20' is possibly undefined +// 5309ED: variable 'v19' is possibly undefined + +//----- (00530DC0) -------------------------------------------------------- +int *__cdecl std::operator>>>(int *a1, _WORD *a2) +{ + int v2; // eax + int v3; // esi + volatile signed __int32 **v4; // eax + int v5; // edx + unsigned __int16 *v6; // eax + unsigned __int16 v7; // ax + __int16 v8; // dx + unsigned __int16 *v9; // eax + __int16 *v10; // eax + int v11; // edx + char *v12; // edx + char *v14; // edx + char *v15; // edx + const std::locale *v16; // [esp+4h] [ebp-84h] + int v17; // [esp+18h] [ebp-70h] + int v18; // [esp+18h] [ebp-70h] + void *v19; // [esp+1Ch] [ebp-6Ch] + int v20; // [esp+20h] [ebp-68h] + _DWORD *v21; // [esp+24h] [ebp-64h] + unsigned __int16 lpuexcpt; // [esp+28h] [ebp-60h] + char v23; // [esp+6Bh] [ebp-1Dh] BYREF + _DWORD *v24[7]; // [esp+6Ch] [ebp-1Ch] BYREF + + std::wistream::sentry::sentry(&v23, a1, 0); + v2 = *a1; + if ( !v23 ) + { +LABEL_18: + v11 = 4; + goto LABEL_19; + } + v3 = *(int *)((char *)a1 + *(_DWORD *)(v2 - 12) + 8); + v4 = (volatile signed __int32 **)((char *)a1 + *(_DWORD *)(v2 - 12)); + v5 = 0x7FFFFFFF; + if ( v3 > 0 ) + v5 = v3; + v17 = v5; + std::locale::locale((volatile signed __int32 **)v24, v4 + 27, v16); + v19 = std::use_facet>((int)v24); + std::locale::~locale(v24); + v21 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*a1 - 12) + 120); + v6 = (unsigned __int16 *)v21[2]; + if ( (unsigned int)v6 >= v21[3] ) + v7 = (*(int (__fastcall **)(_DWORD *))(*v21 + 36))(v21); + else + v7 = *v6; + lpuexcpt = v7; + if ( v17 == 1 ) + { + v2 = *a1; + v15 = (char *)a1 + *(_DWORD *)(*a1 - 12); + *a2 = 0; + *((_DWORD *)v15 + 2) = 0; + if ( lpuexcpt == 0xFFFF ) + { + v11 = 6; + goto LABEL_19; + } + goto LABEL_18; + } + if ( v7 == 0xFFFF ) + { + *a2 = 0; + v2 = *a1; + *(int *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 8) = 0; + v11 = 6; + goto LABEL_19; + } + v20 = 0; + v18 = (int)&a2[v17 - 1]; + while ( 1 ) + { + if ( (*(unsigned __int8 (__thiscall **)(void *, int, _DWORD))(*(_DWORD *)v19 + 8))(v19, 32, lpuexcpt) ) + { + v2 = *a1; + v12 = (char *)a1 + *(_DWORD *)(*a1 - 12); + *a2 = 0; + *((_DWORD *)v12 + 2) = 0; + if ( v20 ) + return a1; + goto LABEL_18; + } + ++a2; + ++v20; + *(a2 - 1) = lpuexcpt; + v10 = (__int16 *)v21[2]; + if ( (unsigned int)v10 < v21[3] ) + { + v8 = *v10; + v21[2] = v10 + 1; + if ( v8 == -1 ) + goto LABEL_16; + } + else if ( (*(unsigned __int16 (__fastcall **)(_DWORD *))(*v21 + 40))(v21) == 0xFFFF ) + { +LABEL_16: + *a2 = 0; + v2 = *a1; + *(int *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 8) = 0; + v11 = 2; + goto LABEL_19; + } + v9 = (unsigned __int16 *)v21[2]; + if ( (unsigned int)v9 < v21[3] ) + { + lpuexcpt = *v9; + if ( a2 == (_WORD *)v18 ) + break; + goto LABEL_12; + } + lpuexcpt = (*(int (__fastcall **)(_DWORD *))(*v21 + 36))(v21); + if ( a2 == (_WORD *)v18 ) + break; +LABEL_12: + if ( lpuexcpt == 0xFFFF ) + goto LABEL_16; + } + v2 = *a1; + v14 = (char *)a1 + *(_DWORD *)(*a1 - 12); + if ( lpuexcpt != 0xFFFF ) + { + *a2 = 0; + *((_DWORD *)v14 + 2) = 0; + return a1; + } + *a2 = 0; + *((_DWORD *)v14 + 2) = 0; + v11 = 2; +LABEL_19: + std::wios::clear((int *)((char *)a1 + *(_DWORD *)(v2 - 12)), *(int *)((char *)a1 + *(_DWORD *)(v2 - 12) + 20) | v11); + return a1; +} +// 530E3F: variable 'v16' is possibly undefined + +//----- (005311C0) -------------------------------------------------------- +_DWORD *__cdecl std::operator>>>(_DWORD *a1, _WORD *a2) +{ + _DWORD *v3; // ecx + __int16 *v4; // eax + __int16 v5; // dx + char v6[25]; // [esp+5Fh] [ebp-19h] BYREF + + std::wistream::sentry::sentry(v6, a1, 0); + if ( v6[0] ) + { + v3 = *(_DWORD **)((char *)a1 + *(_DWORD *)(*a1 - 12) + 120); + v4 = (__int16 *)v3[2]; + if ( (unsigned int)v4 >= v3[3] ) + { + v5 = (*(int (__fastcall **)(_DWORD *))(*v3 + 40))(v3); + } + else + { + v5 = *v4; + v3[2] = v4 + 1; + } + if ( v5 == -1 ) + std::wios::clear( + (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)), + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 20) | 6); + else + *a2 = v5; + } + return a1; +} +// 5311C0: using guessed type char var_19[25]; + +//----- (00531360) -------------------------------------------------------- +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) |= a2; + return result; +} + +//----- (00531380) -------------------------------------------------------- +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 4) = a2; + return result; +} + +//----- (005313A0) -------------------------------------------------------- +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) &= ~a2; + return result; +} + +//----- (005313C0) -------------------------------------------------------- +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2) +{ + _DWORD *result; // eax + + result = a1; + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 8) = a2; + return result; +} + +//----- (005313E0) -------------------------------------------------------- +_DWORD *__cdecl std::operator>>>(_DWORD *a1, int a2) +{ + int v2; // ecx + + v2 = 64; + if ( a2 != 8 ) + { + v2 = 2; + if ( a2 != 10 ) + v2 = 8 * (a2 == 16); + } + *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) = v2 | *(_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12) + 12) & 0xFFFFFFB5; + return a1; +} + +//----- (00531420) -------------------------------------------------------- +_DWORD *__cdecl std::operator>>>(_DWORD *a1, __int16 a2) +{ + char *v2; // esi + int v4; // ecx + + v2 = (char *)a1 + *(_DWORD *)(*a1 - 12); + if ( !v2[118] ) + { + v4 = *((_DWORD *)v2 + 31); + if ( !v4 ) + std::__throw_bad_cast(); + (*(void (__thiscall **)(int, int))(*(_DWORD *)v4 + 40))(v4, 32); + v2[118] = 1; + } + *((_WORD *)v2 + 58) = a2; + return a1; +} + +//----- (00531480) -------------------------------------------------------- +void __fastcall `non-virtual thunk to'std::iostream::~iostream(int a1) +{ + _DWORD *v2; // ecx + + v2 = (_DWORD *)(a1 + 4); + *(v2 - 1) = &unk_55B3E8; + *(v2 - 3) = &unk_55B3C0; + *(v2 - 2) = 0; + *v2 = &off_560E20; + std::ios_base::~ios_base((int)v2); + operator delete((void *)(a1 - 8)); +} +// 560E20: using guessed type int (*off_560E20)(); + +//----- (005314C0) -------------------------------------------------------- +void __fastcall `non-virtual thunk to'std::iostream::~iostream(_DWORD *a1) +{ + _DWORD *v1; // ecx + + *a1 = &unk_55B3E8; + v1 = a1 + 1; + *(v1 - 3) = &unk_55B3C0; + *(v1 - 2) = 0; + *v1 = &off_560E20; + std::ios_base::~ios_base((int)v1); +} +// 560E20: using guessed type int (*off_560E20)(); + +//----- (005314F0) -------------------------------------------------------- +void __fastcall `non-virtual thunk to'std::fstream::~fstream(int a1) +{ + void *Block; // [esp+18h] [ebp-54h] + + *(_DWORD *)(a1 - 8) = off_560124; + *(_DWORD *)(a1 + 112) = off_56014C; + *(_DWORD *)a1 = off_560138; + *(_DWORD *)(a1 + 4) = off_5600A0; + Block = (void *)(a1 - 8); + std::filebuf::close((struct _Unwind_Exception *)(a1 + 4)); + std::__basic_file::~__basic_file(a1 + 44); + *(_DWORD *)(a1 + 4) = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 32)); + *(_DWORD *)a1 = &unk_55B474; + *(_DWORD *)(a1 - 8) = &unk_55B44C; + *(_DWORD *)(a1 - 4) = 0; + *(_DWORD *)(a1 + 112) = &off_560E20; + std::ios_base::~ios_base(a1 + 112); + operator delete(Block); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560124: using guessed type int (*off_560124[2])(); +// 560138: using guessed type int (*off_560138[2])(); +// 56014C: using guessed type int (*off_56014C[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (005315F0) -------------------------------------------------------- +void __fastcall `non-virtual thunk to'std::fstream::~fstream(int a1) +{ + *(_DWORD *)(a1 - 8) = off_560124; + *(_DWORD *)(a1 + 112) = off_56014C; + *(_DWORD *)a1 = off_560138; + *(_DWORD *)(a1 + 4) = off_5600A0; + std::filebuf::close((struct _Unwind_Exception *)(a1 + 4)); + std::__basic_file::~__basic_file(a1 + 44); + *(_DWORD *)(a1 + 4) = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 32)); + *(_DWORD *)a1 = &unk_55B474; + *(_DWORD *)(a1 - 8) = &unk_55B44C; + *(_DWORD *)(a1 - 4) = 0; + *(_DWORD *)(a1 + 112) = &off_560E20; + std::ios_base::~ios_base(a1 + 112); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560124: using guessed type int (*off_560124[2])(); +// 560138: using guessed type int (*off_560138[2])(); +// 56014C: using guessed type int (*off_56014C[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (005316D0) -------------------------------------------------------- +void __fastcall `non-virtual thunk to'std::wfstream::~wfstream(int a1) +{ + void *Block; // [esp+18h] [ebp-54h] + + *(_DWORD *)(a1 - 8) = off_560160; + *(_DWORD *)(a1 + 116) = off_560188; + *(_DWORD *)a1 = off_560174; + *(_DWORD *)(a1 + 4) = off_5600E0; + Block = (void *)(a1 - 8); + std::wfilebuf::close((struct _Unwind_Exception *)(a1 + 4)); + std::__basic_file::~__basic_file(a1 + 44); + *(_DWORD *)(a1 + 4) = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 32)); + *(_DWORD *)a1 = &unk_55B500; + *(_DWORD *)(a1 - 8) = &unk_55B49C; + *(_DWORD *)(a1 - 4) = 0; + *(_DWORD *)(a1 + 116) = &off_560E30; + std::ios_base::~ios_base(a1 + 116); + operator delete(Block); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560160: using guessed type int (*off_560160[2])(); +// 560174: using guessed type int (*off_560174[2])(); +// 560188: using guessed type int (*off_560188[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (005317D0) -------------------------------------------------------- +void __fastcall `non-virtual thunk to'std::wfstream::~wfstream(int a1) +{ + *(_DWORD *)(a1 - 8) = off_560160; + *(_DWORD *)(a1 + 116) = off_560188; + *(_DWORD *)a1 = off_560174; + *(_DWORD *)(a1 + 4) = off_5600E0; + std::wfilebuf::close((struct _Unwind_Exception *)(a1 + 4)); + std::__basic_file::~__basic_file(a1 + 44); + *(_DWORD *)(a1 + 4) = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 32)); + *(_DWORD *)a1 = &unk_55B500; + *(_DWORD *)(a1 - 8) = &unk_55B49C; + *(_DWORD *)(a1 - 4) = 0; + *(_DWORD *)(a1 + 116) = &off_560E30; + std::ios_base::~ios_base(a1 + 116); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560160: using guessed type int (*off_560160[2])(); +// 560174: using guessed type int (*off_560174[2])(); +// 560188: using guessed type int (*off_560188[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (005318B0) -------------------------------------------------------- +void __fastcall `non-virtual thunk to'std::wiostream::~basic_iostream(int a1) +{ + _DWORD *v2; // ecx + + v2 = (_DWORD *)(a1 + 4); + *(v2 - 1) = &unk_55B5A0; + *(v2 - 3) = &unk_55B578; + *(v2 - 2) = 0; + *v2 = &off_560E30; + std::ios_base::~ios_base((int)v2); + operator delete((void *)(a1 - 8)); +} +// 560E30: using guessed type int (*off_560E30)(); + +//----- (005318F0) -------------------------------------------------------- +void __fastcall `non-virtual thunk to'std::wiostream::~basic_iostream(_DWORD *a1) +{ + _DWORD *v1; // ecx + + *a1 = &unk_55B5A0; + v1 = a1 + 1; + *(v1 - 3) = &unk_55B578; + *(v1 - 2) = 0; + *v1 = &off_560E30; + std::ios_base::~ios_base((int)v1); +} +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00531920) -------------------------------------------------------- +void __fastcall `non-virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream( + int a1) +{ + void *v1; // esi + void *Block; // eax + + v1 = (void *)(a1 - 8); + Block = *(void **)(a1 + 40); + *(_DWORD *)(a1 - 8) = &off_55FB54; + *(_DWORD *)(a1 + 64) = off_55FB7C; + *(_DWORD *)a1 = off_55FB68; + *(_DWORD *)(a1 + 4) = &off_55F928; + if ( Block != (void *)(a1 + 48) ) + operator delete(Block); + *(_DWORD *)(a1 + 4) = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 32)); + *(_DWORD *)a1 = &unk_55B26C; + *(_DWORD *)(a1 - 8) = &unk_55B244; + *(_DWORD *)(a1 - 4) = 0; + *(_DWORD *)(a1 + 64) = &off_560E20; + std::ios_base::~ios_base(a1 + 64); + operator delete(v1); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FB54: using guessed type int (*off_55FB54)(); +// 55FB68: using guessed type int (*off_55FB68[2])(); +// 55FB7C: using guessed type int (*off_55FB7C[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (005319A0) -------------------------------------------------------- +void __fastcall `non-virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream( + int a1) +{ + void *Block; // eax + + Block = *(void **)(a1 + 40); + *(_DWORD *)(a1 - 8) = &off_55FB54; + *(_DWORD *)(a1 + 64) = off_55FB7C; + *(_DWORD *)a1 = off_55FB68; + *(_DWORD *)(a1 + 4) = &off_55F928; + if ( Block != (void *)(a1 + 48) ) + operator delete(Block); + *(_DWORD *)(a1 + 4) = &off_560424; + std::locale::~locale((_DWORD **)(a1 + 32)); + *(_DWORD *)a1 = &unk_55B26C; + *(_DWORD *)(a1 - 8) = &unk_55B244; + *(_DWORD *)(a1 - 4) = 0; + *(_DWORD *)(a1 + 64) = &off_560E20; + std::ios_base::~ios_base(a1 + 64); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FB54: using guessed type int (*off_55FB54)(); +// 55FB68: using guessed type int (*off_55FB68[2])(); +// 55FB7C: using guessed type int (*off_55FB7C[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00531A10) -------------------------------------------------------- +void __fastcall `non-virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream( + int a1) +{ + void *v1; // esi + void *Block; // eax + + v1 = (void *)(a1 - 8); + Block = *(void **)(a1 + 40); + *(_DWORD *)(a1 - 8) = &off_55FB90; + *(_DWORD *)(a1 + 64) = off_55FBB8; + *(_DWORD *)a1 = off_55FBA4; + *(_DWORD *)(a1 + 4) = &off_55F968; + if ( Block != (void *)(a1 + 48) ) + operator delete(Block); + *(_DWORD *)(a1 + 4) = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 32)); + *(_DWORD *)a1 = &unk_55B2F8; + *(_DWORD *)(a1 - 8) = &unk_55B294; + *(_DWORD *)(a1 - 4) = 0; + *(_DWORD *)(a1 + 64) = &off_560E30; + std::ios_base::~ios_base(a1 + 64); + operator delete(v1); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FB90: using guessed type int (*off_55FB90)(); +// 55FBA4: using guessed type int (*off_55FBA4[2])(); +// 55FBB8: using guessed type int (*off_55FBB8[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00531A90) -------------------------------------------------------- +void __fastcall `non-virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream( + int a1) +{ + void *Block; // eax + + Block = *(void **)(a1 + 40); + *(_DWORD *)(a1 - 8) = &off_55FB90; + *(_DWORD *)(a1 + 64) = off_55FBB8; + *(_DWORD *)a1 = off_55FBA4; + *(_DWORD *)(a1 + 4) = &off_55F968; + if ( Block != (void *)(a1 + 48) ) + operator delete(Block); + *(_DWORD *)(a1 + 4) = &off_560464; + std::locale::~locale((_DWORD **)(a1 + 32)); + *(_DWORD *)a1 = &unk_55B2F8; + *(_DWORD *)(a1 - 8) = &unk_55B294; + *(_DWORD *)(a1 - 4) = 0; + *(_DWORD *)(a1 + 64) = &off_560E30; + std::ios_base::~ios_base(a1 + 64); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FB90: using guessed type int (*off_55FB90)(); +// 55FBA4: using guessed type int (*off_55FBA4[2])(); +// 55FBB8: using guessed type int (*off_55FBB8[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00531B00) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::iostream::~iostream(_DWORD *a1) +{ + _DWORD *Block; // ebx + + Block = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + Block[2] = &unk_55B3E8; + *Block = &unk_55B3C0; + Block[1] = 0; + Block[3] = &off_560E20; + std::ios_base::~ios_base((int)(Block + 3)); + operator delete(Block); +} +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00531B40) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::iostream::~iostream(_DWORD *a1) +{ + _DWORD *v1; // ecx + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + v1[2] = &unk_55B3E8; + v1 += 3; + *(v1 - 3) = &unk_55B3C0; + *(v1 - 2) = 0; + *v1 = &off_560E20; + std::ios_base::~ios_base((int)v1); +} +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00531B70) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::istream::~istream(_DWORD *a1) +{ + _DWORD *Block; // ebx + + Block = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *Block = &off_55FE40; + Block[1] = 0; + Block[2] = &off_560E20; + std::ios_base::~ios_base((int)(Block + 2)); + operator delete(Block); +} +// 55FE40: using guessed type void (__cdecl *off_55FE40)(std::istream *__hidden this); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00531BB0) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::istream::~istream(_DWORD *a1) +{ + _DWORD *v1; // ecx + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = &off_55FE40; + v1 += 2; + *(v1 - 1) = 0; + *v1 = &off_560E20; + std::ios_base::~ios_base((int)v1); +} +// 55FE40: using guessed type void (__cdecl *off_55FE40)(std::istream *__hidden this); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00531BD0) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::ostream::~ostream(_DWORD *a1) +{ + _DWORD *Block; // ebx + + Block = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *Block = &off_55FE68; + Block[1] = &off_560E20; + std::ios_base::~ios_base((int)(Block + 1)); + operator delete(Block); +} +// 55FE68: using guessed type void (__cdecl *off_55FE68)(std::ostream *__hidden this); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00531C00) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::ostream::~ostream(_DWORD *a1) +{ + _DWORD *v1; // ecx + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1++ = &off_55FE68; + *v1 = &off_560E20; + std::ios_base::~ios_base((int)v1); +} +// 55FE68: using guessed type void (__cdecl *off_55FE68)(std::ostream *__hidden this); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00531C20) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::fstream::~fstream(_DWORD *a1) +{ + _DWORD *v1; // edx + _DWORD *Block; // [esp+18h] [ebp-54h] + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = off_560124; + v1[30] = off_56014C; + v1[2] = off_560138; + v1[3] = off_5600A0; + Block = v1; + std::filebuf::close((struct _Unwind_Exception *)(v1 + 3)); + std::__basic_file::~__basic_file((int)(Block + 13)); + Block[3] = &off_560424; + std::locale::~locale((_DWORD **)Block + 10); + Block[2] = &unk_55B474; + *Block = &unk_55B44C; + Block[1] = 0; + Block[30] = &off_560E20; + std::ios_base::~ios_base((int)(Block + 30)); + operator delete(Block); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560124: using guessed type int (*off_560124[2])(); +// 560138: using guessed type int (*off_560138[2])(); +// 56014C: using guessed type int (*off_56014C[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00531D20) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::fstream::~fstream(_DWORD *a1) +{ + _DWORD *v1; // edx + _DWORD *v2; // [esp+18h] [ebp-54h] + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = off_560124; + v1[30] = off_56014C; + v1[2] = off_560138; + v1[3] = off_5600A0; + v2 = v1; + std::filebuf::close((struct _Unwind_Exception *)(v1 + 3)); + std::__basic_file::~__basic_file((int)(v2 + 13)); + v2[3] = &off_560424; + std::locale::~locale((_DWORD **)v2 + 10); + v2[2] = &unk_55B474; + *v2 = &unk_55B44C; + v2[1] = 0; + v2[30] = &off_560E20; + std::ios_base::~ios_base((int)(v2 + 30)); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560124: using guessed type int (*off_560124[2])(); +// 560138: using guessed type int (*off_560138[2])(); +// 56014C: using guessed type int (*off_56014C[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00531E10) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wfstream::~wfstream(_DWORD *a1) +{ + _DWORD *v1; // edx + _DWORD *Block; // [esp+18h] [ebp-54h] + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = off_560160; + v1[31] = off_560188; + v1[2] = off_560174; + v1[3] = off_5600E0; + Block = v1; + std::wfilebuf::close((struct _Unwind_Exception *)(v1 + 3)); + std::__basic_file::~__basic_file((int)(Block + 13)); + Block[3] = &off_560464; + std::locale::~locale((_DWORD **)Block + 10); + Block[2] = &unk_55B500; + *Block = &unk_55B49C; + Block[1] = 0; + Block[31] = &off_560E30; + std::ios_base::~ios_base((int)(Block + 31)); + operator delete(Block); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560160: using guessed type int (*off_560160[2])(); +// 560174: using guessed type int (*off_560174[2])(); +// 560188: using guessed type int (*off_560188[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00531F10) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wfstream::~wfstream(_DWORD *a1) +{ + _DWORD *v1; // edx + _DWORD *v2; // [esp+18h] [ebp-54h] + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = off_560160; + v1[31] = off_560188; + v1[2] = off_560174; + v1[3] = off_5600E0; + v2 = v1; + std::wfilebuf::close((struct _Unwind_Exception *)(v1 + 3)); + std::__basic_file::~__basic_file((int)(v2 + 13)); + v2[3] = &off_560464; + std::locale::~locale((_DWORD **)v2 + 10); + v2[2] = &unk_55B500; + *v2 = &unk_55B49C; + v2[1] = 0; + v2[31] = &off_560E30; + std::ios_base::~ios_base((int)(v2 + 31)); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560160: using guessed type int (*off_560160[2])(); +// 560174: using guessed type int (*off_560174[2])(); +// 560188: using guessed type int (*off_560188[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532000) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wistream::~wistream(_DWORD *a1) +{ + _DWORD *Block; // ebx + + Block = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *Block = &off_56019C; + Block[1] = 0; + Block[2] = &off_560E30; + std::ios_base::~ios_base((int)(Block + 2)); + operator delete(Block); +} +// 56019C: using guessed type int (*off_56019C)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532040) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wistream::~wistream(_DWORD *a1) +{ + _DWORD *v1; // ecx + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = &off_56019C; + v1 += 2; + *(v1 - 1) = 0; + *v1 = &off_560E30; + std::ios_base::~ios_base((int)v1); +} +// 56019C: using guessed type int (*off_56019C)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532060) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wostream::~wostream(_DWORD *a1) +{ + _DWORD *Block; // ebx + + Block = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *Block = &off_5601C4; + Block[1] = &off_560E30; + std::ios_base::~ios_base((int)(Block + 1)); + operator delete(Block); +} +// 5601C4: using guessed type int (*off_5601C4)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532090) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wostream::~wostream(_DWORD *a1) +{ + _DWORD *v1; // ecx + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1++ = &off_5601C4; + *v1 = &off_560E30; + std::ios_base::~ios_base((int)v1); +} +// 5601C4: using guessed type int (*off_5601C4)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (005320B0) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::ifstream::~ifstream(_DWORD *a1) +{ + _DWORD *v1; // edx + _DWORD *Block; // [esp+18h] [ebp-54h] + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = off_560200; + v1[29] = off_560214; + v1[2] = off_5600A0; + Block = v1; + std::filebuf::close((struct _Unwind_Exception *)(v1 + 2)); + std::__basic_file::~__basic_file((int)(Block + 12)); + Block[2] = &off_560424; + std::locale::~locale((_DWORD **)Block + 9); + *Block = &unk_55B528; + Block[1] = 0; + Block[29] = &off_560E20; + std::ios_base::~ios_base((int)(Block + 29)); + operator delete(Block); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560200: using guessed type int (*off_560200[2])(); +// 560214: using guessed type int (*off_560214[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (005321A0) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::ifstream::~ifstream(_DWORD *a1) +{ + _DWORD *v1; // edx + _DWORD *v2; // [esp+18h] [ebp-54h] + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = off_560200; + v1[29] = off_560214; + v1[2] = off_5600A0; + v2 = v1; + std::filebuf::close((struct _Unwind_Exception *)(v1 + 2)); + std::__basic_file::~__basic_file((int)(v2 + 12)); + v2[2] = &off_560424; + std::locale::~locale((_DWORD **)v2 + 9); + *v2 = &unk_55B528; + v2[1] = 0; + v2[29] = &off_560E20; + std::ios_base::~ios_base((int)(v2 + 29)); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 560200: using guessed type int (*off_560200[2])(); +// 560214: using guessed type int (*off_560214[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00532280) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wifstream::~wifstream(_DWORD *a1) +{ + _DWORD *v1; // edx + _DWORD *Block; // [esp+18h] [ebp-54h] + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = off_560228; + v1[30] = off_56023C; + v1[2] = off_5600E0; + Block = v1; + std::wfilebuf::close((struct _Unwind_Exception *)(v1 + 2)); + std::__basic_file::~__basic_file((int)(Block + 12)); + Block[2] = &off_560464; + std::locale::~locale((_DWORD **)Block + 9); + *Block = &unk_55B550; + Block[1] = 0; + Block[30] = &off_560E30; + std::ios_base::~ios_base((int)(Block + 30)); + operator delete(Block); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560228: using guessed type int (*off_560228[2])(); +// 56023C: using guessed type int (*off_56023C[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532370) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wifstream::~wifstream(_DWORD *a1) +{ + _DWORD *v1; // edx + _DWORD *v2; // [esp+18h] [ebp-54h] + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = off_560228; + v1[30] = off_56023C; + v1[2] = off_5600E0; + v2 = v1; + std::wfilebuf::close((struct _Unwind_Exception *)(v1 + 2)); + std::__basic_file::~__basic_file((int)(v2 + 12)); + v2[2] = &off_560464; + std::locale::~locale((_DWORD **)v2 + 9); + *v2 = &unk_55B550; + v2[1] = 0; + v2[30] = &off_560E30; + std::ios_base::~ios_base((int)(v2 + 30)); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 560228: using guessed type int (*off_560228[2])(); +// 56023C: using guessed type int (*off_56023C[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532450) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wiostream::~basic_iostream(_DWORD *a1) +{ + _DWORD *Block; // ebx + + Block = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + Block[2] = &unk_55B5A0; + *Block = &unk_55B578; + Block[1] = 0; + Block[3] = &off_560E30; + std::ios_base::~ios_base((int)(Block + 3)); + operator delete(Block); +} +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532490) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wiostream::~basic_iostream(_DWORD *a1) +{ + _DWORD *v1; // ecx + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + v1[2] = &unk_55B5A0; + v1 += 3; + *(v1 - 3) = &unk_55B578; + *(v1 - 2) = 0; + *v1 = &off_560E30; + std::ios_base::~ios_base((int)v1); +} +// 560E30: using guessed type int (*off_560E30)(); + +//----- (005324C0) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::ofstream::~ofstream(_DWORD *a1) +{ + _DWORD *v1; // edx + _DWORD *Block; // [esp+18h] [ebp-54h] + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = off_56028C; + v1[28] = off_5602A0; + v1[1] = off_5600A0; + Block = v1; + std::filebuf::close((struct _Unwind_Exception *)(v1 + 1)); + std::__basic_file::~__basic_file((int)(Block + 11)); + Block[1] = &off_560424; + std::locale::~locale((_DWORD **)Block + 8); + *Block = &unk_55B5C8; + Block[28] = &off_560E20; + std::ios_base::~ios_base((int)(Block + 28)); + operator delete(Block); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 56028C: using guessed type int (*off_56028C[2])(); +// 5602A0: using guessed type int (*off_5602A0[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (005325A0) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::ofstream::~ofstream(_DWORD *a1) +{ + _DWORD *v1; // edx + _DWORD *v2; // [esp+18h] [ebp-54h] + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = off_56028C; + v1[28] = off_5602A0; + v1[1] = off_5600A0; + v2 = v1; + std::filebuf::close((struct _Unwind_Exception *)(v1 + 1)); + std::__basic_file::~__basic_file((int)(v2 + 11)); + v2[1] = &off_560424; + std::locale::~locale((_DWORD **)v2 + 8); + *v2 = &unk_55B5C8; + v2[28] = &off_560E20; + std::ios_base::~ios_base((int)(v2 + 28)); +} +// 5600A0: using guessed type int (*off_5600A0[2])(); +// 56028C: using guessed type int (*off_56028C[2])(); +// 5602A0: using guessed type int (*off_5602A0[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00532670) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wofstream::~wofstream(_DWORD *a1) +{ + _DWORD *v1; // edx + _DWORD *Block; // [esp+18h] [ebp-54h] + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = off_5602B4; + v1[29] = off_5602C8; + v1[1] = off_5600E0; + Block = v1; + std::wfilebuf::close((struct _Unwind_Exception *)(v1 + 1)); + std::__basic_file::~__basic_file((int)(Block + 11)); + Block[1] = &off_560464; + std::locale::~locale((_DWORD **)Block + 8); + *Block = &unk_55B5F0; + Block[29] = &off_560E30; + std::ios_base::~ios_base((int)(Block + 29)); + operator delete(Block); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 5602B4: using guessed type int (*off_5602B4[2])(); +// 5602C8: using guessed type int (*off_5602C8[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532750) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wofstream::~wofstream(_DWORD *a1) +{ + _DWORD *v1; // edx + _DWORD *v2; // [esp+18h] [ebp-54h] + + v1 = (_DWORD *)((char *)a1 + *(_DWORD *)(*a1 - 12)); + *v1 = off_5602B4; + v1[29] = off_5602C8; + v1[1] = off_5600E0; + v2 = v1; + std::wfilebuf::close((struct _Unwind_Exception *)(v1 + 1)); + std::__basic_file::~__basic_file((int)(v2 + 11)); + v2[1] = &off_560464; + std::locale::~locale((_DWORD **)v2 + 8); + *v2 = &unk_55B5F0; + v2[29] = &off_560E30; + std::ios_base::~ios_base((int)(v2 + 29)); +} +// 5600E0: using guessed type int (*off_5600E0[2])(); +// 5602B4: using guessed type int (*off_5602B4[2])(); +// 5602C8: using guessed type int (*off_5602C8[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532820) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream( + _DWORD *a1) +{ + char *v1; // ebx + char *Block; // eax + + v1 = (char *)a1 + *(_DWORD *)(*a1 - 12); + Block = (char *)*((_DWORD *)v1 + 12); + *(_DWORD *)v1 = &off_55FB54; + *((_DWORD *)v1 + 18) = off_55FB7C; + *((_DWORD *)v1 + 2) = off_55FB68; + *((_DWORD *)v1 + 3) = &off_55F928; + if ( Block != v1 + 56 ) + operator delete(Block); + *((_DWORD *)v1 + 3) = &off_560424; + std::locale::~locale((_DWORD **)v1 + 10); + *((_DWORD *)v1 + 2) = &unk_55B26C; + *(_DWORD *)v1 = &unk_55B244; + *((_DWORD *)v1 + 1) = 0; + *((_DWORD *)v1 + 18) = &off_560E20; + std::ios_base::~ios_base((int)(v1 + 72)); + operator delete(v1); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FB54: using guessed type int (*off_55FB54)(); +// 55FB68: using guessed type int (*off_55FB68[2])(); +// 55FB7C: using guessed type int (*off_55FB7C[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (005328A0) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream( + _DWORD *a1) +{ + char *v1; // ebx + char *Block; // eax + + v1 = (char *)a1 + *(_DWORD *)(*a1 - 12); + Block = (char *)*((_DWORD *)v1 + 12); + *(_DWORD *)v1 = &off_55FB54; + *((_DWORD *)v1 + 18) = off_55FB7C; + *((_DWORD *)v1 + 2) = off_55FB68; + *((_DWORD *)v1 + 3) = &off_55F928; + if ( Block != v1 + 56 ) + operator delete(Block); + *((_DWORD *)v1 + 3) = &off_560424; + std::locale::~locale((_DWORD **)v1 + 10); + *((_DWORD *)v1 + 2) = &unk_55B26C; + *(_DWORD *)v1 = &unk_55B244; + *((_DWORD *)v1 + 1) = 0; + *((_DWORD *)v1 + 18) = &off_560E20; + std::ios_base::~ios_base((int)(v1 + 72)); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FB54: using guessed type int (*off_55FB54)(); +// 55FB68: using guessed type int (*off_55FB68[2])(); +// 55FB7C: using guessed type int (*off_55FB7C[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00532910) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream( + _DWORD *a1) +{ + char *v1; // ebx + char *Block; // eax + + v1 = (char *)a1 + *(_DWORD *)(*a1 - 12); + Block = (char *)*((_DWORD *)v1 + 12); + *(_DWORD *)v1 = &off_55FB90; + *((_DWORD *)v1 + 18) = off_55FBB8; + *((_DWORD *)v1 + 2) = off_55FBA4; + *((_DWORD *)v1 + 3) = &off_55F968; + if ( Block != v1 + 56 ) + operator delete(Block); + *((_DWORD *)v1 + 3) = &off_560464; + std::locale::~locale((_DWORD **)v1 + 10); + *((_DWORD *)v1 + 2) = &unk_55B2F8; + *(_DWORD *)v1 = &unk_55B294; + *((_DWORD *)v1 + 1) = 0; + *((_DWORD *)v1 + 18) = &off_560E30; + std::ios_base::~ios_base((int)(v1 + 72)); + operator delete(v1); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FB90: using guessed type int (*off_55FB90)(); +// 55FBA4: using guessed type int (*off_55FBA4[2])(); +// 55FBB8: using guessed type int (*off_55FBB8[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532990) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::basic_stringstream,std::allocator>::~basic_stringstream( + _DWORD *a1) +{ + char *v1; // ebx + char *Block; // eax + + v1 = (char *)a1 + *(_DWORD *)(*a1 - 12); + Block = (char *)*((_DWORD *)v1 + 12); + *(_DWORD *)v1 = &off_55FB90; + *((_DWORD *)v1 + 18) = off_55FBB8; + *((_DWORD *)v1 + 2) = off_55FBA4; + *((_DWORD *)v1 + 3) = &off_55F968; + if ( Block != v1 + 56 ) + operator delete(Block); + *((_DWORD *)v1 + 3) = &off_560464; + std::locale::~locale((_DWORD **)v1 + 10); + *((_DWORD *)v1 + 2) = &unk_55B2F8; + *(_DWORD *)v1 = &unk_55B294; + *((_DWORD *)v1 + 1) = 0; + *((_DWORD *)v1 + 18) = &off_560E30; + std::ios_base::~ios_base((int)(v1 + 72)); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FB90: using guessed type int (*off_55FB90)(); +// 55FBA4: using guessed type int (*off_55FBA4[2])(); +// 55FBB8: using guessed type int (*off_55FBB8[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532A00) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::istringstream::~istringstream(_DWORD *a1) +{ + char *v1; // ebx + char *Block; // eax + + v1 = (char *)a1 + *(_DWORD *)(*a1 - 12); + Block = (char *)*((_DWORD *)v1 + 11); + *(_DWORD *)v1 = &off_55FBCC; + *((_DWORD *)v1 + 17) = off_55FBE0; + *((_DWORD *)v1 + 2) = &off_55F928; + if ( Block != v1 + 52 ) + operator delete(Block); + *((_DWORD *)v1 + 2) = &off_560424; + std::locale::~locale((_DWORD **)v1 + 9); + *(_DWORD *)v1 = &unk_55B320; + *((_DWORD *)v1 + 1) = 0; + *((_DWORD *)v1 + 17) = &off_560E20; + std::ios_base::~ios_base((int)(v1 + 68)); + operator delete(v1); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FBCC: using guessed type int (*off_55FBCC)(); +// 55FBE0: using guessed type int (*off_55FBE0[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00532A70) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::istringstream::~istringstream(_DWORD *a1) +{ + char *v1; // ebx + char *Block; // eax + + v1 = (char *)a1 + *(_DWORD *)(*a1 - 12); + Block = (char *)*((_DWORD *)v1 + 11); + *(_DWORD *)v1 = &off_55FBCC; + *((_DWORD *)v1 + 17) = off_55FBE0; + *((_DWORD *)v1 + 2) = &off_55F928; + if ( Block != v1 + 52 ) + operator delete(Block); + *((_DWORD *)v1 + 2) = &off_560424; + std::locale::~locale((_DWORD **)v1 + 9); + *(_DWORD *)v1 = &unk_55B320; + *((_DWORD *)v1 + 1) = 0; + *((_DWORD *)v1 + 17) = &off_560E20; + std::ios_base::~ios_base((int)(v1 + 68)); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FBCC: using guessed type int (*off_55FBCC)(); +// 55FBE0: using guessed type int (*off_55FBE0[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00532AD0) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wistringstream::~wistringstream(_DWORD *a1) +{ + char *v1; // ebx + char *Block; // eax + + v1 = (char *)a1 + *(_DWORD *)(*a1 - 12); + Block = (char *)*((_DWORD *)v1 + 11); + *(_DWORD *)v1 = &off_55FBF4; + *((_DWORD *)v1 + 17) = off_55FC08; + *((_DWORD *)v1 + 2) = &off_55F968; + if ( Block != v1 + 52 ) + operator delete(Block); + *((_DWORD *)v1 + 2) = &off_560464; + std::locale::~locale((_DWORD **)v1 + 9); + *(_DWORD *)v1 = &unk_55B348; + *((_DWORD *)v1 + 1) = 0; + *((_DWORD *)v1 + 17) = &off_560E30; + std::ios_base::~ios_base((int)(v1 + 68)); + operator delete(v1); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FBF4: using guessed type int (*off_55FBF4)(); +// 55FC08: using guessed type int (*off_55FC08[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532B40) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wistringstream::~wistringstream(_DWORD *a1) +{ + char *v1; // ebx + char *Block; // eax + + v1 = (char *)a1 + *(_DWORD *)(*a1 - 12); + Block = (char *)*((_DWORD *)v1 + 11); + *(_DWORD *)v1 = &off_55FBF4; + *((_DWORD *)v1 + 17) = off_55FC08; + *((_DWORD *)v1 + 2) = &off_55F968; + if ( Block != v1 + 52 ) + operator delete(Block); + *((_DWORD *)v1 + 2) = &off_560464; + std::locale::~locale((_DWORD **)v1 + 9); + *(_DWORD *)v1 = &unk_55B348; + *((_DWORD *)v1 + 1) = 0; + *((_DWORD *)v1 + 17) = &off_560E30; + std::ios_base::~ios_base((int)(v1 + 68)); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FBF4: using guessed type int (*off_55FBF4)(); +// 55FC08: using guessed type int (*off_55FC08[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532BA0) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::ostringstream::~ostringstream(_DWORD *a1) +{ + char *v1; // ebx + char *Block; // eax + + v1 = (char *)a1 + *(_DWORD *)(*a1 - 12); + Block = (char *)*((_DWORD *)v1 + 10); + *(_DWORD *)v1 = &off_55FC1C; + *((_DWORD *)v1 + 16) = off_55FC30; + *((_DWORD *)v1 + 1) = &off_55F928; + if ( Block != v1 + 48 ) + operator delete(Block); + *((_DWORD *)v1 + 1) = &off_560424; + std::locale::~locale((_DWORD **)v1 + 8); + *(_DWORD *)v1 = &unk_55B370; + *((_DWORD *)v1 + 16) = &off_560E20; + std::ios_base::~ios_base((int)(v1 + 64)); + operator delete(v1); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FC1C: using guessed type int (*off_55FC1C)(); +// 55FC30: using guessed type int (*off_55FC30[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00532C10) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::ostringstream::~ostringstream(_DWORD *a1) +{ + char *v1; // ebx + char *Block; // eax + + v1 = (char *)a1 + *(_DWORD *)(*a1 - 12); + Block = (char *)*((_DWORD *)v1 + 10); + *(_DWORD *)v1 = &off_55FC1C; + *((_DWORD *)v1 + 16) = off_55FC30; + *((_DWORD *)v1 + 1) = &off_55F928; + if ( Block != v1 + 48 ) + operator delete(Block); + *((_DWORD *)v1 + 1) = &off_560424; + std::locale::~locale((_DWORD **)v1 + 8); + *(_DWORD *)v1 = &unk_55B370; + *((_DWORD *)v1 + 16) = &off_560E20; + std::ios_base::~ios_base((int)(v1 + 64)); +} +// 55F928: using guessed type int (*off_55F928)(); +// 55FC1C: using guessed type int (*off_55FC1C)(); +// 55FC30: using guessed type int (*off_55FC30[2])(); +// 560424: using guessed type int (*off_560424)(); +// 560E20: using guessed type int (*off_560E20)(); + +//----- (00532C70) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wostringstream::~wostringstream(_DWORD *a1) +{ + char *v1; // ebx + char *Block; // eax + + v1 = (char *)a1 + *(_DWORD *)(*a1 - 12); + Block = (char *)*((_DWORD *)v1 + 10); + *(_DWORD *)v1 = &off_55FC44; + *((_DWORD *)v1 + 16) = off_55FC58; + *((_DWORD *)v1 + 1) = &off_55F968; + if ( Block != v1 + 48 ) + operator delete(Block); + *((_DWORD *)v1 + 1) = &off_560464; + std::locale::~locale((_DWORD **)v1 + 8); + *(_DWORD *)v1 = &unk_55B398; + *((_DWORD *)v1 + 16) = &off_560E30; + std::ios_base::~ios_base((int)(v1 + 64)); + operator delete(v1); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FC44: using guessed type int (*off_55FC44)(); +// 55FC58: using guessed type int (*off_55FC58[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532CE0) -------------------------------------------------------- +void __fastcall `virtual thunk to'std::wostringstream::~wostringstream(_DWORD *a1) +{ + char *v1; // ebx + char *Block; // eax + + v1 = (char *)a1 + *(_DWORD *)(*a1 - 12); + Block = (char *)*((_DWORD *)v1 + 10); + *(_DWORD *)v1 = &off_55FC44; + *((_DWORD *)v1 + 16) = off_55FC58; + *((_DWORD *)v1 + 1) = &off_55F968; + if ( Block != v1 + 48 ) + operator delete(Block); + *((_DWORD *)v1 + 1) = &off_560464; + std::locale::~locale((_DWORD **)v1 + 8); + *(_DWORD *)v1 = &unk_55B398; + *((_DWORD *)v1 + 16) = &off_560E30; + std::ios_base::~ios_base((int)(v1 + 64)); +} +// 55F968: using guessed type int (*off_55F968)(); +// 55FC44: using guessed type int (*off_55FC44)(); +// 55FC58: using guessed type int (*off_55FC58[2])(); +// 560464: using guessed type int (*off_560464)(); +// 560E30: using guessed type int (*off_560E30)(); + +//----- (00532D40) -------------------------------------------------------- +int __fastcall std::filebuf::close(void)::__close_sentry::~__close_sentry(int *a1) +{ + int v2; // ebx + bool v3; // zf + int result; // eax + int v5; // edx + int v6; // edx + + v2 = *a1; + v3 = *(_BYTE *)(*a1 + 72) == 0; + *(_DWORD *)(v2 + 48) = 0; + *(_BYTE *)(v2 + 84) = 0; + if ( !v3 ) + { + if ( *(_DWORD *)(v2 + 64) ) + operator delete[](*(void **)(v2 + 64)); + *(_DWORD *)(v2 + 64) = 0; + *(_BYTE *)(v2 + 72) = 0; + } + if ( *(_DWORD *)(v2 + 92) ) + operator delete[](*(void **)(v2 + 92)); + result = *a1; + *(_DWORD *)(v2 + 92) = 0; + *(_DWORD *)(v2 + 96) = 0; + *(_DWORD *)(v2 + 100) = 0; + *(_DWORD *)(v2 + 104) = 0; + *(_WORD *)(result + 73) = 0; + v5 = *(_DWORD *)(result + 64); + *(_DWORD *)(result + 20) = 0; + *(_DWORD *)(result + 4) = v5; + *(_DWORD *)(result + 8) = v5; + *(_DWORD *)(result + 12) = v5; + v6 = *(_DWORD *)(result + 52); + *(_DWORD *)(result + 16) = 0; + *(_DWORD *)(result + 24) = 0; + *(_DWORD *)(result + 56) = v6; + *(_DWORD *)(result + 60) = v6; + return result; +} + +//----- (00532DE0) -------------------------------------------------------- +int __fastcall std::wfilebuf::close(void)::__close_sentry::~__close_sentry(int *a1) +{ + int v2; // ebx + bool v3; // zf + int result; // eax + int v5; // edx + int v6; // edx + + v2 = *a1; + v3 = *(_BYTE *)(*a1 + 72) == 0; + *(_DWORD *)(v2 + 48) = 0; + *(_BYTE *)(v2 + 88) = 0; + if ( !v3 ) + { + if ( *(_DWORD *)(v2 + 64) ) + operator delete[](*(void **)(v2 + 64)); + *(_DWORD *)(v2 + 64) = 0; + *(_BYTE *)(v2 + 72) = 0; + } + if ( *(_DWORD *)(v2 + 96) ) + operator delete[](*(void **)(v2 + 96)); + result = *a1; + *(_DWORD *)(v2 + 96) = 0; + *(_DWORD *)(v2 + 100) = 0; + *(_DWORD *)(v2 + 104) = 0; + *(_DWORD *)(v2 + 108) = 0; + *(_WORD *)(result + 73) = 0; + v5 = *(_DWORD *)(result + 64); + *(_DWORD *)(result + 20) = 0; + *(_DWORD *)(result + 4) = v5; + *(_DWORD *)(result + 8) = v5; + *(_DWORD *)(result + 12) = v5; + v6 = *(_DWORD *)(result + 52); + *(_DWORD *)(result + 16) = 0; + *(_DWORD *)(result + 24) = 0; + *(_DWORD *)(result + 56) = v6; + *(_DWORD *)(result + 60) = v6; + return result; +} + +//----- (00532EC0) -------------------------------------------------------- +int __cdecl operator new[](unsigned int a1) +{ + return operator new[](a1); +} + +//----- (00532F50) -------------------------------------------------------- +void *__cdecl operator new(size_t a1) +{ + size_t Size; // ebx + void *result; // eax + void (*new_handler)(void); // eax + _DWORD *exception; // eax + + Size = 1; + if ( a1 ) + Size = a1; + while ( 1 ) + { + result = malloc(Size); + if ( result ) + break; + new_handler = (void (*)(void))std::get_new_handler(); + if ( !new_handler ) + { + exception = __cxa_allocate_exception(4u); + *exception = &off_560E0C; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::bad_alloc, + (void (__cdecl *)(void *))std::bad_alloc::~bad_alloc); + } + new_handler(); + } + return result; +} +// 55C490: using guessed type int *`typeinfo for'std::bad_alloc; +// 560E0C: using guessed type void (__cdecl *off_560E0C)(std::bad_alloc *__hidden this); + +//----- (00532FB0) -------------------------------------------------------- +int __cxa_allocate_dependent_exception() +{ + void *v0; // eax + int v1; // ebx + + v0 = malloc(0x50u); + if ( v0 ) + { + v1 = (int)v0; + } + else + { + `anonymous namespace'::pool::allocate(); + v1 = 80; + } + *(_DWORD *)v1 = 0; + *(_DWORD *)(v1 + 76) = 0; + memset((void *)((v1 + 4) & 0xFFFFFFFC), 0, 4 * ((v1 - ((v1 + 4) & 0xFFFFFFFC) + 80) >> 2)); + return v1; +} + +//----- (00533040) -------------------------------------------------------- +void *__cdecl __cxa_allocate_exception(size_t thrown_size) +{ + _DWORD *v1; // eax + _DWORD *v2; // edx + + v1 = malloc(thrown_size + 96); + if ( v1 ) + { + v2 = v1; + } + else + { + `anonymous namespace'::pool::allocate(); + v2 = (_DWORD *)(thrown_size + 96); + if ( thrown_size == -96 ) + std::terminate(); + } + *v2 = 0; + v2[23] = 0; + memset( + (void *)((unsigned int)(v2 + 1) & 0xFFFFFFFC), + 0, + 4 * (((unsigned int)v2 - ((unsigned int)(v2 + 1) & 0xFFFFFFFC) + 96) >> 2)); + return v2 + 24; +} + +//----- (005330D0) -------------------------------------------------------- +void *__cdecl __cxa_begin_catch(void *a1) +{ + char **globals; // eax + char *v2; // edx + char *v3; // ebp + int v5; // ecx + int v6; // edi + + globals = (char **)__cxa_get_globals(); + v2 = *globals; + v3 = (char *)a1 - 48; + if ( (unsigned __int64)(*(_QWORD *)a1 - 0x474E5543432B2B00LL) <= 1 ) + { + v5 = *((_DWORD *)a1 - 7); + v6 = 1 - v5; + if ( v5 >= 0 ) + v6 = v5 + 1; + *((_DWORD *)a1 - 7) = v6; + --globals[1]; + if ( v2 != v3 ) + { + *((_DWORD *)a1 - 8) = v2; + *globals = v3; + } + return (void *)*((_DWORD *)a1 - 2); + } + else + { + if ( v2 ) + std::terminate(); + *globals = v3; + return 0; + } +} + +//----- (00533160) -------------------------------------------------------- +void __cdecl __noreturn __cxa_call_terminate(_Unwind_Exception *a1) +{ + if ( a1 ) + { + __cxa_begin_catch(a1); + if ( !(((unsigned int)(*(_DWORD *)a1 - 1126902528) > 1) + + ((unsigned __int64)(*(_QWORD *)a1 - 0x474E5543432B2B00LL) >> 32)) ) + __cxxabiv1::__terminate(*((void (**)(void))a1 - 9)); + } + std::terminate(); +} + +//----- (005331B0) -------------------------------------------------------- +void __cdecl __noreturn __cxa_call_unexpected(void *a1) +{ + __cxa_begin_catch(a1); + __cxxabiv1::__unexpected(*((void (**)(void))a1 - 10)); +} + +//----- (00533350) -------------------------------------------------------- +struct type_info *__cxa_current_exception_type(void) +{ + struct type_info *result; // eax + int v1; // edx + + result = (struct type_info *)*__cxa_get_globals(); + if ( result ) + { + v1 = *((_DWORD *)result + 12); + result = *(struct type_info **)result; + if ( (v1 & 1) != 0 ) + return (struct type_info *)*((_DWORD *)result - 20); + } + return result; +} + +//----- (00533370) -------------------------------------------------------- +void __noreturn __cxa_deleted_virtual(void) +{ + write(2, "deleted virtual method called\n", 0x1Eu); + std::terminate(); +} + +//----- (005333A0) -------------------------------------------------------- +void __cxa_end_catch(void) +{ + _DWORD *globals_fast; // edx + _DWORD *v1; // eax + int v2; // ecx + int v3; // ecx + + globals_fast = __cxa_get_globals_fast(); + v1 = (_DWORD *)*globals_fast; + if ( *globals_fast ) + { + if ( ((unsigned int)(v1[12] - 1126902528) > 1) + + ((unsigned __int64)(*((_QWORD *)v1 + 6) - 0x474E5543432B2B00LL) >> 32) ) + { + *globals_fast = 0; + _Unwind_DeleteException((struct _Unwind_Exception *)(v1 + 12)); + return; + } + v2 = v1[5]; + if ( v2 < 0 ) + { + v3 = v2 + 1; + if ( !v3 ) + *globals_fast = v1[4]; + } + else + { + v3 = v2 - 1; + if ( !v3 ) + { + *globals_fast = v1[4]; + _Unwind_DeleteException((struct _Unwind_Exception *)(v1 + 12)); + return; + } + if ( v3 == -1 ) + std::terminate(); + } + v1[5] = v3; + } +} + +//----- (00533440) -------------------------------------------------------- +void __cdecl __cxa_free_dependent_exception(char *Block) +{ + if ( Block > ::Block && Block < (char *)::Block + dword_53E500 ) + `anonymous namespace'::pool::free((int)Block); + else + free(Block); +} +// 53E500: using guessed type int dword_53E500; + +//----- (005334B0) -------------------------------------------------------- +void __cdecl __cxa_free_exception(void *a1) +{ + char *v1; // eax + + v1 = (char *)a1 - 96; + if ( (char *)a1 - 96 > Block && v1 < (char *)Block + dword_53E500 ) + `anonymous namespace'::pool::free((int)v1); + else + free((char *)a1 - 96); +} +// 53E500: using guessed type int dword_53E500; + +//----- (00533520) -------------------------------------------------------- +void *__cdecl __cxa_get_exception_ptr(void *a1) +{ + return (void *)*((_DWORD *)a1 - 2); +} + +//----- (00533530) -------------------------------------------------------- +_DWORD *__cxa_get_globals() +{ + return __emutls_get_address(__emutls_v__ZZN12_GLOBAL__N_110get_globalEvE6global); +} +// 53FD00: using guessed type size_t __emutls_v__ZZN12_GLOBAL__N_110get_globalEvE6global[4]; + +//----- (00533550) -------------------------------------------------------- +_DWORD *__cxa_get_globals_fast() +{ + return __emutls_get_address(__emutls_v__ZZN12_GLOBAL__N_110get_globalEvE6global); +} +// 53FD00: using guessed type size_t __emutls_v__ZZN12_GLOBAL__N_110get_globalEvE6global[4]; + +//----- (00533570) -------------------------------------------------------- +void __cdecl __cxa_guard_abort(__guard *a1) +{ + *((_BYTE *)a1 + 1) = 0; + if ( _CRT_MT ) + { + if ( __gthr_win32_recursive_mutex_unlock(`anonymous namespace'::static_mutex) ) + __gnu_cxx::__throw_concurrence_unlock_error(); + } +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F0C0: using guessed type int `anonymous namespace'::static_mutex; + +//----- (00533610) -------------------------------------------------------- +int __cdecl __cxa_guard_acquire(__guard *a1) +{ + _DWORD *exception; // eax + int lpuexcpt; // [esp+18h] [ebp-44h] + + if ( *(_BYTE *)a1 ) + return 0; + lpuexcpt = _CRT_MT; + if ( _CRT_MT ) + { + __gthr_win32_once( + (int)&`anonymous namespace'::get_static_mutex(void)::once, + (void (*)(void))`anonymous namespace'::init); + if ( _CRT_MT ) + { + if ( __gthr_win32_recursive_mutex_lock(`anonymous namespace'::static_mutex) ) + { + exception = __cxa_allocate_exception(4u); + *exception = &off_55F348; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'__gnu_cxx::__concurrence_lock_error, + (void (__cdecl *)(void *))__gnu_cxx::__concurrence_lock_error::~__concurrence_lock_error); + } + if ( !*(_BYTE *)a1 ) + goto LABEL_9; + if ( _CRT_MT && __gthr_win32_recursive_mutex_unlock(`anonymous namespace'::static_mutex) ) + __gnu_cxx::__throw_concurrence_unlock_error(); + } + else if ( !*(_BYTE *)a1 ) + { +LABEL_9: + if ( *((_BYTE *)a1 + 1) ) + __cxxabiv1::throw_recursive_init_exception(); + goto LABEL_5; + } + return 0; + } + if ( !*(_BYTE *)a1 ) + { + if ( *((_BYTE *)a1 + 1) ) + __cxxabiv1::throw_recursive_init_exception(); +LABEL_5: + lpuexcpt = 1; + *((_BYTE *)a1 + 1) = 1; + } + return lpuexcpt; +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F0C0: using guessed type int `anonymous namespace'::static_mutex; +// 55B6E8: using guessed type int *`typeinfo for'__gnu_cxx::__concurrence_lock_error; +// 55F348: using guessed type void (__cdecl *off_55F348)(__gnu_cxx::__concurrence_lock_error *__hidden this); + +//----- (005337B0) -------------------------------------------------------- +void __cdecl __cxa_guard_release(__guard *a1) +{ + *((_BYTE *)a1 + 1) = 0; + *(_BYTE *)a1 = 1; + if ( _CRT_MT ) + { + if ( __gthr_win32_recursive_mutex_unlock(`anonymous namespace'::static_mutex) ) + __gnu_cxx::__throw_concurrence_unlock_error(); + } +} +// 53E1E4: using guessed type int _CRT_MT; +// 53F0C0: using guessed type int `anonymous namespace'::static_mutex; + +//----- (00533850) -------------------------------------------------------- +int __cdecl __cxa_init_primary_exception(int a1, int a2, int a3) +{ + void (*terminate)(void); // eax + int result; // eax + + *(_DWORD *)(a1 - 80) = a2; + *(_DWORD *)(a1 - 96) = 0; + *(_DWORD *)(a1 - 76) = a3; + *(_DWORD *)(a1 - 72) = std::get_unexpected(); + terminate = std::get_terminate(); + *(_DWORD *)(a1 - 32) = 1126902528; + *(_DWORD *)(a1 - 68) = terminate; + result = a1 - 96; + *(_DWORD *)(a1 - 28) = 1196315971; + *(_DWORD *)(a1 - 24) = __gxx_exception_cleanup; + return result; +} + +//----- (005338A0) -------------------------------------------------------- +void __noreturn __cxa_pure_virtual(void) +{ + write(2, "pure virtual method called\n", 0x1Bu); + std::terminate(); +} + +//----- (005338D0) -------------------------------------------------------- +void __noreturn __cxa_rethrow(void) +{ + int *globals; // eax + int v1; // edx + + globals = __cxa_get_globals(); + v1 = *globals; + ++globals[1]; + if ( v1 ) + { + if ( ((unsigned int)(*(_DWORD *)(v1 + 48) - 1126902528) > 1) + + ((unsigned __int64)(*(_QWORD *)(v1 + 48) - 0x474E5543432B2B00LL) >> 32) ) + { + *globals = 0; + } + else + { + *(_DWORD *)(v1 + 20) = -*(_DWORD *)(v1 + 20); + } + _Unwind_SjLj_Resume_or_Rethrow((struct _Unwind_Exception *)(v1 + 48)); + } + std::terminate(); +} + +//----- (00533930) -------------------------------------------------------- +void __cdecl __noreturn __cxa_throw(void *a1, struct type_info *lptinfo, void (__cdecl *a3)(void *)) +{ + _DWORD *globals; // eax + _DWORD *inited; // eax + void *v5; // ebx + + globals = __cxa_get_globals(); + ++globals[1]; + inited = (_DWORD *)__cxa_init_primary_exception((int)a1, (int)lptinfo, (int)a3); + v5 = inited + 16; + *inited = 1; + _Unwind_SjLj_RaiseException((struct _Unwind_Exception *)(inited + 16)); + __cxa_begin_catch(v5); + std::terminate(); +} + +//----- (00533980) -------------------------------------------------------- +void *__cdecl __dynamic_cast( + const void *lpsrc, + const struct __class_type_info *lpstype, + const struct __class_type_info *lpdtype, + ptrdiff_t s2d) +{ + int v4; // edx + int v5; // ecx + int *v6; // edx + int v7; // eax + void *result; // eax + char *v9; // [esp+48h] [ebp-20h] BYREF + int v10; // [esp+4Ch] [ebp-1Ch] + int v11; // [esp+50h] [ebp-18h] + int v12; // [esp+54h] [ebp-14h] + int v13; // [esp+58h] [ebp-10h] + + v4 = *(_DWORD *)(*(_DWORD *)lpsrc - 8); + v5 = *(_DWORD *)(*(_DWORD *)lpsrc - 4); + v9 = 0; + v10 = 0; + v6 = (int *)((char *)lpsrc + v4); + v11 = 0; + v7 = *v6; + v12 = 0; + v13 = 16; + if ( *(_DWORD *)(v7 - 4) != v5 ) + return 0; + (*(void (__thiscall **)(int, ptrdiff_t, int, const struct __class_type_info *, int *, const struct __class_type_info *, const void *, char **))(*(_DWORD *)v5 + 28))( + v5, + s2d, + 6, + lpdtype, + v6, + lpstype, + lpsrc, + &v9); + result = v9; + if ( !v9 ) + return 0; + if ( (v12 & 6) != 6 && ((unsigned __int8)v11 & (unsigned __int8)v10 & 6) != 6 ) + { + if ( (v11 & 5) != 4 && !v12 ) + { + if ( s2d < 0 ) + { + if ( s2d != -2 + && ((*(int (__thiscall **)(const struct __class_type_info *, ptrdiff_t, char *, const struct __class_type_info *, const void *))(*(_DWORD *)lpdtype + 32))( + lpdtype, + s2d, + v9, + lpstype, + lpsrc) & 6) == 6 ) + { + return v9; + } + } + else if ( lpsrc == &v9[s2d] ) + { + return v9; + } + } + return 0; + } + return result; +} + +//----- (00533AA0) -------------------------------------------------------- +int __cdecl __gxx_personality_sj0(int a1, int a2, __int64 a3, _Unwind_Exception *v, struct _Unwind_Context *lpuctx) +{ + int IPInfo; // eax + int v7; // ebp + char *v8; // eax + int v9; // edi + int v10; // ecx + char v11; // bl + int v12; // edx + int v13; // esi + int v14; // ecx + char v15; // bl + int v16; // edx + int v17; // edx + unsigned int v18; // ecx + char *v19; // esi + char v20; // bl + int v21; // eax + char *v22; // ebx + int v23; // esi + unsigned int v24; // ecx + int v25; // edi + char v26; // dl + int v27; // eax + int v28; // esi + char *v29; // edx + int v30; // ecx + char v31; // bl + int v32; // eax + int v33; // edx + unsigned __int8 v34; // al + int v35; // ecx + int *v36; // eax + bool v37; // [esp+18h] [ebp-B4h] + int v38; // [esp+18h] [ebp-B4h] + int v39; // [esp+20h] [ebp-ACh] + char *v40; // [esp+20h] [ebp-ACh] + int v41; // [esp+24h] [ebp-A8h] + char *v42; // [esp+24h] [ebp-A8h] + int v43; // [esp+28h] [ebp-A4h] + int v44; // [esp+2Ch] [ebp-A0h] + unsigned __int64 v45; // [esp+30h] [ebp-9Ch] + char v46; // [esp+3Bh] [ebp-91h] + char *LanguageSpecificData; // [esp+3Ch] [ebp-90h] + int **v48; // [esp+40h] [ebp-8Ch] + int v49; // [esp+48h] [ebp-84h] + int *v50; // [esp+8Ch] [ebp-40h] BYREF + unsigned int v51; // [esp+90h] [ebp-3Ch] BYREF + unsigned __int8 v52[4]; // [esp+94h] [ebp-38h] BYREF + char v53[8]; // [esp+98h] [ebp-34h] BYREF + int *v54; // [esp+A0h] [ebp-2Ch] + int v55; // [esp+A4h] [ebp-28h] + int v56; // [esp+A8h] [ebp-24h] + char v57; // [esp+ACh] [ebp-20h] + + v50 = 0; + v51 = 0; + if ( a1 != 1 ) + return 3; + v45 = a3 - 0x474E5543432B2B00LL; + v37 = (unsigned __int64)(a3 - 0x474E5543432B2B00LL) <= 1; + v46 = v37 && a2 == 6; + if ( v46 ) + { + v39 = *((_DWORD *)v - 3); + if ( v39 ) + { + v41 = *((_DWORD *)v - 6); + LanguageSpecificData = (char *)*((_DWORD *)v - 4); + goto LABEL_5; + } + goto LABEL_44; + } + LanguageSpecificData = (char *)_Unwind_GetLanguageSpecificData((int)lpuctx); + if ( !LanguageSpecificData ) + return 8; + v42 = parse_lsda_header((int)lpuctx, LanguageSpecificData, (int)v53); + v54 = (int *)base_of_encoded_value(v57); + IPInfo = _Unwind_GetIPInfo((int)lpuctx, &v51); + v7 = (__PAIR64__(IPInfo, v51) - 1) >> 32; + v39 = v7; + if ( v7 < 0 ) + return 8; + if ( !v7 ) + { + v41 = 0; + v33 = 1; + v44 = 0; + goto LABEL_49; + } + v8 = v42; + do + { + v9 = 0; + v10 = 0; + do + { + v11 = *v8++; + v12 = (v11 & 0x7F) << v10; + v10 += 7; + v9 |= v12; + } + while ( v11 < 0 ); + v13 = 0; + v14 = 0; + do + { + v15 = *v8++; + v16 = (v15 & 0x7F) << v14; + v14 += 7; + v13 |= v16; + } + while ( v15 < 0 ); + --v7; + } + while ( v7 ); + v49 = v9 + 1; + if ( !v13 ) + { + if ( v9 == -1 ) + return 8; + goto LABEL_46; + } + if ( v9 == -1 ) + return 8; + v44 = v56 + v13 - 1; + if ( v56 + v13 == 1 ) + goto LABEL_46; + v48 = &`typeinfo for'__cxxabiv1::__forced_unwind; + if ( (a2 & 8) == 0 ) + { + v48 = &`typeinfo for'__cxxabiv1::__foreign_exception; + if ( v45 <= 1 ) + { + v36 = (int *)((char *)v + 32); + if ( (*(_BYTE *)v & 1) != 0 ) + v36 = (int *)*((_DWORD *)v - 12); + v50 = v36; + v48 = (int **)*(v36 - 20); + } + } + while ( 1 ) + { + v17 = 0; + v18 = 0; + v19 = (char *)v44; + do + { + v20 = *v19++; + v21 = (v20 & 0x7F) << v18; + v18 += 7; + v17 |= v21; + } + while ( v20 < 0 ); + v40 = v19; + if ( v18 <= 0x1F && (v20 & 0x40) != 0 ) + v17 |= -(1 << v18); + v41 = v17; + v22 = v19; + v23 = 0; + v24 = 0; + v25 = v17; + do + { + v26 = *v22++; + v27 = (v26 & 0x7F) << v24; + v24 += 7; + v23 |= v27; + } + while ( v26 < 0 ); + v43 = v23; + if ( v24 <= 0x1F && (v26 & 0x40) != 0 ) + v43 = -(1 << v24) | v23; + if ( !v25 ) + { + v46 = 1; + goto LABEL_41; + } + if ( v25 > 0 ) + break; + if ( (a2 & 8) == 0 && v37 && v48 ) + { + if ( !(unsigned __int8)check_exception_spec((int)v53, (int)v48, v50, v25) ) + { + if ( (a2 & 1) != 0 ) + { + v39 = v49; + goto LABEL_56; + } + v39 = v49; + if ( (a2 & 8) == 0 ) + { + v33 = 3; +LABEL_51: + if ( v45 <= 1 ) + { + if ( v33 != 1 ) + { +LABEL_5: + if ( v41 < 0 ) + { + parse_lsda_header((int)lpuctx, LanguageSpecificData, (int)v53); + v54 = (int *)base_of_encoded_value(v57); + *((_DWORD *)v - 3) = base_of_encoded_value(v57); + } +LABEL_7: + _Unwind_SetGR(lpuctx, 0, (_Unwind_Word)v); + _Unwind_SetGR(lpuctx, 1, v41); + _Unwind_SetIP((int)lpuctx, v39); + return 7; + } +LABEL_44: + __cxa_call_terminate(v); + } +LABEL_52: + if ( v33 == 1 ) + std::terminate(); + } + if ( v41 < 0 ) + std::unexpected(); + goto LABEL_7; + } + } + else + { + v28 = 0; + v29 = (char *)(v55 + ~v25); + v30 = 0; + do + { + v31 = *v29++; + v32 = (v31 & 0x7F) << v30; + v30 += 7; + v28 |= v32; + } + while ( v31 < 0 ); + if ( !v28 ) + goto LABEL_67; + } +LABEL_41: + if ( !v43 ) + { + if ( !v46 ) + return 8; +LABEL_46: + if ( (a2 & 1) == 0 ) + { + v41 = a2 & 8; + v39 = v49; + if ( (a2 & 8) != 0 ) + v41 = 0; + goto LABEL_7; + } + return 8; + } + v44 = (int)&v40[v43]; + } + if ( v57 == -1 ) + { + v35 = 0; + goto LABEL_64; + } + v34 = v57 & 7; + if ( (v57 & 7) == 2 ) + { + v35 = -2 * v25; + goto LABEL_64; + } + if ( v34 <= 2u ) + { + if ( v34 ) +LABEL_85: + abort(); + goto LABEL_69; + } + if ( v34 == 3 ) + { +LABEL_69: + v35 = -4 * v25; + goto LABEL_64; + } + if ( v34 != 4 ) + goto LABEL_85; + v35 = -8 * v25; +LABEL_64: + read_encoded_value_with_base(v57, v54, (int *)(v55 + v35), (int *)v52); + if ( *(_DWORD *)v52 && (!v48 || !(unsigned __int8)get_adjusted_ptr(*(int *)v52, (int)v48, &v50)) ) + goto LABEL_41; +LABEL_67: + v33 = 3; + v39 = v49; +LABEL_49: + if ( (a2 & 1) == 0 ) + { + if ( (a2 & 8) == 0 ) + goto LABEL_51; + goto LABEL_52; + } + v38 = 6; + if ( v45 <= 1 ) + { +LABEL_56: + v38 = 6; + *((_DWORD *)v - 6) = v41; + *((_DWORD *)v - 5) = v44; + *((_DWORD *)v - 4) = LanguageSpecificData; + *((_DWORD *)v - 2) = v50; + *((_DWORD *)v - 3) = v39; + } + return v38; +} +// 55B60C: using guessed type int *`typeinfo for'__cxxabiv1::__forced_unwind; +// 55B620: using guessed type int *`typeinfo for'__cxxabiv1::__foreign_exception; + +//----- (005341E0) -------------------------------------------------------- +void __tcf_0_4(void) +{ + if ( _CRT_MT ) + __gthr_win32_mutex_destroy((int)&`anonymous namespace'::emergency_pool); +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (00534250) -------------------------------------------------------- +void __tcf_0_5(void) +{ + if ( _CRT_MT ) + __gthr_win32_mutex_destroy((int)&`anonymous namespace'::get_locale_cache_mutex(void)::locale_cache_mutex); +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (00534280) -------------------------------------------------------- +void __tcf_0_6(void) +{ + if ( _CRT_MT ) + __gthr_win32_mutex_destroy((int)&`anonymous namespace'::get_locale_mutex(void)::locale_mutex); +} +// 53E1E4: using guessed type int _CRT_MT; + +//----- (005342F0) -------------------------------------------------------- +void __cdecl __tcf_0_7(std::_V2::error_category *a1) +{ + `anonymous namespace'::__io_category_instance(void)::__ec = &off_55F16C; + std::_V2::error_category::~error_category(a1); +} +// 53FCD0: using guessed type void (__cdecl **`anonymous namespace'::__io_category_instance(void)::__ec)(_anonymous_namespace_::io_error_category *__hidden this); +// 55F16C: using guessed type void (__cdecl *off_55F16C)(_anonymous_namespace_::io_error_category *__hidden this); + +//----- (00534330) -------------------------------------------------------- +int main(int argc, const char **argv, const char **envp) +{ + int *v3; // edi + _DWORD *v4; // eax + _BYTE *v5; // edx + char v6; // al + char v7; // al + FILE *v8; // eax + int v9; // edx + char *v10; // eax + _DWORD *v11; // eax + _DWORD *v12; // eax + char v13; // al + FILE *v14; // eax + void **v15; // ebx + char *v16; // ecx + int v17; // edx + int v18; // edx + char *v19; // eax + char *v20; // eax + char *v21; // eax + _DWORD *v22; // edx + int v23; // edx + _DWORD *v24; // eax + int v25; // edx + FILE *v26; // eax + bool v27; // zf + int *v28; // eax + std::ostream::sentry *v29; // edx + int *v30; // eax + _DWORD *v31; // eax + unsigned __int8 **v32; // eax + unsigned __int8 **v33; // eax + int *j; // eax + std::ostream::sentry *v35; // eax + std::ostream::sentry *v36; // eax + _DWORD *v37; // eax + FILE *v38; // eax + int v39; // edx + int v40; // edx + int v41; // edx + char v43; // [esp+1h] [ebp-38Bh] + char v44; // [esp+2h] [ebp-38Ah] + char v45; // [esp+3h] [ebp-389h] + const char **v46; // [esp+4h] [ebp-388h] + int v47; // [esp+8h] [ebp-384h] + FILE *v48; // [esp+Ch] [ebp-380h] + int v49; // [esp+Ch] [ebp-380h] + int v50; // [esp+Ch] [ebp-380h] + bool v51; // [esp+10h] [ebp-37Ch] + int v52; // [esp+10h] [ebp-37Ch] + char v53; // [esp+14h] [ebp-378h] + int *flag; // [esp+14h] [ebp-378h] + int v55; // [esp+18h] [ebp-374h] + std::ostream::sentry *i; // [esp+18h] [ebp-374h] + std::ostream::sentry *v57; // [esp+18h] [ebp-374h] + _DWORD *Block; // [esp+1Ch] [ebp-370h] + bool v59; // [esp+20h] [ebp-36Ch] + int v60; // [esp+20h] [ebp-36Ch] + std::ostream::sentry *v61; // [esp+20h] [ebp-36Ch] + std::ostream::sentry *v62; // [esp+20h] [ebp-36Ch] + int *k; // [esp+20h] [ebp-36Ch] + char *FileName; // [esp+24h] [ebp-368h] + char *FileNamea; // [esp+24h] [ebp-368h] + int v66; // [esp+28h] [ebp-364h] + int v67; // [esp+28h] [ebp-364h] + int v68; // [esp+28h] [ebp-364h] + int v69; // [esp+28h] [ebp-364h] + int v70; // [esp+28h] [ebp-364h] + int Stream; // [esp+2Ch] [ebp-360h] + FILE *Streama; // [esp+2Ch] [ebp-360h] + FILE *Streamk; // [esp+2Ch] [ebp-360h] + FILE *Streamb; // [esp+2Ch] [ebp-360h] + FILE *Streamc; // [esp+2Ch] [ebp-360h] + FILE *Streamd; // [esp+2Ch] [ebp-360h] + FILE *Streame; // [esp+2Ch] [ebp-360h] + FILE *Streaml; // [esp+2Ch] [ebp-360h] + FILE *Streamf; // [esp+2Ch] [ebp-360h] + FILE *Streamg; // [esp+2Ch] [ebp-360h] + int *Streamh; // [esp+2Ch] [ebp-360h] + FILE *Streamm; // [esp+2Ch] [ebp-360h] + FILE *Streami; // [esp+2Ch] [ebp-360h] + FILE *Streamn; // [esp+2Ch] [ebp-360h] + FILE *Streamj; // [esp+2Ch] [ebp-360h] + void **v86; // [esp+68h] [ebp-324h] BYREF + void **v87; // [esp+6Ch] [ebp-320h] + int v88; // [esp+70h] [ebp-31Ch] + _DWORD *v89; // [esp+74h] [ebp-318h] BYREF + int v90; // [esp+78h] [ebp-314h] + int v91; // [esp+7Ch] [ebp-310h] + void **v92; // [esp+80h] [ebp-30Ch] BYREF + int v93; // [esp+84h] [ebp-308h] + int v94; // [esp+88h] [ebp-304h] + char *v95; // [esp+8Ch] [ebp-300h] BYREF + int v96; // [esp+90h] [ebp-2FCh] + char v97; // [esp+94h] [ebp-2F8h] BYREF + char *v98; // [esp+A4h] [ebp-2E8h] BYREF + int v99; // [esp+A8h] [ebp-2E4h] + char v100; // [esp+ACh] [ebp-2E0h] BYREF + int v101; // [esp+BCh] [ebp-2D0h] BYREF + int v102[5]; // [esp+C0h] [ebp-2CCh] BYREF + void *v103[6]; // [esp+D4h] [ebp-2B8h] BYREF + void *v104[6]; // [esp+ECh] [ebp-2A0h] BYREF + int v105; // [esp+104h] [ebp-288h] BYREF + int v106[5]; // [esp+108h] [ebp-284h] BYREF + int v107; // [esp+11Ch] [ebp-270h] BYREF + int v108[5]; // [esp+120h] [ebp-26Ch] BYREF + int v109; // [esp+134h] [ebp-258h] BYREF + int v110[5]; // [esp+138h] [ebp-254h] BYREF + void *v111[2]; // [esp+14Ch] [ebp-240h] BYREF + char v112; // [esp+154h] [ebp-238h] BYREF + void *v113[2]; // [esp+164h] [ebp-228h] BYREF + char v114; // [esp+16Ch] [ebp-220h] BYREF + int v115; // [esp+17Ch] [ebp-210h] BYREF + int v116; // [esp+180h] [ebp-20Ch] BYREF + std::ostream::sentry *v117; // [esp+184h] [ebp-208h] + int *v118; // [esp+188h] [ebp-204h] + int *v119; // [esp+18Ch] [ebp-200h] + int v120; // [esp+190h] [ebp-1FCh] + int v121; // [esp+194h] [ebp-1F8h] BYREF + int v122[2]; // [esp+198h] [ebp-1F4h] BYREF + int *v123; // [esp+1A0h] [ebp-1ECh] + int *v124; // [esp+1A4h] [ebp-1E8h] + int v125; // [esp+1A8h] [ebp-1E4h] + _DWORD v126[6]; // [esp+1ACh] [ebp-1E0h] BYREF + void *v127[6]; // [esp+1C4h] [ebp-1C8h] BYREF + void *v128[6]; // [esp+1DCh] [ebp-1B0h] BYREF + void *v129[6]; // [esp+1F4h] [ebp-198h] BYREF + void *v130[6]; // [esp+20Ch] [ebp-180h] BYREF + int v131; // [esp+224h] [ebp-168h] BYREF + int v132; // [esp+228h] [ebp-164h] + int v133; // [esp+22Ch] [ebp-160h] + char *String[6]; // [esp+23Ch] [ebp-150h] BYREF + void *v135[6]; // [esp+254h] [ebp-138h] BYREF + char *v136[6]; // [esp+26Ch] [ebp-120h] BYREF + int v137; // [esp+284h] [ebp-108h] BYREF + int v138; // [esp+288h] [ebp-104h] + char v139; // [esp+28Ch] [ebp-100h] BYREF + char *v140; // [esp+29Ch] [ebp-F0h] BYREF + int v141; // [esp+2A0h] [ebp-ECh] + int v142[4]; // [esp+2A4h] [ebp-E8h] BYREF + int v143; // [esp+2B4h] [ebp-D8h] BYREF + int v144; // [esp+2B8h] [ebp-D4h] + char v145[4]; // [esp+2BCh] [ebp-D0h] BYREF + char v146[196]; // [esp+2C0h] [ebp-CCh] BYREF + int *p_argc; // [esp+384h] [ebp-8h] + + p_argc = &argc; + v47 = argc; + v46 = argv; + __main(); + v95 = &v97; + v98 = &v100; + v86 = 0; + v87 = 0; + v88 = 0; + v96 = 0; + v97 = 0; + v99 = 0; + v100 = 0; + v89 = 0; + v90 = 0; + v91 = 0; + v92 = 0; + v93 = 0; + v94 = 0; + v102[0] = 0; + v102[1] = 0; + v102[2] = (int)v102; + v102[3] = (int)v102; + v102[4] = 0; + std::string::basic_string(v103, "$gwx"); + std::string::basic_string(v104, " "); + v106[0] = 0; + v106[1] = 0; + v106[2] = (int)v106; + v106[3] = (int)v106; + v106[4] = 0; + for ( Stream = 1; Stream < v47; ++Stream ) + { + std::string::basic_string((void **)&v143, "--config-path"); + v66 = Stream; + FileName = (char *)&v46[Stream]; + v59 = 0; + if ( !std::string::compare((int)&v143, *(char **)FileName) ) + v59 = Stream + 1 < v47; + std::string::_M_dispose((void **)&v143); + if ( v59 ) + { + ++Stream; + std::string::operator=((unsigned int *)&v98, (char *)v46[v66 + 1]); + } + else + { + std::string::basic_string((void **)&v143, *(char **)FileName); + std::vector::emplace_back((void **)&v89, &v143); + std::string::_M_dispose((void **)&v143); + } + } + + if ( v99 ) + { + v138 = 0; + v137 = (int)&v139; + v139 = 0; + ReadFile(v98, (unsigned int *)&v137); + while ( v138 ) + { + std::string::basic_string((void **)&v140, "\n"); + GetNextArg((int)&v143, &v137, (int)&v140); + std::vector::emplace_back((void **)&v89, &v143); + std::string::_M_dispose((void **)&v143); + std::string::_M_dispose((void **)&v140); + } + std::string::_M_dispose((void **)&v137); + } + Streama = 0; + v43 = 0; + v44 = 0; + v60 = 0; + v53 = 0; + v55 = -1431655765 * ((v90 - (int)v89) >> 3); + v45 = 0; + FileNamea = 0; + while ( (int)Streama < v55 ) + { + v67 = 6 * (_DWORD)Streama; + v4 = &v89[6 * (_DWORD)Streama]; + v5 = (_BYTE *)*v4; + if ( *(_BYTE *)*v4 != 45 ) + { + std::vector::push_back((int)&v86, (int)v4); + goto LABEL_84; + } + v6 = v5[1]; + switch ( v6 ) + { + case 'd': + v7 = v5[2]; + if ( !v7 ) + { + v60 |= 2u; + goto LABEL_84; + } + if ( v7 == 115 ) + { + v60 |= 4u; + goto LABEL_84; + } + break; + case 's': + if ( v5[2] == 116 ) + { + v60 |= 8u; + goto LABEL_84; + } + if ( (int)&Streama->_ptr + 1 < v55 ) + { + std::vector::push_back((int)&v86, (int)&v89[v67 + 6]); + v45 = 1; + goto LABEL_84; + } + break; + case 'v': + if ( v5[2] == 98 ) + v60 |= 0x10u; + else + v44 = 1; + goto LABEL_84; + case 'x': + if ( v5[2] == 99 && (int)&Streama->_ptr + 1 < v55 ) + { + v53 = 1; + if ( *(_BYTE *)v89[v67 + 6] != 45 ) + { + std::string::_M_assign((int)&v95, (int)&v89[v67 + 6]); + v53 = 1; + Streama = (FILE *)((char *)Streama + 1); + } + goto LABEL_84; + } + break; + case 'c': + if ( v5[2] == 99 && (int)&Streama->_ptr + 1 < v55 ) + { + v53 = 0; + if ( *(_BYTE *)v89[v67 + 6] != 45 ) + { + std::string::_M_assign((int)&v95, (int)&v89[v67 + 6]); + v53 = 0; + Streama = (FILE *)((char *)Streama + 1); + } + goto LABEL_84; + } + break; + case 'o': + v8 = (FILE *)((char *)&Streama->_ptr + 1); + if ( (int)&Streama->_ptr + 1 < v55 ) + { + FileNamea = (char *)v89[v67 + 6]; +LABEL_72: + Streama = v8; + goto LABEL_84; + } + break; + case 'g': + if ( v5[2] == 110 && (int)&Streama->_ptr + 1 < v55 ) + { + std::string::_M_assign((int)v103, (int)&v89[v67 + 6]); + v8 = (FILE *)((char *)&Streama->_ptr + 1); + goto LABEL_72; + } + break; + case 'p': + v60 |= 0x20u; + goto LABEL_84; + case 't': + v60 |= 1u; + goto LABEL_84; + case 'i': + v60 |= 0x40u; + goto LABEL_84; + } + std::string::basic_string((void **)&v143, "--split"); + v51 = std::operator==((int)&v89[v67], (int)&v143); + if ( v51 ) + v51 = (int)&Streama->_ptr + 1 < v55; + std::string::_M_dispose((void **)&v143); + if ( v51 ) + { + Streama = (FILE *)((char *)Streama + 1); + std::string::_M_assign((int)v104, (int)&v89[v67 + 6]); + goto LABEL_84; + } + v9 = v89[6 * (_DWORD)Streama]; + if ( *(_BYTE *)(v9 + 1) == 99 && *(_BYTE *)(v9 + 2) == 98 ) + { + LOBYTE(v142[0]) = 0; + v140 = (char *)v142; + v10 = (char *)v89[v67 + 6]; + Streama = (FILE *)((char *)Streama + 1); + v60 |= 0x80u; + v141 = 0; + ReadFile(v10, (unsigned int *)&v140); + if ( v141 ) + { + std::string::basic_string((void **)&v143, "life_cycle_callback_content"); + v11 = std::map::operator[](&v105, &v143); + std::string::_M_assign((int)v11, (int)&v140); + std::string::_M_dispose((void **)&v143); + } + std::string::_M_dispose((void **)&v140); + } + else + { + if ( !std::string::compare((int)&v89[v67], "--pm") ) + { + v48 = (FILE *)((char *)&Streama->_ptr + 1); + if ( (int)&Streama->_ptr + 1 < v55 ) + { + Streamk = (FILE *)&v89[v67 + 6]; + std::string::basic_string((void **)&v143, "plain_text_marker"); + v12 = std::map::operator[](&v105, &v143); + std::string::_M_assign((int)v12, (int)Streamk); + std::string::_M_dispose((void **)&v143); + v8 = v48; + goto LABEL_72; + } + } + v49 = v89[6 * (_DWORD)Streama]; + if ( *(_BYTE *)(v49 + 1) == 108 && *(_BYTE *)(v49 + 2) == 108 ) + { + v13 = *(_BYTE *)(v49 + 3); + if ( v13 != 119 ) + { + if ( v13 != 97 ) + { + v14 = ___acrt_iob_func(2u); + fprintf(v14, "Error: expected -llw or -lla, but got %s", (const char *)v49); + v68 = -1; + goto LABEL_153; + } + v51 = 1; + } + if ( !std::string::compare((int)v104, " ") ) + std::string::basic_string((void **)&v143, ","); + else + std::string::basic_string((char *)&v143, (int)v104); + Streama = (FILE *)((char *)Streama + 1); + Split((int)&v131, &v89[v67 + 6], (int)&v143); + v15 = (void **)v131; + v16 = (char *)v92; + v131 = 0; + v17 = v93; + v92 = v15; + v140 = v16; + v93 = v132; + v142[0] = v94; + v141 = v17; + v94 = v133; + v132 = 0; + v133 = 0; + std::vector::~vector((void ***)&v140, v17); + std::vector::~vector((void ***)&v131, v18); + std::string::_M_dispose((void **)&v143); + v43 = 1; + v53 = v51; + } + } +LABEL_84: + Streama = (FILE *)((char *)Streama + 1); + } + if ( v44 ) + { + std::string::basic_string((void **)&v143, "global"); + WXML::Compiler::GetVersionInfo((int)&v140, &v143); + std::string::_M_dispose((void **)&v143); + Streamb = ___acrt_iob_func(1u); + if ( FileNamea && *FileNamea ) + Streamb = fopen(FileNamea, "w"); + fprintf(Streamb, "%s\n", v140); + fclose(Streamb); + std::string::_M_dispose((void **)&v140); + } + if ( v86 == v87 ) + { + v68 = Usage(v47, v46); + } + else + { + v108[0] = 0; + v108[2] = (int)v108; + v108[3] = (int)v108; + v108[1] = 0; + v108[4] = 0; + v110[0] = 0; + v110[1] = 0; + v110[2] = (int)v110; + v110[3] = (int)v110; + v110[4] = 0; + Streamc = 0; + if ( v45 ) + { + v143 = (int)v145; + v144 = 0; + v145[0] = 0; + ReadFile(0, (unsigned int *)&v143); + v19 = std::map::operator[](&v107, (int)v86); + std::string::_M_assign((int)v19, (int)&v143); + std::string::_M_dispose((void **)&v143); + } + else + { + while ( -1431655765 * (((char *)v87 - (char *)v86) >> 3) > (unsigned int)Streamc ) + { + v145[0] = 0; + v143 = (int)v145; + v20 = (char *)v86[6 * (_DWORD)Streamc]; + v144 = 0; + ReadFile(v20, (unsigned int *)&v143); + v21 = std::map::operator[](&v107, (int)&v86[6 * (_DWORD)Streamc]); + std::string::_M_assign((int)v21, (int)&v143); + std::string::_M_dispose((void **)&v143); + Streamc = (FILE *)((char *)Streamc + 1); + } + } + if ( v96 ) + { + GetNextArg((int)String, (int *)&v95, (int)v104); + v52 = strtoull(String[0], 0, 10); + std::string::_M_dispose((void **)String); + v131 = 0; + v132 = 0; + v133 = 0; + for ( i = 0; (int)i < v52; i = (std::ostream::sentry *)((char *)i + 1) ) + { + v141 = 0; + v140 = (char *)v142; + LOBYTE(v142[0]) = 0; + memset(String, 0, 12); + GetNextArg((int)v135, (int *)&v95, (int)v104); + std::string::operator=((unsigned __int8 **)&v140, (int)v135); + std::string::_M_dispose(v135); + GetNextArg((int)v136, (int *)&v95, (int)v104); + v50 = strtoull(v136[0], 0, 10); + std::string::_M_dispose((void **)v136); + for ( Streamd = 0; (int)Streamd < v50; Streamd = (FILE *)((char *)Streamd + 1) ) + { + v144 = 0; + v143 = (int)v145; + v145[0] = 0; + GetNextArg((int)&v137, (int *)&v95, (int)v104); + std::string::operator=((unsigned __int8 **)&v143, (int)&v137); + std::string::_M_dispose((void **)&v137); + std::vector::push_back((int)String, (int)&v143); + v69 = v132; + if ( v69 == std::find<__gnu_cxx::__normal_iterator>,std::string>( + v131, + v132, + (int)&v143) ) + std::vector::push_back((int)&v131, (int)&v143); + std::string::_M_dispose((void **)&v143); + } + Streame = (FILE *)std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::lower_bound( + &v109, + (int)&v140); + if ( Streame == (FILE *)v110 || (unsigned __int8)std::operator<((int)&v140, (int)&Streame->_file) ) + { + Block = operator new(0x34u); + std::string::basic_string((char *)Block + 16, (int)&v140); + Block[10] = 0; + Block[11] = 0; + Block[12] = 0; + Streame = (FILE *)std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_get_insert_hint_unique_pos( + &v109, + Streame, + (int)(Block + 4)); + if ( v22 ) + { + Streame = (FILE *)std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_M_insert_node( + &v109, + (int)Streame, + v22, + Block); + } + else + { + std::vector::~vector((void ***)Block + 10, 0); + std::string::_M_dispose((void **)Block + 4); + operator delete(Block); + } + } + std::vector::operator=((int)&Streame[1]._base, (int *)String); + std::vector::~vector((void ***)String, v23); + std::string::_M_dispose((void **)&v140); + } + std::string::basic_string((void **)&v143, "ALL"); + v24 = std::map>::operator[](&v109, &v143); + std::vector::operator=((int)v24, &v131); + std::string::_M_dispose((void **)&v143); + std::vector::~vector((void ***)&v131, v25); + } + v111[1] = 0; + v111[0] = &v112; + v113[0] = &v114; + v112 = 0; + v113[1] = 0; + v114 = 0; + v116 = 0; + v117 = 0; + v118 = &v116; + v119 = &v116; + v120 = 0; + if ( v43 ) + { + v70 = v93; + for ( Streamg = (FILE *)v92; Streamg != (FILE *)v70; Streamg = (FILE *)((char *)Streamg + 24) ) + { + if ( *Streamg->_ptr == 46 && Streamg->_ptr[1] == 47 ) + { + std::string::substr(&v143, Streamg, 2u, 0xFFFFFFFF); + std::string::operator=((unsigned __int8 **)Streamg, (int)&v143); + std::string::_M_dispose((void **)&v143); + } + } + v122[0] = 0; + v122[1] = 0; + v123 = v122; + v124 = v122; + v125 = 0; + std::string::basic_string((void **)&v143, "l_"); + std::string::basic_string((void **)&v140, "f_"); + std::string::basic_string((void **)&v137, "$gdwx"); + std::string::basic_string((void **)v136, "boxofchocolate"); + std::string::basic_string(v135, (char *)&byte_5402D0); + std::string::basic_string((void **)String, "p_"); + std::string::basic_string((void **)&v131, "d_"); + std::string::basic_string(v130, "e_"); + std::string::basic_string(v129, "gg"); + std::string::basic_string(v128, (char *)off_5403C3); + std::string::basic_string(v127, (char *)&off_5403C3[2]); + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_Rb_tree( + v126, + (int)&v109); + v68 = (int)WXML::Compiler::CompileLazy( + &v107, + (int *)v111, + &v115, + &v101, + &v121, + v126, + (int *)&v92, + &v105, + v53, + (int)v103, + v60, + 10, + (int *)v127, + (int *)v128, + (int *)v129, + (int *)v130, + &v131, + (int *)String, + (int)v135, + (int)v136, + (int)&v137, + (int *)&v140); + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::~_Rb_tree((int)v126); + std::string::_M_dispose(v127); + std::string::_M_dispose(v128); + std::string::_M_dispose(v129); + std::string::_M_dispose(v130); + std::string::_M_dispose((void **)&v131); + std::string::_M_dispose((void **)String); + std::string::_M_dispose(v135); + std::string::_M_dispose((void **)v136); + std::string::_M_dispose((void **)&v137); + std::string::_M_dispose((void **)&v140); + std::string::_M_dispose((void **)&v143); + std::string::basic_string((void **)&v140, "__COMMON__"); + v61 = v117; + Streamh = &v116; + while ( v61 ) + { + v27 = (unsigned __int8)std::operator<((int)v61 + 16, (int)&v140) == 0; + v28 = Streamh; + v29 = (std::ostream::sentry *)*((_DWORD *)v61 + 3); + if ( v27 ) + { + v29 = (std::ostream::sentry *)*((_DWORD *)v61 + 2); + if ( v27 ) + v28 = (int *)v61; + } + v61 = v29; + Streamh = v28; + } + if ( Streamh != &v116 ) + { + v27 = (unsigned __int8)std::operator<((int)&v140, (int)(Streamh + 4)) == 0; + v30 = &v116; + if ( v27 ) + v30 = Streamh; + Streamh = v30; + } + std::string::_M_dispose((void **)&v140); + if ( Streamh == &v116 ) + { + WXML::Compiler::WXMLHelperCode[abi:cxx11]((void **)&v140); + std::string::basic_string( + (void **)&v137, + "var __wxAppData=__wxAppData||{};var __wxAppCode__=__wxAppCode__||{};var global=global||{};var __WXML_GLOBAL__=" + "__WXML_GLOBAL__||{entrys:{},defines:{},modules:{},ops:[],wxs_nf_init:undefined,total_ops:0};var Component=Comp" + "onent||function(){};var definePlugin=definePlugin||function(){};var requirePlugin=requirePlugin||function(){};" + "var Behavior=Behavior||function(){};var __vd_version_info__=__vd_version_info__||{};var __GWX_GLOBAL__=__GWX_G" + "LOBAL__||{};var __globalThis=(typeof __vd_version_info__!=='undefined'&&typeof __vd_version_info__.globalThis!" + "=='undefined')?__vd_version_info__.globalThis:(typeof window!=='undefined'?window:globalThis);"); + std::operator+(&v143, &v137, (unsigned int *)&v140); + std::string::basic_string((void **)v136, "__COMMON__"); + v33 = (unsigned __int8 **)std::map::operator[](&v115, v136); + std::string::operator=(v33, (int)&v143); + std::string::_M_dispose((void **)v136); + std::string::_M_dispose((void **)&v143); + std::string::_M_dispose((void **)&v137); + } + else + { + std::string::basic_string((void **)&v140, "__COMMON__"); + Streamm = (FILE *)std::map::operator[](&v115, &v140); + WXML::Compiler::WXMLHelperCode[abi:cxx11]((void **)v136); + std::string::basic_string( + v135, + "var __wxAppData=__wxAppData||{};var __wxAppCode__=__wxAppCode__||{};var global=global||{};var __WXML_GLOBAL__=" + "__WXML_GLOBAL__||{entrys:{},defines:{},modules:{},ops:[],wxs_nf_init:undefined,total_ops:0};var Component=Comp" + "onent||function(){};var definePlugin=definePlugin||function(){};var requirePlugin=requirePlugin||function(){};" + "var Behavior=Behavior||function(){};var __vd_version_info__=__vd_version_info__||{};var __GWX_GLOBAL__=__GWX_G" + "LOBAL__||{};var __globalThis=(typeof __vd_version_info__!=='undefined'&&typeof __vd_version_info__.globalThis!" + "=='undefined')?__vd_version_info__.globalThis:(typeof window!=='undefined'?window:globalThis);"); + std::operator+(&v137, v135, (unsigned int *)v136); + v31 = std::string::append(&v137, (int)Streamm); + std::string::basic_string(&v143, v31); + std::string::basic_string((void **)String, "__COMMON__"); + v32 = (unsigned __int8 **)std::map::operator[](&v115, String); + std::string::operator=(v32, (int)&v143); + std::string::_M_dispose((void **)String); + std::string::_M_dispose((void **)&v143); + std::string::_M_dispose((void **)&v137); + std::string::_M_dispose(v135); + std::string::_M_dispose((void **)v136); + } + std::string::_M_dispose((void **)&v140); + std::basic_stringstream,std::allocator>::basic_stringstream((int)&v143); + std::operator<<>((std::ostream::sentry *)v145, ";var __WXML_DEP__=__WXML_DEP__||{};"); + for ( j = v123; ; j = (int *)std::_Rb_tree_increment((int)Streami) ) + { + Streami = (FILE *)j; + if ( j == v122 ) + break; + if ( j[11] != j[10] ) + { + v62 = std::operator<<>((std::ostream::sentry *)v145, "__WXML_DEP__[\""); + WXML::Rewrite::ToStringCode((int)&v140, &Streami->_file); + v35 = std::operator<<(v62, (int *)&v140); + std::operator<<>(v35, "\"]=["); + std::string::_M_dispose((void **)&v140); + flag = (int *)Streami[1]._flag; + for ( k = (int *)Streami[1]._base; flag != k; k += 6 ) + { + v57 = std::operator<<>((std::ostream::sentry *)v145, "\""); + WXML::Rewrite::ToStringCode((int)&v140, k); + v36 = std::operator<<(v57, (int *)&v140); + std::operator<<>(v36, "\","); + std::string::_M_dispose((void **)&v140); + } + std::operator<<>((std::ostream::sentry *)v145, "];"); + } + } + std::stringbuf::str((int)&v140, (int)v146); + std::string::basic_string((void **)&v137, "__COMMON__"); + v37 = std::map::operator[](&v115, &v137); + std::string::append(v37, (int)&v140); + std::string::_M_dispose((void **)&v137); + std::string::_M_dispose((void **)&v140); + if ( v68 ) + { + Streamn = (FILE *)v111[0]; + v38 = ___acrt_iob_func(2u); + fprintf(v38, "Error %d: %s\n", v68, (const char *)Streamn); + } + else + { + Streamj = ___acrt_iob_func(1u); + if ( FileNamea && *FileNamea ) + Streamj = fopen(FileNamea, "w"); + DictToJsonString((int)v136, (int)&v115); + DictToJsonString((int)&v137, (int)&v101); + std::string::basic_string((void **)&v140, " {\"generateFunctionContent\":%s,\"generateFunctionName\":%s} "); + fprintf(Streamj, v140, v136[0], v137); + fclose(Streamj); + std::string::_M_dispose((void **)&v140); + std::string::_M_dispose((void **)&v137); + std::string::_M_dispose((void **)v136); + } + std::basic_stringstream,std::allocator>::~basic_stringstream((int)&v143); + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::~_Rb_tree((int)&v121); + } + else + { + std::string::basic_string((void **)&v143, "l_"); + std::string::basic_string((void **)&v140, "f_"); + std::string::basic_string((void **)&v137, "$gdwx"); + std::string::basic_string((void **)v136, "boxofchocolate"); + std::string::basic_string(v135, (char *)&byte_5402D0); + std::string::basic_string((void **)String, "p_"); + std::string::basic_string((void **)&v131, "d_"); + std::string::basic_string(v130, "e_"); + std::string::basic_string(v129, "gg"); + std::string::basic_string(v128, (char *)off_5403C3); + std::string::basic_string(v127, (char *)&off_5403C3[2]); + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::_Rb_tree( + v126, + (int)&v109); + v68 = (int)WXML::Compiler::Compile( + v3, + &v107, + (int *)v111, + (unsigned __int8 **)v113, + v126, + &v105, + v53, + (int *)v103, + v60, + 10, + (int *)v127, + (int *)v128, + (int *)v129, + (int *)v130, + &v131, + (int *)String, + (int)v135, + (int)v136, + (int)&v137, + (int *)&v140); + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::~_Rb_tree((int)v126); + std::string::_M_dispose(v127); + std::string::_M_dispose(v128); + std::string::_M_dispose(v129); + std::string::_M_dispose(v130); + std::string::_M_dispose((void **)&v131); + std::string::_M_dispose((void **)String); + std::string::_M_dispose(v135); + std::string::_M_dispose((void **)v136); + std::string::_M_dispose((void **)&v137); + std::string::_M_dispose((void **)&v140); + std::string::_M_dispose((void **)&v143); + if ( v68 ) + { + Streaml = (FILE *)v111[0]; + v26 = ___acrt_iob_func(2u); + fprintf(v26, "%s\n", (const char *)Streaml); + } + else + { + Streamf = ___acrt_iob_func(1u); + if ( FileNamea && *FileNamea ) + Streamf = fopen(FileNamea, "w"); + fprintf(Streamf, "%s\n", (const char *)v113[0]); + fclose(Streamf); + } + } + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v115); + std::string::_M_dispose(v113); + std::string::_M_dispose(v111); + std::_Rb_tree>,std::_Select1st>>,std::less,std::allocator>>>::~_Rb_tree((int)&v109); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v107); + } +LABEL_153: + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v105); + std::string::_M_dispose(v104); + std::string::_M_dispose(v103); + std::_Rb_tree,std::_Select1st>,std::less,std::allocator>>::~_Rb_tree((int)&v101); + std::vector::~vector(&v92, v39); + std::vector::~vector((void ***)&v89, v40); + std::string::_M_dispose((void **)&v98); + std::string::_M_dispose((void **)&v95); + std::vector::~vector(&v86, v41); + return v68; +} +// 534D34: variable 'v18' is possibly undefined +// 535379: variable 'v22' is possibly undefined +// 5353F7: variable 'v23' is possibly undefined +// 535470: variable 'v25' is possibly undefined +// 535726: variable 'v3' is possibly undefined +// 5366AE: variable 'v39' is possibly undefined +// 5366B9: variable 'v40' is possibly undefined +// 5366DA: variable 'v41' is possibly undefined +// 534330: using guessed type char var_D0[4]; +// 534330: using guessed type _DWORD var_1E0[6]; +// 534330: using guessed type char var_CC[196]; + +//----- (005366FD) -------------------------------------------------------- +int _GLOBAL__sub_I__Z5UsageiPPKc() +{ + std::ios_base::Init::Init(); + return atexit(__tcf_1); +} + +//----- (0053671C) -------------------------------------------------------- +int _GLOBAL__sub_I__ZN4WXML8Compiler9GetFuncIdERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEERSB_() +{ + std::ios_base::Init::Init(); + atexit(__tcf_2); + std::string::basic_string((void **)&night::nsv_, (char *)off_551C90); + atexit(__tcf_3); + std::string::basic_string((void **)&night::nst_, (char *)off_551C94); + atexit(__tcf_4); + std::string::basic_string((void **)&night::NS_TYPE_SKIP, "skip"); + atexit(__tcf_5); + std::string::basic_string((void **)&night::NS_TYPE_BOOL, "bool"); + atexit(__tcf_6); + std::string::basic_string((void **)&night::NS_TYPE_VAR, (char *)off_551CA2); + atexit(__tcf_7); + std::string::basic_string((void **)&night::NS_TYPE_STR, (char *)off_551CA6); + atexit(__tcf_8); + std::string::basic_string((void **)&night::NS_TYPE_NUM, (char *)off_551CAA); + atexit(__tcf_9); + std::string::basic_string((void **)&night::NS_TYPE_B_TYPE, "builtin_type"); + atexit(__tcf_10); + std::string::basic_string((void **)&night::NS_TYPE_KW, "kw"); + atexit(__tcf_11); + std::string::basic_string((void **)&night::NS_TYPE_PUNC, "punc"); + atexit(__tcf_12); + std::string::basic_string((void **)&night::NS_TYPE_OP, "op"); + atexit(__tcf_13); + std::string::basic_string((void **)&night::NS_TYPE_OP_SELF, "op_self"); + atexit(__tcf_14); + std::string::basic_string((void **)&night::NS_TYPE_BINARY, "binary"); + atexit(__tcf_15); + std::string::basic_string((void **)&night::NS_TYPE_ASSIGN, "assign"); + atexit(__tcf_16); + std::string::basic_string((void **)&night::NS_TYPE_TERNARY, "ternary"); + atexit(__tcf_17); + std::string::basic_string((void **)&night::NS_TYPE_K_V, (char *)off_551CE4); + atexit(__tcf_18); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_DOT, "obj_dot"); + atexit(__tcf_19); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_PROPERTY, "obj_property"); + atexit(__tcf_20); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_SELF_OP, "obj_self_op"); + atexit(__tcf_21); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_BLOCK, "obj_block"); + atexit(__tcf_22); + std::string::basic_string((void **)&night::NS_TYPE_ARRAY, "array"); + atexit(__tcf_23); + std::string::basic_string((void **)&night::NS_TYPE_BRACKET, "bracket"); + atexit(__tcf_24); + std::string::basic_string((void **)&night::NS_TYPE_IF, "if"); + atexit(__tcf_25); + std::string::basic_string((void **)&night::NS_TYPE_FOR, (char *)off_551D24); + atexit(__tcf_26); + std::string::basic_string((void **)&night::NS_TYPE_WHILE, "while"); + atexit(__tcf_27); + std::string::basic_string((void **)&night::NS_TYPE_DO_WHILE, "do_while"); + atexit(__tcf_28); + std::string::basic_string((void **)&night::NS_TYPE_SWITCH, "switch"); + atexit(__tcf_29); + std::string::basic_string((void **)&night::NS_TYPE_PROG, "prog"); + atexit(__tcf_30); + std::string::basic_string((void **)&night::NS_TYPE_PROG_NO_SEM, "prog_no_sem"); + atexit(__tcf_31); + std::string::basic_string((void **)&night::NS_TYPE_PROG_NO_SEM_REQUIRE, "prog_no_sem_require"); + atexit(__tcf_32); + std::string::basic_string((void **)&night::NS_TYPE_FUNC, "function"); + atexit(__tcf_33); + std::string::basic_string((void **)&night::NS_TYPE_CALL, "call"); + atexit(__tcf_34); + std::string::basic_string((void **)&night::NS_BUILTIN_OP, "+-*/%=&^|<>~!?"); + atexit(__tcf_35); + std::string::basic_string((void **)&night::NS_BUILTIN_OP_SELF, "~!"); + atexit(__tcf_36); + std::string::basic_string( + (void **)&night::NS_BUILTIN_ALL_OP, + " = ? + - * / % ++ -- + - ~ ! << >> >>> & ^ | < > <= >= == != === !== *= /= %= += -= <<= >>= >>>= &= ^= |= && || "); + atexit(__tcf_37); + std::string::basic_string((void **)&night::NS_BUILTIN_PUNC, ".,;(){}[]:"); + atexit(__tcf_38); + std::string::basic_string((void **)&night::NS_BUILTIN_SPACE, " \t\r\n"); + atexit(__tcf_39); + std::string::basic_string( + (void **)&night::NS_BUILTIN_KW, + " delete void typeof null undefined NaN Infinity var if else true false require this function arguments return for wh" + "ile do break continue switch case default "); + atexit(__tcf_40); + std::string::basic_string((void **)&night::NS_BUILTIN_TYPE, " Number Math Date "); + return atexit(__tcf_41); +} + +//----- (00536BCC) -------------------------------------------------------- +int _GLOBAL__sub_I__ZN5night8NSStreamC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_j() +{ + std::string::basic_string(&night::nsv_, (char *)off_552FC0); + atexit(__tcf_1_0); + std::string::basic_string((void **)&night::nst_, (char *)off_552FC4); + atexit(__tcf_2_0); + std::string::basic_string((void **)&night::NS_TYPE_SKIP, "skip"); + atexit(__tcf_3_0); + std::string::basic_string((void **)&night::NS_TYPE_BOOL, "bool"); + atexit(__tcf_4_0); + std::string::basic_string((void **)&night::NS_TYPE_VAR, (char *)off_551FFE); + atexit(__tcf_5_0); + std::string::basic_string((void **)&night::NS_TYPE_STR, (char *)off_552086); + atexit(__tcf_6_0); + std::string::basic_string((void **)&night::NS_TYPE_NUM, (char *)off_551FEA); + atexit(__tcf_7_0); + std::string::basic_string((void **)&night::NS_TYPE_B_TYPE, "builtin_type"); + atexit(__tcf_8_0); + std::string::basic_string((void **)&night::NS_TYPE_KW, "kw"); + atexit(__tcf_9_0); + std::string::basic_string((void **)&night::NS_TYPE_PUNC, "punc"); + atexit(__tcf_10_0); + std::string::basic_string((void **)&night::NS_TYPE_OP, "op"); + atexit(__tcf_11_0); + std::string::basic_string((void **)&night::NS_TYPE_OP_SELF, "op_self"); + atexit(__tcf_12_0); + std::string::basic_string((void **)&night::NS_TYPE_BINARY, "binary"); + atexit(__tcf_13_0); + std::string::basic_string((void **)&night::NS_TYPE_ASSIGN, "assign"); + atexit(__tcf_14_0); + std::string::basic_string((void **)&night::NS_TYPE_TERNARY, "ternary"); + atexit(__tcf_15_0); + std::string::basic_string((void **)&night::NS_TYPE_K_V, (char *)off_5520BF); + atexit(__tcf_16_0); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_DOT, "obj_dot"); + atexit(__tcf_17_0); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_PROPERTY, "obj_property"); + atexit(__tcf_18_0); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_SELF_OP, "obj_self_op"); + atexit(__tcf_19_0); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_BLOCK, "obj_block"); + atexit(__tcf_20_0); + std::string::basic_string((void **)&night::NS_TYPE_ARRAY, "array"); + atexit(__tcf_21_0); + std::string::basic_string((void **)&night::NS_TYPE_BRACKET, "bracket"); + atexit(__tcf_22_0); + std::string::basic_string((void **)&night::NS_TYPE_IF, "if"); + atexit(__tcf_23_0); + std::string::basic_string((void **)&night::NS_TYPE_FOR, (char *)off_552210); + atexit(__tcf_24_0); + std::string::basic_string((void **)&night::NS_TYPE_WHILE, "while"); + atexit(__tcf_25_0); + std::string::basic_string((void **)&night::NS_TYPE_DO_WHILE, "do_while"); + atexit(__tcf_26_0); + std::string::basic_string((void **)&night::NS_TYPE_SWITCH, "switch"); + atexit(__tcf_27_0); + std::string::basic_string((void **)&night::NS_TYPE_PROG, "prog"); + atexit(__tcf_28_0); + std::string::basic_string((void **)&night::NS_TYPE_PROG_NO_SEM, "prog_no_sem"); + atexit(__tcf_29_0); + std::string::basic_string((void **)&night::NS_TYPE_PROG_NO_SEM_REQUIRE, "prog_no_sem_require"); + atexit(__tcf_30_0); + std::string::basic_string((void **)&night::NS_TYPE_FUNC, "function"); + atexit(__tcf_31_0); + std::string::basic_string((void **)&night::NS_TYPE_CALL, "call"); + atexit(__tcf_32_0); + std::string::basic_string((void **)night::NS_BUILTIN_OP, "+-*/%=&^|<>~!?"); + atexit(__tcf_33_0); + std::string::basic_string((void **)&night::NS_BUILTIN_OP_SELF, "~!"); + atexit(__tcf_34_0); + std::string::basic_string( + (void **)night::NS_BUILTIN_ALL_OP, + " = ? + - * / % ++ -- + - ~ ! << >> >>> & ^ | < > <= >= == != === !== *= /= %= += -= <<= >>= >>>= &= ^= |= && || "); + atexit(__tcf_35_0); + std::string::basic_string((void **)night::NS_BUILTIN_PUNC, ".,;(){}[]:"); + atexit(__tcf_36_0); + std::string::basic_string((void **)night::NS_BUILTIN_SPACE, " \t\r\n"); + atexit(__tcf_37_0); + std::string::basic_string( + (void **)night::NS_BUILTIN_KW, + " delete void typeof null undefined NaN Infinity var if else true false require this function arguments return for wh" + "ile do break continue switch case default "); + atexit(__tcf_38_0); + std::string::basic_string((void **)night::NS_BUILTIN_TYPE, " Number Math Date "); + atexit(__tcf_39_0); + std::string::basic_string((void **)&night::std_v_n, "new std::vector"); + atexit(__tcf_40_0); + std::string::basic_string((void **)&night::std_v_v_n, "new std::vector*>"); + return atexit(__tcf_41_0); +} +// 565A60: using guessed type int night::NS_BUILTIN_TYPE[6]; +// 565A78: using guessed type int night::NS_BUILTIN_KW[6]; +// 565A90: using guessed type int night::NS_BUILTIN_SPACE[6]; +// 565AA8: using guessed type int night::NS_BUILTIN_PUNC[6]; +// 565AC0: using guessed type int night::NS_BUILTIN_ALL_OP[6]; +// 565AF0: using guessed type int night::NS_BUILTIN_OP[6]; +// 565DF0: using guessed type void *night::nsv_; + +//----- (005370A4) -------------------------------------------------------- +size_t __thiscall std::string::basic_string(void **this, char *Str) +{ + char *v3; // edi + size_t result; // eax + _BYTE *v5; // edx + size_t v6[7]; // [esp+1Ch] [ebp-1Ch] BYREF + + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v6[0] = strlen(Str); + v3 = &Str[v6[0]]; + if ( v6[0] > 0xF ) + { + *this = std::string::_M_create(v6, 0); + this[2] = (void *)v6[0]; + } + std::string::_S_copy_chars(*this, (unsigned __int8 *)Str, (size_t)v3); + result = v6[0]; + v5 = *this; + this[1] = (void *)v6[0]; + v5[result] = 0; + return result; +} +// 5370A4: using guessed type size_t var_1C[7]; + +//----- (00537121) -------------------------------------------------------- +int _GLOBAL__sub_I__ZN5night9sourcemap21gen_sourcemap_contentERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt3mapIS6_jSt4lessIS6_ESaISt4pairIS7_jEEES9_IjS6_SA_IjESaISC_IKjS6_EEERSt6vectorINS_12ns_sourcemapESaISM_EEiRS6_PS6_() +{ + std::string::basic_string((void **)&night::nsv_, (char *)off_55325C); + atexit(__tcf_0); + std::string::basic_string((void **)&night::nst_, (char *)off_553260); + atexit(__tcf_1_1); + std::string::basic_string((void **)&night::NS_TYPE_SKIP, "skip"); + atexit(__tcf_2_1); + std::string::basic_string((void **)&night::NS_TYPE_BOOL, "bool"); + atexit(__tcf_3_1); + std::string::basic_string((void **)&night::NS_TYPE_VAR, (char *)off_55326E); + atexit(__tcf_4_1); + std::string::basic_string((void **)&night::NS_TYPE_STR, (char *)off_553272); + atexit(__tcf_5_1); + std::string::basic_string((void **)&night::NS_TYPE_NUM, (char *)off_553276); + atexit(__tcf_6_1); + std::string::basic_string((void **)&night::NS_TYPE_B_TYPE, "builtin_type"); + atexit(__tcf_7_1); + std::string::basic_string((void **)&night::NS_TYPE_KW, "kw"); + atexit(__tcf_8_1); + std::string::basic_string((void **)&night::NS_TYPE_PUNC, "punc"); + atexit(__tcf_9_1); + std::string::basic_string((void **)&night::NS_TYPE_OP, "op"); + atexit(__tcf_10_1); + std::string::basic_string((void **)&night::NS_TYPE_OP_SELF, "op_self"); + atexit(__tcf_11_1); + std::string::basic_string((void **)&night::NS_TYPE_BINARY, "binary"); + atexit(__tcf_12_1); + std::string::basic_string((void **)&night::NS_TYPE_ASSIGN, "assign"); + atexit(__tcf_13_1); + std::string::basic_string((void **)&night::NS_TYPE_TERNARY, "ternary"); + atexit(__tcf_14_1); + std::string::basic_string((void **)&night::NS_TYPE_K_V, (char *)off_5532B0); + atexit(__tcf_15_1); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_DOT, "obj_dot"); + atexit(__tcf_16_1); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_PROPERTY, "obj_property"); + atexit(__tcf_17_1); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_SELF_OP, "obj_self_op"); + atexit(__tcf_18_1); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_BLOCK, "obj_block"); + atexit(__tcf_19_1); + std::string::basic_string((void **)&night::NS_TYPE_ARRAY, "array"); + atexit(__tcf_20_1); + std::string::basic_string((void **)&night::NS_TYPE_BRACKET, "bracket"); + atexit(__tcf_21_1); + std::string::basic_string((void **)&night::NS_TYPE_IF, "if"); + atexit(__tcf_22_1); + std::string::basic_string((void **)&night::NS_TYPE_FOR, (char *)off_5532F0); + atexit(__tcf_23_1); + std::string::basic_string((void **)&night::NS_TYPE_WHILE, "while"); + atexit(__tcf_24_1); + std::string::basic_string((void **)&night::NS_TYPE_DO_WHILE, "do_while"); + atexit(__tcf_25_1); + std::string::basic_string((void **)&night::NS_TYPE_SWITCH, "switch"); + atexit(__tcf_26_1); + std::string::basic_string((void **)&night::NS_TYPE_PROG, "prog"); + atexit(__tcf_27_1); + std::string::basic_string((void **)&night::NS_TYPE_PROG_NO_SEM, "prog_no_sem"); + atexit(__tcf_28_1); + std::string::basic_string((void **)&night::NS_TYPE_PROG_NO_SEM_REQUIRE, "prog_no_sem_require"); + atexit(__tcf_29_1); + std::string::basic_string((void **)&night::NS_TYPE_FUNC, "function"); + atexit(__tcf_30_1); + std::string::basic_string((void **)&night::NS_TYPE_CALL, "call"); + atexit(__tcf_31_1); + std::string::basic_string((void **)&night::NS_BUILTIN_OP, "+-*/%=&^|<>~!?"); + atexit(__tcf_32_1); + std::string::basic_string((void **)&night::NS_BUILTIN_OP_SELF, "~!"); + atexit(__tcf_33_1); + std::string::basic_string( + (void **)&night::NS_BUILTIN_ALL_OP, + " = ? + - * / % ++ -- + - ~ ! << >> >>> & ^ | < > <= >= == != === !== *= /= %= += -= <<= >>= >>>= &= ^= |= && || "); + atexit(__tcf_34_1); + std::string::basic_string((void **)&night::NS_BUILTIN_PUNC, ".,;(){}[]:"); + atexit(__tcf_35_1); + std::string::basic_string((void **)&night::NS_BUILTIN_SPACE, " \t\r\n"); + atexit(__tcf_36_1); + std::string::basic_string( + (void **)&night::NS_BUILTIN_KW, + " delete void typeof null undefined NaN Infinity var if else true false require this function arguments return for wh" + "ile do break continue switch case default "); + atexit(__tcf_37_1); + std::string::basic_string((void **)&night::NS_BUILTIN_TYPE, " Number Math Date "); + return atexit(__tcf_38_1); +} + +//----- (005375BC) -------------------------------------------------------- +size_t __thiscall std::string::basic_string(void **this, char *Str) +{ + char *v3; // edi + size_t result; // eax + _BYTE *v5; // edx + size_t v6[7]; // [esp+1Ch] [ebp-1Ch] BYREF + + *this = this + 2; + if ( !Str ) + std::__throw_logic_error((std::logic_error *)"basic_string::_M_construct null not valid"); + v6[0] = strlen(Str); + v3 = &Str[v6[0]]; + if ( v6[0] > 0xF ) + { + *this = std::string::_M_create(v6, 0); + this[2] = (void *)v6[0]; + } + std::string::_S_copy_chars(*this, (unsigned __int8 *)Str, (size_t)v3); + result = v6[0]; + v5 = *this; + this[1] = (void *)v6[0]; + v5[result] = 0; + return result; +} +// 5375BC: using guessed type size_t var_1C[7]; + +//----- (00537639) -------------------------------------------------------- +int _GLOBAL__sub_I__ZN5night3str12path_combineERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_RS6_() +{ + std::string::basic_string((void **)&night::nsv_, (char *)off_55350E); + atexit(__tcf_1_2); + std::string::basic_string((void **)&night::nst_, (char *)off_553512); + atexit(__tcf_2_2); + std::string::basic_string((void **)&night::NS_TYPE_SKIP, "skip"); + atexit(__tcf_3_2); + std::string::basic_string((void **)&night::NS_TYPE_BOOL, "bool"); + atexit(__tcf_4_2); + std::string::basic_string((void **)&night::NS_TYPE_VAR, (char *)off_553520); + atexit(__tcf_5_2); + std::string::basic_string((void **)&night::NS_TYPE_STR, (char *)off_553524); + atexit(__tcf_6_2); + std::string::basic_string((void **)&night::NS_TYPE_NUM, (char *)off_553528); + atexit(__tcf_7_2); + std::string::basic_string((void **)&night::NS_TYPE_B_TYPE, "builtin_type"); + atexit(__tcf_8_2); + std::string::basic_string((void **)&night::NS_TYPE_KW, "kw"); + atexit(__tcf_9_2); + std::string::basic_string((void **)&night::NS_TYPE_PUNC, "punc"); + atexit(__tcf_10_2); + std::string::basic_string((void **)&night::NS_TYPE_OP, "op"); + atexit(__tcf_11_2); + std::string::basic_string((void **)&night::NS_TYPE_OP_SELF, "op_self"); + atexit(__tcf_12_2); + std::string::basic_string((void **)&night::NS_TYPE_BINARY, "binary"); + atexit(__tcf_13_2); + std::string::basic_string((void **)&night::NS_TYPE_ASSIGN, "assign"); + atexit(__tcf_14_2); + std::string::basic_string((void **)&night::NS_TYPE_TERNARY, "ternary"); + atexit(__tcf_15_2); + std::string::basic_string((void **)&night::NS_TYPE_K_V, (char *)off_553562); + atexit(__tcf_16_2); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_DOT, "obj_dot"); + atexit(__tcf_17_2); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_PROPERTY, "obj_property"); + atexit(__tcf_18_2); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_SELF_OP, "obj_self_op"); + atexit(__tcf_19_2); + std::string::basic_string((void **)&night::NS_TYPE_OBJ_BLOCK, "obj_block"); + atexit(__tcf_20_2); + std::string::basic_string((void **)&night::NS_TYPE_ARRAY, "array"); + atexit(__tcf_21_2); + std::string::basic_string((void **)&night::NS_TYPE_BRACKET, "bracket"); + atexit(__tcf_22_2); + std::string::basic_string((void **)&night::NS_TYPE_IF, "if"); + atexit(__tcf_23_2); + std::string::basic_string((void **)&night::NS_TYPE_FOR, (char *)off_5535A2); + atexit(__tcf_24_2); + std::string::basic_string((void **)&night::NS_TYPE_WHILE, "while"); + atexit(__tcf_25_2); + std::string::basic_string((void **)&night::NS_TYPE_DO_WHILE, "do_while"); + atexit(__tcf_26_2); + std::string::basic_string((void **)&night::NS_TYPE_SWITCH, "switch"); + atexit(__tcf_27_2); + std::string::basic_string((void **)&night::NS_TYPE_PROG, "prog"); + atexit(__tcf_28_2); + std::string::basic_string((void **)&night::NS_TYPE_PROG_NO_SEM, "prog_no_sem"); + atexit(__tcf_29_2); + std::string::basic_string((void **)&night::NS_TYPE_PROG_NO_SEM_REQUIRE, "prog_no_sem_require"); + atexit(__tcf_30_2); + std::string::basic_string((void **)&night::NS_TYPE_FUNC, "function"); + atexit(__tcf_31_2); + std::string::basic_string((void **)&night::NS_TYPE_CALL, "call"); + atexit(__tcf_32_2); + std::string::basic_string((void **)&night::NS_BUILTIN_OP, "+-*/%=&^|<>~!?"); + atexit(__tcf_33_2); + std::string::basic_string((void **)&night::NS_BUILTIN_OP_SELF, "~!"); + atexit(__tcf_34_2); + std::string::basic_string( + (void **)&night::NS_BUILTIN_ALL_OP, + " = ? + - * / % ++ -- + - ~ ! << >> >>> & ^ | < > <= >= == != === !== *= /= %= += -= <<= >>= >>>= &= ^= |= && || "); + atexit(__tcf_35_2); + std::string::basic_string((void **)&night::NS_BUILTIN_PUNC, ".,;(){}[]:"); + atexit(__tcf_36_2); + std::string::basic_string((void **)&night::NS_BUILTIN_SPACE, " \t\r\n"); + atexit(__tcf_37_2); + std::string::basic_string( + (void **)&night::NS_BUILTIN_KW, + " delete void typeof null undefined NaN Infinity var if else true false require this function arguments return for wh" + "ile do break continue switch case default "); + atexit(__tcf_38_2); + std::string::basic_string((void **)&night::NS_BUILTIN_TYPE, " Number Math Date "); + return atexit(__tcf_39_1); +} + +//----- (00537AD4) -------------------------------------------------------- +int _GLOBAL__sub_I__ZN4WXML6DOMLib7WXMLDom12componentCntE() +{ + std::ios_base::Init::Init(); + return atexit(__tcf_1_3); +} + +//----- (00537AF4) -------------------------------------------------------- +int _GLOBAL__sub_I__ZN4WXML6DOMLib7Machine5ResetEv() +{ + std::ios_base::Init::Init(); + return atexit(__tcf_0_0); +} + +//----- (00537B14) -------------------------------------------------------- +int _GLOBAL__sub_I__ZN4WXML7EXPRLib7OPShort5CONSTE() +{ + std::ios_base::Init::Init(); + return atexit(__tcf_1_4); +} + +//----- (00537B34) -------------------------------------------------------- +int _GLOBAL__sub_I__ZNK4WXML7EXPRLib5Token12GetTokenNameEv() +{ + std::ios_base::Init::Init(); + return atexit(__tcf_0_2); +} + +//----- (00537B54) -------------------------------------------------------- +int _GLOBAL__sub_I__ZN4WXML7EXPRLib12TransitTable13GetExprNTTypeEv() +{ + std::ios_base::Init::Init(); + return atexit(__tcf_1_5); +} + +//----- (00537B74) -------------------------------------------------------- +int _GLOBAL__sub_I__ZN4WXML16StringTemplating4DealEPKcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERSt6vectorINS0_5TokenESaISB_EERb() +{ + std::ios_base::Init::Init(); + return atexit(__tcf_0_3); +} + +//----- (00537BA0) -------------------------------------------------------- +int _GLOBAL__sub_I__ZN9__gnu_cxx9__freeresEv() +{ + _DWORD *v0; // eax + + if ( _CRT_MT ) + __gthr_win32_mutex_init_function(`anonymous namespace'::emergency_pool); + dword_53E500 = 18944; + v0 = malloc(0x4A00u); + Block = v0; + if ( v0 ) + { + dword_53E4F8 = (int)v0; + *v0 = 18944; + v0[1] = 0; + } + else + { + dword_53E500 = 0; + dword_53E4F8 = 0; + } + return atexit(__tcf_0_4); +} +// 53E1E4: using guessed type int _CRT_MT; +// 53E4F0: using guessed type _DWORD `anonymous namespace'::emergency_pool[2]; +// 53E4F8: using guessed type int dword_53E4F8; +// 53E500: using guessed type int dword_53E500; + +//----- (00537C20) -------------------------------------------------------- +void __noreturn __cxxabiv1::throw_recursive_init_exception(void) +{ + _DWORD *exception; // ebx + + exception = __cxa_allocate_exception(4u); + __gnu_cxx::recursive_init_error::recursive_init_error(exception); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'__gnu_cxx::recursive_init_error, + (void (__cdecl *)(void *))__gnu_cxx::recursive_init_error::~recursive_init_error); +} +// 55B6DC: using guessed type int *`typeinfo for'__gnu_cxx::recursive_init_error; + +//----- (00537C60) -------------------------------------------------------- +void _GLOBAL__sub_I__ZNSt12ctype_bynameIcEC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj() +{ + if ( !`guard variable for'std::moneypunct::id ) + `guard variable for'std::moneypunct::id = 1; + if ( !`guard variable for'std::moneypunct::id ) + `guard variable for'std::moneypunct::id = 1; + if ( !`guard variable for'std::money_get>::id ) + `guard variable for'std::money_get>::id = 1; + if ( !`guard variable for'std::money_put>::id ) + `guard variable for'std::money_put>::id = 1; + if ( !`guard variable for'std::numpunct::id ) + `guard variable for'std::numpunct::id = 1; + if ( !`guard variable for'std::time_get>::id ) + `guard variable for'std::time_get>::id = 1; + if ( !`guard variable for'std::messages::id ) + `guard variable for'std::messages::id = 1; + if ( !`guard variable for'std::collate::id ) + `guard variable for'std::collate::id = 1; +} +// 53E2A0: using guessed type char `guard variable for'std::moneypunct::id; +// 53E2A8: using guessed type char `guard variable for'std::moneypunct::id; +// 53E2C0: using guessed type char `guard variable for'std::collate::id; +// 53E2D0: using guessed type char `guard variable for'std::messages::id; +// 53E2E0: using guessed type char `guard variable for'std::numpunct::id; +// 53E2F0: using guessed type char `guard variable for'std::time_get>::id; +// 53E300: using guessed type char `guard variable for'std::money_get>::id; +// 53E310: using guessed type char `guard variable for'std::money_put>::id; + +//----- (00537CF0) -------------------------------------------------------- +void _GLOBAL__sub_I__ZNSt12ctype_bynameIwEC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj() +{ + if ( !`guard variable for'std::moneypunct::id ) + `guard variable for'std::moneypunct::id = 1; + if ( !`guard variable for'std::moneypunct::id ) + `guard variable for'std::moneypunct::id = 1; + if ( !`guard variable for'std::money_get>::id ) + `guard variable for'std::money_get>::id = 1; + if ( !`guard variable for'std::money_put>::id ) + `guard variable for'std::money_put>::id = 1; + if ( !`guard variable for'std::numpunct::id ) + `guard variable for'std::numpunct::id = 1; + if ( !`guard variable for'std::time_get>::id ) + `guard variable for'std::time_get>::id = 1; + if ( !`guard variable for'std::messages::id ) + `guard variable for'std::messages::id = 1; + if ( !`guard variable for'std::collate::id ) + `guard variable for'std::collate::id = 1; +} +// 53E2B0: using guessed type char `guard variable for'std::moneypunct::id; +// 53E2B8: using guessed type char `guard variable for'std::moneypunct::id; +// 53E2C8: using guessed type char `guard variable for'std::collate::id; +// 53E2D8: using guessed type char `guard variable for'std::messages::id; +// 53E2E8: using guessed type char `guard variable for'std::numpunct::id; +// 53E2F8: using guessed type char `guard variable for'std::time_get>::id; +// 53E308: using guessed type char `guard variable for'std::money_get>::id; +// 53E318: using guessed type char `guard variable for'std::money_put>::id; + +//----- (00537D80) -------------------------------------------------------- +void __noreturn std::__throw_bad_exception(void) +{ + _DWORD *exception; // eax + + exception = __cxa_allocate_exception(4u); + *exception = &off_56008C; + __cxa_throw(exception, (struct type_info *)&`typeinfo for'std::bad_exception, std::bad_exception::~bad_exception); +} +// 55BF08: using guessed type int *`typeinfo for'std::bad_exception; +// 56008C: using guessed type void (__cdecl *off_56008C)(std::bad_exception *__hidden this); + +//----- (00537DB0) -------------------------------------------------------- +void __noreturn std::__throw_bad_alloc(void) +{ + _DWORD *exception; // eax + + exception = __cxa_allocate_exception(4u); + *exception = &off_560E0C; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::bad_alloc, + (void (__cdecl *)(void *))std::bad_alloc::~bad_alloc); +} +// 55C490: using guessed type int *`typeinfo for'std::bad_alloc; +// 560E0C: using guessed type void (__cdecl *off_560E0C)(std::bad_alloc *__hidden this); + +//----- (00537DE0) -------------------------------------------------------- +void __noreturn std::__throw_bad_cast(void) +{ + _DWORD *exception; // eax + + exception = __cxa_allocate_exception(4u); + *exception = &off_560CF0; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::bad_cast, + (void (__cdecl *)(void *))std::bad_cast::~bad_cast); +} +// 55C3CC: using guessed type int *`typeinfo for'std::bad_cast; +// 560CF0: using guessed type void (__cdecl *off_560CF0)(std::bad_cast *__hidden this); + +//----- (00537E10) -------------------------------------------------------- +void __noreturn std::__throw_bad_typeid(void) +{ + _DWORD *exception; // eax + + exception = __cxa_allocate_exception(4u); + *exception = &off_55FE8C; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::bad_typeid, + (void (__cdecl *)(void *))std::bad_typeid::~bad_typeid); +} +// 55BDD8: using guessed type int `typeinfo for'std::bad_typeid; +// 55FE8C: using guessed type void (__cdecl *off_55FE8C)(std::bad_typeid *__hidden this); + +//----- (00537E40) -------------------------------------------------------- +void __cdecl __noreturn std::__throw_logic_error(std::logic_error *a1) +{ + const char *v1; // [esp+4h] [ebp-54h] + _DWORD *exception; // [esp+18h] [ebp-40h] + + exception = __cxa_allocate_exception(8u); + std::logic_error::logic_error(exception, a1, v1); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::logic_error, + (void (__cdecl *)(void *))std::logic_error::~logic_error); +} +// 537E8B: variable 'v1' is possibly undefined +// 55BE94: using guessed type int *`typeinfo for'std::logic_error; + +//----- (00537ED8) -------------------------------------------------------- +void __cdecl __noreturn std::__throw_domain_error(std::domain_error *a1) +{ + const char *v1; // [esp+4h] [ebp-54h] + _DWORD *exception; // [esp+18h] [ebp-40h] + + exception = __cxa_allocate_exception(8u); + std::domain_error::domain_error(exception, a1, v1); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::domain_error, + (void (__cdecl *)(void *))std::domain_error::~domain_error); +} +// 537F23: variable 'v1' is possibly undefined +// 55BECC: using guessed type int *`typeinfo for'std::domain_error; + +//----- (00537F70) -------------------------------------------------------- +void __cdecl __noreturn std::__throw_invalid_argument(std::invalid_argument *a1) +{ + const char *v1; // [esp+4h] [ebp-54h] + _DWORD *exception; // [esp+18h] [ebp-40h] + + exception = __cxa_allocate_exception(8u); + std::invalid_argument::invalid_argument(exception, a1, v1); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::invalid_argument, + (void (__cdecl *)(void *))std::invalid_argument::~invalid_argument); +} +// 537FBB: variable 'v1' is possibly undefined +// 55C0FC: using guessed type int *`typeinfo for'std::invalid_argument; + +//----- (00538008) -------------------------------------------------------- +void __cdecl __noreturn std::__throw_length_error(std::length_error *a1) +{ + const char *v1; // [esp+4h] [ebp-54h] + _DWORD *exception; // [esp+18h] [ebp-40h] + + exception = __cxa_allocate_exception(8u); + std::length_error::length_error(exception, a1, v1); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::length_error, + (void (__cdecl *)(void *))std::length_error::~length_error); +} +// 538053: variable 'v1' is possibly undefined +// 55BED8: using guessed type int *`typeinfo for'std::length_error; + +//----- (005380A0) -------------------------------------------------------- +void __cdecl __noreturn std::__throw_out_of_range(std::out_of_range *a1) +{ + const char *v1; // [esp+4h] [ebp-54h] + _DWORD *exception; // [esp+18h] [ebp-40h] + + exception = __cxa_allocate_exception(8u); + std::out_of_range::out_of_range(exception, a1, v1); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::out_of_range, + (void (__cdecl *)(void *))std::out_of_range::~out_of_range); +} +// 5380EB: variable 'v1' is possibly undefined +// 55BEE4: using guessed type int *`typeinfo for'std::out_of_range; + +//----- (00538138) -------------------------------------------------------- +void __cdecl __noreturn std::__throw_runtime_error(std::runtime_error *a1) +{ + const char *v1; // [esp+4h] [ebp-54h] + _DWORD *exception; // [esp+18h] [ebp-40h] + + exception = __cxa_allocate_exception(8u); + std::runtime_error::runtime_error(exception, a1, v1); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::runtime_error, + (void (__cdecl *)(void *))std::runtime_error::~runtime_error); +} +// 538183: variable 'v1' is possibly undefined +// 55BF7C: using guessed type int *`typeinfo for'std::runtime_error; + +//----- (005381D0) -------------------------------------------------------- +void __cdecl __noreturn std::__throw_range_error(std::range_error *a1) +{ + const char *v1; // [esp+4h] [ebp-54h] + _DWORD *exception; // [esp+18h] [ebp-40h] + + exception = __cxa_allocate_exception(8u); + std::range_error::range_error(exception, a1, v1); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::range_error, + (void (__cdecl *)(void *))std::range_error::~range_error); +} +// 53821B: variable 'v1' is possibly undefined +// 55BEA0: using guessed type int *`typeinfo for'std::range_error; + +//----- (00538268) -------------------------------------------------------- +void __cdecl __noreturn std::__throw_overflow_error(std::overflow_error *a1) +{ + const char *v1; // [esp+4h] [ebp-54h] + _DWORD *exception; // [esp+18h] [ebp-40h] + + exception = __cxa_allocate_exception(8u); + std::overflow_error::overflow_error(exception, a1, v1); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::overflow_error, + (void (__cdecl *)(void *))std::overflow_error::~overflow_error); +} +// 5382B3: variable 'v1' is possibly undefined +// 55C008: using guessed type int *`typeinfo for'std::overflow_error; + +//----- (00538300) -------------------------------------------------------- +void __cdecl __noreturn std::__throw_underflow_error(std::underflow_error *a1) +{ + const char *v1; // [esp+4h] [ebp-54h] + _DWORD *exception; // [esp+18h] [ebp-40h] + + exception = __cxa_allocate_exception(8u); + std::underflow_error::underflow_error(exception, a1, v1); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::underflow_error, + (void (__cdecl *)(void *))std::underflow_error::~underflow_error); +} +// 53834B: variable 'v1' is possibly undefined +// 55C0CC: using guessed type int *`typeinfo for'std::underflow_error; + +//----- (005383A0) -------------------------------------------------------- +void _GLOBAL__sub_I__ZNSt12ctype_bynameIcEC2ERKSsj() +{ + if ( !`guard variable for'std::moneypunct::id ) + `guard variable for'std::moneypunct::id = 1; + if ( !`guard variable for'std::moneypunct::id ) + `guard variable for'std::moneypunct::id = 1; + if ( !`guard variable for'std::money_get>::id ) + `guard variable for'std::money_get>::id = 1; + if ( !`guard variable for'std::money_put>::id ) + `guard variable for'std::money_put>::id = 1; + if ( !`guard variable for'std::numpunct::id ) + `guard variable for'std::numpunct::id = 1; + if ( !`guard variable for'std::num_get>::id ) + `guard variable for'std::num_get>::id = 1; + if ( !`guard variable for'std::num_put>::id ) + `guard variable for'std::num_put>::id = 1; + if ( !`guard variable for'std::__timepunct::id ) + `guard variable for'std::__timepunct::id = 1; + if ( !`guard variable for'std::time_put>::id ) + `guard variable for'std::time_put>::id = 1; + if ( !`guard variable for'std::time_get>::id ) + `guard variable for'std::time_get>::id = 1; + if ( !`guard variable for'std::messages::id ) + `guard variable for'std::messages::id = 1; + if ( !`guard variable for'std::collate::id ) + `guard variable for'std::collate::id = 1; +} +// 53E270: using guessed type char `guard variable for'std::moneypunct::id; +// 53E278: using guessed type char `guard variable for'std::moneypunct::id; +// 53E290: using guessed type char `guard variable for'std::__timepunct::id; +// 53E320: using guessed type char `guard variable for'std::collate::id; +// 53E330: using guessed type char `guard variable for'std::num_get>::id; +// 53E340: using guessed type char `guard variable for'std::num_put>::id; +// 53E350: using guessed type char `guard variable for'std::messages::id; +// 53E360: using guessed type char `guard variable for'std::numpunct::id; +// 53E370: using guessed type char `guard variable for'std::time_get>::id; +// 53E380: using guessed type char `guard variable for'std::time_put>::id; +// 53E390: using guessed type char `guard variable for'std::money_get>::id; +// 53E3A0: using guessed type char `guard variable for'std::money_put>::id; + +//----- (00538470) -------------------------------------------------------- +void _GLOBAL__sub_I__ZNSt12ctype_bynameIwEC2ERKSsj() +{ + if ( !`guard variable for'std::moneypunct::id ) + `guard variable for'std::moneypunct::id = 1; + if ( !`guard variable for'std::moneypunct::id ) + `guard variable for'std::moneypunct::id = 1; + if ( !`guard variable for'std::money_get>::id ) + `guard variable for'std::money_get>::id = 1; + if ( !`guard variable for'std::money_put>::id ) + `guard variable for'std::money_put>::id = 1; + if ( !`guard variable for'std::numpunct::id ) + `guard variable for'std::numpunct::id = 1; + if ( !`guard variable for'std::num_get>::id ) + `guard variable for'std::num_get>::id = 1; + if ( !`guard variable for'std::num_put>::id ) + `guard variable for'std::num_put>::id = 1; + if ( !`guard variable for'std::__timepunct::id ) + `guard variable for'std::__timepunct::id = 1; + if ( !`guard variable for'std::time_put>::id ) + `guard variable for'std::time_put>::id = 1; + if ( !`guard variable for'std::time_get>::id ) + `guard variable for'std::time_get>::id = 1; + if ( !`guard variable for'std::messages::id ) + `guard variable for'std::messages::id = 1; + if ( !`guard variable for'std::collate::id ) + `guard variable for'std::collate::id = 1; +} +// 53E280: using guessed type char `guard variable for'std::moneypunct::id; +// 53E288: using guessed type char `guard variable for'std::moneypunct::id; +// 53E298: using guessed type char `guard variable for'std::__timepunct::id; +// 53E328: using guessed type char `guard variable for'std::collate::id; +// 53E338: using guessed type char `guard variable for'std::num_get>::id; +// 53E348: using guessed type char `guard variable for'std::num_put>::id; +// 53E358: using guessed type char `guard variable for'std::messages::id; +// 53E368: using guessed type char `guard variable for'std::numpunct::id; +// 53E378: using guessed type char `guard variable for'std::time_get>::id; +// 53E388: using guessed type char `guard variable for'std::time_put>::id; +// 53E398: using guessed type char `guard variable for'std::money_get>::id; +// 53E3A8: using guessed type char `guard variable for'std::money_put>::id; + +//----- (00538540) -------------------------------------------------------- +void __cdecl __noreturn d_type_cold( + int a1, + int a2, + int a3, + int a4, + int a5, + int a6, + int a7, + int a8, + int a9, + int a10, + int a11) +{ + BUG(); +} + +//----- (005385D4) -------------------------------------------------------- +void __noreturn __cxa_bad_cast(void) +{ + _DWORD *exception; // eax + + exception = __cxa_allocate_exception(4u); + *exception = &off_560CF0; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::bad_cast, + (void (__cdecl *)(void *))std::bad_cast::~bad_cast); +} +// 55C3CC: using guessed type int *`typeinfo for'std::bad_cast; +// 560CF0: using guessed type void (__cdecl *off_560CF0)(std::bad_cast *__hidden this); + +//----- (00538604) -------------------------------------------------------- +void __noreturn __cxa_bad_typeid(void) +{ + _DWORD *exception; // eax + + exception = __cxa_allocate_exception(4u); + *exception = &off_55FE8C; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::bad_typeid, + (void (__cdecl *)(void *))std::bad_typeid::~bad_typeid); +} +// 55BDD8: using guessed type int `typeinfo for'std::bad_typeid; +// 55FE8C: using guessed type void (__cdecl *off_55FE8C)(std::bad_typeid *__hidden this); + +//----- (00538634) -------------------------------------------------------- +void __noreturn __cxa_throw_bad_array_new_length(void) +{ + _DWORD *exception; // eax + + exception = __cxa_allocate_exception(4u); + *exception = &off_560848; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::bad_array_new_length, + (void (__cdecl *)(void *))std::bad_array_new_length::~bad_array_new_length); +} +// 55C1E0: using guessed type int *`typeinfo for'std::bad_array_new_length; +// 560848: using guessed type void (__cdecl *off_560848)(std::bad_array_new_length *__hidden this); + +//----- (00538664) -------------------------------------------------------- +void __cdecl __noreturn std::__throw_ios_failure(char *a1) +{ + char *v1; // eax + _DWORD *exception; // [esp+18h] [ebp-40h] + + exception = __cxa_allocate_exception(0x18u); + if ( !(_BYTE)`guard variable for'`anonymous namespace'::__io_category_instance(void)::__ec ) + { + if ( __cxa_guard_acquire(&`guard variable for'`anonymous namespace'::__io_category_instance(void)::__ec) ) + { + __cxa_guard_release(&`guard variable for'`anonymous namespace'::__io_category_instance(void)::__ec); + atexit((_PVFV)__tcf_0_7); + } + } + std::system_error::system_error(exception, 1, (int)&`anonymous namespace'::__io_category_instance(void)::__ec, a1); + *exception = &off_560078; + v1 = (char *)std::runtime_error::what((int)exception); + std::__construct_ios_failure(exception + 4, v1); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::__ios_failure, + (void (__cdecl *)(void *))std::__ios_failure::~__ios_failure); +} +// 53FCD0: using guessed type void (__cdecl **`anonymous namespace'::__io_category_instance(void)::__ec)(_anonymous_namespace_::io_error_category *__hidden this); +// 55BEFC: using guessed type int *`typeinfo for'std::__ios_failure; +// 560078: using guessed type void (__cdecl *off_560078)(std::__ios_failure *__hidden this); + +//----- (00538784) -------------------------------------------------------- +void __cdecl __noreturn std::__throw_ios_failure(std::__ios_failure *a1, std::runtime_error *a2) +{ + int v2; // [esp+8h] [ebp-50h] + _DWORD *exception; // [esp+18h] [ebp-40h] + + exception = __cxa_allocate_exception(0x18u); + std::__ios_failure::__ios_failure(exception, a1, (int)a2, v2); + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::__ios_failure, + (void (__cdecl *)(void *))std::__ios_failure::~__ios_failure); +} +// 5387D6: variable 'v2' is possibly undefined +// 55BEFC: using guessed type int *`typeinfo for'std::__ios_failure; + +//----- (00538824) -------------------------------------------------------- +void __cdecl __noreturn std::__throw_system_error(int a1) +{ + _DWORD *exception; // [esp+18h] [ebp-60h] + void *Block[2]; // [esp+58h] [ebp-20h] BYREF + char v3; // [esp+60h] [ebp-18h] BYREF + + exception = __cxa_allocate_exception(0x10u); + `anonymous namespace'::system_error_category::message[abi:cxx11]( + Block, + (int)&`anonymous namespace'::generic_category_instance, + a1); + std::runtime_error::runtime_error(exception, (int)Block); + if ( Block[0] != &v3 ) + operator delete(Block[0]); + *exception = &off_560064; + exception[2] = a1; + exception[3] = &`anonymous namespace'::generic_category_instance; + __cxa_throw( + exception, + (struct type_info *)&`typeinfo for'std::system_error, + (void (__cdecl *)(void *))std::system_error::~system_error); +} +// 53F0C8: using guessed type void (__cdecl **`anonymous namespace'::generic_category_instance)(_anonymous_namespace_::generic_error_category *__hidden this); +// 55BEF0: using guessed type int *`typeinfo for'std::system_error; +// 560064: using guessed type void (__cdecl *off_560064)(std::system_error *__hidden this); + +//----- (00538920) -------------------------------------------------------- +int _GLOBAL__sub_I__ZSt20__throw_system_errori() +{ + atexit(__tcf_0_8); + return atexit(__tcf_1_6); +} + +// nfuncs=4679 queued=4486 decompiled=4486 lumina nreq=0 worse=0 better=0 +#error "There were 9 decompilation failure(s) on 4486 function(s)"