aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfragosti <francesco.agosti93@gmail.com>2018-11-30 10:42:25 +0800
committerfragosti <francesco.agosti93@gmail.com>2018-11-30 10:42:25 +0800
commitf1354632a1a2915159f6d662f90b68fe8c3bab38 (patch)
tree4e57ab37fb4622520b5ca94f5a9f60ef91dbba8d
parent7fe27e903b9c66b6b0ac18be5ae1ae565f206cf4 (diff)
downloaddexon-0x-contracts-f1354632a1a2915159f6d662f90b68fe8c3bab38.tar.gz
dexon-0x-contracts-f1354632a1a2915159f6d662f90b68fe8c3bab38.tar.zst
dexon-0x-contracts-f1354632a1a2915159f6d662f90b68fe8c3bab38.zip
feat: implement available token fetching
-rw-r--r--packages/website/package.json2
-rw-r--r--packages/website/ts/components/ui/multi_select.tsx13
-rw-r--r--packages/website/ts/pages/instant/config_generator.tsx107
3 files changed, 116 insertions, 6 deletions
diff --git a/packages/website/package.json b/packages/website/package.json
index 7d5c81858..c02e1eee2 100644
--- a/packages/website/package.json
+++ b/packages/website/package.json
@@ -20,6 +20,8 @@
"author": "Fabio Berger",
"license": "Apache-2.0",
"dependencies": {
+ "@0x/asset-buyer": "^3.0.2",
+ "@0x/contract-addresses": "^2.0.0",
"@0x/contract-wrappers": "^4.1.1",
"@0x/json-schemas": "^2.1.2",
"@0x/order-utils": "^3.0.4",
diff --git a/packages/website/ts/components/ui/multi_select.tsx b/packages/website/ts/components/ui/multi_select.tsx
index 329e76bd5..bf80443af 100644
--- a/packages/website/ts/components/ui/multi_select.tsx
+++ b/packages/website/ts/components/ui/multi_select.tsx
@@ -10,7 +10,7 @@ import { Text } from './text';
export interface MultiSelectItemConfig {
value: string;
- displayText: string;
+ displayText: React.ReactNode;
onClick?: () => void;
}
@@ -27,11 +27,16 @@ export class MultiSelect extends React.Component<MultiSelectProps> {
textColor: colors.darkGrey,
};
public render(): React.ReactNode {
- const { items, backgroundColor } = this.props;
+ const { items, backgroundColor, selectedValues } = this.props;
return (
<Container backgroundColor={backgroundColor} borderRadius="4px">
{_.map(items, item => (
- <MultiSelectItem key={item.value} displayText={item.displayText} onClick={item.onClick} />
+ <MultiSelectItem
+ key={item.value}
+ displayText={item.displayText}
+ onClick={item.onClick}
+ isSelected={_.includes(selectedValues, item.value)}
+ />
))}
</Container>
);
@@ -39,7 +44,7 @@ export class MultiSelect extends React.Component<MultiSelectProps> {
}
export interface MultiSelectItemProps {
- displayText: string;
+ displayText: React.ReactNode;
isSelected?: boolean;
onClick?: () => void;
}
diff --git a/packages/website/ts/pages/instant/config_generator.tsx b/packages/website/ts/pages/instant/config_generator.tsx
index 0dac0f9ec..cd215bc61 100644
--- a/packages/website/ts/pages/instant/config_generator.tsx
+++ b/packages/website/ts/pages/instant/config_generator.tsx
@@ -1,10 +1,19 @@
+import { StandardRelayerAPIOrderProvider } from '@0x/asset-buyer';
+import { getContractAddressesForNetworkOrThrow } from '@0x/contract-addresses';
+import { assetDataUtils } from '@0x/order-utils';
+import { ObjectMap } from '@0x/types';
import * as _ from 'lodash';
import * as React from 'react';
import { Container } from 'ts/components/ui/container';
+import { MultiSelect } from 'ts/components/ui/multi_select';
import { Select, SelectItemConfig } from 'ts/components/ui/select';
+import { Spinner } from 'ts/components/ui/spinner';
import { Text } from 'ts/components/ui/text';
import { colors } from 'ts/style/colors';
+import { WebsiteBackendTokenInfo } from 'ts/types';
+import { backendClient } from 'ts/utils/backend_client';
+import { constants } from 'ts/utils/constants';
import { ZeroExInstantBaseConfig } from '../../../../instant/src/types';
@@ -13,17 +22,41 @@ export interface ConfigGeneratorProps {
onConfigChange: (config: ZeroExInstantBaseConfig) => void;
}
+export interface ConfigGeneratorState {
+ isLoadingAvailableTokens: boolean;
+ // Address to token info
+ allKnownTokens: ObjectMap<WebsiteBackendTokenInfo>;
+ availableTokens?: WebsiteBackendTokenInfo[];
+}
+
const SRA_ENDPOINTS = ['https://api.radarrelay.com/0x/v2/', 'https://api.openrelay.xyz/v2/'];
export class ConfigGenerator extends React.Component<ConfigGeneratorProps> {
+ public state: ConfigGeneratorState = {
+ isLoadingAvailableTokens: true,
+ allKnownTokens: {},
+ };
+ public componentDidMount(): void {
+ this._setAllKnownTokens(this._setAvailableAssetsFromOrderProvider);
+ }
+ public componentDidUpdate(prevProps: ConfigGeneratorProps): void {
+ if (prevProps.value.orderSource !== this.props.value.orderSource) {
+ this._setAvailableAssetsFromOrderProvider();
+ }
+ }
public render(): React.ReactNode {
const { value } = this.props;
+ if (!_.isString(value.orderSource)) {
+ throw new Error('ConfigGenerator component only supports string values as an orderSource.');
+ }
return (
<Container>
<ConfigGeneratorSection title="Standard Relayer API Endpoint">
- <Select value={value.orderSource as string} items={this._generateItems()} />
+ <Select value={value.orderSource} items={this._generateItems()} />
+ </ConfigGeneratorSection>
+ <ConfigGeneratorSection title="What tokens can users buy?">
+ {this._renderTokenMultiSelectOrSpinner()}
</ConfigGeneratorSection>
- <ConfigGeneratorSection title="What tokens can users buy?">BLAH</ConfigGeneratorSection>
</Container>
);
}
@@ -40,6 +73,76 @@ export class ConfigGenerator extends React.Component<ConfigGeneratorProps> {
};
this.props.onConfigChange(newConfig);
};
+ private readonly _handleTokenClick = (assetData: string) => {
+ const { value } = this.props;
+ let newAvailableAssetDatas = [];
+ if (_.includes(value.availableAssetDatas, assetData)) {
+ // Add it
+ newAvailableAssetDatas = [...value.availableAssetDatas, assetData];
+ } else {
+ // Remove it
+ newAvailableAssetDatas = _.remove(value.availableAssetDatas, assetData);
+ }
+ const newConfig = {
+ ...this.props.value,
+ availableAssetDatas: newAvailableAssetDatas,
+ };
+ this.props.onConfigChange(newConfig);
+ };
+ private _setAllKnownTokens = async (callback: () => void): Promise<void> => {
+ const tokenInfos = await backendClient.getTokenInfosAsync();
+ const allKnownTokens = _.reduce(
+ tokenInfos,
+ (acc, tokenInfo) => {
+ acc[tokenInfo.address] = tokenInfo;
+ return acc;
+ },
+ {} as ObjectMap<WebsiteBackendTokenInfo>,
+ );
+ this.setState({ allKnownTokens }, callback);
+ };
+ private _setAvailableAssetsFromOrderProvider = async (): Promise<void> => {
+ const { value } = this.props;
+ if (!_.isUndefined(value.orderSource) && _.isString(value.orderSource)) {
+ this.setState({ isLoadingAvailableTokens: true });
+ const networkId = constants.NETWORK_ID_MAINNET;
+ const sraOrderProvider = new StandardRelayerAPIOrderProvider(value.orderSource, networkId);
+ const etherTokenAddress = getContractAddressesForNetworkOrThrow(networkId).etherToken;
+ const etherTokenAssetData = assetDataUtils.encodeERC20AssetData(etherTokenAddress);
+ const assetDatas = await sraOrderProvider.getAvailableMakerAssetDatasAsync(etherTokenAssetData);
+ const availableTokens = _.compact(
+ _.map(assetDatas, assetData => {
+ const address = assetDataUtils.decodeAssetDataOrThrow(assetData).tokenAddress;
+ return this.state.allKnownTokens[address];
+ }),
+ );
+ this.setState({ availableTokens, isLoadingAvailableTokens: false });
+ }
+ };
+ private _renderTokenMultiSelectOrSpinner = (): React.ReactNode => {
+ const { value } = this.props;
+ const { availableTokens, isLoadingAvailableTokens } = this.state;
+ if (isLoadingAvailableTokens) {
+ return (
+ <Container className="flex items-center">
+ <Spinner />
+ </Container>
+ );
+ }
+ const items = _.map(availableTokens, token => {
+ const assetData = assetDataUtils.encodeERC20AssetData(token.address);
+ return {
+ value: assetDataUtils.encodeERC20AssetData(token.address),
+ displayText: (
+ <Text>
+ <b>{token.symbol}</b> - {token.name}
+ </Text>
+ ),
+ onClick: this._handleTokenClick.bind(this, assetData),
+ };
+ });
+ return <MultiSelect items={items} selectedValues={value.availableAssetDatas || []} />;
+ };
}
export interface ConfigGeneratorSectionProps {
ss='button' href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/plain/games/afternoonstalker?h=mate-1.20&id=d18f62ceda8c4a4cfd7278fad0ca7b6a76a8d5a3'>plain d---------agame178logstatsplain d---------airrox178logstatsplain d---------alephone-data109logstatsplain d---------alephone217logstatsplain d---------alienarena-data146logstatsplain d---------alienarena217logstatsplain d---------alienblaster146logstatsplain d---------alienwave109logstatsplain d---------allacrost217logstatsplain d---------amphetamine178logstatsplain d---------amy146logstatsplain d---------an146logstatsplain d---------anagramarama178logstatsplain d---------angband178logstatsplain d---------annelid178logstatsplain d---------antipolix178logstatsplain d---------aop178logstatsplain d---------apoolGL178logstatsplain d---------aqbubble146logstatsplain d---------armagetron178logstatsplain d---------asc217logstatsplain d---------asciiquarium109logstatsplain d---------atitd221logstatsplain d---------atlantikdesigner146logstatsplain d---------atomix185logstatsplain d---------atr3d178logstatsplain d---------atris-sounds146logstatsplain d---------atris146logstatsplain d---------awele178logstatsplain d---------balazar178logstatsplain d---------balazarbrothers178logstatsplain d---------barrage178logstatsplain d---------bass185logstatsplain d---------bastet178logstatsplain d---------battalion178logstatsplain d---------battleball141logstatsplain d---------biloba178logstatsplain d---------biorythm178logstatsplain d---------bitefusion141logstatsplain d---------blackjack141logstatsplain d---------blinkensisters178logstatsplain d---------blobandconquer178logstatsplain d---------bloboats178logstatsplain d---------blobwars178logstatsplain d---------block178logstatsplain d---------blockade141logstatsplain d---------blokish141logstatsplain d---------bloodfrontier178logstatsplain d---------blue146logstatsplain d---------bogged141logstatsplain d---------bomb178logstatsplain d---------bomberclone178logstatsplain d---------bomberinstinct178logstatsplain d---------bombermaze178logstatsplain d---------bomns146logstatsplain d---------bos109logstatsplain d---------boswars109logstatsplain d---------braincurses146logstatsplain d---------briquolo178logstatsplain d---------bs109logstatsplain d---------bsdgames178logstatsplain d---------bsdtris178logstatsplain d---------bsp146logstatsplain d---------bubbros178logstatsplain d---------bugsquish178logstatsplain d---------bugsx141logstatsplain d---------burgerspace109logstatsplain d---------bygfoot178logstatsplain d---------bzflag178logstatsplain d---------cake180logstatsplain d---------cardpics146logstatsplain d---------cavezofphear141logstatsplain d---------ceferino146logstatsplain d---------cgoban141logstatsplain d---------cgoban2109logstatsplain d---------chanta178logstatsplain d---------childsplay178logstatsplain d---------childsplay_plugins178logstatsplain d---------chromium-bsu212logstatsplain d---------chromium212logstatsplain d---------circuslinux178logstatsplain d---------clanbomber178logstatsplain d---------cleanq3178logstatsplain d---------columns178logstatsplain d---------concentration178logstatsplain d---------connect4178logstatsplain d---------connectfive178logstatsplain d---------conquest224logstatsplain d---------construo146logstatsplain d---------corewars178logstatsplain d---------cosmo178logstatsplain d---------cowsay178logstatsplain d---------crack-attack146logstatsplain d---------crafty-open-large178logstatsplain d---------crafty-open-medium178logstatsplain d---------crafty178logstatsplain d---------crimson146logstatsplain d---------criticalmass141logstatsplain d---------crossfire-client141logstatsplain d---------crossfire-server178logstatsplain d---------cryptoslam109logstatsplain d---------csmash178logstatsplain d---------ctris109logstatsplain d---------cube178logstatsplain d---------cursive141logstatsplain d---------d2x180logstatsplain d---------daimonin-client178logstatsplain d---------daimonin178logstatsplain d---------dangen146logstatsplain d---------dangerdeep-data109logstatsplain d---------dangerdeep141logstatsplain d---------darkplaces141logstatsplain d---------deal109logstatsplain d---------defendguin141logstatsplain d---------demonquake180logstatsplain d---------deng178logstatsplain d---------diameter178logstatsplain d---------digger-vgl178logstatsplain d---------dmjava146logstatsplain d---------dodgindiamond2217logstatsplain d---------dontspace146logstatsplain d---------doom-data222logstatsplain d---------doom-freedoom109logstatsplain d---------doom-hacx109logstatsplain d---------doom-hr180logstatsplain d---------doom-hr2109logstatsplain d---------doom-wolfendoom146logstatsplain d---------doom178logstatsplain d---------doomlegacy178logstatsplain d---------dopewars146logstatsplain d---------drm178logstatsplain d---------dsnake178logstatsplain d---------duel178logstatsplain d---------duke3d-data222logstatsplain d---------dungeon178logstatsplain d---------dungeoncrawl178logstatsplain d---------easysok146logstatsplain d---------eboard217logstatsplain d---------editss178logstatsplain d---------eduke32178logstatsplain d---------egl178logstatsplain d---------egoboo217logstatsplain d---------eif146logstatsplain d---------eights141logstatsplain d---------einstein217logstatsplain d---------el-data146logstatsplain d---------el141logstatsplain d---------emacs-chess185logstatsplain d---------ember178logstatsplain d---------empire141logstatsplain d---------enigma217logstatsplain d---------ensemblist141logstatsplain d---------etuxracer178logstatsplain d---------euchre141logstatsplain d---------evilfinder178logstatsplain d---------excido178logstatsplain d---------exhaust-doc146logstatsplain d---------exhaust-ma180logstatsplain d---------exhaust180logstatsplain d---------exmars178logstatsplain d---------exult217logstatsplain d---------ezquake217logstatsplain d---------falconseye178logstatsplain d---------farblazer178logstatsplain d---------fargoal178logstatsplain d---------fgfs-base109logstatsplain d---------fgkicker185logstatsplain d---------fgsd141logstatsplain d---------fillets-ng146logstatsplain d---------filters146logstatsplain d---------fishsupper146logstatsplain d---------fkiss109logstatsplain d---------flightgear-aircraft109logstatsplain d---------flightgear-aircrafts109logstatsplain d---------flightgear-atlas185logstatsplain d---------flightgear-data109logstatsplain d---------flightgear-l410148logstatsplain d---------flightgear-mb339-pan109logstatsplain d---------flightgear185logstatsplain d---------flobopuyo146logstatsplain d---------flying141logstatsplain d---------fmars178logstatsplain d---------foobillard178logstatsplain d---------formido217logstatsplain d---------fotaq185logstatsplain d---------frabs212logstatsplain d---------freebsd-games178logstatsplain d---------freecell-solver146logstatsplain d---------freeciv-gtk36logstatsplain d---------freeciv-gtk236logstatsplain d---------freeciv-nox1136logstatsplain d---------freeciv178logstatsplain d---------freedoko146logstatsplain d---------freedroid146logstatsplain d---------freedroidrpg146logstatsplain d---------freesci146logstatsplain d---------freesweep178logstatsplain d---------fretsonfire-data146logstatsplain d---------fretsonfire178logstatsplain d---------frikqcc141logstatsplain d---------frotz146logstatsplain d---------frozenbubble217logstatsplain d---------fteqw141logstatsplain d---------ftjava178logstatsplain d---------fuhquake178logstatsplain d---------fwp217logstatsplain d---------fxsudoku141logstatsplain d---------galaxis109logstatsplain d---------galaxyhack178logstatsplain d---------galaxymage178logstatsplain d---------garith178logstatsplain d---------gbottler146logstatsplain d---------gcompris178logstatsplain d---------geki2146logstatsplain d---------geki3146logstatsplain d---------gemdropx178logstatsplain d---------ggo178logstatsplain d---------ggz-client-libs178logstatsplain d---------ggz-gtk-client146logstatsplain d---------ggz-gtk-games146logstatsplain d---------ggz-kde-client178logstatsplain d---------ggz-sdl-games178logstatsplain d---------ggz-txt-client178logstatsplain d---------gillo178logstatsplain d---------gish-demo178logstatsplain d---------gl-117178logstatsplain d---------glasteroids178logstatsplain d---------glaxium178logstatsplain d---------glbsp178logstatsplain d---------glchess185logstatsplain d---------glest-data146logstatsplain d---------glest178logstatsplain d---------glife146logstatsplain d---------glmaze178logstatsplain d---------glob2217logstatsplain d---------glpuzzle178logstatsplain d---------gltron178logstatsplain d---------gma178logstatsplain d---------gmastermind146logstatsplain d---------gmines146logstatsplain d---------gnarr178logstatsplain d---------gnmm178logstatsplain d---------gno3dtet178logstatsplain d---------gnome-games-extra-data146logstatsplain d---------gnome-games217logstatsplain d---------gnome-music-quiz178logstatsplain d---------gnomeattacks178logstatsplain d---------gnomebreakout178logstatsplain d---------gnomechess178logstatsplain d---------gnomekiss178logstatsplain d---------gnomememoryblocks178logstatsplain d---------gnomermind146logstatsplain d---------gnomesudoku146logstatsplain d---------gnubg178logstatsplain d---------gnuchess175logstatsplain d---------gnudoku146logstatsplain d---------gnugo141logstatsplain d---------gnurobots217logstatsplain d---------gnushogi221logstatsplain d---------gnustep-ladder146logstatsplain d---------golddig178logstatsplain d---------gomoku.app146logstatsplain d---------goonies178logstatsplain d---------gpuzzle146logstatsplain d---------gracer178logstatsplain d---------grande178logstatsplain d---------greed180logstatsplain d---------gretools146logstatsplain d---------grhino178logstatsplain d---------gridlock146logstatsplain d---------groundhog178logstatsplain d---------gru146logstatsplain d---------grubik146logstatsplain d---------grubinvaders217logstatsplain d---------gshisen146logstatsplain d---------gtetrinet178logstatsplain d---------gtkabale178logstatsplain d---------gtkatlantic178logstatsplain d---------gtkballs178logstatsplain d---------gtklife109logstatsplain d---------gtkpool178logstatsplain d---------gtkradiant178logstatsplain d---------gtktetcolor146logstatsplain d---------gturing178logstatsplain d---------gtypist146logstatsplain d---------gweled217logstatsplain d---------halflifeserver146logstatsplain d---------hangman178logstatsplain d---------hattrickorganizer178logstatsplain d---------heretic178logstatsplain d---------heroes178logstatsplain d---------hex-a-hop178logstatsplain d---------hex178logstatsplain d---------hexxagon146logstatsplain d---------highmoon146logstatsplain d---------hlserver-admin146logstatsplain d---------hlserver-cs146logstatsplain d---------hlserver-dod146logstatsplain d---------hlserver-esf146logstatsplain d---------hlserver-existence146logstatsplain d---------hlserver-fa146logstatsplain d---------hlserver-flf146logstatsplain d---------hlserver-glbwar146logstatsplain d---------hlserver-heroes146logstatsplain d---------hlserver-ns146logstatsplain d---------hlserver-opera146logstatsplain d---------hlserver-opfor146logstatsplain d---------hlserver-psychostats178logstatsplain d---------hlserver-si146logstatsplain d---------hlserver-ts146logstatsplain d---------hlserver-vs146logstatsplain d---------hlserver-wasteland146logstatsplain d---------hlserver-wizwars146logstatsplain d---------hlstats146logstatsplain d---------hlstatsx146logstatsplain d---------hohlin178logstatsplain d---------holotz-castle178logstatsplain d---------icbm3d178logstatsplain d---------icebreaker178logstatsplain d---------ifm178logstatsplain d---------imaze178logstatsplain d---------inform178logstatsplain d---------interlogic109logstatsplain d---------ioquake3217logstatsplain d---------iourbanterror217logstatsplain d---------ishido146logstatsplain d---------ivan217logstatsplain d---------jchessboard109logstatsplain d---------jetpack178logstatsplain d---------jfduke3d146logstatsplain d---------jfk217logstatsplain d---------jigsaw146logstatsplain d---------jigzo178logstatsplain d---------joequake217logstatsplain d---------jools178logstatsplain d---------jtans178logstatsplain d---------jumpnbump178logstatsplain d---------jzip178logstatsplain d---------kaid178logstatsplain d---------kamikaze146logstatsplain d---------kanatest146logstatsplain d---------kbilliards146logstatsplain d---------kcheckers141logstatsplain d---------kdegames3146logstatsplain d---------kdegames4146logstatsplain d---------kfreerings178logstatsplain d---------kgeography146logstatsplain d---------kiki178logstatsplain d---------klondike146logstatsplain d---------kmquake2178logstatsplain d---------knights-kde4178logstatsplain d---------knights178logstatsplain d---------kobodeluxe178logstatsplain d---------koth141logstatsplain d---------kpicframer178logstatsplain d---------kpictorial146logstatsplain d---------kpuzzle178logstatsplain d---------krosswordplayer178logstatsplain d---------kslide178logstatsplain d---------ksudoku146logstatsplain d---------ktritoc178logstatsplain d---------kwappen146logstatsplain d---------ladder178logstatsplain d---------lapispuzzle146logstatsplain d---------lbreakout178logstatsplain d---------lbreakout2185logstatsplain d---------ldmud258logstatsplain d---------lexter185logstatsplain d---------lgeneral-data178logstatsplain d---------lgeneral178logstatsplain d---------lianliankan178logstatsplain d---------libdungeonmaker178logstatsplain d---------libfov178logstatsplain d---------libggz178logstatsplain d---------libmaitretarot146logstatsplain d---------libmt_client146logstatsplain d---------libshhcards178logstatsplain d---------lincity-ng178logstatsplain d---------lincity146logstatsplain d---------linux-alienarena178logstatsplain d---------linux-americasarmy146logstatsplain d---------linux-doom3-demo178logstatsplain d---------linux-doom3178logstatsplain d---------linux-enemyterritory-etpro146logstatsplain d---------linux-enemyterritory-etpub146logstatsplain d---------linux-enemyterritory-fortress146logstatsplain d---------linux-enemyterritory-jaymod-21146logstatsplain d---------linux-enemyterritory-jaymod146logstatsplain d---------linux-enemyterritory-omni-bot-0660146logstatsplain d---------linux-enemyterritory-omni-bot146logstatsplain d---------linux-enemyterritory-shrub109logstatsplain d---------linux-enemyterritory-tce146logstatsplain d---------linux-enemyterritory178logstatsplain d---------linux-goodway141logstatsplain d---------linux-nwnclient178logstatsplain d---------linux-nwserver178logstatsplain d---------linux-quake3-demo178logstatsplain d---------linux-quake3146logstatsplain d---------linux-quake4-demo178logstatsplain d---------linux-quake4178logstatsplain d---------linux-savage217logstatsplain d---------linux-spheresofchaos-demo146logstatsplain d---------linux-ssamtse217logstatsplain d---------linux-steam185logstatsplain d---------linux-ut146logstatsplain d---------linux-ut2003-demo141logstatsplain d---------linux-ut2004-demo141logstatsplain d---------linux-virtual-jay-peak178logstatsplain d---------linux-warsow178logstatsplain d---------linux-x-plane-net-installer148logstatsplain d---------linux-x-plane144logstatsplain d---------liquidwar178logstatsplain d---------lm-solve146logstatsplain d---------lmarbles146logstatsplain d---------lmpc141logstatsplain d---------ltris146logstatsplain d---------lucidlife178logstatsplain d---------luola146logstatsplain d---------macopix146logstatsplain d---------madbomber146logstatsplain d---------maelstrom178logstatsplain d---------magiccube4d178logstatsplain d---------mahjong109logstatsplain d---------maitretarot109logstatsplain d---------mangband178logstatsplain d---------marathon-evil185logstatsplain d---------marathon2-data146logstatsplain d---------marsnomercy141logstatsplain d---------meqcc178logstatsplain d---------merlin178logstatsplain d---------mindfocus178logstatsplain d---------mindguard178logstatsplain d---------mirrormagic146logstatsplain d---------miscom178logstatsplain d---------monkeybubble178logstatsplain d---------monopd146logstatsplain d---------monster-masher178logstatsplain d---------monsterz178logstatsplain d---------moon-buggy141logstatsplain d---------moonlander178logstatsplain d---------moria178logstatsplain d---------mt_dolphin_ia109logstatsplain d---------mt_gtk_client146logstatsplain d---------mudmagic146logstatsplain d---------mvdsv180logstatsplain d---------mythserver178logstatsplain d---------nInvaders146logstatsplain d---------nadar178logstatsplain d---------nazghul146logstatsplain d---------nehquake178logstatsplain d---------nethack32178logstatsplain d---------nethack33-gnome36logstatsplain d---------nethack33-nox1136logstatsplain d---------nethack33178logstatsplain d---------nethack34-gnome36logstatsplain d---------nethack34-nox1136logstatsplain d---------nethack34-qt36logstatsplain d---------nethack34178logstatsplain d---------netpanzer-data146logstatsplain d---------netpanzer178logstatsplain d---------netrek-BRMH-bin148logstatsplain d---------netrek-COW3-bin148logstatsplain d---------netris178logstatsplain d---------netspades146logstatsplain d---------nettoe146logstatsplain d---------neverball178logstatsplain d---------newvox178logstatsplain d---------nextgo178logstatsplain d---------nexuiz109logstatsplain d---------nibbles146logstatsplain d---------nighthawk217logstatsplain d---------nil178logstatsplain d---------ninix-aya178logstatsplain d---------njam178logstatsplain d---------noegnud-addons109logstatsplain d---------noegnud-data178logstatsplain d---------noegnud-littlehack178logstatsplain d---------noegnud-nethack-deet178logstatsplain d---------noegnud-nethack178logstatsplain d---------noegnud-slashem178logstatsplain d---------nonsense178logstatsplain d---------nuclearchess146logstatsplain d---------nwndata146logstatsplain d---------nwnusers148logstatsplain d---------oilwar146logstatsplain d---------omega178logstatsplain d---------oneko-sakura109logstatsplain d---------oneko146logstatsplain d---------oolite178logstatsplain d---------oonsoo141logstatsplain d---------openglad178logstatsplain d---------openmortal178logstatsplain d---------openttd178logstatsplain d---------orbital_eunuchs_sniper178logstatsplain d---------p5-Algorithm-Pair-Best146logstatsplain d---------p5-Algorithm-Pair-Swiss146logstatsplain d---------p5-Baseball-Sabermetrics146logstatsplain d---------p5-Games-Alak146logstatsplain d---------p5-Games-AlphaBeta146logstatsplain d---------p5-Games-Bingo-Bot146logstatsplain d---------p5-Games-Bingo-Print146logstatsplain d---------p5-Games-Bingo146logstatsplain d---------p5-Games-Dice146logstatsplain d---------p5-Games-Tournament-RoundRobin146logstatsplain d---------pachi185logstatsplain d---------palomino146logstatsplain d---------pathological146logstatsplain d---------pcgen141logstatsplain d---------pear-Games_Chess109logstatsplain d---------pengpong178logstatsplain d---------penguin-command146logstatsplain d---------pengupop109logstatsplain d---------pentix178logstatsplain d---------pets178logstatsplain d---------phalanx141logstatsplain d---------phpua-bf178logstatsplain d---------phpua-cod178logstatsplain d---------phpua-engine178logstatsplain d---------phpua-hl178logstatsplain d---------phpua-q3178logstatsplain d---------phpua-ut178logstatsplain d---------phpua-ut2003178logstatsplain d---------pinball178logstatsplain d---------pioneers146logstatsplain d---------pipenightdreams178logstatsplain d---------pipepanic178logstatsplain d---------planeshift178logstatsplain d---------plonx109logstatsplain d---------pmars-sdl141logstatsplain d---------pmars178logstatsplain d---------polypuzzle178logstatsplain d---------pongix178logstatsplain d---------pouetchess146logstatsplain d---------powermanga217logstatsplain d---------powwow178logstatsplain d---------ppracer146logstatsplain d---------prboom178logstatsplain d---------primateplunge146logstatsplain d---------ptkei178logstatsplain d---------pvpgn258logstatsplain d---------py-sgflib146logstatsplain d---------py-sgfsummary109logstatsplain d---------py-ski109logstatsplain d---------pyching146logstatsplain d---------pydance217logstatsplain d---------pykawari178logstatsplain d---------pysol-cardsets146logstatsplain d---------pysol-music146logstatsplain d---------pysol178logstatsplain d---------pysycache-lang146logstatsplain d---------pysycache-themes146logstatsplain d---------pysycache178logstatsplain d---------pythonchess146logstatsplain d---------q15141logstatsplain d---------q3base178logstatsplain d---------q3cellshading178logstatsplain d---------qcc109logstatsplain d---------qccx178logstatsplain d---------qgo178logstatsplain d---------qix334logstatsplain d---------qkmj185logstatsplain d---------qnetchess141logstatsplain d---------qnetwalk146logstatsplain d---------qonk178logstatsplain d---------qstat178logstatsplain d---------quake-data190logstatsplain d---------quake-dpmod146logstatsplain d---------quake-extras185logstatsplain d---------quake-reaper146logstatsplain d---------quake-source222logstatsplain d---------quake2-ctf178logstatsplain d---------quake2-data222logstatsplain d---------quake2-extras109logstatsplain d---------quake2-relay109logstatsplain d---------quake2-rogue141logstatsplain d---------quake2-source178logstatsplain d---------quake2-xatrix141logstatsplain d---------quake2forge217logstatsplain d---------quake2lnx178logstatsplain d---------quake2max178logstatsplain d---------quake3-data222logstatsplain d---------quake3-excessive146logstatsplain d---------quake3-freezetag146logstatsplain d---------quake3-osp146logstatsplain d---------quake3-ra3146logstatsplain d---------quake3-rq3146logstatsplain d---------quake3-ut146logstatsplain d---------quake3-wfa146logstatsplain d---------quake3178logstatsplain d---------quakeforge178logstatsplain d---------quaqut141logstatsplain d---------qudos178logstatsplain d---------quetoo178logstatsplain d---------quit109logstatsplain d---------qwdtools73logstatsplain d---------r1q2178logstatsplain d---------race178logstatsplain d---------redeclipse178logstatsplain d---------reminiscence217logstatsplain d---------rfksay146logstatsplain d---------ri-li146logstatsplain d---------robocode178logstatsplain d---------robotfindskitten141logstatsplain d---------rockdodger178logstatsplain d---------rocksndiamonds178logstatsplain d---------rottdc217logstatsplain d---------rt2-demo178logstatsplain d---------rtb146logstatsplain d---------rtcw178logstatsplain d---------rubix109logstatsplain d---------ruby-exmars146logstatsplain d---------sampsvr178logstatsplain d---------sarien141logstatsplain d---------sauerbraten178logstatsplain d---------scare141logstatsplain d---------scid178logstatsplain d---------scorched3d178logstatsplain d---------scourge-data146logstatsplain d---------scourge141logstatsplain d---------scramble178logstatsplain d---------scummvm-tools146logstatsplain d---------scummvm109logstatsplain d---------sdb141logstatsplain d---------sdlquake2217logstatsplain d---------sdlroids146logstatsplain d---------sdlsand109logstatsplain d---------seabattle178logstatsplain d---------seahaven141logstatsplain d---------senken146logstatsplain d---------senso109logstatsplain d---------sex148logstatsplain d---------sfbol141logstatsplain d---------shaaft178logstatsplain d---------shootingstar178logstatsplain d---------six146logstatsplain d---------sjeng109logstatsplain d---------sl146logstatsplain d---------slashem-tty217logstatsplain d---------slige146logstatsplain d---------slump141logstatsplain d---------slune178logstatsplain d---------smiley141logstatsplain d---------sokoban217logstatsplain d---------sol178logstatsplain d---------solarconquest178logstatsplain d---------solarwolf146logstatsplain d---------sopwith146logstatsplain d---------spacearyarya146logstatsplain d---------spacehulk178logstatsplain d---------speak146logstatsplain d---------spellcast178logstatsplain d---------speyes141logstatsplain d---------spicetrade141logstatsplain d---------spider178logstatsplain d---------ssamtse217logstatsplain d---------ssc178logstatsplain d---------starfighter178logstatsplain d---------starlanes141logstatsplain d---------stepbill146logstatsplain d---------stormbaancoureur178logstatsplain d---------stratagus180logstatsplain d---------stroq146logstatsplain d---------sturmbahnfahrer178logstatsplain d---------stvef-paks110logstatsplain d---------stvef-server185logstatsplain d---------sudoku141logstatsplain d---------sudoku_solver109logstatsplain d---------sudsol109logstatsplain d---------super_methane_brothers185logstatsplain d---------supertux146logstatsplain d---------sxsame178logstatsplain d---------tads178logstatsplain d---------taipan178logstatsplain d---------tank178logstatsplain d---------taxipilot178logstatsplain d---------tecnoballz217logstatsplain d---------teg178logstatsplain d---------tenebrae217logstatsplain d---------tetrinet-x178logstatsplain d---------tetrinet148logstatsplain d---------textmaze109logstatsplain d---------thevalley109logstatsplain d---------thudboard178logstatsplain d---------tileworld146logstatsplain d---------timeseal153logstatsplain d---------tinymux146logstatsplain d---------tkmoo178logstatsplain d---------tksol146logstatsplain d---------tmw146logstatsplain d---------tomatoes109logstatsplain d---------tome178logstatsplain d---------toppler185logstatsplain d---------torcs178logstatsplain d---------tornado178logstatsplain d---------torrent178logstatsplain d---------toycars178logstatsplain d---------trackballs178logstatsplain d---------tractorgen141logstatsplain d---------traindirector178logstatsplain d---------tremor217logstatsplain d---------tremulous217logstatsplain d---------trigger146logstatsplain d---------trimines146logstatsplain d---------trojka217logstatsplain