class CoindirectExchange extends BaseExchange {

  @Override
  protected void initServices() {
    this.marketDataService = new CoindirectMarketDataService(this);
    this.accountService = new CoindirectAccountService(this);
    this.tradeService = new CoindirectTradeService(this);
  }

  @Override
  public ExchangeSpecification getDefaultExchangeSpecification() {
    ExchangeSpecification spec = new ExchangeSpecification(this.getClass());
    spec.setSslUri("https://api.coindirect.com");
    spec.setHost("www.coindirect.com");
    spec.setPort(80);
    spec.setExchangeName("Coindirect");
    spec.setExchangeDescription("Coindirect Exchange.");
    AuthUtils.setApiAndSecretKey(spec, "coindirect");
    return spec;
  }

  @Override
  public void remoteInit() {<FILL_FUNCTION_BODY>}
}

    Map<Instrument, InstrumentMetaData> currencyPairs = exchangeMetaData.getInstruments();

    CoindirectMarketDataService coindirectMarketDataService =
        (CoindirectMarketDataService) marketDataService;

    try {
      List<CoindirectMarket> coindirectMarketList =
          coindirectMarketDataService.getCoindirectMarkets(1000);

      for (CoindirectMarket market : coindirectMarketList) {
        CurrencyPair currencyPair = CoindirectAdapters.toCurrencyPair(market.symbol);
        InstrumentMetaData staticMeta = currencyPairs.get(currencyPair);
        currencyPairs.put(
            currencyPair,
            new InstrumentMetaData.Builder()
                .tradingFee(staticMeta.getTradingFee())
                .minimumAmount(market.minimumQuantity)
                .maximumAmount(market.maximumQuantity)
                .priceScale(staticMeta.getPriceScale())
                .feeTiers(staticMeta.getFeeTiers())
                .build());
      }

    } catch (IOException exception) {

    }
  
<methods>public non-sealed void <init>() ,public void applySpecification(org.knowm.xchange.ExchangeSpecification) ,public org.knowm.xchange.service.account.AccountService getAccountService() ,public List<org.knowm.xchange.instrument.Instrument> getExchangeInstruments() ,public org.knowm.xchange.dto.meta.ExchangeMetaData getExchangeMetaData() ,public org.knowm.xchange.ExchangeSpecification getExchangeSpecification() ,public org.knowm.xchange.service.marketdata.MarketDataService getMarketDataService() ,public java.lang.String getMetaDataFileName(org.knowm.xchange.ExchangeSpecification) ,public SynchronizedValueFactory<java.lang.Long> getNonceFactory() ,public org.knowm.xchange.service.trade.TradeService getTradeService() ,public void remoteInit() throws java.io.IOException, org.knowm.xchange.exceptions.ExchangeException,public java.lang.String toString() <variables>protected org.knowm.xchange.service.account.AccountService accountService,protected org.knowm.xchange.dto.meta.ExchangeMetaData exchangeMetaData,protected org.knowm.xchange.ExchangeSpecification exchangeSpecification,protected final Logger logger,protected org.knowm.xchange.service.marketdata.MarketDataService marketDataService,private final SynchronizedValueFactory<java.lang.Long> nonceFactory,protected org.knowm.xchange.service.trade.TradeService tradeService