WITH digits AS ( SELECT 0 AS digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ), ct_mints AS ( SELECT CAST(REGEXP_EXTRACT(LOWER(content_decode), '([0-9]+)\\.ordimap$', 1) AS INT) AS i_name, block_time, id, number, content_decode, genesis_fee, genesis_block_height, address FROM ordinals.inscriptions_holders WHERE SPLIT(content_type, ';') [0] IN ('text/plain') AND JSON5_TO_MAP(content_decode) IS NULL AND LOWER(content_decode) LIKE '%.ordimap' ), ct_asset_number AS ( SELECT i_name FROM ct_mints WHERE i_name IS NOT NULL AND i_name BETWEEN 0 AND 20000 ), number_series AS ( SELECT a.digit + (10 * b.digit) + (100 * c.digit) + (1000 * d.digit) + (10000 * e.digit) AS i_name FROM digits a CROSS JOIN digits b CROSS JOIN digits c CROSS JOIN digits d CROSS JOIN digits e WHERE a.digit + (10 * b.digit) + (100 * c.digit) + (1000 * d.digit) + (10000 * e.digit) <= 20000 ), missing_owo AS ( SELECT ns.i_name FROM number_series ns LEFT JOIN ct_asset_number ct ON ns.i_name = ct.i_name WHERE ct.i_name IS NULL ) SELECT i_name || '.ordimap' AS Available FROM missing_owo ORDER BY i_name ASC;