"""DIM4 Q1/Q2/Q3. The per-op handler table at 0x180214db8.. has 3-qword rows [?, url_builder, body_serializer]. Decompile the body serializers for the three ops that POST/PUT a body (ISStart 0x180165a90, ISOfferTrade 0x180164e50, ISWatchTrade 0x180164970), the two URL builders Ghidra left undefined (GetAuctionCount 0x180163580 '/counts', RelistAll 0x1801641c0 '/relist'), the no-body stub 0x18011f940, and the search-filter enum stringifiers. CONTROL 1: 0x18011f940 must decompile to a trivial/no-op emitter -- if the "slot2 is the body serializer" reading is right, the GET-only ops all share it and it must write nothing. If it writes a body, the slot reading is wrong. CONTROL 2: the auctionInfo record deser 0x18013e410 must reproduce the 12 atoms already documented HIGH in ENDPOINT_MAP; that validates the same reading method for the response structs whose atom sets are still MED. """ import traceback try: FN = [ ("GetAuctionCount_url /counts", 0x180163580), ("RelistAll_url /relist", 0x1801641c0), ("ISStart_BODY", 0x180165a90), ("ISOfferTrade_BODY", 0x180164e50), ("ISWatchTrade_BODY", 0x180164970), ("ISStart_url(generic)", 0x180122420), ("nobody_stub(CONTROL1)", 0x18011f940), ("row A slot2 0x180162530", 0x180162530), ("searchtype->str", 0x180166340), ("pos->str", 0x1801668a0), ("zone->str", 0x180166550), ("pos2->str", 0x180166c60), ("form->str", 0x180166620), ("lev->str", 0x1801667d0), ("cat->str", 0x180166300), ] for nm, a in FN: print("\n########## %s @ %#x ##########" % (nm, a)) f = func(a) print("containing func = %s @ %#x" % (f.getName() if f else "NONE", int(f.getEntryPoint().getOffset()) if f else 0)) s = dec(a) print("len(src)=%d" % len(s)) print(s) print("\n\n########## CONTROL2 auctionInfo record deser 0x18013e410 ##########") s = dec(0x18013e410) print("len(src)=%d" % len(s)); print(s) print("\n########## shared IS-list body 0x18013e7f0 ##########") s = dec(0x18013e7f0) print("len(src)=%d" % len(s)); print(s) except Exception: traceback.print_exc()