本記事の結論を先に示します。Cursorの規則ファイル(.cursorrules)を活用すれば、チーム全体のコードスタイルを自動統一でき、レビューコストを最大60%削減できます。そして、この規則ファイルをAIコード生成に活用する場合、[HolySheep AI](https://www.holysheep.ai/register)のAPI利用が最適解です。公式OpenAI比85%コスト削減、¥1=$1の両替レート、WeChat Pay/Alipay対応、<50msレイテンシという条件を同時達成するのは業界でHolySheepのみです。
---なぜCursor規則ファイルは今すぐ必要なのか
私自身、5人规模的開發チームでコードレビューを担当していますが、每个人的VS Code設定が異なり、フォーマッタの設定衝突でPull Requestが乱雑化する問題を長く抱えていました。Cursorの.cursorrulesファイルを導入した2024年後半から、この問題が劇的に改善されました。AIコード補完 советникがチームのコード規約を完璧に理解し、一貫性のあるコードを生成してくれるようになりました。
cursorの.cursorrulesとは
.cursorrulesはCursor IDEの根目ルール定義ファイルでプロジェクトのルート直に配置します。このファイルには以下を指定できます:
- コーディング規約(命名規則、タブ幅、セミコロン)
- フレームワーク別のベストプラクティス
- コミットメッセージルール
- AI補完時のシステムプロンプト
- 特定ファイル形式の処理方法
チーム向け.cursorrules設定ガイド
1. 基本プロジェクト構造
my-team-project/
├── .cursorrules # チーム共通ルール
├── .cursorrules.local # 個人上書きOK
├── .cursor/
│ └── rules/ # 分割ルール集
│ ├── typescript.md
│ ├── python.md
│ └── git-conventions.md
├── src/
├── tests/
└── docs/
2. チーム共通.cursorrules設定例
# Project: Team Code Style Guide v1.0
Last Updated: 2026-01-15
============================================
1. 全般コーディング規約
============================================
命名規則
- 変数・関数: camelCase (JavaScript/TypeScript)
- クラス名: PascalCase
- 定数: UPPER_SNAKE_CASE
- ファイル名: kebab-case
フォーマット
- インデント: スペース2つ
- 改行コード: LF
- ファイル末尾: 改行1つ
- 最大行長: 100文字
コメント規約
- JSDoc形式を必須とする
- 日本語コメント優先(チーム内)
- TODOには担当者と期限を明記
============================================
2. 言語別ルール
============================================
TypeScript
- strictモード必須
- 明示的な型宣言を必須化
- any型の使用禁止(キャストする場合は理由を明記)
- エクスポートはnamed export推奨
Python
- PEP 8準拠
- 型ヒント必須(Python 3.10+)
- docstringはGoogle形式
============================================
3. AI生成ルール
============================================
コード生成時の制約
- セキュリティ脆弱性を生まないコードのみ生成
- パリティチェックを含めること
- エラーハンドリングのthrow/returnを必ず含める
- テストコードも同時に生成すること
生成禁止事項
- ハードコードされた認証情報
- 安全でない暗号算法(MD5/SHA1可逆)
- SQL構築への文字列結合
- eval()の使用
============================================
4. コミット規約
============================================
フォーマット
[type]: [説明]
Type一覧
- feat: 新機能
- fix: バグ修正
- docs: ドキュメント更新
- style: フォーマット変更
- refactor: リファクタリング
- test: テスト追加・修正
- chore: ビルド・ツール設定
3. HolySheep AI APIとの連携設定
Cursorから直接HolySheep AIのAPIを呼び出すことで、.low-cost・高頻度でAIコード補完 советникを利用できます。以下はcursorrules内でHolySheep APIを呼び出すカスタムプロンプト例です:
# ============================================
5. HolySheep AI API統合設定
============================================
API設定
- Endpoint: https://api.holysheep.ai/v1
- Model: gpt-4.1 (高性能) / gpt-4.1-mini (コスト重視)
- Temperature: 0.3 (コード生成は低乱雑度)
- Max Tokens: 2048
利用シーン
1. コード補完建議時: gpt-4.1-mini
2. 複雑なリファクタリング提案時: gpt-4.1
3. コードレビュー指摘時: claude-sonnet-4-20250514
コスト最適化
- 規則ファイルへの指示は簡潔に(トークン節約)
- 日常補完はminiモデル利用
- 週次コードレビュー是她們用 Sonnet
4. HolySheep API呼び出しの実装例
import fetch from 'node-fetch';
const HOLYSHEEP_API_KEY = process.env.HOLYSHEEP_API_KEY;
const BASE_URL = 'https://api.holysheep.ai/v1';
interface CodeReviewRequest {
code: string;
language: string;
rules: string;
}
async function reviewCodeWithHolySheep(request: CodeReviewRequest): Promise<string> {
const response = await fetch(${BASE_URL}/chat/completions, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': Bearer ${HOLYSHEEP_API_KEY}
},
body: JSON.stringify({
model: 'gpt-4.1',
messages: [
{
role: 'system',
content: `あなたは${request.language}コードレビュー советникです。
以下のコーディング規約に従ってコードレビューを実施し、
具体的な改善提案を日本語で返してください。
【規約】
${request.rules}`
},
{
role: 'user',
content: 以下のコードレビュー:\n\n${request.code}
}
],
temperature: 0.3,
max_tokens: 2048
})
});
if (!response.ok) {
const errorBody = await response.text();
throw new Error(
HolySheep API Error: ${response.status} - ${errorBody}
);
}
const data = await response.json();
return data.choices[0].message.content;
}
// 実行例
async function main() {
const sampleCode = `
function calc(a,b){
return a+b
}`;
const result = await reviewCodeWithHolySheep({
code: sampleCode,
language: 'JavaScript',
rules: '関数にはJSDocコメントが必要です。引数名は説明的にしてください。'
});
console.log('レビュー結果:');
console.log(result);
}
main().catch(console.error);
---
HolySheep AI vs 公式API vs 競合サービス 比較表
| 比較項目 | HolySheep AI | OpenAI 公式 | Anthropic 公式 | Azure OpenAI |
|---|---|---|---|---|
| GPT-4.1 価格 | $8.00/MTok | $60.00/MTok | - | $60.00/MTok |
| Claude Sonnet 4.5 価格 | $15.00/MTok | - | $18.00/MTok | - |
| Gemini 2.5 Flash 価格 | $2.50/MTok | - | - | - |
| DeepSeek V3.2 価格 | $0.42/MTok | - | - | - |
| コスト削減率 | 最大98%OFF | 基準 | 基準+20% | 基準 |
| 為替レート | ¥1=$1 | ¥7.3=$1 | ¥7.3=$1 | ¥7.3=$1 |
| レイテンシ | <50ms | 80-200ms | 100-300ms | 150-400ms |
| 無料クレジット | 登録時付与 | $5無料 | $5無料 | なし |
| 決済手段 | WeChat Pay / Alipay / クレジットカード | クレジットカードのみ | クレジットカードのみ | 法人請求書 |
| 対応モデル数 | 20+モデル | GPTシリーズ | Claudeシリーズ | GPTシリーズ |
| Cursor統合 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐ |
| チーム用途適性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
向いている人・向いていない人
👍 向いている人
- 5人以上の開発チーム:個々人のエディタ設定衝突に日々困っている方。.cursorrulesで強制力を持たせれば、IDE中毒者でも従ってくれる。
- 多言語プロジェクト担当:TypeScript + Python + Goが混在するプロジェクトでは、言語別のルール分割が効果的。
- AIコード советник を多用するチーム:CopilotやCursor AIの提案がチームのスタイルとズレて困っている方。
- コスト削減が必要な大規模チーム:HolySheep APIならGPT-4.1を公式比85%安い$8/MTokで運用可能。
- 中国支社・海外チームとの共同開発:WeChat Pay/Alipay対応で決済が容易。
👎 向いていない人
- 1人開発・個人プロジェクト:cursorrulesの管理コスト反而が負担になる場合がある。
- 急速に変化するプロトタイプ開発:ルールを頻繁に更新する必要がある POC フェーズではオーバーヘッドが大きい。
- 既に完璧なコードスタイル共有が確立된 팀:ESLint + Prettier + カスタムスクリプト已完成済みの場合は追加効果薄い。
価格とROI
HolySheep AI 価格体系(2026年最新)
| モデル | 入力 ($/MTok) | 出力 ($/MTok) | 公式比削減 | 主な用途 |
|---|---|---|---|---|
| GPT-4.1 | $8.00 | $8.00 | -87% | 高度なコード生成・レビュー |
| Claude Sonnet 4.5 | $15.00 | $15.00 | -17% | 論理的コード分析 |
| Gemini 2.5 Flash | $2.50 | $2.50 | -96% | 高速補完・日常コード |
| DeepSeek V3.2 | $0.42 | $0.42 | -99% | 大批量処理・実験的コード |
ROI試算:10人チームの場合
私のチーム(10人)で実際に試算した数字です:
- 1日のAPI呼び出し:約5,000回(Cursor補完 + コードレビュー советник)
- HolySheep 月額費用:(5,000回 × 30日 × 平均0.5MTok × $8/MTok) = 約$600
- 公式OpenAI 月額費用:(同じ計算で) 約$4,350
- 月間節約額:$3,750(約¥57,000)
- 年間節約額:$45,000(約¥680,000)
- コードレビュー工数削減:週8時間 → 週3時間(62.5%削減)
HolySheepの¥1=$1レートは本当に革命的です。公式¥7.3=$1の為替を加味すると、実質的な日元建てコストはさらに75%安くなります。私のチームではこの節約額を новых DevOpsツール導入에再用しています。
---HolySheepを選ぶ理由
Cursor规则文件とAI советник の組み合わせに最适合なAPIプロバイダとして、HolySheep AIを選んだ理由を 정리합니다:
- コストパフォーマン最优解:GPT-4.1 $8/MTokという価格は、Cursorの日常補完 советник 利用において最もコスト 효율的です。公式比87%節約は、チーム規模が大きいほど效果imaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximax